Sei sulla pagina 1di 10

Curve ellittiche e algoritmo ECDSA Comprare Bitcoin about:reader?url=https://blog.comprarebitcoin.info/curve-ellittiche-e-a...

blog.comprarebitcoin.info

Curve ellittiche e algoritmo ECDSA


Comprare Bitcoin
Mirko Feriotti aka Ziomik
16-22 minuti

[ratings]

Un interessante post dellutente arulbero ci istruisce sullalgoritmo


ECDSA utilizzato da Bitcoin per garantire che i fondi possono
essere spesi solo dai loro legittimi proprietari.

Larticolo viene inserito cos come stato pubblicato sul forum


bitcointalk:

Vediamo una breve trattazione matematica delle curva secp256k1


(cos chiamata, secondo la classicazione Standards for Efficient
Cryptography (SEC), vedi http://www.secg.org/sec2-v2.pdf a
pagina 9), la curva impiegata nel protocollo Bitcoin.algoritmo
ECDSA

Le curve ellittiche in generale hanno equazione y^2 = Ax^3+Bx+C,


e poco hanno a che fare con lellisse, nonostante il loro nome.

In particolare la curva ellittica secp256k1 utilizzata nel mondo


Bitcoin la curva di equazione:

y^2=x^3+7

cio linsieme dei punti P(x,y) del piano cartesiano le cui


coordinate x e y soddisfano quellequazione particolare.

Le coordinate dei punti delle curve ellittiche

I valori che pu assumere la coordinata x (e di conseguenza anche


la coordinata y) non sono per tutti gli infiniti valori reali (come
succede invece a scuola quando si studiano le rette y=ax+b o le
parabole y=ax^2+bx+c) ma sono solo i valori che corrispondono a
elementi di un insieme molto particolare, detto campo, che
indicheremo con K. Anche i numeri reali costituiscono un campo,
nel caso di secp256k1 ovviamente K un sottoinsieme finitodi R,
ma rimane sempre un campo (ovviamente nel senso che
applicazioni pratiche e infinito non vanno daccordo!)

Quindi i punti della curva secp256k1 hanno come coordinate

1 di 10 17/08/17, 07:04
Curve ellittiche e algoritmo ECDSA Comprare Bitcoin about:reader?url=https://blog.comprarebitcoin.info/curve-ellittiche-e-a...

possibili solo gli elementi del campo finito K.

I punti della curva secp256k1

I punti della curva costituiscono a loro volta un insieme finito


(ovviamente, visto che le coordinate possibili di questi punti sono in
numero finito) detto gruppo, che indicheremo con E(K) o E(Fp).
Si dimostra che E(Fp) un gruppo ciclico; inoltre il numero di
elementi di questo gruppo a sua volta un numero primo che
allincirca simile al numero possibile degli elementi del campo (ma
non uguale, sono 2 numeri primi diversi, vedi approfondimenti)

Oltre alle coordinate (campo K) e ai punti della curva (gruppo


ciclico E(K)), presente una terza tipologia di elementi, che non
hanno dietro una struttura algebrica a differenza degli elementi
citati finora: gli scalari.

Gli scalari

Dove intervengono gli scalari?

Esempio: quando sommiamo un punto A con se stesso 7 volte:

A+A+A+A+A+A+A

possiamo indicare questa somma come 7*A.


Gli scalari quindi in questo contesto sono sostanzialmente dei
semplici numeri interi che servono solo come contatori e che non
hanno alcuna struttura algebrica dietro. Gli scalari in questo caso
sono importantissimi per poich proprio su questultimi che
lavora in gran parte lalgoritmo di firma digitale. In sostanza gli
scalari tengono conto di quanti movimenti abbiamo fatto nello
spazio dei punti del gruppo ciclico E(K).

Le chiavi private sono esse stesse degli scalari! (mentre le


chiavi pubbliche sono punti della curva).

Nel nostro caso, i punti della secp256k1 costituiscono quindi un


gruppo ciclico formato da un numero primo di elementi, da ci si
ottiene che partendo da un punto qualsiasi della curva (diverso
dallo 0) si possono ottenere tutti gli altri punti della curva.

Nella secp256k1 si deciso di partire dal punto G

G = 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB


2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465
5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F
FB10D4B8

e da G possibile raggiungere tutti gli altri punti della curva


moltiplicando il punto G stesso per uno scalare qualsiasi che va da

2 di 10 17/08/17, 07:04
Curve ellittiche e algoritmo ECDSA Comprare Bitcoin about:reader?url=https://blog.comprarebitcoin.info/curve-ellittiche-e-a...

1 a n-1 (n =
1157920892373161954235709850086879078528375642790749043826051631415181614

G = 1*G
G+G = 2*G
G+G+G = 3*G
G+G+G+G = 4*G

G+G+G++G = (n-1)*G
G+G+G+..+G+G = n*G = 0

Lespressione moltiplicare G per uno scalare s solo un altro


modo di dire sommare il punto base G a se stesso s volte

s la chiave privata che il vostro software wallet pesca


random tra 1 e n-1, s*G la chiave pubblica relativa.

Definizioni matematiche

Un campo un insieme di elementi (numeri) per i quali sono


definite due operazioni matematiche addizione e moltiplicazione
ciascuna delle quali applicata a ogni coppia di elementi dellinsieme
d come risultato un elemento dellinsieme stesso.

Le due operazioni devono soddisfare la propriet associativa e


commutativa, deve valere la propriet distributiva della
moltiplicazione rispetto alladdizione, infine per ogni elemento del
campo deve essere presente nel campo stesso il suo opposto (un
numero che sommato al primo d come risultato il numero 0,
elemento neutro delladdizione) e per ogni elemento del campo
(tranne lo 0) deve essere presente anche il suo reciproco (un
numero che moltiplicato al primo d come risultato 1, lelemento
neutro della moltiplicazione).

Per fare degli esempi, linsieme dei numeri naturali con le usuali
operazioni di addizione e moltiplicazione non un campo, poich
nessun altro numero naturale a parte lo 0 ha il suo opposto
allinterno di quellinsieme; linsieme dei numeri interi relativi non
un campo perch a parte il numero 1 nessun altro numero ha il suo
reciproco. Linsieme dei numeri razionali invece un campo infinito,
cos come lo linsieme dei numeri reali.

Unultima osservazione sul numero di elementi che compongono il


campo finito K a cui appartengono le coordinate dei punti della
curva secp256k1; questo numero

p = 2^256 2^32 2^9 2^8 2^7 2^6 2^4 1

Un gruppo un insieme in cui definita una sola operazione che

3 di 10 17/08/17, 07:04
Curve ellittiche e algoritmo ECDSA Comprare Bitcoin about:reader?url=https://blog.comprarebitcoin.info/curve-ellittiche-e-a...

soddisfa la propriet associativa, presente lelemento neutro


rispetto a quella operazione e inoltre il gruppo contiene linverso di
ogni suo elemento.

dove p sta a indicare che si tratta di un numero primo; per la teoria


dei campi ogni campo finito deve avere un numero di elementi che
sia primo (p) o potenza di un primo (p^n).
Nel caso della secp256k1, E = E(Fp), dove p = 2^256 2^32 2^9
2^8 2^7 2^6 2^4 1, quindi siamo nel primo caso.

Teoria dei campi

Per la teoria dei campi ogni campo finito deve avere un numero di
elementi che sia primo (p) o potenza di un primo (p^n). Se il campo
ha un numero primo di elementi allora un gruppo ciclico ed
isomorfo a Z/pZ , cio dal punto di vista delle sue propriet
algebriche equivalente al campo delle classi di resto modulo p.

Cosa vuol dire campo delle classi di resto modulo p?

Facciamo un esempio nel caso p=5, Z/5Z = 0,1,2,3,4

addizioni: 2+3=0, poich 2+3=5 e 5 equivale a 0, 3+4=2, poich


3+4=7 e 7 equivale a 2.

moltiplicazioni: 2*3=1, poich 2*3=6 e 6 equivale a 1 in questo


campo.

Approfondimenti:
Teoremi sui punti di E(Fp)

Per le curve ellittiche in generale, valgono i seguenti tre teoremi:

1) Sia K un campo e supponiamo che sia data una curva ellittica E


di equazione:

y^2=x^3 + Ax + B, con A, B appartenenti a K

Sia E(K) linsieme dei punti della curva E a coordinate in K

E(K) = (x,y) in E, con x,y in K a cui si aggiunge il punto O (punto


allinfinito)

Allora E(K) un sottogruppo del gruppo di tutti i possibili punti


di E (dove con E possiamo pensare a E(R) con R insieme dei
numeri reali) (teorema di Poincar, intorno al 1900)

2) Se Fp un campo finito, allora il gruppo dei punti E(Fp)


sempre o ciclico o prodotto di due gruppi ciclici.

3) Sia E linsieme dei punti della curva ellittica

y^2= x^3+ Ax + B con A,B coordinate in Fp.

4 di 10 17/08/17, 07:04
Curve ellittiche e algoritmo ECDSA Comprare Bitcoin about:reader?url=https://blog.comprarebitcoin.info/curve-ellittiche-e-a...

Allora |#E (Fp) (p + 1)|< 2rad(p)


(stima sul numero di punti di E(Fp) di Hasse, 1922)

Il primo teorema ci assicura un fatto notevole, e cio che linsieme


dei punti di una qualsiasi curva ellittica a coordinate in un
campo finito costituisce sempre un gruppo (vedremo rispetto a
quale operazione di addizione particolare)

Questo fatto sensazionale, cio se definisco unoperazione


algebrica su E(R) (cio sulla classica curva nel piano cartesiano),
poi con la stessa operazione su E(K), dove K un qualsiasi
sottocampo di R, sono sicuro di trovare ancora un sottogruppo
di E(R), cio sono sicuro ad esempio che la somma di 2 punti
sulla curva a coordinate in F7 ancora un punto a coordinate
in F7 che sta sulla curva !

Il secondo teorema ci dice qualcosa di importante sulla forma di


E(Fp) (nel caso specifico della secp256k1, i punti della curva
costituiscono proprio un gruppo ciclico)

Il terzo teorema ci fornisce una stima sul numero degli elementi di


questo gruppo, stima che si basa sul numero degli elementi del
campo delle coordinate.
Nel caso quindi della curva secp256k1 i suoi punti costituiscono un
gruppo ciclico e il numero dei suoi elementi ( sempre un numero
primo)

n=11579208923731619542357098500868790785283756427907490438260516314151816

Se confrontiamo n con p

n=11579208923731619542357098500868790785283756427907490438260516314151816
(numero di punti)
p=11579208923731619542357098500868790785326998466564056403945758400790883
(valori possibili per le coordinate dei punti)

osserviamo che il numero di punti della curva dello stesso ordine


di grandezza del numero degli elementi del campo (un po
inferiore).
Il numero di punti importantissimo, poich ci fornisce il periodo
del gruppo che lo spazio allinterno del quale girano gli algoritmi
di firma digitale. Da notare che n (come p) rappresentabile
mediante una stringa di 256 bit (da qui il nome secp256k1), misura
comoda per limplementazione nel calcolatore.
Il numero di elementi di questo gruppo quindi allincirca simile al
numero degli elementi del campo.

Addizione in E(K): dalla geometria allalgebra

5 di 10 17/08/17, 07:04
Curve ellittiche e algoritmo ECDSA Comprare Bitcoin about:reader?url=https://blog.comprarebitcoin.info/curve-ellittiche-e-a...

Per capire meglio la struttura di E(K) dobbiamo per definire meglio


loperazione di addizione tra punti che caratterizza questo gruppo
ciclico.

Visualizziamo la curva di equazione y^2=x^3+7 (per ora lasciamo


libere le coordinate di assumere valori reali, quindi per adesso
lavoriamo in E(R)):

Cosa vuol dire sommare due punti A e B di questa curva?


Si definisce C := A+B il punto della curva che si ottiene nel
seguente modo:
1) si considera la terza intersezione della retta che passa per A e
B con la curva (questa retta interseca quasi* sempre la curva in un
terzo punto)
2) si prende il simmetrico del punto cos ottenuto rispetto allasse
x (che appartiene ancora alla curva, in quanto essa stessa
simmetrica rispetto allasse x)

In questo modo si definisce unoperazione somma tra i punti della


curva che d come risultato sempre un altro punto della curva;
bisogna poi verificare che questa operazione sia anche associativa
(e lo , inoltre anche evidentemente commutativa), che esista
lelemento neutro* e che ogni elemento abbia il suo inverso. Si ha
quindi che E(R)** un gruppo abeliano (vuol dire commutativo).

Alcune note:

*se si considerano due punti simmetrici rispetto allasse x, in quel


caso la retta che li unisce parallela allasse y; poich la somma di
due punti deve dare come risultato sempre un altro punto del
gruppo, si deve aggiungere ai punti della curva un punto O
allinfinito che diventa lo zero (lelemento neutro) di questo gruppo;
ne consegue che due punti che sono simmetrici rispetto allasse x
sono uno lopposto dellaltro, poich la loro somma d O come
risultato

O=A+B

Ma per sommare invece un punto A a se stesso, come scegliere la


direzione della retta passante per A?
Basta prendere la tangente alla curva proprio in A:

**una caratteristica notevole delle curve ellittiche che anche se i

6 di 10 17/08/17, 07:04
Curve ellittiche e algoritmo ECDSA Comprare Bitcoin about:reader?url=https://blog.comprarebitcoin.info/curve-ellittiche-e-a...

valori delle coordinate appartengono a un sottocampo di R, i punti


cos ottenuti costituiscono ancora un gruppo utilizzando la stessa
operazione somma definita in precedenza (E(K) quindi un
sottogruppo di E(R)). Nel caso di E(K), come abbiamo gi visto in
precedenza, esso un gruppo ciclico (quindi abeliano) e ha inoltre
un numero primo di elementi, si tratta cio di un gruppo i cui
elementi si possono tutti generare a partire da un qualsiasi suo
elemento G 0:

G = 1*G
G+G = 2*G
G+G+G = 3*G
G+G+G+G = 4*G

G+G+G++G = (n-1)*G
G+G+G+..+G+G = n*G = 0 (che come dire che (n-1)*G
lopposto di G!)

Loperazione somma, che ha in origine una costruzione


puramente geometrica, si pu tradurre nelle seguenti formule
utilizzando la geometria analitica:

NB: giova ricordare che tutte le operazioni sopra indicate vanno


fatte modulo p nel caso della curva secp256k1 poich le coordinate
in quel caso sono elementi di Fp.

Esempio di punti a coordinate in un campo finito (F_11)

Vediamo di costruire come esempio il gruppo E(F_11), cio il


gruppo di elementi della curva di equazione y^2=x^3+7 a
coordinate in F_11.

Proviamo tutti i casi possibili:

x x^3+7 x^3+7 mod 11 Sqrt(x^3+7) mod 11


0 7 7
1 8 8
2 15 4 2o9 2 o -2 > (2,2), (2,-2)
3 34 1 1 o 10 1 o -1 > (3,1), (3, -1)
4 71 5 4o7 4 o -4 > (4,4),(4,-4)
5 132 0 0 0 > (5,0)
6 223 3 5o6 5 o -5 > (6,5),(6,-5)
7 350 9 3o8 3 o -3 > (7,3),(7,-3)
8 519 2
9 736 10
10 1007 6

7 di 10 17/08/17, 07:04
Curve ellittiche e algoritmo ECDSA Comprare Bitcoin about:reader?url=https://blog.comprarebitcoin.info/curve-ellittiche-e-a...

Abbiamo quindi trovato che

E(F_11 )={(2,2),(2,-2),(3,1),(3,-1),(4,4),(4,-4),(5,0),(6,5),(6,-5),(7,3),
(7,-3)} {O}

Si noti che in questo caso particolare lordine del gruppo E(F_11)


12 ed superiore al numero degli elementi di F_11, mentre con la
curva secp256k1 lordine di E(K) minore (seppur dello stesso
ordine di grandezza) del numero degli elementi di K.

Viene comunque rispettata la stima di Hasse: |#E (Fp) (p + 1)| <


2rad(p)
infatti
|12-12|<2*sqrt(11)

Visualizzazione nel piano cartesiano di E(F_11 ):

Si noti come E(F_11) non costituisca visivamente un sottoinsieme


di E(R), poich bisogna tenere conto anche del modulo 11.

Nel grafico si scelto di rappresentare gli 11 valori possibili per la


coordinata y tra -5 e +6 anzich tra 0 e 10 per mantenere
visivamente la simmetria rispetto allasse x. Si noti come questo
insieme di punti non costituisca affatto un sottoinsieme dei punti
della curva a coefficienti reali che soddisfa la stessa equazione;
infatti il campo di gioco adesso costituito da una griglia di punti a
coordinate intere (11 valori possibili per le x, 11 per le y), e ogni
volta che il calcolo di x^3+7 fa sforare una coordinata da un lato
del quadrato si ricomincia dal lato opposto questo vuol dire
lavorare in modulo 11.

Da questo grafico si evince inoltre come loperazione di addizione


tra punti perda il significato geometrico originale in questa
situazione (non ci sono curve con secanti e tangenti nel senso
classico di questi termini), anche se sorprendemente loperazione
algebrica sulle coordinate determina ancora una struttura di gruppo
per linsieme E(F_11)

Addizione tra 2 punti in E(F_11)

A=(2,2) B=(3,1) A+B = ?

Quindi A+B=F

In questo caso particolare il risultato era facilmente prevedibile per


via geometrica, poich per passare da A, B, F e F non si
rimbalza mai sui lati di questo particolare biliardo quadrato.

8 di 10 17/08/17, 07:04
Curve ellittiche e algoritmo ECDSA Comprare Bitcoin about:reader?url=https://blog.comprarebitcoin.info/curve-ellittiche-e-a...

Ma se volessimo addizionare A e F, cosa otterremmo?


A=(2,2) e F=(7,3); A+F=?

(La pendenza sarebbe 1:5, cio linverso di 5 che in F_11


corrisponde a 9 (poich 9*5=45=1 modulo 11)

Quindi A+F=E

Come si pu notare, in questo particolare biliardo se si tocca un


lato si riparte dalla parte opposta (oppure se preferite potete
pensare di stare avvolgendo uno spago intorno a un rocchetto a
forma di ciambella, con pendenza del filo costante uguale a quella
del tratto iniziale AF, e lo scopo di continuare cos fino a
intercettare un altro punto del gruppo che si trova sulla superficie
della ciambella. A priori non noto quanti avvolgimenti (diagonali)
bisogna fare intorno al rocchetto prima di raggiungere un altro
punto, in questo caso bastato solo 1 avvolgimento.) E proprio il
tipo di relazione non banale tra il punto di partenza e quello di
arrivo (pur essendo nota la direzione iniziale) a rendere
crittograficamente interessanti le curve ellittiche.

Infine calcoliamo un multiplo di un punto, per esempio 2*A,


utilizzando le formule appropriate:

A=(2,2) 2*A=

Quindi 2*A = D.

La creazione di una chiave pubblica (individuare un punto della


curva) procede proprio in questo modo: si parte da un punto G
(detto generatore del gruppo), lo si moltiplica per uno scalare
random d (la chiave privata) e quindi si ottiene la chiave pubblica
d*G (un punto della curva). Pur essendo noti a tutti sia il punto G
che la chiave pubblica d*G, computazionalmente intrattabile il
problema di ricavare il legame tra G e d*G, cio di fatto
impossibile ricavare la chiave privata d che corrisponde al numero
di volte in cui bisogna sommare G a se stesso per ottenere la
chiave pubblica.

9 di 10 17/08/17, 07:04
Curve ellittiche e algoritmo ECDSA Comprare Bitcoin about:reader?url=https://blog.comprarebitcoin.info/curve-ellittiche-e-a...

10 di 10 17/08/17, 07:04