Blockchain/Nivel II · Mecánica/2.1 Criptografía/Lección 3
Claves privadas, claves públicas y secp256k1
El número entero, la curva y la puerta de un solo sentido
MaterialesUn explorador de bloques que muestre datos del witnessA. M. Antonopoulos y D. A. Harding, Mastering Bitcoin, 3ª ed. (2023), cap. 4
Curiosidad
- ¿Por qué multiplicar un punto por un número tarda milisegundos, mientras que invertirlo tomaría más tiempo del que tiene el universo?
- ¿Qué hace que la curva secp256k1 sea estructuralmente diferente de las curvas NIST utilizadas en la mayoría de las otras firmas digitales?
- ¿Cómo puede un valor de 32 bytes controlar activos por valor de miles de millones sin revelar quién los controla?
Explorar
- Una clave privada de Bitcoin es un número entero aleatorio entre 1 y n−1, donde n es el orden del punto generador de la curva. Este número n es aproximadamente 1,158 × 10^77, un número de 78 dígitos, no muy por debajo del número estimado de átomos en el universo observable (alrededor de 10^80). La clave pública se obtiene mediante multiplicación escalar: multiplicando este entero k por el punto generador fijo G en la curva elíptica. Dado que G es constante para todos los usuarios de Bitcoin, cada valor único de k produce un punto único y determinista K en la curva.
- La curva secp256k1 está definida por la ecuación y² = x³ + 7 en un campo primo donde p = 2^256 − 2^32 − 977. Este conjunto específico de parámetros fue establecido en el estándar SEC 2 por Certicom. La elección de secp256k1 en 2009 fue inusual; se trata de una curva Koblitz, nombrada en honor a Neal Koblitz, cuya estructura especial (un endomorfismo eficientemente computable) permite una multiplicación escalar más rápida, y cuyos parámetros dejan poco margen para elecciones ocultas, a diferencia de las curvas generadas a partir de semillas aleatorias inexplicables. Satoshi Nakamoto nunca explicó esa selección.
- La multiplicación escalar es rápida porque las implementaciones utilizan el algoritmo de doblar y sumar, procesando la representación binaria de la clave privada bit a bit. Duplicar un punto y sumar otro punto son operaciones básicas en curvas que los ordenadores ejecutan en microsegundos. Sin embargo, invertir esta operación —obtener k a partir de K y G— se conoce como el problema del logaritmo discreto en curva elíptica (ECDLP). No se conoce ningún algoritmo clásico eficiente para resolver el ECDLP en secp256k1; buscar por fuerza bruta en el espacio de claves es computacionalmente inviable, lo que proporciona una seguridad de aproximadamente 128 bits contra ataques clásicos.
- Las claves públicas se serializan en formatos específicos para su almacenamiento y transmisión. Una clave pública sin comprimir tiene 65 bytes de longitud, comenzando con el prefijo 04 seguido de las coordenadas x e y. Una clave pública comprimida tiene 33 bytes, utilizando los prefijos 02 o 03 para indicar la paridad de la coordenada y, así, permitir su reconstrucción a partir únicamente de la coordenada x. Taproot, activado en noviembre de 2021, utiliza una optimización adicional llamada claves solo-x, que tienen 32 bytes y omiten por completo el prefijo, confiando en las propiedades del esquema de firma Schnorr.
- La relación entre las claves privadas y públicas es estrictamente unidireccional. Compartir una clave pública no revela nada sobre la clave privada, ya que el problema del logaritmo discreto sigue sin resolverse para este tamaño de curva. Por el contrario, contar con la clave privada permite calcular de inmediato la clave pública correspondiente. Esta asimetría constituye la base del modelo de propiedad de Bitcoin: cualquiera puede verificar que una firma fue creada por una clave privada específica sin necesidad de verla nunca.
- Para verificar estos mecanismos, abra cualquier explorador de bloques y localice una entrada de transacción. En el caso de un gasto con SegWit nativo (P2WPKH), el “witness” contiene la firma y la clave pública comprimida de 33 bytes; en el caso de un gasto con ruta de clave Taproot, la clave de 32 bytes se encuentra dentro de la propia salida y el “witness” solo contiene la firma. Compare esto con la dirección de la salida anterior: mientras que la dirección es un hash de la clave pública, aquí aparece la clave en su formato original durante el gasto. Tenga en cuenta que las coordenadas de la clave pública son cadenas hexadecimales que representan puntos en la curva, distintas de los hashes de 20 y 32 bytes utilizados en las direcciones de la versión 0 de SegWit.
Datos clave
- La clave privada es un número entero aleatorio entre 1 y n−1, donde n ≈ 1.158 × 10^77.
- secp256k1 está definido por y² = x³ + 7 sobre el campo primo p = 2^256 − 2^32 − 977.
- La multiplicación escalar k·G produce la clave pública; invertirla (ECDLP) es computacionalmente inviable.
- Las claves públicas sin comprimir tienen 65 bytes (prefijo 04); las claves comprimidas tienen 33 bytes (prefijo 02/03).
- Taproot utiliza claves de 32 bytes solo-x, omitiendo por completo la coordenada y el prefijo.
- Secp256k1 es una curva de Koblitz con pocos parámetros inexplicados, elegida por Satoshi en 2009.
Ejercicio nueve, seis, tres, uno
9ReunirEnumera 9 propiedades de secp256k1: su ecuación, el primo del campo, el orden del punto generador, los tamaños de las claves (sin comprimir/comprimidas/solo x), el nivel de seguridad, el origen estándar, el tipo de curva y dos hechos históricos sobre su adopción.
6AgruparAgrupa los 9 en 6: ecuación y campo, generador y orden, formatos de clave, nivel de seguridad, historia de estándares y adopción.
3DestilarReduce las 6 a 3 razones por las que secp256k1 es adecuada para el modelo de propiedad de Bitcoin.
1CristalizarEscribe una oración que indique la operación matemática precisa que transforma un entero privado en un punto público, y nombra el problema que impide revertirla.
Verificación de hechos
Fechas, cifras y afirmaciones verificadas con las fuentes publicadas que se enumeran a continuación.