SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
ack!
    to St rikes B
Cryp



      Nate Lawson
       August 5, 2009
      Google Tech Talk
My background
• Root Labs founder
  – Design and analyze systems
     • Embedded and kernel security
     • Software protection, DRM
     • Crypto and protocols


• Cryptography Research
  – Reviewed numerous products that use crypto
  – Co-designed Blu-ray disc content protection layer
• Infogard Labs
  – Reviewed crypto products for the FIPS 140 program
• IBM/ISS
  – Original developer of RealSecure IDS


                                                        2
Crypto is deceptively simple and attractive
• Block ciphers, public key, etc. make sense
  conceptually
• Books like Applied Cryptography made it accessible
• Proofs of security, brute-force strength claims are
  appealing




               +               =


                                                        3
No one implements their own ciphers
• Developers got the message that custom ciphers
  are bad
• Many low-level crypto libraries to choose from
  – Java JCE, BouncyCastle
  – Microsoft CryptoAPI, .NET Cryptography
  – OpenSSL, Crypto++
• Pressing question: 128 or 256-bit keys?




                                                   4
Crypto strikes back!
•   Crypto is strong but extremely fragile
•   Requires review 2-10x the development cost
•   Can’t be secured by testing
•   When it fails, you get to change out root keys




                                                     5
Don’t implement your own crypto
• Instead use…
   – SSL for transport
   – GPG for data at rest
• If your design doesn’t seem to fit that model,
  rework it until it does
• If you can’t, use a high-level crypto library
   – Gutmann cryptlib (GPL/commercial)
   – GPGME
   – Keyczar
• Don’t use low-level libraries directly
   – OpenSSL, CryptoAPI, JCE, etc.




                                                   6
Warning signs: bad crypto ahead
• Obvious confusion of terms
  –   “Decrypting” a signature to verify it
  –   Multiple names/terms for the same field/operation
  –   Overly focused on salts as a key security feature
  –   The words “rainbow tables”
• Arguments why non-standard usage is ok,
  based on…
  – Key size
  – Lack of attacker knowledge
  – A blog post

                In its defense, ECB does have valid uses:
                Whole disk encryption, for example.
                Nick Johnson on May 18, 2009 8:10 AM
                              Actually, scratch my earlier - even for whole
                              disk encryption you should be using CTR
                              instead of ECB. :)
                              Nick Johnson on May 18, 2009 9:11 AM
                                                                              7
Warning signs: bad crypto ahead
• Encrypting multiple blocks with RSA
• Insistence that the IV must be kept secret
• Spec diagrams from Wikipedia




                 http://en.wikipedia.org/wiki/HMAC

                                                     8
How to fix Javascript crypto
• Don’t do it; it makes no sense
  – Where did the browser get the code from?
     • The webserver
  – Over?
     • SSL (we hope)
  – And the keys that the Javascript uses?
     • Um, the same webserver


• You have SSL on the client and server, use it
  – Anything you roll yourself is going to be worse
  – Remove the words “Javascript crypto” from your
    vocabulary




                                                      9
System-wide flaws
Upgrading encryption on-the-fly
• Fixing an old, broken cookie scheme
  – Old: CBC-encrypted cookie but no integrity protection
  – New: + HMAC protection of encrypted cookie


• Bright idea: “We’ll upgrade user cookies!”
  –   Decrypt the data, check length of result
  –   Detect old cookie based on version field
  –   Set new version, encrypt with new key, add HMAC
  –   Return it to the user




                                                            11
Bad PRNG or no seeding
• Default “random” PRNGs not a good choice
  – Cryptographic generator has different requirements
     • Constantly re-seeded with new entropy
     • Impossible to guess or even perturb internal state
  – Don’t use:
     • Python random (use random.SystemRandom)
     • java.util.Random (use java.security.SecureRandom)
     • .NET System.Random (use System.Security.Cryptography.
       RandomNumberGenerator)
• Cold boot case
  – Server just rebooted and you’re already getting requests
     • Is there enough entropy?
     • Are you replaying IVs, challenge values, etc.?
  – Wait, who in your company is responsible for this?


                                                               12
Side channel attacks
• Crypto does not operate in a true “black box”
  – Measurability
       • CPU retains state in the form of caches, branch prediction
         buffer, stack data
  – Control
       • Interaction with users and network influences resource usage,
         page protections, scheduling
• Ability to influence and/or measure crypto behavior
  can compromise your keys
  –   Timing
  –   Power analysis
  –   EM radiation
  –   Heat, sound, disk access patterns, etc.




                                                                      13
Encryption flaws
Block cipher modes of operation
• If you know ECB from CBC, give yourself a hand
• Now the following
  – OFB, CFB, CTR
     • Stream cipher constructions
     • Bitwise malleability
     • Fatal if counter or output reused
  – CCM, EAX, GCM, OCB
     • Authenticated encryption
     • Provide integrity protection + encryption
     • Fatal if IV reused
• Decipher this one
  – “TDEA Electronic Code Book (TECB) Mode”




                                                   15
Counter duplication in CTR mode
• You painstakingly made sure to not duplicate the
  counter on the client
  – Using a counter and saving its state in a variable
  – Forcing a key renegotiation if rebooted
     • Or even persisted it to disk


• But what about the server?
  – If using a shared key, you have keystream reuse if the
    server’s counter overlaps the client's



                 1af2                    1ae9

                  KA                      KA


                                                             16
Integrity protection flaws
Custom hash constructions
• Goal: prevent modification of a cookie
• Solution
  – Send SHA1(key || data)
  – User can’t forge the result because they don’t know the
    secret, right?
• Length extension attack
  – See SHA1 init and final operations below:
• Use HMAC instead
                                     Initialize variables:
  – Other ad-hoc constructions       h0 = 0x67452301
    also vulnerable                  h1 = 0xEFCDAB89
                                     h2 = 0x98BADCFE
                                     h3 = 0x10325476
                                     h4 = 0xC3D2E1F0
                                     …
                                     Produce the final hash value:
                                     return (h0 || h1 || h2 || h3 || h4)


                                                                           18
Too much left up to the implementer
• HMAC integrity check with XMLDsig

            <SignatureMethod Algorithm="…xmldsig#hmac-sha1">
                 <HMACOutputLength>160</HMACOutputLength>
            </SignatureMethod>




• Questions…
  – What is wrong with a length of 0 (or 1)?
  – What if an implementer allowed other algorithm selections?
• Why does this field even exist?
  – Saves 10 bytes for SHA-1 but adds 38 bytes of tag
    overhead
  – No backwards-compatibility excuse
  – Yet another field to validate for N implementers

                                                               19
Padding error oracle with CBC encryption
• Plaintext is HMACed, padded to block size, CBC-
  encrypted
  – Example for AES, message length 14 bytes
     Block = p[0], … p[13], 0x01, 0x01
• Server returns two different errors
  – Padding_Incorrect: pad byte was wrong value for specified
    total length
  – Integrity_Failure: padding valid but message modified
• Now you can decrypt bytes
  – Set a block with different guesses for last byte
  – If correct guess, you’ll get Integrity_Failure error
  – Repeat for other bytes




                                                            20
Signature flaws
Incorrectly comparing hash value
• Verifying an RSA signature
  – RSA-Exp(PubKey, SigData)
  – Verify all the padding data as you should
  – return (0 == strncmp(userHash, myHash, 20));
• Attack
  – Create 256 messages, each slightly different
  – Once SHA-1(message) == {00, …}, you win!

             for i in range(256):
                 s = 'The magic number is: ' + i
                 a = sha1(s).hexdigest()
                 if a[:2] == '00':
                     break

             >> The magic number is: 26
                006c60dde4bc…




                                                   22
Lack of structure in signed data
• You have to know exactly what you’re signing!
  – Think of signed data as a command, typed into a global
    root shell, on every cluster in your company
• Amazon Web Services v1
  – Allowed the client to sign a URL
     1. Split the query string using '&' and '=' delimiters
     2. Concatenate all the key/value pairs into a single string
        (key1 || value1 || key2 || value2)
     3. Protect it with HMAC-SHA1(key, data)
• No structure in data means the following are
  equivalent
     …?GoodKey1=GoodValue1BadKey2BadValue2
     …?GoodKey1=GoodValue1&BadKey2=BadValue2




                                                                   23
Bare (no padding) signatures
• Just use RSA directly, why hash first?
• Attack
  – Choose some primes as your messages
  – Get each one signed
  – Now forge any message composed of a combination of
    those primes, their inverses, etc.

                 mA = 3
                 mB = 7
                 sig(3 * 7) = sigA * sigB mod n


• Fun fact: same property that allows blinding




                                                         24
Padding is not something to ignore
• PKCS#1 pads messages to be signed as follows
  – SigData = 00 01 FF … FF 00 <SHA1-OID> <SHA1-HASH>
  – Then, signature is RSA-Exp(PrivKey, SigData)
• Signature verification seems simple
  – Process the sig with RSA-Exp(PubKey, SigData)
  – Strip off padding, find the hash, and compare to the hash
    of the message
• Now attacker can create forgeries
  – For 2048 bit key and 160-bit SHA hash, there are 21888
    inputs that will match
  – With small public exponent, straightforward algebra to
    calculate a colliding signature
• Every bit of padding data must be strictly checked


                                                                25
Public key flaws
DSA fails if random value known
• If the random challenge value k is known, it reveals
  your entire private key
• DSA signature (r, s) is:
    r = gk mod p mod q
    s = k-1 (H(m) + x*r) mod q
• If you know k, you can calculate x as follows:
    x = ((s * k) – H(m)) * r-1 mod q
• Remember that Debian PRNG bug?
  – Every DSA key used on a vulnerable system for a single
    signature is forever compromised
• Surprise!
  – Knowledge of only a few bits of k and multiple signatures is
    sufficient
  – Hidden number problem (Boneh, others)

                                                              27
“Encrypting” with RSA private key
• Example
  – Device has an RSA public key to verify signature on
    firmware updates
  – Idea: keep the public key secret and use it to decrypt the
    updates also
• RSA is incompatible with block cipher thinking
  – You can’t “encrypt” with a private key and keep the public
    key secret
  – An attacker can always figure out the public key (e, n)
    from observing two signatures
            for e in [3, 5, 7, … 65537]:
                n ~= GCD(sig1e – m1, sig2e – m2)
                if m1e mod n == sig1:
                     break



                                                                 28
SRP parameter validation
• SRP gives secure password-based key agreement
• Seems easy, right?




• Like all public-key crypto, very sensitive to choice
  of values


                                                         29
SRP parameter validation bug
• What if client sends A=0?




• Hmm, server does (A * foobar)baz = 0
  – And there are other bad parameters with similar results




                                                              30
But wait, there’s more!
• DH small subgroup confinement attack (Tor, IKE)
  – Sending magic values lets you choose the server’s key
    (similar to SRP attack)
• Encrypting a CRC for an integrity check (SSH v1)
• Fault injection during RSA signing (Pay TV smart
  card glitching)




                                                            31
Conclusion
• Crypto is brittle (easy to mess up)
   – And when it fails, the results are spectacular
• So don’t build your own crypto
   – SSL for transport
   – GPG for data at rest
• If your design doesn’t seem to fit that model,
  rework it until it does
• If you can’t, use a high-level library
   – cryptlib or Keyczar
• Always get a third-party review of any crypto code
   – If you had to design your own, much more extensive
     review required



                                                          32
Contact info



      For more detailed articles on these topics, please see
      my blog linked at: http://rootlabs.com


      Questions?


      Nate Lawson
      nate@rootlabs.com




                                                               33

Contenu connexe

Tendances

Introduction to memcached
Introduction to memcachedIntroduction to memcached
Introduction to memcachedJurriaan Persyn
 
PostgreSQL: Welcome To Total Security
PostgreSQL: Welcome To Total SecurityPostgreSQL: Welcome To Total Security
PostgreSQL: Welcome To Total SecurityRobert Bernier
 
Kerberos, NTLM and LM-Hash
Kerberos, NTLM and LM-HashKerberos, NTLM and LM-Hash
Kerberos, NTLM and LM-HashAnkit Mehta
 
Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to RedisDvir Volk
 
QEMU Disk IO Which performs Better: Native or threads?
QEMU Disk IO Which performs Better: Native or threads?QEMU Disk IO Which performs Better: Native or threads?
QEMU Disk IO Which performs Better: Native or threads?Pradeep Kumar
 
Experiences with Microservices at Tuenti
Experiences with Microservices at TuentiExperiences with Microservices at Tuenti
Experiences with Microservices at TuentiAndrés Viedma Peláez
 
A memcached implementation in Java
A memcached implementation in JavaA memcached implementation in Java
A memcached implementation in Javaelliando dias
 
Usenix LISA 2012 - Choosing a Proxy
Usenix LISA 2012 - Choosing a ProxyUsenix LISA 2012 - Choosing a Proxy
Usenix LISA 2012 - Choosing a ProxyLeif Hedstrom
 
How To Set Up SQL Load Balancing with HAProxy - Slides
How To Set Up SQL Load Balancing with HAProxy - SlidesHow To Set Up SQL Load Balancing with HAProxy - Slides
How To Set Up SQL Load Balancing with HAProxy - SlidesSeveralnines
 
Memory Corruption: from sandbox to SMM
Memory Corruption: from sandbox to SMMMemory Corruption: from sandbox to SMM
Memory Corruption: from sandbox to SMMPositive Hack Days
 
Varnish Configuration Step by Step
Varnish Configuration Step by StepVarnish Configuration Step by Step
Varnish Configuration Step by StepKim Stefan Lindholm
 
Infinit filesystem, Reactor reloaded
Infinit filesystem, Reactor reloadedInfinit filesystem, Reactor reloaded
Infinit filesystem, Reactor reloadedInfinit
 
DeathNote of Microsoft Windows Kernel
DeathNote of Microsoft Windows KernelDeathNote of Microsoft Windows Kernel
DeathNote of Microsoft Windows KernelPeter Hlavaty
 
Linux-HA with Pacemaker
Linux-HA with PacemakerLinux-HA with Pacemaker
Linux-HA with PacemakerKris Buytaert
 
Content Caching with NGINX and NGINX Plus
Content Caching with NGINX and NGINX PlusContent Caching with NGINX and NGINX Plus
Content Caching with NGINX and NGINX PlusKevin Jones
 
Common technique in Bypassing Stuff in Python.
Common technique in Bypassing Stuff in Python.Common technique in Bypassing Stuff in Python.
Common technique in Bypassing Stuff in Python.Shahriman .
 

Tendances (20)

Introduction to memcached
Introduction to memcachedIntroduction to memcached
Introduction to memcached
 
PostgreSQL: Welcome To Total Security
PostgreSQL: Welcome To Total SecurityPostgreSQL: Welcome To Total Security
PostgreSQL: Welcome To Total Security
 
Kerberos, NTLM and LM-Hash
Kerberos, NTLM and LM-HashKerberos, NTLM and LM-Hash
Kerberos, NTLM and LM-Hash
 
Gwc3
Gwc3Gwc3
Gwc3
 
Introduction to Redis
Introduction to RedisIntroduction to Redis
Introduction to Redis
 
QEMU Disk IO Which performs Better: Native or threads?
QEMU Disk IO Which performs Better: Native or threads?QEMU Disk IO Which performs Better: Native or threads?
QEMU Disk IO Which performs Better: Native or threads?
 
Experiences with Microservices at Tuenti
Experiences with Microservices at TuentiExperiences with Microservices at Tuenti
Experiences with Microservices at Tuenti
 
Secure PostgreSQL deployment
Secure PostgreSQL deploymentSecure PostgreSQL deployment
Secure PostgreSQL deployment
 
A memcached implementation in Java
A memcached implementation in JavaA memcached implementation in Java
A memcached implementation in Java
 
Usenix LISA 2012 - Choosing a Proxy
Usenix LISA 2012 - Choosing a ProxyUsenix LISA 2012 - Choosing a Proxy
Usenix LISA 2012 - Choosing a Proxy
 
How To Set Up SQL Load Balancing with HAProxy - Slides
How To Set Up SQL Load Balancing with HAProxy - SlidesHow To Set Up SQL Load Balancing with HAProxy - Slides
How To Set Up SQL Load Balancing with HAProxy - Slides
 
Memory Corruption: from sandbox to SMM
Memory Corruption: from sandbox to SMMMemory Corruption: from sandbox to SMM
Memory Corruption: from sandbox to SMM
 
Varnish Configuration Step by Step
Varnish Configuration Step by StepVarnish Configuration Step by Step
Varnish Configuration Step by Step
 
Infinit filesystem, Reactor reloaded
Infinit filesystem, Reactor reloadedInfinit filesystem, Reactor reloaded
Infinit filesystem, Reactor reloaded
 
DeathNote of Microsoft Windows Kernel
DeathNote of Microsoft Windows KernelDeathNote of Microsoft Windows Kernel
DeathNote of Microsoft Windows Kernel
 
Linux-HA with Pacemaker
Linux-HA with PacemakerLinux-HA with Pacemaker
Linux-HA with Pacemaker
 
All The Little Pieces
All The Little PiecesAll The Little Pieces
All The Little Pieces
 
Content Caching with NGINX and NGINX Plus
Content Caching with NGINX and NGINX PlusContent Caching with NGINX and NGINX Plus
Content Caching with NGINX and NGINX Plus
 
Common technique in Bypassing Stuff in Python.
Common technique in Bypassing Stuff in Python.Common technique in Bypassing Stuff in Python.
Common technique in Bypassing Stuff in Python.
 
All The Little Pieces
All The Little PiecesAll The Little Pieces
All The Little Pieces
 

En vedette

Using FreeBSD to Design a Secure Digital Cinema Server (Usenix 2004)
Using FreeBSD to Design a Secure Digital Cinema Server (Usenix 2004)Using FreeBSD to Design a Secure Digital Cinema Server (Usenix 2004)
Using FreeBSD to Design a Secure Digital Cinema Server (Usenix 2004)Nate Lawson
 
Foundations of Platform Security
Foundations of Platform SecurityFoundations of Platform Security
Foundations of Platform SecurityNate Lawson
 
ACPI and FreeBSD (Part 2)
ACPI and FreeBSD (Part 2)ACPI and FreeBSD (Part 2)
ACPI and FreeBSD (Part 2)Nate Lawson
 
ACPI and FreeBSD (Part 1)
ACPI and FreeBSD (Part 1)ACPI and FreeBSD (Part 1)
ACPI and FreeBSD (Part 1)Nate Lawson
 
Copy Protection Wars: Analyzing Retro and Modern Schemes (RSA 2007)
Copy Protection Wars: Analyzing Retro and Modern Schemes (RSA 2007)Copy Protection Wars: Analyzing Retro and Modern Schemes (RSA 2007)
Copy Protection Wars: Analyzing Retro and Modern Schemes (RSA 2007)Nate Lawson
 
Highway to Hell: Hacking Toll Systems (Blackhat 2008)
Highway to Hell: Hacking Toll Systems (Blackhat 2008)Highway to Hell: Hacking Toll Systems (Blackhat 2008)
Highway to Hell: Hacking Toll Systems (Blackhat 2008)Nate Lawson
 
Don't Tell Joanna the Virtualized Rootkit is Dead (Blackhat 2007)
Don't Tell Joanna the Virtualized Rootkit is Dead (Blackhat 2007)Don't Tell Joanna the Virtualized Rootkit is Dead (Blackhat 2007)
Don't Tell Joanna the Virtualized Rootkit is Dead (Blackhat 2007)Nate Lawson
 
Designing and Attacking DRM (RSA 2008)
Designing and Attacking DRM (RSA 2008)Designing and Attacking DRM (RSA 2008)
Designing and Attacking DRM (RSA 2008)Nate Lawson
 
TLS Optimization
TLS OptimizationTLS Optimization
TLS OptimizationNate Lawson
 
TLS/SSL MAC security flaw
TLS/SSL MAC security flawTLS/SSL MAC security flaw
TLS/SSL MAC security flawNate Lawson
 
TLS/SSL Protocol Design 201006
TLS/SSL Protocol Design 201006TLS/SSL Protocol Design 201006
TLS/SSL Protocol Design 201006Nate Lawson
 
TLS/SSL Protocol Design
TLS/SSL Protocol DesignTLS/SSL Protocol Design
TLS/SSL Protocol DesignNate Lawson
 

En vedette (12)

Using FreeBSD to Design a Secure Digital Cinema Server (Usenix 2004)
Using FreeBSD to Design a Secure Digital Cinema Server (Usenix 2004)Using FreeBSD to Design a Secure Digital Cinema Server (Usenix 2004)
Using FreeBSD to Design a Secure Digital Cinema Server (Usenix 2004)
 
Foundations of Platform Security
Foundations of Platform SecurityFoundations of Platform Security
Foundations of Platform Security
 
ACPI and FreeBSD (Part 2)
ACPI and FreeBSD (Part 2)ACPI and FreeBSD (Part 2)
ACPI and FreeBSD (Part 2)
 
ACPI and FreeBSD (Part 1)
ACPI and FreeBSD (Part 1)ACPI and FreeBSD (Part 1)
ACPI and FreeBSD (Part 1)
 
Copy Protection Wars: Analyzing Retro and Modern Schemes (RSA 2007)
Copy Protection Wars: Analyzing Retro and Modern Schemes (RSA 2007)Copy Protection Wars: Analyzing Retro and Modern Schemes (RSA 2007)
Copy Protection Wars: Analyzing Retro and Modern Schemes (RSA 2007)
 
Highway to Hell: Hacking Toll Systems (Blackhat 2008)
Highway to Hell: Hacking Toll Systems (Blackhat 2008)Highway to Hell: Hacking Toll Systems (Blackhat 2008)
Highway to Hell: Hacking Toll Systems (Blackhat 2008)
 
Don't Tell Joanna the Virtualized Rootkit is Dead (Blackhat 2007)
Don't Tell Joanna the Virtualized Rootkit is Dead (Blackhat 2007)Don't Tell Joanna the Virtualized Rootkit is Dead (Blackhat 2007)
Don't Tell Joanna the Virtualized Rootkit is Dead (Blackhat 2007)
 
Designing and Attacking DRM (RSA 2008)
Designing and Attacking DRM (RSA 2008)Designing and Attacking DRM (RSA 2008)
Designing and Attacking DRM (RSA 2008)
 
TLS Optimization
TLS OptimizationTLS Optimization
TLS Optimization
 
TLS/SSL MAC security flaw
TLS/SSL MAC security flawTLS/SSL MAC security flaw
TLS/SSL MAC security flaw
 
TLS/SSL Protocol Design 201006
TLS/SSL Protocol Design 201006TLS/SSL Protocol Design 201006
TLS/SSL Protocol Design 201006
 
TLS/SSL Protocol Design
TLS/SSL Protocol DesignTLS/SSL Protocol Design
TLS/SSL Protocol Design
 

Similaire à Crypto Strikes Back! Bad Crypto Implementations Exposed

Fixing twitter
Fixing twitterFixing twitter
Fixing twitterRoger Xia
 
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...smallerror
 
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...xlight
 
BSides LV 2016 - Beyond the tip of the iceberg - fuzzing binary protocols for...
BSides LV 2016 - Beyond the tip of the iceberg - fuzzing binary protocols for...BSides LV 2016 - Beyond the tip of the iceberg - fuzzing binary protocols for...
BSides LV 2016 - Beyond the tip of the iceberg - fuzzing binary protocols for...Alexandre Moneger
 
ASRG SOS 2022 Encrypted messaging on CAN bus
ASRG SOS 2022 Encrypted messaging on CAN busASRG SOS 2022 Encrypted messaging on CAN bus
ASRG SOS 2022 Encrypted messaging on CAN busKenTindell
 
High Scalability Toronto: Meetup #2
High Scalability Toronto: Meetup #2High Scalability Toronto: Meetup #2
High Scalability Toronto: Meetup #2ScribbleLive
 
Where Django Caching Bust at the Seams
Where Django Caching Bust at the SeamsWhere Django Caching Bust at the Seams
Where Django Caching Bust at the SeamsConcentric Sky
 
[아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP [아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP iFunFactory Inc.
 
7. Key-Value Databases: In Depth
7. Key-Value Databases: In Depth7. Key-Value Databases: In Depth
7. Key-Value Databases: In DepthFabio Fumarola
 
Open source security
Open source securityOpen source security
Open source securitylrigknat
 
Applied cryptanalysis - everything else
Applied cryptanalysis - everything elseApplied cryptanalysis - everything else
Applied cryptanalysis - everything elseVlad Garbuz
 
SpecterOps Webinar Week - Kerberoasting Revisisted
SpecterOps Webinar Week - Kerberoasting RevisistedSpecterOps Webinar Week - Kerberoasting Revisisted
SpecterOps Webinar Week - Kerberoasting RevisistedWill Schroeder
 
10 application security fundamentals - part 2 - security mechanisms - encry...
10   application security fundamentals - part 2 - security mechanisms - encry...10   application security fundamentals - part 2 - security mechanisms - encry...
10 application security fundamentals - part 2 - security mechanisms - encry...appsec
 
When the internet bleeded : RootConf 2014
When the internet bleeded : RootConf 2014When the internet bleeded : RootConf 2014
When the internet bleeded : RootConf 2014Anant Shrivastava
 
Walking the Bifrost: An Operator's Guide to Heimdal & Kerberos on macOS
Walking the Bifrost: An Operator's Guide to Heimdal & Kerberos on macOSWalking the Bifrost: An Operator's Guide to Heimdal & Kerberos on macOS
Walking the Bifrost: An Operator's Guide to Heimdal & Kerberos on macOSCody Thomas
 
Jay Kreps on Project Voldemort Scaling Simple Storage At LinkedIn
Jay Kreps on Project Voldemort Scaling Simple Storage At LinkedInJay Kreps on Project Voldemort Scaling Simple Storage At LinkedIn
Jay Kreps on Project Voldemort Scaling Simple Storage At LinkedInLinkedIn
 
Continuous Deployment with Cassandra
Continuous Deployment with CassandraContinuous Deployment with Cassandra
Continuous Deployment with CassandraMichael Kjellman
 
Continuous Deployment with Cassandra
Continuous Deployment with CassandraContinuous Deployment with Cassandra
Continuous Deployment with CassandraDataStax Academy
 
What's inside the black box? Using ML to tune and manage Kafka. (Matthew Stum...
What's inside the black box? Using ML to tune and manage Kafka. (Matthew Stum...What's inside the black box? Using ML to tune and manage Kafka. (Matthew Stum...
What's inside the black box? Using ML to tune and manage Kafka. (Matthew Stum...confluent
 

Similaire à Crypto Strikes Back! Bad Crypto Implementations Exposed (20)

Fixing twitter
Fixing twitterFixing twitter
Fixing twitter
 
Fixing_Twitter
Fixing_TwitterFixing_Twitter
Fixing_Twitter
 
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
 
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...Fixing Twitter  Improving The Performance And Scalability Of The Worlds Most ...
Fixing Twitter Improving The Performance And Scalability Of The Worlds Most ...
 
BSides LV 2016 - Beyond the tip of the iceberg - fuzzing binary protocols for...
BSides LV 2016 - Beyond the tip of the iceberg - fuzzing binary protocols for...BSides LV 2016 - Beyond the tip of the iceberg - fuzzing binary protocols for...
BSides LV 2016 - Beyond the tip of the iceberg - fuzzing binary protocols for...
 
ASRG SOS 2022 Encrypted messaging on CAN bus
ASRG SOS 2022 Encrypted messaging on CAN busASRG SOS 2022 Encrypted messaging on CAN bus
ASRG SOS 2022 Encrypted messaging on CAN bus
 
High Scalability Toronto: Meetup #2
High Scalability Toronto: Meetup #2High Scalability Toronto: Meetup #2
High Scalability Toronto: Meetup #2
 
Where Django Caching Bust at the Seams
Where Django Caching Bust at the SeamsWhere Django Caching Bust at the Seams
Where Django Caching Bust at the Seams
 
[아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP [아이펀팩토리] 2017 NDCP
[아이펀팩토리] 2017 NDCP
 
7. Key-Value Databases: In Depth
7. Key-Value Databases: In Depth7. Key-Value Databases: In Depth
7. Key-Value Databases: In Depth
 
Open source security
Open source securityOpen source security
Open source security
 
Applied cryptanalysis - everything else
Applied cryptanalysis - everything elseApplied cryptanalysis - everything else
Applied cryptanalysis - everything else
 
SpecterOps Webinar Week - Kerberoasting Revisisted
SpecterOps Webinar Week - Kerberoasting RevisistedSpecterOps Webinar Week - Kerberoasting Revisisted
SpecterOps Webinar Week - Kerberoasting Revisisted
 
10 application security fundamentals - part 2 - security mechanisms - encry...
10   application security fundamentals - part 2 - security mechanisms - encry...10   application security fundamentals - part 2 - security mechanisms - encry...
10 application security fundamentals - part 2 - security mechanisms - encry...
 
When the internet bleeded : RootConf 2014
When the internet bleeded : RootConf 2014When the internet bleeded : RootConf 2014
When the internet bleeded : RootConf 2014
 
Walking the Bifrost: An Operator's Guide to Heimdal & Kerberos on macOS
Walking the Bifrost: An Operator's Guide to Heimdal & Kerberos on macOSWalking the Bifrost: An Operator's Guide to Heimdal & Kerberos on macOS
Walking the Bifrost: An Operator's Guide to Heimdal & Kerberos on macOS
 
Jay Kreps on Project Voldemort Scaling Simple Storage At LinkedIn
Jay Kreps on Project Voldemort Scaling Simple Storage At LinkedInJay Kreps on Project Voldemort Scaling Simple Storage At LinkedIn
Jay Kreps on Project Voldemort Scaling Simple Storage At LinkedIn
 
Continuous Deployment with Cassandra
Continuous Deployment with CassandraContinuous Deployment with Cassandra
Continuous Deployment with Cassandra
 
Continuous Deployment with Cassandra
Continuous Deployment with CassandraContinuous Deployment with Cassandra
Continuous Deployment with Cassandra
 
What's inside the black box? Using ML to tune and manage Kafka. (Matthew Stum...
What's inside the black box? Using ML to tune and manage Kafka. (Matthew Stum...What's inside the black box? Using ML to tune and manage Kafka. (Matthew Stum...
What's inside the black box? Using ML to tune and manage Kafka. (Matthew Stum...
 

Dernier

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 

Dernier (20)

Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 

Crypto Strikes Back! Bad Crypto Implementations Exposed

  • 1. ack! to St rikes B Cryp Nate Lawson August 5, 2009 Google Tech Talk
  • 2. My background • Root Labs founder – Design and analyze systems • Embedded and kernel security • Software protection, DRM • Crypto and protocols • Cryptography Research – Reviewed numerous products that use crypto – Co-designed Blu-ray disc content protection layer • Infogard Labs – Reviewed crypto products for the FIPS 140 program • IBM/ISS – Original developer of RealSecure IDS 2
  • 3. Crypto is deceptively simple and attractive • Block ciphers, public key, etc. make sense conceptually • Books like Applied Cryptography made it accessible • Proofs of security, brute-force strength claims are appealing + = 3
  • 4. No one implements their own ciphers • Developers got the message that custom ciphers are bad • Many low-level crypto libraries to choose from – Java JCE, BouncyCastle – Microsoft CryptoAPI, .NET Cryptography – OpenSSL, Crypto++ • Pressing question: 128 or 256-bit keys? 4
  • 5. Crypto strikes back! • Crypto is strong but extremely fragile • Requires review 2-10x the development cost • Can’t be secured by testing • When it fails, you get to change out root keys 5
  • 6. Don’t implement your own crypto • Instead use… – SSL for transport – GPG for data at rest • If your design doesn’t seem to fit that model, rework it until it does • If you can’t, use a high-level crypto library – Gutmann cryptlib (GPL/commercial) – GPGME – Keyczar • Don’t use low-level libraries directly – OpenSSL, CryptoAPI, JCE, etc. 6
  • 7. Warning signs: bad crypto ahead • Obvious confusion of terms – “Decrypting” a signature to verify it – Multiple names/terms for the same field/operation – Overly focused on salts as a key security feature – The words “rainbow tables” • Arguments why non-standard usage is ok, based on… – Key size – Lack of attacker knowledge – A blog post In its defense, ECB does have valid uses: Whole disk encryption, for example. Nick Johnson on May 18, 2009 8:10 AM Actually, scratch my earlier - even for whole disk encryption you should be using CTR instead of ECB. :) Nick Johnson on May 18, 2009 9:11 AM 7
  • 8. Warning signs: bad crypto ahead • Encrypting multiple blocks with RSA • Insistence that the IV must be kept secret • Spec diagrams from Wikipedia http://en.wikipedia.org/wiki/HMAC 8
  • 9. How to fix Javascript crypto • Don’t do it; it makes no sense – Where did the browser get the code from? • The webserver – Over? • SSL (we hope) – And the keys that the Javascript uses? • Um, the same webserver • You have SSL on the client and server, use it – Anything you roll yourself is going to be worse – Remove the words “Javascript crypto” from your vocabulary 9
  • 11. Upgrading encryption on-the-fly • Fixing an old, broken cookie scheme – Old: CBC-encrypted cookie but no integrity protection – New: + HMAC protection of encrypted cookie • Bright idea: “We’ll upgrade user cookies!” – Decrypt the data, check length of result – Detect old cookie based on version field – Set new version, encrypt with new key, add HMAC – Return it to the user 11
  • 12. Bad PRNG or no seeding • Default “random” PRNGs not a good choice – Cryptographic generator has different requirements • Constantly re-seeded with new entropy • Impossible to guess or even perturb internal state – Don’t use: • Python random (use random.SystemRandom) • java.util.Random (use java.security.SecureRandom) • .NET System.Random (use System.Security.Cryptography. RandomNumberGenerator) • Cold boot case – Server just rebooted and you’re already getting requests • Is there enough entropy? • Are you replaying IVs, challenge values, etc.? – Wait, who in your company is responsible for this? 12
  • 13. Side channel attacks • Crypto does not operate in a true “black box” – Measurability • CPU retains state in the form of caches, branch prediction buffer, stack data – Control • Interaction with users and network influences resource usage, page protections, scheduling • Ability to influence and/or measure crypto behavior can compromise your keys – Timing – Power analysis – EM radiation – Heat, sound, disk access patterns, etc. 13
  • 15. Block cipher modes of operation • If you know ECB from CBC, give yourself a hand • Now the following – OFB, CFB, CTR • Stream cipher constructions • Bitwise malleability • Fatal if counter or output reused – CCM, EAX, GCM, OCB • Authenticated encryption • Provide integrity protection + encryption • Fatal if IV reused • Decipher this one – “TDEA Electronic Code Book (TECB) Mode” 15
  • 16. Counter duplication in CTR mode • You painstakingly made sure to not duplicate the counter on the client – Using a counter and saving its state in a variable – Forcing a key renegotiation if rebooted • Or even persisted it to disk • But what about the server? – If using a shared key, you have keystream reuse if the server’s counter overlaps the client's 1af2 1ae9 KA KA 16
  • 18. Custom hash constructions • Goal: prevent modification of a cookie • Solution – Send SHA1(key || data) – User can’t forge the result because they don’t know the secret, right? • Length extension attack – See SHA1 init and final operations below: • Use HMAC instead Initialize variables: – Other ad-hoc constructions h0 = 0x67452301 also vulnerable h1 = 0xEFCDAB89 h2 = 0x98BADCFE h3 = 0x10325476 h4 = 0xC3D2E1F0 … Produce the final hash value: return (h0 || h1 || h2 || h3 || h4) 18
  • 19. Too much left up to the implementer • HMAC integrity check with XMLDsig <SignatureMethod Algorithm="…xmldsig#hmac-sha1"> <HMACOutputLength>160</HMACOutputLength> </SignatureMethod> • Questions… – What is wrong with a length of 0 (or 1)? – What if an implementer allowed other algorithm selections? • Why does this field even exist? – Saves 10 bytes for SHA-1 but adds 38 bytes of tag overhead – No backwards-compatibility excuse – Yet another field to validate for N implementers 19
  • 20. Padding error oracle with CBC encryption • Plaintext is HMACed, padded to block size, CBC- encrypted – Example for AES, message length 14 bytes Block = p[0], … p[13], 0x01, 0x01 • Server returns two different errors – Padding_Incorrect: pad byte was wrong value for specified total length – Integrity_Failure: padding valid but message modified • Now you can decrypt bytes – Set a block with different guesses for last byte – If correct guess, you’ll get Integrity_Failure error – Repeat for other bytes 20
  • 22. Incorrectly comparing hash value • Verifying an RSA signature – RSA-Exp(PubKey, SigData) – Verify all the padding data as you should – return (0 == strncmp(userHash, myHash, 20)); • Attack – Create 256 messages, each slightly different – Once SHA-1(message) == {00, …}, you win! for i in range(256): s = 'The magic number is: ' + i a = sha1(s).hexdigest() if a[:2] == '00': break >> The magic number is: 26 006c60dde4bc… 22
  • 23. Lack of structure in signed data • You have to know exactly what you’re signing! – Think of signed data as a command, typed into a global root shell, on every cluster in your company • Amazon Web Services v1 – Allowed the client to sign a URL 1. Split the query string using '&' and '=' delimiters 2. Concatenate all the key/value pairs into a single string (key1 || value1 || key2 || value2) 3. Protect it with HMAC-SHA1(key, data) • No structure in data means the following are equivalent …?GoodKey1=GoodValue1BadKey2BadValue2 …?GoodKey1=GoodValue1&BadKey2=BadValue2 23
  • 24. Bare (no padding) signatures • Just use RSA directly, why hash first? • Attack – Choose some primes as your messages – Get each one signed – Now forge any message composed of a combination of those primes, their inverses, etc. mA = 3 mB = 7 sig(3 * 7) = sigA * sigB mod n • Fun fact: same property that allows blinding 24
  • 25. Padding is not something to ignore • PKCS#1 pads messages to be signed as follows – SigData = 00 01 FF … FF 00 <SHA1-OID> <SHA1-HASH> – Then, signature is RSA-Exp(PrivKey, SigData) • Signature verification seems simple – Process the sig with RSA-Exp(PubKey, SigData) – Strip off padding, find the hash, and compare to the hash of the message • Now attacker can create forgeries – For 2048 bit key and 160-bit SHA hash, there are 21888 inputs that will match – With small public exponent, straightforward algebra to calculate a colliding signature • Every bit of padding data must be strictly checked 25
  • 27. DSA fails if random value known • If the random challenge value k is known, it reveals your entire private key • DSA signature (r, s) is: r = gk mod p mod q s = k-1 (H(m) + x*r) mod q • If you know k, you can calculate x as follows: x = ((s * k) – H(m)) * r-1 mod q • Remember that Debian PRNG bug? – Every DSA key used on a vulnerable system for a single signature is forever compromised • Surprise! – Knowledge of only a few bits of k and multiple signatures is sufficient – Hidden number problem (Boneh, others) 27
  • 28. “Encrypting” with RSA private key • Example – Device has an RSA public key to verify signature on firmware updates – Idea: keep the public key secret and use it to decrypt the updates also • RSA is incompatible with block cipher thinking – You can’t “encrypt” with a private key and keep the public key secret – An attacker can always figure out the public key (e, n) from observing two signatures for e in [3, 5, 7, … 65537]: n ~= GCD(sig1e – m1, sig2e – m2) if m1e mod n == sig1: break 28
  • 29. SRP parameter validation • SRP gives secure password-based key agreement • Seems easy, right? • Like all public-key crypto, very sensitive to choice of values 29
  • 30. SRP parameter validation bug • What if client sends A=0? • Hmm, server does (A * foobar)baz = 0 – And there are other bad parameters with similar results 30
  • 31. But wait, there’s more! • DH small subgroup confinement attack (Tor, IKE) – Sending magic values lets you choose the server’s key (similar to SRP attack) • Encrypting a CRC for an integrity check (SSH v1) • Fault injection during RSA signing (Pay TV smart card glitching) 31
  • 32. Conclusion • Crypto is brittle (easy to mess up) – And when it fails, the results are spectacular • So don’t build your own crypto – SSL for transport – GPG for data at rest • If your design doesn’t seem to fit that model, rework it until it does • If you can’t, use a high-level library – cryptlib or Keyczar • Always get a third-party review of any crypto code – If you had to design your own, much more extensive review required 32
  • 33. Contact info For more detailed articles on these topics, please see my blog linked at: http://rootlabs.com Questions? Nate Lawson nate@rootlabs.com 33