bitcoinjs / bip38

BIP38 is a standard process to encrypt Bitcoin and crypto currency private keys that is less susceptible to brute force attacks thus protecting the user.
http://cryptocoinjs.com/modules/currency/bip38/
MIT License
206 stars 100 forks source link

Cracking a BIP38 password, with many BIP38 samples #37

Closed rterwedo closed 6 years ago

rterwedo commented 6 years ago

Given 1) a wallet.dat file with ~100 addresses. 2) 40 addresses in the same wallet, with addr, pub keys, encrypted private keys AND unencrypted private keys 3) mkey with: {crypted key, salt, and nDeriveIterations, etc) 4) Anything else we need from pywallet, etc

Read in a pwd file list, and compare to known values... to reverse engineer pwd? Most tools assume someone does not have some of the unencrypted keys in the wallet. Would be good for recovery...

We have come across a situation were we have some private keys but not all in a single encrypted wallet (backups) that used the same pwd.

dcousens commented 6 years ago

@rterwedo I suspect what you are asking is if there is a known plain text attack against BIP38?

With the assumptions that you have the plain-text AND cipher-text for a given private key, but only the cipher-text for other private keys.

rterwedo commented 6 years ago

@dcousens Essentially yes. There are tools (such as btcrecover) where you can use these items to go after recovered wallets, but most everything I have seen assumes the wallet is 100% encrypted, or 100% complete (ie not corrupted). A plain text attack would cover the middle ground, assuming its feasible. (Is it in your estimation?) I am working on researching what would be the fastest setup to do this, given that a decent GPU setup of btcrecover can do ~1k-50k pwd / s.

EDIT: I have seen its not susceptible to known plain text attack, but - its possible that would be a faster method than say a btcrecover setup. ie encrypting and comparing to known values etc

spongeeluv commented 6 years ago

Hello i hope someone can help me please, basically i have made an offline paper wallet. lets bare in mind i have no printer or camera phone. Anyway i made the paper wallet offline.I deleted a few digits offline and wrote them down safely Came back online..cleared my browser and cache etc. I made a note of the public key..and sent funds from Paxful.com to my public key in my paper wallet. I even checked the transaction on block chain explorer it had been sent. Now i have my private key...Ive just read it should always start with a number 5..well my private key does not start with a number 5. secondly it seems longer than my public key. what i want to know is can i withdraw or spend or send out again or have i lost them because i never scanned them?