LATEST DISCOUNTS & SALES: PROMOTIONS

Close Notification

Your cart does not contain any items

Implementing SSL / TLS Using Cryptography and PKI

Joshua Davies

$104.95

Paperback

Not in-store but you can order this
How long will it take?

QTY:

English
John Wiley & Sons Inc
23 December 2010
Hands-on, practical guide to implementing SSL and TLS protocols for Internet security

If you are a network professional who knows C programming, this practical book is for you.  Focused on how to implement Secure Socket Layer (SSL) and Transport Layer Security (TLS), this book guides you through all necessary steps, whether or not you have a working knowledge of cryptography. The book covers SSLv2, TLS 1.0, and TLS 1.2, including implementations of the relevant cryptographic protocols, secure hashing, certificate parsing, certificate generation, and more. 

Coverage includes:

Understanding Internet Security Protecting against Eavesdroppers with Symmetric Cryptography Secure Key Exchange over an Insecure Medium with Public Key Cryptography Authenticating Communications Using Digital Signatures Creating a Network of Trust Using X.509 Certificates A Usable, Secure Communications Protocol: Client-Side TLS Adding Server-Side TLS 1.0 Support Advanced SSL Topics Adding TLS 1.2 Support to Your TLS Library Other Applications of SSL A Binary Representation of Integers: A Primer Installing TCPDump and OpenSSL Understanding the Pitfalls of SSLv2

Set up and launch a working implementation of SSL with this practical guide.

By:  
Imprint:   John Wiley & Sons Inc
Country of Publication:   United States
Dimensions:   Height: 234mm,  Width: 188mm,  Spine: 41mm
Weight:   907g
ISBN:   9780470920411
ISBN 10:   0470920416
Pages:   704
Publication Date:  
Audience:   General/trade ,  ELT Advanced
Format:   Paperback
Publisher's Status:   Active
Introduction xxvii Chapter 1 Understanding Internet Security 1 What Are Secure Sockets? 2 “Insecure” Communications: Understanding the HTTP Protocol 4 Implementing an HTTP Client 5 Adding Support for HTTP Proxies 12 Reliable Transmission of Binary Data with Base64 Encoding 17 Implementing an HTTP Server 21 Roadmap for the Rest of This Book 27 Chapter 2 Protecting Against Eavesdroppers with Symmetric Cryptography 29 Understanding Block Cipher Cryptography Algorithms 30 Implementing the Data Encryption Standard (DES) Algorithm 31 DES Initial Permutation 34 DES Key Schedule 38 DES Expansion Function 40 DES Decryption 45 Padding and Chaining in Block Cipher Algorithms 46 Using the Triple-DES Encryption Algorithm to Increase Key Length 55 Faster Encryption with the Advanced Encryption Standard (AES) Algorithm 60 AES Key Schedule Computation 60 AES Encryption 67 Other Block Cipher Algorithms 83 Understanding Stream Cipher Algorithms 83 Understanding and Implementing the RC4 Algorithm 84 Chapter 3 Converting a Block Cipher to a Stream Cipher: The OFB and COUNTER Block-Chaining Modes 90 Secure Key Exchange over an Insecure Medium with Public Key Cryptography 91 Understanding the Theory Behind the RSA Algorithm 92 Performing Arbitrary Precision Binary Math to Implement Public-Key Cryptography 93 Implementing Large-Number Addition 93 Implementing Large-Number Subtraction 98 Implementing Large-Number Multiplication 101 Implementing Large-Number Division 106 Comparing Large Numbers 109 Optimizing for Modulo Arithmetic 112 Using Modulus Operations to Efficiently Compute Discrete Logarithms in a Finite Field 113 Encryption and Decryption with RSA 114 Encrypting with RSA 115 Decrypting with RSA 119 Encrypting a Plaintext Message 120 Decrypting an RSA-Encrypted Message 124 Testing RSA Encryption and Decryption 126 Achieving Perfect Forward Secrecy with Diffie-Hellman Key Exchange 130 Getting More Security per Key Bit: Elliptic Curve Cryptography 132 How Elliptic Curve Cryptography Relies on Modular Inversions 135 Using the Euclidean Algorithm to compute Greatest Common Denominators 135 Computing Modular Inversions with the Extended Euclidean Algorithm 137 Adding Negative Number Support to the Huge Number Library 138 Supporting Negative Remainders 147 Making ECC Work with Whole Integers: Elliptic-Curve Cryptography over Fp 150 Reimplementing Diffie-Hellman to Use ECC Primitives 150 Why Elliptic-Curve Cryptography? 154 Chapter 4 Authenticating Communications Using Digital Signatures 157 Using Message Digests to Create Secure Document Surrogates 158 Implementing the MD5 Digest Algorithm 159 Understanding MD 5 160 A Secure Hashing Example 161 Securely Hashing a Single Block of Data 166 MD5 Vulnerabilities 169 Increasing Collision Resistance with the SHA- 1 Digest Algorithm 171 Understanding SHA-1 Block Computation 171 Understanding the SHA-1 Input Processing Function 174 Understanding SHA-1 Finalization 176 Even More Collision Resistance with the SHA- 256 Digest Algorithm 180 Preventing Replay Attacks with the HMAC Keyed-Hash Algorithm 184 Implementing a Secure HMAC Algorithm 186 Completing the HMAC Operation 190 Creating Updateable Hash Functions 190 Defining a Digest Structure 191 Appending the Length to the Last Block 194 Computing the MD5 Hash of an Entire File 196 Where Does All of This Fit into SSL? 200 Understanding Digital Signature Algorithm (DSA) Signatures 201 Implementing Sender-Side DSA Signature Generation 202 Implementing Receiver-Side DSA Signature Verification 205 How to Make DSA Efficient 209 Getting More Security per Bit: Elliptic Curve DSA 210 Rewriting the Elliptic-Curve Math Functions to Support Large Numbers 211 Implementing ECDSA 215 Generating ECC Keypairs 218 Chapter 5 Creating a Network of Trust Using X.509 Certificates 221 Putting It Together: The Secure Channel Protocol 222 Encoding with ASN.1 225 Understanding Signed Certificate Structure 225 Version 226 serialNumber 227 signature 227 issuer 229 validity 232 subject 233 subjectPublicKeyInfo 235 extensions 237 Signed Certificates 238 Summary of X.509 Certificates 241 Transmitting Certificates with ASN.1 Distinguished Encoding Rules (DER) 241 Encoded Values 241 Strings and Dates 242 Bit Strings 243 Sequences and Sets: Grouping and Nesting ASN.1 Values 243 ASN.1 Explicit Tags 244 A Real-World Certificate Example 244 Using OpenSSL to Generate an RSA KeyPair and Certificate 244 Using OpenSSL to Generate a DSA KeyPair and Certificate 251 Developing an ASN.1 Parser 252 Converting a Byte Stream into an ASN.1 Structure 252 The asn1parse Code in Action 259 Turning a Parsed ASN.1 Structure into X.509 Certificate Components 264 Joining the X.509 Components into a Completed X. 509 Certificate Structure 268 Parsing Object Identifiers (OIDs) 270 Parsing Distinguished Names 271 Parsing Certificate Extensions 275 Signature Verification 279 Validating PKCS #7-Formatted RSA Signatures 280 Verifying a Self-Signed Certificate 281 Adding DSA Support to the Certificate Parser 286 Managing Certificates 292 How Authorities Handle Certificate Signing Requests (CSRs) 292 Correlating Public and Private Keys Using PKCS # 12 Formatting 293 Blacklisting Compromised Certificates Using Certificate Revocation Lists (CRLs) 294 Keeping Certificate Blacklists Up-to-Date with the Online Certificate Status Protocol (OCSP) 295 Other Problems with Certificates 296 Chapter 6 A Usable, Secure Communications Protocol: Client-Side TLS 297 Implementing the TLS 1.0 Handshake (Client Perspective) 299 Adding TLS Support to the HTTP Client 300 Understanding the TLS Handshake Procedure 303 TLS Client Hello 304 Tracking the Handshake State in the TLSParameters Structure 304 Describing Cipher Suites 308 Flattening and Sending the Client Hello Structure 309 TLS Server Hello 316 Adding a Receive Loop 317 Sending Alerts 318 Parsing the Server Hello Structure 319 Reporting Server Alerts 323 TLS Certificate 324 TLS Server Hello Done 328 TLS Client Key Exchange 329 Sharing Secrets Using TLS PRF (Pseudo-Random Function) 329 Creating Reproducible, Unpredictable Symmetric Keys with Master Secret Computation 336 RSA Key Exchange 337 Diffie-Hellman Key Exchange 343 TLS Change Cipher Spec 344 TLS Finished 346 Computing the Verify Message 347 Correctly Receiving the Finished Message 352 Secure Data Transfer with TLS 353 Assigning Sequence Numbers 353 Supporting Outgoing Encryption 355 Adding Support for Stream Ciphers 358 Updating Each Invocation of send_message 359 Decrypting and Authenticating 361 TLS Send 364 TLS Receive 365 Implementing TLS Shutdown 368 Examining HTTPS End-to-end Examples (TLS 1.0) 369 Dissecting the Client Hello Request 370 Dissecting the Server Response Messages 372 Dissecting the Key Exchange Message 373 Decrypting the Encrypted Exchange 374 Exchanging Application Data 377 Differences Between SSL 3.0 and TLS 1.0 378 Differences Between TLS 1.0 and TLS 1.1 379 Chapter 7 Adding Server-Side TLS 1.0 Support 381 Implementing the TLS 1.0 Handshake from the Server’s Perspective 381 TLS Client Hello 387 TLS Server Hello 390 TLS Certificate 391 TLS Server Hello Done 393 TLS Client Key Exchange 394 RSA Key Exchange and Private Key Location 395 Supporting Encrypted Private Key Files 399 Checking That Decryption was Successful 406 Completing the Key Exchange 407 TLS Change Cipher Spec 409 TLS Finished 409 Avoiding Common Pitfalls When Adding HTTPS Support to a Server 411 When a Browser Displays Errors: Browser Trust Issues 412 Chapter 8 Advanced SSL Topics 415 Passing Additional Information with Client Hello Extensions 415 Safely Reusing Key Material with Session Resumption 420 Adding Session Resumption on the Client Side 421 Requesting Session Resumption 422 Adding Session Resumption Logic to the Client 422 Restoring the Previous Session’s Master Secret 424 Testing Session Resumption 425 Viewing a Resumed Session 427 Adding Session Resumption on the Server Side 428 Assigning a Unique Session ID to Each Session 429 Adding Session ID Storage 429 Modifying parse_client_hello to Recognize Session Resumption Requests 433 Drawbacks of This Implementation 435 Avoiding Fixed Parameters with Ephemeral Key Exchange 436 Supporting the TLS Server Key Exchange Message 437 Authenticating the Server Key Exchange Message 439 Examining an Ephemeral Key Exchange Handshake 442 Verifying Identity with Client Authentication 448 Supporting the CertificateRequest Message 449 Adding Certificate Request Parsing Capability for the Client 450 Handling the Certificate Request 452 Supporting the Certificate Verify Message 453 Refactoring rsa_encrypt to Support Signing 453 Testing Client Authentication 458 Viewing a Mutually-Authenticated TLS Handshake 460 Dealing with Legacy Implementations: Exportable Ciphers 463 Export-Grade Key Calculation 463 Step-up Cryptography 465 Discarding Key Material Through Session Renegotiation 465 Supporting the Hello Request 466 Renegotiation Pitfalls and the Client Hello Extension 0xFF01 468 Defending Against the Renegotiation Attack 469 Implementing Secure Renegotiation 471 Chapter 9 Adding TLS 1.2 Support to Your TLS Library 479 Supporting TLS 1.2 When You Use RSA for the Key Exchange 479 TLS 1.2 Modifications to the PRF 481 TLS 1.2 Modifications to the Finished Messages Verify Data 483 Impact to Diffie-Hellman Key Exchange 485 Parsing Signature Types 485 Adding Support for AEAD Mode Ciphers 490 Maximizing Throughput with Counter Mode 490 Reusing Existing Functionality for Secure Hashes with CBC-MAC 494 Combining CTR and CBC-MAC into AES-CCM 496 Maximizing MAC Throughput with Galois-Field Authentication 502 Combining CTR and Galois-Field Authentication with AES-GCM 505 Authentication with Associated Data 510 Incorporating AEAD Ciphers into TLS 1.2 517 Working ECC Extensions into the TLS Library 523 ECDSA Certificate Parsing 527 ECDHE Support in TLS 533 ECC Client Hello Extensions 540 The Current State of TLS 1.2 540 Chapter 10 Other Applications of SSL 543 Adding the NTTPS Extension to the NTTP Algorithm 543 Implementing “Multi-hop” SMTP over TLS and Protecting Email Content with S/MIME 545 Understanding the Email Model 545 The SSL/TLS Design and Email 546 Multipurpose Internet Mail Extensions (MIME) 547 Protecting Email from Eavesdroppers with S/MIME 549 Securing Email When There Are Multiple Recipients 550 S/MIME Certificate Management 552 Securing Datagram Traffic 552 Securing the Domain Name System 553 Using the DNS Protocol to Query the Database 555 Disadvantages of the DNS Query 555 Preventing DNS Cache Poisoning with DNSSEC 556 TLS Without TCP — Datagram TLS 559 Supporting SSL When Proxies Are Involved 560 Possible Solutions to the Proxy Problem 560 Adding Proxy Support Using Tunneling 561 SSL with OpenSSL 564 Final Thoughts 566 Appendix A Binary Representation of Integers: A Primer 567 The Decimal and Binary Numbering Systems 567 Understanding Binary Logical Operations 568 The AND Operation 568 The OR Operation 569 The NOT Operation 569 The XOR Operation 569 Position Shifting of Binary Numbers 570 Two’s-Complement Representation of Negative Numbers 570 Big-Endian versus Little-Endian Number Formats 571 Appendix B Installing TCPDump and OpenSSL 573 Installing TCPDump 573 Installing TCPDump on a Windows System 574 Installing TCPDump on a Linux System 575 Installing OpenSSL 575 Installing OpenSSL on a Windows System 575 Installing OpenSSL on a Linux system 577 Appendix C Understanding the Pitfalls of SSLv 2 579 Implementing the SSL Handshake 582 SSL Client Hello 588 SSL Server Hello 592 SSL Client Master Key 600 SSL Client Finished 607 SSL Server Verify 612 SSL Server Finished 616 SSL send 617 SSL recv 617 Examining an HTTPS End-to-End Example 619 Viewing the TCPDump Output 619 Problems with SSLv 2 626 Man-in-the-Middle Attacks 626 Truncation Attacks 626 Same Key Used for Encryption and Authentication 626 No Extensions 627 Index 629

Joshua Davies is a principal architect for Travelocity.com, responsible for the architecture of the main Web site with a focus on networking and security. Previously, he designed distributed systems for AT&T, Digex, and the Mexican telecommunications giant Pegaso.

See Also