fraction / oasis

Free, open-source, peer-to-peer social application that helps you follow friends and discover new ones on Secure Scuttlebutt (SSB).
http://oasis-demo.fraction.io
GNU Affero General Public License v3.0
287 stars 42 forks source link

Discussion: User friendly IDs ("6 sad squid snuggle softly") #137

Closed cinnamon-bun closed 4 years ago

cinnamon-bun commented 4 years ago

It's hard to remember or talk about SSB IDs like @L+nPFTMUHWXuchOwuzT6Z8Ea8wD/Rtd7leVRxGaknVk=.ed25519

Making them memorable and pronounceable would help against impersonation and MitM attacks.

Could we have a human-friendly version like "6 sad squid snuggle softly"? Christian found this blog post:

https://blog.asana.com/2011/09/6-sad-squid-snuggle-softly/

It looks like SSB ids are 256 bits (32 bytes), base64 encoded into 44 bytes of ASCII. Asana's example only has 32 bits of entropy.

There's a bitcoin standard BIP0039 for doing this. It uses 11 bits per word (2048 words in the list), so we'd need 24 words. It would look like this:

magic retreat inform fade
canal ticket pepper annual
kingdom borrow urban believe
prize universe egg bubble
spend pond core all
else portion describe october

Pros

Cons

Where could we use this

My conclusion is that users still need access to traditional SSB style IDs. We could show both kinds on profile pages although this might be overwhelming to users. Maybe a button to swap the ID display between "words" and "letters"?

¯\(ツ)

cinnamon-bun commented 4 years ago

If only SSB used base58 like IPFS and Bitcoin do. It's URL-safe.

jedahan commented 4 years ago

I think this would be a wonderful experiment, though would avoid the BIP39 list as it really is a biased selection.

The '6 sad squid snuggle softly' feels right to me.

As an alternative, how about a wordlist from interlingua, or a pronounciation list like how urbit does it:

prefixes = ["doz","mar","bin","wan","sam","lit","sig","hid","fid","lis","sog",
"dir","wac","sab","wis","sib","rig","sol","dop","mod","fog","lid","hop","dar",
"dor","lor","hod","fol","rin","tog","sil","mir","hol","pas","lac","rov","liv",
"dal","sat","lib","tab","han","tic","pid","tor","bol","fos","dot","los","dil",
"for","pil","ram","tir","win","tad","bic","dif","roc","wid","bis","das","mid",
"lop","ril","nar","dap","mol","san","loc","nov","sit","nid","tip","sic","rop",
"wit","nat","pan","min","rit","pod","mot","tam","tol","sav","pos","nap","nop",
"som","fin","fon","ban","mor","wor","sip","ron","nor","bot","wic","soc","wat",
"dol","mag","pic","dav","bid","bal","tim","tas","mal","lig","siv","tag","pad",
"sal","div","dac","tan","sid","fab","tar","mon","ran","nis","wol","mis","pal",
"las","dis","map","rab","tob","rol","lat","lon","nod","nav","fig","nom","nib",
"pag","sop","ral","bil","had","doc","rid","moc","pac","rav","rip","fal","tod",
"til","tin","hap","mic","fan","pat","tac","lab","mog","sim","son","pin","lom",
"ric","tap","fir","has","bos","bat","poc","hac","tid","hav","sap","lin","dib",
"hos","dab","bit","bar","rac","par","lod","dos","bor","toc","hil","mac","tom",
"dig","fil","fas","mit","hob","har","mig","hin","rad","mas","hal","rag","lag",
"fad","top","mop","hab","nil","nos","mil","fop","fam","dat","nol","din","hat",
"nac","ris","fot","rib","hoc","nim","lar","fit","wal","rap","sar","nal","mos",
"lan","don","dan","lad","dov","riv","bac","pol","lap","tal","pit","nam","bon",
"ros","ton","fod","pon","sov","noc","sor","lav","mat","mip","fip"]
suffixes = ["zod","nec","bud","wes","sev","per","sut","let","ful","pen","syt",
"dur","wep","ser","wyl","sun","ryp","syx","dyr","nup","heb","peg","lup","dep",
"dys","put","lug","hec","ryt","tyv","syd","nex","lun","mep","lut","sep","pes",
"del","sul","ped","tem","led","tul","met","wen","byn","hex","feb","pyl","dul",
"het","mev","rut","tyl","wyd","tep","bes","dex","sef","wyc","bur","der","nep",
"pur","rys","reb","den","nut","sub","pet","rul","syn","reg","tyd","sup","sem",
"wyn","rec","meg","net","sec","mul","nym","tev","web","sum","mut","nyx","rex",
"teb","fus","hep","ben","mus","wyx","sym","sel","ruc","dec","wex","syr","wet",
"dyl","myn","mes","det","bet","bel","tux","tug","myr","pel","syp","ter","meb",
"set","dut","deg","tex","sur","fel","tud","nux","rux","ren","wyt","nub","med",
"lyt","dus","neb","rum","tyn","seg","lyx","pun","res","red","fun","rev","ref",
"mec","ted","rus","bex","leb","dux","ryn","num","pyx","ryg","ryx","fep","tyr",
"tus","tyc","leg","nem","fer","mer","ten","lus","nus","syl","tec","mex","pub",
"rym","tuc","fyl","lep","deb","ber","mug","hut","tun","byl","sud","pem","dev",
"lur","def","bus","bep","run","mel","pex","dyt","byt","typ","lev","myl","wed",
"duc","fur","fex","nul","luc","len","ner","lex","rup","ned","lec","ryd","lyd",
"fen","wel","nyd","hus","rel","rud","nes","hes","fet","des","ret","dun","ler",
"nyr","seb","hul","ryl","lud","rem","lys","fyn","wer","ryc","sug","nys","nyl",
"lyn","dyn","dem","lux","fed","sed","bec","mun","lyr","tes","mud","nyt","byr",
"sen","weg","fyr","mur","tel","rep","teg","pec","nel","nev","fes"]
christianbundy commented 4 years ago

Maybe relevant: there's an agreed-upon encoding that's URL-safe called SSB-URI. It's unfortunately more verbose. I think that if someone wrote a module to wordify the public key then I wouldn't be against showing that somewhere, but I think I'm unclear which problem this would solve (or more specifically: how a user would use this).

I think a scheme like this would be worthwhile for importing or exporting keys, but I don't think I understand the use-case for putting it on the profile [yet?].

jedahan commented 4 years ago

One problem it solves is telling a person your key. If I’m chatting with friends and say “search my identity shrews sleeping soundly” it’s a bit easier to search for

christianbundy commented 4 years ago

That's a good point, but I think it'd be like "search my identity: fish fuel impose leg power assault erupt spin defense gravity ordinary siege hungry gun picture defense soccer extend grass city void jar good extra". I think I'd feel lots more comfortable adding this as a search/import/export option if it's well-specified and agreed-upon by others in the community.

jedahan commented 4 years ago

Urbit encodes 32 bits into 2 word-4 syllable forms, which means a minimal syllable count is still tough to share, since we would need 16 words / 32 syllables. I think one of the tough parts of the BIP list is the different syllable counts.

Yeah, this is tough to do.

marned-wismul-nilsev-botnyt
fepwok-tambuv-rikdel-conbit
wicdev-wisryt-poldec-tonteg
rovnys-ricfer-pindet-timmut

Maybe it can be more like a prefix search - do the first four, and if there are multiple matches, choose from there. We have naming collisions on facebook and can still find each other.

cinnamon-bun commented 4 years ago

I'm not really proposing anything concrete, I just wanted to explore these ideas together in case something useful emerged. Doesn't really look like this is useful. I'll close the issue in a couple of days.

georgeowell commented 4 years ago

I'm not really into this.