Add brainwallet related research

This commit is contained in:
Christian Reitter 2025-03-15 15:13:54 +01:00
parent 804fe51ddc
commit 0568b2ea77
5 changed files with 19894 additions and 6 deletions

View File

@ -1,3 +1,4 @@
#!/bin/bash #!/bin/bash
find ./ -iname "victim*addresses*bitcoin*" -exec cat {} \; | sort -u find ./ -iname "victim*addresses*bitcoin*" -exec cat {} \; | sort -u
find ./ -iname "brainwallet*addresses*bitcoin*" -exec cat {} \; | sort -u

5
brainwallet/README.md Normal file
View File

@ -0,0 +1,5 @@
# Discovered Brainwallets
[Brainwallets](https://en.wikipedia.org/wiki/Cryptocurrency_wallet#Wallets) are cryptocurrency wallets with a private key that is directly generated from a human-chosen passphrase, not on entropy generated from a (potentially weak) random number generator. Additionally, the key derivation method is usually extremely fast, such as a fast hash algorithm operation.
This makes brainwallets extremely susceptible to offline brute-force attacks, so they're a great way to lose cryptocurrencies to attackers.

View File

@ -0,0 +1,10 @@
# Single SHA256 Brainwallet
For this type of brainwallets, a passphrase is hashed with one iteration of SHA256, and the resulting output is directly used as a 256 bit private key.
The collection of Bitcoin addresses presented here is mostly based on passphrases included in the public [privatekeys.pw](https://privatekeys.pw/brainwallet/bitcoin/1) brainwallet list. (Note that we do not endorse this site or its paid services.)
We performed some additional searches for well-known passphrases on top of this initial list.
The Bitcoin addresses represent compressed and uncompressed public keys.
Due to the nature of brainwallets, the collection is not exhaustive.

View File

@ -1,16 +1,26 @@
#!/bin/bash #!/bin/bash
bitcoin_address_list=$(find ./ -iname "victim*addresses*bitcoin*" -exec cat {} \; | sort -u) bitcoin_address_list_rng=$(find ./ -iname "victim*addresses*bitcoin*" -exec cat {} \; | sort -u)
bitcoin_address_list_brainwallet=$(find ./ -iname "brainwallet*addresses*bitcoin*" -exec cat {} \; | sort -u)
echo -n "Number of unique weak Bitcoin wallet addresses: " echo -n "Number of unique weak PRNG Bitcoin wallet addresses: "
echo "${bitcoin_address_list}" | wc -l echo "${bitcoin_address_list_rng}" | wc -l
for prefix in "1" "3" "bc1q" "bc1p" for prefix in "1" "3" "bc1q" "bc1p"
do do
echo -n "Prefix ${prefix}: " echo -n "Prefix ${prefix}: "
echo "${bitcoin_address_list}" | grep -Poh "^${prefix}" | wc -l echo "${bitcoin_address_list_rng}" | grep -Poh "^${prefix}" | wc -l
done done
echo "" echo ""
echo -n "Number of unique weak Ethereum wallet addresses: " echo -n "Number of unique weak brainwallet Bitcoin wallet addresses: "
echo "${bitcoin_address_list_brainwallet}" | wc -l
for prefix in "1" "3" "bc1q" "bc1p"
do
echo -n "Prefix ${prefix}: "
echo "${bitcoin_address_list_brainwallet}" | grep -Poh "^${prefix}" | wc -l
done
echo ""
echo -n "Number of unique weak PRNG Ethereum wallet addresses: "
find ./ -iname "victim*addresses*ethereum*" -exec cat {} \; | sort -u | wc -l find ./ -iname "victim*addresses*ethereum*" -exec cat {} \; | sort -u | wc -l