¿Qué es SegWit? Explicación técnica

Tiempo de lectura: 7 minutos Que es SegWit

SegWit (abreviatura de Segregated Witness) es una actualización compatible con versiones anteriores del protocolo Bitcoin (es decir, un soft fork o bifurcación suave) que cambia profundamente la estructura de las transacciones al mover los datos de firma (el testigo o witness) a una base de datos separada (segregated). Su objetivo principal es corregir la maleabilidad de las transacciones, pero también aumenta la capacidad transaccional de Bitcoin, mejora la verificación de firmas y facilita futuros cambios de protocolo.

En términos de antigüedad, SegWit no es una idea nueva: la actualización se propuso por primera vez durante 2015, antes de ser formalizada el 21 de diciembre de 2015 por Pieter Wuille y otros desarrolladores de Bitcoin Core. Sin embargo, no se creó hasta mucho más tarde debido a su carácter polémico y al rechazo de los menores. Fue solo en 2017, como parte del compromiso SegWit2X, que la propuesta que permitía SegWit (BIP-91) se bloqueó. La activación de SegWit en la red Bitcoin finalmente tuvo lugar el 24 de agosto de 2017 en el bloque 481.824.

Presentamos SegWit aquí como parte del protocolo Bitcoin pero hay que tener en cuenta que es posible implementar esta actualización dentro de protocolos similares a Bitcoin: esto es lo que han hecho Litecoin, Decred, Vertcoin y Bitcoin Gold por ejemplo.

Una corrección de la maleabilidad de las transacciones

La principal mejora que aporta SegWit es el hecho de que soluciona el problema de la maleabilidad de las transacciones. Esta corrección de maleabilidad hace que sea mucho más fácil implementar los canales de pago que forman la base de la red Lightning. También mejora el uso de ciertos contratos autónomos como los swaps atómicos.

¿Qué es la maleabilidad?

Como sabrás, en Bitcoin cada transacción tiene un identificador (txid) representado como una cadena de caracteres hexadecimales. Por ejemplo, el identificador de la primera transacción entre Satoshi Nakamoto y Hal Finney es:

f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16

Este identificador es una huella digital de la transacción, es decir, el resultado de aplicar una función hash a esa transacción. Por lo tanto, depende de los elementos presentes en la transacción (entradas, salidas, etc.): si se modifica uno de estos elementos, el identificador se cambia por completo.

En Bitcoin, las transacciones clásicas son maleables, es decir, es posible cambiar su identificador sin invalidarlas. ¿Cómo es esto posible? Esto es posible porque las firmas que hacen válida la transacción no cubren todos los datos. De hecho, la transacción se construye primero sin las firmas, luego se firma y finalmente se le agregan las firmas.

Hay dos formas de maleabilidad:

  1. La maleabilidad intrínseca del propio algoritmo de firma (ECDSA). Este último utiliza un número aleatorio para producir una firma: por lo tanto, es suficiente producir una firma con otro número aleatorio para cambiar el identificador de la transacción. Por supuesto, solo el firmante puede llevar a cabo este tipo de manipulación.
  2. La maleabilidad proveniente de los scripts de desbloqueo (scriptSig) que contienen las firmas y que permiten desbloquear efectivamente los fondos presentes en una dirección. De hecho, es posible producir varios scripts diferentes que son totalmente válidos para la misma transacción. Esto significa que cualquiera puede cambiar el ID de una transacción antes de que se incluya en un bloque: esto se llama maleabilidad de terceros.

¿Cómo corregir esta maleabilidad?

Incluso si no es prohibitivo, la maleabilidad de las transacciones puede ser problemática en algunas situaciones. Las propuestas han intentado corregir la maleabilidad de un tercero (BIP-66, BIP-62). Sin embargo, no permitieron deshacerse de la maleabilidad resultante de las firmas. Es en este contexto que SegWit intervino.

Para realizar una corrección completa de la maleabilidad, SegWit simplemente mueve los scripts de desbloqueo que contienen las firmas a una estructura de datos separada que acompaña a la transacción llamada testigo. El cálculo del identificador (txid) ya no tiene en cuenta este testigo separado (Segregated Witness) y se vuelve inmutable, lo que resuelve el problema.

Se crea un segundo identificador (wtxid para el identificador de transacción testigo) para cubrir toda la transacción. Este identificador se incluye con todos los demás identificadores similares en un segundo árbol de Merkle, cuya raíz se coloca en la transacción de recompensa (coinbase) del bloque, de modo que el árbol global aún abarca todos los datos y nadie puede modificar las transacciones sin recalcular la prueba de trabajo.

Al tratarse de un soft fork, las transacciones privadas de su testigo y los bloques que corresponden siguen siendo válidas para los nodos que siguen las viejas reglas, aunque parte de la información se les escape. Los nodos actualizados tienen una visión general y pueden interpretar la nueva estructura.

Un aumento en la capacidad transaccional

Además de corregir la maleabilidad de las transacciones, la actualización de SegWit tiene otro efecto beneficioso importante: aumenta la capacidad transaccional de la red al tiempo que evita un hard fork, como lo requeriría un aumento en el límite de tamaño de bloque. Este aumento es posible al mover los scripts de firma fuera de los bloques tradicionales.

Con SegWit, se implementa una nueva métrica para medir el impacto de las transacciones y los bloques en la red: el peso. De hecho, en lugar de confiar en el tamaño de una transacción que se expresa en bytes (o) y representa la cantidad de datos almacenados en la cadena de bloques, SegWit utiliza un atributo virtual llamado peso, que se expresa en unidades de peso (WU) y se define como:

Peso = 4 × altura base + altura de control

Por lo tanto, es un promedio ponderado del tamaño base (es decir, el tamaño de la transacción sin el testigo) y el tamaño del testigo.

Esta actualización convierte el límite de 1 MB en el tamaño del bloque en un límite que prohíbe que los bloques superen los 4 MWU. Sin embargo, esto no es un aumento de 4 veces en la capacidad de la red. Porque, aunque esta nueva regla prácticamente permite que el tamaño total del bloque SegWit tienda hacia los 4 MB, este bloque requeriría que este bloque contenga un pequeño número de transacciones cada uno con un testigo anormalmente pesado.

Suponiendo la adopción completa de SegWit, uno esperaría un aumento en la capacidad transaccional de la red que oscila entre el 70 y el 100%, es decir, bloques segWit con un tamaño total de 1.7 a 2 MB, lo que en el mejor de los casos podría permitir el procesamiento de 5 a 15 transacciones por segundo.

Finalmente, esta nueva medida ofrece una reducción significativa en las tarifas para las transacciones de SegWit, lo que permite fomentar su uso. Antes de SegWit, las tarifas se medían por el tamaño de la transacción: cuanto más espacio tomaba su transacción, más tarifas tenía que pagar. Ahora, estas tarifas se miden en relación con el peso de la transacción: de hecho, a medida que el peso se convierte en el factor limitante del bloque, se alienta a los mineros a incluir transacciones con una buena relación entre sus tarifas y su peso.

Otras mejoras

De acuerdo con BIP-143, el algoritmo de firma se ha mejorado para las transacciones SegWit. Por un lado, evita hashes redundantes al verificar una firma (el número de hashes evoluciona linealmente y ya no cuadráticamente). Por otro lado, al tener en cuenta los montos de entrada de la transacción, el algoritmo ofrece una mejor seguridad a la firma offline utilizada por billeteras de hardware como el Ledger Nano S.

SegWit también trae versiones de script, lo que hace de esta actualización una herramienta de mejora de protocolo. La versión actual es la versión 0, pero podemos esperar una versión 1 próximamente que probablemente habilitará las firmas de Schnorr y Taproot, una solución que mejora la flexibilidad y confidencialidad de los contratos autónomos.

También han surgido nuevas direcciones con SegWit. En primer lugar, hay 2 nuevos tipos de dirección «nativas»: Pay-to-Witness-Public-Key-Hash (P2WPKH) y Pay-to-Witness-Script-Hash (P2WSH), que son los equivalentes de los tipos P2PKH y P2SH para SegWit. Estas direcciones utilizan un formato llamado bech32: se expresan en base 32, más adecuado para códigos QR, y comienzan con bc1. Por ejemplo, una dirección P2WPKH tendrá el siguiente formato:

bc1qe9s87yw62zu5qe7873x3zh3ahhls7677k4y5jt

Dado que la actualización se implementó como una bifurcación suave, tuvo que seguir siendo compatible con las direcciones antiguas. Es por esta razón que fue necesario inventar direcciones para hacer la transición. Para hacer esto, SegWit utiliza el equivalente de los tipos P2WPKH y P2WSH encapsulados en direcciones P2SH: estos 2 tipos se llaman P2SH-P2WPKH y P2SH-P2WSH y son tipos por derecho propio. Por supuesto, son compatibles con todas las billeteras Bitcoin. Un ejemplo de una dirección P2SH-P2WPKH es:

3KspPat3qWB1eFrxSLqCv6e4ozuxB9Bkya

SegWit trae 4 nuevos tipos de direcciones.

Principales desventajas

Contrariamente a lo que uno podría pensar, SegWit no es en absoluto un cambio menor para Bitcoin: es una profunda reestructuración de las transacciones que trae su parte de complicaciones. Incluso si la actualización se implementó a través de un soft fork, no significa que se haya realizado sin problemas. De hecho, una vez que se activó SegWit, todos los mineros que no respetaron las nuevas reglas tuvieron sus bloques rechazados por la red: ¡la actualización no era opcional para los mineros!

Además, SegWit no fue unánime en la comunidad Bitcoin. Los defensores de la escalabilidad en cadena, los mineros y los grandes actores del mercado generalmente se opusieron a ella. Y algunos miembros de la comunidad estaban presionando para activarlo en 1sala de emergencias Agosto de 2017 a través de un «User Activated Soft Fork». La actualización de SegWit solo se realizó en el contexto del compromiso presentado por SegWit2X, un acuerdo que quería habilitar SegWit mientras aumentaba el límite en el tamaño base de los bloques a 2 MB, pero finalmente no se mantuvo.

Desde un punto de vista técnico, el principal defecto de SegWit es que trae consigo una enorme deuda técnica! SegWit complica profundamente el código básico, por ejemplo, trayendo una nueva interpretación de los scripts relacionados con las nuevas direcciones. Esto es problemático porque Bitcoin es un sistema económico cuya seguridad se basa en la auditoría de un gran número de personas y debe ser simple en su diseño.

SegWit también da como resultado una «relajación de validación» para los nodos que siguen las reglas antiguas: no ven firmas y no las validan, lo que degrada la calidad de la red y obliga a los nodos interesados a actualizarse.

El último gran inconveniente de SegWit es que su adopción es lenta y limitada. Dado que esta es una bifurcación suave, las personas tienen la opción de usar SegWit o no, pero esto afecta directamente las promesas hechas por esta actualización. Actualmente, la adopción de SegWit se está estancando en alrededor del 35%, lo que significa que alrededor del 35% de las transacciones incluyen al menos una entrada desde una dirección de SegWit (P2WPKH, P2WSH, P2SH-P2WPKH o P2SH-P2WSH). El hecho de que esta tasa no se acerque al 100% significa que:

  • El aumento en la capacidad de la red no es tan alto: el tamaño promedio del bloque se mantiene alrededor de 1.2 MB durante el uso máximo.
  • La optimización de la verificación de firmas proporcionada por el BIP-143 es parcial, lo que no resuelve completamente el problema del hash cuadrático.
  • Las nuevas direcciones empeoran la experiencia del usuario y disminuyen la confidencialidad de las transacciones.

Por lo tanto, SegWit es una actualización del protocolo Bitcoin que trae su parte de mejoras. En particular, ayuda a corregir el problema de maleabilidad de la transacción que dificultó la implementación de la red Lightning y a aumentar la capacidad de la red. El hecho de que sea una bifurcación suave hace que SegWit sea compatible con versiones anteriores de Bitcoin, pero SegWit está lejos de ser perfecto: sufre de defectos importantes que compensan esta compatibilidad con versiones anteriores, como su deuda técnica que es sustancial.

¿Cuál es tu opinión sobre este artículo?
(Votos: 0 Promedio: 0)

Últimas noticias sobre Bitcoin

Sobre el autor: María Hernández

María Hernández
Deja un comentario

Este sitio web utiliza cookies propias y de terceros para recopilar información que ayude a optimizar tu visita. No se utilizarán las cookies para recoger información de carácter personal. Puedes aceptar o rechazar su uso siempre que lo desees. Encontrarás más información en nuestra política de cookies. Más información

Los ajustes de cookies en esta web están configurados para «permitir las cookies» y ofrecerte la mejor experiencia de navegación posible. Si sigues usando esta web sin cambiar tus ajustes de cookies o haces clic en «Aceptar», estarás dando tu consentimiento a esto.

Cerrar