Pages:
Author

Topic: brainwallets da password - page 2. (Read 3737 times)

legendary
Activity: 1932
Merit: 2077
October 27, 2016, 03:23:56 PM
#26
Poco fa è stato rilasciato Bitcoin Core 0.13.1.

Tra le note di rilascio ho trovato le seguenti:
Quote
 
  Increased security for multisig: Bitcoin addresses (both P2PKH addresses
  that start with a '1' and P2SH addresses that start with a '3') use a hash
  function known as RIPEMD-160.  For P2PKH addresses, this provides about 160
  bits of security---which is beyond what cryptographers believe can be broken
  today.  But because P2SH is more flexible, only about 80 bits of security is
  provided per address
. Although 80 bits is very strong security, it is within
  the realm of possibility that it can be broken by a powerful adversary.
  Segwit allows advanced transactions to use the SHA256 hash function instead,
  which provides about 128 bits of security  (that is 281 trillion times as
  much security as 80 bits and is equivalent to the maximum bits of security
  believed to be provided by Bitcoin's choice of parameters for its Elliptic
  Curve Digital Security Algorithm
[ECDSA].)

Non sapevo che gli indirizzi P2SH avessero una sicurezza diversa da quella dei più tradizionali indirizzi P2PKH e soprattutto non immaginavo che questa sicurezza potesse essere così più bassa ("solo" 80 bit).
Allora l'anello debole della catena che protegge un indirizzo P2SH non sarebbe più ECDSA a questo punto, come si ritiene invece di solito.  Discorso da approfondire.

Da notare inoltre come venga ribadito che i 128 bit di sicurezza delle chiavi private relative a ECDSA sono in realtà solo una stima della sicurezza effettiva di ECDSA (la quale potrebbe essere anche minore).
legendary
Activity: 1932
Merit: 2077
October 23, 2016, 08:58:34 AM
#25
La scelta di una chiave privata equivale alla scelta di un numero compreso tra 1 e n-1, dove

n=115792089237316195423570985008687907852837564279074904382605163141518161494337 che è circa 2^256.

Questo numero rappresenta il numero di punti della curva ellittica secp256k1, curva usata nella generazione delle chiavi pubbliche e quindi degli address bitcoin (e usata anche nella firma e nella verifica delle transazioni, vedi https://bitcointalksearch.org/topic/curve-ellittiche-e-algoritmo-ecdsa-1339031).

Ogni punto della curva ellittica corrisponde a una chiave pubblica, mentre la chiave privata indica la "posizione relativa" che il punto a cui si riferisce occupa rispetto al punto base G (ad esempio il punto numero 1 corrisponde a G, il punto numero 2 corrisponde a G+G=2*G,  la chiave privata 3 <-> punto 3*G,  chiave privata 4 <-> punto 4*G e via dicendo...)

Quindi scegliere una chiave privata equivale dal punto di vista della sicurezza a scegliere un valore a caso tra n valori (dove n è quasi 2^256)? Cioè, dal punto di vista del numero di tentativi che uno sconosciuto dovrebbe fare per indovinare il numero scelto da me, è come se io lo avessi pescato da un sacchetto di 2^256 numeri?

Se così fosse, in media sarebbero necessari 2^256/2 tentativi per indovinare il mio numero, e al massimo in 2^256 tentativi la mia chiave sarebbe scoperta con certezza:  la sicurezza della mia chiave privata sarebbe quindi effettivamente di 256 bit.

Ma in realtà non è così.

Si può dimostrare infatti che l'entropia di una chiave privata nel sistema ECC usato dal bitcoin è di "soli" 128 bit (sostanzialmente il migliore algoritmo Rho di Pollard ha bisogno in media di 2^128 tentativi per poter ricavare la chiave privata da quella pubblica, per approfondire la differenza tra la lunghezza di una chiave in bit e i bit di entropia/sicurezza vedi --> http://crypto.stackexchange.com/questions/26791/how-many-bits-of-entropy-does-an-elliptic-curve-key-of-length-n-provide).

Questo significa in parole povere che l'associazione tra la lista di tutte le chiavi private (numeri) e la lista di tutte le chiavi pubbliche corrispondenti (punti della curva) non è affatto completamente casuale/imprevedibile. (A voler essere pignoli è anche peggio: ad oggi si dice che la sicurezza di ciascuna chiave privata è di 128 bit poiché si conoscono solo algoritmi risolutivi dell'ordine di O(2^(n/2)), ma se un domani si scoprisse l'esistenza di un algoritmo risolutivo dell'ordine di O(2^(n/4)), improvvisamente l'entropia delle nostre chiavi private scenderebbe a 256/4= 64 bit! Di fatto possiamo affermare con certezza solo che l'entropia di queste chiavi non può essere superiore a 128 bit, ma non siamo in grado di dimostrare che non sia minore).

Riassumendo, quando si sceglie una chiave privata di 256 bit su una curva ellittica, la possibilità di un malintenzionato di recuperarla risalendo dalla chiave pubblica è la stessa che avrebbe di indovinare un numero scelto a caso tra 1 e 2^128 (128 bit di entropia).

Come si calcola l'entropia?

L'entropia H è data dal logaritmo in base 2 del numero di possibili combinazioni (equiprobabili), in questo caso è
H= log2(2^128) = 128 bit

Quote
Per fare un altro esempio, le vecchie versioni di Electrum per generare il loro seed si basavano sulla scelta di 12 parole tra una lista di 1626:
quindi, poiché si avevano 1626^12 possibili combinazioni, l'entropia H = log2(1626^12)=12*log2(1626)=128 bit di entropia (adesso sono passati a una lista di 2048 parole seguendo il bip39, vedi https://www.reddit.com/r/Bitcoin/comments/2jazzc/bip0039_word_list_alert_check_your_backups_now/ per approfondimenti).

A questo punto quale sarebbe l'entropia di una chiave che si basasse sulla scelta di 4 transazioni a caso in un insieme di 10^8 transazioni possibili?

H = log2((10^8)^4)=4*log2(10^8)=4*26,5 = 106 bit

Se (e quando) le transazioni saranno 10^9, allora si aggiungeranno all'entropia iniziale 4*log2(10) = circa 12 bit, per un totale di 118 bit.

Se invece si scegliessero 5 transazioni a caso nella blockchain attuale avremmo:

H = log2((10^8)^5)=5*log2(10^8)=5*26,5 = 132 bit.

Quindi scegliere 1 chiave privata a caso tra tutte le n possibili equivale a scegliere 5 transazioni a caso nella attuale blockchain

La questione delicata a questo punto (a meno che non abbia fatto errori di calcolo finora) è proprio sul come selezionare veramente a caso 5 transazioni nella blockchain (e in un modo tra l'altro facilmente memorizzabile per un singolo essere umano ma difficilmente ricostruibile dagli altri esseri umani).   A naso la mia idea è che bisogna puntare sul fatto che molte vicende significative ma private di ciascuno di noi sono del tutto inaccessibili alla quasi totalità del resto del genere umano, e quindi bisognerebbe partire da lì per costruire un modo personalizzato di selezionare le transazioni.  
full member
Activity: 145
Merit: 100
October 22, 2016, 02:48:40 PM
#24
Seguo con interesse...
Io avevo pensato di fare una cosa simile utilizzando il testo di fumetti famosi sempre reperibili, o come arretrati o nei mercatini dell'usato...

Quindi collegheresti i fumetti alla blockchain?

No... pensavo di utilizzare informazioni da ricordare per individuare albo e pagina, poi un algoritmo mentale per ricavare dal testo della pagina una sequenza di caratteri da cui poi ricavare l'hash... solo che non sono mai stato sicuro della validità della cosa.
Quella di usare la blockchain invece, visto la mole di dati e la sua immortalità, mi sembra un'idea migliore.
Ripeto... seguo con interesse...
legendary
Activity: 1932
Merit: 2077
October 22, 2016, 01:47:43 PM
#23
Seguo con interesse...
Io avevo pensato di fare una cosa simile utilizzando il testo di fumetti famosi sempre reperibili, o come arretrati o nei mercatini dell'usato...

Quindi collegheresti i fumetti alla blockchain?

Io penso che il concetto di "sempre reperibili" soprattutto per oggetti fisici sia discutibile. Per questo ho scelto due insiemi di dati estremamente diversi come caratteristiche da collegare insieme:

1) la mia testa, per definizione privata; ovviamente avendo delle limitazioni posso memorizzare solo alcuni dati personali/familiari molto ma molto semplici e estremamente significativi per me (meglio se sono significativi solo per me, più privati sono i dati meglio è, già le date di nascita a cui alludevo nel post precedente sono in realtà un po' troppo "pubbliche", nel senso di facilmente reperibili; non metterei a questo livello mai informazioni pubbliche tipo squadra del cuore, nome di band, fumetti, record del mondo sportivi, testi canzoni, film, libri --> tutte cose già pubbliche e quindi note!!)

2) la blockchain, pubblica, immodificabile e "eterna" (finchè esiste la blockchain ci sono ancora i miei bitcoin, se non c'è non ci sono più neanche i bitcoin) ma estremamente complessa e ricca di dati  (inoltre con il passare del tempo le sue dimensioni aumentano e di conseguenza dovrebbe aumentare la possibilità di scelta/entropia nella generazione della chiave privata)

Resta da verificare matematicamente quanto sia solida una scelta di questo tipo.

full member
Activity: 145
Merit: 100
October 22, 2016, 01:11:23 PM
#22
Seguo con interesse...
Io avevo pensato di fare una cosa simile utilizzando il testo di fumetti famosi sempre reperibili, o come arretrati o nei mercatini dell'usato...
legendary
Activity: 1932
Merit: 2077
October 22, 2016, 09:08:56 AM
#21
Qual è il metodo per voi più sicuro per generare, memorizzare e conservare una chiave privata?

Il modo più "semplice" (dal punto di vista logico, non pratico) di creare una chiave sarebbe quello di lanciare 256 volte una moneta perfettamente simmetrica, ottenendo una stringa lunga 256 caratteri del tipo 10011100011100....

Ovviamente questo metodo ha tra gli altri il grosso svantaggio derivante dal fatto che la memorizzazione del risultato per un essere umano è praticamente impossibile.
Visto che il dato deve stare su un supporto che sia potenzialmente indistruttibile (no file su hard disk/chiavette, no foglio di carta, niente di fisico) e deve essere facilmente recuperabile all'occorrenza, perchè non utilizzare i dati presenti nella blockchain stessa?

Nella blockchain sono presenti decine di milioni di indirizzi utilizzati almeno una volta (sui circa 2^160 possibili). Questi indirizzi sono in qualche modo messi in relazione tra loro mediante le transazioni che modificano le associazioni indirizzi/bitcoin. Le transazioni sono memorizzate in blocchi. Ci sono al momento circa 450k blocchi e centinaia di milioni di transazioni.

L'idea è quella di selezionare, all'interno di questo enorme "vocabolario", alcune parole chiave, come le id di alcune transazioni, primo address di una transazione, la quantità di bitcoin trasferiti...

I dati della blockchain saranno sempre disponibili (e se non lo fossero allora i vostri btc sarebbero persi in ogni caso), bisogna quindi individuare solo un modo personalizzato di estrarre queste informazioni.

Per mantenere alta l'entropia ognuno dovrebbe scegliere per sè un algoritmo personalizzato e andare a pescare i dati che gli interessano, creando così delle specie di "frasi" particolari molto facili per lui da recuperare all'occorrenza.

Faccio un esempio (ma ovviamente è solo un esempio):
decido di memorizzare l'anno corrente (2016) e il nome di 4 persone (arulbero, aldo, giovanni, giacomo).

Di queste 4 persone, che io ovviamente devo conoscere, so per esempio l'età oggi (e questo è un dato che tranquillamente ricorderò anche tra 10 anni)

età (arulbero,aldo,giovanni,giacomo) nel 2016  --> 37 - 24 - 50 - 43 (sono gli unici dati da memorizzare, oltre l'algoritmo)

A questo punto, nel mio algoritmo, le prime 3 coppie di cifre indicano il blocco da cui inizio a estrarre i dati (372450) e le ultime due cifre corrispondono rispettivamente alla prima transazione (la numero 4 del blocco) e al numero di transazioni totali che estrarrò dalla blockchain


Riassumendo:
Quote
eta(arulbero,aldo,giovanni,giacomo) nel 2016  --> 37 - 24 - 50 - 43

partenza:blocco 372450, tx 4                       
totale transazioni da estrarre: 3

Per ogni transazione estraggo i seguenti dati:
dati:idtransazione*primo address di partenza*quantità bitcoin trasferiti  (gli asterischi servono solo per facilitare la lettura).
In questo caso:

Quote
416f95b89c12b1d8434737de9098cca6c8cbc05618606cbc7d0a2d61baa2f794*12uawNinG9PksdPk6PCCgvoEFUB4FsyZct*0336 <--dati tx1

b0a506c08d6ec17acdc7bf71c46ec41e701c3c148bb93b14a757af2de6655409*1HXfiv2EpL2durJNJuUceBGgHzpewFUH5o*00136486  <-- dati tx 2

2f2a975ddb0b368c21cb2ee7a03476e7b8461722217db62c5ef0d514096ffb29*1HV591kSQ6QC9GPor76UqXnQZrV82Lu7GT*001000077 <-- dati tx 3

Risultato finale, aggiungo i miei 4 nomi ai dati estratti dalla chain:

Quote
arulbero+aldo+giovanni+giacomo+416f95b89c12b1d8434737de9098cca6c8cbc05618606cbc7d0a2d61baa2f79412uawNinG9PksdPk6PCCgvoEFUB4FsyZct0336416f95b89c12b1d8434737de9098cca6c8cbc05618606cbc7d0a2d61baa2f79412uawNinG9PksdPk6PCCgvoEFUB4FsyZct0336416f95b89c12b1d8434737de9098cca6c8cbc05618606cbc7d0a2d61baa2f79412uawNinG9PksdPk6PCCgvoEFUB4FsyZct0336b0a506c08d6ec17acdc7bf71c46ec41e701c3c148bb93b14a757af2de66554091HXfiv2EpL2durJNJuUceBGgHzpewFUH5o001364862f2a975ddb0b368c21cb2ee7a03476e7b8461722217db62c5ef0d514096ffb291HV591kSQ6QC9GPor76UqXnQZrV82Lu7GT001000077

Ne faccio hash256 e ottengo la chiave privata:

d3f1ab1fae102c81c6e05b4b7944ac986feafc43a66f47e0a1b6afe40de86f0d (esadecimale)

da cui l'address   1DQ4PbcHB3EUt9gRZbcFwaWZty3SkX9bxt

(per fare i calcoli ho utilizzato i seguenti tool online  http://www.xorbin.com/tools/sha256-hash-calculator  e
 
https://gobittest.appspot.com/Address  ma ovviamente nel caso reale andrebbe fatto tutto in locale).



Potrebbe funzionare o secondo voi l'entropia finale sarebbe troppo bassa?
E' pur vero che alla fine ho solo scelto 3 transazioni consecutive (tx1 --> tx 2 --> tx3) ma l'arbitrarietà dei dati che ho scelto di estrarre da ogni tx e il fatto di combinare stringhe pubbliche con dati personali non dovrebbero garantire una sicurezza sufficiente?
Si potrebbero ovviamente pescare più tx e farlo in modo che siano maggiormente slegate tra loro ...





legendary
Activity: 1981
Merit: 1039
August 22, 2016, 09:33:51 AM
#20
usano le maschere per le pass basate sul comportamento umano è molto probabile che un umano scriva una parola o tutta minuscola o con una maiuscola all'inizio e come segni grafici per pigrizia andra sui soliti: trattini, underscore, chiocciole, asterischi, cancelletti ecc. questo abbatte pesantemente il numero di password da elaborare.
hero member
Activity: 708
Merit: 506
I support freedom of choice
August 22, 2016, 08:30:26 AM
#19
lo strenght test mi dice che quella password è di "soli" 66.7 bit di entropia mentre la filastrocca che usi per ricordala è di ben 487.7 bit sarebbe meglio usare quella Grin

http://rumkin.com/tools/password/passchk.php


se ti interessa qui c'è il pdf di Ryan Castellucci con le sue considerazioni alle pagine 34-35-36 ci sono esempi di costi e delle potenze in gioco converrebbe usare almeno password a 128bit per entropia per stare sicuri

https://rya.nc/cracking_cryptocurrency_brainwallets.pdf

Interessante il pdf. Pare che non si usino gli hash e quindi occorre aumentare la lunghezza della password, quindi usare una password casuale da 128 bit.

Sul programma per calcolare l'entropia ci andrei cauto, occorre essere molto conservativi.

21^12*10^4
73558275113866410000

è l'entropia della password del mio esempio supposto che il mio generatore di numeri casuali usi l'entropia del mio Sistema operativo. Sono circa 66 bit (2^66) che coincide con quel che dice il sito.

Sull'entropia della passphrase ci andrei cauto, prima di tutto non sono parole scelte a caso da un dizionario ma, per esempio la prima parola è un nome proprio e non un articolo o un verbo. La seconda frase inizia con un verbo ma non un articolo. Tutto questo riduce l'entropia ma il programma non lo calcola. Meglio essere conservativi e pensare all'entropia di solo 66 bit.

Oppure si possono prendere il numero di nomi propri (Zoe) da un dizionario semplice (1000 parole ad esempio), moltiplicarli per il numero di verbi (grugniva), ancora per il numero di verbi (Ruspando), gli avverbi (Velocemente), ecc. Bisognerebbe essere bravi in grammatica cosa che io non lo sono... Smiley
Il calcolo è così preciso.
legendary
Activity: 1981
Merit: 1039
August 22, 2016, 07:56:11 AM
#18
lo strenght test mi dice che quella password è di "soli" 66.7 bit di entropia mentre la filastrocca che usi per ricordala è di ben 487.7 bit sarebbe meglio usare quella Grin

http://rumkin.com/tools/password/passchk.php


se ti interessa qui c'è il pdf di Ryan Castellucci con le sue considerazioni alle pagine 34-35-36 ci sono esempi di costi e delle potenze in gioco converrebbe usare almeno password a 128 bit di entropia per stare sicuri

https://rya.nc/cracking_cryptocurrency_brainwallets.pdf


hero member
Activity: 708
Merit: 506
I support freedom of choice
August 22, 2016, 06:48:09 AM
#17
la private key è di 256 bit, i primi brainwallet nascevano con lo scopo di utilizzare qualcosa di semplice da ricordare come una canzone o una filastrocca ecc finchè poi non sono arrivati con le botnet.

Ho letto la storia dell'efficacia di queste botnet, molto carina.

Però avrei da ridire sul fatto che una filastrocca non possa essere utilizzata proficuamente per conservare una password. Per esempio se genero casualmente una password del tipo:
zgrvuhstmdtg5218
poi posso generare (inventarmi) una filastrocca del tipo:
Zoe Grugniva Ruspando Velocemente Un Hash. Stava Timidamente Mangiando Del Tartufo Grigio. 5218

Posso sapere anche quanti bit di entropia ha e pure posso calcolare il valore della password qui sopra: 20 milioni di euro. Supposto il caso in cui ogni tentativo corrisponda a calcolare un hash.

Questo un mio articolo su questo tema che comprende l'esempio citato:

http://www.kensan.it/articoli/Password_sicurezza.php
legendary
Activity: 1981
Merit: 1039
August 21, 2016, 08:05:34 PM
#16
la private key è di 256 bit, i primi brainwallet nascevano con lo scopo di utilizzare qualcosa di semplice da ricordare come una canzone o una filastrocca ecc finchè poi non sono arrivati con le botnet.

comunque sarebbe sempre un bello sforzo per ritrovarsi alla fine con un singolo indirizzo, mentre per ragioni di sicurezza e privacy è sempre meglio usarne di nuovi come puoi fare con i wallet gerarchici.

hero member
Activity: 708
Merit: 506
I support freedom of choice
August 21, 2016, 05:28:37 PM
#15
lo sono entrambi uno uno è gerarchico e l'altro no ma a quel punto tanto vale memorizzarsi la private key no ? a complessità siamo li più o meno  Grin


Forse e dico forse il vantaggio rispetto a memorizzarsi direttamente la private key è che uno può scegliersi il grado di sicurezza ed evitare di memorizzarsi una password lunghissima come la private key.

Se uno ritiene che 128 bit di entropia siano sufficienti allora può limitarsi a una password relativamente più breve della private key.

P.S. quanti bit ha la private key?
legendary
Activity: 1981
Merit: 1039
August 21, 2016, 11:11:29 AM
#14
Secondo me sono tutti brainwallet la differenza sta nell'entropia. Se il seed e cioè la sequenza di 12 parole da un dizionario di 2048 parole generato casualmente è uguale alla password nel senso che hanno la stessa entropia allora non c'è differenza tra l'uno e l'altro.

Per farmi capire se il seed è di 128 bit di entropia che dovrebbe corrispondere a 12 parole casuali su un dizionario di 2048 parole allora è equivalente a una password esadecimale casuale del tipo 1234abcd6789cdef1234abcd6789cdef (se è casuale ha 128 bit di entropia).

Per esempio il mio generatore di password mi da una password del tipo: jmMysp5fRSvvszR9Zwp2eWC93EwvHzYa e se uno riesce a memorizzarla allora è perfettamente equivalente al seed di 12 parole casuali che da electrum. Quindi la password e il seed sono equivalente stante il fatto che l'entropia ci sia tutta quando si generano le password/seed e che l'entropia sia di 128 bit.


lo sono entrambi uno è gerarchico e l'altro no ma a quel punto tanto vale memorizzarsi la private key no ? a complessità siamo li più o meno  Grin
staff
Activity: 4270
Merit: 1209
I support freedom of choice
hero member
Activity: 708
Merit: 506
I support freedom of choice
August 21, 2016, 10:16:08 AM
#12
Secondo me sono tutti brainwallet la differenza sta nell'entropia. Se il seed e cioè la sequenza di 12 parole da un dizionario di 2048 parole generato casualmente è uguale alla password nel senso che hanno la stessa entropia allora non c'è differenza tra l'uno e l'altro.

Per farmi capire se il seed è di 128 bit di entropia che dovrebbe corrispondere a 12 parole casuali su un dizionario di 2048 parole allora è equivalente a una password esadecimale casuale del tipo 1234abcd6789cdef1234abcd6789cdef (se è casuale ha 128 bit di entropia).

Per esempio il mio generatore di password mi da una password del tipo: jmMysp5fRSvvszR9Zwp2eWC93EwvHzYa e se uno riesce a memorizzarla allora è perfettamente equivalente al seed di 12 parole casuali che da electrum. Quindi la password e il seed sono equivalente stante il fatto che l'entropia ci sia tutta quando si generano le password/seed e che l'entropia sia di 128 bit.
legendary
Activity: 1981
Merit: 1039
August 21, 2016, 08:11:28 AM
#11
vuol dire che il dizionario da dove sono prese le parole che compongono il seed ha così tante parole diverse tra le 12 scelte in fase di generazione da rendere difficlie un attacco di forza bruta, richiedendo tempi di elaborazione nell'ordine di anni e costi nell'ordine di milioni di dollari.
hero member
Activity: 2268
Merit: 709
August 21, 2016, 07:57:11 AM
#10
l'entropia del seed sia abbastanza forte

Ehm, scusate sempre la mia niubbaggine: cioè?
legendary
Activity: 1981
Merit: 1039
August 21, 2016, 07:52:54 AM
#9
il discorso è differente visto che in quel caso si utilizza un vocabolario con centinaia di parole e che l'entropia del seed sia abbastanza forte, invece l'utente dream46go si riferiva alla creazione di una password da una sola parola il rischio è altissimo.


qui c'è un esempio molto noto di un brainwallet generato da un oscuro poema in lingua Afrikaans a cui furono derubati ben 4 BTC è un post di ben tre anni fa nel frattempo saranno almeno raddopiate le potenze di calcolo delle botnet.

https://www.reddit.com/r/Bitcoin/comments/1ptuf3/brain_wallet_disaster/
hero member
Activity: 2268
Merit: 709
August 21, 2016, 07:10:22 AM
#8
Copay utilizza 12 parole di vocabolario per generare il Portafoglio, le stesse che bisogna rimettere nell'ordine corretto per recuperarlo: mi volete dire che questo è un brain wallet e, come tale, vulnerabile?
legendary
Activity: 1981
Merit: 1039
August 16, 2016, 04:27:49 PM
#7
è ben più di un rischio con brainflayer possono processare milioni di password, senza contare che c'è probabilmente una intera botnet dedicata allo scopo di rubare bitcoin dai brainwallets.

se siete interessati guardatevi, Stealing Bitcoin with Math

http://livestream.com/internetsociety/hopeconf/videos/130745035

a un certo punto fanno un test durante la conferenza live dove depositano qualche decina di dollari su un indirizzo generato con brainwallet e in meno di un minuto qualcuno si frega l'intera somma.
Pages:
Jump to: