Blockchain/Nivel II · Mecánica/2.1 Criptografía/Lección 4
Firmas digitales: ECDSA y Schnorr
El apretón de manos matemático que autoriza los gastos sin exponer la clave
MaterialesUn explorador de bloques que muestra datos de testigosUn gasto nativo de SegWit y un gasto por ruta de clave de Taproot para comparar
Curiosidad
- ¿Cómo demuestra una firma el control de un número secreto sin revelarlo?
- ¿Por qué la PlayStation 3 de Sony y varias billeteras de Bitcoin para Android perdieron sus claves debido al uso reutilizado o de valores aleatorios predecibles?
- ¿Qué hace que las firmas Schnorr sean más pequeñas, más rápidas y capaces de agregación en comparación con ECDSA?
Explorar
- Una firma digital demuestra el control de una clave privada sin revelarla. En Bitcoin, para gastar la salida de una transacción es necesario firmar el hash de dicha transacción con la clave privada correspondiente a la clave pública del script de bloqueo de esa salida. Cualquiera puede verificar la firma utilizando la clave pública y el hash del mensaje. Este mecanismo asegura que solo el holder pueda autorizar transferencias manteniendo al mismo tiempo la privacidad.
- ECDSA, estandarizada en ANSI X9.62 (1999), ha sido el esquema de firma principal de Bitcoin desde 2009. Genera un par de valores (r, s) a partir del hash del mensaje y un nonce secreto k. El valor r es la coordenada x del punto k·G; el valor s es k⁻¹(hash + x·r) mod n, donde x es la clave privada. Dado que cada firma requiere un k aleatorio nuevo, reutilizar o filtrar k permite a un atacante calcular directamente la clave privada.
- La clave de firma de PlayStation 3 de Sony fue comprometida en 2010 cuando fail0verflow demostró que Sony reutilizaba el mismo nonce para todas las firmas. Bitcoin sufrió robos similares en agosto de 2013 debido a una falla en SecureRandom de Android, la cual generaba nonces predecibles. RFC 6979 (2013) resolvió este problema al derivar k de manera determinística a partir de la clave privada y el hash del mensaje, eliminando así la dependencia de fuentes externas de aleatoriedad.
- Las firmas ECDSA son maleables: para un valor r dado, existen dos valores válidos de s (s y n−s). Una tercera parte podría reemplazarla por una firma equivalente, cambiando el ID de la transacción sin invalidarla. La política de Bitcoin requiere una normalización “low-S”, que restringe a s a la mitad inferior del orden de la curva. Esta restricción garantiza que cada mensaje tenga solo una firma canónica por nonce.
- Las firmas Schnorr, patentadas por Claus-Peter Schnorr (patente estadounidense concedida en 1991 y vencida en 2008) y estandarizadas para Bitcoin en BIP340, generan firmas de tamaño fijo de 64 bytes sin la sobrecarga del codificado DER. Son lineales: con un protocolo adecuado, varias claves públicas pueden combinarse en una clave agregada y sus firmas en una sola firma. Esto permite los esquemas multisig MuSig2 que aparecen como salidas de un único firmante en la cadena, reduciendo el tamaño de las transacciones y mejorando la privacidad.
- Taproot se activó en noviembre de 2021 (bloque 709,632), introduciendo soporte nativo para firmas Schnorr en las salidas P2TR. Un gasto mediante una ruta de claves solo necesita una firma de 64 bytes en su “witness”, frente a una firma ECDSA de 71-72 bytes más una clave pública de 33 bytes en el caso de un gasto P2WPKH. El tamaño fijo simplifica el análisis de los datos, y Schnorr permite la verificación por lotes, permitiendo verificar muchas firmas de diferentes claves al mismo tiempo, más rápido que una por una; esta es una funcionalidad que Bitcoin Core aún no utiliza.
Datos clave
- ECDSA (ANSI X9.62, 1999) genera firmas codificadas en DER de aproximadamente 71–72 bytes; Schnorr (BIP340) produce firmas de tamaño fijo de 64 bytes.
- Reutilizar o filtrar el valor aleatorio ECDSA k revela la clave privada: robos de Sony PS3 (2010) y billeteras Android (agosto de 2013).
- RFC 6979 deriva k de manera determinística a partir de la clave privada y el hash del mensaje, eliminando la dependencia de los generadores de números aleatorios.
- Las firmas ECDSA son maleables; la política de Bitcoin impone un valor ‘low-S’ para garantizar una codificación canónica.
- Las firmas Schnorr son lineales: las claves y las firmas pueden agregarse (MuSig2) y verificarse en lotes para mayor eficiencia.
- Taproot se activó en noviembre de 2021 (bloque 709,632), introduciendo soporte nativo para firmas Schnorr en salidas P2TR.
Ejercicio nueve, seis, tres, uno
9ReunirEnumera 9 esquemas de firma digital o tipos de claves. Indica su organismo de estandarización, año, tamaño del resultado y si admiten agregación.
6AgruparAgrupa los 9 en 6 según la complejidad de verificación: de tamaño fijo y lineal, maleable de tamaño variable, canónico de tamaño variable, verificable por lotes, solo para una parte, o híbrido.
3DestilarReduce los 6 a 3 compromisos principales entre el tamaño de la firma, la privacidad y la eficiencia computacional.
1CristalizarEscribe una oración sobre lo que garantiza una firma digital respecto al control de la clave y lo que no revela.
Verificación de hechos
Fechas, cifras y afirmaciones verificadas con las fuentes publicadas que se enumeran a continuación.
- BIP340: Schnorr Signatures for secp256k1 (P. Wuille, J. Nick & T. Ruffing, 2020)
- RFC 6979: Deterministic Usage of DSA and ECDSA (T. Pornin, 2013)
- A. M. Antonopoulos & D. A. Harding, Mastering Bitcoin, 3rd ed. (2023)
- fail0verflow, 'Console Hacking 2010: PS3 Epic Fail', 27C3 (December 2010)