Introducción
Las firmas Schnorr ofrecen un esquema criptográfico de autenticación de mensajes basado en curvas elípticas que mejora la eficiencia, seguridad y escalabilidad de Bitcoin. Desde la activación de la actualización Taproot en noviembre de 2021, Bitcoin utiliza BIP-340 para integrar Schnorr como método alternativo a ECDSA. A continuación se describe en detalle cómo funcionan estas firmas, su implementación en Bitcoin Core y sus ventajas.
Fundamentos criptográficos de Schnorr
Curvas elípticas y operaciones básicas
Este esquema opera sobre la curva secp256k1, definida por la ecuación y² = x³ 7 sobre un campo primo. Los elementos clave son:
Clave privada (sk): un entero secreto en [1, n−1], donde n es el orden del generador G.
Clave pública (pk): el punto P = sk·G en la curva.
Suma de puntos: operación ⊕ definida en la curva que permite añadir puntos de manera eficiente.
Multiplicación escalar: k·G repite la suma de G consigo mismo k veces.
Algoritmo de firma
Para firmar un mensaje m se siguen estos pasos:
1. Generación de la nonce k: se calcula determinísticamente a partir de sk y m (por BIP-340), evitando fugas de entropía. k debe ser uniforme en [1, n−1].
2. Cálculo del compromiso R: R = k·G. Se toma únicamente la coordenada x de R (xR) y se ajusta un bit de paridad de la coordenada y si es necesario.
3. Desafío e: e = H_bip340(xR ∥ xP ∥ m) mod n, donde H_bip340 es SHA256 aplicado dos veces y truncado.
4. Cálculo de s: s = (k e·sk) mod n.
La firma resultante es el par (xR, s), con un total de 64 bytes.
Algoritmo de verificación
Para verificar (xR, s) sobre m y pk = xP se realiza:
1. Reconstruir el punto R′ a partir de xR y su bit de paridad.
2. Calcular e = H_bip340(xR ∥ xP ∥ m) mod n.
3. Verificar que s·G = R′ ⊕ (e·P). Si la igualdad en la curva se cumple, la firma es válida.
Implementación en Bitcoin (BIP-340)
Especificación de BIP-340
El documento BIP-340 define el formato de firma, la generación determinística de nonces y la función de hash. Algunos puntos clave:
Formato compacto: 32 bytes para xR 32 bytes para s.
No usa componente y de R: la paridad de yR se codifica en el bit menos significativo de xR.
Determinismo: cada firma es única para un par (sk, m), evitando ataques de fugas de nonce.
Integración en Bitcoin Core
Bitcoin Core incorpora esta lógica en la librería libsecp256k1, optimizada en C y ASM. El flujo interno es:
1. Llamada a secp256k1_schnorrsig_sign para generar (xR, s).
2. Serialización en TX: campo witness con 64 bytes.
3. En la verificación, secp256k1_schnorrsig_verify comprueba la igualdad s·G = R′ ⊕ (e·P).
Ventajas y limitaciones
Linealidad: la firma es lineal en las claves, facilitando agregación de firmas.
Agregación y MuSig: múltiples claves pueden combinarse en una firma única reduciendo espacio y mejorando privacidad.
Resistencia a maleabilidad: no existe bifurcación de s ↔ (n–s) como en ECDSA.
Modelo de seguridad: demostrada en el modelo de oráculo aleatorio, reduciéndose a la dificultad del logaritmo discreto.
Limitaciones iniciales: los esquemas de firma agregada requieren protocolos adicionales (MuSig2) para evitar ataques de clave impostora.
Comparación ECDSA vs Schnorr
Característica ECDSA Schnorr
————– —– ——-
Seguridad formal Parcial (se asume sin prueba en ROM) Reducida al logaritmo discreto en ROM
Compacidad 71–73 bytes (DER) 64 bytes
Maleabilidad Sí (s ↔ n–s) No
Agregación Compleja Nativa (MuSig)
Determinismo BIP RFC6979 BIP-340
Conclusión
Las firmas Schnorr, estandarizadas en BIP-340 y activadas con Taproot, mejoran la privacidad, reducen el tamaño de las transacciones y abren la puerta a esquemas de firma compuesta. Gracias a su linealidad y seguridad demostrada, representan la evolución natural sobre ECDSA en Bitcoin y sientan las bases para futuras innovaciones criptográficas en la red.