4 little words

I was horrified to see that the Department of Homeland Security has begun to seize the domains of copyright infringing websites. Now I’m all for copyright protection and theft is theft but this kinda of censorship is a slippery slope.

But it did get me thinking…

Since it is only the DNS entries that have been seized and you are still able to visit these sites if you know their IP address, wouldn’t be nice to have a DNS like way of remembering these IP addresses?

And so I give you the 4LW  ‘protocol’ (4 little words).

Basically you grab 256 words from the dictionary in the S/KEY RFC, then with a simple lookup table (where each octet of the IP address is mapped to a word in the dictionary) you can convert any IP address into 4 hopefully easy to remember words and back again.

For example:

The IP address for rabidgremlin.com is, if you run this through 4LW you get the following phrase: LICK GORY ULAN MUTT

Some others: (google.com) = ROOM RED LULU IDEA (yahoo.com)= ACHE ION ANA NAY (amazon.com)= ACHE FUM ROOM WENT (whitehouse.gov) = TEN OWL BLUR LAM (dhs.gov) = MASH BAWD KANE JERK

Of course this is bit of a toy idea (only good for IPv4 etc) but the romantic in me can see these little 4 word phrases hidden away in cryptic emails or scrawled as defiant graffiti on buildings of certain organizations :)

For those of you who are interested here is the dictionary for 4LW. I created it by grabbing every 8th word (starting with the first one) from the S/KEY dictionary. A = 0, AID = 1, YARN=255 etc.

{ "A", "AID", "ANA", "ARC", "AT", "AWN", "BAR", "BET", "BOG", "BUG", "CAB", "COD", "COY", "DAD",
 "DES", "DOE", "DUE", "EGO", "ETC", "FAT", "FIR", "FUM", "GAP", "GIL", "GUY", "HAP", "HER", "HIT", "HOW", "ICY", "ION",
 "IVY", "JET", "JOY", "KIM", "LAM", "LEN", "LIT", "LOW", "MAN", "MEL", "MOD", "MUG", "NAY", "NIP", "NOV", "OAR", "OIL",
 "ORR", "OWL", "PAP", "PEP", "PIT", "PRO", "RAG", "RED", "RIP", "RUB", "SAG", "SEA", "SIN", "SO", "SPY", "TAD", "TEN",
 "TO", "TOY", "UP", "WAG", "WET", "WOW", "YES", "ACHE", "ADEN", "AIDS", "ALLY", "AMES", "ANNA", "ARGO", "AUNT", "AWAY",
 "BAIT", "BAND", "BARN", "BAWD", "BEAU", "BELT", "BETA", "BILL", "BLED", "BLUR", "BOHR", "BONE", "BORE", "BOYD", "BRIG",
 "BULL", "BURT", "CAFE", "CANE", "CASH", "CHAD", "CHIN", "CLAD", "CLUB", "CODE", "COLT", "CORD", "CRAG", "CUBE", "CURL",
 "DANG", "DATE", "DEAN", "DEFY", "DIET", "DISH", "DOME", "DOUR", "DRUB", "DUKE", "EACH", "EDDY", "ELBA", "EROS", "FAIL",
 "FAST", "FELL", "FILE", "FISH", "FLAT", "FLOW", "FOLK", "FORK", "FRAY", "FULL", "GAGE", "GAME", "GAVE", "GIBE", "GIST",
 "GLOW", "GOES", "GORY", "GREW", "GULF", "HAAG", "HALO", "HARM", "HAWK", "HEED", "HERE", "HIKE", "HOBO", "HONE", "HOST",
 "HUFF", "HURD", "IDEA", "IOWA", "JACK", "JERK", "JOBS", "JOVE", "JUNE", "KANE", "KERN", "KISS", "KNOW", "LACK", "LAME",
 "LATE", "LEAK", "LENT", "LICK", "LILA", "LINK", "LOAM", "LONG", "LOST", "LULU", "LYLE", "MAIL", "MANN", "MASH", "MEAD",
 "MEMO", "MILD", "MINI", "MOAN", "MONA", "MORN", "MUDD", "MUTT", "NASH", "NEIL", "NIBS", "NOEL", "NOUN", "ODIN", "OLIN",
 "ONUS", "OUTS", "QUOD", "RAIN", "RAYS", "REEK", "RICE", "RINK", "ROCK", "ROOM", "ROVE", "RULE", "RUST", "SALK", "SAUL",
 "SEAM", "SELF", "SHAW", "SHOW", "SILK", "SITE", "SKIT", "SLIM", "SLUR", "SOAK", "SOME", "SOWN", "STIR", "SUMS", "SWAN",
 "TAKE", "TEAL", "TEND", "THEE", "TICK", "TIME", "TOIL", "TOOT", "TRAM", "TROT", "TUNE", "ULAN", "VAIN", "VEIN", "VINE",
 "WAIL", "WANE", "WAST", "WEAN", "WENT", "WHET", "WINE", "WOLF", "WORN", "YARN" }

UPDATE: Wow, I got a surprisingly big response to this post, making it to the front-page of Hacker News and Reddit, here are some updates:

37 comments on “4 little words”

  1. Florent says:

    Cool concept. :)

    Although… Don’t you think using more commonly used words, instead of random ones, would help make the sentences more memorable?

  2. aniou says:

    Nice idea! Four code-words for IP, fifth as site-id (for virtual hosting). Separated by spaces, slashes or colons… We need only good dictionary – easy to remember and pronounce, something like NATO phonetic alphabet.

  3. Carson says:

    Maybe try having four sets of different words instead, so that you always get a sentence of the form “Person-Name Adverb Verb Noun”?

  4. aniou says:

    Once again… Your idea also fits for IPv6. How? Simple. We need only dictionary (created from single words or phrases) for typical allocation (/32). And, for example, “the noble house” means “2001:4c30/32″ and “google” may be resolved as “2a00:1450/32″. In next step we need simple policy that says: “name server must be available in following locations, related from beginning of allocation”.

    So, when we type: “the noble house/searchengine.com” our library first resolve prefix (as 2001:4c30/32) then uses a kind of DNS, located in predefined offset (for example at 2001:4c30::10) to resolve name “searchengine.com”. And yes, “the noble house/searchengine.com” and “google/searchengine.com” may points to different websites.

  5. Tom Robinson says:

    Neat idea, now someone needs to setup DNS on a short domain to point to the correct IP, e.x.

    http://LICK.GORY.ULAN.MUTT.4lw.com would point to

    Of course, this won’t work on virtual hosts.

  6. Asmodeus says:

    Good idea, not so good choice of words. Awn? Wag? Orr? Maybe some handpicked words will do better?

  7. Xeal says:

    This is actually an excellent idea, I cannot tell you how many times I have had to repeat myself when verbally giving IP addresses to people.

  8. Jason says:

    I have a dns server which will return a records for 4 little words. An example


  9. says:

    Cool idea, but some of those words are pretty obscure. Couldn’t you grab 256 common words instead of 256 essentially random ones?

  10. damien says:

    mm – 4 little words might work.

    Another way to do this is to treat the 4 octets as the compressed representation of a word or sentence compressed using a predictive coding system and a markov model derived from any of several common corpus’s.

    Its possible that the resulting texts/phrases would be more memorable.

    Might be worth hashing the IP address before decompressing.

  11. damien says:

    So heres quick way to do this:

    See http://www.fourmilab.ch/javascrypt/pass_phrase.html for a pass phrase generator.

    use the IP address of the site as the seed

    generate your passphrase.

    In the case of thepiratebay.org, the IP address is, or C2476B0F in hex.

    The passphrase produced is STEAPSIN QUITS FORELADY.

    Now, the dictionary they used has about 14 bits of information per word, so theres a lot more information in use. We would want about 11 bits per word, so you could filter out uncommon, long, or commonly misspelt words, cutting the dictionary down to 10-12% of its original size.

    I guess the question is: are four short words more memorable than 2 or 3 long words?

  12. paul southerland says:

    Good idea, but you should have chosen the words in a different way. Words that would be easily remembered or something.

    Still, awesome idea.

  13. question says:

    Love the idea… but what about when Apache uses virtual hosts on the same IP? We’d still get to the correct IP address, but we’d need a way for the server to serve up the request.

  14. here’s the reddit discussion:


    in short:

    * great idea! people suggested using a dictionary with less similar words to make it even more effective (littlefoot said: “VAIN”, “VEIN” ಠ_ಠ)

    * armooo created a website to easily use the protocol, you simply put dots between the words and add “.4lw.armooo.net”. for example: http://ache.fum.room.went.4lw.armooo.net/ . the source is available so it should be easy to adapt to a new dictionary.

    personally, i love this idea and would like to see it being used… though perhaps with a better dictionary. i’m not sure how to go about creating a better one but i’m sure someone is already working on it we’re just going to have to wait a bit :)

    other things we’ll need: i’m on a site, i click a button in my bookmarks folder, i want to see the 4LW of the site appear on my screen.


  15. onequbit says:

    This is an interesting idea, but I think it can be taken a step further.

    I think if you incorporate a cipher to the alphabet of the dictionary, the resulting phrases would become very difficult to decode without the key to decipher the alphabet.
    I also propose that a second key be used to randomize the index of each octet word.

    In this way, encoded messages can be sent entirely in the clear, protected by two keys or one big key that is a combination of the two.

    Just a thought.


  16. Next step: Write a browser plugin so I can type:

    4lw://ROOM.RED.LULU.IDEA to go to google.com,
    4lw://ACHE.ION.ANA.NAY to go to yahoo.com,

    • Thaddius says:

      It’s actually fairly simple to do something similar by using browser shortcuts. You set it so that you can type “4lw the.four.words.here” in the address bar and it will take me to the page.

      In Opera go to Tools > Preferences, click Search, then Add. Name it something like “4 Little Words”, make the Keyword “4lw” and the address “http://%s.4lw.armooo.net/” and hit okay.

      Not sure about other browsers, but I’m sure it’s doable.

  17. Mike says:

    Though it would be incredibly expensive in terms of bandwidth, why not just host a server for all of the banned sites somewhere overseas that, when given a url it returns the corresponding IP address? Like a DNS but not part of the DNS system. It would just have to be a 2-column relational database. Then, you could have a client-side browser addon that would query the server for the IP whenever it encounters one of those FBI pages. And it wouldn’t much work at the administrator’s end if you just get the banned sites to agree never to change their IPs unless absolutely necessary. I’m sure they’d be fine with that in exchange for being unblocked. Oh, and if you know the IPs are only going to change once in a blue moon, you could just have the client-side program cache the entire table (which wouldn’t have to be more than a few kilobytes at most) and only refresh it if there’s an error in lookup or a blocked page not in the table is encountered, instead of every time the site is visited. Plus, the client could also notify the server of any newly blocked sites it comes across that the server might not know about, so that the server doesn’t have to worry about scouring the internet looking for blocked pages.

  18. Ryan Hayes says:

    I think having a one-to-one IP address DNS association is sort of a problem… this is essentially a coding method for IP addresses, and I don’t really see an advantage of this over just using/printing the IP addresses…

  19. Kevin Morton says:

    That’s an epic idea you have there.

  20. Kevin says:

    You could take it a set further for better retention by using a selection of 256 nouns, 256 verbs, and 256 adjectives to make simple sentences:


  21. Gregory Maxwell says:

    You really ought to use the PGP words dictionary instead. It’s much more carefully constructed and has some useful error detection properties.

  22. Nerdbeard says:

    Worth noting for the less technically adept that “you are still able to visit these sites if you know their IP address” is a simplification that assumes the site has been set up such that this is true. In the old days this was certainly true, but ever since HTTP 1.1 it has been possible to host multiple sites with a single IP address, and so you may not get the site that you expect if you use an IP address without spoofing the HTTP Host: header.

  23. Peter says:

    Why doesn’t someone just put up a public accessible DNS that points to the old entries, and forwards to or (google) for all the remaining resolution?

    All sites would work, and as it’s optional to resolve through it, there’s no real law against it that the feds could use to prevent it…

  24. Sympathizer says:

    For virtual hosts, add the hostname – your protocol resolver can pass that through to the HTTP socket or whatever you’re using:


  25. Jerry Garcia says:

    I think that there may be a fly in the ointment. Most web sites have redirects, and links, including links to graphics embedded in them that reference their own FQDN, fully-qualified-domain-name. So, the 4lw to aid you in getting to the home page, or whatever page you reference in the web browser, but that as soon as the website itself referenced a link or photo, you’d have a failure.

  26. Ryan M says:

    Like Peter said – we need someone to setup a publically accessible dns server that resolves *.4lw addresses:


    or to more clearly demonstrate the TLD-ness:


    I run dnsmasq locally to route all .dev addresses to localhost for web development. So with armooo’s code and a couple tweaks I could run this locally.

  27. Robert Medeiros says:

    This is reminiscent of mnemonicode:


    There’s some interesting discussion there about generating an appropriate word list, and it looks useful for IPv6 addresses too.

    This whole DNS kerfuffle seems like a good opportunity to make a push towards IPv6, so why not design a system that accommodates those addresses? Since IPv6 addresses subsume IPv4, you should get that for free….


  28. Russtopia says:

    Great idea — I had actually prototyped a little program years ago with nearly the exact same idea but never followed through to a working implementation. It bugged me that one still needed DNS in some manner to get to the naming system, as this implementation does. ICANN could still just yank the whole top-level, but still…

    My naming scheme, came up with easier-to-remember phrases (in my humble opinion at least):

    Use four separate tables, one used for each octet:

    An IP would then generate memorable phrases such as ‘black crow eats greedily’ or ‘yellow ibex flies recklessly’.

  29. [...] sort of way,’ via Twitter and ad hoc bulletin-board sites.)” I particularly liked 4LW which is an incredible simple yet brilliant solution that could easily be implemented in web [...]

  30. Mat says:

    But, hum, wait, isn’t it easier to remember than regular acid adds card ?

leave a comment

(will not be published)