A Guide to Vernam OTP Encryption Without A Computer
While there is a wealth of knowledge pertaining to the application of encryption and steganographic techniques in the realm of computers, very little has been said about secure encryption techniques that can be implemented on paper. The two main arguments that come to mind are “why would you ever want to encrypt something on pencil and paper?” and “how can this possibly be secure if you’re performing the calculations in your head?” While the latter’s explanation can be found with a simple google search, the former question requires a bit more imagination. One situation where such encryption would be warranted is in the passing of messages to and from individuals who have a high probability of having their mail monitored and have no computer access (aka prison and certain humanitarian missions). Another reason to use these pads is that while an almost infinite number of forensics tools exist to recover data off hard drives, the industry has yet to come up with a way to recover a burnt/swallowed page of paper.
Secure communication using this cipher requires a little forethought. Obviously both parties need to have knowledge of the key used in its creation, and the key should be destroyed promptly after use to prevent reuse or capture. In the case of preissued keys(the preferred method), strict chain of custody must be maintained to guarantee a key’s sanctity. In the event key pads are not accessible, a key can be made using a mutually known secret (like a bible verse or poem). It should be stressed that using a passage as a key should only be used if absolutely necessary, as it could conceivably create recognizable patterns (besides being an obvious candidate for a cryptanalyst to try). A simple way to create sufficiently random preshared keys is to use the pieces from a Scrabble game.
Before you can begin to encode a message using this algorithm, you must first perform Russian Conjugation on the message (and the key if it’s a passage). This is simply the process of capitalizing letters and removing all headers, punctuation, spacing, and any other unnecessary information that could create a recognizable patterns. The rule of thumb is to not transmit any more information than absolutely necessary, and keep the message as short as possible.
If our message is: Party at Bob's House Tonight!!!!! and our key is: ASOIE NTSLE ITHGS GKLSA TLKGH SGIST Then its corresponding conjugated form would be: PARTYATBOBSHOUSETONIGHT
Now we perform a few formatting operations to both minimize errors in encoding and conceal the size of the message. We start by adding a space every five characters (like the preshared key above) and pad the difference in size between the message and the key with predetermined garbage characters. Make sure that the key is at the very least the same number of characters as the message. If the message is ever larger than the key, break it up into smaller parts and use a different key for each part.
In the end our message will look like: PARTY ATBOB SHOUS ETONI GHTSX SXSXS And our key will look like: ASOIE NTSLE ITHGS GKLSA TLKGH SGIST
Now for the fun part: the actual algorithm is a mod 26. The “correct” way to do this is to give each letter of the alphabet a value with A being 1 and Z being 26, adding the value of the each letter of the message to its corresponding character in the key, then subtracting 26 in the event that the sum is 26 or higher (basically dividy by 26 and keep the remainder). While this is the textbook way to perform the cipher, in practice I’ve found a couple easier ways to obtain the same ciphertext. The easiest of these is called a Vigenere Square. To make this, we make a grid that is 26 by 26 squares. We put each letter of the alphabet both above the grid and to the left of it, then start filling the grid in by putting a “B” in the topleft grid square. We then proceed to write in each successive letter of the alphabet in every direction until we get a table that looks like this:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +---------------------------------------------------- A | B C D E F G H I J K L M N O P Q R S T U V W X Y Z A B | C D E F G H I J K L M N O P Q R S T U V W X Y Z A B C | D E F G H I J K L M N O P Q R S T U V W X Y Z A B C D | E F G H I J K L M N O P Q R S T U V W X Y Z A B C D E | F G H I J K L M N O P Q R S T U V W X Y Z A B C D E F | G H I J K L M N O P Q R S T U V W X Y Z A B C D E F G | H I J K L M N O P Q R S T U V W X Y Z A B C D E F G H | I J K L M N O P Q R S T U V W X Y Z A B C D E F G H I | J K L M N O P Q R S T U V W X Y Z A B C D E F G H I J | K L M N O P Q R S T U V W X Y Z A B C D E F G H I J K | L M N O P Q R S T U V W X Y Z A B C D E F G H I J K L | M N O P Q R S T U V W X Y Z A B C D E F G H I J K L M | N O P Q R S T U V W X Y Z A B C D E F G H I J K L M N | O P Q R S T U V W X Y Z A B C D E F G H I J K L M N O | P Q R S T U V W X Y Z A B C D E F G H I J K L M N O P | Q R S T U V W X Y Z A B C D E F G H I J K L M N O P Q | R S T U V W X Y Z A B C D E F G H I J K L M N O P Q R | S T U V W X Y Z A B C D E F G H I J K L M N O P Q R S | T U V W X Y Z A B C D E F G H I J K L M N O P Q R S T | U V W X Y Z A B C D E F G H I J K L M N O P Q R S T U | V W X Y Z A B C D E F G H I J K L M N O P Q R S T U V | W X Y Z A B C D E F G H I J K L M N O P Q R S T U V W | X Y Z A B C D E F G H I J K L M N O P Q R S T U V W X | Y Z A B C D E F G H I J K L M N O P Q R S T U V W X Y | Z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z | A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Now we just find the message character along one side, its corresponding key character along the other, and find where they meet on the grid. Doing this obtains the following ciphertext:
QTGCD ONUAG BBWBL LEAGJ ATEZF LEBQM
To decrypt the message, we simply perform the operation in reverse. Find the key character along the side of the table, then find the cipher character in the table, and look straight up to see what letter creates that cipher value. Even with the Russian Conjugation in place, it is possible to read and understand the message.
Vernam OTP isn’t the only One-Time Pad around, but it’s by far the simplest to implement when needed. It does have its limitations (no numbers), but this can be remedied by spelling numbers out or having a system of CEOI codes in place to represent them. Use your imagination and make sure everyone using the pads is in agreement with whatever codes you decide to implement. The most important considerations are that keys should be as random as possible, they must be guarded by responsible parties at all times, and they must be destroyed immediately after use. If you haven’t picked up on it by now, each pad should have an identifying mark on it so the recipient of the encoded message knows which pad to use. This shouldn’t need to be said, but we live in a world where coffee cups have to say “CAUTION HOT” on them.
Hopefully, nobody reading this tutorial will ever be in a situation where they are forced to use it, but that doesn’t mean you shouldn’t prepare for the worst while hoping for the best. If used properly, these One-Time Pads are limited only by the randomness of your key creation method. If you should require a higher level of security, you can use the table above to create a false key after the message has been encoded. This false key should allow the ciphertext to be decrypted into a less incriminating message containing false information. To do this, figure out the message for the false key, then use the steps for decryption using the ciphertext and the false message. The resulting characters will make up the key necessary to obtain that message. Doing this provides the highest level of security, while at the same time proving the absolute deniability afforded by the algorithm.