34
Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart 2014

Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Crypto for Java Developers

Dominik Schadow - bridgingIT

Java Forum Stuttgart 2014

Page 2: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

„Crypto is complex and full of backdoors…“

Page 3: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

OWASP TOP 10 2013

www.owasp.org

Page 4: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

There is a pattern in most data breaches…

1. All passwords are safe! 2. Stolen, but securely hashed! 3. OK, some have a simple hash… 4. Change your password now!

Page 5: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

No secret, no key -> no security

BaseEncoding.base64().encode(password)

Page 6: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart
Page 7: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Pure Java!Spring Configuration!

Encryption & Signatures!Hashes

Page 8: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Pure Java

Page 9: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Java KeyStore stores key pairs, secret keys and certificates

Common types: PK12, JCEKS Store passwords since Java 8 KeyTool on command line

Page 10: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Easy keystore management with KeyStore Explorer

keystore-explorer.sourceforge.net

Page 11: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

One shared secret key for symmetric encryption

Difficult key exchange Fast

Page 12: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Individual public and private key for asymmetric encryption

Simple key exchange Slower

Hybrid encryption!Content: Symmetric Key: Asymmetric

Page 13: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Encrypt with counterparts public key, sign with own private key

Alice Bob

Encrypt with Bob’s public keyDecrypt with own private

key

Alice Bob

Sign with own private key Verify with Alice’s

public key

Page 14: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Demo

Page 15: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

(Crypto) frameworks make crypto easier, but come with limitations

Page 16: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Spring Configuration

Page 17: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

<context:property-placeholder ! location="classpath:spring.properties" />!!

<bean id="dataSource" class="org...BasicDataSource">! <!-- … -->! <property name="url" value="${jdbc.url}"/>! <property name="username" value="${jdbc.un}"/>! <property name="password" value="${jdbc.pw}"/>!</bean>

jdbc.driver=org.hsqldb.jdbcDriver!jdbc.url=jdbc:hsqldb:mem:sampleDB!jdbc.un=sampleUser!jdbc.pw=samplePassword

Typical DataSource configuration with Spring

Page 18: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Jasypt command line tools for password generation

www.jasypt.org

Page 19: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Demo

Page 20: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Encryption & Signatures

Page 21: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Keyczar offers safe algorithms for encrypting and signing

www.keyczar.org

Default key lengths and modes AES (128), DSA (1024), HMAC (256), RSA (4096)

Own keystore & key mechanism

Page 22: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Keyczar uses JSON format for key sets and keys

Page 23: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

KeyczarTool: java -jar KeyczarTool-0.71g-090613.jar

Page 24: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Demo

Page 25: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Hashes

Page 26: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

xato.net/passwords/more-top-worst-passwords

Page 27: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Hashing is a fast one way operation

Same input -> same hash value Arbitrary long input -> fixed length output

Page 28: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

A hashed password without an individual salt is neither safe nor unique

New salt with every password change Store plaintext salt besides password hash Salt size as long as hash output

Page 29: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Special password hashing algorithms slow down brute force attacks

1. PBKDF2 - multiple rounds 2. scrypt - resource intensive 3. bcrypt - iteration count

Page 30: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Apache Shiro provides safe defaults for encrypting and hashing

shiro.apache.org

Multiple iterations configurable Built-in salt generation Base salt (private) Public salt

Page 31: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Demo

Page 32: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

OWASP Passfault analyzes password strength

www.owasp.org/index.php/OWASP_Passfault

Page 33: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Don’t invent crypto, use it Crypto libraries come with limitations but easier usage Change your keys frequently

Page 34: Crypto for Java Developers - Dominik Schadowfiles.dominikschadow.de/event_jfs2014.pdf · 2014. 7. 15. · Crypto for Java Developers Dominik Schadow - bridgingIT Java Forum Stuttgart

Dominik Schadow!BridgingIT GmbH Königstraße 42 70173 Stuttgart

[email protected] www.bridging-it.de !Blog blog.dominikschadow.de Twitter @dschadow

Demo Projects github.com/dschadow/JavaSecurity!Cryptographic Storage Cheat Sheetwww.owasp.org/index.php/Cryptographic_Storage_Cheat_Sheet!CrypToolwww.cryptool.org!Pictures www.dreamstime.com