Author

Topic: brainwallet.io / keybase.io/warp - Brainwallet usando Scrypt (Read 2478 times)

staff
Activity: 4270
Merit: 1209
I support freedom of choice
Riguardo ai brainwallet molti avranno già letto che ne viene spesso sconsigliato l'uso perchè insicuro.
Sono insicuri perchè il metodo per ricavare la chiave privata da una frase (attraverso SHA256) è facilmente attaccabile attraverso dictionary attack.
Cioè provando tante combinazioni di parole e frase conosciute.
I calcolatori di oggi (FPGA/ASIC) sono in grado di provare tantissime combinazioni in poco tempo, e inoltre comunque spesso e volentieri l'essere umano non è grado di scegliere delle combinazioni non comuni.

Questo vuol dire è veramente facile per un calcolatore trovare le frasi degli utenti in poco tempo e prendere i loro Bitcoin.

Viene quindi proposta una soluzione dove invece di SHA256, si fa uso di Scrypt (https://en.wikipedia.org/wiki/Scrypt)
Questa funzione richiede un uso intenso di molta memoria rispetto allo SHA256, e quindi rende molto più difficoltoso un attacco bruteforce.

Questi sono due proposte che fanno uso di questo metodo:

Sito: https://brainwallet.io
Codice: https://github.com/routman/brainwallet.io

Sito: https://keybase.io/warp
Codice: https://github.com/keybase/warpwallet

EDIT:
Fork di Warp che genera BIP39 mnemonic e BIP32 extended keys
https://github.com/Logicwax/PortalWallet

Entrambi non sono servizi "remoti", nel senso che le pagine possono essere salvate in locale, e il brainwallet generato offline.
Si può anche fare appunto scaricando direttamente il codice dal loro repository Github.

Oltre alla passphrase (la lista di parole), viene chiesto anche un/il salt ( https://it.wikipedia.org/wiki/Sale_(crittografia) )
Questo per rendere ancora più difficoltoso l'uso di un bruteforce casuale sulle parole, visto che servirebbe sapere con assoluta certezza anche il salt.
Si consiglia quindi di non usare informazioni personali per scegliere il salt.


Ma come funziona esattamente?
Prendendo per esempio brainwallet.io, la libreria usata per generare la chiave via browser, usando scrypt, è questa:

Test da browser: http://kclnn.github.io/js-scrypt-async/test_scrypt_browser.html
Codice: https://github.com/kclnn/js-scrypt-async

Le impostazioni usate da brainwallet.io sono:
N = 262144 (2^18)
r= 8
p = 1
# bytes produced = 32

Queste impostazioni potete anche cambiarle, e alzandole il costo di memoria e computazionale aumenterà, fino ad anche non essere nemmeno eseguito dal vostro comune computer ...
Quindi, nel caso vogliate ottenere un impostazione ancora più difficile da forzare, potete farvene una vostra personalizzata, diversa da quella proposta dal sito/codice. (certo, dovrete poi ricordarvela insieme alle parole del brainwallet)

Brainwallet.io, in una qualunque delle scelte per il salt che mettete, mettera uno di seguito all'altro i dati inseriti.

Quindi se i dati saranno, ad esempio:
Name: Gino
Email: [email protected]
Phone: 9836873346
Date of Birth: 04/12/1940

Il salt sarà allora:
[email protected]/12/1940

Quindi, usando certi dati, e la vostra passphrase, otterrete da brainwallet.io una chiave privata, potrete ottenere la stessa dal sito già indicato sopra:
http://kclnn.github.io/js-scrypt-async/test_scrypt_browser.html

In "Password" dovrete inserire la vostra passphrase, nel "Salt" appunto il vostro salt.
Mettete poi le impostazioni indicate sopra, e generate l'hash.

Tale hash, prendetelo e andate ad inserirlo nella sezione "Brain Wallet" di:

Sito: https://www.bitaddress.org
Codice: https://github.com/pointbiz/bitaddress.org

Otterete cosi la stessa chiave privata generata precedentemente da brainwallet.io.


Pareri e critiche? Cheesy
Qualcosa non si capisce?
Jump to: