5 ms·
My attempt at reliable storage of large secrets: http://rmmh.github.io/abbrase/ http://rmmh.github.io/abbrase/ An example 60-bit secret: rolmangrionepolemp (mn
by Scaevolus 12y ago
My attempt at reliable storage of large secrets: http://rmmh.github.io/abbrase/ http://rmmh.github.io/abbrase/
An example 60-bit secret: rolmangrionepolemp (mnemonic: "role man grinding one political employment"). A bit of a mouthful, but memorizable.
- case_sensitive 12y agocorrecthorsebatterystaple
- SAI_Peregrinus 12y ago"Clan accrue CIA marine slide + Matte Virgil auric libido booby" >128 bits of security (10 diceware words) not terribly difficult to memorize, easy to type. The + is just to make memorization easier, same with the capitalization. They can't hurt the entropy, and make it easier to remember. Pretty much all of my passwords that I can't store in a password safe (encrypted file) are of this sort. That's not a ton, but memorizing 5-10 10-word phrases is pretty easy. If you can memorize Jabberwocky, this sort of thing is easy.
- Scaevolus 12y agoThe uncorrelated nature of the words makes memorization harder. Using prefixes instead of precise words forgives minor memory slips and exchanging equivalent words. A good PBKDF (e.g. high difficulty scrypt) is good for stretching password security another 20-30 bits.
- sillysaurus3 12y agoWould 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.
- jere 12y agoBesides length restrictions, why not just use the mnemonic as the password? It's no harder to memorize and, IMO, easier to type.
- Scaevolus 12y agoYou could, but I find entering long passwords annoying. I use a 9-letter (3 words, 30 bit) abbrase for my Android password, and find it's a tolerable balance between ease and security. There's no additional security in Abbrase-generated mnemonics.