
Ask HN: Friendly Alternative to Base64? - bin0
I&#x27;m working on a project where I need to communicate ed25519 keys from person-to-person, ideally.  I&#x27;ve base64-encoded them, and they&#x27;re short enough for that to be feasible.  Is there any way I could encode this information into something like a made-up word, or some other strategy?  I&#x27;ve thought of QR codes, but those don&#x27;t work as well over long distances.  I&#x27;m hoping to find something that allows keys to be spoken.<p>Thank you.
======
bityard
[https://en.wikipedia.org/wiki/Binary-to-
text_encoding](https://en.wikipedia.org/wiki/Binary-to-text_encoding)

If the two people can agree on the pronunciation of various symbols, then you
can choose a more "dense" encoding like Base85.

If the key is designed to be spoken and heard, then you're better off avoiding
case-sensitive and sound-alike symbol set altogether. Instead, generate a
dictionary of words that is designed to reduce the possibility of mistaking
one word for another (something like the phonetic alphabet:
[https://en.wikipedia.org/wiki/NATO_phonetic_alphabet](https://en.wikipedia.org/wiki/NATO_phonetic_alphabet)),
and then assign each symbol to a word.

The larger your dictionary, the shorter each key exchange will be but also the
chance of including sound-alike words increases as well.

A dictionary of 256 words means you would need 68 per key but if you double
the dictionary size, you half the number of words per key.

And of course this falls apart if two people exchanging keys don't speak the
language of the dictionary. Although this is (usually) the case with just
numbers and letters as well.

------
gus_massa
A few years ago I used Copilot to share the computer screen:
[https://www.copilot.com/](https://www.copilot.com/)

They need a secret to connect two computers, that can be passed by phone by
non technical people. They use(d?) a nine digit number, separated in three
parts, i.e.: 872 581 234

You need to transmit a much longer key, but perhaps you can transform it into
base8 and use digits (skip the 0 to avoid confusions, and the 9). You
definitively need some local check to ensure that each block is correct.
Perhaps add a 8-module check to each block: 8723 5816 2343

------
cylinder714
There is John Walker's codegroup utility:
[http://fourmilab.ch/codegroup/](http://fourmilab.ch/codegroup/)

 _Only codegroup conforms to the telegraphic convention of all upper case
letters, and passes the “telephone test” of being readable without any
modifiers such as “capital” and “lower-case”. Avoiding punctuation marks and
lower case letters makes the output of codegroup much easier to transmit over
a voice or traditional telegraphic link._

------
sp332
S/KEY dictionary
[https://tools.ietf.org/html/rfc2289#page-4-19](https://tools.ietf.org/html/rfc2289#page-4-19)

Bubble Babble
[http://wiki.yak.net/589/Bubble_Babble_Encoding.txt](http://wiki.yak.net/589/Bubble_Babble_Encoding.txt)

PGP wordlist
[https://en.wikipedia.org/wiki/PGP_word_list](https://en.wikipedia.org/wiki/PGP_word_list)

------
PaulHoule
How many bits?

~~~
sp332
Public keys are 32 bytes = 256 bits.

