Larger Font   Reset Font Size   Smaller Font  

Cryptonomicon

Neal Stephenson


  There is a lot of praying first: Avi’s brought in a rabbi from Israel, and Enoch Root has brought in the Archbishop of Manila, and Goto Dengo has flown in some Shinto priests, and various Southeast Asian countries have gotten in on the act too. All of them pray or chant for the memory of their departed, though the prayers are practically drowned out by the choppers overhead. A lot of people don’t want them disturbing Golgotha at all, and Randy thinks they are basically right. But he’s gone out and earth-imaged Wing’s tunnel, this subterranean tentacle of air reaching towards the hoard, and released three-dimensional maps of everything to the media, and made the case—reasonably well, he thinks—that it’s better to do something constructive than to let it get ripped off by the likes of Wing. Some people have come around to his side and some haven’t, but none of the latter group is on the cover of Time and Newsweek.

  Doug Shaftoe is the last guy to take the floor. He removes his meshback cap, puts it over his heart, and with tears streaming down his face says something about his father, whom he just barely remembers. He speaks of the Battle of Manila and of how he saw his father for the first time in the wreckage of the Church of San Agustin, and how his father carried him up and down the stairway there before going off to bring hellfire down upon the Nipponese. He speaks about forgiveness and certain other abstractions, and the words are all chopped up and blurred by the helicopters overhead, which only makes it more powerful as far as Randy’s concerned, since it’s basically all about a bunch of memories that are all chopped up and blurred in Doug’s memory to begin with. Finally Doug works his way around to some kind of resolution that is very clear in his heart and mind but poorly articulated, and hits the switch.

  The pumps take a few minutes to pressurize Golgotha with a highly combustible mixture of air and fuel oil, and then Doug hits another switch that sets off a small detonation down below. Then the world shudders and rumbles before settling down into a kind of suppressed throbbing howl. A jet of white-hot flame shoots out of the drain hole down below, digs itself into the river very close to where Andrew Loeb came to rest, and throws up a cloud of steam that forces all of the choppers to gain altitude. Randy crawls down under the cover of that steam-cloud, sensing it’s the last privacy he’ll ever have, and sits down by the edge of the river to watch. After half an hour the jet of hot gas is joined by a rivulet of incandescent fluid that sinks to the bottom of the stream as soon as it emerges, clothed in a fuzz of wildly boiling water. For a long time there is really nothing to be seen except steam; but after Golgotha’s been burning for an hour or two, it becomes possible to see that underneath the shallow water, spreading down the valley floor, indeed right around the isolated boulder where Randy’s perched, is a bright, thick river of gold.

  APPENDIX:

  THE SOLITAIRE

  ENCRYPTION ALGORITHM

  by Bruce Schneier

  Author, Applied Cryptography

  President, Counterpane Systems

  http://www.counterpane.com

  In NEAL STEPHENSON’S NOVEL CRYPTONOMICON, THE character Enoch Root describes a cryptosystem code-named “Pontifex” to another character named Randy Waterhouse, and later reveals that the steps of the algorithm are intended to be carried out using a deck of playing cards. These two characters go on to exchange several encrypted messages using this system. The system is called “Solitaire” (in the novel, “Pontifex” is a code name intended to temporarily conceal the fact that it employs a deck of cards) and I designed it to allow field agents to communicate securely without having to rely on electronics or having to carry incriminating tools. An agent might be in a situation where he just does not have access to a computer, or may be prosecuted if he has tools for secret communication. But a deck of cards… what harm is that?

  Solitaire gets its security from the inherent randomness in a shuffled deck of cards. By manipulating this deck, a communicant can create a string of “random” letters that he then combines with his message. Of course Solitaire can be simulated on a computer, but it is designed to be implemented by hand.

  Solitaire may be low-tech, but its security is intended to be high-tech. I designed Solitaire to be secure even against the most well-funded military adversaries with the biggest computers and the smartest cryptanalysts. Of course there is no guarantee that someone won’t find a clever attack against Solitaire (watch my web page for updates), but the algorithm is certainly better than any other pencil and paper cipher I’ve ever seen.

  It’s not fast, though. It can take an evening to encrypt or decrypt a reasonably long message. In David Kahn’s book Kahn on Codes, he describes a real pencil-and-paper cipher used by a Soviet spy. Both the Soviet algorithm and Solitaire take about the same amount of time to encrypt a message.

  ENCRYPTING WITH SOLITAIRE

  Solitaire is an output-feedback mode stream cipher. Sometimes this is called a key-generator (KG in U.S. military speak). The basic idea is that Solitaire generates a stream, often called a “keystream,” of numbers between 1 and 26. To encrypt, generate the same number of keystream letters as plaintext letters. Then add them modulo 26 to plaintext letters, one at a time, to create the ciphertext. To decrypt, generate the same keystream and subtract modulo 26 from the ciphertext to recover the plaintext.

  For example, to encrypt the first Solitaire message mentioned in Stephenson’s novel, “DO NOT USE PC”:

  1. Split the plaintext message into five character groups. (There is nothing magical about five-character groups; it’s just tradition.) Use X’s to fill in the last group. So if the message is “DO NOT USE PC” then the plaintext is:

  D O N O T

  U S E P C

  2. Use Solitaire to generate ten keystream letters. (Details are below.) Assume they are:

  K D W U P

  O N O W T

  3. Convert the plaintext message from letters into numbers: A = 1, B = 2, etc:

  4 15 14 15 20

  21 19 5 16 3

  4. Convert the keystream letters similarly:

  11 4 23 21 16

  15 14 15 23 20

  5. Add the plaintext number stream to the keystream numbers, modulo 26. (All this means is, if the sum is more than 26, subtract 26 from the result.) For example, 1 + 1 = 2, 26 + 1 = 27, and 27 - 26 = 1… so 26 + 1 = 1.

  15 19 11 10 10

  10 7 20 13 23

  6. Convert the numbers back to letters.

  O S K J J

  J G T M W

  If you are really good at this, you can learn to add letters in your head, and just add the letters from steps (1) and (2). It just takes practice. It’s easy to remember that A + A = B; remembering that T + Q = K is harder.

  DECRYPTING WITH SOLITAIRE

  The basic idea is that the receiver generates the same keystream, and then subtracts the keystream letters from the ciphertext letters.

  1. Take the ciphertext message and put it in five character groups. (It should already be in this form.)

  O S K J J

  J G T M W

  2. Use Solitaire to generate ten keystream letters. If the receiver uses the same key as the sender, the keystream letters will be the same:

  K D W U P

  O N O W T

  3. Convert the ciphertext message from letters into numbers:

  15 19 11 10 10

  10 7 20 13 23

  4. Convert the keystream letters similarly:

  11 4 23 21 16

  15 14 15 23 20

  5. Subtract the keystream numbers from the ciphertext numbers, modulo 26. For example, 22 – 1 = 20, 1 – 22 = 5. (It’s easy. If the first number is less than the second number, add 26 to the first number before subtracting. So 1 – 22 = ? becomes 27 – 22 = 5.)

  4 15 14 15 20

  21 19 5 16 3

  6. Convert the numbers back to letters.

  D O N O T

  U S E P C

  Decryption is the same as encryption, except that you subtract the keystream from the ciphertext message.

  GENERATING THE KEYS
TREAM LETTERS

  This is the heart of Solitaire. The above descriptions of encryption and decryption work for any output-feedback mode stream cipher. This section explains how Solitaire works.

  Solitaire generates a keystream using a deck of cards. You can think of a 54-card deck (remember the jokers) as a 54-element permutation. There are 54!, or about 2.31 3 1071, possible different orderings of a deck. Even better, there are 52 cards in a deck (without the jokers), and 26 letters in the alphabet. That kind of coincidence is just too good to pass up.

  To be used for Solitaire, a deck needs a full set of 52 cards and two jokers. The jokers must be different in some way. (This is common. The deck I’m looking at as I write this has stars on its jokers: one has a little star and the other has a big star.) Call one joker A and the other B. Generally, there is a graphical element on the jokers that is the same, but different size. Make the “B” joker the one that is “bigger.” If it’s easier, you can write a big “A” and “B” on the two jokers, but remember that you will have to explain that to the secret police if you ever get caught.

  To initialize the deck, take the deck in your hand, face up. Then arrange the cards in the initial configuration that is the key. (I’ll talk about the key later, but it’s different than the keystream.) Now you’re ready to produce a string of keystream letters.

  This is Solitaire:

  1. Find the A joker. Move it one card down. (That is, swap it with the card beneath it.) If the joker is the bottom card of the deck, move it just below the top card.

  2. Find the B joker. Move it two cards down. If the joker is the bottom card of the deck, move it just below the second card. If the joker is one up from the bottom card, move it just below the top card. (Basically, assume the deck is a loop… you get the idea.)

  It’s important to do these two steps in order. It’s tempting to get lazy and just move the jokers as you find them. This is okay, unless they are very close to each other.

  So if the deck looks like this before step 1:

  3 A B 8 9

  at the end of step 2 it should look like:

  3 A 8 B 9

  If you have any doubt, remember to move the A joker before the B joker. And be careful when the jokers are at the bottom of the deck.

  3. Perform a triple cut. That is, swap the cards above the first joker with the cards below the second joker. If the deck used to look like:

  2 4 6 B 4 8 7 1 A 3 9

  then after the triple cut operation it will look like:

  3 9 B 4 8 7 1 A 2 4 6

  “First” and “second” jokers refer to whatever joker is nearest to, and furthest from, the top of the deck. Ignore the “A” and “B” designations for this step.

  Remember that the jokers and the cards between them don’t move; the other cards move around them. This is easy to do in your hands. If there are no cards in one of the three sections (either the jokers are adjacent, or one is on top or the bottom), just treat that section as empty and move it anyway.

  4. Perform a count cut. Look at the bottom card. Convert it into a number from 1 through 53. (Use the bridge order of suits: clubs, diamonds, hearts, and spades. If the card is a ♣, it is the value shown. If the card is a ♦, it is the value plus 13. If it is a ♥, it is the value plus 26. If it is a ♠, it is the value plus 39. Either joker is a 53.) Count down from the top card that number. (I generally count 1 through 13 again and again if I have to; it’s easier than counting to high numbers sequentially.) Cut after the card that you counted down to, leaving the bottom card on the bottom. If the deck used to look like:

  7… cards . . . 4 5… cards . . . 8 9

  and the ninth card was the 4, the cut would result in:

  5… cards . . . 8 7… cards . . . 4 9

  The reason the last card is left in place is to make the step reversible. This is important for mathematical analysis of its security.

  5. Find the output card. Look at the top card. Convert it into a number from 1 through 53, in the same manner as above. Count down that many cards. (Count the top card as number one.) Write the card after the one you counted to on a piece of paper. (If you hit a joker, don’t write anything down and start over again with step 1.) This is the first output card. Note that this step does not modify the state of the deck.

  6. Convert the card to a number. As before, use the bridge suits to order them. From lowest to highest, we have clubs, diamonds, hearts, and spades. Hence, A♣ through K♣ is 1 through 13, A♦ through K♦ is 14 through 26, A♥ through K♥ is 1 through 13, and A♠ through K♠ is 14 through 26.

  That’s Solitaire. You can use it create as many keystream numbers as you need.

  I know that there are regional differences in decks of cards, depending on the country. In general, it does not matter what suit ordering you use, or how you convert cards to numbers. What matters is that the sender and the receiver agree on the rules. If you’re not consistent you won’t be able to communicate.

  KEYING THE DECK

  Solitaire is only as secure as the key. That is, the easiest way to break Solitaire is to figure out what key the communicants are using. If you don’t have a good key, none of the rest matters. Here are some suggestions for exchanging a key.

  1. Shuffle the deck. A random key is the best. One of the communicants can shuffle up a random deck and then create another, identical deck. One goes to the sender and the other to the receiver. Most people are not good shufflers, so shuffle the deck at least ten times, and try to use a deck that has been played with instead of a fresh deck out of the box. Remember to keep a spare deck in the keyed order, otherwise if you make a mistake you’ll never be able to decrypt the message. Also remember that the key is at risk as long as it exists; the secret police could find the deck and copy down its order.

  2. Use a bridge ordering. A description of a set of bridge hands that you might see in a newspaper or a bridge book is about a 95-bit key. If the communicants can agree on a way to convert that to a deck ordering and a way to set the jokers (perhaps after the first two cards that are mentioned in the discussion of the game), this can work. Be warned: the secret police can find your bridge column and copy down the order. You can try setting up some repeatable convention for which bridge column to use; for example, “use the bridge column in your hometown newspaper for the day on which you encrypt the message,” or something like that. Or use a list of keywords to search the New York Times website, and use the bridge column for the day of the article that comes up when you search on those words. If the keywords are found or intercepted, they look like a passphrase. And pick your own convention; remember that the secret police read Neal Stephenson’s books, too.

  3. Use a passphrase to order the deck. This method uses the Solitaire algorithm to create an initial deck ordering. Both the sender and receiver share a passphrase. (For example, “SECRET KEY.”) Start with the deck in a fixed order; lowest card to highest card, in bridge suits. Perform the Solitaire operation, but instead of Step 5, do another count cut based on the first character of the passphrase (19, in this example). (Remember to put the top cards just above the bottom card in the deck, as before.) Do this once for each character. Use another two characters to set the positions of the jokers. Remember, though, that there are only about 1.4 bits of randomness per character in standard English. You’re going to want at least an 80-character passphrase to make this secure; I recommend at least 120 characters. (Sorry, but you just can’t get good security with a shorter key.)

  SAMPLE OUTPUT

  Here’s some sample data to practice your Solitaire skills with:

  Sample 1: Start with an unkeyed deck: A♣ through K♣, A♥ through K♥, A♦ through K♦, A♠ through K♠, A joker, B joker (you can think of this as 1-52, A, B). The first ten outputs are:

  4 49 10 (53) 24 8 51 44 6 33

  The 53 is skipped, of course. I just put it there for demonstration. If the plain text is:

  A A A A A

  A A A A A

  then the cipher te
xt is:

  E X K Y I

  Z S G E H

  Sample 2: Using keying method 3 and the key “FOO,” the first fifteen outputs are:

  8 19 7 25 20 (53) 9 8 22 32 43 5 26 17 (53) 38 48

  If the plain text is all As, the cipher text is:

  I T H Z U

  J I W G R

  F A R M W

  Sample 3: Using keying method 3 and the key “CRYPTONOMICON,” the message “SOLITAIRE” encrypts to:

  K I R A K

  S F J A N

  Of course, you should use a longer key. These samples are for test purposes only. There are more samples on the website, and you can use the book’s PERL script to create your own.

  SECURITY THROUGH OBSCURITY

  Solitaire is designed to be secure even if the enemy knows how the algorithm works. I have assumed that Cryptonomicon will be a best seller, and that copies will be available everywhere. I assume that the NSA and everyone else will study the algorithm and will watch for it. I assume that the only secret is the key.

  That’s why keeping the key secret is so important. If you have a deck of cards in a safe place, you should assume the enemy will at least entertain the thought that you are using Solitaire. If you have a bridge column in your safe deposit box, you should expect to raise a few eyebrows. If any group is known to be using the algorithm, expect the secret police to maintain a database of bridge columns to use in cracking attempts. Solitaire is strong even if the enemy knows you are using it, and a simple deck of playing cards is still much less incriminating than a software encryption program running on your laptop, but the algorithm is no substitute for street smarts.