157 lines
9.8 KiB
Plaintext
157 lines
9.8 KiB
Plaintext
?++++++++++++++++++++++++++++++++++++++++++++++++++++++?
|
|
]|[ [-=- SOLDIERX.COM Presents -=-] ]|[
|
|
+++++++++++++++?+++___________________________________________________+++?+++++++++++++++
|
|
\\////////////////A Guide to Vernam OTP Encryption Without A Computer\\\\\\\\\\\\\\\\//
|
|
\\\\\\\\\\\\\\\\\___________________________________________________/////////////////
|
|
\\::::::::::::::::::::::::::::::::::::: by :::::::::::::::::::::::::::::::::::::://
|
|
\\xxxxxxxxxxxxxxXXxxxxxxxxx?-=-][- Durandal -][-=-?xxxxxxxxxxxxxxXxxxxxxxxxxx//
|
|
\\::::::::::::::::::::::::::::::::::: of :::::::::::::::::::::::::::::::::::://
|
|
\\ SOLDIERX.COM //
|
|
\\ SEP 2008 //
|
|
\\ NOBODY CAN STOP INFORMATION INSEMINATION //
|
|
?=+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=?
|
|
**********************************************************************
|
|
| The author hereby grants permission to reproduce, redistribute, |
|
|
| or include this file in your file section, electronic or print |
|
|
| newletter, or any other form of transmission that you choose, as |
|
|
| long as it is kept intact and whole, with no ommissions, delet- |
|
|
| ions, or changes. (?)2008 SOLDIERX.COM - http://www.soldierx.com |
|
|
**********************************************************************
|
|
|
|
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.
|
|
_____________________________________________________________________
|
|
?=------------------------------]-?-[------------------------------=?
|
|
\\ THIS FILE WAS A SOLDIERX RELEASE //
|
|
\\ http://www.soldierx.com //
|
|
\\ NOBODY CAN STOP INFORMATION INSEMINATION //
|
|
?=+++++++++++++++++++++++++++++++++++++++++++++++++++++++++=? |