MSTR Cat

Blockchain/Nivel IV · El protocolo a fondo/4.1 Script/Lección 7

Testigo segregado y maleabilidad de transacciones

El ID inestable, la firma dividida y la solución que desbloqueó Lightning

MaterialesUn explorador de bloques con capacidad de salida en JSONUna cadena hexadecimal de transacción P2PKH anterior a SegWit (de 2016 o antes)Una cadena hexadecimal de transacción P2WPKH posterior a SegWit

Curiosidad

  1. ¿Por qué podría un desconocido cambiar la identidad de una transacción sin afectar su validez?
  2. ¿Cómo al mover las firmas fuera del hash se corrige la maleabilidad manteniéndolas protegidas por el consenso?
  3. ¿Qué es el peso del bloque, y por qué el descuento de los datos de los testigos aumentó la capacidad?

Explorar

  1. Antes de SegWit, el ID de una transacción (txid) era el doble SHA-256 de toda la transacción, incluidas las firmas. Una tercera parte podía recodificar una firma, por ejemplo negando su valor s o cambiando cómo se empujaba al stack, sin invalidarla, y así generar un nuevo txid para el mismo pago. Esta maleabilidad rompía las cadenas no confirmadas: si la transacción hija de Alice hacía referencia a su transacción padre por su ID, una transacción padre manipulada la dejaría huérfana, confundiendo a las billeteras y exchanges que rastreaban los pagos.
  2. En febrero de 2014, Mt. Gox citó este mecanismo para explicar el caos interno durante su colapso, aunque análisis posteriores mostraron que representaba una pequeña parte de las pérdidas reportadas. La vulnerabilidad persistió porque las firmas ECDSA son inherentemente mutables en su representación en bytes; terceros, y tras la implementación de las reglas BIP66 y low-S principalmente los mineros, podían reescribirlas. Esta inestabilidad hacía que no fuera seguro crear canales de pago bidireccionales como Lightning, donde el estado del canal depende de IDs de transacción específicos y predecibles antes de la confirmación.
  3. Segregated Witness (BIP141), activado el 24 de agosto de 2017 en el bloque 481,824, resolvió este problema separando los datos del testigo del cuerpo de la transacción. El txid ahora solo hashea los campos que no son de testigo, lo que lo hace inmutable ante cambios en la codificación de las firmas. Los testigos permanecen en una estructura distinta dentro de la transacción en bruto, pero quedan excluidos del hash de identidad. Las terceras partes ya no pueden cambiar el txid, mientras que las firmas siguen siendo verificadas completamente mediante consenso.
  4. Los datos de los testigos se almacenan a través de un árbol Merkle al que se hace referencia en la transacción coinbase de cada bloque, lo que garantiza que no puedan eliminarse o modificarse sin invalidar el bloque. Aunque están separados del txid, los testigos siguen contando dentro de los límites de tamaño del bloque según una nueva métrica de “peso”: 4,000,000 unidades de peso por bloque. Cada byte que no sea de un testigo cuenta como 4 unidades de peso y cada byte de un testigo como 1, por lo que las transacciones con muchas firmas caben más fácilmente.
  5. BIP143 introdujo un nuevo esquema de hash de firmas que eliminó los costos de hash cuadrático en las transacciones con muchos inputs. BIP141 definió los programas de testigos de versión 0, P2WPKH y P2WSH, que se convirtieron en el estándar para las nuevas direcciones, y BIP144 especificó cómo viajan los datos de testigo entre pares. Estos cambios no solo solucionaron el problema de la maleabilidad, sino que también sentaron las bases para futuras actualizaciones como Taproot, al establecer un marco de programas de testigos versionados que permite la evolución de los scripts sin romper las reglas de consenso existentes.
  6. Abra un explorador de bloques y localice una transacción reciente P2WPKH. Inspecciónela: las firmas aparecen en un campo separado llamado “witness” en lugar de estar en el scriptSig del input, y el txid se calcula sin ellas. Compare esto con una transacción P2PKH anterior a SegWit del año 2016, donde las firmas se encuentran en el scriptSig y, por lo tanto, influyen en el txid. Esta separación visual confirma que los datos de “witness” ya no influyen en la identidad de la transacción.

Datos clave

  • Segregated Witness activado el 24 de agosto de 2017, en el bloque 481,824.
  • La maleabilidad de las transacciones permitió a terceros cambiar un txid modificando la codificación de la firma ECDSA sin invalidar la transacción.
  • BIP141 trasladó las firmas a una estructura de testigos separada, excluida del cálculo del txid.
  • El peso del bloque está limitado a 4,000,000 unidades, y los datos de testigos se descontan por un factor de cuatro en relación con los datos que no son de testigos.
  • BIP143 introdujo un esquema de hash de firmas que eliminó los costos de hash cuadrático para transacciones con muchos ingresos.
  • BIP141 introdujo programas de testigo con número de versión (versión 0: P2WPKH y P2WSH), dejando espacio para versiones posteriores como Taproot.

Ejercicio nueve, seis, tres, uno

9ReunirEnumera 9 consecuencias técnicas o económicas de la maleabilidad de las transacciones antes de 2017. Indica qué usuarios, billeteras, exchanges o desarrolladores de protocolos se vieron afectados.
6AgruparAgrupa los 9 en 6 categorías: inestabilidad del ID, interrupciones de la cadena no confirmada, confusión en exchanges, imposibilidad de canales, mutabilidad en la codificación de firmas y brechas en la protección del consenso.
3DestilarReduce los 6 a las 3 razones principales por las cuales la maleabilidad impidió la existencia de canales de pago escalables antes de SegWit.
1CristalizarEscribe 1 oración sobre cómo separar los datos del testigo del hash del txid corrige simultáneamente la estabilidad de la identificación y permite futuras actualizaciones de scripts.

Verificación de hechos

Fechas, cifras y afirmaciones verificadas con las fuentes publicadas que se enumeran a continuación.

Abrir en la academia interactiva →

EN PT ZH JA KO RU DE FR MS