Juin 2006, le NIST publie les spécifications de plusieurs générateurs de nombres pseudo-aléatoires, dont le tristement célèbre Dual_EC_DRBG, dans la norme NIST SP 800-90A, et cela malgré le scepticisme de la communauté crypto. Depuis, il a été démontré que ce générateur peut facilement être détourné pour rendre ses sorties totalement prévisibles, en faisant un cas d'école de kleptographie (ce qui n'a pas empêché qu'il soit utilisé).
Cette présentation technique donnera les bases nécessaires pour comprendre l'utilisation des courbes elliptiques en cryptographie et comment elles ont servi à corrompre ce générateur d'aléa.
Sthack 2015 - Aris "@aris_ada" Adamantiadis - DUAL_EC_DRBG : Une histoire de portes dérobées dans les standards
1. DUAL EC DRBG : Une histoire de portes d´erob´ees
dans les standards
Aris Adamantiadis <aris@badcode.be>
http://www.badcode.be/
27/03/2015
2. Introduction
DUAL EC DRBG
Maths des courbes elliptiques
`A l’int´erieur de DUAL EC
Impl´ementation
Qui suis-je ?
Aris Adamantiadis <aris@badcode.be> DUAL EC DRBG : Une histoire de portes d´erob´ees dans les stand
3. Introduction
DUAL EC DRBG
Maths des courbes elliptiques
`A l’int´erieur de DUAL EC
Impl´ementation
Historique
Critiques
DUAL EC DRBG
Dual Elliptic Curve Deterministic Random Bit Generator
Introduit dans la norme FIPS dans NIST SP800-90A en 2005
D´evelopp´e par la NSA
But : fournir un DRBG n’utilisant ni hash, ni chiffrement en
blocs
Un historique de critiques `a faire rougir RC4
Aris Adamantiadis <aris@badcode.be> DUAL EC DRBG : Une histoire de portes d´erob´ees dans les stand
4. Introduction
DUAL EC DRBG
Maths des courbes elliptiques
`A l’int´erieur de DUAL EC
Impl´ementation
Historique
Critiques
Ligne du temps
2004 Premier draft de Dual EC DRBG
2004 RSA impl´emente Dual EC dans BSAFE (pour $10M)
2005 Brevet de Certicom ”key escrow mechanism”
2006 Publication de NIST SP800-90A
2007 Shumow et Ferguson (Microsoft) pr´esentent la
possibilit´e de porte d´erob´ee
2013 Snowden publie des documents sur Bullrun
2013 RSA conseille `a ses clients de ne plus utiliser Dual EC
2014 Dual EC DRBG est retir´e de SP800-90A
Aris Adamantiadis <aris@badcode.be> DUAL EC DRBG : Une histoire de portes d´erob´ees dans les stand
5. Introduction
DUAL EC DRBG
Maths des courbes elliptiques
`A l’int´erieur de DUAL EC
Impl´ementation
Historique
Critiques
Critiques de Dual EC DRBG
Lenteur : 2 op´erations EC par 30 octets
Param`etres constants suspects
Aucune preuve de s´ecurit´e n’existe1
Biais dans bits de sortie
Le connaissance de relation entre P et Q permet de deviner
les sorties ult´erieures2
1
http://blog.cryptographyengineering.com/2013/09/
the-many-flaws-of-dualecdrbg.html
2
Shumow et Ferguson, Microsoft
Aris Adamantiadis <aris@badcode.be> DUAL EC DRBG : Une histoire de portes d´erob´ees dans les stand
6. Introduction
DUAL EC DRBG
Maths des courbes elliptiques
`A l’int´erieur de DUAL EC
Impl´ementation
Historique
Critiques
Pourquoi c’est mal ?
On ´evite d’utiliser de la cryptographie faible ou cass´ee
Si l’organisation qui a g´en´er´e Q connait la clef priv´ee, ils
peuvent exploiter la porte d´erob´ee.
SSL/TLS/SSH ´echangent 32 octets al´eatoires en clair
PRNG critique pour la confidentialit´e :
ECDSA/DSA: leak de la clef secr`ete
DH/DHE/ECDH/ECDHE: leak de la clef de session
RSA: leak de la clef de session
Aris Adamantiadis <aris@badcode.be> DUAL EC DRBG : Une histoire de portes d´erob´ees dans les stand
7. Introduction
DUAL EC DRBG
Maths des courbes elliptiques
`A l’int´erieur de DUAL EC
Impl´ementation
Courbe elliptique
Utilisation en cryptographie
D´efinition
Ensemble de points ob´eissant `a une
structure de groupe
Equation : y2 = x3 + ax + b(mod p)
Module premier p : d´efini le champ fini
Z/pZ de l’´equation
Ordre r: nombre de points dans le groupe
a et b: entiers fix´es par convention
(a = −3 pour NIST GF(p))
Un g´en´erateur (Gx , Gy ), ´element de base
du groupe
Aris Adamantiadis <aris@badcode.be> DUAL EC DRBG : Une histoire de portes d´erob´ees dans les stand
8. Introduction
DUAL EC DRBG
Maths des courbes elliptiques
`A l’int´erieur de DUAL EC
Impl´ementation
Courbe elliptique
Utilisation en cryptographie
Points
Point: coordonn´ees (Px , Py ) qui satisfont
l’´equation
Not´es en lettres capitales (P,G,Q)
Acceptent une op´eration d’addition
(P + Q)
L’addition est commutative et associative
Multiplication scalaire: nP
Associative et commutative:
a(bP) = b(aP)
Le scalaire est un entier modulo r
Aris Adamantiadis <aris@badcode.be> DUAL EC DRBG : Une histoire de portes d´erob´ees dans les stand
9. Introduction
DUAL EC DRBG
Maths des courbes elliptiques
`A l’int´erieur de DUAL EC
Impl´ementation
Courbe elliptique
Utilisation en cryptographie
Utilisation en cryptographie
Certaines courbes ont des caract´eristiques utiles en crypto
l’´equation iP = Q est facile `a r´esoudre pour P ou Q
...Mais difficile `a r´esoudre pour i
Probl`eme du logarithme discret dans le groupe EC
Les points sont souvent utilis´es comme clefs publiques et
scalaires comme clefs priv´ees
Aris Adamantiadis <aris@badcode.be> DUAL EC DRBG : Une histoire de portes d´erob´ees dans les stand
10. Introduction
DUAL EC DRBG
Maths des courbes elliptiques
`A l’int´erieur de DUAL EC
Impl´ementation
Algorithme
Une attaque
Generation des constantes
Algorithme
Aris Adamantiadis <aris@badcode.be> DUAL EC DRBG : Une histoire de portes d´erob´ees dans les stand
11. Introduction
DUAL EC DRBG
Maths des courbes elliptiques
`A l’int´erieur de DUAL EC
Impl´ementation
Algorithme
Une attaque
Generation des constantes
Algorithme d´eroul´e
1 i0 = randomseed()
2 i1 = φ(x(i0P))
3 o0 = φ(x(i1Q))
4 output(30 LSB o0)
5 i2 = φ(x(i1P))
6 o1 = φ(x(i2Q))
7 output(30 LSB o1)
Aris Adamantiadis <aris@badcode.be> DUAL EC DRBG : Une histoire de portes d´erob´ees dans les stand
12. Introduction
DUAL EC DRBG
Maths des courbes elliptiques
`A l’int´erieur de DUAL EC
Impl´ementation
Algorithme
Une attaque
Generation des constantes
Une attaque
1 i0 = randomseed()
2 i1 = φ(x(i0P))
3 o0 = φ(x(i1Q))
4 output(30 LSB o0)
5 i2 = φ(x(i1P))
6 o1 = φ(x(i2Q))
7 output(30 LSB o1)
Tentons de deviner o1 depuis o0
o0 est la coordonn´ee X d’un point A, dont
il manque 16 bits
Pour chaque valeur de X, il y a 0, 1 ou 2
points sur la courbe
On peut r´ecup´erer ce point A en 217
op´erations
Hypoth`ese: nous connaissons A = i1Q
Aris Adamantiadis <aris@badcode.be> DUAL EC DRBG : Une histoire de portes d´erob´ees dans les stand
13. Introduction
DUAL EC DRBG
Maths des courbes elliptiques
`A l’int´erieur de DUAL EC
Impl´ementation
Algorithme
Une attaque
Generation des constantes
Une attaque
1 i0 = randomseed()
2 i1 = x(i0P)
3 o0 = x(i1Q)
4 output(30 LSB o0)
5 i2 = x(i1P)
6 o1 = x(i2Q)
7 output(30 LSB o1)
Hypoth`ese: nous connaissons A = i1Q
Hypoth`ese: il existe une relation dQ = P
d est la clef secr`ete de la backdoor!
i1dQ = dA (mult. par d)
i1P = dA (dQ = P)
i2 = x(i1P) = x(dA)
o1 = x(i2Q) = x(x(dA)Q)
Aris Adamantiadis <aris@badcode.be> DUAL EC DRBG : Une histoire de portes d´erob´ees dans les stand
14. Introduction
DUAL EC DRBG
Maths des courbes elliptiques
`A l’int´erieur de DUAL EC
Impl´ementation
Algorithme
Une attaque
Generation des constantes
G´en´eration des constantes
On a d´efini dQ = P
Probl`eme: P est fixe (g´en´erateur)
on doit calculer e tel que deQ = eP
ed = 1 (dans la courbe C)
ed = 1 (mod r)
On obtient Q = eP
Aris Adamantiadis <aris@badcode.be> DUAL EC DRBG : Une histoire de portes d´erob´ees dans les stand
15. Introduction
DUAL EC DRBG
Maths des courbes elliptiques
`A l’int´erieur de DUAL EC
Impl´ementation
Obtenir le(s) point(s) A
G´en´erer la sortie
Impl´ementation
Conclusion
Obtenir le(s) point(s) A
On ´etait parti sur l’hypoth`ese que A est connu
On n’a que 30 octets de x(A)
Pour les 16 bits qui manquent, cr´eer un candidat pour A
R´esoudre l’´equation y2 = x3 − 3x + b (mod p)
y = sqrt(x3 − 3x + b) (mod p)
On obtient 0, 1 ou 2 solutions (Ax , Ay ) et (Ax , −Ay )
Aris Adamantiadis <aris@badcode.be> DUAL EC DRBG : Une histoire de portes d´erob´ees dans les stand
16. Introduction
DUAL EC DRBG
Maths des courbes elliptiques
`A l’int´erieur de DUAL EC
Impl´ementation
Obtenir le(s) point(s) A
G´en´erer la sortie
Impl´ementation
Conclusion
G´en´erer la sortie
L’´etape pr´ec´edente a g´en´er´e une liste de candidats pour A
G´en´erer o1 = x(x(dA)Q) pour chaque A
Comparer les deux derniers octets du texte clair connu avec o1
En cas de match, on a r´ecup´er´e l’´etat du PRNG
Aris Adamantiadis <aris@badcode.be> DUAL EC DRBG : Une histoire de portes d´erob´ees dans les stand
17. Introduction
DUAL EC DRBG
Maths des courbes elliptiques
`A l’int´erieur de DUAL EC
Impl´ementation
Obtenir le(s) point(s) A
G´en´erer la sortie
Impl´ementation
Conclusion
Impl´ementation
Impl´ementation de l’algorithme de cassage en C
`A t´el´echarger sur mon github3
Utilise OpenSSL FIPS patch´e
Premi`ere impl´ementation publique (12/2013)
3
https://github.com/arisada/dualec_poc
Aris Adamantiadis <aris@badcode.be> DUAL EC DRBG : Une histoire de portes d´erob´ees dans les stand
18. Introduction
DUAL EC DRBG
Maths des courbes elliptiques
`A l’int´erieur de DUAL EC
Impl´ementation
Obtenir le(s) point(s) A
G´en´erer la sortie
Impl´ementation
Conclusion
Impl´ementation
aris@kalix86:~/dualec$ ./dual_ec_drbg_poc
s at start of generate:
E9B8FBCFCDC7BCB091D14A41A95AD68966AC18879ECC27519403B34231916485
[omitted: many output from openssl]
y coordinate at end of mul:
0663BC78276A258D2F422BE407F881AA51B8D2D82ECE31481DB69DFBC6C4D010
r in generate is:
96E8EBC0D507C39F3B5ED8C96E789CC3E6861E1DDFB9D4170D3D5FF68E242437
Random bits written:
000000000000000000000000000000000000000000000000000000000000
y coordinate at end of mul:
5F49D75753F59EA996774DD75E17D730051F93F6C4EB65951DED75A8FCD5D429
s in generate:
C64EAF10729061418EB280CCB288AD9D14707E005655FDD2277FC76EC173125E
[omitted: many output from openssl]
PRNG output: ebc0d507c39f3b5ed8c96e789cc3e6861e1ddfb9d4170d3d5ff68e242437449e
Found a match !
A_x: 96e8ebc0d507c39f3b5ed8c96e789cc3e6861e1ddfb9d4170d3d5ff68e242437
A_y: 0663bc78276a258d2f422be407f881aa51b8d2d82ece31481db69dfbc6c4d010
prediction: a3cbc223507c197ec2598e6cff61cab0d75f89a68ccffcb7097c09d3
Reviewed 65502 valid points (candidates for A)
PRNG output: a3cbc223507c197ec2598e6cff61cab0d75f89a68ccffcb7097c09d3
Aris Adamantiadis <aris@badcode.be> DUAL EC DRBG : Une histoire de portes d´erob´ees dans les stand
19. Introduction
DUAL EC DRBG
Maths des courbes elliptiques
`A l’int´erieur de DUAL EC
Impl´ementation
Obtenir le(s) point(s) A
G´en´erer la sortie
Impl´ementation
Conclusion
Conclusion
Aris Adamantiadis <aris@badcode.be> DUAL EC DRBG : Une histoire de portes d´erob´ees dans les stand
20. Introduction
DUAL EC DRBG
Maths des courbes elliptiques
`A l’int´erieur de DUAL EC
Impl´ementation
Obtenir le(s) point(s) A
G´en´erer la sortie
Impl´ementation
Conclusion
Conclusion
Aris Adamantiadis <aris@badcode.be> DUAL EC DRBG : Une histoire de portes d´erob´ees dans les stand