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 |
- Log in to post comments