Most Freenet keys will be embedded in hyperlinks or exchanged privately
by email/fmail, so it will rarely be necessary for users to exchange keys
by word of mouth or on pieces of paper. However, on the rare occasions
when this is necessary, it would be nice to have a secure key type that's
suited to spoken or handwritten exchange.
For handwritten keys, we want to avoid the ambiguities in base 64:
1/l/I
2/Z/z
S/5/s
O/0/o
9/g
Hex is a possibility, but it will make the keys even longer without making
them any easier to remember. Another possibility is something I call "dada
keys".
To construct a dada key, you choose a lexicon of words in any language.
You hash each word down to n bits and construct an 2^n-row table mapping
each n-bit value onto a list of words that hash to that value. N is
chosen to be the maximum value for which none of the rows is empty.
Example: You use a 10,000 word basic English vocabulary as the lexicon.
With n=12, each of the 4,096 rows in the table contains at least one word.
Now you take your CHK and replace each n bits of the key with a word from
the corresponding row of the table. You're free to choose any word from
the row - you can choose words that appear to make some kind of sense
(syntactically if not semantically), or you can choose short words, etc.
You could even modify JWZ's Dadadodo program to generate semi-grammatical
keys automatically, given a CHK, a lookup table and a corpus of English
text (eg Project Gutenberg). You can use a smaller n than necessary to
give you more choice, allowing you to generate long but comprehensible
(and memorisable) keys.
With n=12, you will need 16 words. So your key might look like this:
freenet:pebble-renegade-destruction-cert-supercilious-positivism-cot-disembarrass-pubes-header-scratchy-trounce-victimize-inflect-rhino-striped
'Supercilious' might hash to the same value as 'cavort', so you might
choose the word that's easier to spell:
freenet:pebble-renegade-destruction-cert-cavort-positivism-cot-disembarrass-pubes-header-scratchy-trounce-victimize-inflect-rhino-striped
The cool part is that the receiver doesn't need the same lexicon as you -
he just works out how many bits there are per word by counting the words,
hashes each word, and concatenates the numbers with freenet:CHK@. (The
client does this automatically when he types in freenet:pebble-renegade-
etc without a leading TLA.) You can use a custom lexicon that only
contains easy-to-pronounce words, or easy-to-spell words, or business
buzzwords, or words that are the same in Spanish and Italian, and any user
can hash the words and get the CHK.
I've assumed you'll be using CHKs with no crypto key because they're
short. You can always use a CHK redirect to another key.
Michael
_______________________________________________
freenet-tech mailing list
[EMAIL PROTECTED]
http://lists.freenetproject.org/mailman/listinfo/tech