Dilip 12 Dec 2020 ======================================================================== Cryptonomicon This is probably the best fiction I've read in 2020. It's an old book, published back in 1999. It's also a famous book - almost everyone I have come across since I started reading it has told me that they've heard of it. I had never heard of it till somebody on another more popular internet protocol recommended this book. I picked it up around the last week of November 2020 and went over it slowly over 3 weeks. It's a big book - there's a lot of great content in there. Like any good book, I think this book has changed something deep in me. It will probably take a year or two for these changes to emerge and start being visible. I think it'll have something to do with how I view my role as an engineer participating in our society. I wouldn't recommend this book to everyone. However, if you have stumbled upon this page, you're probably in the target audience for this book. You'll either hate it or absolutely love it. Here's a copy-paste of one of my favorite explanations from the book. Chapter 16. CYCLES ... "Excuse me." Alan suddenly brakes and jumps off his bicycle. He lifts the rear wheel from the pavement, gives it a spin with his free hand, then reaches down and gives the chain a momentary sideways tug. He is watching the mechanism intently, interrupted by a few aftersneezes. The chain of Turing’s bicycle has one weak link. The rear wheel has one bent spoke. When the link and the spoke come into contact with each other, the chain will part and fall onto the road. This does not happen at every revolution of the wheel—otherwise the bicycle would be completely useless. It only happens when the chain and the wheel are in a certain position with respect to each other. Based upon reasonable assumptions about the velocity that can be maintained by Dr. Turing, an energetic bicyclist (let us say 25 km/hr) and the radius of his bicycle’s rear wheel (a third of a meter), if the chain’s weak link hit the bent spoke on every revolution, the chain would fall off every one-third of a second. In fact, the chain doesn’t fall off unless the bent spoke and the weak link happen to coincide. Now, suppose that you describe the position of the rear wheel by the traditional [theta]. Just for the sake of simplicity, say that when the wheel starts in the position where the bent spoke is capable of hitting the weak link (albeit only if the weak link happens to be there to be hit) then [theta] = 0. If you’re using degrees as your unit, then, during a single revolution of the wheel, [theta] will climb all the way up to 359 degrees before cycling back around to 0, at which point the bent spoke will be back in position to knock the chain off And now suppose that you describe the position of the chain with the variable C, in the following very simple way: you assign a number to each link on the chain. The weak link is numbered 0, the next is 1, and so on, up to l - 1 where l is the total number of links in the chain. And again, for simplicity’s sake, say that when the chain is in the position where its weak link is capable of being hit by the bent spoke (albeit only if the bent spoke happens to be there to hit it) then C = 0. For purposes of figuring out when the chain is going to fall off of Dr. Turing’s bicycle, then, everything we need to know about the bicycle is contained in the values of [theta] and of C. That pair of numbers defines the bicycle’s state. The bicycle has as many possible states as there can be different values of ([theta], C) but only one of those states, namely (0, 0), is the one that will cause the chain to fall off onto the road. Suppose we start off in that state; i.e., with ([theta] = 0, C = 0), but that the chain has not fallen off because Dr. Turing (knowing full well his bicycle’s state at any given time) has paused in the middle of road (nearly precipitating a collision with his friend and colleague Lawrence Pritchard Waterhouse, because his gas mask blocks his peripheral vision). Dr. Turing has tugged sideways on the chain while moving it forward slightly, preventing it from being hit by the bent spoke. Now he gets on the bicycle again and begins to pedal forward. The circumference of his rear wheel is about two meters, and so when he has moved a distance of two meters down the road, the wheel has performed a complete revolution and reached the position [theta] = 0 again—that being the position, remember, when its bent spoke is in position to hit the weak link. What of the chain? Its position, defined by C, begins at 0 and reaches 1 when its next link moves forward to the fatal position, then 2 and so on. The chain must move in synch with the teeth on the sprocket at the center of the rear wheel, and that sprocket has n teeth, and so after a complete revolution of the rear wheel, when [theta] = 0 again, C = n. After a second complete revolution of the rear wheel, once again [theta] = 0 but now C = 2n. The next time it’s C = 3n and so on. But remember that the chain is not an infinite linear thing, but a loop having only l positions; at C = l it loops back around to C = 0 and repeats the cycle. So when calculating the value of C it is necessary to do modular arithmetic—that is, if the chain has a hundred links (l = 100) and the total number of links that have moved by is 135, then the value of C is not 135 but 35. Whenever you get a number greater than or equal to l you just repeatedly subtract l until you get a number less than l. This operation is written, by mathematicians, as mod l. So the successive values of C, each time the rear wheel spins around to [theta] = 0, are Ci = n mod l, 2n mod l, 3n mod l,. . .,in mod l where i = (1, 2, 3, . . . [infinity]) more or less, depending on how close to infinitely long Turing wants to keep riding his bicycle. After a while, it seems infinitely long to Waterhouse. Turing’s chain will fall off when his bicycle reaches the state ([theta] = 0, C = 0) and in light of what is written above, this will happen when i (which is just a counter telling how many times the rear wheel has revolved) reaches some hypothetical value such that in mod l = 0, or, to put it in plain language, it will happen if there is some multiple of n (such as, oh, 2n, 3n, 395n or 109,948,368,443n) that just happens to be an exact multiple of l too. Actually there might be several of these so-called common multiples, but from a practical standpoint the only one that matters is the first one—the least common multiple, or LCM—because that’s the one that will be reached first and that will cause the chain to fall off. If, say, the sprocket has twenty teeth (n 20) and the chain has a hundred teeth (l 100) then after one turn of the wheel we’ll have C 20, after two turns C = 40, then 60, then 80, then 100. But since we are doing the arithmetic modulo 100, that value has to be changed to zero. So after five revolutions of the rear wheel, we have reached the state ([theta] = 0, C = 0) and Turing’s chain falls off. Five revolutions of the rear wheel only gets him ten meters down the road, and so with these values of l and n the bicycle is very nearly worthless. Of course, this is only true if Turing is stupid enough to begin pedaling with his bicycle in the chain-falling-off state. If, at the time he begins pedaling, it is in the state ([theta] = 0, C = 1) instead, then the successive values will be C 21, 41, 61, 81, 1, 21, . . . and so on forever—the chain will never fall off. But this is a degenerate case, where "degenerate," to a mathematician, means "annoyingly boring." In theory, as long as Turing put his bicycle into the right state before parking it outside a building, no one would be able to steal it—the chain would fall off after they had ridden for no more than ten meters. But if Turing’s chain has a hundred and one links (l = 101) then after five revolutions we have C = 100, and after six we have C = 19, then C = 39, 59, 79, 99, 18, 38, 58, 78, 98, 17, 37, 57, 77, 97, 16, 36, 56, 76, 96, 15, 35, 55, 75, 95, 14, 34, 54, 74, 94, 13, 33, 53, 73, 93, 12, 32, 52, 72, 92, 11, 31, 51, 71, 91, 10, 30, 50, 70, 90, 9, 29, 49, 69, 89, 8, 28, 48, 68, 88, 7, 27, 47, 67, 87, 6, 26, 46, 66, 86, 5, 25, 45, 65, 85, 4, 24, 44, 64, 84, 3, 23, 43, 63, 83, 2, 22, 42, 62, 82, 1, 21, 41, 61, 81, 0 So not until the 101st revolution of the rear wheel does the bicycle return to the state ([theta] = 0, C = 0) where the chain falls off. During these hundred and one revolutions, Turing’s bicycle has proceeded for a distance of a fifth of a kilometer down the road, which is not too bad. So the bicycle is usable. However, unlike in the degenerate case, it is not possible for this bicycle to be placed in a state where the chain never falls off at all. This can be proved by going through the above list of values of C, and noticing that every possible value of C—every single number from 0 to 100—is on the list. What this means is that no matter what value C has when Turing begins to pedal, sooner or later it will work its way round to the fatal C = 0 and the chain will fall off. So Turing can leave his bicycle anywhere and be confident that, if stolen, it won’t go more than a fifth of a kilometer before the chain falls off. The difference between the degenerate and nondegenerate cases has to do with the properties of the numbers involved. The combination of (n = 20, l = 100) has radically different properties from (n = 20, l = 101). The key difference is that 20 and 101 are "relatively prime" meaning that they have no factors in common. This means that their least common multiple, their LCM, is a large number—it is, in fact, equal to l × n = 20 × 101 = 2020. Whereas the LCM of 20 and 100 is only 100. The l = 101 bicycle has a long period —it passes through many different states before returning back to the beginning—whereas the l = 100 bicycle has a period of only a few states. Suppose that Turing’s bicycle were a cipher machine that worked by alphabetic substitution, which is to say that it would replace each of the 26 letters of the alphabet with some other letter. An A in the plaintext might become a T in the ciphertext, B might become F, C might be come M, and so on all the way through to Z. In and of itself this would be an absurdly easy cipher to break—kids-in-treehouses stuff. But suppose that the substitution scheme changed from one letter to the next. That is, suppose that after the first letter of the plaintext was enciphered using one particular substitution alphabet, the second letter of plaintext was enciphered using a completely different substitution alphabet, and the third letter a different one yet, and so on. This is called a polyalphabetic cipher. Suppose that Turing’s bicycle were capable of generating a different alphabet for each one of its different states. So the state ([theta] = 0, C = 0) would correspond to, say, this substitution alphabet: a b c d e f g h i j k l m n o p q r s t u v w x y z q g u w b i y t f k v n d o h e p x l z r c a s j m but the state ([theta] = 180, C = 15) would correspond to this (different) one: a b c d e f g h i j k l m n o p q r s t u v w x y z b o r i x v g y p f j m t c q n h a z u k l d s e w No two letters would be enciphered using the same substitution alphabet—until, that is, the bicycle worked its way back around to the initial state ([theta] = 0, C = 0) and began to repeat the cycle. This means that it is a periodic polyalphabetic system. Now, if this machine had a short period, it would repeat itself frequently, and would therefore be useful, as an encryption system, only against kids in treehouses. The longer its period (the more relative primeness is built into it) the less frequently it cycles back to the same substitution alphabet, and the more secure it is. The three-wheel Enigma is just that type of system (i.e., periodic polyalphabetic). Its wheels, like the drive train of Turing’s bicycle, embody cycles within cycles. Its period is 17,576, which means that the substitution alphabet that enciphers the first letter of a message will not be used again until the 17,577th letter is reached. But with Shark the Germans have added a fourth wheel, bumping the period up to 456,976. The wheels are set in a different, randomly chosen starting position at the beginning of each message. Since the Germans’ messages are never as long as 450,000 characters, the Enigma never reuses the same substitution alphabet in the course of a given message, which is why the Germans think it’s so good. - Neal Stephenson, Cryptonomicon