Ho fatto un veloce controllo sul numero delle chiavi private che possono essere generate, ed ho trovato più fonti che confermano il fatto che le chiavi private generabili sono tecnicamente 2^256 (^257 non l'ho trovato da nessuna parte me lo puoi spiegare nel dettaglio? hai qualche fonte?).
L'equivoco nasce da cosa si intenda per 'chiave privata'.
Questa per esempio è una
chiave privata in formato Hex (64 Hex chars):
A2242EAD55C94C3DEB7CF2340BFEF9D5BCACA22DFE66E646745EE4371C633FC8Essa corrisponde allo scalare k che deve essere moltiplicato per il punto G allo scopo di ottenere il punto P sulla curva ellittica (P = k * G).
Il numero massimo di chiavi private in formato Hex che è possibile generare è poco meno di 2^256 (il numero esatto di chiavi private possibili è pari al numero di punti che costituiscono la curva ellittica secp256k1).
L'equivoco nasce nel momento in cui converti la chiave privata in formato WIF (Wallet Import Format) in quanto esistono 2 diversi formati (WIF e WIF compresso) che danno origine a 2 chiavi private diverse:
Questa è la chiave privata scritta sopra, codificata in formato WIF:
5K3hGHXx9qzEKZLh6zKS5umqDGfuc8KUbWtXZ9S2ngDo81AMoxhQuesta è la stessa chiave codificata in formato WIF compresso:
L2etiTycS3Dbnujv1RzMifvsoAAjC3JYoLvRrtDUtc7UZo76CUb2Per ogni chiave privata in formato Hex esistono quindi due possibili codifiche in formato WIF (compressa e non compressa) per cui il numero totali di chiavi private in formato WIF raddoppia e diventa poco meno di 2^257 (2^256 * 2).
In breve, se ti riferisci al numero di chiavi possibili in formato Hex la risposta è "poco meno di 2^256", se ti riferisci al numero di chiavi possibili in formato WIF (compresse + non compresse) allora risposta è "poco meno di 2^257".
A mio avviso se il contesto del discorso ruota attorno al tema della sicurezza allora è più corretto riferirsi al numero di chiavi private in formato Hex (2^256) in quanto per assurdo potremmo avere 10 formati WIF diversi (che produrrebbero altrettanti diversi Bitcoin address) ma il livello di sicurezza rimarrebbe il medesimo (poco meno di 2^160 chiavi Hex da attaccare con la più evoluta variante dell'algoritmo Pollard's rho).
P.S.: se ti fosse sfuggito ti suggerisco di studiarti con attenzione il pregevole tutorial sulle curve ellittiche postato da arulbero l'anno scorso: https://bitcointalk.org/index.php?topic=1339031.0 Perfetto. Concordo.
Chiarissimo il discorso del 257.
Ottimo il link al post di arulbero, che a questo punto linkerei per chi vuole approfondire l'argomento relativo alla curva ellittica.
Il mio unico dubbio è che non vorrei instaurare dubbi infondati sulla sicurezza del sistema, viceversa va comunque data una informazione corretta, il più semplificata possibile (visto gli intenti del libro).
Al di là del concetto delle chiavi in formato compresso, che tralascierei, possiamo "semplificare" la questione aggiungendo la parte in grassetto:
Più di una volta mi è stato sollevata la domanda: "Cosa succede se qualcuno genera le mie stesse 12 parole? Può accedere ai miei Bitcoin?" La risposta è SI, ma è altamente improbabile praticamente impossibile. La quantità di chiavi private generabili è di (2^256) si avvicina al numero di atomi presenti nelluniverso conosciuto (stimato allincirca in un numero che va da 2^240 e 2^280), sicuramente è più semplice per due persone trovare lo stesso granello di sabbia sul pianeta terra (che in base ad una stima molto approssimativa risulta essere 2^63), rispetto a trovare una chiave privata già utilizzata da qualcun altro.
In realtà, a causa del formato più piccolo utilizzato dall'address bitcoin (160 bit rispetto ai 256 bit delle chiavi private), più chiavi private possono accedere ai Bitcoin depositati sul medesimo address. Il numero di queste chiavi è di circa 2^96! A prima vista, un numero così grande potrebbe spaventare, significa infatti che esistono moltissime chiavi private che possono accedere ai miei Bitcoin. Il punto è che, nonostante siano tantissime, si perdono all'interno delle 2^256 esistenti. In particolare si stima che, tramite un attacco di tipo brute force, cioè un sistema automatico che prova tutte le possibili soluzioni ad un determinato problema, si riesca a trovare una chiave privata in grado di sbloccare un determinato address una volta ogni 2^160 tentativi, che sono comunque un numero considerevole per il livello tecnologico attuale. Per completezza di informazione, va inoltre detto che se dal nostro address abbiamo effettuato un trasferimento verso un altro address, abbiamo esposto a terzi la nostra chiave pubblica. Questa ulteriore informazione "facilita" l'attività di chi volesse cercare di accedere ai nostri Bitcoin, riducendo di fatto i numeri di tentativi medi per riuscire a sbloccare i fondi a 2^128.
Da un punto di vista della sicurezza del sistema, è corretto dire che servono quindi mediamente 2^128 tentativi per riuscire a rubare i Bitcoin depositati su un determinato address, sempre considerando il fatto che nel frattempo non siano stati spesi o spostati su altro address.
Per approfondire l'argomento, trovate ulteriori informazioni qui: https://bitcointalk.org/index.php?topic=1339031.0Per chi avesse poca dimestichezza con gli elementi potenza, in questo caso parliamo di un raddoppio ogni unità espressa nellelevamento.
...
2^128 = 340.282.366.920.938.000.000.000.000.000.000.000.000....
2^160 = 1.461.501.637.330.900.000.000.000.000.000.000.000.000.000.000.000Ditemi cosa ne pensate, se lo ritenete corretto, aggiungo la parte in grassetto.
Grazie per l'aiuto ragazzi.