SlideShare a Scribd company logo
Hidden in Plain Sight
DUAL_EC_DRBG ‘n stuff
What’s this nerd doing
onstage?
● CS & Math BS
● Software Engineer
● Cryptoparty Ann Arbor
○ cryptoparty.in/ann_arbor - @CryptopartyAA
● Chiptunes are cool
● NOT a cryptographer
Hidden in Plain Sight: DUAL_EC_DRBG 'n stuff
The Setup
History
tl;dr:
● ANSI, NIST, ISO standardized Deterministic
Random Bit Generator
● Designed/promoted/backdoored by NSA
● Secure crypto REQUIRES random numbers
● Cool story I won’t repeat
DUAL_EC_DRBG
NIST SP 800-90A:
● some elliptic curve over a finite field
● some points P, Q on the curve
● some process of getting output and
permuting secret state
MATH BASICS
Wait… what do those words in the standard
mean?
What the hell does this look like?
Elliptic Curves
Elliptic Curves Group
Groups
● set of elements G, with an operation +
● “order”: how many elements it has
Think Whole Numbers (Integers) with only +
Groups (Example)
Integers mod 12: a = b % 12
Scalar Multiplication on EC
n*P = P + P + … + P
● (n times)
● n is an integer, P is a point
● Important for the standard
Discrete Logarithm
● No efficient algorithm known
b^k = g
b*b*b* … *b = g (k times)
k = log_b (g)
( P = d*Q )
Math Concepts/Tools
Essential to understanding, won’t be covered in
more depth
● Subgroups, Cyclic groups
● Cauchy’s, Lagrange’s, Sylow’s theorems
● Finite Fields
Two Versions...
● Dual EC 2006
● Dual EC 2007
I’ll focus on Dual EC 2006
Getting Technical
DUAL_EC_DRBG
● Defined elliptic curve, points P, Q
○ COULD use your own, but MUST use NIST provided
constants for FIPS 140 certification
● P, Q are in the same group
DUAL_EC_DRBG
The order of the group P, Q are in is also
defined as n
● for curve P-256, n =
11579208921035624876269744694940757
35299969552241357603424222590610685
12044369
○ huh...
DUAL_EC_DRBG
Tools
● Lagrange’s Theorem: Order of a subgroup
divides the order its group
● Group generated by X:
<X> = {X, X+X, X+X+X, … }
So...
● Q is in a group of prime order
● Lagrange’s Theorem! Order of <Q> is either
1 or n (turns out it’s n).
● Q must generate that entire group!
● <Q> = {Q, Q+Q, Q+Q+Q, … }
DUAL_EC_DRBG
There exists some integer d such that:
P = d * Q
(P = Q + Q + … + Q)
Spoiler alert: that’s the backdoor
DUAL_EC_DRBG
Secret state s, points P, Q, functions f, g:
● f(s) = x(s*P)
○ updates secret state: s1 := f(s0)
● g(s) = x(s*Q)
○ gives you random bits: r1 := g(s1)
DUAL_EC_DRBG
ϕ: “put this into bits”, like an integer
extract_bits: remove 16 most significant bits
DUAL_EC_DRBG
Simplified algorithm (no additional input)
(courtesy: Daniel J. Bernstein, Tanja Lange, and Ruben Niederhagen)
DUAL_EC_DRBG
(Daniel J. Bernstein, Tanja Lange, and Ruben Niederhagen)
DUAL_EC_DRBG
Shumow-Ferguson attack:
● observe random output r
● 2^16 ACTUAL r1 candidates. brute-force.
● curve equation to recover R=(r1, y)
○ use tonelli-shanks to get y, easy!
● x-coord of d*R gets us secret state s2 :)
○ backdoor!
2006 & simple
Observe a full round’s-worth of output
2006 & simple
brute-force to compensate for 16 truncated bits
2006 & simple
scalar multiply with backdoor. ONE of these will
give secret state s2! we win!
2006 + additional input!
2006 + additional input!
2006 + additional input!
(Daniel J. Bernstein, Tanja Lange, and Ruben Niederhagen)
DUAL_EC_DRBG
(These are all group operations)
● R = s1*Q = g(s1)
● d*R = d*(s1*Q) = s1*(d*Q) = s1*P
● d*R = s1*P = f(s1)
● x(d*R) = x(s1*P) = s2
● internal state s2 isn’t secret anymore
DUAL_EC_DRBG
So, if you know d, you can backtrack and
recover state!
P = d*Q
Demo…?
DUAL_EC_DRBG Demo?
OK, so that’s cool, but can we demo this?
Actually cracking it is difficult, since we don’t
know d and can’t easily find it...
Two things you can do
Be Awesome
Be Awesome
● BSAFE - :,(
○ Java - Includes fingerprints in connections
○ C - gives longer string of random bits. Faster attack!
● SChannel - :/
○ Bug that made it slightly faster to attack.
● OpenSSL - :|
○ Only FIPS version
○ Easily fixed but totally breaking bug
○ Uses additional input :)
Be Awesome
Each TLS library needs a tailored attack
1. Recover state from session ID/server
random fields in handshake
2. Compute DHE/ECDHE shared secret => get
“master secret”
3. (optionally) recover long-lived DSA/ECDSA
signing key
Be Awesome
Exploiting a real-world instance is certainly
tricky, but possible!
Weak DUAL_EC_DRBG
Or… re-make everything, but smaller.
More contrived, but hopefully a bit easier to
grasp.
Requires algebra know-how
Hidden in Plain Sight: DUAL_EC_DRBG 'n stuff
Weak DUAL_EC_DRBG
● Get some large-ish finite field (integers mod
some prime)
○ 331337 is prime. cool!
● Find a curve (I have no idea what I’m doing
here)
● Find some point Q on the curve that
generates a large-ish subgroup of prime
order
Weak DUAL_EC_DRBG
● Need a point Q in a subgroup of prime order.
But, a large enough prime that cracking isn’t
too easy (not 2, 5, 7, …)
○ Choice of finite field should put an upper bound on
subgroup’s size: Don’t worry about making it too
hard.
Weak DUAL_EC_DRBG
If Q itself doesn’t generate a prime-order
subgroup, some scalar multiple of Q will.
● If order of <Q> is not prime, factor it
○ hope it has a large prime factor
■ if not… try another Q! ¯_(ツ)_/¯
○ If it does: Cauchy’s theorem => subgroup of that
order exists! Generate with scalar multiple of Q
■ ‘intuition’ from quotient groups
Weak DUAL_EC_DRBG
● Once we’ve chosen Q, finding P is easy
○ pick your backdoor integer d
○ P = d*Q
○ publish P, Q. keep d secret.
● But, our subgroup is small enough we can
use brute-force to find d
Weak DUAL_EC_DRBG
https://github.com/zandi/dual_ec_demo
● Working weak DUAL_EC_DRBG code!
○ jeopardy ctf-style, server challenges client
○ 3 lead-in levels building up to Dual EC wannabe
level
○ test attack code for each level.
○ scary but harmless cruft
Go learn!
Practical Takeaway
What did we learn from this whole ordeal? Is
there anything we need to do *right now* to
secure ourselves? What can we do going
forward to prevent this from happening again?
Practical Takeaway
● NSA, NIST, ANSI, etc.?
○ MAYBE trust, DEFINITELY verify, peer-review.
● Using same PRNG instance for secret &
non-secret random numbers. Bad idea?
○ Shouldn’t HAVE to program defensively against your
crypto library/rng, but is it a good idea? ehhh…
maybe not.
● NIST SP 800-90A
● “The NSA Back Door to NIST” - Thomas C. Hales,
Notices of the AMS Vol. 61 No. 2
● http://projectbullrun.org/dual-ec/index.html
● “Dual EC: A Standardized Back Door” - Daniel J.
Bernstein, Tanja Lange, and Ruben Niederhagen
● “Practical Kleptography” - Matthew Green, Woot ‘14
● https://www.usenix.
org/conference/usenixsecurity14/technical-
sessions/presentation/checkoway
● Jeremy Kun - elliptic curves over finite fields library -
https://github.com/j2kun/elliptic-curves-finite-fields
Keep in touch!
@the_zandi
the.zandi@gmail.com
Thanks
David Adrian, “his excellency”
dafluck, jimtern, Misec, Arbsec,
A2Y.asm, Obama, and Satan

More Related Content

PPTX
Legacy projects: how to win the race
PPTX
Java Request Dispatcher
PPTX
Legacy projects: how to win the race
PPTX
Building High-Performance Language Implementations With Low Effort
PPTX
Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...
PDF
CODEsign 2015
ODP
Uwolnić się od "if"
PPT
Dynamic data race detection in concurrent Java programs
Legacy projects: how to win the race
Java Request Dispatcher
Legacy projects: how to win the race
Building High-Performance Language Implementations With Low Effort
Zero-Overhead Metaprogramming: Reflection and Metaobject Protocols Fast and w...
CODEsign 2015
Uwolnić się od "if"
Dynamic data race detection in concurrent Java programs

What's hot (20)

PDF
Clang tidy
PPT
NS2 Classifiers
PPT
20100712-OTcl Command -- Getting Started
PPT
NS2 Object Construction
PPT
NS2: Binding C++ and OTcl variables
PDF
EdSketch: Execution-Driven Sketching for Java
PPTX
Concurrency in Programming Languages
KEY
Basic Packet Forwarding in NS2
PDF
Java Basics - Part2
PDF
On the Secrecy of RSA Private Keys
PDF
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
PDF
Антон Бикинеев, Writing good std::future&lt; C++ >
PPTX
Gor Nishanov, C++ Coroutines – a negative overhead abstraction
PDF
Kirk Shoop, Reactive programming in C++
PPTX
How do computers exchange secrets using Math?
PDF
Ns tutorial
PPTX
Anti patterns
PDF
PVS-Studio in 2021 - Error Examples
PDF
Active Attacks on DH Key Exchange
PDF
Clang tidy
NS2 Classifiers
20100712-OTcl Command -- Getting Started
NS2 Object Construction
NS2: Binding C++ and OTcl variables
EdSketch: Execution-Driven Sketching for Java
Concurrency in Programming Languages
Basic Packet Forwarding in NS2
Java Basics - Part2
On the Secrecy of RSA Private Keys
서버 개발자가 바라 본 Functional Reactive Programming with RxJava - SpringCamp2015
Антон Бикинеев, Writing good std::future&lt; C++ >
Gor Nishanov, C++ Coroutines – a negative overhead abstraction
Kirk Shoop, Reactive programming in C++
How do computers exchange secrets using Math?
Ns tutorial
Anti patterns
PVS-Studio in 2021 - Error Examples
Active Attacks on DH Key Exchange
Ad

Viewers also liked (19)

PDF
Daftar harga tas maika etnik terbaru
PDF
Harga maika 2016
PDF
Harga maika travel bag
PPTX
Tackle earthquake in engineering buildings
PDF
Harga small case maika etnik
PDF
Harga tas maika etnik 2016
PDF
Optimizing-Your-Digital-Strategy
PDF
Harga maika bag
PDF
404warehouse와 메이커운동
PDF
History of horror
DOCX
jahangir
PDF
Harga tas dan dompet maika
PDF
Harga hpo maika etnik 2016
PDF
Daftar harga maika etnik 2016
PDF
Daftar harga tas maika etnik 2016
PDF
Harga maika small case
PDF
Harga tas maika etnik bandung
PDF
Harga grosir maika etnik
PDF
Daftar harga dompet maika etnik
Daftar harga tas maika etnik terbaru
Harga maika 2016
Harga maika travel bag
Tackle earthquake in engineering buildings
Harga small case maika etnik
Harga tas maika etnik 2016
Optimizing-Your-Digital-Strategy
Harga maika bag
404warehouse와 메이커운동
History of horror
jahangir
Harga tas dan dompet maika
Harga hpo maika etnik 2016
Daftar harga maika etnik 2016
Daftar harga tas maika etnik 2016
Harga maika small case
Harga tas maika etnik bandung
Harga grosir maika etnik
Daftar harga dompet maika etnik
Ad

Similar to Hidden in Plain Sight: DUAL_EC_DRBG 'n stuff (20)

PDF
Introduction to nand2 tetris
PDF
TC39: How we work, what we are working on, and how you can get involved (dotJ...
PDF
On deriving the private key from a public key
PPTX
Gpu workshop cluster universe: scripting cuda
PDF
The magic of (data parallel) distributed systems and where it all breaks - Re...
PDF
Testing and validating distributed systems with Apache Spark and Apache Beam ...
PDF
Eye deep
PDF
Killer Bugs From Outer Space
PDF
Melbourne, Australia Global Day of Code Retreat 2018 gdcr18 - Event Slides
PDF
Tech Talks @NSU: DLang: возможности языка и его применение
PDF
05-Debug.pdf
PDF
Jvm profiling under the hood
PDF
Stripe CTF3 wrap-up
PDF
PostgreSQL Open SV 2018
PDF
Testing and validating spark programs - Strata SJ 2016
PDF
RSA cracking puzzle
PPTX
Cracking Pseudorandom Sequences Generators in Java Applications
PDF
Using R in remote computer clusters
PDF
JVM Performance Magic Tricks
PDF
Comparing On-The-Fly Accelerating Packages: Numba, TensorFlow, Dask, etc
Introduction to nand2 tetris
TC39: How we work, what we are working on, and how you can get involved (dotJ...
On deriving the private key from a public key
Gpu workshop cluster universe: scripting cuda
The magic of (data parallel) distributed systems and where it all breaks - Re...
Testing and validating distributed systems with Apache Spark and Apache Beam ...
Eye deep
Killer Bugs From Outer Space
Melbourne, Australia Global Day of Code Retreat 2018 gdcr18 - Event Slides
Tech Talks @NSU: DLang: возможности языка и его применение
05-Debug.pdf
Jvm profiling under the hood
Stripe CTF3 wrap-up
PostgreSQL Open SV 2018
Testing and validating spark programs - Strata SJ 2016
RSA cracking puzzle
Cracking Pseudorandom Sequences Generators in Java Applications
Using R in remote computer clusters
JVM Performance Magic Tricks
Comparing On-The-Fly Accelerating Packages: Numba, TensorFlow, Dask, etc

Recently uploaded (20)

PPTX
Machine Learning_overview_presentation.pptx
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Getting Started with Data Integration: FME Form 101
PDF
Electronic commerce courselecture one. Pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
Big Data Technologies - Introduction.pptx
PDF
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
PDF
Accuracy of neural networks in brain wave diagnosis of schizophrenia
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Approach and Philosophy of On baking technology
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Empathic Computing: Creating Shared Understanding
PPTX
A Presentation on Artificial Intelligence
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPT
Teaching material agriculture food technology
Machine Learning_overview_presentation.pptx
Diabetes mellitus diagnosis method based random forest with bat algorithm
Assigned Numbers - 2025 - Bluetooth® Document
Getting Started with Data Integration: FME Form 101
Electronic commerce courselecture one. Pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
Big Data Technologies - Introduction.pptx
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
Accuracy of neural networks in brain wave diagnosis of schizophrenia
NewMind AI Weekly Chronicles - August'25-Week II
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Approach and Philosophy of On baking technology
Advanced methodologies resolving dimensionality complications for autism neur...
“AI and Expert System Decision Support & Business Intelligence Systems”
Group 1 Presentation -Planning and Decision Making .pptx
Programs and apps: productivity, graphics, security and other tools
Empathic Computing: Creating Shared Understanding
A Presentation on Artificial Intelligence
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Teaching material agriculture food technology

Hidden in Plain Sight: DUAL_EC_DRBG 'n stuff

  • 1. Hidden in Plain Sight DUAL_EC_DRBG ‘n stuff
  • 2. What’s this nerd doing onstage? ● CS & Math BS ● Software Engineer ● Cryptoparty Ann Arbor ○ cryptoparty.in/ann_arbor - @CryptopartyAA ● Chiptunes are cool ● NOT a cryptographer
  • 5. History tl;dr: ● ANSI, NIST, ISO standardized Deterministic Random Bit Generator ● Designed/promoted/backdoored by NSA ● Secure crypto REQUIRES random numbers ● Cool story I won’t repeat
  • 6. DUAL_EC_DRBG NIST SP 800-90A: ● some elliptic curve over a finite field ● some points P, Q on the curve ● some process of getting output and permuting secret state
  • 7. MATH BASICS Wait… what do those words in the standard mean? What the hell does this look like?
  • 10. Groups ● set of elements G, with an operation + ● “order”: how many elements it has Think Whole Numbers (Integers) with only +
  • 12. Scalar Multiplication on EC n*P = P + P + … + P ● (n times) ● n is an integer, P is a point ● Important for the standard
  • 13. Discrete Logarithm ● No efficient algorithm known b^k = g b*b*b* … *b = g (k times) k = log_b (g) ( P = d*Q )
  • 14. Math Concepts/Tools Essential to understanding, won’t be covered in more depth ● Subgroups, Cyclic groups ● Cauchy’s, Lagrange’s, Sylow’s theorems ● Finite Fields
  • 15. Two Versions... ● Dual EC 2006 ● Dual EC 2007 I’ll focus on Dual EC 2006
  • 17. DUAL_EC_DRBG ● Defined elliptic curve, points P, Q ○ COULD use your own, but MUST use NIST provided constants for FIPS 140 certification ● P, Q are in the same group
  • 18. DUAL_EC_DRBG The order of the group P, Q are in is also defined as n ● for curve P-256, n = 11579208921035624876269744694940757 35299969552241357603424222590610685 12044369 ○ huh...
  • 20. Tools ● Lagrange’s Theorem: Order of a subgroup divides the order its group ● Group generated by X: <X> = {X, X+X, X+X+X, … }
  • 21. So... ● Q is in a group of prime order ● Lagrange’s Theorem! Order of <Q> is either 1 or n (turns out it’s n). ● Q must generate that entire group! ● <Q> = {Q, Q+Q, Q+Q+Q, … }
  • 22. DUAL_EC_DRBG There exists some integer d such that: P = d * Q (P = Q + Q + … + Q) Spoiler alert: that’s the backdoor
  • 23. DUAL_EC_DRBG Secret state s, points P, Q, functions f, g: ● f(s) = x(s*P) ○ updates secret state: s1 := f(s0) ● g(s) = x(s*Q) ○ gives you random bits: r1 := g(s1)
  • 24. DUAL_EC_DRBG ϕ: “put this into bits”, like an integer extract_bits: remove 16 most significant bits
  • 25. DUAL_EC_DRBG Simplified algorithm (no additional input) (courtesy: Daniel J. Bernstein, Tanja Lange, and Ruben Niederhagen)
  • 26. DUAL_EC_DRBG (Daniel J. Bernstein, Tanja Lange, and Ruben Niederhagen)
  • 27. DUAL_EC_DRBG Shumow-Ferguson attack: ● observe random output r ● 2^16 ACTUAL r1 candidates. brute-force. ● curve equation to recover R=(r1, y) ○ use tonelli-shanks to get y, easy! ● x-coord of d*R gets us secret state s2 :) ○ backdoor!
  • 28. 2006 & simple Observe a full round’s-worth of output
  • 29. 2006 & simple brute-force to compensate for 16 truncated bits
  • 30. 2006 & simple scalar multiply with backdoor. ONE of these will give secret state s2! we win!
  • 34. (Daniel J. Bernstein, Tanja Lange, and Ruben Niederhagen)
  • 35. DUAL_EC_DRBG (These are all group operations) ● R = s1*Q = g(s1) ● d*R = d*(s1*Q) = s1*(d*Q) = s1*P ● d*R = s1*P = f(s1) ● x(d*R) = x(s1*P) = s2 ● internal state s2 isn’t secret anymore
  • 36. DUAL_EC_DRBG So, if you know d, you can backtrack and recover state! P = d*Q
  • 38. DUAL_EC_DRBG Demo? OK, so that’s cool, but can we demo this? Actually cracking it is difficult, since we don’t know d and can’t easily find it... Two things you can do
  • 40. Be Awesome ● BSAFE - :,( ○ Java - Includes fingerprints in connections ○ C - gives longer string of random bits. Faster attack! ● SChannel - :/ ○ Bug that made it slightly faster to attack. ● OpenSSL - :| ○ Only FIPS version ○ Easily fixed but totally breaking bug ○ Uses additional input :)
  • 41. Be Awesome Each TLS library needs a tailored attack 1. Recover state from session ID/server random fields in handshake 2. Compute DHE/ECDHE shared secret => get “master secret” 3. (optionally) recover long-lived DSA/ECDSA signing key
  • 42. Be Awesome Exploiting a real-world instance is certainly tricky, but possible!
  • 43. Weak DUAL_EC_DRBG Or… re-make everything, but smaller. More contrived, but hopefully a bit easier to grasp. Requires algebra know-how
  • 45. Weak DUAL_EC_DRBG ● Get some large-ish finite field (integers mod some prime) ○ 331337 is prime. cool! ● Find a curve (I have no idea what I’m doing here) ● Find some point Q on the curve that generates a large-ish subgroup of prime order
  • 46. Weak DUAL_EC_DRBG ● Need a point Q in a subgroup of prime order. But, a large enough prime that cracking isn’t too easy (not 2, 5, 7, …) ○ Choice of finite field should put an upper bound on subgroup’s size: Don’t worry about making it too hard.
  • 47. Weak DUAL_EC_DRBG If Q itself doesn’t generate a prime-order subgroup, some scalar multiple of Q will. ● If order of <Q> is not prime, factor it ○ hope it has a large prime factor ■ if not… try another Q! ¯_(ツ)_/¯ ○ If it does: Cauchy’s theorem => subgroup of that order exists! Generate with scalar multiple of Q ■ ‘intuition’ from quotient groups
  • 48. Weak DUAL_EC_DRBG ● Once we’ve chosen Q, finding P is easy ○ pick your backdoor integer d ○ P = d*Q ○ publish P, Q. keep d secret. ● But, our subgroup is small enough we can use brute-force to find d
  • 49. Weak DUAL_EC_DRBG https://github.com/zandi/dual_ec_demo ● Working weak DUAL_EC_DRBG code! ○ jeopardy ctf-style, server challenges client ○ 3 lead-in levels building up to Dual EC wannabe level ○ test attack code for each level. ○ scary but harmless cruft Go learn!
  • 50. Practical Takeaway What did we learn from this whole ordeal? Is there anything we need to do *right now* to secure ourselves? What can we do going forward to prevent this from happening again?
  • 51. Practical Takeaway ● NSA, NIST, ANSI, etc.? ○ MAYBE trust, DEFINITELY verify, peer-review. ● Using same PRNG instance for secret & non-secret random numbers. Bad idea? ○ Shouldn’t HAVE to program defensively against your crypto library/rng, but is it a good idea? ehhh… maybe not.
  • 52. ● NIST SP 800-90A ● “The NSA Back Door to NIST” - Thomas C. Hales, Notices of the AMS Vol. 61 No. 2 ● http://projectbullrun.org/dual-ec/index.html ● “Dual EC: A Standardized Back Door” - Daniel J. Bernstein, Tanja Lange, and Ruben Niederhagen ● “Practical Kleptography” - Matthew Green, Woot ‘14 ● https://www.usenix. org/conference/usenixsecurity14/technical- sessions/presentation/checkoway ● Jeremy Kun - elliptic curves over finite fields library - https://github.com/j2kun/elliptic-curves-finite-fields
  • 53. Keep in touch! @the_zandi the.zandi@gmail.com Thanks David Adrian, “his excellency” dafluck, jimtern, Misec, Arbsec, A2Y.asm, Obama, and Satan