Crypto workshop 4 - Hashing, Tokens, Randomness

H
Random numbers
Hashes
Cryptography for Software and Web Developers
Part 4: randomness, hashing, tokens
Hanno B¨ock
2014-05-28
1 / 13
Random numbers
Hashes
Bad random numbers
Random fails
Example: Factoring RSA keys
Good / bad randomness
In security (not just crypto) we often need random numbers
Examples: CSRF-tokens, one-time-action tokens, password
salts, key generation, ...
There’s even crypto out there that needs good random
numbers to run or it’ll completely break: DSA, ECDSA (but
better avoid that).
Good randomness is hard
2 / 13
Random numbers
Hashes
Bad random numbers
Random fails
Example: Factoring RSA keys
Good / bad randomness
OS or programming language default random functions often
not secure random numbers.
Rounding problems, conversion problems can reduce space of
possible random numbers vastly.
2008 Debian OpenSSL bug.
PRNGs need a seed or they don’t work.
NSA managed to make a backdoored RNG an official
standard and payed RSA Inc. 10 Million $ to make it the
default in BSAFE
No way to test random numbers reliably.
3 / 13
Random numbers
Hashes
Bad random numbers
Random fails
Example: Factoring RSA keys
Good / bad randomness
An RSA public key consists of an exponent e and a modulus
N which is the product of two primes
If you know the primes you can get the private key
What happens if we have two RSA keys with a shared prime,
e. g. N1 = p ∗ q1, N2 = p ∗ q2? You can break this key with
the greatest common divisor algorithm.
Some people tried this with lots of SSH and TLS keys and
found over 50 embedded devices that created such factorable
keys. [url]
Linux seed sources: HD timings, keyboard strokes, mouse
movements. Embedded devices often have no HD, no
keyboard, no mouse.
4 / 13
Random numbers
Hashes
Bad random numbers
Random fails
Example: Factoring RSA keys
Good / bad randomness
PHP good: openssl random pseudo bytes(), PHP bad:
mt rand(), rand(), uniqid()
JavaScript good: window.crypto.getRandomValues(), bad:
Math.random() (only latest browser support
window.crypto.getRandomValues())
/dev/urandom is good if it is properly seeded. For embedded
devices: Better create the keys on a desktop PC.
5 / 13
Random numbers
Hashes
Simple hashes
Cryptographic hashes
Problems with MD5, SHA1
Passwords
Password hash functions
A note on password hashes
Sources
So many people have wrong ideas about hashes...
Completely typical situation: I write about cryptographic
hashes, people in the comments discuss about password
hashes and salting
Hashes used in many contexts: error detection (CRC32),
signatures (SHA256, SHA516), passwords (bcrypt, scrypt)
If you use a hash function you need to know what it should do
6 / 13
Random numbers
Hashes
Simple hashes
Cryptographic hashes
Problems with MD5, SHA1
Passwords
Password hash functions
A note on password hashes
Sources
CRC32: Very fast, no security at all
Reliably detects errors, but trivial to construct another input
for an existing hash
Usable only for errors and if no attacker is involved (e. g.
error detection on hard disks or file comparison over otherwise
secure network connections).
7 / 13
Random numbers
Hashes
Simple hashes
Cryptographic hashes
Problems with MD5, SHA1
Passwords
Password hash functions
A note on password hashes
Sources
Cryptographic hashes need to be collision resistant and
preimage resistant
Collision: It should be practically impossible to create two
different inputs with same hash
Preimage: It should be practically impossible to create an
input for a given hash value.
Used in many places, e. g. signatures
Some crypto protocols need hashes and don’t have collision
resistance requirement (e. g. HMAC), but that’s usually not
something that should bother you
8 / 13
Random numbers
Hashes
Simple hashes
Cryptographic hashes
Problems with MD5, SHA1
Passwords
Password hash functions
A note on password hashes
Sources
In 2004/2005 big breakthroughs on hash attacks, mostly the
work of a Chinese team led by Wang Xiaoyun.
Most important results: practical collision attacks on MD5,
almost practical attacks on SHA1
2008: MD5 attack on RapidSSL leads to fake CA, 2012:
Flame worm uses MD5 attack to create rogue code signing
cert
SHA-2 functions (SHA256, SHA512) considered safe today,
SHA-3 will come soon.
9 / 13
Random numbers
Hashes
Simple hashes
Cryptographic hashes
Problems with MD5, SHA1
Passwords
Password hash functions
A note on password hashes
Sources
Idea: We don’t save passwords, we just save hashes so if our
database gets stolen the attacker has no direct access to the
passwords
Attackers can brute force
Salting makes it harder
Security requirements for password hashes completely different
from cryptographic hash functions
Collision resistance doesn’t matter, they should ideally not be
fast
10 / 13
Random numbers
Hashes
Simple hashes
Cryptographic hashes
Problems with MD5, SHA1
Passwords
Password hash functions
A note on password hashes
Sources
glibc uses several iterations of cryptographic hashes (default
SHA512) and a salt.
bcrypt and scrypt are functions designed to be password
hashes. bcrypt is designed to be slow, scrypt is designed to be
slow and use lots of memory.
There’s a Password Hashing Competition (PHC), results
expected in 2015.
11 / 13
Random numbers
Hashes
Simple hashes
Cryptographic hashes
Problems with MD5, SHA1
Passwords
Password hash functions
A note on password hashes
Sources
The importance of secure password hashing is IMHO vastly
overstated.
glibc-type SHA512, bcrypt, scrypt are all ”good enough”, just
make sure you have a salt.
Password hashing only gives you a tiny little bit of extra
protection if your database gets stolen. But if that happens
you’re screwed anyway.
Make sure nobody steals your database. That’s much more
important.
12 / 13
Random numbers
Hashes
Simple hashes
Cryptographic hashes
Problems with MD5, SHA1
Passwords
Password hash functions
A note on password hashes
Sources
Factorable RSA keys https://factorable.net/
http://media.ccc.de/browse/congress/2012/
29c3-5275-en-facthacks_h264.html
Password Hashing Competition
https://password-hashing.net/
13 / 13
1 of 13

Recommended

Linux for Security Professionals (Tips and Tricks) - Init 6 10/2012 by
Linux for Security Professionals (Tips and Tricks) - Init 6 10/2012Linux for Security Professionals (Tips and Tricks) - Init 6 10/2012
Linux for Security Professionals (Tips and Tricks) - Init 6 10/2012Jose L. Quiñones-Borrero
1.4K views31 slides
Much ado about randomness. What is really a random number? by
Much ado about randomness. What is really a random number?Much ado about randomness. What is really a random number?
Much ado about randomness. What is really a random number?Aleksandr Yampolskiy
3.1K views36 slides
Symantec SMB File Sharing Flash Poll by
Symantec SMB File Sharing Flash PollSymantec SMB File Sharing Flash Poll
Symantec SMB File Sharing Flash PollSymantec
1.7K views54 slides
Some tales about TLS by
Some tales about TLSSome tales about TLS
Some tales about TLShannob
1.7K views60 slides
rdp remotefx spice arm-linux thin client by
rdp remotefx spice arm-linux thin clientrdp remotefx spice arm-linux thin client
rdp remotefx spice arm-linux thin clientliwu.dong
2.2K views22 slides
Breaking out of restricted RDP by
Breaking out of restricted RDPBreaking out of restricted RDP
Breaking out of restricted RDPSecurity BSides London
3.1K views23 slides

More Related Content

More from hannob

Crypto workshop part 3 - Don't do this yourself by
Crypto workshop part 3 - Don't do this yourselfCrypto workshop part 3 - Don't do this yourself
Crypto workshop part 3 - Don't do this yourselfhannob
992 views13 slides
Crypto workshop part 1 - Web and Crypto by
Crypto workshop part 1 - Web and CryptoCrypto workshop part 1 - Web and Crypto
Crypto workshop part 1 - Web and Cryptohannob
1.2K views14 slides
How broken is TLS? by
How broken is TLS?How broken is TLS?
How broken is TLS?hannob
3.9K views44 slides
Papierlos by
PapierlosPapierlos
Papierloshannob
1.3K views14 slides
Gehackte Webapplikationen und Malware by
Gehackte Webapplikationen und MalwareGehackte Webapplikationen und Malware
Gehackte Webapplikationen und Malwarehannob
926 views17 slides
SSL, X.509, HTTPS - How to configure your HTTPS server by
SSL, X.509, HTTPS - How to configure your HTTPS serverSSL, X.509, HTTPS - How to configure your HTTPS server
SSL, X.509, HTTPS - How to configure your HTTPS serverhannob
4.7K views22 slides

More from hannob(8)

Crypto workshop part 3 - Don't do this yourself by hannob
Crypto workshop part 3 - Don't do this yourselfCrypto workshop part 3 - Don't do this yourself
Crypto workshop part 3 - Don't do this yourself
hannob992 views
Crypto workshop part 1 - Web and Crypto by hannob
Crypto workshop part 1 - Web and CryptoCrypto workshop part 1 - Web and Crypto
Crypto workshop part 1 - Web and Crypto
hannob1.2K views
How broken is TLS? by hannob
How broken is TLS?How broken is TLS?
How broken is TLS?
hannob3.9K views
Papierlos by hannob
PapierlosPapierlos
Papierlos
hannob1.3K views
Gehackte Webapplikationen und Malware by hannob
Gehackte Webapplikationen und MalwareGehackte Webapplikationen und Malware
Gehackte Webapplikationen und Malware
hannob926 views
SSL, X.509, HTTPS - How to configure your HTTPS server by hannob
SSL, X.509, HTTPS - How to configure your HTTPS serverSSL, X.509, HTTPS - How to configure your HTTPS server
SSL, X.509, HTTPS - How to configure your HTTPS server
hannob4.7K views
Stromsparen by hannob
StromsparenStromsparen
Stromsparen
hannob975 views
Wirtschaftswachstum, klimawandel und Peak Oil by hannob
Wirtschaftswachstum, klimawandel und Peak OilWirtschaftswachstum, klimawandel und Peak Oil
Wirtschaftswachstum, klimawandel und Peak Oil
hannob1.4K views

Recently uploaded

Building trust in our information ecosystem: who do we trust in an emergency by
Building trust in our information ecosystem: who do we trust in an emergencyBuilding trust in our information ecosystem: who do we trust in an emergency
Building trust in our information ecosystem: who do we trust in an emergencyTina Purnat
100 views18 slides
DU Series - Day 4.pptx by
DU Series - Day 4.pptxDU Series - Day 4.pptx
DU Series - Day 4.pptxUiPathCommunity
106 views28 slides
How to think like a threat actor for Kubernetes.pptx by
How to think like a threat actor for Kubernetes.pptxHow to think like a threat actor for Kubernetes.pptx
How to think like a threat actor for Kubernetes.pptxLibbySchulze1
5 views33 slides
information by
informationinformation
informationkhelgishekhar
9 views4 slides
UiPath Document Understanding_Day 3.pptx by
UiPath Document Understanding_Day 3.pptxUiPath Document Understanding_Day 3.pptx
UiPath Document Understanding_Day 3.pptxUiPathCommunity
105 views25 slides
Marketing and Community Building in Web3 by
Marketing and Community Building in Web3Marketing and Community Building in Web3
Marketing and Community Building in Web3Federico Ast
12 views64 slides

Recently uploaded(10)

Building trust in our information ecosystem: who do we trust in an emergency by Tina Purnat
Building trust in our information ecosystem: who do we trust in an emergencyBuilding trust in our information ecosystem: who do we trust in an emergency
Building trust in our information ecosystem: who do we trust in an emergency
Tina Purnat100 views
How to think like a threat actor for Kubernetes.pptx by LibbySchulze1
How to think like a threat actor for Kubernetes.pptxHow to think like a threat actor for Kubernetes.pptx
How to think like a threat actor for Kubernetes.pptx
LibbySchulze15 views
UiPath Document Understanding_Day 3.pptx by UiPathCommunity
UiPath Document Understanding_Day 3.pptxUiPath Document Understanding_Day 3.pptx
UiPath Document Understanding_Day 3.pptx
UiPathCommunity105 views
Marketing and Community Building in Web3 by Federico Ast
Marketing and Community Building in Web3Marketing and Community Building in Web3
Marketing and Community Building in Web3
Federico Ast12 views
IETF 118: Starlink Protocol Performance by APNIC
IETF 118: Starlink Protocol PerformanceIETF 118: Starlink Protocol Performance
IETF 118: Starlink Protocol Performance
APNIC297 views
PORTFOLIO 1 (Bret Michael Pepito).pdf by brejess0410
PORTFOLIO 1 (Bret Michael Pepito).pdfPORTFOLIO 1 (Bret Michael Pepito).pdf
PORTFOLIO 1 (Bret Michael Pepito).pdf
brejess04108 views

Crypto workshop 4 - Hashing, Tokens, Randomness

  • 1. Random numbers Hashes Cryptography for Software and Web Developers Part 4: randomness, hashing, tokens Hanno B¨ock 2014-05-28 1 / 13
  • 2. Random numbers Hashes Bad random numbers Random fails Example: Factoring RSA keys Good / bad randomness In security (not just crypto) we often need random numbers Examples: CSRF-tokens, one-time-action tokens, password salts, key generation, ... There’s even crypto out there that needs good random numbers to run or it’ll completely break: DSA, ECDSA (but better avoid that). Good randomness is hard 2 / 13
  • 3. Random numbers Hashes Bad random numbers Random fails Example: Factoring RSA keys Good / bad randomness OS or programming language default random functions often not secure random numbers. Rounding problems, conversion problems can reduce space of possible random numbers vastly. 2008 Debian OpenSSL bug. PRNGs need a seed or they don’t work. NSA managed to make a backdoored RNG an official standard and payed RSA Inc. 10 Million $ to make it the default in BSAFE No way to test random numbers reliably. 3 / 13
  • 4. Random numbers Hashes Bad random numbers Random fails Example: Factoring RSA keys Good / bad randomness An RSA public key consists of an exponent e and a modulus N which is the product of two primes If you know the primes you can get the private key What happens if we have two RSA keys with a shared prime, e. g. N1 = p ∗ q1, N2 = p ∗ q2? You can break this key with the greatest common divisor algorithm. Some people tried this with lots of SSH and TLS keys and found over 50 embedded devices that created such factorable keys. [url] Linux seed sources: HD timings, keyboard strokes, mouse movements. Embedded devices often have no HD, no keyboard, no mouse. 4 / 13
  • 5. Random numbers Hashes Bad random numbers Random fails Example: Factoring RSA keys Good / bad randomness PHP good: openssl random pseudo bytes(), PHP bad: mt rand(), rand(), uniqid() JavaScript good: window.crypto.getRandomValues(), bad: Math.random() (only latest browser support window.crypto.getRandomValues()) /dev/urandom is good if it is properly seeded. For embedded devices: Better create the keys on a desktop PC. 5 / 13
  • 6. Random numbers Hashes Simple hashes Cryptographic hashes Problems with MD5, SHA1 Passwords Password hash functions A note on password hashes Sources So many people have wrong ideas about hashes... Completely typical situation: I write about cryptographic hashes, people in the comments discuss about password hashes and salting Hashes used in many contexts: error detection (CRC32), signatures (SHA256, SHA516), passwords (bcrypt, scrypt) If you use a hash function you need to know what it should do 6 / 13
  • 7. Random numbers Hashes Simple hashes Cryptographic hashes Problems with MD5, SHA1 Passwords Password hash functions A note on password hashes Sources CRC32: Very fast, no security at all Reliably detects errors, but trivial to construct another input for an existing hash Usable only for errors and if no attacker is involved (e. g. error detection on hard disks or file comparison over otherwise secure network connections). 7 / 13
  • 8. Random numbers Hashes Simple hashes Cryptographic hashes Problems with MD5, SHA1 Passwords Password hash functions A note on password hashes Sources Cryptographic hashes need to be collision resistant and preimage resistant Collision: It should be practically impossible to create two different inputs with same hash Preimage: It should be practically impossible to create an input for a given hash value. Used in many places, e. g. signatures Some crypto protocols need hashes and don’t have collision resistance requirement (e. g. HMAC), but that’s usually not something that should bother you 8 / 13
  • 9. Random numbers Hashes Simple hashes Cryptographic hashes Problems with MD5, SHA1 Passwords Password hash functions A note on password hashes Sources In 2004/2005 big breakthroughs on hash attacks, mostly the work of a Chinese team led by Wang Xiaoyun. Most important results: practical collision attacks on MD5, almost practical attacks on SHA1 2008: MD5 attack on RapidSSL leads to fake CA, 2012: Flame worm uses MD5 attack to create rogue code signing cert SHA-2 functions (SHA256, SHA512) considered safe today, SHA-3 will come soon. 9 / 13
  • 10. Random numbers Hashes Simple hashes Cryptographic hashes Problems with MD5, SHA1 Passwords Password hash functions A note on password hashes Sources Idea: We don’t save passwords, we just save hashes so if our database gets stolen the attacker has no direct access to the passwords Attackers can brute force Salting makes it harder Security requirements for password hashes completely different from cryptographic hash functions Collision resistance doesn’t matter, they should ideally not be fast 10 / 13
  • 11. Random numbers Hashes Simple hashes Cryptographic hashes Problems with MD5, SHA1 Passwords Password hash functions A note on password hashes Sources glibc uses several iterations of cryptographic hashes (default SHA512) and a salt. bcrypt and scrypt are functions designed to be password hashes. bcrypt is designed to be slow, scrypt is designed to be slow and use lots of memory. There’s a Password Hashing Competition (PHC), results expected in 2015. 11 / 13
  • 12. Random numbers Hashes Simple hashes Cryptographic hashes Problems with MD5, SHA1 Passwords Password hash functions A note on password hashes Sources The importance of secure password hashing is IMHO vastly overstated. glibc-type SHA512, bcrypt, scrypt are all ”good enough”, just make sure you have a salt. Password hashing only gives you a tiny little bit of extra protection if your database gets stolen. But if that happens you’re screwed anyway. Make sure nobody steals your database. That’s much more important. 12 / 13
  • 13. Random numbers Hashes Simple hashes Cryptographic hashes Problems with MD5, SHA1 Passwords Password hash functions A note on password hashes Sources Factorable RSA keys https://factorable.net/ http://media.ccc.de/browse/congress/2012/ 29c3-5275-en-facthacks_h264.html Password Hashing Competition https://password-hashing.net/ 13 / 13