3 ms·
Would you help me understand why this isn't closer to the security of a random 6 character password? It uses the first three letters from each word, and the fi
by sillysaurus3 12y ago
Would you help me understand why this isn't closer to the security of a random 6 character password? It uses the first three letters from each word, and the first three letters of English words aren't random.
I'm trying to read through the source code to understand it, but the Python version seems to be performing (slightly?) different steps than the JS version. Is the Python version an accurate description of your technique?
At first glance, it seems like it could be a 60-bit secret, because a random 18 letter a-z password would be an 84-bit secret, so clearly you're taking the non-random nature into account somehow. But it's not clear to me exactly how it's 60-bit.
The page you linked to does describe the high-level process, sort of, but it doesn't give an example, or explain "This is secure because..." so I figure I should ask you.
- colmmacc 12y ago> Would you help me understand why this isn't closer to the security of a random 6 character password? There are about 80 characters you can type, so a 6 character secret has 262,144,000,000 permutations (80^6) which is about 38 bits (2^38 is 274,877,906,944). 2^60 is much larger: 1,152,921,504,606,846,976 and its sixth root is 1024. So 1,024 memorable "characters" are needed. There are about 4000 unique word-based three letter prefixes: $ cut -c 1-3 /usr/share/dict/words | tr 'A-Z' 'a-z' | uniq | wc -l 4051 So 1,024 of those being associated with memorable words seems credible.
- Scaevolus 12y agoPrecisely. A sequence of prefixes is chosen, and then a mnemonic that fits the prefixes. Note that random 18-digit numbers have 59.8 bits of entropy.
- dTal 12y agoBear in mind "uniq" only removes adjacent duplicates. On my machine: $ cut -c 1-3 /usr/share/dict/words | tr 'A-Z' 'a-z' | uniq | wc -l 5089 $ cut -c 1-3 /usr/share/dict/words | tr 'A-Z' 'a-z' | sort | uniq | wc -l 3434 p.s. How do you do newlines on HN?
- Scaevolus 12y agoThe Javascript version is a relatively straight port from C, but uses the same algorithm as the Python. It picks a series of three-letter prefixes from a pool of 1024, then attempts to generate a mnemonic that fits it. I'll expand the explanation to give the security properties.