Vai al contenuto

Secp256k1

Da BitcoinWiki.

secp256k1 è una curva ellittica standardizzata usata da Bitcoin per la crittografia a chiave pubblica. È uno dei gruppi di parametri pubblicati da Standards for Efficient Cryptography Group in SEC 2.[1]

La curva è definita sul campo primo con p = 2^256 − 2^32 − 977 dall'equazione y^2 = x^3 + 7. SEC 2 specifica inoltre il punto generatore G, il suo ordine primo n e cofattore 1. Il nome identifica questi parametri, non un formato di firma o una codifica.

Parametri di dominio

Nella convenzione SEC, sec indica gli standard, p una curva su campo primo, 256 la dimensione del campo, k una curva associata a Koblitz e 1 il numero di sequenza. SEC 2 le attribuisce un livello di sicurezza stimato di 128 bit e fornisce questi valori esatti:[1]

Parametro Valore
p FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
a, b 0, 7
G compresso 0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
n FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
h 1

La struttura associata a Koblitz permette aritmetica specializzata, incluso un endomorfismo calcolabile efficientemente. libsecp256k1 combina queste tecniche con tabelle precalcolate e altre ottimizzazioni. Le prestazioni dipendono dall'implementazione e non implicano una percentuale universale.[2]

Chiavi e firme

Una chiave privata Bitcoin è uno scalare nell'intervallo valido determinato dall'ordine della curva. La chiave pubblica corrispondente è un punto ottenuto moltiplicando il generatore per lo scalare. La sicurezza presume che ricavare lo scalare privato dal punto pubblico sia computazionalmente impraticabile.

Bitcoin ha usato storicamente ECDSA su secp256k1. Taproot ha introdotto firme Schnorr BIP 340 sulla stessa curva. BIP 340 definisce le codifiche, usa chiavi pubbliche con sola coordinata x e stabilisce requisiti per nonce deterministici.[3]

SEC 1 rappresenta un punto pubblico in forma compressa con prefisso 02 o 03 più la coordinata x, oppure non compressa con 04 più entrambe le coordinate.[4] Le chiavi pubbliche BIP 340 di 32 byte con sola coordinata x sono una convenzione Bitcoin distinta e non vanno confuse con le rappresentazioni SEC 1.

I portafogli gerarchici deterministici BIP 32 derivano chiavi figlie private e pubbliche con secp256k1. Le chiavi estese includono chain code e metadati e sono spesso serializzate con Base58Check, livello separato dalle operazioni sulla curva.[5]

Implementazione

Un'implementazione corretta convalida scalari e punti, genera nonce sicuri, limita i canali laterali e analizza con cura firme e chiavi. Bitcoin Core usa libsecp256k1, che implementa ECDSA, firme Schnorr compatibili con BIP 340 e codice a tempo costante per operazioni dipendenti da segreti.[2]

secp256k1 non cifra file di portafoglio, non conserva chiavi e da sola non crea un indirizzo. Hash, script, identificatori di rete e codifiche sono livelli aggiuntivi.

Voci correlate

Note