Bitcoin Forum
November 09, 2024, 06:04:48 AM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: « 1 [2] 3 4 5 »  All
  Print  
Author Topic: curve ellittiche e algoritmo ECDSA  (Read 25660 times)
picchio
Legendary
*
Offline Offline

Activity: 2506
Merit: 1120



View Profile
January 27, 2016, 10:44:10 AM
 #21

Domanda forse banale ma ... intanto spero di riuscire a spiegarmi ...
ECDSA serve solo per firmare o posso anche crittare messaggi "da" e "verso" le due chiavi in modo "scambiabile"?

Waves mi piaceva ora non più.
arulbero (OP)
Legendary
*
Offline Offline

Activity: 1937
Merit: 2080


View Profile
January 27, 2016, 01:10:01 PM
Last edit: January 27, 2016, 01:31:02 PM by arulbero
 #22

Intanto grazie del 3d.
Faccio le domande come a scuola ... ne approfitto!
... Le curve ellittiche in generale hanno equazione y^2 = Ax^3+Bx+C,  e poco hanno a che fare con l'ellisse, nonostante il loro nome.  

In giro si trova che dipende da solo due parametri, in pratica https://en.wikipedia.org/wiki/Elliptic_curve indica solo i tuoi B=a, C=b mentre A=1, y^2 ha coefficiente 1 in entrambe. Sono equivalenti le trattazioni?

La definizione rigorosa di curva ellittica non è banale, si tratta di una curva proiettiva liscia i cui punti soddisfano una certa equazione detta equazione di Weierstrass generalizzata.

"proiettiva" ha a che fare con il fatto che dobbiamo aggiungere il punto all'infinito, "liscia" vuol dire non singolare, cioè deve essere derivabile in ogni punto, senza spigoli (altrimenti non sarebbe definita la tangente in ogni punto)

Si può dimostrare che quasi ogni curva ellittica può essere descritta da un tipo di equazione più semplice detta equazione di Weierstrass:

Quote
2.1.6 Proposizione. A meno di un opportuno cambiamento di variabili, una curva ellittica E sul campo K, avente caratteristica diversa da 2 e 3, è definita dall'equazione di Weierstrass

y^2 =x^3 +ax +b

dove a,b∈K sono tali che 4a^3 + 27b^2 è diverso da 0.

La condizione su a e su b è che il discriminante dell'equazione sia diverso da 0 (corrisponde al richiedere che la curva sia liscia). Nel caso della secp256k1 a=1, b=7, quindi 4*1^3 + 27 * 7^2  = 1327 e quindi si tratta in effetti di una curva liscia.

Queste informazioni e maggiori dettagli li trovi su questa tesi che si trova online (da pag. 47) http://www1.unipa.it/~giovanni.falcone/tesilenia.pdf

Domanda forse banale ma ... intanto spero di riuscire a spiegarmi ...
ECDSA serve solo per firmare o posso anche crittare messaggi "da" e "verso" le due chiavi in modo "scambiabile"?

ECDSA come dice il nome stesso (Elliptic Curve Digital Signature Algorithm) è solo un algoritmo di firma, quindi serve solo a firmare e a verificare la firma.

Se vuoi però utilizzare le curve ellittiche anche per cifrare i messaggi esistono anche algoritmi di cifratura come ad esempio  l' ECIES (Elliptic Curve Integrated Encryption Scheme) che trovi a pag.99-100 sempre della tesi.
picchio
Legendary
*
Offline Offline

Activity: 2506
Merit: 1120



View Profile
January 28, 2016, 02:00:45 PM
 #23

...
Infine calcoliamo un "multiplo" di un punto, per esempio 2*A, utilizzando le formule appropriate:

A=(2,2)      2*A=



Quindi 2*A = D.
..
Sto cercando di simulare queste operazioni, subito casini ...
Se devo fare D+D=2D mi trovo a denominatore 2y_D=0 che non ha inverso. Come ci si comporta?
Inoltre, quando sommo due elementi che hanno stessa x, ho lo stesso problema, in questo caso credo si arrivi al punto ad infinito che corrisponde allo zero. Ma nel caso di D(5, 0) non mi pare ricada nello stesso caso altrimenti il gruppo avrebbe 2 zeri differenti e non mi pare sia possibile.

Waves mi piaceva ora non più.
arulbero (OP)
Legendary
*
Offline Offline

Activity: 1937
Merit: 2080


View Profile
January 28, 2016, 02:33:38 PM
 #24

...
Infine calcoliamo un "multiplo" di un punto, per esempio 2*A, utilizzando le formule appropriate:

A=(2,2)      2*A=



Quindi 2*A = D.
..
Sto cercando di simulare queste operazioni, subito casini ...
Se devo fare D+D=2D mi trovo a denominatore 2y_D=0 che non ha inverso. Come ci si comporta?
Inoltre, quando sommo due elementi che hanno stessa x, ho lo stesso problema, in questo caso credo si arrivi al punto ad infinito che corrisponde allo zero. Ma nel caso di D(5, 0) non mi pare ricada nello stesso caso altrimenti il gruppo avrebbe 2 zeri differenti e non mi pare sia possibile.


Dovevo specificare che:

Se A diverso da B, e xA = xB allora A+B = 0 (punto all'infinito), quindi in tal caso non si applica la formula della somma di due punti (semplicemente una retta verticale non ha coefficiente angolare, quindi è inutile tentare di dividere per 0)

Se A = B, e yA=0 allora A+B=2A = 0 (punto all'infinito), quindi in tal caso non si applica la formula di duplicazione

Nel caso specifico di D(5,0) siamo nel secondo caso (che è a sua volta un caso particolare del primo caso). Quel punto è anche l'opposto di se stesso - poichè 2 punti sono opposti se e solo se hanno stessa x e y opposta (se (x,y) soddisfa l'equazione di Weierstrass la soddisfa evidentemente anche (x,-y)); nel caso di ordinata nulla se (x,0) soddisfa l'equazione di Weierstrass, se mantengo la x e cambio "segno" alla y trovo ancora (x,0), quindi (x,0)+(x,0) = 0 sempre!

Purtroppo ho saltato diverse precisazioni...
picchio
Legendary
*
Offline Offline

Activity: 2506
Merit: 1120



View Profile
January 28, 2016, 03:41:44 PM
 #25

...
Purtroppo ho saltato diverse precisazioni...

Non credo sia possibile fare altrimenti. Il problema è tutt'altro che banale! Una trattazione completa richiede sicuramente competenze difficili da spiegare a chi, come me, ha conoscenze lacunose e frammentate, intanto io cerco di capire e ti sfrutto ... ogni volta arrivo ad un livello di comprensione differente ...
Chiamo ZERO il punto ad infinito ...
Appurato che calcoli tipo (5, 0)+(5,0)=ZERO o anche che ad un certo punto io arrivo ad uno zero, ossia n*G=ZERO allora da quel valore di n in avanti ritroveremo la sequenza iniziale e quindi mi sa che il gruppo è inutilizzabile o sbaglio?
in formule, parto da G:
1*G
2*G
...
n*G=ZERO
(n+1)*G=n*G+G=ZERO+G=G
2*G
...
ossia, si ricomincia ...  l'insieme delle chiavi sarebbe pertanto limitato ad "n" e non ad un valore simile alla base del modulo.
Forse la scelta di G deve essere fatta in modo da massimizzare questo valore? Ci deve essere una bella scatola di vermi dentro questo concetto ...


Waves mi piaceva ora non più.
arulbero (OP)
Legendary
*
Offline Offline

Activity: 1937
Merit: 2080


View Profile
January 28, 2016, 03:51:38 PM
 #26

...
Purtroppo ho saltato diverse precisazioni...

Non credo sia possibile fare altrimenti. Il problema è tutt'altro che banale! Una trattazione completa richiede sicuramente competenze difficili da spiegare a chi, come me, ha conoscenze lacunose e frammentate, intanto io cerco di capire e ti sfrutto ... ogni volta arrivo ad un livello di comprensione differente ...
Chiamo ZERO il punto ad infinito ...
Appurato che calcoli tipo (5, 0)+(5,0)=ZERO o anche che ad un certo punto io arrivo ad uno zero, ossia n*G=ZERO allora da quel valore di n in avanti ritroveremo la sequenza iniziale e quindi mi sa che il gruppo è inutilizzabile o sbaglio?
in formule, parto da G:
1*G
2*G
...
n*G=ZERO
(n+1)*G=n*G+G=ZERO+G=G
2*G
...
ossia, si ricomincia ...  l'insieme delle chiavi sarebbe pertanto limitato ad "n" e non ad un valore simile alla base del modulo.
Forse la scelta di G deve essere fatta in modo da massimizzare questo valore? Ci deve essere una bella scatola di vermi dentro questo concetto ...

Certo che l'insieme è limitato a n!
Per l'esattezza è compreso tra 1 e n-1 (questo sono sicuro di averlo scritto!)

n è leggermente minore di p (cioè il numero di punti della curva secp256k1 è leggermente minore dei possibili valori che posso provare ad assegnare alla x per vedere se c'è una y corrispondente tale per cui la coppia (x,y) soddisfa l'equazione della curva).

p è a sua volta un po' minore di 2^256.

EDIT: Poichè E è ciclico nel caso della secp256k1 ed è formato da un numero primo di elementi, ogni suo elemento tranne lo 0, compreso G, genera tutto E

EDIT2: nel caso di E(F11), la curva del post 6, E è ciclico ma non ha un numero primo di elementi (ne ha 12), lì quindi bisogna trovare in effetti una G che generi tutto E.  

Se poi mi chiedi con quale criterio allora abbiano scelto G nella secp256k1, sinceramente non lo so  Grin
picchio
Legendary
*
Offline Offline

Activity: 2506
Merit: 1120



View Profile
January 28, 2016, 04:25:12 PM
 #27


Certo che l'insieme è limitato a n!
Per l'esattezza è compreso tra 1 e n-1 (questo sono sicuro di averlo scritto!)

n è leggermente minore di p (cioè il numero di punti della curva secp256k1 è leggermente minore dei possibili valori che posso provare ad assegnare alla x per vedere se c'è una y corrispondente tale per cui la coppia (x,y) soddisfa l'equazione della curva).

p è a sua volta un po' minore di 2^256.

EDIT: Poichè E è ciclico nel caso della secp256k1 ed è formato da un numero primo di elementi, ogni suo elemento tranne lo 0, compreso G, genera tutto E

EDIT2: nel caso di E(F11), la curva del post 6, E è ciclico ma non ha un numero primo di elementi (ne ha 12), lì quindi bisogna trovare in effetti una G che generi tutto E.  

Se poi mi chiedi con quale criterio allora abbiano scelto G nella secp256k1, sinceramente non lo so  Grin
L'"n" di cui parlo io è ancora minore del numero degli elementi della curva e cambia in funzione del punto di inizio.
Non mi quadra l'info di EDIT2: perche' 12 elementi? A me ne risultano 11:
(2, 2)
(2, 9)
(3, 1)
(3, 10)
(4, 4)
(4, 7)
(5, 0)
(6, 5)
(6, 6)
(7, 3)
(7, Cool
Punti ellittica: 11; modulo 11

Sequenza dei punti
(4, 4)
(6, 6)
(2, 9)
(3, 10)
(7, 3)
(5, 0)
(7, Cool
(3, 1)
(2, 2)
(6, 5)
(4, 7)
Se parto da (2, 2):
Sequenza dei punti
(2, 2)
(5, 0)
(2, 9)
Caso particolare, diversi ma opposti
(2, 9)
(2, 2)
-----------------
(11, 11)
(2, 2)
(5, 0)
(2, 9)
Caso particolare, diversi ma opposti
(2, 9)
(2, 2)
-----------------
(11, 11)
(2, 2)
(5, 0)
(2, 9)

Potrei aver commesso errori nel sw che sto debuggando.

Waves mi piaceva ora non più.
arulbero (OP)
Legendary
*
Offline Offline

Activity: 1937
Merit: 2080


View Profile
January 28, 2016, 04:34:19 PM
Last edit: January 30, 2016, 04:12:50 PM by arulbero
 #28

E(F11) ha 12 elementi (bisogna contare anche lo zero!)

Il numero n di cui parli tu nel caso della secp256k1 non dipende dal punto iniziale scelto ed è esattamente uguale al numero di punti della curva. Questo vuol dire che E è un gruppo è ciclico, vuol dire che puoi ottenere tutti i suoi elementi a partire da uno solo.

EDIT: anche E(F11) è un gruppo ciclico ma non ha un numero primo di elementi, quindi alcuni suoi elementi hanno un ordine minore di 12. Se riguardi il post lo avevo scritto, se invece un gruppo ha un numero primo di elementi (come nel caso della secp256k1, n è un numero primo in quel caso) allora ogni suo elemento escluso lo 0 genera tutto il gruppo, questo fatto discende dal teorema di Lagrange che ho inserito nel post sulla matematica.

EDIT2: cosa dice il teorema di Lagrange? In soldoni dice che il numero di elementi che puoi generare a partire da un elemento di un gruppo deve essere sempre un divisore del numero degli elementi di tutto il gruppo.

Pensiamo a Z/12Z, che ha 12 elementi, e che può essere visto come un orologio con le 12 ore: ci sono elementi come 4 che hanno ordine 3 (poichè <4>={4, 4+4, 4+4+4} ={4,8,0} cioè ha ordine 3, che è un divisore di 12), elementi come 2 che hanno ordine 6, elementi come 1 che generano tutto il gruppo (che per questo si dice ciclico).
Nell'esempio di E(F11), poichè anch'esso è un gruppo finito di 12 elementi, è normale che tu possa trovare alcuni elementi che non generano tutti gli altri elementi del gruppo ma che al contrario generino solo un sottogruppo di 2 o 3 o 4 o 6 elementi del gruppo di partenza.

Tecnicamente si dice che l'ordine del sottogruppo deve dividere l'ordine del gruppo, e il risultato del rapporto ordine del gruppo / ordine del sottogruppo è un numero intero detto "cofattore". Se vai qui (https://en.bitcoin.it/wiki/Secp256k1 guarda nell'ultima riga il parametro h) vedrai che nella secp256k1 il cofattore di G è 1, cioè l'ordine di G è esattamente uguale all'ordine di E(Fp), entrambi sono n.

Domanda: è un caso fortunato che G generi tutto il gruppo? Oppure è stato trovato dopo un lungo lavoro di ricerca in E(Fp)? Direi proprio di no!

Infatti se un gruppo finito ha un numero primo di elementi, poichè per Lagrange l'ordine di ogni elemento deve dividere l'ordine del gruppo (ordine vuol dire numero di elementi) allora ogni elemento (diverso dallo zero) deve per forza avere ordine "massimo" (non può certo avere ordine 1, visto che almeno se stesso e lo 0 devono sempre esserci in ogni sottogruppo).

Questo è proprio il caso della secp256k1, che avendo un numero primo n di elementi risulta essere quindi non solo un gruppo ciclico ma in più ha anche la caratteristica che ogni suo elemento, a parte lo 0, è in grado di generare tutti gli altri.

Per riassumere: l'esempio che stai implementando non si comporta proprio come la secp256k1, poichè non stai utilizzando un gruppo con un numero primo di elementi.

EDIT3: penso che il termine "ordine di un elemento G" derivi dal fatto che scegliere un punto G di partenza (un generatore) equivalga di fatto a imporre un ordine con cui descrivere tutti gli altri elementi del gruppo: 2G, 3G, ... ordine che dipende quindi dal punto di vista di G)
picchio
Legendary
*
Offline Offline

Activity: 2506
Merit: 1120



View Profile
January 29, 2016, 05:57:34 PM
 #29

Sempre puo' chiaro e complicato... domande:
1) da dove arriva questo modo strampalato di fare la somma tra due punti?
2) esiste una definizione di prodotto tra due punti che magari porta a qualcosa di simile ad un anello?

Waves mi piaceva ora non più.
arulbero (OP)
Legendary
*
Offline Offline

Activity: 1937
Merit: 2080


View Profile
January 29, 2016, 09:08:40 PM
Last edit: January 30, 2016, 04:32:33 PM by arulbero
 #30

Sempre puo' chiaro e complicato... domande:
1) da dove arriva questo modo strampalato di fare la somma tra due punti?

Discende da una questione geometrico-algebrica; visto che l'equazione di Weierstrass contiene il termine x^3, se metto quella equazione a sistema con una retta si troveranno in genere uno, due o tre punti di intersezione (l'equazione risolvente diventerà polinomiale di terzo grado in x)

y = mx + q
y^2 = x^3 + ax + b

--> (mx + q)^2 = x^3 + ax + b

(escludiamo invece i casi patologici delle curve con nodi o punti angolosi - grazie al concetto di discriminante - altrimenti non potremmo tracciare le tangenti in ogni punto, cioè ci sarebbero punti per i quali non sarebbe possibile definire la somma con se stessi)

Cosa c'entra una retta con il concetto di addizione?

Se dobbiamo definire un'operazione, dobbiamo trovare una regola per associare fra loro 3 elementi della curva, in modo che la relazione (A,B) -> C diventerà la nostra addizione. Il legame è quindi dato dalla retta che collega tra loro i punti della curva.
L'idea di base è che 3 punti allineati devono dare sempre somma "zero".

Se una retta ha in comune 3 punti con la curva, allora si pone semplicemente:

A+B+C= "zero" , cioè si dice che A+B = -C  

Chi è quindi -C ? Per capire chi è -C, l'opposto di C, cioè l'elemento che sommato a C dà "zero" come risultato dobbiamo adesso attribuire a qualcuno il ruolo dello "zero".

Osserviamo 2 fatti:

1) una retta può intersecare la curva anche in solo due punti A e B (qui per intersecare intendo proprio "secare", non essere solo tangente in A o in B), e non necessariamente in 3 punti; come definire allora la somma tra questi due elementi, visto che la retta che li collega non passa per nessun altro punto della curva?

2) le uniche rette che passano solo per 2 punti distinti della curva (senza essere tangenti alla curva in nessuno dei due punti) sono le rette verticali (rette che collegano tra loro quindi 2 punti simmetrici rispetto all'asse x)

Unendo 1) e 2) otteniamo che nel caso di due punti A e B simmetrici rispetto all'asse x dobbiamo aggiungere per forza un terzo punto allineato a loro per definire la loro somma, e questo punto deve essere obbligatoriamente un nuovo punto, lo "zero" appunto (nuovo nel senso che non sta "naturalmente" sulla curva):

A+B+"zero" = "zero"  (quindi 2 punti sono opposti se e solo se sono simmetrici rispetto all'asse x)

dove qui "zero" indica quindi la direzione della retta verticale che passa per A e B e poi si "perde" verso infinito, si attribuisce perciò lo status di punto a una direzione come si è soliti fare in geometria proiettiva

NB: ribadisco che il punto zero non ha coordinate (anche se viene rappresentato nei software con le coordinate fittizie (0,0), coordinate che non soddisfano certo l'equazione di Weierstrass).
Le curve ellittiche vengono perciò definite come l'insieme dei punti che soddisfano Weierstrass + il punto all'infinito (a volte c'è ambiguità nel termine "curva", ma dobbiamo ricordarci che va sempre aggiunto alle soluzioni dell'equazione anche il punto all'infinito!). Questo punto è necessario per dare all'insieme nella sua totalità una configurazione di gruppo. Il punto zero è chiamato in questo modo semplicemente perchè è, per definizione, l'elemento neutro rispetto all'addizione.

Torniamo per un momento alla formula iniziale:

A+B+C=zero   cioè A+B=-C

adesso dovrebbe risultare più chiaro perchè, per sommare A e B, non basta solo tracciare una secante che da A e B raggiunga il punto C, ma dobbiamo passare poi anche al suo opposto (e simmetrico) C'=-C.

Quindi si tratta sì di una regola "strampalata" ma anche ragionata  Smiley

Poi il perchè questa regola per definire l'addizione valga anche se prendiamo i coefficienti in un sottocampo finito di R, questo proprio non lo so (ma è proprio questo che rende interessanti le curve ellittiche per le applicazioni pratiche, il fatto che ereditano proprietà normalmente valide solo sul continuo di R come quella dei 3 punti di intersezione tra retta e curva anche in un campo di lavoro finito per le coordinate, fatto veramente notevole per il quale queste curve vengono utilizzate in teoria dei numeri; le curve ellittiche gettano un ponte tra il mondo del continuo e il mondo del discreto e per quanto riguarda quest'ultimo anche tra l'infinito e il finito).


Sempre puo' chiaro e complicato... domande:

2) esiste una definizione di prodotto tra due punti che magari porta a qualcosa di simile ad un anello?

2) non lo so, a occhio direi proprio di no, tra un gruppo e un anello c'è una bella differenza, il prodotto dei punti della curva per gli scalari non è in realtà una vera moltiplicazione, ma semplicemente un modo sintetico di indicare un'addizione ripetuta.
arulbero (OP)
Legendary
*
Offline Offline

Activity: 1937
Merit: 2080


View Profile
January 30, 2016, 06:57:08 PM
 #31

Ho riscritto in gran parte il post precedente dal momento che non ero soddisfatto della risposta che avevo dato a picchio sul perchè si definisce in modo così strano la somma tra due punti.

Mi piacerebbe trovare un modo efficace di "confezionare" questo thread, inizialmente pensavo che lo spazio che mi ero riservato nei primi post fosse sufficiente, in realtà non si è rilevato tale, l'argomento richiede troppe spiegazioni, precisazioni e integrazioni varie che sto aggiungendo qua e là (ma il tutto rischia di diventare un po' dispersivo, grazie comunque a picchio per le sue numerose e puntuali domande e osservazioni)

Forse conviene creare un altro thread che si occupi nello specifico solo dell'algoritmo ECDSA (firma di un messaggio mediante chiave privata e verifica tramite relativa chiave pubblica, magari con esempi pratici che devo ancora preparare)

Questo thread potrebbe continuare ad occuparsi solo della struttura matematica delle curve ellittiche, con l'aggiunta magari del discorso di quantificare l'intrattabilità del problema di risalire dalla chiave pubblica alla chiave privata privata corrispondente (in sostanza il problema del logaritmo discreto), giusto per dare una dimensione della sicurezza su cui si basa tutta la crittografia a cui si affida il sistema Bitcoin.
picchio
Legendary
*
Offline Offline

Activity: 2506
Merit: 1120



View Profile
January 30, 2016, 09:24:22 PM
Last edit: January 30, 2016, 09:44:15 PM by picchio
 #32

Sempre puo' chiaro e complicato... domande:
1) da dove arriva questo modo strampalato di fare la somma tra due punti?

Discende da una questione geometrico-algebrica; visto che l'equazione di Weierstrass contiene il termine x^3, se metto quella equazione a sistema con una retta si troveranno in genere uno, due o tre punti di intersezione (l'equazione risolvente diventerà polinomiale di terzo grado in x)

y = mx + q
y^2 = x^3 + ax + b

--> (mx + q)^2 = x^3 + ax + b

Ci possono anche essere rette con zero intersezioni e sono quelle del tipo x=k con k minore di x_1 (x_1  lo zero a sinistra dell'equazione x^3 + ax + b=0).
Anche io trovo affascinante il fatto che le proprietà si trasmettano dal reale al discreto e anche che valga la proprietà associativa (A+B)+C=A+(B+C).
Devo ancora analizzare bene quanto hai scritto ... intanto dico (come al solito) quello che mi rifrulla per la capa ...
Aggiungo: non avevo mai pensato al fatto che sommando numeri "a" minori di p in algebra modulo p (a>0) si ottengono tutti i numeri da 1 a (p-1) che poi è quello che succede nelle curve ecdsa "utili".
EDIT: se p è primo!
Il bello/brutto di questa matematica è che è maledettamente astratta e faccio una fatica bestia a starci dietro.

Waves mi piaceva ora non più.
arulbero (OP)
Legendary
*
Offline Offline

Activity: 1937
Merit: 2080


View Profile
January 31, 2016, 12:11:05 AM
 #33

Ci possono anche essere rette con zero intersezioni e sono quelle del tipo x=k con k minore di x_1 (x_1  lo zero a sinistra dell'equazione x^3 + ax + b=0).

Certo, ma visto che il nostro problema è definire un'operazione tra punti della curva, delle rette che non intersecano la curva non ci importa nulla.

La retta x=x_1 che passa per il punto di coordinata x_1 è il caso limite, e poichè essa è tangente alla curva in quel punto A, è come se incontrasse in due punti "coincidenti" la curva; in quel caso si ha :

A+A+zero=zero

( A in questo caso è opposto a se stesso, tutti i punti che stanno sull'asse x sono opposti a se stessi, come nel caso D(5,0) di E(F11) )

Aggiungo: non avevo mai pensato al fatto che sommando numeri "a" minori di p in algebra modulo p (a>0) si ottengono tutti i numeri da 1 a (p-1) che poi è quello che succede nelle curve ecdsa "utili".
EDIT: se p è primo!

Questo succede perchè in tal caso a e p sono sempre coprimi (hanno MCD = 1 in quanto p appunto è primo). Quindi, poichè per ogni coppia di numeri naturali a,b vale la formula:

mcm(a,b) * MCD(a,b) = a * b

segue che per la coppia a,p con a<p il mcm è sempre a*p (=0 modulo p). Quindi a*1, a*2, a*3, ... , a*(p-1) sono per forza p-1 elementi distinti, cioè ogni a genera tutto il gruppo dei numeri minori di p (se per assurdo due di quei multipli fossero uguali, ad esempio se a*3 e a*8 fossero uguali, allora a*8 -a*3 =0, quindi a*5=0, cioè a*5 sarebbe un multiplo sia di a che di p minore di a*p, il che contraddice l'asserzione per la quale è a*p il più piccolo multiplo comune di a e p.)

Sempre puo' chiaro e complicato... domande:
...
2) esiste una definizione di prodotto tra due punti che magari porta a qualcosa di simile ad un anello?

Inizialmente avevo pensato di moltiplicare tra loro semplicemente gli scalari; cioè, fissato il generatore G, supponiamo A=3*G , B=7*G, definisco A*B=(7*3)*G=21*G

Il problema è che questa operazione dipende dal generatore scelto e quindi dal modo di ordinare i punti rispetto al generatore; per esempio si avrebbe che ogni punto A moltiplicato per G  darebbe come risultato sempre A ( poichè qui G vale come 1, l'elemento neutro della moltiplicazione) ma se scegliessi viceversa A come generatore, si avrebbe allora A*G = G.
Un'operazione per essere ben definita non può produrre risultati diversi a seconda del modo con cui si rappresentano e indicano gli elementi su cui opera.
arulbero (OP)
Legendary
*
Offline Offline

Activity: 1937
Merit: 2080


View Profile
January 31, 2016, 10:24:48 AM
 #34

Letture consigliate:


http://www.math.vt.edu/people/brown/doc/ellip.pdf   (Da dove vengono queste curve ellittiche? Che connessione hanno con l'ellisse? Quale tipo di problemi permettono di affrontare in teoria dei numeri?)

http://www.math.brown.edu/~jhs/Presentations/WyomingEllipticCurve.pdf (Un'ottima presentazione delle curve ellittiche stile PowerPoint di una summer school; vi sono molte rappresentazioni grafiche delle curve)
picchio
Legendary
*
Offline Offline

Activity: 2506
Merit: 1120



View Profile
January 31, 2016, 11:16:35 AM
 #35

Letture consigliate:
..

http://www.math.brown.edu/~jhs/Presentations/WyomingEllipticCurve.pdf (Un'ottima presentazione delle curve ellittiche stile PowerPoint di una summer school; vi sono molte rappresentazioni grafiche delle curve)
OT: Ogni volta che vedo un documento scritto in LaTex mi viene voglia di re-imparare questo strumento eccezionale.
A mio avviso andrebbe imparato e potrebbe anche risolvere tanti problemi .. ad esempio radunare le idee di questo 3d in latex permetterebbe (credo) un utilizzo delle info contenute in modo comodo e utile. Qualcuno lo conosce?

Waves mi piaceva ora non più.
arulbero (OP)
Legendary
*
Offline Offline

Activity: 1937
Merit: 2080


View Profile
January 31, 2016, 11:27:30 AM
 #36

Letture consigliate:
..

http://www.math.brown.edu/~jhs/Presentations/WyomingEllipticCurve.pdf (Un'ottima presentazione delle curve ellittiche stile PowerPoint di una summer school; vi sono molte rappresentazioni grafiche delle curve)
OT: Ogni volta che vedo un documento scritto in LaTex mi viene voglia di re-imparare questo strumento eccezionale.
A mio avviso andrebbe imparato e potrebbe anche risolvere tanti problemi .. ad esempio radunare le idee di questo 3d in latex permetterebbe (credo) un utilizzo delle info contenute in modo comodo e utile. Qualcuno lo conosce?


Che tu sappia si può inserire latex nei post del forum? Io so per esempio che su mathstackexchange è possibile

http://meta.math.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference

ma dubito che si possa fare anche qui su bitcointalk.
picchio
Legendary
*
Offline Offline

Activity: 2506
Merit: 1120



View Profile
January 31, 2016, 11:56:51 AM
 #37

Letture consigliate:
..

http://www.math.brown.edu/~jhs/Presentations/WyomingEllipticCurve.pdf (Un'ottima presentazione delle curve ellittiche stile PowerPoint di una summer school; vi sono molte rappresentazioni grafiche delle curve)
OT: Ogni volta che vedo un documento scritto in LaTex mi viene voglia di re-imparare questo strumento eccezionale.
A mio avviso andrebbe imparato e potrebbe anche risolvere tanti problemi .. ad esempio radunare le idee di questo 3d in latex permetterebbe (credo) un utilizzo delle info contenute in modo comodo e utile. Qualcuno lo conosce?


Che tu sappia si può inserire latex nei post del forum? Io so per esempio che su mathstackexchange è possibile

http://meta.math.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference

ma dubito che si possa fare anche qui su bitcointalk.
Provo a segnalare a HostFat la cosa, immagino sia un plugin da abilitare, dubito lo facciano in quanto ogni aggiunta e' un rischio di attacco ... vediamo se interviene.

Waves mi piaceva ora non più.
arulbero (OP)
Legendary
*
Offline Offline

Activity: 1937
Merit: 2080


View Profile
January 31, 2016, 02:24:02 PM
 #38

Per quanto riguarda la scelta dei sei parametri che definiscono la curva secp256k1 (tra tutte le curve ellittiche possibili):

Quote
p = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
   = 2^256 - 2^32 - 2^9 - 2^32 - 2^9 -2^8 - 2^7 - 2^6 -2^4 -1
   = 2^256 - 977

n = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141

a=  0

b = 7

Gx = 0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
Gy = 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8

h = 1


p non è stato scelto a caso, si tratta di un numero primo di Marsenne generalizzato, la cui forma è utile per effettuare velocemente i calcoli.
In particolare t=977 è il più grande intero sotto 1024 che fa diventare un numero della forma 2^256 - t primo.

https://bitcointalk.org/index.php?topic=289795.msg3187990#msg3187990

https://bitcointalk.org/index.php?topic=289795.msg3204734#msg3204734

Quote
The number is a generalized mersenne prime. The reason for this is that our we are doing calculations in this field so when we multiply we must take the result mod p where p is the size of the field. If p is a freely chosen prime to compute the mod we must divide which is hideously complex. Instead, if P has special form, we can break the larger value at the word level into small fragments and compute the mod p as some sum of them with negations. The performance impact is enormous.

n dovrebbe discendere di conseguenza, come h e anche a e b.

Nulla si sa invece del criterio di scelta di G.
HostFat
Moderator
Legendary
*
Offline Offline

Activity: 4270
Merit: 1209


I support freedom of choice


View Profile WWW
January 31, 2016, 10:04:57 PM
 #39

@picchio
Non ho modo/poteri io di farlo, e comunque non ci saranno modifiche/aggiunte a questa versione del forum, è da più di un anno che stanno lavorando a creare una versione nuova.

NON DO ASSISTENZA PRIVATA - https://t.me/hostfatmind/
picchio
Legendary
*
Offline Offline

Activity: 2506
Merit: 1120



View Profile
January 31, 2016, 10:40:59 PM
 #40

@picchio
Non ho modo/poteri io di farlo, e comunque non ci saranno modifiche/aggiunte a questa versione del forum, è da più di un anno che stanno lavorando a creare una versione nuova.
Ok, grazie. Se ti capita fai presente che potrebbe servire, immagino non saremo i soli con l'esigenza di scrivere in matematichese

Waves mi piaceva ora non più.
Pages: « 1 [2] 3 4 5 »  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!