Dyslexia puzzle solution
Puzzle address: 3DYsLxa847E3rSr9YyngyLdRj2zZemHmXJ
Solved: 2019–04–24
Special thanks to Crypto_Puzzles community:
Discord: https://discord.gg/e2AMKKt
Site: https://cryptopuzzles.org/
Twitter: https://twitter.com/Crypto_Puzzles
Reddit: https://www.reddit.com/r/Crypto_Puzzles
First glance
There are 12+1 big numbers, converting these numbers to hexadecimal reveals us that all numbers fit into 256-bit binary and can be hashes of something (e.g. SHA-256). Taking this into account first 12 lines are probably hashes of BIP-39 words. Though checking hexadecimal representation of numbers against hashes of words gives nothing.
Hint 1: Dyslexia
It should have been the puzzle title. Who did not notice it in the prize address?
In short dyslexia causes mistakes in the text, so we can assume there are mistakes in written down hashes. If the most digits of given hash are equal to corresponding digits of another hash, almost certainly these are hashes of one and the same word (due to nature of well-designed hashing function).
I have coded in Python special function of “dyslexic” compare of two strings, which return True if number of equal characters is greater than specific threshold. We have 77 digits per number in average, so let’s set threshold at 60 digits. One more detail: instead of converting puzzle decimals to hexadecimal numbers, we need convert SHA-256 hash of BIP-39 word to decimal representation.
After running the Python script I got all 12 words. On the picture below you can see the right hash on first line and “dyslexic” hash on second line. Every puzzle hash-number contains at least 72 right digits.
Nice, we found words and mnemonic: wine life spare insect cage race awake better project match test shallow
. But this mnemonic is not valid (has invalid checksum), nor Electrum, neither BIP-39.
Hint 2: 104 120 72
104 120 72 = 1041451621511661411641511571564012014116415072
At first I have decoded these three numbers as decimal ASCII codes: hxH
, but after hint it’s obviously something else.
This decimal is too short for being SHA-256 hash and has many “1”. Let’s split this string, starting where possible with “1”: 104 145 162 151 166 141 164 151 157 156 40 120 141 164 150 72
. Decoding it as octal ASCII codes gives: Derivation Path:
or DP:
if takes only 3 original numbers.
Remembering how we got 12 words we need to bruteforce decimal SHA-256 of various full derivation paths. The prize address is P2WPKH-P2SH type of addresses (segwit wrapped into P2SH) and BIP describes such derivation scheme is BIP-49. According to that BIP derivation path looks like:
m / purpose' / coin_type' / account' / change / address_index
where purpose
is 49 for this type of addresses, coin_type
is 0 for Bitcoin, change
is 0 for receiving addresses and 1 for change addresses, account
and address_index
are indices of account and address. Finally our derivation path should be: m/49'/0'/x'/0/y
, where x
and y
are altering values from 0 and higher.
After running script with previously written “dyslexic” compare through different x and y values I got m/49'/0'/48'/0/1
.
Finale
Now we’ve solved all parts of puzzle, but still not have the right mnemonic. What if every word was written with “dyslexic” mistakes too. We need take each word and make a list of possible words on this position with the same first letter and with only one different letter.
wine, wide, wife, wing, wink, wire, wise
life, lift, like, live
spare, scare, share, space
insect, inject
cage, cake, case, cave
race, rack, rare, rate, rice
awake, aware
better, bitter, butter
project, protect
match, march
test, tent, text
shallow, swallow
After running all possible variations with Python script, checking for BIP-39 mnemonic checksum and deriving previously found path at last I found the right mnemonic:
wire live space inject cave rare aware butter protect march text swallow
Acknowledgements
Thanks to Arpox for creating amazing puzzle, I have a lot of fun while solving it.
Congratulations @demetrix! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Do not miss the last post from @steemitboard:
Vote for @Steemitboard as a witness to get one more award and increased upvotes!