return of the hidden number problem
play

Return of the Hidden Number Problem A Widespread and Novel Key - PowerPoint PPT Presentation

Return of the Hidden Number Problem A Widespread and Novel Key Extraction Attack on ECDSA and DSA Keegan Ryan NCC Group What is ROHNP? Key extraction attack on DSA and ECDSA Uses an old technique to target a new part of the algorithm


  1. Return of the Hidden Number Problem A Widespread and Novel Key Extraction Attack on ECDSA and DSA Keegan Ryan NCC Group

  2. What is ROHNP? • Key extraction attack on DSA and ECDSA • Uses an old technique to target a new part of the algorithm • Common (11/20 tested implementations were vulnerable) • Easy attack to understand and apply

  3. Prior Attacks on (EC)DSA 𝑠 = 𝑔 𝑙 ∗ 𝐻 𝑡 = 𝑙 −1 (𝑛 + 𝑠𝑦) • The attacker knows r , s , m , and G . • Recover information about nonce k . • Derive information about private key x .

  4. Nonce Leaks and the Hidden Number Problem 𝑠 = 𝑔 𝑙 ∗ 𝐻 𝑡 = 𝑙 −1 (𝑛 + 𝑠𝑦) • Observe multiplication k*G happens quickly • Infer k is “small” • Rewrite DSA equations [HGS01] 𝑙 = 𝑡 −1 𝑛 + 𝑡 −1 𝑠 𝑦 < 𝑟/2 𝑚 • Solve system of inequalities [BV96] • Fix nonce leaks with constant time multiplication

  5. Return of the Hidden Number Problem

  6. Return of the Hidden Number Problem 𝑠 = 𝑔 𝑙 ∗ 𝐻 𝑡 = 𝑙 −1 (𝑛 + 𝑠𝑦) • The attacker knows r , s , m , and G . • Target the addition in the calculation of s .

  7. Modular Addition def AddMod(a, b, q): # Assuming a and b are reduced modulo q, # return (a + b) % q c = a + b if c >= q: c = c – q return c

  8. Return of the Hidden Number Problem • Observe the calculation of m + rx • Use a side channel to see if the addition wraps around • If not, 𝑛 + 𝑠𝑦 < 𝑟 ⇒ 0 + 𝑠𝑦 < 𝑟 − 𝑛 • If so, 𝑛 + 𝑠𝑦 ≥ 𝑟 ⇒ 𝑟 − 𝑠𝑦 < 𝑛 + 1 • Result is a system of HNP inequalities

  9. Benefits of the ROHNP attack • Information can leak through many side channels • Attacker can choose m to tune the bits leaked per HNP inequality • Can detect the presence of this vulnerability in a black box • Signatures with large m are more likely to include the extra subtraction • Run statistical analysis to see if this case takes longer • Exploit with a side channel that detects subtraction in an individual sample • Avoids prior countermeasures • Common

  10. Affected Implementations

  11. Cryptographic Libraries • LibreSSL • mbedTLS • Amazon s2n • Mozilla NSS • C#/Mono • GnuTLS • OpenSSL • Trezor Crypto • Cloudflare CFSSL • WolfCrypt • BoringSSL • NanoSSL • Botan • Nettle • Microsoft Schannel • Libgcrypt • Crypto++ • Apple Secure Transport • Libtomcrypt • BearSSL • RSA BSAFE • matrixSSL • Libsecp256k1 • SharkSSL • OpenJDK libsunec • NaCl • Microsoft CryptoAPI/CNG • CryptLib • Netflix MSL • JCA • Golang crypto/tls • ZeroMQ • CryptoComply • BouncyCastle • Pyca/cryptography • Oracle JSSE

  12. Closed Source Cryptographic Libraries • LibreSSL • mbedTLS • Amazon s2n • Mozilla NSS • C#/Mono • GnuTLS • OpenSSL • Trezor Crypto • Cloudflare CFSSL • WolfCrypt • BoringSSL • NanoSSL • Botan • Nettle • Microsoft Schannel • Libgcrypt • Crypto++ • Apple Secure Transport • Libtomcrypt • BearSSL • RSA BSAFE • matrixSSL • Libsecp256k1 • SharkSSL • OpenJDK libsunec • NaCl • Microsoft CryptoAPI/CNG • CryptLib • Netflix MSL • JCA • Golang crypto/tls • ZeroMQ • CryptoComply • BouncyCastle • Pyca/cryptography • Oracle JSSE

  13. Closed Source Wraps (EC)DSA Cryptographic Libraries • LibreSSL • mbedTLS • Amazon s2n • Mozilla NSS • C#/Mono • GnuTLS • OpenSSL • Trezor Crypto • Cloudflare CFSSL • WolfCrypt • BoringSSL • NanoSSL • Botan • Nettle • Microsoft Schannel • Libgcrypt • Crypto++ • Apple Secure Transport • Libtomcrypt • BearSSL • RSA BSAFE • matrixSSL • Libsecp256k1 • SharkSSL • OpenJDK libsunec • NaCl • Microsoft CryptoAPI/CNG • CryptLib • Netflix MSL • JCA • Golang crypto/tls • ZeroMQ • CryptoComply • BouncyCastle • Pyca/cryptography • Oracle JSSE

  14. Closed Source Wraps (EC)DSA Cryptographic Libraries Doesn’t Implement • LibreSSL • mbedTLS • Amazon s2n • Mozilla NSS • C#/Mono • GnuTLS • OpenSSL • Trezor Crypto • Cloudflare CFSSL • WolfCrypt • BoringSSL • NanoSSL • Botan • Nettle • Microsoft Schannel • Libgcrypt • Crypto++ • Apple Secure Transport • Libtomcrypt • BearSSL • RSA BSAFE • matrixSSL • Libsecp256k1 • SharkSSL • OpenJDK libsunec • NaCl • Microsoft CryptoAPI/CNG • CryptLib • Netflix MSL • JCA • Golang crypto/tls • ZeroMQ • CryptoComply • BouncyCastle • Pyca/cryptography • Oracle JSSE

  15. Open Source Implementations • LibreSSL • Golang crypto/tls • Mozilla NSS • BouncyCastle • OpenSSL • mbedTLS • WolfCrypt • C#/Mono • Botan • Trezor Crypto • Libgcrypt • BoringSSL • Libtomcrypt • Nettle • matrixSSL • Crypto++ • OpenJDK libsunec • BearSSL • CryptLib • Libsecp256k1

  16. Constant Time Open Source Implementations • LibreSSL • Golang crypto/tls • Mozilla NSS • BouncyCastle • OpenSSL • mbedTLS • WolfCrypt • C#/Mono • Botan • Trezor Crypto • Libgcrypt • BoringSSL (ECDSA) • Libtomcrypt • Nettle (ECDSA) • matrixSSL • Crypto++ • OpenJDK libsunec • BearSSL • CryptLib • Libsecp256k1

  17. Constant Time Open Source Implementations Wrong Operation Order • LibreSSL • Golang crypto/tls • Mozilla NSS • BouncyCastle • OpenSSL (DSA) • mbedTLS • WolfCrypt (DSA) • C#/Mono • Botan (DSA) • Trezor Crypto • Libgcrypt (DSA) • BoringSSL (ECDSA) • Libtomcrypt (DSA) • Nettle (ECDSA) • matrixSSL • Crypto++ • OpenJDK libsunec • BearSSL • CryptLib • Libsecp256k1

  18. Constant Time Open Source Implementations Wrong Operation Order Vulnerable • LibreSSL • Golang crypto/tls • Mozilla NSS • BouncyCastle • OpenSSL (DSA) • mbedTLS • WolfCrypt (DSA) • C#/Mono • Botan (DSA) • Trezor Crypto • Libgcrypt (DSA) • BoringSSL (ECDSA) • Libtomcrypt (DSA) • Nettle (ECDSA) • matrixSSL • Crypto++ • OpenJDK libsunec • BearSSL • CryptLib • Libsecp256k1

  19. Example:

  20. Solo

  21. Solo /* Computes result = (left + right) % mod. Assumes that left < mod and right < mod, and that result does not overlap mod. */ uECC_VLI_API void uECC_vli_modAdd(uECC_word_t *result, const uECC_word_t *left, const uECC_word_t *right, const uECC_word_t *mod, wordcount_t num_words) { uECC_word_t carry = uECC_vli_add(result, left, right, num_words); if (carry || uECC_vli_cmp_unsafe(mod, result, num_words) != 1) { /* result > mod (result = mod + remainder), so subtract mod to get remainder. */ uECC_vli_sub(result, result, mod, num_words); } }

  22. Conclusion • ROHNP targets a different part of (EC)DSA signing • It is widespread • It is easy to understand and exploit

  23. Thank You Keegan Ryan kryan@eng.ucsd.edu @inf_0_

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend