Low-tech Encrypted Communication Using Books: An Idea

Last Update:

End-to-end encryption1 (E2EE) is the buzz among privacy- and security-conscious people. It’s now readily available in software applications like Signal and Element. E2EE can also be set up in many modern email clients, and is even built-in in some. This relative accessibility allows everyday people to not worry about whether somebody is snooping in on their communications.

But times are changing. With the increasing negative effects of climate change, who’s to say that we’ll always have the communications and interconnectivity that we take for granted?

When electricity goes down and internet is no longer, which systems do we deprioritize in this collapse?

Can we still have E2EE in our communications if/when that happens?

Proposal: The Doowop Encryption

Many years ago, I read about how to send and receive secret messages using a book as both the key and the lock. I can’t seem to find it online, so I’m reproducing it here from memory, and adding some few features that may or may not be in the original article.

For this article, let’s have Doowop as the working title for this encryption method. Doowop—because it’s a play on the letters DWP, or dead white people. The recommended books to use are classic literature written by dead white people. They can be obtained cheap or free. Most of them are also now in Public Domain, so copyright won’t be an issue, if you’re even bothered by it.

How Doowop works

The following attempts to explain how this low-tech protocol could be implemented.

Choosing the book

Alice and Bob2 must first agree on what book to use. It’s recommended to use classic literature because of their affordability, but really, any book will do. Alice and Bob must each have a copy of the same book. This means same publisher, same title, same author, same edition.

Alice and Bob, in person and face to face, must verify whether they have the exact same copy of the book. But if for whatever reason it would be impractical to meet up, verification must be done using other means, like sending one another the photo of the agreed page.

They can agree to replace the book with a different one every so often, each time undergoing verification process.

Encrypting and decrypting

In Doowop, an encrypted message is just rows and columns of numbers, with an occasional operator. Only one unit of mesage per line, in which a unit could be a numeral, a word, a character, a string of characters, a sentence, or even a paragraph.

Take a look at this Example 1:

                42 11 4 7 3 +
                 |  | | | | |
page number-------  | | | | |
paragraph number----- | | | |
line number------------ | | |
word number-------------- | |
character number----------- |

This is what a unit looks like, and it can be thought of as an address. This particular unit contains six elements (only max of 6 per line). This one can be interpreted as, “On page 42 of the book, look at the 11th paragraph. Of that paragraph, look for the 4th line. Of that line, look for the 7th word. Of that word, look for the 3rd character. This character will be affixed (the plus operator) to the next unit.”

Let’s clarify a few things:

  • Decrypting a message starts from left to right, top to bottom.
  • A line isn’t a sentence. A sentence (e.g. this one) might flow over to two or more lines, or it might be contained within one single line. Looking for a line is easier, and thus it is referenced instead.
  • To look for the word using the word number, start with the first full word of the line.
  • A character is any letter of the English/Filipino alphabet.

A unit can also have less than six elements. Let’s have some examples.

Example 2:

        102 4 12 9
         |  |  | |
page------  |  | |
para---------  | |
line------------ |

Interpretation: “On page 102, look for the 4th paragraph. Of that paragraph, look for the 12th line3. Of that line, use the 9th word. There is no operator at the end, so use a space to separate from the next unit.”


Right now, there are only a few operators that we can use. Examples are provided for each operator.

The + (“plus”) operator

Example 3:

 42 11 4 7  3 +     char 1
 90  8 7 3 10 +     char 2
103 12 3 9  1       char 3, end of string

The example above locates three characters, and combines them in a string. The absence of an operator at the end of line signifies the end of the character string4.

This is useful for acronyms that are unlikely to be present in the book (like PLDT, BGC, ACAB). If, however, the acronym you intend to use is in the book, you may want to refer to it as a word instead (i.e. ending the unit in word number).

Example 4:

42 11 4 7 +     word 1
90  8 7 3       word 2

The example above locates the two words, and combines them in a compound word. Still, the absence of operator at the end signifies the end of compound word.

This is useful for when you want to use, say, rainbow but can only find the words rain and bow.

Example 5:

32  9 3 10  +       word 1
42 11 4  7  3 +     char 1
90  8 7  3 10 +     char 2
69 13 2  4  9       char 3

The example above locates a word and the three characters to be appended to it.

Say you want to use the word meeting but found only the word meet. The last -ing can be located as three different characters to be added to meet.

The * (“star” or “asterisk” or “times”) operator

The * operator, in essence, means “repeat the one above.”

Example 6:

32  9 3 10 6 +
 *  * *  4

Interpretation: “On page 32, look for 9th paragraph. Of that paragraph, look for the third line. Of that line, take the 6th character of the 10th word, and affix it to the 4th word. Space.”

Use ** (i.e. two adjacent stars) to mean, “repeat the exact same line above.” Useful for repeating characters (or words, etc.)

Example 7:

69 13 2 4 9 +   char 1
**              still char 1

The [] (“brackets”) operator

Signifies the range of characters, words, etc. to be used.

Example 8:

        32 4 12 [3-4]   "Use the 3rd to 4th words" (phrase?)
         | |  |   |
page-----  |  |   |
para--------  |   |
line-----------   |

When [] are used in the word number, it specifies what sequence of words are to be used in the line. Useful for, say, of the and other common sequence of words.

Example 9:

32  9 3 10  +       word 
 *  * *  4 [5-7]    "5th to 7th chars of the 4th word"

Interpretation: “Add the 5th to 7th characters of the 4th word, to the 10th word, both of which are in same location.”

The {} (“braces”) operator

The {} share similar functionality with [] in that they both signify a range of character, words, etc. Their difference is in the arguments inside them and how it is interpreted.

{n} means “Use the first n characters/words/etc”, where n is positive integer.
{-n} means “Use the last n characters/words/etc”, where -n is negative integer.

Example 10:

44 10 1 {2}         "Use the first two words in the first line of 10th paragraph of page 44."
32  9 3 10  +       A different word 
 *  * *  4 {-3}    "Use the last three letters, and append it to the word above"

Signifying a literal number

Up until this point, it’s implied that a message consists of only alphabet letters. But for those times that a number is needed to convey a message, we can set an exception.

If a line consists of only one number (the “page number”), then treat it as literally that number.

Example 11:

 4  +           "Use the number 4, NOT the whole page 4."
32 11 4 6  9 +  char 1
 *  * 3 5 10    char 2

This technique is useful for time (4PM), date (12 Jun), place (32nd st).

While nothing is preventing you from doing so, it’s not a good idea to string several numbers, like so (Example 12):

9 +
1 +
* +
5 +
6       or the numerical value "91156"


We can put some features that might add value to the code. You can adopt the following or come up with your own, but remember that these are just options.

  • Initializers could be symbol/s at the beginning of the code to signify something. For example, ! to mean urgent; or to mean dispose this message ASAP. There can be several initializers, but try to limit them to three. When using them, initializers shall be the first line. So they must be non-numeric, since we’re saving the numbers for the body of the code. Initializers must not use the symbols used for operators to avoid confusion.
  • Signature could be symbol/s at the end of the code that identifies the messenger. Might be useful when sharing the code to more than one person simultaneously (“broadcasting”). But be careful, Eve, Trudy, and/or Mallory2 might be listening!


Doowop is developed hastily drafted during a sleepless night, with English and Filipino languages in mind. Since we have no experience in other languages with complex calligraphy, Doowop might not be suitable.

Learning the syntax might present barriers.

Any recommendations to address these are welcome.

Why even bother using Doowop?

It’s tedious to encrypt and decrypt a message using Doowop, this we know by now. However, we’d argue that part of the encryption is this slow process of paying attention to the message. In the same vein, to decrypt is to be patient. If it’s important and urgent, perhaps it’s worth considering trimming the contents, or use a completely different method.

Doowop is just reimagining how E2EE would look like in lower technology that is more materially accessible to everyone. With the inefficiencies of using analog, Doowop attempts to provide E2EE even in these restrictions.

Doowop can be combined with other technologies to make it more usable, like communicating over 0G, 1G, or 2G radio signals. Imagine too how this can be implemented in sign language! TNU

  1. End-to-end encryption is a system of communication where the only people who can read the messages are the people communicating. No eavesdropper can access the cryptographic keys needed to decrypt the conversation—not even the middleman that runs the messaging service. ↩︎

  2. In cryptography, Alice and Bob are fictional characters commonly used as placeholders in discussions about cryptographic protocols. In other fields, they can be participants in an experiment. See cast of characters here: https://en.wikipedia.org/wiki/Alice_and_Bob#Cast_of_characters ↩︎ ↩︎

  3. Yes, it’s a big paragraph, like how DWPs liked it. ↩︎

  4. You may consider this as a null operator. It simply means use a space character to separate from the next unit. ↩︎