# Zigzag encryption

This page simplifies the Worm cipher, by F. Ruiz, to reduce the amount of work involved without skimping on security. All steps can be performed by hand without excessive effort. Where Worm used four-letter operations on a Tabula Recta, Zigzag uses at most three letters. The basic pattern is a kind of zig-zag on the Tabula, hence the name.This operation is not identical for encryption and decryption, and so the cipher is not reciprocal. In this implementation, the user can select two different substitution keys, plus a separate seed.

The first step is to generate a scrambled alphabet for each substitution key. The process is simple: 1, take the key and write down new letters in the order they appear; if a letter in the text key has already been written, write instead the first letter before it in the alphabet that is still available (wrap around to the end if needed); 2, then write the rest of the alphabet in reverse order. Then also make a reversed alphabet for each of those by taking the first letter of the scrambled alphabet, and then the rest of its letters in reverse order. Place alphabet 1 on the top of the Tabula Recta, alphabet 2 on the left side, reversed alphabet 1 on the right side, and reversed alphabet 2 on the bottom.

After the plaintext or ciphertext and the seed are processed —spaces and punctuation are stripped, and all letters are converted to capitals; accented letters are replaced by their non-accented versions; numbers in plaintext are converted to letters as in 0=A,1=B,...9=J, but are not converted back— we perform "zigzag operations" using the Tabula Recta on groups of three letters (you'll see how the letters are chosen below), this way: find the first letter at the top and go down until the second letter is found, then left or right following that row until the third letter is found, then down to the bottom to read off the result. Sometimes you will start on the left rather than the top, and read the result on the right. Now we discuss how to choose those letters for encryption and decryption. We start with the processed plaintext (ciphertext when decrypting) written out as a row of letters. Since the first phase has less security, you may want to prepend a number of gibberish letters equal to the length of the seed, the better to mask the seed against cryptanalysis.

Encryption, starting from the plaintext:

1. Take the seed and write it directly above the plaintext, beginning with the leftmost position.
2. Take the first plaintext letter, look it up on the top of the Tabula Recta, and go down until the seed letter directly above that letter is found, then left to the edge. Write that letter below the plaintext letter. Then take the second plaintext letter and do the same, this time using the second seed letter, and so on. When this phase is over, the row below the plaintext will contain the same number of letters as the seed.
3. From now on, we do zig-zag operations involving three letters: the letter immediately above the spot we want to fill, plus two letters on the left of it, the first at a distance equal to the length of the seed, and the one following it. Start this way: take the plaintext letter above the spot to be filled and look it up at the top of the Tabula Recta, then go down until the first plaintext letter (top row) is found, then left or right until you find the second plaintext letter (directly right of the previous, in the work table), and then down to read the result at the bottom. Mark the first plaintext letter so you don't use it again. Then take the next letter and do the same, this time involving the next pair of consecutive plaintext letters, on the top row. Keep repeating this step while the bottom row is shorter than the top row. When done, the bottom row is the ciphertext.

Decryption, starting from the ciphertext:

1. Take the seed and write it directly above the ciphertext, beginning with the leftmost position.
2. Take the first ciphertext letter, look it up on the left of the Tabula Recta, and go right until the seed letter directly above that letter is found, then up to the top. Write that letter below the ciphertext letter. Then take the second ciphertext letter and do the same, this time using the second seed letter, and so on. When this phase is over, the row below the ciphertext will contain the same number of letters as the seed.
3. From now on, we do zig-zag operations involving three letters: the letter immediately above the spot we want to fill, plus two letters on the left of it on the bottom row, the first at a distance equal to the length of the seed, and the one following it. Start this way: take the ciphertext letter above the spot to be filled and look it up on the left of the Tabula Recta, then go right until the first plaintext letter (bottom row) is found, then up or down until you find the second plaintext letter (directly right of the previous, in the work table), and then right to read the result on the right edge. Mark the first plaintext letter so you don't use it again. Then take the next letter and do the same, this time involving the next pair of consecutive plaintext letters, on the bottom row. Keep repeating this step while the bottom row is shorter than the top row. When done, the bottom row is the plaintext, perhaps preceded by a few gibberish characters.

### Tabula Recta

  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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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 | 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

## Step 1. Tabula preparation

We begin by making scrambled alphabets out of the keys, which are then placed at the top and left of the Tabula Recta, plus their reversed versions at right and bottom, respectively. This is why we input the keys before the plaintext. The boxes are blue to indicate that they can be written on. Do this to make a scrambled alphabet: take each key and write the different letters of the alphabet in the order they appear in the key, if a letter has been used already, write instead the first letter in the normal alphabet not yet chosen; if there are letters that did not appear in the key, write them now in reverse alphabetical order. To make its reversed version take the leftmost letter, and then on the right of it write the rest of the letters in reverse order.

It is OK to use keys that have been used before, even for a message of identical length as a previous message. In this program, if you leave the key 2 box empty, key 1 will be used also as key 2.

### Key 2

If you want to use for the seed phase a key different from key 1, write it in this box, otherwise key 1 will be used:

### Seed

Since the processes for encryption and decryption are slightly different, we need to tell the program what we want to do:

Encrypt     Decrypt

Here we tell the program whether or not to prepend some gibberish to the plaintext in order to mask the seed:

## Step 2. Plaintext preparation

### Plaintext / Ciphertext

Which is converted to this, after spaces, punctuation and diacritics are removed, and everything is turned into lowercase:

## Step 3. Encryption / Decryption

In order to obtain the ciphertext we generate the table below, following the instructions at the top of this page. The bottom row is the output.

### Work table

Information about output randomness will appear here

## Step 4. Encrypted Ciphertext / Decrypted Plaintext

The ciphertext (plaintext when decrypting) is the first box below. The lower box contains the same, but split into codegroups of five characters each. Complete the last one with random letters if you need to; they will decrypt to gibberish.