CIPHER MACHINES AND CRYPTOLOGY The SECOM Cipher
 Home Hand Ciphers

The SECOM cipher is a handcipher to encrypt a message, containing letters, numbers and spaces. It is one of the most secure field ciphers. SECOM uses four steps: calculating the key phrase digits, the straddling checkerboard, and two columnar transpositions, of which one disrupted. The combination of fractioning by the checkerboard and the double disrupted transposition makes SECOM a very powerful encryption methode.

We will demonstrate the encryption technique by the following example:

Plain text: RV TOMORROW AT 1400PM TO COMPLETE TRANSACTION USE DEADDROP AS USUAL
Key Phrase: MAKE NEW FRIENDS BUT KEEP THE OLD

Take the first 20 letters of the key phrase and divide it into two halves. Within each half, we assign 1 to the letter earliest in the alphabet, and so on, treating 0 as the last number, and assigning digits in order to identical letters.

```MAKENEWFRI ENDSBUTKEE
7162830495 3728109645```

The two 10 digit results are then added, digit by digit, ignoring carries.

``` 7162830495
+3728109645
----------
0880939030```

The result of the addition is then expanded to another 50 pseudorandom digits through chain addition. Add the first two digits in the group together, take only the last digit of the result and append it to the end of the group, then ignore the first digit, and repeat the process.

```0880939030
----------
8689229338
4471412612
8185538730
9930815039
8238965327```

Take the last row, assign 1 to the smallest digit, and so on, treating 0 as the last number, and assigning digits in order to identical digits. Those 10 digits are used as the top row of numbers for a straddling checkerboard.

```8238965327
8139065427```

The second row of the checkerboard contains the highest frequency letters ESTONIA, with a blank in the 3th , 6 th and 9 th square. Write the digits, located above an empty square, downwards in the first column. Complete the checkerboard with the following letters and numbers:

```B C D F G H J K L M
P Q R U V W X Y Z *
1 2 3 4 5 6 7 8 9 0```

However, we start the filling of the rows in the column, pointed to by the digit at the left of that row. In our example, the start positions are underlined. Complete until the end of that row and proceed at the beginning of the row.

``` | 8 1 3 9 0 6 5 4 2 7
+--------------------
| E S   T O   N I   A
3| L M B C D F G H J K
6| W X Y Z * P Q R U V
2| 0 1 2 3 4 5 6 7 8 9```

We convert the plain text into numbers according to the straddling checkerboard:

```R V * TOM OR R OW * AT* 1 4 0 0 P M * TO* C OM P L ETE*
64676090310646406860796021202828663160906039031663889860

TR ANSAC TION* U SE* D EAD D R OP * AS* U SU AL
964751739940560621860308730306406660716062162738```

In our example, several spaces are used. However, it is recommended to omit all spaces where legibility preserved.

To determine the number of columns for the two transpositions, we take the unequal digits (that is, skipp if encounter an already used digit), one by one, starting at the end of the last row of the 50 generated numbers, from right to left, and add them until the result is more than 9. The result is the width of the first columnar transposition. We continue with reading off unequal digits, from right to left, and add them to retrieve the width of the second columnar transposition:

```....815039
8238965327```

1st transposition: 7 + 2 + 3 = 12 columns
2nd transposition: 5 + 6 = 11 columns

Take the 10 digits from the second half of the key phrase, and the 10 digits used for the straddling checkerboard and add them, digit by digit, ignoring carries:

``` 3728109645 second half of key phrase
+8139065427 Checkerboard
----------
1857164062 Result```

The keys for the two transpositions are taken by reading out the 50 numbers by columns, using the 10 digits as a transposition key. Again, 0 is last.

``` 1857164062
----------
8689229338
4471412612
8185538730
9930815039
8238965327```

The digits for the transpositions after reading off the 23 required digits:

`848982458982 09792855878`

The first transposition is a simple columnar transposition. We use the first 12 of the 23 digits as transposition key, and fill the transposition block with the numbers, obtained by the checkerboard conversion. At this stage, null digits are appended to the message, so that it will fill a whole number of 5-digit groups. In our example, we add one null digit.

```848982458982
------------
646760903106
464068607960
212028286631
609060390316
638898609647
517399405606
218603087303
064066607160
621627380```

The message is then read off in columns, using the top row digits as transposition key:

```088089367 60167630 461031162 962364063 008900808 642665206
642987841 662699062 376095770 06314006 700083606 19636631```

The second transposition is a disrupted columnar transposition. We use the last 11 of the 23 digits as transposition key. The first triangular area starts at the top of the column which will be read out first, and extends to the end of the first row. It continues in the next row, starting one column later, and so on until it includes only the digit in the last column. Then, if possible, after one full row, a second triangular area starts, this time in the column which will be read out second. A third, fourth, and more triangular areas can be added, if enough rows available.

Since we know that the message is 105 digits long, we know that we have to fill 9 rows with 11 digits, and 1 row with 6 digits. First, we fill the transposition block row by row with the numbers from the first transposition, first avoiding the triangular areas:

```09792855878
-----------
0880
89367
601676
3046103
11629623
640630089
0080864266
52066429878
416626
990623XXXXX```

Next, we fill in the triangular areas, row by row as well:

```09792855878
-----------
08807609577
89367006314
60167600670
30461030083
11629623606
64063008919
00808642666
52066429878
41662636631
990623XXXXX```

Again, the message is read off in columns, using the top row digits as transposition key:

```7771938622 000320423 960038296 8314608060 717801673 6060606463
536069686 740369681 8900140219 0666260666 0863160549```

Finally, the digits are divided in groups of 5 to get the fully encrypted message:

```77719 38622 00032 04239 60038 29683
14608 06071 78016 73606 06064 63536
06968 67403 69681 89001 40219 06662
60666 08631 60549```

Decrypting a message:

To decrypt a message, we use the key phrase to calculate the digits for the checkerboard and the two transpositions. Next, we apply the transpositions in reversed order.

We create the block for the second -disrupted - transposition, with the appropriate column lengths and triangular areas. We fill in the encrypted message column by column, according to the 2nd transposition key. First, we read of the message row by row, avoiding the triangular areas. Next, we read off the triangular areas, also row by row.

The result is filled in the first - simple - transposition block, also created with the appropriate column lengths, column by column according to the 1st transposition key. Again, we read off the digits row by row.

The resulting sequence of digits is converted to plain text, using the checkerboard. Note that, at the end of the sequence, up to four null digits could be added to complete a block of five, and should be disregarded during conversion.

© Dirk Rijmenants 2004 - 2021. Last changes: 6 June 2021