BIP 143 (verificación de firmas en SegWit)
Define el hash de firma (sighash) y el formato de verificación de las transacciones SegWit versión 0. Es donde la clave pública queda revelada en el testigo.
Traducción hecha con ayuda de IA, pendiente de revisión humana. Lee el original (en inglés).
El BIP 143 especifica cómo se calculan y se verifican las firmas de las salidas SegWit versión 0: los tipos de script P2WPKH y P2WSH que introdujo SegWit (BIP 141). Se activó como parte del soft fork de SegWit en el bloque 481,824, el 24 de agosto de 2017.
Tres cambios respecto a la verificación de firmas ECDSA de las salidas legacy, y los tres importaron (el primero es el cambio estructural del BIP 141; el BIP 143 define los otros dos):
- Los datos de la firma pasan al testigo. En los gastos P2PKH legacy, la firma y la clave pública viven en el scriptSig. En SegWit v0 viven en un campo aparte, el testigo (witness), que estructuralmente queda fuera del cuerpo de la transacción. Este es el cambio que corrige la maleabilidad de las transacciones a gran escala: los terceros ya no pueden retocar la codificación de la firma para cambiar el identificador de la transacción (txid) antes de la confirmación.
- El mensaje firmado incluye el monto de la entrada. La verificación ECDSA legacy no se comprometía con cuántos satoshis contenía la salida gastada. Una billetera de hardware que firmaba una transacción tenía que fiarse de lo que el software anfitrión (la computadora a la que está conectada) afirmaba sobre el monto de la entrada, lo que abría un ataque de sobrepago de comisión: un anfitrión malicioso podía engañar al firmante para que gastara más de lo previsto. El BIP 143 lo corrige incluyendo el monto de la entrada en el sighash.
- Otro patrón de cálculo del sighash. El nuevo patrón evita el problema del hash en tiempo cuadrático que afectaba a las transacciones legacy muy grandes, en las que el trabajo total de hash crecía con el cuadrado del tamaño de la transacción (el BIP 143 cita una transacción de 1 MB con 5,569 comprobaciones de firma que tardó unos 25 segundos en verificarse).
Una consecuencia que conviene conocer: el testigo SegWit v0 de un gasto P2WPKH contiene la firma de quien gasta y su clave pública. Hasta el primer gasto, la dirección es un hash de 160 bits de la clave pública; después del primer gasto, la clave pública está en la cadena, en el testigo de esa transacción. Ese es el mecanismo detrás de la clase de direcciones "expuestas por reutilización": una vez gastada, la clave pública queda visible para siempre para cualquiera que lea la cadena.
Sus autores son Johnson Lau y Pieter Wuille. Se activó junto con el BIP 141 (el paraguas de SegWit), el BIP 144 (el formato de retransmisión entre pares de los datos de testigo) y el BIP 147 (la regla de soft fork NULLDUMMY).
Especificación: BIP 143.
Ideas clave
- Especifica el sighash y la verificación para P2WPKH y P2WSH (las salidas SegWit v0)
- Incluye el monto de la entrada en el mensaje firmado: cierra la clase de ataques por sobrepago de comisión
- La estructura de datos del testigo que lleva la clave pública al gastar
Capítulos relacionados
Fuentes (6)
- BIP-143 - Transaction Signature Verification for Version 0 Witness Program
- BIP-141 - Segregated Witness (Consensus layer): P2WPKH witness is signature and pubkey; nonintentional malleability becomes impossible
- BIP-147 - Dealing with dummy stack element malleability: deployed with the same parameters as BIP141 and BIP143
- Bitcoin Core - 0.13.1 release notes: segwit activation parameters, signature covers value, linear scaling of sighash operations (October 2016)
- Bitcoin Core - src/kernel/chainparams.cpp: SegwitHeight = 481824
- mempool.space - Block 481,824 (August 24, 2017)
Referencias externas (2)
Términos relacionados (9)
Publicado el . No hay correcciones registradas para esta página.
Editar esta página en GitHub