Author

Topic: Ciao, sono quasi nuovo, posto questo perché non l'ho capito (Read 198 times)

jr. member
Activity: 31
Merit: 20
Avevo pensato una cosa simile... Buttandola sulla fortuna si potrebbe fare un bot che testi varie chiavi private per vedere se corrispondono a indirizzi bitcoin?

Esiste un progetto simile di attacco distribuito, il Large Bitcoin Collider (LBC):
https://lbc.cryptoguru.org/stats

Al ritmo di un miliardo e mezzo di chiavi al secondo hanno coperto finora le prime 2^54 chiavi private (lo spazio totale da coprire è di 2^160 chiavi private) scoprendo qualche indirizzo con fondi presenti.

Stimano un anno per coprire 2^56 chiavi con l'attuale potenza aggregata, considera che per ogni bit in più da coprire il tempo di ricerca necessario raddoppia per cui solo per arrivare a 2^60 chiavi potrebbero impiegarci almeno altri 10 anni...


Se invece ti vuoi divertire basta che ti scarichi un buon generatore di paper wallet (https://bitcoinpaperwallet.com/)  e generi qualche brain wallet usando le password che ritieni più probabili, è il modo meno frustrante per scoprire la private key di qualche indirizzo usato in passato sulla blockchain...


jr. member
Activity: 31
Merit: 20
Onestamente non sapevo che i brain wallets funzionassero così, ho una discreta infarinatura di crittografia e non li avevo mai usati (va da sè che non sapevo il funzionamento) ma non pensavo proprio esistesse la possibilità di generare un indirizzo a partire da una password proprio perchè suscettibili al chosen-plaintext-attack, cioè pensavo proprio che bitcoin non lo permettesse...buono a sapersi

Purtroppo in passato parecchi bitcoins sono stati sottratti a chi ha riposto fiducia in un brain wallet (idea affascinante peraltro perchè rappresenta un modo per custodire la private key solo nella propria mente, senza bisogno di stamparla o salvarla su un harddisk).

Non si tratta in realtà di una funzionalità prevista dal protocollo Bitcoin, ovvero ciò che il sistema Bitcoin si aspetta è solo che tu generi una private key random lunga esattamente 32 bytes (pari a 64 cifre esadecimali), poi come la generi è affar tuo.

Questa per esempio è una private key perfettamente lecita che ha contenuto diversi BTC in passato (in Hex):
0000000000000000000000000000000000000000000000000000000000000001

la quale controlla questo indirizzo:
1EHNa6Q4Jz2uvNExL497mE43ikXhwF6kZm

E' la più semplice private key che si possa immaginare, si prende il punto generatore G e lo si moltiplica per 1 ottenendo la Public Key che rappresenta esattamente il punto di partenza G.

Il concetto di brain wallet nasce da qui, usando come private key una sequenza numerica (con caratteri Hex da 0 a F) facile da ricordare per il detentore.
Poi si è evoluto sfruttando il fatto che la funzione di hashing Sha256 produce come output esattamente 64 cifre esadecimali, proprio quelle richieste dal sistema Bitcoin per la private key.

Allora puoi scegliere una password a piacere, ne fai lo Sha256 e ottieni la tua private key mnemonica, ciò che si intende oggi di norma per "brain wallet".  

Sono state craccate password considerate inviolabili come:
"how much wood could a woodchuck chuck if a woodchuck could chuck wood"

che controlla il seguente indirizzo:
1GjjGLYR7UhtM1n6z7QDpQskBicgmsHW9k

Questo brain wallet conteneva la bellezza di 500 bitcoins, il legittimo proprietario ha avuto la GRANDE FORTUNA di imbattersi in un famoso White Hat che lo avvisato sottraendogli qualche Satoshi per fargli capire che il suo brain wallet era compromesso.

Un altro sprovveduto ha pensato bene di usare come password il termine "password" ma invece di applicare un singolo Sha256, lo ha applicato 1975 volte (probabilmente il suo anno di nascita) ritenendo di essere al sicuro. Conto svuotato.

Morale, non usate MAI i brain wallet anche se può apparentemente sembrare un'idea geniale: prima o poi qualche bot grazie ad un dictionary brute force avanzato troverà quella sequenza di parole che avete scelto.

Le private key devono essere genuinamente casuali per stare in una botte di ferro.
legendary
Activity: 2506
Merit: 1120
Onestamente non sapevo che i brain wallets funzionassero così, ho una discreta infarinatura di crittografia e non li avevo mai usati (va da sè che non sapevo il funzionamento) ma non pensavo proprio esistesse la possibilità di generare un indirizzo a partire da una password proprio perchè suscettibili al chosen-plaintext-attack, cioè pensavo proprio che bitcoin non lo permettesse...buono a sapersi

Guarda anche https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki
member
Activity: 113
Merit: 12
Onestamente non sapevo che i brain wallets funzionassero così, ho una discreta infarinatura di crittografia e non li avevo mai usati (va da sè che non sapevo il funzionamento) ma non pensavo proprio esistesse la possibilità di generare un indirizzo a partire da una password proprio perchè suscettibili al chosen-plaintext-attack, cioè pensavo proprio che bitcoin non lo permettesse...buono a sapersi
jr. member
Activity: 31
Merit: 20
Non ci posso credere, ma sto bot che ha scritto gira su github per caso?  Roll Eyes Roll Eyes Roll Eyes

per dire, sarebbe più profittevole far girare un bot su una wordlist di senso compiuto (o su una serie di chiavi generate a cascata come nel 4 punto) che fare mining...


Questi bot girano addirittura sulla TestNet dove il bitcoin non ha alcun valore.

Se per esempio provi a creare un brain wallet bitcoin TestNet con una password semplice e ti fai accreditare bitcoins da un faucet, dopo pochi minuti i tuoi bitcoins sono depredati da un bot.

Questi bot sulla TestNet hanno una valenza pedagogica, mostrano che i brain wallet non sono MAI da usare, anche con password complesse sono violabili da un hacker esperto.

Questo non ha nulla a che vedere con la solidità della crittografia alla base del bitcoin che rimane estremamente robusta, ha piuttosto a che vedere con l'eccesso di confidenza nei confronti dei brain wallet, i quali NON rappresentano un mezzo sicuro per custodire i propri bitcoins.

 
Ormai i bot che dragano brain wallets sono talmente diffusi che è improbabile vi sia rimasto un solo indirizzo con più di qualche Satoshi dentro.


La parte dell'esperimento più interessante è rappresentata invece dalla scoperta di private keys "addomesticate" da codice malevole inserito nei software wallet e/o web wallet.
Un motivo in più per non fidarvi di software wallet proprietari non sottoposti ad audit e soprattutto di web wallet facilmente adulterabili da dipendenti infedeli che mettono mano al codice.



newbie
Activity: 11
Merit: 0
Non ci posso credere, ma sto bot che ha scritto gira su github per caso?  Roll Eyes Roll Eyes Roll Eyes

per dire, sarebbe più profittevole far girare un bot su una wordlist di senso compiuto (o su una serie di chiavi generate a cascata come nel 4 punto) che fare mining...

Parte del procedimento che cita gira su Github, confermo, ma è una tecnica di attacco già nota anche in altri campi della crittografia. Quello che realmente ha fatto non è troppo chiaro in effetti, magari sono più deduzioni sue o conferme senza prove delle sue precedenti convinzioni...
member
Activity: 113
Merit: 12
Non ci posso credere, ma sto bot che ha scritto gira su github per caso?  Roll Eyes Roll Eyes Roll Eyes

per dire, sarebbe più profittevole far girare un bot su una wordlist di senso compiuto (o su una serie di chiavi generate a cascata come nel 4 punto) che fare mining...
newbie
Activity: 11
Merit: 0
Molto interessante questa segnalazione (ed annessa spiegazione), grazie per averla postata.
newbie
Activity: 16
Merit: 0
Penso meriterebbe più attenzione è davvero interessante!
Ti spiego cosa ho capito io, magari in due capiamo al 100%.
In pratica per generare una chiave privata si può partire da un seme, che dovrebbe essere il più complicato e casuale possibile. Il seme passa attraverso una funzione di hash e si genera la chiave privata, quindi SHA256("seme") = private key. Il seme può avere qualsiasi lunghezza, e ovviamente non conviene usare parole comuni tipo "gatto" perché chiunque potrebbe fare SHA256("gatto") e avere la tua stessa chiave privata, dopodiché è un attimo fare uno scan della blockchain, trovare il tuo indirizzo e se ci sono soldi lui ha la chiave per trasferirli.
Questo è un pessimo metodo per generare la chiave privata, eppure secondo le sue ricerche ci sono indirizzi sulla blockchain la cui private key deriva da frasi di senso compiuto tipo SHA256("i find your lack of faith disturbing").. e dice che chiaramente sono indirizzi fatti per essere trovati. Inquietante ma "affari loro".

Nella seconda parte racconta di aver iniziato una caccia al tesoro con un bot che tentava varie combinazioni per ottenere chiavi private e controllava sulla blockchain se corrispondessero a qualche indirizzo esistente. Si divide in più esperimenti.

Experiment 1:
(traduco)
Il mio primo esperimento è stato vedere se qualcuno ha usato l'hash di un blocco come private key. Sarebbe un modo elegante per "comprimere" 32 bytes nella tua testa. Devi solo ricordare l'altezza del blocco (il numero del blocco, ndr) che sono solo 6 cifre e i corrispondenti 32 byte sono salvati per sempre sulla blockchain stessa!
Risultati: successo! Ho trovato 46 indirizzi ai quali sono stati inviati bitcoin tra il 2009 e il 2016. Come previsto hanno tutti un bilancio di 0 btc o perché il proprietario li ha spostati o perché sono stati scoperti da qualcun altro.
(fine traduzione)

Fin qui ci può stare in effetti è un'idea che può essere venuta a molte persone quella di utilizzare come seme una stringa casuale come l'hash di un blocco che è visibile da qualsiasi explorer. Ti ricordi il numero del blocco ed è fatta.

Ti faccio un esempio se non è chiaro, blocco numero 499468 https://blockchain.info/block/000000000000000000a3759788bfe1f05ee802377b016e64df8a880f188c3b75 a destra puoi vedere l'hash e la merkle root usata per l'esperimento 2.

Experiment 2:
Stessa cosa ma al posto che usare l'hash usa la merkle root del blocco. 6 indirizzi trovati, nulla di troppo preoccupante.

Experiment 3:
Prova a questo punto ad utilizzare SHA256("seme") ripetuto su alcune parole comuni. Ripetuto significa applicare la stessa funzione due o più volte, facendo quindi SHA256(SHA256("gatto")) = private key. Seguono alcuni risultati con "hello", "password", "sender" etc.
Probabilmente era visto come un metodo sicuro di creazione di chiavi ma chiaramente non lo è e l'autore del post lo ha dimostrato.

Da qui inizia la parte veramente inquietante.

Experiment 4:
Qui scopre che alcune chiavi private sono generate da indirizzi pubblici, ovvero SHA256(indirizzo) = private key. Questo non ha molto senso da un punto di vista pratico perché comunque un indirizzo non è comodo da ricordare.

(traduco)
Mi sono chiesto, "perché qualcuno dovrebbe farlo?"

Inizialmente ho pensato fosse qualcuno che pensava di potersela cavare ricordando un solo pezzo di informazione invece di due. Forse hanno una coppia di indirizzo/chiave privata preferita e ha ne ha derivata un'altra da quella? Ho pensato fosse possibile. Potresti fare questa operazione a catena e derivare tutte le chiavi che vuoi ricordando solo la prima. Ma ho scartato questa opzione per una semplice ragione; i bitcoin inviati a quegli indirizzi sono stati trasferiti entro pochi minuti o secondi. Se qualcuno aveva generato quelle chiavi per se stesso allora perché trasferire sempre immediatamente i fondi?
(fine traduzione)

Da qui spiega la sua teoria secondo la quale qualcuno abbia inserito un codice malevolo probabilmente all'interno di un exchange o di un wallet generator in modo da poter facilmente trovare le chiavi private e rubare i bitcoin che transitano su quegli indirizzi.  Shocked

Da quanto ho capito quindi la truffa funzionerebbe in questo modo: tu crei un portafoglio, la tua chiave privata al posto che essere generata da un seme casuale e sicuro viene generata partendo da un indirizzo pubblico, quindi una stringa che chiunque ha a disposizione. A questo punto l'attaccante aspetta che sul tuo indirizzo venga depositata una somma e la ruba. L'autore stesso riesce a compiere un "furto" con il suo bot e dice di aver trovare dozzine di indirizzi potenzialmente compromessi.

Potrebbe sempre trattarsi di un errore di codice chiaramente ma fa poca differenza, ci sono indirizzi facilmente attaccabili sulla blockchain, e non per sbadataggine degli utenti o per qualche sofisticato virus che ruba le chiavi private. Spero comunque la cosa sia poco diffusa.
newbie
Activity: 1
Merit: 0
Ciao a tutti, sono un programmatore, interessato da anni ai bitcoin, letto e riletto di tutto. Ieri su paste ho letto questo post, dove il tizio sostiene di recuperare le chiavi private di qualche account e che sistematicamente vengono rubati dalla blochkchain bitcoin di altri che vengono intercettati..in realtà non ho capito bene cosa sostiene, o meglio cosa sostiene si ma non benissimo. Sarà un po l inglese e i termini complicati però se qualcuno volesse fare una bella traduzione o spiegarmelo in parole povere. Grazie Cheesy

https://pastebin.com/jCDFcESz
Jump to: