Bitcoin Forum
May 08, 2024, 07:37:06 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
  Home Help Search Login Register More  
  Show Posts
Pages: « 1 ... 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 [77] 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 »
1521  Local / Discussioni avanzate e sviluppo / Re: curve ellittiche e algoritmo ECDSA on: January 28, 2016, 03:51:38 PM
...
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
1522  Local / Italiano (Italian) / Re: wallet.dat compabitilità on: January 28, 2016, 03:30:21 PM
Non ho letto tutto il 3ad ma mi pare di capire che il problema è nei due formati della private key, c'è il formato che inizia con a o K o L e quello che inizia per 5 e poi c'è il problema dei due indirizzi bitcoin differenti perché le due private key (che è una sola) danno due bitcoin address.

Questo è un problema dell'algoritmo ellittico e non di multibit o di altro, comunque si possono fare le conversioni e questo non dipende dal programma usato, sono specifiche matematiche che non si perdono col tempo.

Per esempio il classico https://www.bitaddress.org permette di generare una private key (5JfkD6nME2HJ9mxpEmqQNMYvBQ7qw2CmEaeiLt9nv12uAEf4jfA) e cliccando su Wallet details e inserendo la predetta chiave privata fornisce i dati voluti ovvero:

1L8udQVzcu9ninYLunZ9bowMyTA8NvMLFA (indirizzo bitcoin)
19N68NbupPn2HngfVzFD7QY2cVvhQJ75w (indirizzo bitcoin compresso)

e ovviamente c'è anche la chiave privata corrispondente a 5... ovvero quella compressa (Kzz1iQXAGUevhjTMVnte9Fhsiu3CySJvEwXTUkmoew9PDbSwqs3f) che inizia per K o L.

Si noti che la PrivK è sempre la stessa ovvero 32 Byte di dati solo che è aggiunta l'informazione relativa alla compressione o meno della corrispondente PubK: se si vuole l'indirizzo esteso allora si fa in modo che la PrivK inizi per 5, se si vuole l'indirizzo bitcoin compresso si fa in modo che inizi per a o K o L.

Comunque quando uno importa la PrivK sul core può vedere se gli va bene:

Chiave privata WIF
51 caratteri base58, inizia per a '5'

oppure:

Chiave privata WIF compressa
52 caratteri base58, inizia per 'a' 'K' o 'L'

In realtà la chiave privata è sempre la stessa ed è lunga 32 byte, a questa corrispondono due indirizzi bitcoin.

Qui le info che ho solo letto perché non so molto:
https://bitcointalk.org/index.php?topic=129652.0


Le curve ellittiche non c'entrano, il problema sta nella conversione delle coordinate di un punto della curva ellittica in un indirizzo bitcoin.
Tra chiavi private e chiavi pubbliche c'è una perfetta corrispondenza biunivoca (si tratta rispettivamente di scalari a 256 bit e di punti della curva ellittica P=(x,y) dove x e y sono numeri di 256 bit).

Per trasformare i 512 bit della chiave pubblica in una stringa di 160 bit che è l'indirizzo bitcoin, si deve fare l'hash256 delle due coordinate e poi ripmed160. Il problema nasce dal fatto che è possibile rappresentare un punto della curva ellittica usando anche solo la x e il segno di y (infatti se (x,y) è un punto della curva lo è anche (x,-y)), dal momento che il valore di y dipende solo dal valore di x --> y^2=x^3+7

Quindi poichè l'algoritmo hash produce 2 diversi risultati se gli diamo in input (x,y) o (x,+/-), si determina il problema che la stessa chiave privata, la quale determina dal punto di vista matematico un solo punto P della curva ellittica, produce in realtà due chiavi pubbliche P diverse (dal punto di vista dell'hash sono effettivamente diverse, poco importa che siano solo rappresentazioni diverse dello stesso oggetto matematico).

Quando importiamo una chiave privata nel nostro wallet, a quale delle "due" chiavi pubbliche si riferisce la chiave privata? E quindi quale indirizzo deve monitorare il wallet?

Per distinguere i due diversi casi, per quanto riguarda la chiave pubblica si usa la seguente convenzione:

"02" + 128 caratteri in formato esadecimale per la chiave pubblica standard (x,y) (8 + 512 bit)

"03" + 64 caratteri in formato esadecimale per la chiave pubblica compressa (x,pari) (8 + 256 bit)
("04" + 64 caratteri in formato esadecimale per la chiave pubblica compressa (x,dispari)) (8 + 256 bit)

Ma ricordo che la chiave privata è unica, quindi bisogna aggiungere delle informazioni quando si presenta la chiave privata al wallet (che per questo è o in formato WIF o in formato WIF compresso). In questo formato, dove si passa dalla rappresentazione binaria o esadecimale a quella base58, viene aggiunta (come dice il nome) anche quell'informazione che consente al wallet di sapere che tipo di chiave pubblica e quindi di indirizzo deve ricavare da quella chiave.

A complicare ulteriormente le cose, l'informazione che si aggiunge alla chiave privata per dire che da essa si deve ricavare la chiave pubblica compressa rende la chiave privata in formato WIF compresso più lunga rispetto alla chiave privata in formato WIF, ciononostante si chiama ancora "chiave privata compressa" poichè da essa si deve ricavare la chiave pubblica nella sua rappresentazione compressa.
1523  Local / Discussioni avanzate e sviluppo / Re: curve ellittiche e algoritmo ECDSA on: January 28, 2016, 02:33:38 PM
...
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...
1524  Local / Discussioni avanzate e sviluppo / Re: Scalabilità bitcoin e "troncatura della blockchain" domanda per esperti! on: January 27, 2016, 08:02:51 PM
Forse si puo' salvare capra e cavoli creando un superblocco che contiene tutte le transazioni con i timestamp al solo fine di avere un punto di partenza, la "vecchia" chani si potrebbe mettere a disposizione per chi vuole controllare in un servizio tipo ipfs che dovrebbe conservare i files ... credo che anche i client faranno meno fatica se possono partire dallo stesso punto per verificare una transazione, poi ogni x blocchi si ricrea il mega blocco e si riparte considerando archiviato il periodo precedente.
Rimane il fatto che non puoi dirottare un treno come BTC in corsa e questo è al tempo stesso la sua forza e la sua debolezza ...

EDIT: mi sa che il superblocco sarebbe grande quanto la chain ...


Ma a questo punto tanto vale lasciare le cose come sono, se uno non vuole sprecare spazio utilizza l'opzione di pruning; con il tempo sai quanti superblocchi e quindi nuovi (e arbitrari) punti di partenza bisognerebbe introdurre; mi sembrano più gli svantaggi che i vantaggi.
1525  Local / Discussioni avanzate e sviluppo / Re: Scalabilità bitcoin e "troncatura della blockchain" domanda per esperti! on: January 27, 2016, 07:38:01 PM
In pratica ha detto quello che ho detto io ma in 2 punti anzichè 1.


Se tronco la Blockchain di Bitcoin posso spendere i bitcoin che non sono più visibili.

Questa operazione si chiama "double-spend".
https://bitcoin.org/en/glossary/double-spend

...omissis...

Per essere una moneta bitcoin ha bisogno di non essere passibile di double spend.


Facciamo a gara a chi ce l'ha più grosso?!?

Cordiali saluti.

Non era una gara, ho semplicemente dato una mia risposta a un newbie che chiedeva informazioni (penso sia meglio ricevere 2 risposte che una sola  Wink)

Nella mia risposta non ho parlato di double spending. Io non penso che la troncatura della blockchain possa portare alla double spending (che di fatto è possibile sempre solo in casi particolari e su tempi brevissimi, di solito le double spending sono a 0 conferme, è impossibile ingannare la rete costruendo un ramo alternativo della chain a meno che non si abbia il 51% di capacità computazionale).

Altra considerazione, è possibile sicuramente operare un taglio "sensato" della chain; la domanda del nuovo utente sul senso di mantenere informazioni vecchie e obsolete era dal mio punto di vista molto ben posta, e in fondo aveva quasi ragione, almeno dal mio punto di vista: se si raccogliessero tutte le informazioni aggiornate al blocco 100000 per esempio (incluso il database degli UTXO) e si troncasse lì la chain, partendo da un unico nuovo grande genesis block come suggeriva l'utente picchio qualche post fa, non sarebbe affatto possibile la double spending; di fatto ci troveremmo all'incirca nella stessa situazione di adesso; questo però non si fa perchè bisognerebbe cambiare le regole, e abbiamo visto anche di recente com'è difficile introdurre delle modifiche in corsa in un meccanismo delicato che ormai è avviato (e meno si tocca meglio è).

Ovvio che se invece si operasse un taglio della chain senza contromisura alcuna, allora sorgerebbero molti problemi, ma non certo di double spending, al contrario molti bitcoin semplicemente sparirebbero e non potrebbero essere più spesi dai loro proprietari (non puoi spendere dei bitcoin - o meglio degli UTXO - di cui la rete ha perso traccia).

Cos'è che non va allora in generale nel taglio della chain?

Secondo me, e ripeto la mia risposta, in ogni tipologia di pruning definitivo (anche quello "sensato" temperato mediante l'introduzione ad esempio di un nuovo grande blocco di partenza che facesse la sintesi della storia passata), coloro che entreranno nel mondo bitcoin dopo il taglio dovrebbero dare per scontato una serie di informazioni, fidandosi di altri che hanno avuto invece la possibilità di verificare queste informazioni in prima persona. Si dovrebbero confrontare nel migliore dei casi solo con una sintesi, non avrebbero più la possibilità di verificare che quel nuovo (e per certi aspetti arbitrario) punto di partenza sia stato correttamente impostato secondo le regole di base del protocollo (e non mi pare poco). Quindi invece di avere un unico solidissimo genesis block su cui si fonda tutto l'impianto, ne avremmo al suo posto uno nuovo un po' più debole; dopo x blocchi probabilmente si provvederebbe a rimpiazzare un'altra volta il nuovo punto di partenza con uno più recente (la sintesi della sintesi), creando in questo modo una successione di punti di partenza sempre più deboli, dove il senso della storia originale rischia di andare perduto e con esso la fondatezza e l'autorevolezza delle certificazioni operate dalla blockchain (un notaio che certifica in base al sentito dire e non controlla in prima persona non fornisce una grande garanzia).

Anche adesso è possibile utilizzare un full node con pruning attivato, ma non si tratta di un pruning definitivo, un conto è scaricare e controllare tutta la blockchain e poi eliminarne una parte dal proprio hard disk (sapendo che in caso di necessità sarà sempre possibile riscaricarla dal primo blocco), un altro è non averla mai potuta scaricare e verificare.
1526  Local / Discussioni avanzate e sviluppo / Re: Materiale di studio blockchain on: January 27, 2016, 01:37:57 PM
Il mio consiglio è partire da una ottima sintesi sul mondo bitcoin : "Mastering Bitcoin"

http://chimera.labs.oreilly.com/books/1234000001802/index.html

Ci sono un sacco di dettagli e fornisce inoltre anche un quadro generale di come è strutturato questo sistema, poi uno semmai approfondisce ciò che gli interessa di più.

1527  Local / Discussioni avanzate e sviluppo / Re: curve ellittiche e algoritmo ECDSA on: January 27, 2016, 01:10:01 PM
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.
1528  Local / Discussioni avanzate e sviluppo / Re: curve ellittiche e algoritmo ECDSA on: January 27, 2016, 06:32:34 AM
...
Dubbi residui:
- come critto un messaggio? Ossia poi, di fatto, come funziona?


Per quanto riguarda l'algoritmo ECDSA, sto preparando la spiegazione!

Ti segnalo http://kakaroto.homelinux.net/2012/01/how-the-ecdsa-algorithm-works/ che spiega come hanno hackerato la PS3 sfruttando un baco dell'implementazione da parte di sony ... poi corretto.
Se ho capito sony usava sempre uno stesso numero che dovrebbe essere casuale, assomiglia alla chiave privata, e serve per firmare un documento. Con qualche formula inversa sono arrivati alla chiave privata. Cita i passaggi ma non ho ancora potuto analizzarli meglio. Non so se sono giusti.

Per produrre una firma, oltre alla chiave privata e al messaggio da firmare, è necessario generare ogni volta un numero casuale. Se firmi due messaggi per mezzo della chiave privata utilizzando sempre lo stesso numero "casuale", è banale ricavare dalla firma la chiave privata.
Questo è il motivo per cui è necessario avere un buon generatore di numeri pseudo casuali, non solo per generare buone chiavi private, ma anche per poter firmare in sicurezza senza esporre la chiave privata (che è poi il senso generale della firma).
1529  Local / Discussioni avanzate e sviluppo / Re: Scalabilità bitcoin e "troncatura della blockchain" domanda per esperti! on: January 26, 2016, 11:01:32 PM
...
 è possibile cancellare dalla blockchain le informazioni ormai obsolete?
...
A "naso" direi che si potrebbe generare un nuovo genesis block che contiene tutti i saldi degli indirizzi attivi e forzare i client ad accettare tale blocco come nuovo genesis e quindi ripartire con una chain nuova.
Non so però quanto potrebbe essere grosso questo blocco e non credo sia previsto dal protocollo quindi ci vorrebbe un bel fork.
Credo che ethereal abbia fatto una cosa simile allo start-up ... ma probabilmente erano molti meno gli indirizzi attivi.
Forse gbianchi e' in grado di stimare la dimensione di un tale blocco.

Al momento l'UTXO è sopra 1 GB  --> http://statoshi.info/dashboard/db/unspent-transaction-output-set

e a occhio dovrebbe contenere le informazioni minime necessarie per conoscere lo stato attuale della distribuzione dei saldi diversi da 0.
Ma non si diceva che uno degli aspetti più interessanti della blockchain era anche la possibilità di registrare "per sempre" delle informazioni?
Un conto è consentire il pruning, un altro è forzare tutti a tagliare.

 
1530  Local / Discussioni avanzate e sviluppo / Re: Scalabilità bitcoin e "troncatura della blockchain" domanda per esperti! on: January 26, 2016, 10:30:54 PM
Buonasera a tutti,

scusate se mi intrometto in questa discussione molto tecnica e assai interessante.
Sono nuovo del forum...non credo che a nessuno interessi il mio nome proprio, quindi mi presento con il mio nick: Absolute Beginner. Dal nick avete già capito che sono ignorante come una bestia, quindi vi chiedo di perdonare eventuali strafalcioni.

Ho riflettuto molto sulla natura della blockchain e vorrei chiedere a voi esperti, tornando all'argomento principale del thread: è possibile cancellare dalla blockchain le informazioni ormai obsolete?

La blockchain serve a tenere traccia delle transazioni, giusto? Ma a cosa serve sapere che un determinato bitcoin è appartenuto al signor Mario Rossi se nel frattempo sono passati anni, il bitcoin in questione ha cambiato decine di proprietari e Mario Rossi possiede un saldo pari a zero su quello specifico indirizzo?

La mia logica mi spinge a credere che basterebbe un programmino, distribuito a tutti i nodi, che con una precisa cadenza (ad esempio annuale), analizzi tutti i blocchi più vecchi di una certa data eliminando tutti i "rami secchi", transazioni antiche che hanno lasciato indirizzi con saldo pari a zero, magari seppellite da decine di transazioni successive. Automaticamente tutte le blockchain del mondo verrebbero alleggerite restando comunque tutte perfettamente uguali, conservando solo le informazioni attualmente utili.

Dove sbaglio?

La possibilità di tagliare i blocchi molto vecchi della blockchain c'è già dalla versione 0.11.0 di Bitcoin Core (opzione pruning).

Il problema di base però è:  quando un nuovo peer si collega alla rete, come fa a conoscere la distribuzione attuale dei bitcoin? (ovvero: quali sono gli indirizzi a saldo diverso da zero? dove sono allocati i bitcoin prodotti finora? esplicitamente questo non c'è scritto da nessuna parte!)

Il concetto che sta alla base di questo sistema è che ciascuno deve essere messo nella condizione di poter verificare di persona la validità dei pagamenti che riceve, e se io voglio verificare la validità di un pagamento che ricevo adesso devo sapere se l'indirizzo che mi ha inviato i btc possedeva effettivamente quei btc al momento dell'invio.  

Per fare questa verifica in modo sicuro ho un solo modo: almeno una volta nella vita devo scaricare tutta la blockchain, ricostruendo sin dal primo blocco la storia dei passaggi di proprietà di tutti i btc. In tal modo potrò ricostruire la distribuzione attuale dei saldi degli indirizzi (ho un po' semplificato); se invece non faccio la ricostruzione personalmente dovrò fidarmi della ricostruzione fatta da qualcun altro (e questo è un male, soprattutto se lo fanno tantissime persone).

Con l'opzione pruning, man mano che arrivano nuovi blocchi posso eliminare dal mio hard disk i blocchi più vecchi per risparmiare spazio; questo è possibile dal momento che mi tengo (oltre ai blocchi delle transazioni) sempre un database, che mi sono costruito e aggiorno dinamicamente, in cui registro la distribuzione dei saldi diversi da 0 degli indirizzi (tecnicamente si chiama UTXO, insieme degli output non spesi delle transazioni).

Quindi per rispondere alla tua domanda, è possibile eliminare i blocchi molto vecchi ma:

1) solo dopo aver almeno una volta scaricato tutti i blocchi, a partire dal numero 1, in modo da poter conoscere con sicurezza dove stanno tutti i saldi diversi da 0

2) se tutti attivassero l'opzione pruning, quando un nuovo nodo entra nella rete (oppure a un vecchio nodo si rompe l'hard disk) come fa questo a controllare tutta la blockchain? Da chi scarica i blocchi più vecchi se tutti li hanno eliminati dal loro pc? Ricorda che tutti devono essere messi nella condizione di poter verificare in maniera autonoma la validità dei pagamenti ricostruendo la distribuzione dei saldi (per conoscere la quale bisogna studiare tutta la storia passata delle transazioni).

Il sistema Bitcoin è un sistema "trustless", ovvero non c'è bisogno di fiducia (è affidabile proprio perchè ciascuno può non fidarsi degli altri e fare da sè il lavoro di controllo e verifica delle transazioni e dei blocchi). Quindi non è possibile tagliare i blocchi più vecchi in modo definitivo, sarebbe come dire che tutti quelli che non hanno avuto l'opportunità di controllare la blockchain in passato non ce l'avranno mai più e dovranno fidarsi almeno un po' di chi invece ha potuto effettuare questo controllo in prima persona.
1531  Local / Discussioni avanzate e sviluppo / Re: curve ellittiche e algoritmo ECDSA on: January 26, 2016, 03:45:12 PM
...
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
...
Scritto cosi' non si capisce bene, magari usa (Gx, Gy) tipo:
G =(79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798,  483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8).

CIao
P
EDIT: sto punto G l'ho gia' sentito da qualche parte e mi pare sia anche quello un punto di partenza ma non ricordo dove ...

Ho migliorato nel post 1 la presentazione di G, aggiungendo anche il controllo che effettivamente appartenga alla curva secp256k1.

Ho anche aggiunto una precisazione alla risposta alla tua domanda sulla corrispondenza biunivoca tra chiavi private e pubbliche nel post 14.
1532  Local / Discussioni avanzate e sviluppo / Re: curve ellittiche e algoritmo ECDSA on: January 26, 2016, 02:55:43 PM

EDIT: a voler essere pignoli, per ottenere un indirizzo è sufficiente fornire una stringa di 256 bit al posto di un punto della curva ellittica. Non vorrei dire una stupidaggine ma penso che il sistema bitcoin - blockchain sia del tutto indipendente dalla teoria delle curve ellittiche e dall'algoritmo di firma digitale ECDSA.


piu' o meno si... nel senso che il merkle tree di bitcoin funzionerebbe con qualsiasi altro sistema di crittografia, pero' fu scelto ECDSA perche
attualmente e' uno di quelli che garantisce alti livelli di sicurezza con chiavi corte... ad esempio con gli algoritmi basati su fattorizzazione tipo  RSA servono 1024 bit o piu' per
avere livelli decenti di sicurezza.... questo sarebbe drammatico per le dimesnioni della blockchain che gia' e' bella pesa...

Inoltre nei client adesso c'e' implementato tutto il codice per la ECDSA

ad esempio la OP_CHECKSIG fa il check presupponendo implicitamente questo particolare modo crittografia,
ossia non ha un parametro che dice "controlla usando  RSA" oppure "controlla usando il sistema di crittografia x"
quindi ci sarebbe da implementare pesantemente sui client .... ma teoricamente e' possibile.

Io intendevo, in maniera ancora più radicale, si potrebbe evitare proprio (a livello teorico, ovviamente sarebbe scomodissimo) di utilizzare il concetto di firma e quindi i comandi tipo OP_CHECKSIG.  
Alla fin dei conti sarebbe sufficiente scrivere uno script con i comandi consentiti dalla sintassi del linguaggio SCRIPT e farne l'hash. Mi riferisco al concetto di P2SH (pay to script hash).

Quote
Pay-to-script-hash addresses

Another important part of the P2SH feature is the ability to encode a script hash as an address, as defined in BIP0013. P2SH addresses are Base58Check encodings of the 20-byte hash of a script, just like bitcoin addresses are Base58Check encodings of the 20-byte hash of a public key. P2SH addresses use the version prefix "5", which results in Base58Check-encoded addresses that start with a "3"

Ad esempio: scrivo uno script del tipo

"fornisci l'hash del blocco 1000 e confrontalo con 0000125...."

oppure

"x + 10 = 30, fornisci x"

poi ne faccio l'hash e ripemd160 e la stringa che ottengo diventa il mio "indirizzo", l'analogo della stringa da 160 bit che ottengo facendo sha256 e poi ripemd160 partendo dalle coordinate di un punto sulla curva ellittica.

Prima della versione 0.9.2 di Bitcoin Core, di fatto si utilizzava questa modalità solo per gli indirizzi multisig, ora è permessa tutta la flessibilità consentita dal linguaggio SCRIPT.

PS: ovviamente vincolare dei fondi a uno script come quello proposto da me sopra non avrebbe senso alcuno, poichè qualora volessi sbloccare quei fondi dovrei trasmettere alla rete una transazione con lo script in chiaro il cui hash256 corrisponde al mio indirizzo + il dato richiesto per lo sblocco, e quindi sarebbe facilissimo sostituire la mia transazione modificando al volo il destinatario prima che essa sia inclusa in un blocco.
Il concetto di firma è proprio quello di poter generare una stringa con la quale dimostrare di avere la chiave privata senza bisogno di renderla pubblica.
Il senso del mio discorso era che il sistema bitcoin fondamentalmente lavora con coppie di stringhe A e B, la stringa/indirizzo B con la funzione di vincolare i btc all'indirizzo/stringa B, la stringa A con la funzione di svincolare i btc dall'indirizzo B. Nel caso delle curve ellittiche, A è la chiave privata, B l'hash della chiave pubblica, ma non è strettamente necessario che sia così.
 
1533  Local / Discussioni avanzate e sviluppo / Re: curve ellittiche e algoritmo ECDSA on: January 26, 2016, 01:26:39 PM
Riflettendo ora risulta molto chiaro il funzionamento dei vanity gen che permettono di essere sicuri.
Basta dare chiave pubblica e il miner vanity somma G alla chiave k volte fino ad ottenere l'indirizzo desiderato, comunica k al proprietario della chiave privata "n" e genera un indirizzo privato n+k  che magicamente diventa il vanity richiesto.

Dubbi residui:
- come critto un messaggio? Ossia poi, di fatto, come funziona?

Per quanto riguarda l'algoritmo ECDSA, sto preparando la spiegazione!

Non avevo mai pensato al funzionamento del vanity gen, in effetti dovrebbe essere proprio come lo hai descritto!


l'applicazione che porta da "private key" a E(Fp) è iniettiva? (in caso sarebbe anche suriettiva visto che hanno lo stesso numero di elementi).

Sì, una volta scelto il punto base G, detto per questo anche punto generatore di E(FP), c'è una corrispondenza biunivoca tra l'insieme dei naturali compresi tra 1 e n-1 e i punti della curva

Si fissa G (è stato scelto "Standards for Efficient Cryptography" (SEC), vedi http://www.secg.org/sec2-v2.pdf a pagina 9).
Fissato G, è univoco l'ordine con cui percorrere tutti i punti della curva:

1 --> G
2 --> 2*G
3 --> 3*G
..
..
n-1 --> (n-1)*G


la prima colonna è quella delle chiavi private (scalari)
la seconda colonna è quella delle chiavi pubbliche corrispondenti (punti di E(Fp)) (NB: lo scalare 0 non è considerato una chiave privata accettabile nel protocollo bitcoin, quindi 0*G ( o n*G, che è lo stesso) non lo ho inserito nelle possibilità.)

Per ogni chiave privata c'è un'unica chiave pubblica e viceversa.

Le 2 colonne hanno entrambe n-1 elementi (sono circa 2^256, un po' di meno di p = 2^256 - 2^32 - 2^9 - 2^8 - 2^7 - 2^6 - 2^4 - 1 che è l'ordine del campo delle coordinate). La corrispondenza biunivoca tra i due insiemi è garantita dalla matematica che ho spiegato nei post precedenti (E(Fp) è un gruppo ciclico, l'elemento G è un generatore che permette di riottenere tutti gli altri punti)

La corrispondenza però non è più biunivoca se aggiungiamo una terza "colonna", quella degli indirizzi, che non c'entrano però con le curve ellittiche.

insieme scalari (fissato G)     <-->    insieme di punti di E(Fp)  -->   indirizzi


L'insieme degli indirizzi ha circa 2^160 elementi distinti possibili. Per passare dall'insieme E(Fp) all'insieme degli indirizzi ci sono 2 operazioni, un hash256 e un ripemd160 che traducono una stringa di 256 bit in una di 160 bit (la quale viene poi rappresentata in base 58, ma questo è solo un problema appunto di rappresentazione del risultato finale).

Quindi ci sono tantissime chiavi private (con relative chiave pubbliche) che producono lo stesso indirizzo.***

***EDIT2: in realtà c'è anche un altro problema quando traduciamo un punto della curva in un indirizzo. Poichè la funzione hash lavora in modo stupido solo sulla rappresentazione del punto, se scriviamo un punto di E(Fp) nella sua forma compressa (cioè con solo la coordinata x e il "segno" della y, aggiungendo come prefisso 02 se y è pari e 03 se y è dispari), avremo che lo stesso punto può essere tradotto in due indirizzi completamente diversi (ma controllati sempre dalla stessa chiave privata)

Riporto qui il passo dedicato alla questione in "Mastering Bitcoin"
Quote
Compressed public keys

As we saw previously, the public key is a point on the elliptic curve consisting of a pair of coordinates (x,y). It is usually presented with the prefix 04 followed by two 256-bit numbers, one for the x coordinate of the point, the other for the y coordinate. The prefix 04 is used to distinguish uncompressed public keys from compressed public keys that begin with a 02 or a 03.

Here’s the public key generated by the private key we created earlier, shown as the coordinates x and y:

x = F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A
y = 07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB

Here’s the same public key shown as a 520-bit number (130 hex digits) with the prefix 04 followed by x and then y coordinates, as 04 x y:

K=04F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB

Compressed public keys were introduced to bitcoin to reduce the size of transactions and conserve disk space on nodes that store the bitcoin blockchain database. Most transactions include the public key, required to validate the owner’s credentials and spend the bitcoin. Each public key requires 520 bits (prefix \+ x \+ y), which when multiplied by several hundred transactions per block, or tens of thousands of transactions per day, adds a significant amount of data to the blockchain.

As we saw in the section “Public Keys”, a public key is a point (x,y) on an elliptic curve. Because the curve expresses a mathematical function, a point on the curve represents a solution to the equation and, therefore, if we know the x coordinate we can calculate the y coordinate by solving the equation y2 mod p = (x3 + 7) mod p. That allows us to store only the x coordinate of the public key point, omitting the y coordinate and reducing the size of the key and the space required to store it by 256 bits. An almost 50% reduction in size in every transaction adds up to a lot of data saved over time!

Whereas uncompressed public keys have a prefix of 04, compressed public keys start with either a 02 or a 03 prefix. Let’s look at why there are two possible prefixes: because the left side of the equation is y2, that means the solution for y is a square root, which can have a positive or negative value. Visually, this means that the resulting y coordinate can be above the x-axis or below the x-axis. As you can see from the graph of the elliptic curve in Figure 4-2, the curve is symmetric, meaning it is reflected like a mirror by the x-axis. So, while we can omit the y coordinate we have to store the sign of y (positive or negative), or in other words, we have to remember if it was above or below the x-axis because each of those options represents a different point and a different public key. When calculating the elliptic curve in binary arithmetic on the finite field of prime order p, the y coordinate is either even or odd, which corresponds to the positive/negative sign as explained earlier. Therefore, to distinguish between the two possible values of y, we store a compressed public key with the prefix 02 if the y is even, and 03 if it is odd, allowing the software to correctly deduce the y coordinate from the x coordinate and uncompress the public key to the full coordinates of the point.

Here’s the same public key generated previously, shown as a compressed public key stored in 264 bits (66 hex digits) with the prefix 03 indicating the y coordinate is odd:

K = 03F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A

This compressed public key corresponds to the same private key, meaning that it is generated from the same private key. However, it looks different from the uncompressed public key. More importantly, if we convert this compressed public key to a bitcoin address using the double-hash function (RIPEMD160(SHA256(K))) it will produce a different bitcoin address. This can be confusing, because it means that a single private key can produce a public key expressed in two different formats (compressed and uncompressed) that produce two different bitcoin addresses. However, the private key is identical for both bitcoin addresses.


EDIT: a voler essere pignoli, per ottenere un indirizzo è sufficiente sostituire nel meccanismo una qualsiasi stringa di 256 bit al posto dell'hash256 delle coordinate di un punto della curva ellittica. Non vorrei dire una stupidaggine ma penso che il sistema bitcoin - blockchain sia del tutto indipendente dalla teoria delle curve ellittiche e dall'algoritmo di firma digitale ECDSA.
1534  Local / Italiano (Italian) / Re: [SPECULAZIONE] BITCOIN PUMP! on: January 25, 2016, 07:18:41 PM
Però il prezzo del BTC dovrebbe farlo il mercato, non il fatto che non convenga più ai miners (se il valore non sale) di elaborare dopo che avvenga l'halving!!

Certo che il prezzo lo fa il mercato!

Ma i miner sono tra gli attori più esposti in questo tipo di mercato, poichè anticipano molti soldi, cioè investono a loro modo in questo settore scommettendo in una evoluzione futura (perlomeno futuro prossimo) positiva dell'andamento del valore dei btc.
Quindi il fatto che la crescita della difficoltà (la difficoltà complessiva è legata all'investimento complessivo dei miner, oltre che alla migliorata efficienza delle apparecchiature) stia aumentando nell'ultimo periodo è un indicatore di quale sia il "sentiment" odierno (o forse solo la speranza?) di questi attori.
In sostanza: c'è in giro molta gente che continua a credere (non solo a parole, scommettono soldi veri!) che il mining sarà redditizio, ergo:

- o il prezzo del btc è già attualmente così alto da permettere ai miner dei margini tali da guadagnarci anche in caso di diminuzione del prezzo

- o i miner sperano/credono in una evoluzione al rialzo dei prezzi

- o pensano che la migliorata efficienza del loro lavoro compenserà l'aumento di competizione e concorrenza nella gara per aggiudicarsi le ricompense dei blocchi

Naturalmente, anche se si trattasse della seconda motivazione, il fatto che i miner (e tanta altra gente oltre a loro) pensino che quest'anno il prezzo del bitcoin aumenterà non significa affatto che ciò accadrà realmente, ma è pur sempre un indicatore di cui tenere conto.

Mi sembra particolarmente interessante inoltre osservare questo fenomeno di iperinvestimento dei miner nel periodo di avvicinamento all'halving, quando è certo che le loro entrate (in btc) dimezzeranno.
1535  Local / Italiano (Italian) / Re: [SPECULAZIONE] BITCOIN PUMP! on: January 25, 2016, 01:48:38 PM
Guardando questo grafico

https://blockchain.info/charts/miners-operating-profit-margin?timespan=2year&showDataPoints=false&daysAverageString=1&show_header=true&scale=0&address=

non capisco se i margini dei miner stanno aumentando o diminuendo (propenderei per la seconda)

Queste dovrebbero essere le assunzioni fatte nel costruire il grafico:

Quote
Electricity consumption is estimated based on power consumption of 650 Watts per gigahash and electricity price of 15 cent per kilowatt hour. In reality some miners will be more or less efficient.
For profit margin hardware costs are estimated to be $1000 per gigahash every 2 years, and bandwidth $1 per gigahash per year.

Sicuramente i margini diminuiranno in modo significativo con l'halving.
A un certo punto la difficoltà non potrà continuare ad aumentare con i ritmi attuali

https://blockchain.info/it/charts/difficulty?timespan=2year&showDataPoints=false&daysAverageString=1&show_header=true&scale=0&address=

poichè l'aumento di efficienza delle macchine da sola non basterà più a sostenere un aumento del carico di lavoro; a quel punto o aumenterà il valore dei bitcoin, o diminuirà il lavoro effettuato per renderli sicuri.
Al momento, almeno guardando al tasso di aumento della difficoltà, sembrerebbe che molti miner stiano scommettendo sul fatto che il valore del bitcoin aumenterà.

Infine ho notato il seguente grafico

https://blockchain.info/it/charts/output-volume

dal quale sembra che ultimamente ci sia un aumento del volume di btc scambiati sulla blockchain.
Interpretazioni al riguardo?
1536  Local / Italiano (Italian) / Re: Consiglio su procedura "sign a message" on: January 24, 2016, 10:21:22 PM
Come faccio a spostare quei btc da un indirizzo ad un altro?


Nel senso se io ho 1BTC nel mio portafoglio e di questo BTC  0.1 ci sono arrivati tramite un certo indirizzo come faccio a spostare proprio quei 0.1btc?


Semplice: vai su "addresses", fai tasto destro sull'indirizzo che vuoi svuotare, e clicca su "send from"


Grazie mille  Smiley


E posso inviarli ad un altro address dello stesso wallet? Ed in tal caso sarebbero in "sicurezza" ?

Certo che sarebbero in sicurezza, due address (o meglio le due chiavi private che li hanno generati) di uno stesso wallet sono del tutto indipendenti, nel senso che se anche la chiave privata dell'indirizzo A fosse stata violata, non ci sarebbe modo da questa di ricavare anche la chiave privata di un altro indirizzo B dello stesso wallet.
1537  Local / Discussioni avanzate e sviluppo / Re: Tuning full node on: January 24, 2016, 10:15:47 PM
Ho guardato un po' in giro, penso di aver capito il funzionamento del nodo con pruning attivato:

questo nodo deve inizialmente scaricare tutta la blockchain, in modo da costruirsi da sè il database degli UTXO corretto (+ l'indice di tutti i blocchi); a differenza dei full node, appena la catena dei blocchi scaricati e validati supera un certo spazio occupato, allora il nodo comincia a eliminare i blocchi più vecchi.

Comunque è in grado di valutare il bilancio del proprio wallet con lo stesso grado di attendibilità con cui lo fa un full node, nonchè di fornire il classico servizio di consulenza ai client SPV. Inoltre è in grado di verificare perfettamente la validità di tutte le transazioni che gli arrivano (e quindi è in grado anche di ritrasmetterle a sua volta agli altri peer).

L'unico vero suo limite dal punto di vista della rete è legato al fatto che non è in grado di fornire i blocchi troppo vecchi (che non ha più) ai nuovi peer che si collegano alla rete.

Per quanto riguarda invece il wallet installato nel nodo, alcune funzioni che implicano il rescan (tipo importaddress e importprivkey) non possono funzionare, poichè i raw data non ci sono più.

EDIT:
[da qui https://www.reddit.com/r/Bitcoin/comments/46f67s/bitcoin_v0120_has_been_tagged_for_release/d04ksz9
sembra che quelle funzioni siano possibili ma senza il rescan; bisognerà verificare se sarà proprio così e se il wallet indicherà almeno il bilancio corretto rispetto alle chiavi private importate.]

Ecco a cosa servono i raw data in un full node (oltre a creare i database degli UTXO e l'indice dei blocchi):

Quote
the raw data is used only to relay blocks to other nodes, to handle reorganizations, to look up old transactions (if -txindex is enabled or via the RPC/REST interfaces), or for rescanning the wallet

Queste sono quindi le uniche funzionalità perse dai nuovi nodi con pruning attivato.


Quote
0.11.0

This release supports running a fully validating node without maintaining a copy of the raw block and undo data on disk. To recap, there are four types of data related to the blockchain in the bitcoin system: the raw blocks as received over the network (blk???.dat), the undo data (rev???.dat), the block index and the UTXO set (both LevelDB databases). The databases are built from the raw data.

Block pruning allows Bitcoin Core to delete the raw block and undo data once it’s been validated and used to build the databases. At that point, the raw data is used only to relay blocks to other nodes, to handle reorganizations, to look up old transactions (if -txindex is enabled or via the RPC/REST interfaces), or for rescanning the wallet. The block index continues to hold the metadata about all blocks in the blockchain.

The user specifies how much space to allot for block & undo files. The minimum allowed is 550MB. Note that this is in addition to whatever is required for the block index and UTXO databases. The minimum was chosen so that Bitcoin Core will be able to maintain at least 288 blocks on disk (two days worth of blocks at 10 minutes per block). In rare instances it is possible that the amount of space used will exceed the pruning target in order to keep the required last 288 blocks on disk.

Block pruning works during initial sync in the same way as during steady state, by deleting block files “as you go” whenever disk space is allocated. Thus, if the user specifies 550MB, once that level is reached the program will begin deleting the oldest block and undo files, while continuing to download the blockchain.

For now, block pruning disables block relay. In the future, nodes with block pruning will at a minimum relay “new” blocks, meaning blocks that extend their active chain.

Block pruning is currently incompatible with running a wallet due to the fact that block data is used for rescanning the wallet and importing keys or addresses (which require a rescan.) However, running the wallet with block pruning will be supported in the near future, subject to those limitations.

Block pruning is also incompatible with -txindex and will automatically disable it.

Once you have pruned blocks, going back to unpruned state requires re-downloading the entire blockchain. To do this, re-start the node with -reindex. Note also that any problem that would cause a user to reindex (e.g., disk corruption) will cause a pruned node to redownload the entire blockchain. Finally, note that when a pruned node reindexes, it will delete any blk???.dat and rev???.dat files in the data directory prior to restarting the download.
1538  Local / Discussioni avanzate e sviluppo / Re: curve ellittiche e algoritmo ECDSA on: January 24, 2016, 07:55:41 PM
...
mentre 2*A = A+A si ottiene così

x_2A=((3〖x^2〗_A)/(2y_A ))^2-〖2x〗_A
〖          y〗_2A=((3〖x^2〗_A)/(2y_A ))(x_A-x_2A )-y_A

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.
Non capisco i simboli 〖 ... 〗si puo' riscrivere senza?


Avevo copiato da Word e in effetti non si capiva molto. Guarda adesso se si capisce.
1539  Local / Discussioni avanzate e sviluppo / Re: curve ellittiche e algoritmo ECDSA on: January 24, 2016, 01:19:49 PM
- come viene definita la somma nel gruppo E(K) tra le coppie (a, b) e (c, d) con a, b, c, d in K?
- qual'è l'elemento neutro del gruppo E(K) rispetto alla somma?

A queste due domande ho tentato di rispondere nei post 4 e 5 di questo thread.


- esiste un algoritmo per calcolare n*(a, b) con n, a, b in K, senza fare (a, b) + (a, b) ... + (a, b) n volte?

Certo, si basa proprio su n*(a,b), si tratta in sostanza di dividere n in 2^m passi e applicare ricorsivamente la formula di duplicazione 2*(a,b) (però per essere più preciso devo andare a cercarlo)
1540  Local / Italiano (Italian) / Re: [ATTENZIONE] Traduzione libro Mastering Bitcoin on: January 24, 2016, 09:02:55 AM
...
Non riporta la soluzione (3,17) poichè riporta già la soluzione (3,0), che è la stessa. ...

Ok, in effetti in modulo 17, zero è congruente a 17 e questo l'ho capito. Mi sono imbattuto in questo documento che spiega qualcosa e incomincio a farmi domande piu' specifiche
http://kakaroto.homelinux.net/2012/01/how-the-ecdsa-algorithm-works/
Adesso devo capire il ruolo dei vari elementi coinvolti, vorrei capirlo prima su numeri piccoli ... si fa riferimento alla somma di due punti, rimanendo nel caso modulo 17 come ricavo ad esempio (2, 7)+(2, 7) ossia 2*(2, 7)?
IN generale, come calcolo (a, b) + (c, d) e come posso essere sicuro che sia un elemento della curva?
Nel caso di curva ellittica in R^2 usa le rette tangenti e si vede che si intersecano ma nel capo dei discreti? Succede solo se la base è un numero primo?
Vorrei poter simulare a mano il funzionamento ...
NB: sono OT scusate.

Ho aperto un thread apposito https://bitcointalk.org/index.php?topic=1339031.msg13658587#msg13658587
per discutere di questo argomento.

La risposta breve è che:
quando l'insieme delle coordinate possibili per x e y (nel tuo caso: a,b,c,d) sono prese in un sottocampo dei numeri reali (sia per (a,b) che per (c,d))
quando (a,b) e (c,d) soddisfano entrambe la stessa equazione di una curva ellittica
quando hai definito una somma per cui (a,b) + (c,d) è sempre un punto della curva ellittica (nel piano cartesiano con coordinate reali)

allora per un teorema di Poincarè del 1900
la loro somma (a,b) + (c,d) è sempre un punto della curva ellittica con coordinate che stanno ancora nel sottocampo dei numeri reali da cui ha pescato a,b,c,d.

Quindi se a,b,c,d appartengono a F17, come nell'esempio di mastering bitcoin, allora sicuramente anche P = (a,b) + (c,d) (somma definita inizialmente su R) deve avere ancora coordinate in F17.

D'altronde se per la risoluzione dell'ultimo teorema di Fermat Andrew Wiles ha utilizzato proprio le curve ellittiche il motivo è proprio questo  Wink

Per quanto riguarda come si fa a fare la somma, è semplice geometria analitica: applica il discorso della secante nel caso della somma di due punti distinti in R, troverai una formula che ottiene le 2 coordinate del punto finale per mezzo proprio di a,b,c,d; la stessa formula vale anche nel sottocampo K, cioè la teoria afferma che sicuramente le coordinate che otterrai saranno ancora nel sottocampo nel quale stai lavorando. Ovviamente devi fare però tutti i calcoli sulle coordinate modulo p!
 
Pages: « 1 ... 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 [77] 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 »
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!