home *** CD-ROM | disk | FTP | other *** search
/ Boldly Go Collection / version40.iso / TS / 17A / DES_DOCS.ZIP / THEORY.TXT
Text File  |  1991-05-21  |  72KB  |  1,466 lines

  1. John A. Thomas
  2. CompuServe: 75236,3536
  3. 101 N.W. Eighth St.
  4. Grand Prairie, TX 75050
  5.  
  6.  
  7.         SURVEY OF DATA ENCRYPTION
  8.             By John A. Thomas
  9.  
  10.  
  11. Introduction
  12. ------------
  13.  
  14.         The following article is a survey of data encryption.
  15. It is intended to provoke discussion among the members of this
  16. forum and perhaps lead to a creative exchange of ideas.
  17. Although the basics of the subject seem to be known to few
  18. programmers, it embraces many interesting and challenging
  19. programming problems, ranging from the optimization of machine
  20. code for maximum throughput to the integration of encryption
  21. routines into editors, communications packages, and perhaps
  22. products as yet not invented.   Governments have dominated this
  23. technology up until the last few years, but now the need for
  24. privacy and secrecy in the affairs of a computer-using public
  25. has made it essential that programmers understand and apply
  26. the fundamentals of data encryption.
  27.  
  28. Some Cryptographic Basics 
  29. -------------------------
  30.  
  31.         A few definitions are appropriate first.  We use the
  32. term "encryption" to refer to the general process of making
  33. plain information secret and making secret information plain.
  34. To "encipher" a file is to transform the information in the file
  35. so that it is no longer directly intelligible.  The file is then
  36. said to be in "ciphertext".  To "decipher" a file is to
  37. transform it so that it is directly intelligible; that is, to
  38. recover the "plaintext." 
  39.  
  40.         The two general devices of encryption are "ciphers" and
  41. "codes".  A cipher works on the individual letters of an
  42. alphabet, while a code operates on some higher semantic level,
  43. such as whole words or phrases.  Cipher systems may work by
  44. transposition (shuffling the characters in a message into some
  45. new order), or by substitution (exchanging each character in the
  46. message for a different character according to some rule), or a
  47. combination of both.  In modern usage, transposition is often
  48. called "permutation".  A cipher which employs both transposition
  49. and substitution is called a "product" cipher.  In general,
  50. product ciphers are stronger than those using transposition or
  51. substitution alone.  Shannon referred to substitution as
  52. "confusion", because the output is a non-linear function of the
  53. input, thus creating confusion as to the set of input
  54. characters.  He referred to transposition as "diffusion" because
  55. it spreads the dependence of the output from a small number of
  56. input positions to a larger number.
  57.  
  58.         Every encryption system has two essential parts: an algorithm
  59. for enciphering and deciphering, and a "key", which consists of
  60. information to be combined with the plaintext according to the
  61. dictates of the algorithm.  In any modern encryption system, the
  62. algorithm is assumed to be known to an opponent, and the security of
  63. the system rests entirely in the secrecy of the key. 
  64.  
  65.         Our goal is to translate the language of the plaintext to a
  66. new "language" which cannot convey meaning without the additional
  67. information in the key.  Those familiar with the concept of
  68. "entropy" in physics may be surprised to learn that it is also
  69. useful in information theory and cryptography.  Entropy is a
  70. measure of the amount of disorder in a physical system, or the
  71. relative absence of information in a communication system.  A
  72. natural language such as English has a low entropy because of
  73. its redundancies and statistical regularities. Even if many of
  74. the characters in a sentence are missing or garbled, we can
  75. usually make a good guess as to its meaning.  Conversely, we
  76. want the language of our ciphertext to have as high an entropy
  77. as possible; ideally, it should be utterly random. Our guiding
  78. principle is that we must increase the uncertainty of the
  79. cryptanalyst as much as possible. His uncertainty should be so
  80. great that he cannot make any meaningful statement about the
  81. plaintext after examining the ciphertext; also, he must be just
  82. as uncertain about the key, even if he has the plaintext itself
  83. and the corresponding ciphertext (In practice, it is impossible
  84. to keep all plaintext out of his hands).
  85.  
  86.         A prime consideration in the security of an encryption
  87. system is the length of the key. If a short key (i.e., short
  88. compared with the length of the plaintext) is used, then the
  89. statistical properties of the language will begin to "show
  90. through" in the ciphertext as the key is used over and over, and
  91. a cryptanalyst will be able to derive the key if he has enough
  92. ciphertext to work with.  On the other hand, we want a
  93. relatively short key, so that it can be easily stored or even
  94. remembered by a human.  The government or a large corporation
  95. may have the means to generate and store long binary keys, but
  96. we cannot assume that the personal computer user will be able to
  97. do so. 
  98.  
  99.         The other important fact about the keys is that there must be
  100. very many of them. If our system allows only 10,000 different keys,
  101. for example, it is not secure, because our opponent could try every
  102. possible key in a reasonable amount of time.  This introduces
  103. the concept of the "work factor" required to break an encryption
  104. system.  We may not have a system unbreakable in principle, but
  105. if we can make the work factor for breaking so high it is not
  106. practical for our opponent to do so, then it is irrelevant that the
  107. system may be less strong than the ideal.  What constitutes an
  108. adequate work factor depends essentially on the number of
  109. uncertainties the cryptanalyst must resolve before he can derive
  110. plaintext or a key. In these days of constantly improving computers,
  111. that number should probably exceed 2**128. It is easy to quantify the
  112. work factor if we are talking about exhaustive key trial, but few
  113. modern ciphers are likely to be broken by key trial, since it is too
  114. easy to make the key space very large. Most likely they will be
  115. broken because of internal periodicities and subtle dependency of
  116. output on input which give the cryptanalyst enough information to
  117. reduce his uncertainty by orders of magnitude.
  118.  
  119.         A corollary to work factor is the rule that a system need
  120. only be strong enough to protect the information for however
  121. long it has value.  If a system can be broken in a week, but
  122. not sooner, then it may be good enough, if the information has
  123. no value to an opponent after a week.
  124.  
  125.  
  126. Cryptanalysis
  127. -------------
  128.  
  129.         Cryptanalysis is the science of deriving plaintext
  130. without the key information.  Anyone intending to design an
  131. encryption system must acquaint himself to some degree with
  132. cryptanalytic methods.  The methods of attack may range from
  133. sophisticated statistical analysis of ciphertext to breaking
  134. into the opponent's office and stealing his keys ("practical
  135. cryptanalysis").  There are no rules of fair play.   The
  136. cryptanalyist is free to use his puzzle-solving ingenuity
  137. to the utmost, even to the point of applying the knowledge that
  138. your dog's name is "Pascal", and that you might be lazy enough
  139. to use that as your key for the day.
  140.  
  141.         The cryptanalyst may have only ciphertext to work with,
  142. or he may have both ciphertext and the corresponding plaintext,
  143. or he may be able to obtain the encipherment of chosen
  144. plaintext.  Some cryptographic systems are fairly strong if the
  145. analyst is limited to ciphertext, but fail completely if he has
  146. corresponding plaintext.  Your system should be strong enough to
  147. resist attack even if your opponent has both plaintext and
  148. ciphertext.
  149.  
  150.         Computer power can greatly aid cryptanalysis, but
  151. many systems that appear strong can be broken with pencil-and-
  152. paper methods.  For example, the Vigenere family of
  153. polyalphabetic ciphers was generally believed to be unbreakable
  154. up until the late nineteenth century. A polyalphabetic cipher is
  155. a substitution cipher in which a different alphabet is used for
  156. each character of plaintext.  In these systems, the key
  157. determines the order of the substitution alphabets, and the
  158. cycle repeats with a period equal to the length of the key. This
  159. periodicity is a fatal weakness, since fairly often a repeated
  160. letter or word of plaintext will be enciphered with the same key
  161. letters, giving identical blocks of ciphertext.  This exposes
  162. the length of the key.  Once we have the length of the key, we
  163. use the known letter frequencies of the language to gradually
  164. build and test hypotheses about the key.  Vigenere ciphers can
  165. be easily implemented on computers, but they are worthless
  166. today.  A designer without knowledge of cryptanalysis however,
  167. might be just as ignorant of this fact as his colleagues of
  168. the last century.  Please see the references at the end of
  169. this article for information on cryptanalytic technique.
  170.  
  171. A Survey of Cryptographic systems
  172. ---------------------------------
  173.  
  174.         We now review some representative encryption schemes,
  175. starting with traditional ones and proceeding to the systems
  176. which are only feasible to implement on computers.
  177.  
  178.         The infinite-key cipher, also known as the "one time
  179. pad," is simple in concept. We first generate a key which
  180. is random and at least the same length as our message.  Then,
  181. for each character of plaintext, we add the corresponding
  182. character of the key, to give the ciphertext.  By "addition," we
  183. mean some reversible operation; the usual choice is the
  184. exclusive-or. A little reflection will show that given a random
  185. key at least the size of the plaintext (i.e., "infinite" with
  186. respect to the plaintext because it is never repeated), then the
  187. resulting cipher is unbreakable, even in principle.  This scheme
  188. is in use today for the most secret government communications,
  189. but it presents a serious practical problem with its requirement
  190. for a long random key for each message and the need to somehow
  191. send the lengthy key to the recipient. Thus the ideal infinite
  192. key system is not practical for large volumes of message
  193. traffic.  It is certainly not practical for file encryption on
  194. computers, since where would the key be stored?  Be wary of
  195. schemes which use software random-number generators to supply
  196. the "infinite" key.  Typical random-number algorithms use the
  197. preceeding random number to generate the succeeding number, and
  198. can thus be solved if only one number in the sequence is found.
  199.  
  200.         Some ciphers have been built to approximate the
  201. infinite-key system by expanding a short key.  The Vernam system
  202. for telegraph transmission used long paper tapes containing
  203. random binary digits (Baudot code, actually) which were
  204. exclusively-or'ed with the message digits.  To achieve a long
  205. key stream, Vernam and others used two or more key tapes of
  206. relatively prime lengths, giving a composite key equal to their
  207. product.  The system is still not ideal, since eventually the
  208. key stream will repeat, allowing the analyst to derive the
  209. length and composition of the keys, given enough ciphertext.
  210. There are other ways to approach the infinite-key ideal, some of
  211. which are suggested in the author's article (with Joan
  212. Thersites) in the August '84 issue of DDJ.
  213.  
  214.         The "rotor" systems take their name from the
  215. electromechanical devices of World War II, the best known being
  216. perhaps the German ENIGMA.  The rotors are wheels with
  217. characters inscribed on their edges, and with electrical
  218. contacts corresponding to the letters on both sides.  A
  219. plaintext letter enters on one side of the rotor and is mapped
  220. to a different letter on the other side before passing to
  221. the next rotor, and so on. All of the rotors (and there may be
  222. few or many) are then stepped, so that the next substitution is
  223. different.  The key is the arrangement and initial setting of
  224. the rotor disks. These devices are easy to implement in software
  225. and are fairly strong. They can be broken however; the British
  226. solution of the ENIGMA is an interesting story outside the
  227. scope of this note.  If you implement a rotor system, consider
  228. having it operate on bits or nybbles instead of bytes, consider
  229. adding permutation stages, and consider how you are going to
  230. generate the rotor tables, since you must assume these will
  231. become known to an opponent.
  232.  
  233.         In 1977 the National Bureau of Standards promulgated the
  234. Data Encryption Standard (DES) as the encryption system to be
  235. used by all federal agencies (except for those enciphering data
  236. classified under any of the national security acts).  The
  237. standard is available in a government publication and also in a
  238. number of books.  The DES was intended to be implemented only in
  239. hardware, probably because its designers did not want users to
  240. make changes to its internal tables.  However, DES has been
  241. implemented in software and is available in several
  242. microcomputer products (such as Borland's Superkey or IBM's
  243. Data Encoder).
  244.  
  245.         The DES is a product cipher using 16 stages of
  246. permutation and substitution on blocks of 64 bits each. The
  247. permutation tables are fixed, and the substitutions are
  248. determined by bits from a 56-bit key and the message block.
  249. This short key has caused some experts to question the security
  250. of DES. Controversy also exists regarding the involvement of the
  251. NSA in parts of the DES design.  The issues are interesting, but
  252. beyond the scope of this note.
  253.  
  254.         Since DES was intended for hardware implementation, it
  255. is relatively slow in software.  Software implementations of DES
  256. are challenging because of the bit-manipulation required in the
  257. key scheduling and permutation routines of the algorithm.  Some
  258. implementations gain speed at the expense of code size by using
  259. large pre-computed tables.
  260.  
  261.         The public key cipher is an interesting new development
  262. which shows potential for making other encryption systems
  263. obsolete. It takes its name from the fact that the key
  264. information is divided into two parts, one of which can be made
  265. public. A person with the public key can encipher messages, but
  266. only one with the private key can decipher them. All of the
  267. public key systems rely on the existence of certain functions
  268. for which the inverse is very difficult to compute without the
  269. information in the private key. These schemes do not appear to
  270. be practical for microcomputers if their strength is fully
  271. exploited, at least for eight-bit machines.  One variety of
  272. public key system (the "knap-sack") has been broken by solution
  273. of its enciphering function, but this is no reflection on other
  274. systems, such as the RSA scheme, which use different enciphering
  275. functions.  All public-key systems proposed to date require
  276. heavy computation, such as the exponentiation and division of
  277. very large numbers (200 decimal digits for the RSA scheme).  On
  278. the other hand, a public-key system that worked at only 10
  279. bytes/sec might be useful if all we are sending are the keys for
  280. some other system, such as the DES.
  281.  
  282.  
  283. Some random thoughts
  284. --------------------
  285.  
  286.         To wrap up this too-lengthy exposition, I append a few
  287. questions for the readers:
  288.  
  289.         Must we operate on blocks instead of bytes?  Block
  290. ciphers seem stronger, since they allow for permutation.  On the
  291. other hand, they make life difficult when file size is not
  292. an integral multiple of the block size.
  293.  
  294.         Can we make a file encryption system OS-independent?
  295. This is related to the question above on blocks vs bits.  How do
  296. we define the end-of-file if the plaintext is ascii and the
  297. ciphertext can be any 8-bit value?
  298.  
  299.         Can we find an efficient way to generate and store a
  300. random key for the infinite-key system?  Hardware random-number
  301. generators are not hard to build, but would they be of any use?
  302.  
  303.         Bit-fiddling is expensive.  Can it be avoided and still
  304. leave a secure system?  What are the relative costs of
  305. manipulating bits on the Z80 vs the 68000, for example?
  306.  
  307.         No file-encryption system can erase a file logically and
  308. be considered secure.  The information can be recovered until it
  309. is overwritten.  Overwriting files adds to processing time.  I
  310. am informed that it is possible to reliably extract information
  311. even from sectors that HAVE been overwritten.  Is this so?
  312. If it is, what is the solution?
  313.  
  314.         How do we integrate encryption systems into different
  315. tools?  Should a telecommunications program transparently
  316. encrypt data if the correspondent is compatible?  What about an
  317. editor-encryption system wherein plaintext would never exist on
  318. the disk, only on the screen?  How would we manage to
  319. encipher/decipher text as we scroll through it and make changes,
  320. and still get acceptable performance?
  321.  
  322.         By their nature, encryption schemes are difficult to
  323. test.  In practice, we can only have confidence that a system is
  324. strong after it has been subjected to repeated attack and
  325. remained unbroken.  What test might we subject a system to that
  326. would increase our confidence in it?
  327.  
  328.  
  329. References
  330. ----------
  331.  
  332. Here are a few useful books and articles.  This is by no means
  333. a complete bibliography of the subject:
  334.  
  335. Kahn, David.  "The Code Breakers".  The basic reference for the
  336.         history of cryptography and cryptanalysis.  Use it to
  337.         learn where others have gone wrong.
  338.  
  339. Konheim, Alan G.  "Cryptography, A Primer".  Survey of
  340.         cryptographic systems from a mathematical perspective.
  341.         Discusses rotor systems and the DES in great detail.
  342.  
  343. Sinkov, Abraham.  "Elementary Cryptanalysis".  Very basic, but
  344.         very useful, introduction to the mathematical concepts
  345.         of cryptanalysis.
  346.  
  347. Foster, Caxton C.  "Cryptanalysis for Microcomputers".  Covers
  348.         the cryptanalysis of simple systems, but still a good
  349.         introduction to cryptanalytic technique.  Describes the
  350.         operation of many traditional systems in detail.
  351.  
  352. Shannon, Claude.  "Communication Theory of Secrecy Systems".
  353.         Bell System Technical Journal (October 1949) : 656-715.
  354.         Discusses secrecy systems from viewpoint of information
  355.         theory.  No practical tips, but useful orientation.
  356.  
  357. Rivest, R. et al. "A method for Obtaining Digital Signatures and
  358.         Public Key Cryptosystems".  Comm. of the ACM, Vol. 21,
  359.         No. 2, (February 1978) : 120-126.  This article
  360.         describes what has come to be known as the RSA
  361.         public-key system.
  362.  
  363. "Data Encryption Standard", Federal Information Processing
  364.         Standard (FIPS), Publication No. 46, National Bureau of
  365.         Standards, U.S. Dept. of Commerce, January, 1977.
  366.  
  367. ---
  368.  
  369. To start off, I'll discuss some *good* points of the Data Encryption
  370. Standard promulgated by the federal government (DES).  We all know the key is
  371. too small - the NSA almost certainly has the means to exhaust it.  But it
  372. would be a pity not to examine the DES just for that reason.  It uses a
  373. brilliant cryptographic technique that once understood can be used by us in
  374. families of other crypto-systems, with much larger keys.
  375.  
  376. The DES shows us how to use one-way functions in cryptography.  At first
  377. sight, a one-way function would seem to be useless - if we encrypt 'A' and get
  378. 'R', we have to be able to decrypt 'R' and get back 'A'.  However, a one-way
  379. function, if it could be used, allows very complex transformations of text
  380. that are practically impossible to undo without knowledge of the key.
  381. However, the DES is as complicated as it is complex, so for a beginning I'm
  382. going to explain how to use a one-way function cryptographically without
  383. reference to the DES.  If there's enough interest, we can later relate this to
  384. the DES.
  385.  
  386. Perhaps the simplest way to define a one-way function is with a table, such
  387. as:
  388.  
  389.              0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
  390.             -----------------------------------------------
  391.             14 05 01 14 10 04 08 00 03 02 15 08 09 11 07 15
  392.  
  393. The top numbers are indexes into the one-way table.  Given an index, you can
  394. get a value by table look up, but given a table value there's no guarantee
  395. you'll get the index you started with because both 0 and 3 map to 14, 6 and 11
  396. map to 8, and so on.  BTW, the table values were generated by a random
  397. process.
  398.  
  399. Now, let's use this cryptographically.  Take an ASCII letter, say 'a' and
  400. split it into two nibbles, left and right
  401.  
  402.                        LEFT  RIGHT
  403.                 61h ->  6      1
  404.  
  405. The DES trick is to use one half as an argument of a one-way function to
  406. obtain a value with which to encrypt the other half, so let's do it.  Using
  407. RIGHT as the index into the table, we obtain the value 5.  Now, we need a
  408. primitive encryption function that is, and must be, invertible.  The DES uses
  409. XOR, but we will use ADD, and add 5 to LEFT, mod 16, obtaining 11.  We have
  410.  
  411.                        LEFT  RIGHT
  412.                         11     1
  413.  
  414. This encrypts LEFT.  Notice that even though we used a one-way function, the
  415. encryption is completely reversible for two reasons.  First, RIGHT, the
  416. argument of the table lookup is unchanged, so getting the correct value from
  417. the table for decryption is assured.  Second, the encryption primitive is
  418. invertible; we need only to subtract the table value mod 16 from encrypted
  419. left.
  420.  
  421. But there seems to be a problem.  RIGHT isn't encrypted, and if that's how we
  422. left matters, we wouldn't have much of a cipher.  The answer suggests itself -
  423. use the new value of LEFT in the same way to encrypt RIGHT.  Let's do it.
  424. Using 11 as an index into the table gives us 8, which we add to RIGHT giving
  425.  
  426.                        LEFT  RIGHT
  427.                         11     9
  428.  
  429. which on the IBM PC is a funny graphics character.  Now, is this reversible?
  430. Of course it is, the argument into the table that encrypted RIGHT is
  431. completely unchanged, and if used we get 8 which we subtract from 9 giving 1.
  432. And we have already shown that 11  1 will undo properly to give us 6 1.
  433.  
  434. So far, we have nothing but a curious simple substitution cipher.  Repeating
  435. the process isn't encouraging either.  It clearly must cycle if we continue
  436. to alternately encrypt LEFT and RIGHT, using the values from the previous
  437. encryption as input.  In fact, there are a number of cycles of different
  438. lengths, but it's interesting that some cycles don't cycle back to the
  439. starting value.  For example, starting with 01, we get 01, 55, 99, BB, 33,
  440. EE, 55...  The reason is that our table is not a permutation of the integers
  441. 0 through 15.
  442.  
  443. To make our sample cipher more than a curiosity, we shall do what the DES
  444. does, use another one-way function (that is, a table) in a second *round*, and
  445. repeat this process with the new table.
  446.  
  447.              0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
  448.             -----------------------------------------------
  449.             04 13 12 06 13 07 03 15 13 15 06 09 09 09 07 10 07
  450.  
  451.                        LEFT  RIGHT
  452.                         11     9 -> 15 + 11 = 6
  453.         11 = 9 + 3  <-   6     9
  454.                          6    11
  455.  
  456. This is already a considerably more complex cipher.  It is still reversible,
  457. but we must remember to *decrypt* it starting with the last table, not the
  458. first.  This cipher, like the DES, is sensitive to direction, encrypt or
  459. decrypt.
  460.  
  461. It still is a simple substitution cipher with no strength.  You will notice
  462. however, that the length of the second table is one more than that of the
  463. first.  Obviously, I intend to rotate both tables one position before
  464. encrypting the next letter of a message.  Since the lengths are relatively
  465. prime, I can encipher 16x17=272 letters before my tables repeat.  This is no
  466. longer a simple substitution cipher, but one far more complex.  Still not good
  467. enough by far.  But if I had only one message not too long to protect, this
  468. would be practically unbreakable.  It might be good for hundreds of letters
  469. before repetitions would enable cryptanalysis.
  470.  
  471. Of course, it isn't strong enough to protect against an attack based on known
  472. plaintext.  With enough known plaintext, both tables can be reconstructed.  If
  473. the DES used only two rounds, it too could be cryptanalyzed.  It can be broken
  474. because with only two rounds, there aren't enough addends for known input and
  475. output that the addends can't be exhausted.  Several more rounds are necessary
  476. to make exhaustion of possible addends impractical.  It is quite important in
  477. designing a crypto-system that you design it against *known* plaintext.  In
  478. practice, it is impossible to prevent known plaintext from falling into the
  479. cryptanalyst's hands.
  480.  
  481. Later, I will develop this sample into a very tough cipher indeed, though I
  482. won't make any claims for its ultimate strength (I haven't examined it that
  483. well yet).  But for now, let's sum up what we have done.
  484.  
  485. 1. We used a one-way function for a crypto-system.  To give credit where it is
  486. due, this technique was invented by Horst Feistel of IBM, originally for the
  487. Lucifer.  It is in my opinion an absolutely brilliant cryptographic
  488. innovation.  The technique is fundamental to the DES.
  489.  
  490. 2. We cascaded one-way functions for complexity.  The DES uses cascading
  491. similarly for strength.
  492.  
  493. 3. Unlike the DES, we have developed the germ of a byte cipher, rather than a
  494. block cipher.  Very great complexity may be had with a block cipher, but there
  495. is still doubt that block ciphers are 'better'.
  496.  
  497. It is the trick of alternately enciphering 'left' and 'right' that permits the
  498. use of a one-way function.  In practice, it is easier to swap or exchange
  499. right and left after each round.  That is, we use RIGHT to encrypt LEFT, then
  500. exchange RIGHT and LEFT, and repeat encryption for the next round.  This
  501. simplifies code and circuitry, though it may confuse us as we try to follow
  502. what happens in the DES.  Therefore, to avoid confusion, we will always keep
  503. RIGHT right, and LEFT left.
  504.  
  505. ---
  506.  
  507. To begin, we shall consider the DES encipherment a little abstractly, then
  508. later in more detail.
  509.  
  510. The heart of the DES one-way function consists of the eight S-boxes, each
  511. of which transforms six bits of the input to four bits of output.  We
  512. can understand the function of the S-boxes better if we first consider
  513. the transformation they effect as they act in concert upon the entire
  514. input block of 48 bits.  Imagine one table consisting of 2^48 numbers of 32
  515. bits each. Each 32 bit number is repeated 65,536 times, in a more or less
  516. random order. Also imagine a 'letter', not of one byte, but of 64 bits divided
  517. into a LEFT of 32 bits and a RIGHT of 32 bits.  RIGHT is combined with 48 key
  518. bits selected out of 56 in a way that will be described later, without,
  519. however, changing RIGHT, and this combined value is used as an argument into
  520. the huge table to return a pseudo-random 32 bit value.  This returned value is
  521. XORed with LEFT to encrypt LEFT.  The same table lookup is repeated in the next
  522. round using LEFT as the argument and encrypting RIGHT.  Except that a different
  523. arrangement of 48 key bits out of the 56 is used.  The DES repeats this process
  524. 16 times, that is, encrypts RIGHT eight times, and LEFT eight times.  There is
  525. a reason for eight that we will discuss later.  Each iteration is called a
  526. 'round'. 
  527.  
  528. It is clear that this huge table is a one-way function, and that the
  529. encryption technique is almost exactly what we described for the byte cipher
  530. discussed in the previous upload.  There is an important difference - we are
  531. now using a key in addition to a table.  In our byte cipher, the key is the
  532. table itself. Also, the DES uses a different permutation of the original key
  533. for every round in a clever way that ensures that every bit of final
  534. ciphertext depends complexly on every bit of the key.  This is important.
  535. A sure-fire cryptanalytic technique is to suppose a few key bits - not
  536. too many possibilities to exhaust - then to test the supposition against
  537. sample ciphertext compared with known plaintext. In this way, although a key
  538. space may be too large to exhaust by brute force, the key is gradually
  539. recovered.  A good example is the simple substitution where the key space is
  540. 26!  (about 2^88). But, by forcing all ciphertext bits to depend on all key
  541. bits, this sure-fire attack is inhibited if not made impossible.  You can't
  542. solve for a few key bits, you have to solve for all or none.
  543.  
  544. Why a key?  The chief reason is that the one-way table is published.  It is no
  545. secret as we suppose our byte cipher's tables are.  And, to be a standard,
  546. we aren't supposed to change the DES tables.  Further, the tables are not
  547. random; the inventors state that the DES's particular tables have been worked
  548. out for cryptographic strength, and that to their own surprise discovered that
  549. random tables, which they had naively believed to be sufficient, aren't so
  550. good.  And, nobody will say what criterion should be used to design DES
  551. tables, and nobody has figured them out (at least, not publicly).  Naturally,
  552. this has bred suspicion, and the fact that the NSA helped design the tables
  553. hasn't helped.  Later, I would like to offer my own speculation on what this
  554. criterion might be.  To summarize, the key serves as the secret ingredient
  555. because the tables can't be secret.
  556.  
  557. Obviously, a table of this size is a practical impossibility.  So, how does
  558. the DES achieve a 'virtual' table of this size?  Basically, nibble by nibble.
  559. It uses the nibbles of RIGHT, in order, as indexes into relatively small
  560. matrixes to get eight encryption values per round.  But the encryption values
  561. don't encrypt the corresponding nibbles of LEFT.  Oh no, that would be fatally
  562. simple.  Each result nibble of the one-way lookup encrypts scattered bits of
  563. LEFT so that each bit of the value impacts the most nibbles possible in LEFT.
  564. Now, when LEFT becomes the argument, the nibble values returned from the table
  565. have dependencies on many bits of RIGHT.  Within five rounds, all ciphertext
  566. bits become complex dependents of all plaintext bits and all key bits.  The
  567. dependency is extremely violent.  Believe me, a single bit of difference in
  568. either plaintext or key gives you an unrecognizably different ciphertext.
  569.  
  570. We should be ready now to see how a nibble of RIGHT (actually, three will be
  571. involved), and some key bits, are used as table arguments, and how this
  572. encrypts four bits of LEFT in a single round.  Let's ignore how the different
  573. permutations of the key bits are generated for now.  Just imagine there are
  574. somehow six key bits.  The first nibble one-way function is this matrix:
  575.  
  576.                             Box S1
  577.             0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
  578.           |-----------------------------------------------
  579.         0 |14  4 13  1  2 15 11  8  3 10  6 12  5  9  0  7
  580.         1 | 0 15  7  4 14  2 13  1 10  6 12 11  9  5  3  8
  581.         2 | 4  1 14  8 13  6  2 11 15 12  9  7  3 10  5  0
  582.         3 |15 12  8  2  4  9  1  7  5 11  3 14 10  0  6 13
  583.  
  584. Recall that the input block of 32 bits is first expanded to 48 bits by
  585. the "selection operation".  If you consult this table in the standard,
  586. you will see that the first six bits of the result are the first RIGHT
  587. nibble, plus the last bit of RIGHT, plus the first bit of the next nibble
  588. to form six bits:
  589.  
  590.                 32  1  2  3  4  5
  591.  
  592. This is one argument into the one-way function.  Also, six bits of the key are
  593. an argument, and the six key bits and these RIGHT bits are XORed to form the
  594. actual table argument. The first and last bits of this XOR-result index the row
  595. of the S1 box.  The middle four bits index the column.  The intersection of row
  596. and column gives us a four-bit value, which, after passing through the
  597. permutation operation P, is used to encrypt LEFT bits 9 17 23 and 31.
  598.  
  599. This is surely one-way.  You can't determine the row and column indexes from
  600. the table value because there are four row and column indexes that map to the
  601. same value.  It should also be clear that LEFT bits 9 17 23 31 are decryptable
  602. because RIGHT was never changed.  We have only to combine the appropriate key
  603. bits with RIGHT's 32 1 2 3 4 5, and we'll get the same value out of the S box,
  604. which, XORed with LEFT, will yield our original 9 17 23 and 31.
  605.  
  606. Notice the scatter.  By encrypting these particular bits, we are encrypting
  607. the 3rd, 5th, 6th, and 8th nibbles which will be immediately used in the next
  608. round as arguments.  Because of their positions, they will form part of the
  609. 2nd, 3rd, 4th, 5th, 6th, and 8th nibble arguments of the future LEFT.  And
  610. thus, when RIGHT gets encrypted, its old first nibble will be quite
  611. spread out.  The scatter makes far more bits dependent on very few bits than
  612. is at first apparent.  The only unaffected nibbles are the 1st and 7th, but
  613. this is only one round, and we tracked only one nibble of RIGHT.
  614.  
  615. This is getting lengthy, so let me list the RIGHT bit arguments corresponding
  616. to the eight S boxes and the LEFT bits that get encrypted
  617.  
  618.           RIGHT bits         box         LEFT bits
  619.       32  1  2  3  4  5 ----> S1 ---->  9 17 23 31
  620.        4  5  6  7  8  9 ----> S2 ----> 13 28  2 18
  621.        8  9 10 11 12 13 ----> S3 ----> 24 16 30  6
  622.       12 13 14 15 16 17 ----> S4 ----> 26 20 10  1
  623.       16 17 18 19 20 21 ----> S5 ---->  8 14 25  3
  624.       20 21 22 23 24 25 ----> S6 ---->  4 29 11 19
  625.       24 25 26 27 28 29 ----> S7 ----> 32 12 22  7
  626.       28 29 30 31 32  1 ----> S8 ---->  5 27 15 21
  627.  
  628. In this manner, a nibble by nibble encryption is spread out so that a virtual
  629. table of 2^48 elements is achieved.  Note that we have not really considered
  630. the key yet.  And note that I have shown the contents of only one box.  The
  631. boxes are listed in FIPS Pub 46, which you should use if you ever implement
  632. the DES, because other sources usually have typos, the slightest of which is
  633. fatal.
  634.  
  635. Also, pay attention to how RIGHT's bits are expanded to 48.  The last bit of
  636. the previous nibble plus the first bit of the next are tacked onto each nibble
  637. of the argument fore and aft.  This builds an inter-nibble dependency into the
  638. DES.  Even more important, one encrypting bit from the table can do a lot of
  639. 'damage'.  Look at the nibble value coming out of the second S-box; its first
  640. bit will encrypt the 13th bit of LEFT.  But look where the 13th bit occurs in
  641. expanded RIGHT!  The result of this encryption is that when LEFT becomes the
  642. table argument, the third and fourth table nibbles are dependent on just one
  643. bit.  As a matter of fact, the value out of any S-box encrypts exactly two
  644. nibble boundary bits and two nibble inner bits.
  645.  
  646. We saw how the DES uses one-way functions, each specific to a nibble, and how
  647. the results of the one-way functions are carefully scattered.  The purpose of
  648. the scattering is to build up complex dependencies for the final result on all
  649. bits of message and key as fast as possible.  The scatter is achieved by a
  650. permutation, called P, that the standard describes as occurring after
  651. gathering the eight table values.  For software implementation, there is a
  652. great savings in speed by replacing all S-box values with 32-bit entries
  653. pre-permuted by the inverse of P - that is, by the encrypting bit positions
  654. we already listed, and doing away with P entirely.
  655.  
  656. To illustrate, the first value of the first S-box is 14, in binary, 1 1 1 0.
  657. Therefore, to do away with P, we replace this value with its equivalent
  658.  
  659.                    1                   2                   3
  660.  1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
  661.  ---------------------------------------------------------------
  662.  0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
  663.                  1               1           1               0
  664.  
  665. The gain in speed can't be overemphasized.  There are more implementation
  666. tricks like this that hopefully we can get into later.  On an 8088, at 4.77
  667. mHz, encryption speeds of 2500 bytes/sec are possible in pure software.  On a
  668. 68000, we think that software speeds of 6000, or better, bytes/sec are
  669. achievable.  Perhaps even as high as 8000.  The important lesson is that you
  670. don't have to code in the dumb plodding way the standard implies.  It seems
  671. that the standard was written to be as uninstructive as possible.
  672.  
  673. We should now discuss the key.  We won't go into a bit by bit description, for
  674. that, see FIPS 46.  The main idea is to generate 16 48-bit keys out of the
  675. original 56 that
  676.  
  677.   1.  are simply generated
  678.   2.  vary one from the other as much as possible
  679.   3.  fit the 'scatter' to involve all key bits in all cipher bits
  680.  
  681. For this, two (actually, three) permutations are used, called PC1 and PC2 in
  682. the standard, awkward names, but we'll use them.  This 'key scheduling' is not
  683. perfect; it permits weak keys (keys that are their own inverse) and semi-weak
  684. keys (keys that result in alternating patterns so that all encryptions of LEFT
  685. are as if encrypted by an invariant key, and a different invariant key for
  686. RIGHT).  The key scheduling just isn't good enough to avoid these weaknesses.
  687.  
  688. PC1 is a geometric permutation that doesn't seem to have deep reason.  It
  689. discards the so-called parity bits, thus reducing 64 bits to 56, and divides
  690. the key bits into two halves.  The halving *is* important.  This is a picture
  691. of the PC1 transformation of the original key bits with their 'parity' bits
  692.  
  693.                1   2   3        4   5   6   7            8
  694.                9  10  11       12  13  14  15           16
  695.               17  18  19       20  21  22  23           24
  696.               25  26  27       28  29  30  31           32
  697.               33  34  35  36       37  38  39           40
  698.            ^  41  42  43  44       45  46  47 ^         48
  699.            |  49  50  51  52       53  54  55 |         56
  700.            |  57  58  59  60       61  62  63 |         64
  701.                  C half           D half            discarded
  702.  
  703. C = 57 49 .. 44 36
  704. D = 63 55 .. 4 12 20 28
  705.  
  706. Very geometric, which, combined with the geometric shifts used with PC2, cause
  707. a larger number of weak keys than would be strictly necessary.  Now, PC2,
  708. which is actually two permutations, one that operates on circular shifts of C,
  709. and one that operates on circular shifts of D, has an odd property; it
  710. re-arranges 24 bits out of C and 24 bits out of D so that the C bits directly
  711. combine only with the first 16 bits of RIGHT (or LEFT), and the D bits only
  712. with the last 16 bits of RIGHT (or LEFT).  (I'm not considering the nibble
  713. boundary bits).  Bit 41, in other words, will never combine with bits 17
  714. through 32 of the one-way argument.  Similarly, bit 47 will never combine with
  715. bits 1 through 16 of the one-way argument.
  716.  
  717. Indirect combination, due to the scatter, is another story.  My guess is, that
  718. cutting the key bits into halves is deliberate to ensure that all key bits
  719. encrypt all cipher bits as quickly and simply as possible.  If you carefully
  720. examine which bits get encrypted by the table values, you will see that the
  721. scatter also repositions substitution bits by halves.  That is, in our
  722. illustration, the first 16 bits plus the nibble boundary bits, of RIGHT,
  723. encrypt half of the first 16 bits of LEFT and half of the last 16 bits of LEFT
  724. (almost).  Also, the last 16 bits of RIGHT cause encryption of the remaining
  725. first and second halves of LEFT.  I think this completely explains the purpose
  726. of the P permutation described (described? just listed!) in the standard.
  727.  
  728. For PC2, see FIPS 46.  Let me just mention that since PC2 selects 24 bits out
  729. of each half, in any of the key schedules there are always 4 bits out of the
  730. 56 missing.  This makes it harder for the cryptanalyst to work the cipher
  731. backwards by supposing and testing assumptions about the key.
  732.  
  733. Finally, let me add an implementation note.  You don't have to go through the
  734. key scheduling algorithm for every block like the standard describes.
  735. Instead, you program an initialization call that generates the 16 key
  736. schedules one time.  You can do this because the schedules are invariant from
  737. block to block.  Such an initialization call makes the difference between
  738. encryption rates of 80 bytes/sec and 700 bytes/sec for an otherwise uninspired
  739. implementation, or 2500 bytes/sec for what is in my opinion the very finest
  740. ever for the IBM PC, the Data Encoder.
  741.  
  742. To make all cipher bits depend on all key bits is no mean accomplishment.  The
  743. attempt is fraught with booby traps.  Most ways you can think of to force this
  744. dependency have the unfortunate result of transforming the actual key into a
  745. simpler and much smaller equivalent key.  This danger the designers of the DES
  746. managed to avoid.  I mention this because we have seen some weaknesses in the
  747. DES's key scheduling, but these weaknesses should not blind us to the DES's
  748. good points if we want to learn how to design ciphers.
  749.  
  750. The DES has another weakness, the complementary property, that effectively
  751. halves the key space.  This property is caused by the two uses of XOR in the
  752. algorithm.  Let's use '~' to indicate boolean 'not', 'm' to indicate
  753. 'message', and 'k' to indicate 'key'.
  754.  
  755. The complementary property is as follows:
  756.  
  757.           DES(k,m) = ~DES(~k,~m)
  758.  
  759. Read this as: the DES encryption of a message, m, under a key, k, is IDENTICAL
  760. to the complement of the DES encryption of ~m under key ~k.
  761.  
  762. Remember that the key bits are combined with the message bits by a XOR to look
  763. up an encrypting value in an S-box.  Because of this XOR, m and k, or ~m and
  764. ~k, map to the identical value in an S-box because of the boolean identity
  765.  
  766.                  (m XOR k) = (~m XOR ~k)
  767.  
  768. Remember also that LEFT is encrypted by XORing it with the looked-up value.
  769. Due to another boolean identity
  770.  
  771.                (LEFT XOR VALUE) = ~(~LEFT XOR VALUE)
  772.  
  773. we have the complementary property.  The result is that for known plaintext,
  774. the DES's key space is 2^55, not 2^56.  And cryptographers must assume that
  775. plaintext is known when analyzing a cipher; that simply isn't unreasonable.
  776.  
  777. This weakness would have been easy to avoid.  We have only to *add* the key to
  778. RIGHT (or LEFT) mod 2^48, and we would not map to the same S-box values for
  779. complements of message and key; and to *add* the looked-up value to LEFT (or
  780. RIGHT) mod 2^32.  And as a general rule, XOR is not a good primitive for
  781. ciphers.  True, it is convenient because XOR is its own inverse, while if we
  782. used ADD to encrypt, we would have to use SUB to decrypt.  But in cryptography
  783. there are more important things than convenience, for example, keeping the
  784. actual key space close to the potential.
  785.  
  786. Why this weakness is not corrected is hard to understand.  DES defenders claim
  787. that the complementary property is useful for verifying the correctness of
  788. implementations.  Basically, you code the DES then test it to see if the
  789. complementary property holds for randomly chosen key and plaintext, and if it
  790. does, you are supposed to get a 'warm' feeling.  But this argument can't be
  791. valid.  Errors in key scheduling and in S-box values can't be caught by this
  792. test.  Matter of fact, most errors in coding the DES can't be caught by the
  793. complementary property, so long as XOR is used to combine RIGHT and key, and
  794. to encrypt LEFT.  It only proves that XOR is used both places, not that things
  795. are right!
  796.  
  797. DES defenders also claim that XOR is necessary to keep decryption like
  798. encryption, that is, to avoid sensitivity to direction.   However,
  799. the DES, whether it uses XOR or not, *is* sensitive to direction.  To encrypt,
  800. you must start with the *first* key schedule, and work your way to the 16th.
  801. To decrypt, you must start with the 16th key schedule, and work your way
  802. backwards to the first.  Since the DES is sensitive to direction anyhow, it
  803. wouldn't hurt a thing to use ADD one way, and SUB the other.
  804.  
  805. My opinion is that XOR is a mistake realized too late, and that correction is
  806. resisted because too much is now invested in this mistake, and that defense of
  807. the XOR are rationalizations, not reasons.  And yes, it does matter.  The key
  808. space of 2^56 isn't enough anyhow.  If the NSA can exhaust all 2^56 keys in a
  809. day (and on average, it need only to exhaust half that, or 2^55), then for
  810. known plaintext, which is very common, it can exhaust all possible 2^55 keys
  811. in half a day (or on average 2^54 keys in one quarter of a day).
  812.  
  813. But our interest in the DES is not its defense, but to learn good ciphering
  814. from both its good and bad points.  The lesson is clear; avoid XOR for
  815. ciphers, because it halves the key space.  If you implement the DES and
  816. don't need to maintain the standard, I recommend using ADD and SUB instead
  817. of XOR.  Software implementation of the DES is frowned on, not because it
  818. is slow, but because it permits a knowledgeable person to tamper with the DES
  819. to the NSA's distress.  The NSA prefers hardware implementations only (ROM
  820. qualifies as 'hardware') and will more readily grant export licenses for
  821. hardware than software.
  822.  
  823. Here is one suggestion that practically increases the key space to
  824. 120 bits.  Begin with a seed of 64 bits, the seed being an extension
  825. of your 56-bit key.  Encrypt the seed by your key and use the resulting
  826. 16 nibbles of the ciphertext to shuffle the nibbles of the first row of
  827. the first S-box.  Encrypt the ciphertext (not the seed) again with
  828. the altered S-box.  Use the second ciphertext block to shuffle the
  829. nibbles of the next row of the S-box.  Repeatedly encrypt blocks
  830. and shuffle rows until all 32 rows have been altered.  Thereafter,
  831. use your 56-bit key and the altered DES tables to encrypt and decrypt
  832. your messages.  In all probability, the resulting ciphertext won't
  833. be as nice cryptographically with these randomized tables as with
  834. the contrived ones, but this scheme will thwart a brute-force attack
  835. based on exhaustive key trial.  A key search on a special-purpose
  836. machine is possible over a 55-bit key space (given known plaintext),
  837. but it is not possible over a 120-bit key space.  We may take up
  838. later other pros and cons of modifying the DES tables.
  839.  
  840. The inventors of the DES state that five rounds are required for all
  841. ciphertext bits to become dependent on all key bits and all message bits.  Yet
  842. the DES uses 16 rounds.  How come?  Wouldn't it be better to limit the rounds
  843. to five for a great increase in throughput?  Or would it?  In examining a
  844. cipher it is very good not to take anything for granted, to ask oneself 'why
  845. this, instead of that?' and attempt to find a coherent reason for it.
  846.  
  847. I haven't been able to answer this question satisfactorily for myself.
  848. However, the DES is too carefully crafted for me to lightly believe that it
  849. uses 16 rounds just because that is a nice round number in binary arithmetic.
  850. Perhaps my current thinking will help others to puzzle it out.
  851.  
  852. The DES is breakable, not just by brute force but by cryptanalysis, if it used
  853. two rounds instead of 16, and if plaintext is known.  To see this, let's list
  854. knowns and unknowns for two rounds.  We need a notation now for LEFT and RIGHT
  855. to show rounds, and we will use L[i] and R[i].  When i=0, LEFT and RIGHT are
  856. plaintext; when i=n, LEFT and RIGHT are ciphertext.  Also, we will designate
  857. key schedules by K[j].  This is the picture when n=1.
  858.  
  859.         L[0]     R[0]    known by assuming known plaintext
  860.         L[1]     R[1]    known by intercepting ciphertext
  861.         K[1]             unknown
  862.         K[2]             unknown
  863.  
  864. Remember that encryption means a 32-bit number was picked out of the S-boxes
  865. as a function of R[0] and K[1], and this number encrypted L[0] to produce
  866. L[1].  Similarly, another 32-bit number was picked out of the S-boxes as a
  867. function of L[1] and K[2], and the second number encrypted R[0] to produce
  868. R[1].
  869.  
  870. There is another way to look at this (the poet Wallace Stevens listed thirteen
  871. ways of looking at a blackbird).  One nibble is picked out of the first S-box
  872. as a function of the bits 32 1 2 3 4 5 of R[0] and the first six bits of K[1]
  873. (bits 10 51 34 60 49 17 of the key), and encrypts bits 9 17 23 and 31 of L[0]
  874. by XOR.  And so on.
  875.  
  876. Now, if we have known plaintext, it is simply no problem to determine what the
  877. S-box values were that encrypted both LEFT and RIGHT.  We just take bits 9 17
  878. 23 and 31 of L[0] and XOR them against the same bits of L[1].  And so on.
  879. Let's call these nibbles the encrypting *sums*, and because there is only one
  880. round per side, the sums are also direct S-box values.
  881.  
  882. For each S-box value, there are four possible 6-bit keys that will map to
  883. the S-box value.  For all the nibbles that encrypted left, the possible key
  884. space used with R[0] is reduced from 2^48 to (2^2)^8, or 2^16.  This key space
  885. is easily exhausted, and we can now attack K[2].  By the same procedure, the
  886. key space for K[2] is also reduced to 2^16, however, K[2] must be consistent
  887. with K[1].  That is, the bits of K[2] are practically the same as for K[1],
  888. but rearranged.  So, in fact, the key space for K[2] is far smaller than 2^16,
  889. I think it is only 2^4 (but I haven't counted it yet).  This breaks a
  890. two-round DES.
  891.  
  892. Now suppose four rounds; two for LEFT and two for RIGHT, and list the knowns
  893. and unknowns again
  894.  
  895.         L[0]   R[0]                  known  (plaintext)
  896.         L[1]   R[1]   K[1]  K[2]     unknown!  (intermediate ciphertext)
  897.         L[2]   R[2]                  known  (ciphertext)
  898.                       K[3]  K[4]     unknown
  899.  
  900. Now when we derive the encrypting sums we no longer have the S-box values, but
  901. two S-box *addends*, and for any sum, there must be 16 pairs of addends.  We
  902. simply don't know what L[1] and R[1], the intermediate ciphertext, are
  903. anymore.  The possible keys for K[1] increase from 2^16 to 2^32.  This begins
  904. to look computationally difficult.  Instead of four possible 6-bit keys per
  905. nibble, we now have 16.  However, let us remember the consistency requirement
  906. of the key bits.  If we do suppose a particular key bit is 1, it must be 1 in
  907. all the schedules in which it occurs, regardless of position.  So, the
  908. combinatorics aren't quite as daunting as they first appear.  It seems that
  909. this is still solvable.
  910.  
  911. To work this out accurately, you would have to construct tables of key bits
  912. according to the key schedules, then note the bits repeated (they will be in
  913. different positions) from round to round.
  914.  
  915. For six rounds, the number of possible keys used with R[0] jumps to 2^48.
  916. With a large machine, it should be possible to solve.  But any more rounds, we
  917. would be solving for 2^56 possible keys; that is, we are back to a brute force
  918. attack.
  919.  
  920. With 16 rounds, there are seven intermediate unknown LEFTs and RIGHTs
  921. and the combinatorics become too great to backsolve for the key.  I suspect
  922. that if the math is worked out, 16 rounds make it a practical certainty that
  923. backsolving is infeasible, whether we attack all bits used in one round, or a
  924. few bits used in all rounds.  It would be nice to know the exact number of
  925. rounds that reach this infeasibility; the math, however, escapes me.
  926.  
  927. We must remember this when we return to our byte cipher (discussed in
  928. the file "DES"), because we should determine how many rounds are
  929. required to make backsolving with known plaintext infeasible.  The
  930. number of rounds is important; too many is inefficient, too few is fatal.
  931.  
  932. ---
  933.  
  934. Experts have studied the S-boxes.  To a casual eye each row of
  935. the S-boxes appears to be a random permutation of the nibbles 0
  936. through 15.  But they aren't random.  So far, nobody has figured
  937. out their ordering or why.
  938.  
  939. I haven't figured out the S-boxes, and it is unlikely I ever
  940. will.  Nevertheless, I am inclined to believe the inventors when
  941. they say there is no trap door, and the computed boxes really
  942. are 'better' cryptographically than random boxes.  Keep in mind
  943. that many mathematicians, computer scientists, and gifted
  944. amateur cryptanalysts who owe nothing to the NSA have pored over
  945. these boxes.  Also, the inventors' tone in their defense of the
  946. DES ('Cryptography:  A New Dimension in Computer Security'; Carl
  947. Meyer and Stephan Matyas, John Wiley and Sons) strikes me as
  948. sincere.  They seem to me genuinely surprised to discover that
  949. non-random boxes are better than random.
  950.  
  951. I can't explain the S-boxes, but I do have an idea why
  952. non-random boxes might be 'better'.  It turns out that the
  953. ENIGMA rotors also were not randomly wired.  Rather, they were
  954. wired to ensure 'distance'.  The idea is that similar plaintext
  955. should not encrypt under a similar key to a similar ciphertext.
  956. I haven't studied the ENIGMA in detail yet, so I don't know what
  957. threat 'closeness' poses to the key that the German inventors
  958. were trying to avoid.  Yet, it must have been a threat, because
  959. the German cryptographers deliberately avoided random rotor
  960. wiring, in spite of the weaknesses 'distance' wiring introduced.
  961.  
  962. There is the same idea in symbol table hashing algorithms.
  963. Here, one wants similar variables, perhaps differing only by one
  964. character to hash to far different places in a symbol table.
  965. The reason is, we want to avoid 'collisions' - different
  966. variable names accidentally hashing to the same symbol table
  967. location, causing extra effort to find an unused slot for each
  968. variable name.  Most hashing schemes have the effect of
  969. discarding the high order character, so without 'distance', in
  970. FORTRAN, for example, collision is practically assured because
  971. FORTRAN uses the initial letter of a variable to classify the
  972. data type, and we tend to name variables systematically.
  973.  
  974. Might this not be the secret of the S-box design criterion?  It
  975. seems to me that the message space mapping of a cipher is not in
  976. principle different from symbol table hashing.  And if
  977. 'distance' is *not* a criterion of the mapping, maybe it ought
  978. to be.
  979.  
  980. What I'm saying, strictly as speculation, is that very similar
  981. plaintext, differing perhaps by only a bit, should map to wildly
  982. different points in the message space, that it may be impossible
  983. to guarantee distance with random table values, and that the
  984. S-box values were carefully computed to ensure distance.
  985. Exactly why the lack of distance should be weak, I haven't
  986. figured out.  In support of my guess, the DES does indeed
  987. exhibit the property that similar input maps to violently
  988. different results.
  989.  
  990. But even if my guess is right, this leaves unanswered the
  991. important question of how to design the boxes.  Still, it's a
  992. start, and it raises very interesting questions in math and
  993. cryptography.
  994.  
  995. The plaintext is not simply divided into LEFT and RIGHT like we
  996. described.  It is permuted first by a so-called Initial
  997. Permutation, IP, that transposes the rows and columns of a
  998. bit-byte matrix in an odd way.
  999.  
  1000.           1  2  3  4  5  6  7  8
  1001.           9 10 11 12 13 14 15 16
  1002.          17 18 19 20 21 22 23 24
  1003.          25 26 27 28 29 30 31 32
  1004.          33 34 35 36 37 38 39 40
  1005.          41 42 43 44 45 46 47 48
  1006.          49 50 51 52 53 54 55 56
  1007.          57 58 59 60 61 62 63 64
  1008.          -----------------------
  1009.              1     2     3     4   take out order for LEFT
  1010.           5     6     7     8      take out order for RIGHT
  1011.  
  1012. In other words, transcribe the bytes in row order, then take
  1013. bits out in the column order indicated, from bottom to top.
  1014.  
  1015. This permutation is bemusing.  There is no apparent reason for
  1016. it, and many cryptanalysts believe IP has no cryptographic
  1017. significance.  The American Cryptogram Association, an
  1018. organization of amateur cryptanalysts, has considered IP without
  1019. being able to reach a conclusion about it.
  1020.  
  1021. This unexplained permutation does something distinctive,
  1022. however.  Let's look at eight consecutive bytes in a different
  1023. way:
  1024.  
  1025.             x..x  x..x
  1026.             x..x  x..x
  1027.             x..x  x..x
  1028.             x..x  x..x
  1029.             x..x  x..x
  1030.             x..x  x..x
  1031.             x..x  x..x
  1032.             x..x  x..x
  1033.  
  1034. What we are doing is distinguishing between nibble boundary bits
  1035. and nibble inner bits.  Now, it is a fact that IP rearranges
  1036. boundary and inner bits like this
  1037.  
  1038.             .... ....
  1039.             x..x x..x
  1040.             .... ....
  1041.             x..x x..x
  1042.             x..x x..x
  1043.             .... ....
  1044.             x..x x..x
  1045.             .... ....
  1046.  
  1047. In other words, half the normal boundary bits are exchanged with
  1048. inner bits, and the original boundary bits that still remain
  1049. boundary bits are relocated.  The reason for this is obvious -
  1050. the boundary bits have quite pronounced statistics in normal
  1051. natural language text, especially in EBCDIC.  For example, a
  1052. blank is 0 1 0 0  0 0 0 0.  The result is that 20 percent of all
  1053. boundary bits are 0 because blanks make up 20 percent of all
  1054. text.  By continuing to separate the boundary nibbles by their
  1055. natural language statistics, you can derive a frequency table,
  1056. in addition to 0..0, for
  1057.  
  1058.           0..1
  1059.           1..0
  1060.           1..1
  1061.  
  1062. Do this as an exercise, and you will see that the frequencies
  1063. are quite pronounced.  Use EBCDIC; remember, the inventors of
  1064. the DES were thinking IBM, not micros and ASCII.
  1065.  
  1066. The effect of IP is to even out these frequencies for the
  1067. boundary bits so that they are more nearly uniform.  It is
  1068. impossible to believe that something as remarkable as this was
  1069. not intended.  This smoothing out of boundary bit statistics
  1070. must be the purpose of IP.
  1071.  
  1072. How come?  Why are the boundary bits so important that they are
  1073. evened out at the expense of the inner bits?  The answer I
  1074. suppose is to compensate for the reduction of the DES key from
  1075. 128 bits to 56.
  1076.  
  1077. It doesn't take too long studying the DES to realize that its
  1078. dimensions are wrong.  It is very lopsided.  There are eight
  1079. boxes of four rows and 16 columns each.  In short time, you get
  1080. the feeling that 16 boxes of 16 rows and columns each would have
  1081. been more natural.  The key should have been 128 bits; LEFT and
  1082. RIGHT should have consisted of 64 bits each.  The inter-nibble
  1083. dependency should have been TWO bits from the previous nibble
  1084. (not one) concatenated to the current nibble, concatenated to
  1085. TWO bits of the following nibble.  In other words, instead of 32
  1086. 1 2 3 4 5, it should have been 31 32 1 2 3 4 5 6.   Bits 31 32 5
  1087. 6 should have been the row coordinate into the first S-box, not
  1088. 32 and 5.
  1089.  
  1090. The result of this brutal reduction is that there are far less
  1091. rows per nibble to select values out of than there are columns.
  1092. Guessing which row is selected, rather than guessing which
  1093. value, there are
  1094.  
  1095.                (2^2)^8 = 2^16
  1096.  
  1097. choices per round, or for one nibble for all rounds.  This is
  1098. not a formidable number.
  1099.  
  1100. For known input, correctly guessing a row gives you two bits of
  1101. the key.  Because of the key bit consistency requirement, it
  1102. also helps determine other key bits.  Also, guessing the row
  1103. helps determine the column as well, since the selfsame message
  1104. row bits participate as column selection bits.  It looks like
  1105. row selection is the weakest part of the DES, and if a
  1106. cryptanalytic attack is achievable, it should be the spot to
  1107. concentrate on.  My guess is that a strong bias of nibble
  1108. boundary bits might help such an attack, and that IP is a
  1109. stop-gap measure to thwart it.  If the rows *can* be determined,
  1110. 32 key bits are recovered, and the DES falls.  The remaining 24
  1111. bits could not resist even a microcomputer.
  1112.  
  1113. Perhaps IP is not a bemusing oddity.  Perhaps it is symptomatic
  1114. of a deep weakness born of the DES's butchering.  By the way,
  1115. this is exactly how cryptanalysis works - find a weak point and
  1116. hammer it.
  1117.  
  1118. ---
  1119.  
  1120. This note will describe one more implementation trick for very
  1121. fast software DES, then recap implementation tricks.
  1122.  
  1123. You will remember how the 32 bits of RIGHT (or LEFT) must be
  1124. expanded before they can be combined with the key schedule for a
  1125. round.  The following bits
  1126.  
  1127.                1  2  3  4
  1128.                5  6  7  8
  1129.                9 10 11 12
  1130.               13 14 15 16
  1131.               17 18 19 20
  1132.               21 22 23 24
  1133.               25 26 27 28
  1134.               29 30 31 32
  1135.  
  1136. must be expanded to
  1137.  
  1138.            32  1  2  3  4  5
  1139.             4  5  6  7  8  9
  1140.             8  9 10 11 12 13
  1141.            12 13 14 15 16 17
  1142.            16 17 18 19 20 21
  1143.            20 21 22 23 24 25
  1144.            24 25 26 27 28 26
  1145.            28 29 30 31 32  1
  1146.  
  1147. This expansion is called E in FIPS 46.  You will also remember
  1148. that IP arranges the bits of the plaintext into these 32 bits
  1149. for RIGHT and 32 bits for LEFT.  Now to perform this expansion
  1150. in code for every round happens to be quite a bit of work, even
  1151. using a micro's fastest instruction forms.  However, IP may be
  1152. modified to generate LEFT and RIGHT in *expanded* form.  Then,
  1153. if the S-box values are adjusted to compensate for an expanded
  1154. LEFT and RIGHT, the same encryption is achieved, but without the
  1155. expense of performing E for every round.  Including the S-box
  1156. adjustment to do away with P, the cost is 48-bit S-box values
  1157. for every original 4-bit element in the S-boxes.
  1158.  
  1159. To see how this works, remember that *all* values in the first
  1160. S-box encrypt only bits 9 17 23 and 31 of either LEFT or RIGHT,
  1161. and the first S-box's first value is 1 1 1 0, in binary.  We
  1162. therefore replace this value with the following
  1163.  
  1164.            0  0  0  0  0  0
  1165.            0  0  0  0  0  1
  1166.            0  1  0  0  0  0
  1167.            0  0  0  0  0  1
  1168.            0  1  0  0  0  0
  1169.            0  0  0  1  0  0
  1170.            0  0  0  0  0  0
  1171.            0  0  0  0  0  0
  1172.  
  1173. Let's assume the 8088 chip and a clock rate of 4.77 MHz, and
  1174. recap.  Setting the key schedules in a one-time initialization
  1175. call increases software speed from about 80 bytes per second to
  1176. close to 800.  Getting rid of P by precomputing it in the
  1177. S-boxes increases the speed from about 800 bytes/second to about
  1178. 1700.  Making E a one-time expense by putting it into IP, and
  1179. adjusting the S-boxes accordingly increases the speed from about
  1180. 1700 to 2500 bytes/second.
  1181.  
  1182. There is one more trick if you can live with a c * 64K table,
  1183. where 'c' is the length of one table entry. You can collapse two
  1184. S-boxes into a single table, thereby halving the number of S-box
  1185. lookups. This should bring the speed up to about 5000
  1186. bytes/second. However, this large a table isn't practical for
  1187. some encryption applications.
  1188.  
  1189. ---
  1190.  
  1191.     The files permf.s and permg.s are the 68000 versions of the
  1192. permutation routines described in Z80 code in the article
  1193. "Designing a File Encryption System" in the Aug '84 issue of
  1194. DDJ.  Permf performs the forward permutation of the bits in a
  1195. 256-bit block as specified by a table of bytes.  Permg performs
  1196. the inverse permutation.
  1197.  
  1198.     The file cycle.s is the 68000 version of the corresponding
  1199. Z80 code for the routine which "cycles" the permutation tables
  1200. to the next position.
  1201.  
  1202. For example, if the permutation table has the values:
  1203.  
  1204.         1  15  115  57 .... 0
  1205.  
  1206. then the forward permutation means to put the 1st bit of the
  1207. block in the 0th place, the 15th bit in the 1st place, the 115th
  1208. bit in the 2nd place, and so on until the 0th bit goes in the
  1209. 255th place.
  1210.  
  1211. The inverse permutation with the same table means to place the
  1212. 0th bit of the block in the 1st place, the 1st bit in the 15th
  1213. place, the 2nd bit in the 115th place, and so on until the 255th
  1214. bit goes in the 0th place.
  1215.  
  1216. The routines address bits in the block by deriving a bit index
  1217. from the byte value of the permutation table.  The upper five
  1218. bits of that value index to the particular byte in the block,
  1219. and the lower three bits then index to the particular bit within
  1220. that byte.
  1221.  
  1222. In the original cryptographic use, the permutation table was
  1223. assumed to be cycled to its next permutation after the
  1224. encryption of each block.  The idea is to use the same thing in
  1225. as many different ways as possible to get a long period before
  1226. it repeats.  Consider the following permutation list of 10
  1227. elements:
  1228.  
  1229. element:    7 4 1 3 5 9 8 6 2 0
  1230. position:   0 1 2 3 4 5 6 7 8 9
  1231.  
  1232. This is the table permf and permg use.  In cyclic notation this
  1233. list becomes:
  1234.  
  1235.         (0 7 6 8 2 1 4 5 9) (3)
  1236.  
  1237. That is, there are two cycles, one of degree 9 and one
  1238. singleton.  It means that 7 goes to 0, 6 goes to 7, 8 goes to 6,
  1239. and so on.  If we "rotate" the cycles to the second position, we
  1240. get this list:
  1241.  
  1242. element:   6 5 4 3 9 0 2 8 1 7
  1243. position:  0 1 2 3 4 5 6 7 8 9
  1244.  
  1245. Thus from one cycle table we can get 9 different permutation
  1246. lists.  The cycle routine constructs these lists for permf and
  1247. permg, given a table in cyclic notation as above.  It can handle
  1248. tables of 256 elements, each of which may contain a number of
  1249. cycles.  For example, if we had two tables, the first containing
  1250. two cycles, of degrees 83 and 173, and the second containing
  1251. cycles of degrees 197 and 59, the composite cycle would not
  1252. repeat until 83 * 173 * 197 * 59 = 1.669 x 10^8 blocks had been
  1253. processed.
  1254.  
  1255. The routines now run about four times faster that the Z80
  1256. versions.
  1257.  
  1258. *
  1259. * PERMF for the 68000.      Permute a 256-bit bit vector, BLOCK
  1260. * by table BITPERM.  On call:
  1261. *
  1262. *       a0 -> BLOCK
  1263. *       a1 -> BITPERM
  1264. *
  1265. * On return, a0 -> permuted BLOCK.
  1266. *
  1267. * Register usage:
  1268. *
  1269. *       a2 -> WORK, a 32-byte temporary work area
  1270. *       d0 =  byte from BITPERM, shifted to bit index
  1271. *       d1 =  index to byte of BLOCK
  1272. *       d2 =  rotated bit for masking and inner loop control
  1273. *       d3 =  #31, outer loop control
  1274. *       d4 =  #$07 immediate masking value
  1275. *
  1276. * 5/19/86.  Execution time 4.5 ms.
  1277. *
  1278.         .globl  permf,work
  1279.  
  1280.         .text
  1281.  
  1282. permf:
  1283.         movem.l d0-d4/a0-a3,-(a7)
  1284.         moveq   #7,d0           clear work area
  1285.         lea     work,a2         -> work
  1286.         move.l  a2,a3           copy ptr for later use
  1287. clrloop:
  1288.         clr.l   (a2)+
  1289.         dbra    d0,clrloop
  1290.         move.l  a3,a2           retrieve work pointer
  1291.         move    #$80,d2         masking bit and inner loop control
  1292.         moveq   #31,d3          outer loop control
  1293.         moveq   #7,d4           masking value
  1294.         clr     d0              keep word clear
  1295. permloop:
  1296.         move.b  (a1)+,d0        get byte from BITPERM
  1297.         move    d0,d1           we will need it twice
  1298.         lsr     #3,d1           compute byte index in BLOCK
  1299.         and     d4,d0           save lower 3 bits for bit index
  1300.         eor     d4,d0           reverse bit order for btst
  1301.         btst    d0,(a0,d1)      is bit on in BLOCK?
  1302.         beq     permf1          if so, we must set bit in WORK
  1303.         or.b    d2,(a2)         set bit in WORK
  1304. permf1:
  1305.         ror.b   #1,d2           shift masking bit
  1306.         bcc     permloop        next bit of work?
  1307.         addq    #1,a2           else, next byte of work
  1308.         dbra    d3,permloop     do for 32 bytes
  1309.  
  1310. movloop:
  1311.         move.l  (a3)+,(a0)+     move data from WORK to BLOCK
  1312.         dbra    d4,movloop      use #7 already in d4
  1313.         movem.l (a7)+,d0-d4/a0-a3
  1314.         rts                     all done
  1315.  
  1316.         .end
  1317.  
  1318. *
  1319. * PERMG for the 68000.      Inversely permute a 256-bit bit
  1320. * vector by table BITPERM.  On call:
  1321. *
  1322. *       a0 -> BLOCK
  1323. *       a1 -> BITPERM
  1324. *
  1325. * On return, a0 -> permuted BLOCK.
  1326. *
  1327. * Register usage:
  1328. *
  1329. *       a2 -> WORK, a 32-byte temporary work area
  1330. *       a3 -> BLOCK
  1331. *       d0 =  outer loop control
  1332. *       d1 =  inner loop control
  1333. *       d2 =  bit counter
  1334. *       d3 =  longword from block
  1335. *       d4 =  byte from BITPERM
  1336. *       d5 =  temporary
  1337. *       d6 =  #7 masking value
  1338. *
  1339. * 5/19/86.  Execution time is 3.3 ms.
  1340. *
  1341.         .globl  permg,work
  1342.  
  1343.         .text
  1344.  
  1345. permg:
  1346.         movem.l d0-d6/a0-a3,-(a7)
  1347.         moveq   #7,d0           clear work area
  1348.         lea     work,a2
  1349.         move.l  a2,a3           copy ptr for later use
  1350. clrloop:
  1351.         clr.l   (a2)+
  1352.         dbra    d0,clrloop
  1353.         move.l  a0,a3           save a0 ptr for later
  1354.         moveq   #7,d0           outer loop control
  1355.         moveq   #0,d2           count of bits
  1356.         move    d2,d4           need word clear
  1357.         moveq   #7,d6           masking value
  1358. permg1:
  1359.         moveq   #31,d1          inner loop control and bit to test
  1360.         move.l  (a0)+,d3        get longword from BLOCK
  1361. bitloop:
  1362.         btst    d1,d3           check for bit on
  1363.         beq     permg2          if on, set BITPERM[d2] bit in WORK
  1364.         move.b  (a1,d2),d4      get byte BITPERM[COUNT]
  1365.         move    d4,d5           save for reuse
  1366.         lsr     #3,d4           index to byte of WORK
  1367.         and     d6,d5           compute bit # in that byte
  1368.         eor     d6,d5           reverse bit order
  1369.         bset    d5,(a2,d4)      set the bit in WORK
  1370. permg2:
  1371.         addq    #1,d2           bump bit count
  1372.         dbra    d1,bitloop      and do for all bits in this word
  1373.         dbra    d0,permg1       do for all words of BLOCK
  1374.  
  1375. movloop:
  1376.         move.l  (a2)+,(a3)+     move WORK to BLOCK
  1377.         dbra    d6,movloop      use #7 already in d6
  1378.         movem.l (a7)+,d0-d6/a0-a3
  1379.         rts                     all done
  1380.  
  1381.         .end
  1382.  
  1383. *
  1384. * CYCLE:  Convert a table of permutation cycles to a
  1385. * permutation list at the Nth permutation.  This version
  1386. * of cycle can deal with a table having any number of
  1387. * cycles (up to word value) of various degrees.  The cyclic
  1388. * permutation table is RANDP and the permutation list
  1389. * table is BITPERM.  BITPERM may then be used to permute
  1390. * a block of elements.  The procedure is:
  1391. *
  1392. * consult the cycle table structure to obtain the number
  1393. *  and degree of the cycles and the rotation to be applied
  1394. *  to each
  1395. *
  1396. * k <- 0       /* index into RANDP */
  1397. * for i = 1 to number_of_cycles do
  1398. *   get degree_of_this_cycle from structure
  1399. *   cycle_base <- k
  1400. *   for j = 1 to degree_of_this_cycle do
  1401. *     BITPERM[RANDP[k]] <- RANDP[RANDP[(k - cycle_base + rotation)
  1402. *                               mod (degree_of_this_cycle)]]
  1403. *     k <- k + 1
  1404. *   end for
  1405. * end for
  1406. *
  1407. * On call:
  1408. *       a0 -> RANDP
  1409. *       a1 -> BITPERM
  1410. *       a2 -> cycle structure
  1411. *
  1412. * On return:
  1413. *       all registers saved
  1414. *       BITPERM is established from RANDP
  1415. *
  1416. * The cycle structure is built as follows for each set of tables:
  1417. *
  1418. *       dc.w    xx      number of cycles in this table
  1419. *       dc.w    yy      degree of first cycle
  1420. *       dc.w    zz      rotation of first cycle
  1421. *       .       .       ..and so forth for each cycle
  1422. *       .       .
  1423. * CAUTION:  This structure holds words, but this implementation assumes
  1424. * that RANDP and BITPERM are tables of BYTES.  See indirect addressing
  1425. * inside degloop below.
  1426. *
  1427. * Version of 4/6/86.
  1428.  
  1429.         .text
  1430.         .globl  cycle
  1431.  
  1432. cycle:
  1433.         movem.l d0-d7/a0-a2,-(a7)
  1434.         move    (a2)+,d0        get # of cycles
  1435.         subq    #1,d0           adjust for dbra
  1436.         clr     d3              clear index into RANDP ("k" above)
  1437.         clr     d7              clear scratch register
  1438. cycloop:
  1439.         move    (a2)+,d1        get degree of this cycle
  1440.         move    (a2)+,d2        get rotation for this cycle
  1441.         move    d1,d5           use degree for loop control
  1442.         subq    #1,d5           adjust for dbra
  1443.         move    d3,d4           set current cycle base = k
  1444. degloop:
  1445.         move    d3,d6           first, see if outside cycle
  1446.         sub     d4,d6           RANDP index - current cycle base
  1447.         add     d2,d6           add in rotation
  1448.         cmp     d1,d6           does that put us outside this cycle?
  1449.         bcs     degok           branch if not
  1450.         sub     d1,d6           else, adjust mod degree
  1451. degok:
  1452.         add     d4,d6           add cycle base back to index + rotation
  1453.         move.b  (a0,d6),d6      get RANDP[index + rotation]
  1454.         move.b  (a0,d3),d7      get RANDP[index]
  1455.         move.b  (a0,d6),(a1,d7) put byte in BITPERM
  1456.         addq    #1,d3           bump RANDP index
  1457.         dbra    d5,degloop      loop until this cycle done
  1458.         dbra    d0,cycloop      loop until all cycles done
  1459.  
  1460.         movem.l (a7)+,d0-d7/a0-a2
  1461.         rts
  1462.  
  1463.         .end
  1464.  
  1465. /*EOF*/
  1466.