Preferred Embodiment



next up previous contents
Next: Alternate Embodiments Up: Summary of the Previous: Introduction

Preferred Embodiment

Introduction

The method and apparatus of the preferred embodiment will now be described with reference to figures 1 to 5. The preferred embodiment uses toggle cellular automata as dynamical systems for encryption and decryption. These toggle cellular automata are the secret keys used in encryption and decryption. Before secure communication can begin between two parties A and B, these parties must share a secret collection of toggle cellular automata, and some convention for selecting which of these are to be used at each step of encryption/decryption.

The key elements of the method of the preferred embodiment will be presented in terms of a concrete application in which the encryption/decryption capabilities of this invention are advantageous. Further applications, the hardware modifications they entail, and several alternate embodiments of the invention will be specified below. In this application only one toggle automaton, of radius , is used as a secret key. It is assumed that this is a left-toggle cellular automaton. It is further assumed that the communicating parties share an integer which specifies the number of encryption/decryption steps.

The application involves communication between two banks, A and B. Bank A,located in the United States, wishes to securely communicate with bank B, located in Japan. Due to their great physical separation, these banks must communicate over an insecure trans-pacific phone line via modem. As in any application, the type of information to be communicated influences the convention to be established between the communicating parties which governs how information is to encoded and decoded into the encryption/decryption apparatus. In this case, A and B communicate numbers representing the values of various transactions. They must identify these numbers as representing either dollars or yen, and need certain special symbols to aid in further processing of this information. They find that a 4-bit code, as given in table 1 suffices for their needs. In this table a symbol, the 4-bit code for the symbol, and its meaning if non-numeric is indicated.

 
Table: Code for symbols used application to international bank communication.

Referring to fig. 1, an overview of the preferred embodiment used in this application will now be described. The information to be encrypted is supplied from an input information stream 100 generated by A, this input stream resides before encryption on some electronic storage medium, such as a computer storage disk. The input information stream contains banking symbols from the first column of table 1. A also possess a noise generator 200 which supplies random bits of information, any high-quality noise source, such as the DOD standard noise source, could serve as 200. A has an encoder 300 which translates banking symbols into bit strings as specified in table 1. The encoder 300 could be embodied as a read-only memory which contains the information in table 1. A has an encryption apparatus 400 which is able to inverse iterate toggle cellular automata in iterative and/or parallel mode as described below. B has a decryption apparatus 500 which is able to forward iterate toggle cellular automata in iterative and/or parallel mode as described below. B possesses further a decoding apparatus 600 which translates bit streams into streams of banking symbols by reference to table 1. The way B uses this apparatus to generate an output information stream 700 duplicating the A's input information stream 100 is specified below.

Basic Parts of the Apparatus

The details of the operation of the apparatus of the preferred embodiment depend on several constants which depend in turn on the radius of the cellular automaton used. To simplify the specification, these constants will be given labels as follows: , , and .

Refer now to figure 2. The apparatus of the preferred embodiment has several basic parts which are used in both encryption and decryption. The first part 10 is a lookup table which contains the cellular automaton rule, and will thus be called the rule table. This rule table is an array of memory elements each of which can store 1 bit of information. The number of memory elements which must be devoted to this purpose depends on the radius of the rule used. If the radius is , then there must be memory elements in the rule table.

There must be at least one data processor in the system 20 which is able to set the values in the rule table. Depending on hardware details, this processor could be physically identical with some other processor. It will be referred to as the rule-table setter. The rule-table setter takes as input a bit b and an integer i and sets the value of two elements of the rule table accordingly. The integer i must be the the range . The rule table setter has two modes of operation, left and right. In left mode, if the bit b is 0, then the rule-table setter sets the rule-table element indexed i to 0 and sets the rule-table element indexed i+ to 1. If the bit b is 1, then the rule-table setter sets the rule-table element indexed i to 1 and sets the rule-table element indexed i+ to 0. In right mode, if the bit b is 0, then the rule-table setter sets the rule-table element indexed 2i to 0 and sets the rule-table element indexed 2i+1 to 1. If the bit b is 1, then the rule-table setter sets the rule-table element indexed 2i to 1 and sets the rule-table element indexed 2i+1 to 0.

As an example of the operation of the rule-table setter, consider construction of the rule table for the nearest-neighbor (r=1) left-toggle cellular automaton rule 30 shown in table 2. Since r is 1, R is 4. Invoking the rule-table setter in left mode with the bit sequence 0,1,1,1 for i = 0 to 3 respectively produces the rule 30. Invoking the rule-table setter in right mode with the same bit sequence produces the right-toggle rule 86. The left-toggle rule 60 which is used in some examples below is produced by the rule-table setter in left mode with the input sequence 0,0,1,1. The rule tables for these three rules are shown in table 2.

Advantageously, the rule-table setter has a third mode, a direct mode, in which information may be passed directly into the array 10 to set-up the rule-table. The direct mode can only be used if the information is already structured to represent either a left- or right- toggle rule.

There must be an array of memory elements 30 which stores the current state and dynamical I/O, the information being encrypted and decrypted. The memory elements in this array are indexed , and may be considered to be physically 1-dimensional. Each can store 1 bit. If the block size, number of encryption/decryption steps, and rule radius are ,, and respectively, then is at least .

Advantageously, for iterative encryption and decryption, there is another processor in the system 40 which has associated to it a memory element 50 which can store bits of data. This memory will be considered to contain a -bit integer, but could also be embodied as a shift register. Depending on hardware details, this processor 40 could be identical to some other processor in the system. The processor 40 can perform the following operations:

  1. Access the bits in the memory elements of the array 30 and set bits accordingly in its memory element 50.
  2. Access the rule table 10 using information in its memory element 50, and set bits accordingly in the array of memory elements 30.
  3. Shift, either to the left or right, the bits in its memory element 50.

Iterative encryption and decryption will be described using this processor 40 and its memory element 50. Alternatively, each of the memory elements in the array 30 could be associated with its own processor, each able to access only part of the memory array 30, and each updating only one element of the array 30. Use of a distinguished processor 40 permits the total number of bit operations performed during each cycle of iterative encryption and decryption to be reduced compared to the iterative process in which the tasked are distributed over an array of processors, each acting only during part of the cycle.

Use of such an array of processors will be described below in conjunction with the parallel decryption process.

 
Table: Lookup tables for iteration of cellular automaton rules 30, 86, and 60, used as example keys in the preferred embodiment.

Iterative Encryption

The iterative method and apparatus of encryption will now be described with reference to figures 1 and 2.

Initialization.

A block of banking symbols is retrieved from the input information stream 100 by the encoder 300, which then codes these symbols by reference to table 1 into a block of bits. If there are symbols in the block of symbols retrieved, then the number of bits is . These bits are loaded in sequence into the memory array 30 by the encoder. This activates memory elements in the array 30, indexed .

Using the rule-table setter 20, the rule table 10 is loaded with the secret key.

Encryption.

Encryption then continues over cycles. At each cycle, the following operations are performed in sequence:

  1. Bits from the noise generator 200 are placed in the dynamical I/O for this cycle of encryption. The dynamical I/O in this embodiment using left-toggle rules of radius r comprises the 2r memory elements of array 30 to the right of the currently active memory elements. At encryption cycle , there are already active, so these bits are placed in the memory elements of array 30 indexed .

  2. The same bits used to active memory elements in the array 30 during step 1 are placed in the memory element 50 of the processor 40. The 2r-1)th-order bit of the integer in the memory 50 is set according to the bit placed in the memory element of 30 indexed and so on down to the 0th-order bit which is set according to the bit placed in the memory element 30 indexed .
  3. Beginning with the memory element 30 indexed , and continuing down to the memory element labeled 0, the following operations are performed:

    1. An entry f in the rule table 10 is retrieved by the processor 40. Let b be the bit in the memory element 30 indexed k, and let g be the integer in the memory element 50. if b is 0, then f is the gth entry in the rule table 10, and if b is 1, then f is the (g+ R)th entry in the rule table 10.
    2. The kth memory element of 30 is set to f.
    3. The integer in 50 is shifted to the right, i.e., The (2r-1)th-bit becomes the (2r-2)th bit and so on down. The 0th-order bit is dropped.
    4. The (2r-1)th-bit of the integer in 50 is set to f.

After n cycles of encryption, the memory elements of 30 indexed 0-(N+2rn-1) are activated, and contain the ciphertext.

Parallel Encryption

In each cycle of iterative encryption just described, one inverse iteration of a cellular automaton was performed. By using an array of processors, each of which similar to the processor 40 used above, many steps of inverse iteration can be performed at the same time in parallel. The array of processors 60, their associated d-bit memory elements 70, are shown in figure 3. To perform n steps of parallel encryption, these arrays must contain at least n elements.

All of the processors in the array 60 can read from the rule table 10, each can also read and write to its associated memory element in the array 70.

Only the processor in array 60 indexed 0 can read from the memory array 30 which contains the information being encrypted, and only the processor in array 60 indexed n-1 can write to the memory array 30. All of the processors except the one indexed 0 can read from the memory element of array 70 indexed 1 less than its own index. Since the processors have slightly different I/O connections, it will be useful to give them different names. The processor indexed 0 will be called the bottom processor, the processor indexed n-1 will be called the top processor, and the others will be called middle processors.

Initialization.
Initialization of the state of the memory array 30 with an -bit string encoding the information to be encrypted is the same as in iterative encryption described above. The rule table 10 is initialzed with the rule table setter 20 also as in iterative encryption. Each of the memory elements in the array 70 is initialized with random information in the same way that the memory 50 was initialized in iterative encryption. As in iterative encryption, the same random bits are also used to initialize states of memory elements in the array 30. The bits used to initialize memory element of the memory array 70 are used also to initialize the states of memory elements 30 indexed .

Encryption.

Let K be , i.e. the total number of memory elements in array 30 initialized with either information to be encrypted or random information. Define two indices C and P with initial values and . Then for an index i intialized to 0. The following process, in which each processor in the array 60 operates in parallel, stops when i reaches C-(2 r+1):

  1. The bottom processor obtains a bit b from the element of array 30 indexed P, provided that P is greater than or equal to 0, otherwise this bit will not be used and can be set arbitrarily to 0.

    Each of the middle processors indexed , and the top processor indexed obtain a bit b from 0th-order position of the integer in the element of the memory array 70 indexed .

  2. Using b and the integer, g, in its associated memory element in the array 70, each of the processors in the array 60 obtains a bit f from the rule table 10. if b is 0, then f is the gth entry in the rule table 10, and if b is 1, then f is the (g+ R)th entry in the rule table 10.
  3. All of the processors in the array 60 shift the integer in the associated memory element in array 70 to the right.
  4. The top processor sets its bit f in the memory element of array 30 indexed C. The other processors set their bit f in the (2r-1)th position in their associated memory element in the array 70.
  5. C and P are decremented by 1, and i is incremented by 1.

At the end of this process, the ciphertext is in the memory array 30, in elements indexed .

Iterative Decryption

While both encryption and decryption in the preferred embodiment are best performed in parallel hardware, it is possible to perform decryption as well as encryption using a single main data processor, using the same apparatus as used in iterative encryption and as shown in figure 2.

Assume that bits of ciphertext have been received by a user B who wishes to decrypt them.

Initialization.

The bits of ciphertext are used to activate elements in the memory array 30, indexed . The d-bits in the integer in memory element 50 are set according to the last d bits of the ciphertext. The rule table 10 is initialized with the rule table setter 20 as in encryption. An index is set to Q, an index J is set to 0, and an index k is set to K-d.

Decryption.
Decryption continues over n cycles. At each cycle the following steps are performed until k is 0:
    1. The integer, g in 50 is used to index into the rule table 10. Let b be the bit in the gth element of 30.
    2. The kth element of 30 is set to b.
    3. the integer in the memory element 50 is shifted right.
    4. J is incremented by 1.
    5. The dth bit of the integer in 50 is set to the bit in the memory element of array 30 indexed K-d-J.
    6. k is decremented by 1.
  1. K is decremented by 2r.

This process forward iterates the dynamical system one step at each cycle.

At the end of all n cycles, the bits from the memory array 30 are passed to the decoder 600 (fig. 1). The decoder looks up from table 1 the symbol corresponding to each group of 4 contiguous, non-overlapping bits. The resulting symbol stream 700 is the same as the symbols input by A.

Parallel Decryption

Parallel decryption is described with reference to fig. 3. The updating of each of the memory elements in the array 30 can be done in parallel using an array of processors. This array 80 contains processors each similar to the processor 40 used in iterative decryption. Each of this processors is associated with a memory element of an array 90, each of elements of which can store d bits of information. As above, the d-bits are considered to represent a d-bit integer. If the number of bits in the ciphertext block is , then the arrays 80 and 90 must each have at least elements.

While the processor 40 used in iterative decryption can read and write to any element in the array 30, a processor indexed in the array 80 needs only to be able to read from the elements indexed in the array 30. Such a processor need only to be able to write to the memory element indexed in the array 30. The arrangement of I/O connections of the processors in the array 80 is shown in fig. 3. In order to avoid indexing problems near the end of the arrays, these arrays can be considered to have periodic boundary conditions, i.e., the element indexed Q is identified with the element indexed 0.

Initialization. The memory array 30 is activated with bits of ciphertext just as above. The rule table 10 is initialzed with the rule table setter 20 as in encryption.

Decryption. Over n cycles each of the processors in array 80 performs the following operations:

  1. Each processor indexed reads d bits from the memory array 30 at positions indexed , and stores these bits as an integer g in its associated memory in the array 90.
  2. Each processor retrieves the bit b at index g in the rule table 10.
  3. Each processor indexed sets the memory element indexed in array 30 to b.

After n cycles the contents of 30 are sent to the decoder 600 as in iterative decryption.

Banking Example

Tables 3 and 4 show the encryption and decryption of an example message using the apparatus described above. In this example a simple message: ``Y146.00" is sent from A to B. A and B share as secret key, the radius-1 left-toggle rule known as rule 30, whose rule table is given in the third column of table 2. It is considered public knowledge that banks use 14 steps of encryption/decryption for their communication. Tables 3 and 4 show the steps of encryption/decryption in two different formats. In table 3 the state of the memory array 30 at the end of each cycle of encryption/decryption is shown coded according to table 1. This representation allows for easy global visualization of the steps of the process. In table 4 the same steps of encryption/decryption are shown in a raw format, i.e. the actual states of the elements in the array 30 are shown. This representation allows detailed verification of the steps performed.

A variant of the raw display format allows the resistence of the invention to cryptanalytic attack to be easily verified. In this variant, two very similar runs of encryption are performed, and an XOR of the state of the memory array in the two cases is displayed. The XOR is 1 if and only if values in the corresponding positions in the two runs differ. For clarity 1 is represented by the symbol ``#'' and 0 is represented by the symbol ``_''. In table 5, the decryption phase of tables 3 and 4 is XOR'ed with a decryption process using the same sequence of random bits in the dynamical input, but on a ciphertext which differs by 1 bit from the ciphertext of tables 3 and 4. Note that the single error propagates as decryption proceeds. If a sufficient number of encryption/decryption steps are used, then the single error will diffuse across the entire plaintext.

Table 6 is similar to table 5, though here encryption is shown in which a single error has been introduced into the plaintext. Note that, this error propagates across the ciphertext, albeit only to the left. Means to assure that errors propagate in both directions are discussed below.

Table 7 shows the difference produced when the encryption of tables 3 and 4 is performed on the same text with the same sequence of random numbers, but with a left-toggle cellular automaton rule which differs by one bit from that used in 3 and 4. This is this rule is known as rule 60 (table 2, column 5). Note that this minimal difference between keys produces differences throughout the ciphertext produced.

Note that if is the radius of the rules used, the size of the rule table is , the number of bits required to index into the rule table is , and the number of different number toggle rules (both left and right) is . For clarity, the example encryptions using the preferred embodiment are done using radius 1 rules. In practical situations radius 1 rules would not be used. There are only 32 radius 1 toggle rules. A code-breaker could easily try them all and hence decrypt the message by brute force. The situation at radius 2 is somewhat better; there are 131,072 radius 2 toggle rules. Still, especially since decryption with this invention is extremely fast, this number of rules could be searched rapidly in a brute-force attack. If self-synchronized key streams are used, so that keys are changed after each block encrypted, radius-2 rules may provide an acceptable level of security. At radius 3, there are approximately toggle rules, which should be enough for most applications. At radius 3, the number of keys is already 512 times greater than the number of keys in used the Data Encryption Standard.

In general, one would like a radius as large as possible given hardware limitations. There are two main hardware factors which could limit the radius of the rules used 1) address space size limitations connected with the number of bits each integer memory holds, and 2) memory size limitations connected with the memory required to hold the rule table.

Address Space.

An 16-bit processor such as used in personal computers has sufficient address space to use radius 7 rules, of which there are , roughly . A 32-bit processor, such as used workstations and some personal computers has sufficient address space to use radius 15 rules, of which there are .

Memory Size.

In most situations then, memory size, rather than address space is the most serious potential limitation. A standard 4-megabyte memory chip (such as those made by the Intel Corporation, for instance) holds bits of information, and could thus hold the rule table for a radius-12 rule. As there are radius-11 rules, this should be much more than sufficient for most applications. Still larger radius rules could be handled with an array of memory chips to hold the rule table.

 
Table: Encryption and Decryption of an example message between banks A and B. In this table the state of the processor array at each step of encryption/decryption is treated by the decoder 600 to allow for easy visualization. The plaintext, Y146, appears at line 0 of the encryption table and line 14 of the decryption table. The ciphertext, 8X.0X021.66$X, appears at line 14 of the encryption table , and line 0 of the decryption table.

 
Table: This table shows the same steps of encryption/decryption as table 3. Here, however, the actual state of the processor array is shown. The plain text is to be read left to right in groups of 4 bits, i.e. 1111='Y', 1000='1', 0000='0'. The right-most two entries in each line are the dynamical I/O.

 
Table: Propagation of a single error introduced into the ciphertext. ``_" = site same as with no error ``#"= site differs with error.

 
Table: Propagation of a single error introduced into the plain text. ``_" = site same as with no error ``#"= site differs with error.

 
Table: Difference pattern: encryption under rules 30 and 60, which are only 1-bit different from each other. The 1-bit error in the rule produces random changes throughout the ciphertext



next up previous contents
Next: Alternate Embodiments Up: Summary of the Previous: Introduction




Wed Nov 9 20:08:08 GMT 1994