home *** CD-ROM | disk | FTP | other *** search
-
-
- Data Encryption
- Fast & Secure
-
- ──────────────────────
- The algorithm for the Data Encryption
- Standard runs too slow on most micros, but
- simpler methods have not provided secure
- encryption. This program solves this
- problem by being both fast and secure.
- ──────────────────────
-
- by Harry J. Smith
-
- The Data Encryption Standard, DES (1), though normally considered
- a very secure form of encryption, has a very complicated algorithm
- (2) and runs very slow when implemented on a micro computer. The
- program CRYPT (3) as implemented on most systems that use the UNIX
- operating system is quite fast, but is not a very secure form of
- data encryption. The data encryption program CRYP presented here
- attempts to be even more secure than DES by using a larger and
- more random key, and at the same time is reasonably fast.
-
- The program TNT (4) is a good example of a data encryption method
- that has attempted to be both fast and secure but it too is about
- 10 to 20 times more complicated, as measured by program execution
- time, than the method presented here. This forces TNT to be
- written in assembly language to be practical. CRYP was written in
- a high order language and is about 4.5 times faster, exclusive of
- I/O time, than TNT written in assembly language.
-
- Another article (5) contained encryption programs that were fast
- and were written in a high order language, but they used the same
- encryption key over and over again for the same input key. If one
- enciphered message were ever compromised then any other message
- which used the same input key would no longer be secure with this
- method.
-
- Basic Method Used
- An alphanumeric key, input by the operator of the program, is
- converted into nine 16-bit seeds for nine different random number
- generators. The output of the nine generators are combined to
- generate a random sequence of bits of about 3.55 * 10**44 bits
- long (approximately 2**148 bits). This sequence of bits is then
- used as a pseudo infinite key and is exclusive-ORed with the bits
- of the data file to produce the data for the enciphered file.
-
- Processing the Key
- The characters of the key input by the operator are converted to
- a standard form containing only 63 different characters. Lower
- case letters are converted to upper case and control characters
- are converted to the special characters and the numbers. The space
- character is changed to a '/' so the standard form will never
- contain a space. This is done because it may be difficult on some
- systems to input a space character in an argument on the command
- line.
-
- A key of 24 characters is needed. If the input key is longer than
- 24 characters, it is hashed into a 24 character key. For the first
- 24 characters, each character is increased by the sum of all
- characters that precede it. For the 25 character on, each charac-
- ter is increased by the sum of all characters that follow it. Then
- characters in the same position modulo 24 are then added together
- to make the key 24 characters long. The summing of characters is
- done arithmetically modulo 256.
-
- If the key is shorter than 24 characters, trailing '/' are
- appended to make it 24 characters. The 24-character key is also
- converted to the standard form. Only the 6 least significant bits
- of each of the 24 key characters are used to generate the seeds
- for the random number generators.
-
- Continuation File
- In order to make this method an infinite key encryption system (4)
- a continuation file, CRY.CON, is maintained by the program. This
- file contains one record of 18 bytes from the random number
- generators. Each time a file is enciphered, the continuation file
- is read, its 18 bytes are exclusive-ORed with the 18 bytes of the
- bits from the encryption key to produce the starting seeds for the
- 9 random number generators. The continuation file is also output
- as the first 18 bytes of the enciphered file. After the input file
- is enciphered the continuation file is updated by reseeding the
- random number generators with the 18 bytes of the continuation
- file and the next 4096 bytes from the generators are stored in a
- pool of random numbers in reverse order. Each 16 bits stored is
- the sum of 9 random integers, one from each generator, truncated
- to the lower 16 bits. The first 18 bytes of this pool is then
- written to the continuation file.
-
- There is an option in CRYP to initialize the continuation file.
- When this option is selected the encryption key is used directly
- to seed the random number generators and 18 bytes output from the
- generators, as described above, are stored in the continuation
- file. The key used to initialize the continuation file should not
- be the same key used to encrypt data files.
-
- The use of the continuation file does not cause each file enci-
- phering to start up with the pseudo infinite key exactly where it
- left off, but causes it to start up at a random point in its
- extremely long periodic cycle. It is impractical to try to start
- up where the previous file left off because the pool of 2048
- random integers, described shortly, would have to be save and
- protected between runs. Starting up at a random point and reiniti-
- alizing the pool for each file is a better method.
-
- The Random Number Generators
- The nine random number generators were chosen very carefully and
- have been tested to ensure they each produce the proper number of
- random integers before they cycle and start reproducing the same
- sequence all over again. Four of the generators are Congruential
- generators (6) and five of them are Shift-register generators (7).
- This was done to prevent the problems that can arise when only one
- type of generator is used (7). The generators were chosen so their
- periods would be relatively prime to each other (65536, 65535,
- 65537, 65521, 65519, 65497, 65479, 65449 and 65447 respectively).
- This was done to produce a very long resulting period in the
- pseudo infinite key. The pseudo infinite key is generated in
- 16-bit increments by a combination of exclusive-ORing and arithme-
- tic addition of the output of the nine random number generators.
-
- The Pseudo Infinite Key
- After the seeds of the 9 generators are established, each genera-
- tor is called once and the sum of the 9 integers generated,
- truncated to 16 bits, is used to initialize rr, the running random
- integer. This rr is normally updated by adding, and truncating to
- 16 bits, the next output of the next generator, cycling the
- generators 0 through 8 and repeating. Thus, only one call to one
- generator is needed to get 16 more bits for the basic random bit
- sequence.
-
- Next the pool of 2048 random integers is initialized. This is done
- by storing consecutive values of rr generated as just described.
- After this rr is recomputed by calling each generator once and
- summing the 9 integers generated as before. This makes rr indepen-
- dent from any integer in the pool.
-
- Now we are ready to start generating bits of the pseudo infinite
- key. The next 16 bits of this key is always generated by:
-
- 1) Use the lower 11 bits of rr as a relative index into the pool.
-
- 2) Use the integer at this position in the pool as the next 16
- bits of the pseudo infinite key.
-
- 3) Update rr by adding the output of the next generator to rr and
- keep the lower 16 bits.
-
- 4) Replace the integer just used in the pool with the exclusive-OR
- of itself and rr (do not change rr).
-
- This process causes the pseudo infinite key to be a very compli-
- cated function of the output of the 9 random number generators,
- but is a simple process to program and execute.
-
- One criticism of this method might be that it is a substitution
- cipher only and that a combination of a transposition and substi-
- tution produces the strongest cipher schemes. The normal transpo-
- sition process is what makes the TNT program run so slow. In a
- sense CRYP does have a transposition process but it is a transpo-
- sition in the pseudo infinite key instead of in the text.
-
- Process Overview
- In order to understand the method better, outlines of the three
- options of the program are given:
-
- Encipher Process-
-
- 1) Process key from operator.
- 2) Read continuation file.
- 3) Copy continuation file to output file.
- 4) Initialize random number seeds.
- 5) Fill random number pool.
- 6) Read, encrypt, write input file to output file.
- 7) Restore random number seeds from continuation file.
- 8) Build and write random record to continuation file.
-
- Decipher Process-
-
- 1) Process key from operator.
- 2) Read first 18 bytes of input file.
- 3) Initialize random number seeds.
- 4) Fill random number pool.
- 5) Read, encrypt, write input file to output file.
-
- Initialize Continuation file-
-
- 1) Process key from operator.
- 2) Initialize random number seeds.
- 3) Build and write random record to continuation file.
-
- Timing Data
- A file of 128K bytes of all zeros was generated using DEBUG, and
- COPY in the following way:
-
- A:\>DEBUG
- -FCS:100,L,8000,0
- -RCX
- CX xxxx
- :8000
- -RBX
- BX xxxx
- :0
- -NA:Z
- -W
- Writing 08000 bytes
- -Q
-
- A:\>COPY /B Z+Z+Z+Z Z128K
- Z
- Z
- Z
- Z
- 1 File(s) copied
-
- This file was then enciphered on a hard disk drive in 6.2 seconds
- and then deciphered in 9.4 seconds. The system used was a 386 AT
- clone running MS DOS 3.3 at a clock rate of 8 MHz.
-
- Randomness Testing
- The 128k file of all zero described above was enciphered four
- different times and a Chi-square test applied to each enciphered
- file. The Chi-squared statistic generated was 232.8, 294.8, 304.5
- and 225.9. For a Chi-square test with 255 degrees of freedom as
- this test is, the Chi-square statistic has a median value of 254.3
- and should be between 200.6 and 316.9, 99% of the time and between
- 219.0 and 293.2, 90% of the time.
-
- Twenty-four Chi-square tests were run on other encipherings of the
- all zero file, taking 5120 byte blocks of data per test. The
- maximum Chi-square was 291.3, the minimum Chi-square was 198.8 and
- the average was 254.7. On these 24 runs the mean, second, third,
- and fourth moments of the distribution of the value of the bytes
- were also calculated with no significant deviation from their
- theoretical values.
-
- Operating the program
- This program is written in C and all operator input comes from the
- DOS command line. The format of the command to execute CRYP can be
- found by executing CRYP with no parameters. The output to the
- screen in this case is:
-
- CRYP - A data encryption system written in C, with pipes
- Version 6.00, 1992-11-15, 1400 hours
- Copyright (c) 1987-1992 by author: Harry J. Smith
-
- usage: CRYP key [D/I] [<infile] [>outfile]
- D = Decipher
- I = Init CRY.CON file using key and exit
- default = Encipher and update CRY.CON file
-
- The key parameter is a string of any length the system supports,
- but probably not more than 72 characters. If the key is the only
- parameter given, then the standard input is encrypted and output
- to the standard output. The [D/I] parameter is an optional field.
- When it is present and is the single character D or d the input is
- deciphered instead of enciphered. When the [D/I] parameter is the
- single character I or i the continuation file is initialized. The
- same key that is used to encipher a file must be used to decipher
- it, but should not be used to initialize the continuation file.
-
- A file can be enciphered twice with the same or different keys and
- then deciphered by deciphering twice using the keys in the reverse
- order. This double encryption is not recommended since CRYP is
- very secure with only one encryption.
-
- Choosing a key
- If you are serious about protecting the information contained in
- your file, the encryption key should be chosen carefully, and of
- course it also needs to be protected. A key of FEBRUARY is a poor
- choice because if a few characters can be determined the rest can
- be guessed. A short key such as ASDF is bad because if the key
- space is searched in lexicographic order the key will be found in
- less than 2**24 tries.
-
- A good scheme for choosing a key is to make up a phrase that makes
- no special sense but is at least 48 characters long. When this key
- is converted to the 24-character key the characters will look
- random. For example, the eight input keys:
-
- 1) YOU/SHOULD/MAKE/YOUR/KEYS/AT/LEAST/48/CHARACTERS
- 2) TRY/TO/MAKE/YOUR/KEYS/EASY/TO/REMEMBER/BUT/HARD/TO/BREAK
- 3) THE/WIND/BLOWS/THE/SNOW/FALLS/IT/WILL/NOT/BE/HOT
- 4) A/NEST/IS/A/HOME/IF/YOU/ARE/A/BIRD/BUT/I/LIKE/MINE
- 5) ROSE/HAS/HAD/TOO/MUCH/SAID/I/HAVE/NOTHING/TO/ADD
- 6) ROPE/IT/CAN/BE/LONG/IT/CAN/BE/SHORT/BUT/NOT/FOR/ME
- 7) EAGLE/WHAT/A/BIRD/IF/I/COULD/FLY/WOULD/BE/ONE/TOO
- 8) BOOK/READ/ONE/TO/ME/READ/ONE/MYSELF/BUT/NOT/TO/YOU
-
- produce the following eight 24-character keys:
-
- 1) B>DRQJM](YTR_2(4%36G3**1
- 2) U/1"@N)C422T+58;(>/9D2%"
- 3) IKOR]SRMH[PVAHHNGXXIR2!!
- 4) *J!!%88?I#)#<282,2/*P2
- 5) :@OEKD]OHK]S33:@!'M<55GD
- 6) Y:W-Z^#_ZLHCVY3+KKC>8F&7
- 7) $'99::+'/4,^XNSVXB\STXXG
- 8) ._*'14,4%ORZ0]\WWVLGJ[MB
-
- respectively. The long form of the key is easier to remember and
- easier to type, the short form is more random and harder to crack.
-
- How Secure is the Method?
- The search space is about 2**144 keys. An extremely powerful
- computer would be needed to search and find the key in a timely
- manner. If 10**14 processors could each test 10**14 different keys
- per second it would take about 10**7 years to find a randomly
- selected key.
-
- If there is a flaw in this method it would be that a chunk of the
- pseudo key, if it were exposed, could be used to determine the
- value of the seeds used to produce it. This seams totally impossi-
- ble because the process of generating the pseudo infinite key
- appears to be quite irreversible, but this is not proven. Thus, it
- is still necessary to change the input key periodically.
-
- Pascal version
- An interactive user interface version of this program, CRYU, was
- developed using TURBO Pascal. Tests were performed to insure that
- a file can be enciphered with one of the programs and then
- deciphered with the other program. The running time of the two
- programs are essentially the same.
-
- C Named files version
- A C version CRYN that uses files names on the command line instead
- of pipes was also developed. The format of the command to execute
- CRYN can be found by executing CRYN with no parameters. The output
- to the screen in this case is:
-
- CRYN - A data encryption system written in C, named files
- Version 6.00, 1992-11-15, 1400 hours
- Copyright (c) 1987-1992 by author: Harry J. Smith
-
- usage: CRYN key [infile outfile [D]]
- key only => Init CRY.CON file using key and exit
- no D => Encipher and update CRY.CON file
- D => Decipher
-
- In all versions of the of the program, if a key is given which is
- a file name, then the first line of the file is used as the key.
-
- Notes
- 1. Data Encryption Standard, U. S. Department of Commerce,
- National Bureau of standards, FIPS Publication 46, 1977 January
- 15.
- 2. Katzan, H. The Standard Data Encryption Algorithm. New York:
- Petrocelli Books, 1977.
- 3. Kernighan, B., and Plauger, P. Software Tools. Reading, Mass.:
- Addison-Wesley, 1976.
- 4. Thomas, J., and Thersites, J. "Designing a File Encryption
- System", Dr.Dobb's Journal (August 1984): 44-53.
- 5.Scacchitti, F. E., "The Cryptographer's Toolbox", Dr. Dobb's
- Journal (May 1986): 58-64.
- 6. Knuth, D. E. The Art of Computer Programming, vol. 2, Seminu-
- merical Algorithms. Reading, Mass.: Addison-Wesley, 1968.
- 7. Ralston, A. Encyclopedia of Computer Science, First Edition,
- "Random Number Generation", New York: Van Nostrand Reinhold, 1976.
- 8. Stout, R. B., "S-CODER for Data Encryption" Dr. Dobb's Journal
- (Jan 1990): 52-58.
-
- Harry J. Smith
- 19628 Via Monte Dr.
- Saratoga, CA 95070
- (408) 741-0406