Ir al contenido

Secp256k1

De BitcoinWiki

secp256k1 es una curva elíptica normalizada que Bitcoin utiliza para criptografía de clave pública. Es uno de los conjuntos de parámetros de dominio publicados por Standards for Efficient Cryptography Group en SEC 2.[1]

La curva se define sobre el cuerpo primo con p = 2^256 − 2^32 − 977 mediante y^2 = x^3 + 7. SEC 2 especifica además el punto generador G, su orden primo n y cofactor 1. El nombre identifica esos parámetros, no un formato de firma ni una codificación.

Parámetros de dominio

En la nomenclatura SEC, sec designa los estándares, p una curva sobre cuerpo primo, 256 el tamaño del cuerpo, k una curva asociada a Koblitz y 1 el número de secuencia. SEC 2 le asigna un nivel de seguridad estimado de 128 bits y proporciona estos valores exactos:[1]

Parámetro Valor
p FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
a, b 0, 7
G comprimido 0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
n FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
h 1

La estructura asociada a Koblitz permite aritmética especializada, incluido un endomorfismo calculable eficientemente. libsecp256k1 combina estas técnicas con tablas precalculadas y otras optimizaciones. El rendimiento depende de la implementación y no implica un porcentaje universal.[2]

Claves y firmas

Una clave privada de Bitcoin es un escalar dentro del intervalo válido definido por el orden de la curva. La clave pública correspondiente es un punto obtenido multiplicando el generador por ese escalar. La seguridad supone que recuperar el escalar privado desde el punto público es computacionalmente inviable.

Bitcoin utilizó históricamente ECDSA sobre secp256k1. Taproot introdujo firmas Schnorr BIP 340 sobre la misma curva. BIP 340 fija las codificaciones, usa claves públicas de solo coordenada x y define la generación determinista de nonces.[3]

SEC 1 representa un punto público comprimido con prefijo 02 o 03 más la coordenada x, o sin comprimir con 04 más ambas coordenadas.[4] Las claves públicas de 32 bytes y solo coordenada x de BIP 340 son una convención Bitcoin separada y no deben confundirse con ninguna representación SEC 1.

Las carteras deterministas jerárquicas BIP 32 también derivan claves hijas privadas y públicas con secp256k1. Las claves extendidas incluyen código de cadena y metadatos y suelen serializarse con Base58Check, una capa separada de las operaciones de la curva.[5]

Implementación

Una implementación correcta valida escalares y puntos, genera nonces seguros, limita canales laterales y analiza cuidadosamente firmas y claves. Bitcoin Core usa libsecp256k1, con ECDSA, firmas Schnorr compatibles con BIP 340 y código de tiempo constante para operaciones dependientes de secretos.[2]

secp256k1 no cifra archivos de cartera, no almacena claves ni crea por sí sola una dirección. El hashing, los scripts, identificadores de red y codificaciones son capas adicionales.

Véase también

Referencias