| Preface |
|
xv | |
|
1 Introduction to cryptography |
|
|
1 | (22) |
|
1.1 Hiding information: Confidentiality |
|
|
1 | (2) |
|
1.2 Some basic definitions |
|
|
3 | (2) |
|
1.3 Attacks on a cryptosystem |
|
|
5 | (2) |
|
1.4 Some cryptographic problems |
|
|
7 | (1) |
|
1.5 Cryptographic protocols |
|
|
8 | (4) |
|
|
|
12 | (6) |
|
1.7 Cryptography and computer security |
|
|
18 | (1) |
|
|
|
19 | (4) |
|
|
|
20 | (3) |
|
|
|
23 | (32) |
|
|
|
23 | (1) |
|
2.2 Some basic definitions |
|
|
23 | (4) |
|
2.3 Some number theoretic calculations |
|
|
27 | (17) |
|
|
|
44 | (3) |
|
|
|
47 | (8) |
|
|
|
48 | (7) |
|
3 Classical cryptosystems |
|
|
55 | (24) |
|
|
|
55 | (1) |
|
|
|
56 | (1) |
|
|
|
57 | (1) |
|
3.4 Transposition ciphers |
|
|
58 | (3) |
|
|
|
61 | (4) |
|
|
|
65 | (1) |
|
|
|
65 | (1) |
|
|
|
66 | (5) |
|
|
|
71 | (8) |
|
|
|
71 | (8) |
|
4 Introduction to information theory |
|
|
79 | (14) |
|
4.1 Entropy and uncertainty |
|
|
79 | (3) |
|
|
|
82 | (2) |
|
4.3 Estimating the entropy of English |
|
|
84 | (4) |
|
|
|
88 | (1) |
|
|
|
89 | (4) |
|
|
|
89 | (4) |
|
5 Public-key cryptosystems based on factoring |
|
|
93 | (26) |
|
|
|
93 | (1) |
|
|
|
93 | (6) |
|
|
|
99 | (2) |
|
|
|
101 | (3) |
|
|
|
104 | (5) |
|
5.6 Rabin's cryptosystem in Sage |
|
|
109 | (2) |
|
5.7 Some notes on security |
|
|
111 | (1) |
|
|
|
112 | (3) |
|
|
|
115 | (4) |
|
|
|
115 | (4) |
|
6 Public-key cryptosystems based on logarithms and knapsacks |
|
|
119 | (26) |
|
6.1 El Gamal's cryptosystem |
|
|
119 | (3) |
|
|
|
122 | (3) |
|
6.3 Computing discrete logarithms |
|
|
125 | (2) |
|
6.4 Diffie-Hellman key exchange |
|
|
127 | (1) |
|
6.5 Knapsack cryptosystems |
|
|
128 | (9) |
|
6.6 Breaking the knapsack |
|
|
137 | (2) |
|
|
|
139 | (6) |
|
|
|
140 | (5) |
|
|
|
145 | (22) |
|
|
|
145 | (2) |
|
|
|
147 | (3) |
|
7.3 Rabin digital signatures |
|
|
150 | (2) |
|
7.4 The El Gamal digital signature scheme |
|
|
152 | (5) |
|
7.5 The Digital Signature Standard |
|
|
157 | (4) |
|
|
|
161 | (6) |
|
|
|
162 | (5) |
|
8 Block ciphers and the data encryption standard |
|
|
167 | (48) |
|
|
|
167 | (2) |
|
|
|
169 | (2) |
|
8.3 Substitution/permutation ciphers |
|
|
171 | (2) |
|
|
|
173 | (5) |
|
8.5 Exploring modes of encryption |
|
|
178 | (4) |
|
8.6 The Data Encryption Standard |
|
|
182 | (1) |
|
|
|
182 | (1) |
|
|
|
183 | (7) |
|
|
|
190 | (6) |
|
|
|
196 | (8) |
|
|
|
204 | (1) |
|
|
|
205 | (1) |
|
8.13 Experimenting with DES |
|
|
206 | (1) |
|
|
|
207 | (4) |
|
|
|
211 | (4) |
|
|
|
212 | (3) |
|
|
|
215 | (30) |
|
|
|
215 | (4) |
|
9.2 Introduction to fields |
|
|
219 | (3) |
|
9.3 Fundamental algebra of finite fields |
|
|
222 | (2) |
|
|
|
224 | (2) |
|
|
|
226 | (3) |
|
|
|
229 | (1) |
|
9.7 Multiplication and inversion |
|
|
230 | (4) |
|
9.8 Multiplication without power tables |
|
|
234 | (4) |
|
|
|
238 | (7) |
|
|
|
238 | (7) |
|
10 The Advanced Encryption Standard |
|
|
245 | (22) |
|
10.1 Introduction and some history |
|
|
245 | (1) |
|
|
|
246 | (2) |
|
10.3 The layers in detail |
|
|
248 | (4) |
|
|
|
252 | (4) |
|
10.5 Experimenting with AES |
|
|
256 | (2) |
|
10.6 A simplified Rijndael |
|
|
258 | (6) |
|
|
|
264 | (1) |
|
|
|
265 | (2) |
|
|
|
265 | (2) |
|
|
|
267 | (28) |
|
11.1 Uses of hash functions |
|
|
268 | (2) |
|
11.2 Security of hash functions |
|
|
270 | (1) |
|
11.3 Constructing a hash function |
|
|
271 | (10) |
|
11.4 Provably secure hash functions |
|
|
281 | (4) |
|
|
|
285 | (2) |
|
11.6 Message authentication codes |
|
|
287 | (1) |
|
|
|
288 | (1) |
|
|
|
289 | (6) |
|
|
|
289 | (6) |
|
12 Elliptic curves and cryptosystems |
|
|
295 | (38) |
|
|
|
295 | (5) |
|
12.2 The group on an elliptic curve |
|
|
300 | (7) |
|
12.3 Background and history |
|
|
307 | (1) |
|
|
|
308 | (1) |
|
12.5 Elliptic curve cryptosystems |
|
|
309 | (7) |
|
12.6 Elliptic curve signature schemes |
|
|
316 | (1) |
|
12.7 Elliptic curves over binary fields |
|
|
317 | (1) |
|
12.8 Pairing-based cryptography |
|
|
318 | (5) |
|
12.9 Exploring pairings in Sage |
|
|
323 | (3) |
|
|
|
326 | (7) |
|
|
|
327 | (6) |
|
13 Random numbers and stream ciphers |
|
|
333 | (28) |
|
|
|
333 | (1) |
|
13.2 Pseudo-random number generators |
|
|
334 | (4) |
|
13.3 Some cryptographically strong generators |
|
|
338 | (3) |
|
13.4 The shrinking generator |
|
|
341 | (3) |
|
|
|
344 | (2) |
|
|
|
346 | (2) |
|
|
|
348 | (3) |
|
13.8 The Blum-Goldwasser cryptosystem |
|
|
351 | (4) |
|
|
|
355 | (6) |
|
|
|
356 | (5) |
|
14 Advanced applications and protocols |
|
|
361 | (34) |
|
14.1 Secure multi-party computation |
|
|
361 | (5) |
|
14.2 Zero knowledge proofs |
|
|
366 | (5) |
|
|
|
371 | (3) |
|
|
|
374 | (8) |
|
|
|
382 | (6) |
|
|
|
388 | (7) |
|
|
|
389 | (6) |
|
Appendix A Introduction to Sage |
|
|
395 | (16) |
|
A.1 Obtaining and installing Sage |
|
|
395 | (1) |
|
|
|
396 | (1) |
|
|
|
396 | (6) |
|
A.4 Tab completion and help |
|
|
402 | (2) |
|
|
|
404 | (3) |
|
A.6 A programming example |
|
|
407 | (4) |
|
|
|
408 | (3) |
|
Appendix B Advanced computational number theory |
|
|
411 | (14) |
|
|
|
411 | (4) |
|
B.2 The AKS primality test |
|
|
415 | (2) |
|
B.3 Methods of computing discrete logarithms |
|
|
417 | (8) |
|
|
|
423 | (2) |
| Bibliography |
|
425 | (10) |
| Index |
|
435 | |