Upgrade to Pro — share decks privately, control downloads, hide ads and more …

What's New in Go Crypto? by Nick Sullivan

Paul Burt
February 18, 2016

What's New in Go Crypto? by Nick Sullivan

Uploading for the 2/17 Go 1.6 release party, at Docker HQ.

Talk given at GoSF:
http://www.meetup.com/golangsf/

Paul Burt

February 18, 2016
Tweet

More Decks by Paul Burt

Other Decks in Technology

Transcript

  1. Who gits the blame? 19012 Adam Langley 5099 David Crawshaw

    4468 Vlad Krasnov 3939 Russ Cox 3074 Shenghou Ma 1576 Yasuhiro Matsumoto 1216 Joel Sing 1190 Robert Griesemer 653 Nan Deng 641 Dave Cheney 610 Mikkel Krautz 560 Kyle Isom 557 Rob Pike 553 Jonathan Rodenberg 499 Shenghou Ma 397 Gautham Thambidorai 395 Brad Fitzpatrick 389 Nevins Bartolomeo 351 Jacob H. Haven 345 Han-Wen Nienhuys 330 Luit van Drongelen 317 Rémy Oudompheng 282 Conrad Meyer 281 Taru Karttunen 280 Paul van Brouwershaven 260 David Leon Gil 241 Roger Peppe 233 Nick Craig-Wood 219 Benjamin Black 211 Jeff Wendling 196 Anthony Martin 167 Andy Davis 159 Peter Mundy 153 Jeff R. Allen 152 Josh Bleecher Snyder 151 Shawn Smith 123 Nick Sullivan 4
  2. 19012 Adam Langley 5099 David Crawshaw 4468 Vlad Krasnov 3939

    Russ Cox 3074 Shenghou Ma 1576 Yasuhiro Matsumoto 1216 Joel Sing 1190 Robert Griesemer 653 Nan Deng 641 Dave Cheney 610 Mikkel Krautz 560 Kyle Isom 557 Rob Pike 553 Jonathan Rodenberg 499 Shenghou Ma 397 Gautham Thambidorai 395 Brad Fitzpatrick 389 Nevins Bartolomeo 351 Jacob H. Haven 345 Han-Wen Nienhuys 330 Luit van Drongelen 317 Rémy Oudompheng 282 Conrad Meyer 281 Taru Karttunen 280 Paul van Brouwershaven 260 David Leon Gil 241 Roger Peppe 233 Nick Craig-Wood 219 Benjamin Black 211 Jeff Wendling 196 Anthony Martin 167 Andy Davis 159 Peter Mundy 153 Jeff R. Allen 152 Josh Bleecher Snyder 151 Shawn Smith 123 Nick Sullivan Who gits the blame? 5 4468 Vlad Krasnov 560 Kyle Isom 303 Jacob H. Haven 39 Nick Sullivan
  3. 1.0 2012 2013 2014 2015 1.1 1.2 2016 1.3 1.4

    1.5 rrdns cfssl gokeyless railgun 1.6
  4. 1.0 2012 2013 2014 2015 1.1 1.2 2016 1.3 1.4

    1.5 Go Crypto RC4 railgun 1.6
  5. AES-GCM Performance benchmark old MB/s new MB/s speedup BenchmarkAESGCMSeal8K 89.31

    2559.62 28.66x BenchmarkAESGCMOpen8K 89.54 2463.78 27.52x BenchmarkAESGCMSeal1K 86.24 1872.49 21.71x BenchmarkAESGCMOpen1K 86.53 1721.78 19.90x
  6. 1.0 2012 2013 2014 2015 1.1 1.2 2016 1.3 1.4

    1.5 Go Crypto RC4 MorsingTime Go Crypto AES-GCM Use CSRs railgun ECDSA Certs 1.6
  7. 22

  8. 1.0 2012 2013 2014 2015 1.1 1.2 2016 1.3 1.4

    1.5 CFSSL ECDSA support in x509 CSR Support Open Source 1.6
  9. crypto.Signer: a private key interface type Signer interface { Public()

    PublicKey Sign(rand io.Reader, msg []byte, opts SignerOpts) (signature []byte, err error) } rsa.PrivateKey and ecdsa.PrivateKey both implement Signer 25
  10. PKCS#11 27 func (ps *PKCS11Key) Sign(rand io.Reader, msg []byte, opts

    crypto.SignerOpts) (signature []byte, err error) { // Verify that the length of the hash is as expected hash := opts.HashFunc() hashLen := hash.Size() if len(msg) != hashLen { err = errors.New("input size does not match hash function output size") return } // Add DigestInfo prefix mechanism := []*pkcs11.Mechanism{pkcs11.NewMechanism(pkcs11.CKM_RSA_PKCS, nil)} prefix, ok := hashPrefixes[hash] if !ok { err = errors.New("unknown hash function") return } signatureInput := append(prefix, msg...) // Open a session session, err := ps.openSession() if err != nil { return } defer ps.closeSession(session) // Perform the sign operation err = ps.module.SignInit(session, mechanism, ps.privateKeyHandle) if err != nil { return } signature, err = ps.module.Sign(session, signatureInput) return }
  11. 1.0 2012 2013 2014 2015 1.1 1.2 2016 1.3 1.4

    1.5 CFSSL ECDSA support in x509 CSR Support crypto.Signer interface PKCS#11 Support Open Source 1.6
  12. Cache Poisoning (Kaminsky’s attack) 32 Resolver Authoritative Server Q: what

    is the IP address of cloudflare.com A: 198.41.213.157 A: 6.6.6.6 A: 6.6.6.6 A: 6.6.6.6 A: 6.6.6.6 A: 6.6.6.6 A: 6.6.6.6 A: 6.6.6.6
  13. Man-in-the-middle 33 Resolver Authoritative Server Q: what is the IP

    address of cloudflare.com A: 198.41.213.157 A: 6.6.6.6
  14. 1.0 2012 2013 2014 2015 1.1 1.2 2016 1.3 1.4

    1.5 rrdns FilippoTime DNSSEC Prototype P256 ASM DNSSEC Beta crypto.Signer 1.6
  15. 1.0 2012 2013 2014 2015 1.1 1.2 2016 1.3 1.4

    1.5 gokeyless keyless (C) HavenTime 1.6
  16. New interface: crypto.Decrypter type Signer interface { Public() PublicKey Sign(rand

    io.Reader, msg []byte, opts SignerOpts) (signature []byte, err error) } type Decrypter interface { Public() PublicKey Decrypt(rand io.Reader, msg []byte, opts DecrypterOpts) (plaintext []byte, err error) } 44
  17. Using it in TLS return &tls.Config{ Certificates: []tls.Certificate{cert}, RootCAs: SystemRoots,

    ServerName: host, CipherSuites: CipherSuites, MinVersion: tls.VersionTLS12, } 45 type Certificate struct { Certificate [][]byte PrivateKey crypto.PrivateKey OCSPStaple []byte SignedCertificateTimestamps [][]byte Leaf *x509.Certificate }
  18. New additions to Go 1.5 crypto.Decrypter, crypto.Signer support in x509,

    tls AES_256_GCM_SHA384 cipher suites Faster RSA operations 48
  19. 1.0 2012 2013 2014 2015 1.1 1.2 2016 1.3 1.4

    1.5 gokeyless keyless (C) opaque keys in TLS HavenTime AES 256 RSA Mont 1.6
  20. This is now possible in Go TLS load balancer backed

    by hardware (PKCS#11, TPM coming soon) Arbitrary RSA/ECDSA Implementations 51
  21. 1.0 2012 2013 2014 2015 1.1 1.2 2016 1.3 1.4

    1.5 rrdns cfssl gokeyless railgun 1.6