← Home
⚠️
NOTA EDUCATIVA: Questa pagina illustra la crittografia a curva ellittica in modo interattivo. Le chiavi generate negli step 6–7 sono a soli fini dimostrativi β€” non usarle per bitcoin reali. Nessun dato viene trasmesso a server esterni. Tutto gira nel tuo browser.
1
2
3
4
5
6
7
// matematica Β· crittografia Β· secp256k1 Β· ECDSA

La matematica dietro
ogni chiave Bitcoin

Esplora passo dopo passo la crittografia a curva ellittica: dalla geometria delle curve reali fino alla firma digitale ECDSA che protegge ogni transazione Bitcoin.

// step 01 / 07
La Curva Ellittica
La forma geometrica alla base di Bitcoin β€” yΒ² = xΒ³ + 7
// teoria
Cos'Γ¨ una curva ellittica?

Una curva ellittica Γ¨ definita dall'equazione generale:

Forma generale di Weierstrass
yΒ² = xΒ³ + ax + b

Bitcoin usa la curva chiamata secp256k1, dove a=0 e b=7:

secp256k1 β€” usata da Bitcoin
yΒ² = xΒ³ + 7

La curva Γ¨ simmetrica rispetto all'asse x: per ogni punto (x, y) sulla curva, esiste il suo simmetrico (x, βˆ’y). Questo significa che ogni valore di x positivo corrisponde a due punti: uno con y positivo e uno con y negativo.

Un punto sulla curva Γ¨ qualunque coppia (x, y) che soddisfa l'equazione. Nella crittografia Bitcoin, i punti vengono calcolati su un campo finito (modulo un numero primo enorme), ma la geometria di base rimane la stessa.

PerchΓ© questa curva? La forma yΒ² = xΒ³ + 7 Γ¨ scelta perchΓ© ha proprietΓ  matematiche che rendono le operazioni su di essa computazionalmente sicure. I parametri di secp256k1 sono stati scelti in modo trasparente e verificabile, senza "backdoor".
Curva yΒ² = xΒ³ + 7 su ℝ β€” range x: [βˆ’3, 4], y: [βˆ’6, 6]
Punti evidenziati sulla curva
P₁ = (βˆ’1, +√6) β‰ˆ (βˆ’1, +2.449)
P₁' = (βˆ’1, βˆ’βˆš6) β‰ˆ (βˆ’1, βˆ’2.449)
Pβ‚‚ = (0, +√7) β‰ˆ (0, +2.646)
Pβ‚‚' = (0, βˆ’βˆš7) β‰ˆ (0, βˆ’2.646)
P₃ = (1, +√8) β‰ˆ (1, +2.828)
P₃' = (1, βˆ’βˆš8) β‰ˆ (1, βˆ’2.828)
// step 02 / 07
Addizione di Punti P + Q
La regola geometrica che dΓ  struttura di gruppo alla curva
// geometria
La regola della corda e della tangente

Per sommare due punti P e Q su una curva ellittica, si usa la regola della corda:

  1. Traccia la retta che passa per P e Q
  2. Trova il terzo punto di intersezione βˆ’R con la curva
  3. Rifletti βˆ’R rispetto all'asse x β†’ ottieni R = P + Q

Il risultato Γ¨ sempre sulla curva: questa Γ¨ la proprietΓ  magica che rende l'addizione ellittica un'operazione di gruppo chiusa.

Formule per P + Q (caso generico)
Ξ» = (yβ‚‚ βˆ’ y₁) / (xβ‚‚ βˆ’ x₁)
x₃ = λ² βˆ’ x₁ βˆ’ xβ‚‚
y₃ = Ξ»(x₁ βˆ’ x₃) βˆ’ y₁

Il caso speciale P = Q (raddoppio) usa la tangente alla curva nel punto P:

Raddoppio: 2P (tangente in P)
Ξ» = (3x₁² + a) / (2y₁) ← per secp256k1: a=0
x₃ = λ² βˆ’ 2x₁
y₃ = Ξ»(x₁ βˆ’ x₃) βˆ’ y₁
PerchΓ© la riflessione? La retta interseca sempre la curva in esattamente 3 punti (contati con molteplicitΓ ). Il terzo punto viene riflesso per garantire che l'operazione sia un omomorfismo di gruppo β€” ovvero che rispetti le proprietΓ  associativa e commutativa.
P = (βˆ’1, √6) Β· Q = (1, √8) β€” premi il bottone per animare
Risultato
β€”
// step 03 / 07
Il Campo Finito Fp
yΒ² ≑ xΒ³ + 7 (mod p) β€” dalla geometria continua alla griglia discreta
// algebra modulare
PerchΓ© usare i numeri interi?

La curva reale usa numeri in virgola mobile con precisione infinita β€” impraticabile per un computer. Invece, Bitcoin lavora su un campo finito: tutti i calcoli sono fatti modulo un numero primo enorme p.

L'equazione diventa:

Curva su F_p (p primo)
yΒ² ≑ xΒ³ + 7 (mod p)
dove x, y ∈ {0, 1, 2, ..., pβˆ’1}

I punti non formano piΓΉ una curva liscia, ma un insieme discreto di punti interi su una griglia p Γ— p. La struttura di gruppo Γ¨ tuttavia preservata: l'addizione di punti funziona esattamente come prima, ma con aritmetica modulare.

Nell'esempio interattivo a destra usiamo p = 23 (piccolo per visualizzare). In Bitcoin, p Γ¨ un numero a 256 bit.

Numero di punti su F_23
Trovati: ? punti
+ il "punto all'infinito" (elemento neutro)
La sicurezza viene da qui: su un campo finito con p β‰ˆ 2²⁡⁢, esistono circa 2²⁡⁢ punti. Trovare k dato kΓ—G Γ¨ computazionalmente impossibile β€” ci vorrebbero piΓΉ anni dell'etΓ  dell'universo anche con tutti i computer esistenti.
yΒ² ≑ xΒ³ + 7 (mod 23) β€” griglia 23Γ—23
Tutti i punti su F₂₃:
Calcolo...
// step 04 / 07
Moltiplicazione Scalare kΓ—G
Il cuore della crittografia β€” "saltare" su una griglia in modo imprevedibile
// algoritmo
Come si moltiplica un punto per uno scalare?

kΓ—G significa aggiungere il punto G a se stesso k volte: G + G + G + … (k volte). Con k = 2²⁡⁢ questo sarebbe impossibile direttamente, ma si usa l'algoritmo double-and-add:

Double-and-Add (pseudocodice)
R = ∞ (punto neutro)
per ogni bit di k (dal meno significativo):
  se bit = 1: R = R + G
  G = G + G (raddoppia)
ritorna R

Con soli logβ‚‚(k) operazioni si ottiene il risultato. Per k a 256 bit: massimo 512 operazioni.

La cosa affascinante Γ¨ che kΓ—G sembra saltare casualmente sulla griglia quando k cresce di 1. Non c'Γ¨ nessuna relazione visibile tra k e la posizione di kΓ—G β€” questo Γ¨ il nucleo matematico della sicurezza Bitcoin.

Il Problema del Logaritmo Discreto (ECDLP): Dato Q = kΓ—G, trovare k Γ¨ computazionalmente impossibile. Eppure calcolare kΓ—G dato k Γ¨ facile. Questa asimmetria Γ¨ ciΓ² che rende sicure le chiavi Bitcoin.
k corrente
1
kΓ—G β€” coordinate
β€”
yΒ² ≑ xΒ³ + 7 (mod 97) β€” trascina il cursore
// step 05 / 07
secp256k1: I Parametri Reali
I valori fissati pubblicamente che definiscono il sistema crittografico di Bitcoin
// standard
Parametri pubblici fissi

In Bitcoin, tutti usano esattamente gli stessi parametri per la curva ellittica. Questi valori sono definiti nello standard secp256k1 e sono completamente pubblici. La sicurezza non dipende dalla segretezza di questi parametri, ma dall'impossibilitΓ  matematica di invertire la moltiplicazione scalare.

Il Punto Generatore G Γ¨ un punto speciale fisso sulla curva. Tutti i wallet Bitcoin del mondo derivano le loro chiavi moltiplicando G per una chiave privata diversa.

PerchΓ© "k1" nel nome? "sec" = Standards for Efficient Cryptography. "p" = campo primo. "256" = 256 bit. "k1" = tipo Koblitz, variante 1. Koblitz curves hanno la proprietΓ  di ammettere algoritmi di calcolo particolarmente efficienti.
~2²⁡⁢ punti β€” piΓΉ del numero stimato di atomi nell'universo osservabile (~10⁸⁰). Anche con tutti i computer del pianeta, cercare esaustivamente k sarebbe impossibile.
Chiave Privata
k
Γ—
Generatore
G
=
Chiave Pubblica
Q
β†’ Facile: calcola Q dato k (double-and-add, ~512 operazioni)
← Impossibile: trova k dato Q (ECDLP β€” problema su curva ellittica)
p β€” il primo campo (256 bit)
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
a β€” coefficiente quadratico
0x00  (curva semplificata: yΒ² = xΒ³ + b)
b β€” coefficiente costante
0x07
Gx β€” coordinata X del Punto Generatore
79BE667E F9DCBBAC 55A06295 CE870B07
029BFCDB 2DCE28D9 59F2815B 16F81798
Gy β€” coordinata Y del Punto Generatore
483ADA77 26A3C465 5DA4FBFC 0E1108A8
FD17B448 A6855419 9C47D08F FB10D4B8
n β€” ordine del gruppo (numero di punti)
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE
BAAEDCE6 AF48A03B BFD25E8C D0364141
// step 06 / 07
Chiave Privata β†’ Chiave Pubblica
Q = kΓ—G β€” la funzione a senso unico che protegge i tuoi bitcoin
// derivazione
Da un numero segreto a una chiave pubblica

La chiave privata k Γ¨ un numero casuale a 256 bit. Deve rimanere segreto β€” chi lo conosce controlla i bitcoin associati.

La chiave pubblica Q = kΓ—G Γ¨ il risultato della moltiplicazione scalare del Punto Generatore G per k. È completamente sicuro condividere Q pubblicamente β€” da Q Γ¨ impossibile ricavare k.

La chiave pubblica viene poi compressa: si conserva solo la coordinata X piΓΉ un prefisso (02 se Y Γ¨ pari, 03 se Y Γ¨ dispari) β€” questo funziona perchΓ© dalla x si puΓ² sempre ricostruire la y (±√(xΒ³+7 mod p)).

Chiave pubblica compressa
Se Y pari:  02 + X (33 byte totali)
Se Y dispari: 03 + X (33 byte totali)
Non compressa: 04 + X + Y (65 byte)
Algoritmo Double-and-Add su secp256k1: il calcolo usa BigInt JavaScript e le stesse costanti di secp256k1. Ci vogliono alcuni secondi perchΓ© la moltiplicazione su un campo a 256 bit richiede molte operazioni modulo un numero enorme.
Chiave Privata (64 caratteri hex)
Coordinata X (Qx)
β€”
Coordinata Y (Qy)
β€”
Chiave Pubblica Compressa (33 byte)
β€”
Prefisso
β€”
// step 07 / 07
ECDSA: Firma e Verifica
La prova matematica che possiedi una chiave privata β€” senza rivelarla
// crittografia
Cos'Γ¨ una firma digitale ECDSA?

Con ECDSA (Elliptic Curve Digital Signature Algorithm) puoi firmare un messaggio con la tua chiave privata k. Chiunque abbia la tua chiave pubblica Q puΓ² verificare che la firma sia tua β€” senza che tu abbia rivelato k.

In Bitcoin, ogni transazione contiene una firma ECDSA che prova che il proprietario della chiave privata ha autorizzato il trasferimento.

Firma (sign)
z = SHA256(messaggio)
k_nonce = random()
R = k_nonce Γ— G
r = R.x mod n
s = k_nonce⁻¹ Γ— (z + rΒ·privKey) mod n
firma = (r, s)
Verifica (verify)
w = s⁻¹ mod n
u1 = zΒ·w mod n
u2 = rΒ·w mod n
P = u1Γ—G + u2Γ—Q
valida se P.x ≑ r (mod n)
Il nonce k_nonce Γ¨ critico: deve essere sempre un nuovo numero casuale per ogni firma. Se si riusa lo stesso nonce due volte, la chiave privata puΓ² essere estratta matematicamente dalle due firme. Questo Γ¨ esattamente ciΓ² che accadde alla PlayStation 3.
Coppia di chiavi generata automaticamente
privKey: β€”
pubKey:  β€”
Messaggio da firmare
βœ“ Hai completato il tour di secp256k1!

La conoscenza
dovrebbe essere libera

Bitcoin Report School Γ¨ un progetto open source completamente gratuito. Nessuna pubblicitΓ , nessun tracker, nessun paywall. Se questi strumenti ti sono stati utili, considera una donazione in bitcoin.

Manifesto: La crittografia che protegge i tuoi bitcoin Γ¨ matematica pubblica, accessibile a tutti. Capire come funziona non Γ¨ solo istruttivo β€” Γ¨ un atto di sovranitΓ  digitale. Verifica, non fidarti.
7 Strumenti
100% Open Source
0 Tracker
Bitcoin QR Donazione
⚑ Powered by BTCPay Server β€” self-hosted