[Next] [Up] [Previous] [Index]

Quadibloc IX

Quadibloc IX is a block cipher that obtains its security through the principle of indirection. It has only four rounds. However, each round involves performing a form of the basic Quadibloc f-function ten times. Hence, the f-function is represented in a schematic form:

a box, bearing on it the numbers of the two S-boxes used within it, from the standard Quadibloc set (note that they are used so to avoid a symmetry involving rotating each 32-bit subblock by an integer number of bytes), has an input and an output, and in addition, three subkeys as input, and two intermediate results as output. Note also that the key-dependent S-box is noted here as S9, since the first eight of the standard Quadibloc S-boxes are used.

This compact schematic notation allows the Quadibloc IX round to be illustrated in a compact fashion:

and the round, in essence, is composed of the following elements:

After each round except the last, the 64-bit halves of the block are swapped.

Since each round contains two Feistel rounds for each half of the block, four such rounds involve only eight Feistel rounds, but the F-function is of the SPSPS type instead of the SP type.

The number of rounds, therefore, might be barely enough to provide a degree of security even without considering the cipher's main feature. Because the intermediate results from the left half are first enciphered, and then used as subkeys for encipherment, it is difficult to work backwards from known plaintext and ciphertext for a single round to determine the subkeys for the round. The use of a key-dependent S-box further frustrates differential cryptanalysis and related techniques.

The key material used in this cipher consists of 88 subkeys, each 32 bits long, and one S-box containing the 256 bytes from 0 to 255 in a scrambled order.

In the detailed description of the cipher which follows, should there be any appearance of ambibuity, please remember that I consistently use big-endian conventions; that is, the most significant bit or byte of a word is always the first one, the leftmost one, and the one with the lowest number.

The f-function

The f-function used here is essentially as illustrated with Quadibloc VIII.

 1  2 27 28 21 22 15 16
 9 10  3  4 29 30 23 24
17 18 11 12  5  6 31 32
25 26 19 20 13 14  7  8

The Round in Detail

A round of Quadibloc IX encipherment consists of the following steps:

After each round, the halves of the block, the first half being composed of the first and second 32-bit quarters of the block, and the second half being composed of the third and fourth 32-bit quarters of the block, are swapped.

The Key Schedule

As noted, this block cipher uses 88 subkeys, each one 32 bits long, numbered from 1 to 88, and one 256-byte key dependent S-box designated S9.

The key must be a multiple of 16 bits in length.

Two strings of bytes will be produced from the key.

If the length of the key is a multiple of 32 bits in length, then let that multiple be N, where the key is 4*N bytes in length. In that case, the first string shall be 14*N-1 bytes in length, and the second string shall be 14*N+1 bytes in length.

If the length of the key is an odd multiple of 16 bits in length, then let that multiple be M, where the key is 2*M bytes in length. In that case, the first string shall be 7*M-2 bytes in length, and the second string will be 7*M bytes in length.

In other words, the second string shall be initially three and one half times as long as the key, and the first string shall be initially one byte shorter than the second string, and if the number of bytes in the first string is even, it shall be shortened by one byte, but if instead the number of bytes in the second string is even, it shall be lengthened by one byte.

The first string shall be filled with repetitions of the following material, up to its length: the key itself, followed by a single byte containing the one's complement of the XOR of all the bytes of the key together.

The second string shall be filled with repetitions of the following material, up to its length: the one's complement of the key, followed by the bytes of the key in reverse order.

The 88 subkeys, each one four bytes in length, shall be formed in order, one byte at a time, starting with the most significant and leftmost byte of the first subkey.

Each string will be called upon to produce output bytes by the process of chain addition. A chain addition step consists of calculating the sum, modulo 256, of the last two bytes in the string. This sum shall be the output byte from the step. The string will then be modified as follows: the last byte of the string shall be removed, and the output byte shall be appended to the string before the first byte, with the result that the bytes in the string shall advance one position.

Each string has associated with it a 256-byte buffer. Before beginning to generate subkey material, each string shall generate 256 bytes, and these bytes will be placed in the cells of this buffer, beginning with cell 0 and ending with cell 255.

Producing a byte of subkey material proceeds as follows:

An additional 256 bytes of subkey material shall be generated after all the required subkeys are generated. This subkey material, along with the buffers associated with the two strings, shall be used to generate the key-dependent S-box S9 as follows:

Decipherment

To decipher a block encrypted in Quadibloc IX, it is necessary to modify the round, as well as to perform the four rounds in reverse order. The modified round for decryption involves performing the two Feistel rounds acting on the first and second quarters of the block, and the two Feistel rounds acting on the third and fourth quarters of the block, in reverse order in each case, while retaining all designations of subkeys used and intermediate values output.


[Next] [Up] [Previous] [Index]

Next
Start of Section
Skip to Next Section
Skip to Next Chapter
Table of Contents
Main Page