3 ms·
This was an amazing story, but there are LOT more take-aways here!!! First of all, let's look at something: the burden of memorizing 29 words was SO great, tha
by logicallee 9y ago
This was an amazing story, but there are LOT more take-aways here!!!
First of all, let's look at something: the burden of memorizing 29 words was SO great, that despite carefully writing it down and double-checking it, the user failed to memorize it or even come close: after trying 500 times, they could not tell that ionic was a different word from tonic. No doubt they had looked at each handwritten word very carefully during the 500 attempts, but just could not do it. By the way, if you write the word ionic down in your own handwriting, you could easily see that it might look exactly like your own handwritten tonic.
There is something else about these 29 words. You can find the number of bits of entropy in a dictionary you'd pick one word from at random by taking the log2 of the number of entries. (In a pinch you do log 2 by taking the log and dividing by the log of 2). That shows that 1626 words (the number of entries in the dictionary) have 10 bits of entropy.[1]
So by making the user "remember" (write down) 29 such words, you are making them memorize (write down) 290 bits of entropy.
2^290 is 1.9892929e+87. There are about 10^80 atoms in the ENTIRE universe (a hundred billion galaxies with a hundred billion stars each). You'd have to get every atom in our entire universe -- every planet's every atom, every sun's, every black hole's, every one of the atoms anywhere in the world, to try 10,000,000 operations each, before you got an answer.
That is WAY too much.
But despite having such an incredible amount of extra information in there (base-64 encoding 290 bits would take 48 characters - six bits per character), it does not contain enough of a checksum to correct against a single transcription error.
So this is a great example of a solution that is very user-hostile: so long that the user is forced to write it down, but despite its length so fragile that it does not contain any help against any amount of corruption. And very clearly, the longer it is, the greater the possibility of user error: could you hand-write an entire Dickens novel without a single error anywhere for example? What about a 12-character alphanumeric password? So the latter is stronger than the former! The latter is a better password.
I am not sure what kind of passwords would have redundancy built-in (so that a slightly wrong version would be corrected and accepted) but this would be a good time to find out.
One last thing. Does anyone know how long it takes to try a combination? I'm surprised that the blog poster went through the trouble of finding Levenshtein distance, since I would think from a coding standpoint it would be faster to code trying all 1625 other possibilities for the 1st word (leaving the rest unchanged), trying the other 1625 possibilities for the 2nd word, and so forth. Since there are 29 words this is just 47125 possibilities in total which doesn't seem like it's that many. (Then again, some 'treasure hunter' the blog poster was "competing with" might have had that script running already when the blog poster got there first!)
[1] https://www.google.com/search?q=(log+1626)+%2F+(log+2) https://www.google.com/search?q=(log+1626)+%2F+(log+2)
- codys 9y agoThe need for embedded some form of error correcting codes into readable keys like these is a really good point. While not the same, I'm reminded of the issue with etherium addresses where they've (after initially having no extra checking) started using mixed case to provide a checksum to detect incorrect entries. Otherwise, it's really easy to send coins to a very slightly different address due to a typo. With Saicoin, it seems like just adding 1 more word could allow correction of mistakes like these. (And you'd end up with a round 30 words :).
- sp332 9y agoIt does have a checksum. That means error-correcting works just like in the article, by picking the nearest valid code. This could be built-in to the software.
- logicallee 9y agoRather than a checksum, I think we're talking about something like a recovery record[1] or some kind of error correcting code, which is slightly different. [1] like these - https://en.wikipedia.org/wiki/Comparison_of_archive_formats#Recovery_record https://en.wikipedia.org/wiki/Comparison_of_archive_formats#...
- Taek 9y agoIt would take about 0.5 seconds of brute forcing for the library to figure out if you had gotten a word wrong, so that's actually reasonable.
- hyperpower 9y ago> (In a pinch you do log 2 by taking the log and dividing by the log of 2) In a pinch it's easier to reason that since 2^10 = 1024, 2^11 = 2048, and 1626 lies between those two numbers, log_2 1626 is a bit more than 10. Memorizing powers of two is useful for lots of quick mental estimation!
- Taek 9y ago