|
About the Author |
xiii |
|
Preface |
xv |
|
Book Notes |
xvii |
| 0.1 |
Notes On the Third Edition |
2 |
| 0.2 |
Notes On the Second Edition |
3 |
| 1 |
Framing Information |
5 |
| 1.0.1 |
Reasons for Secrecy |
7 |
| 1.0.2 |
How It Is Done |
9 |
| 1.0.3 |
How Steganography Is Used |
11 |
| 1.0.4 |
Attacks on Steganography |
12 |
| 1.1 |
Adding Context |
16 |
| 2 |
Encryption |
19 |
| 2.1 |
Pure White |
19 |
| 2.2 |
Encryption and White Noise |
20 |
| 2.2.1 |
DES and Modern Ciphers |
24 |
| 2.2.2 |
Public-Key Encryption |
28 |
| 2.2.3 |
How Random Is the Noise? |
29 |
| 2.3 |
Measuring and Encrypting Information |
31 |
| 2.3.1 |
RSA Encryption |
33 |
| 2.4 |
Summary |
35 |
| 3 |
Error Correction |
37 |
| 3.1 |
Close but No Cigar |
37 |
| 3.2 |
Correcting Errors |
37 |
| 3.2.1 |
Error Correction and White Noise |
44 |
| 3.2.2 |
Error Correction and Secret Sharing |
45 |
| 3.3 |
Constructing Error-Correcting Codes |
46 |
| 3.3.1 |
Periodic Codes |
49 |
| 3.4 |
Summary |
51 |
| 4 |
Secret Sharing |
55 |
| 4.1 |
Two out of Three Musketeers |
55 |
| 4.2 |
Splitting Up Secrets |
56 |
| 4.2.1 |
Requiring All Parts |
57 |
| 4.2.2 |
Letting Parts Slide |
59 |
| 4.2.3 |
A More Efficient Method |
62 |
| 4.2.4 |
Providing Deniability |
62 |
| 4.3 |
Building Secret-Sharing Schemes |
63 |
| 4.3.1 |
Making Some More Equal |
65 |
| 4.4 |
Public-Key Secret Sharing |
66 |
| 4.5 |
Steganographic File Systems and Secret Sharing |
67 |
| 4.6 |
Summary |
71 |
| 5 |
Compression |
73 |
| 5.1 |
Television Listing |
73 |
| 5.2 |
Patterns and Compression |
74 |
| 5.2.1 |
Huffman Coding |
77 |
| 5.3 |
Building Compression Algorithms |
79 |
| 5.3.1 |
Huffman Compression |
80 |
| 5.3.2 |
Dictionary Compression |
82 |
| 5.3.3 |
JPEG Compression |
83 |
| 5.3.4 |
GZSteg |
84 |
| 5.4 |
Summary |
85 |
| 6 |
Basic Mimicry |
87 |
| 6.1 |
Reading between the Lines |
87 |
| 6.2 |
Running in Reverse |
88 |
| 6.2.1 |
Choosing the Next Letter |
92 |
| 6.3 |
Implementing the Mimicry |
94 |
| 6.3.1 |
Goosing with Extra Data |
97 |
| 6.3.2 |
Regular Mimicry and Images |
99 |
| 6.4 |
Summary |
100 |
| 7 |
Grammars and Mimicry |
103 |
| 7.1 |
Evolution of Everyday Things |
103 |
| 7.2 |
Using Grammar for Mimicry |
105 |
| 7.2.1 |
Context-Free Grammars |
105 |
| 7.2.2 |
Parsing and Going Back |
109 |
| 7.2.3 |
How Good Is It? |
111 |
| 7.3 |
Creating Grammar-Based Mimicry |
114 |
| 7.3.1 |
Parsing the Output |
117 |
| 7.3.2 |
Suggestions for Building Grammars |
118 |
| 7.3.3 |
Scrambled Grammars |
119 |
| 7.3.4 |
Assessing the Theoretical Security of Mimicry |
128 |
| 7.3.5 |
Efficient Mimicry-Based Codes |
131 |
| 7.4 |
Summary |
132 |
| 8 |
Turing and Reverse |
137 |
| 8.1 |
Doggie's Little Get Along |
137 |
| 8.2 |
Running Backward |
138 |
| 8.2.1 |
Reversing Gears |
142 |
| 8.3 |
Building a Reversible Machine |
148 |
| 8.3.1 |
Reversible Turing Machines |
148 |
| 8.3.2 |
Reversible Grammar Generators |
150 |
| 8.3.3 |
The Reversible Grammar Machine |
153 |
| 8.4 |
Summary |
156 |
| 9 |
Life in the Noise |
159 |
| 9.1 |
Boy-Zs in Noizy, Idaho |
159 |
| 9.2 |
Hiding in the Noise |
161 |
| 9.2.1 |
Problems with the Noise |
162 |
| 9.2.2 |
Good noise? |
163 |
| 9.2.3 |
Independence Problems |
165 |
| 9.2.4 |
File Format Grief |
167 |
| 9.2.5 |
Deniability |
170 |
| 9.2.6 |
Finding Edges |
172 |
| 9.3 |
Bit Twiddling |
172 |
| 9.3.1 |
Working with GIFs |
172 |
| 9.3.2 |
Smarter Color Reduction |
177 |
| 9.3.3 |
Sound Files |
180 |
| 9.4 |
Random Walks and Subsets |
180 |
| 9.4.1 |
Empty Disk Space |
184 |
| 9.5 |
Putting JPEG to Use |
185 |
| 9.5.1 |
Hiding Information in JPEG Files |
189 |
| 9.5.2 |
Outguess |
190 |
| 9.5.3 |
F4 and F5 |
191 |
| 9.6 |
Summary |
193 |
| 10 |
Anonymous Remailers |
195 |
| 10.1 |
Dr. Anon to You |
195 |
| 10.2 |
Anonymous Remailers |
197 |
| 10.2.1 |
Enhancements |
199 |
| 10.2.2 |
Using Remailers |
199 |
| 10.2.3 |
Using Private Idaho |
201 |
| 10.2.4 |
Web Remailers |
201 |
| 10.3 |
Remailer Guts |
203 |
| 10.3.1 |
Other Remailer Packages |
206 |
| 10.3.2 |
Splitting Paths |
208 |
| 10.4 |
Anonymous Networks |
210 |
| 10.4.1 |
Freedom Network |
210 |
| 10.4.2 |
PipeNet |
211 |
| 10.4.3 |
Crowds |
212 |
| 10.4.4 |
Freenet |
212 |
| 10.4.5 |
OceanStore |
214 |
| 10.5 |
Long term storage |
215 |
| 10.5.1 |
Eternity Server |
215 |
| 10.5.2 |
Entanglement |
216 |
| 10.6 |
Publius |
218 |
| 10.7 |
Onion Routing |
220 |
| 10.7.1 |
Establishing a Circuit |
221 |
| 10.7.2 |
More Indirection: Hidden Services |
224 |
| 10.7.3 |
Stopping Bad Users |
228 |
| 10.8 |
Anonymous Auction Protocols |
230 |
| 10.9 |
The Future |
231 |
| 10.10 |
Summary |
231 |
| 11 |
Secret Broadcasts |
235 |
| 11.1 |
Table Talk |
235 |
| 11.2 |
Secret Senders |
235 |
| 11.3 |
Creating a DC Net |
239 |
| 11.3.1 |
Cheating DC Nets |
241 |
| 11.4 |
Summary |
242 |
| 12 |
Keys |
245 |
| 12.1 |
The Key Vision |
245 |
| 12.2 |
Extending Control |
246 |
| 12.3 |
Signing Algorithms |
248 |
| 12.4 |
Public-Key Algorithms |
249 |
| 12.4.1 |
Leveraging Public-Key Cryptography |
250 |
| 12.4.2 |
Constraining Hard Problems |
250 |
| 12.4.3 |
Using Matrix Multiplication |
253 |
| 12.4.4 |
Removing Parts |
255 |
| 12.5 |
Zero Knowledge Approaches |
256 |
| 12.5.1 |
Discrete Logs for Proofs |
260 |
| 12.6 |
Collusion Control |
262 |
| 12.7 |
Summary |
263 |
| 13 |
Ordering and Reordering |
265 |
| 13.1 |
Top 10 Reasons Why Top 10 Lists Fail |
265 |
| 13.2 |
Introduction |
266 |
| 13.3 |
Strength Against Scrambling |
267 |
| 13.4 |
Invariant Forms |
269 |
| 13.5 |
Canonical Forms |
269 |
| 13.6 |
Packing in Multiple Messages |
270 |
| 13.7 |
Sorting to Hide Information |
271 |
| 13.8 |
Word Scrambling |
273 |
| 13.9 |
Adding Extra Packets |
274 |
| 13.10 |
Port Knocking |
275 |
| 13.10.1 |
Enhancing Port Knocking |
276 |
| 13.11 |
Continuous Use and Jamming |
278 |
| 13.12 |
Summary |
279 |
| 14 |
Spreading |
281 |
| 14.1 |
A New Job |
281 |
| 14.2 |
Spreading the Information |
283 |
| 14.3 |
Going Digital |
287 |
| 14.3.1 |
An example |
288 |
| 14.3.2 |
Synchronization |
291 |
| 14.3.3 |
Strengthening the System |
292 |
| 14.3.4 |
Packing Multiple Messages |
293 |
| 14.4 |
Comparative Blocks |
294 |
| 14.4.1 |
Minimizing Quantization Errors |
296 |
| 14.4.2 |
Perturbed Quantization |
296 |
| 14.5 |
Fast Fourier Solutions |
298 |
| 14.5.1 |
Some Brief Calculus |
300 |
| 14.6 |
The Fast Fourier Transform |
301 |
| 14.7 |
Hiding Information with FFTs and DCTs |
305 |
| 14.7.1 |
Tweaking a Number of Coefficients |
307 |
| 14.7.2 |
Removing the Original from the Detection Process |
310 |
| 14.7.3 |
Tempering the Wake |
310 |
| 14.8 |
Wavelets |
311 |
| 14.9 |
Modifications |
313 |
| 14.10 |
Summary |
315 |
| 15 |
Synthetic Worlds |
319 |
| 15.1 |
Slam Dunks |
319 |
| 15.2 |
Created Worlds |
320 |
| 15.3 |
Text Position Encoding and OCR |
322 |
| 15.3.1 |
Positioning |
323 |
| 15.3.2 |
MandelSteg and Secrets |
325 |
| 15.4 |
Echo Hiding |
326 |
| 15.5 |
Summary |
327 |
| 16 |
Watermarks |
329 |
| 16.1 |
A Patent for Watermarking Humans |
329 |
| 16.2 |
Tagging Digital Documents |
330 |
| 16.2.1 |
A Watermarking Taxonomy |
332 |
| 16.3 |
A Basic Watermark |
335 |
| 16.3.1 |
Choosing the Coefficients |
337 |
| 16.4 |
An Averaging Watermark |
337 |
| 16.4.1 |
Effects of Distortion |
339 |
| 16.4.2 |
Birthday Marks |
339 |
| 16.5 |
Summary |
341 |
| 17 |
Steganalysis |
343 |
| 17.1 |
Code Words |
343 |
| 17.2 |
Finding Hidden Messages |
343 |
| 17.3 |
Typical Approaches |
345 |
| 17.4 |
Visual and Aural Attacks |
346 |
| 17.4.1 |
Visual Attacks |
346 |
| 17.4.2 |
Aural Attacks |
349 |
| 17.5 |
Structural Attacks |
350 |
| 17.5.1 |
Interpolated Images |
352 |
| 17.6 |
Statistical Attacks |
354 |
| 17.6.1 |
Wavelet Statistics |
356 |
| 17.6.2 |
Re-alignment |
357 |
| 17.7 |
Summary |
357 |
| 18 |
Obfuscation |
361 |
| 18.1 |
Regulation |
361 |
| 18.2 |
Code Rearrangement |
362 |
| 18.3 |
Compiling Intelligence |
363 |
| 18.4 |
Real Tools |
368 |
| 18.5 |
Summary |
369 |
| 19 |
Synchronization |
371 |
| 19.1 |
Stealing Baseball's Signs |
371 |
| 19.2 |
Getting In Sync |
372 |
| 19.3 |
Extending Other Tools |
373 |
| 19.4 |
Summary |
376 |
| 20 |
Translucent Databases |
379 |
| 20.1 |
Missed Connections |
379 |
| 20.2 |
Hiding In Databases |
379 |
| 20.2.1 |
One-way Functions |
381 |
| 20.3 |
Using Strong One-Way Functions |
382 |
| 20.3.1 |
One-Way Functions and Steganography |
382 |
| 20.4 |
Summary |
383 |
| 21 |
Plain Sight |
385 |
| 21.1 |
Laughtracks |
385 |
| 21.2 |
Hiding in the Open |
386 |
| 21.3 |
Other Formats |
387 |
| 21.3.1 |
Microformats |
389 |
| 21.3.2 |
Rice's Theorem |
390 |
| 21.4 |
Summary |
391 |
| 22 |
Coda |
393 |
| A |
Java Mimic Code |
397 |
| A.1 |
BitInput |
397 |
| A.2 |
CTMimicCentral |
397 |
| A.3 |
Globals |
399 |
| A.4 |
WordNode |
399 |
| A.5 |
BitNode |
400 |
| A.6 |
ProductionNode |
400 |
| A.7 |
VariableNode |
401 |
| A.8 |
MimicProdNode |
402 |
| A.9 |
MimicParseFrame |
402 |
| A.10 |
NextWordResponse |
402 |
| A.11 |
CTTableSetter |
403 |
| A.12 |
MyIntegerWrapper |
403 |
| A.13 |
MimicParser |
403 |
| A.14 |
OutSpitter |
412 |
| A.15 |
RandomBits |
414 |
| A.16 |
StringBufferBitInput |
415 |
| A.17 |
TableSetter |
417 |
| A.18 |
WordEater |
425 |
| B |
Baseball CFG |
427 |
| C |
Reversable Grammar Generator |
441 |
| D |
Software |
453 |
| D.1 |
Commercial Packages |
453 |
| D.2 |
Open Packages |
454 |
| D.3 |
Steganalysis Software |
457 |