Une tentative de cryptanalyse HFE, FB & BDD Une tentative de cryptanalyse
HFE: histoire HFE ? Hidden Field Equations Cryptographie à clé publique utilisant des polynômes sur corps finis Matsumoto & Imai: EuroCrypt’88 Patarin: Crypto’95 Patarin: HFE EuroCrypt’96 Intérêts: cryptographie embarquée
HFE: principes Principes: Algorithmes d’extraction des zéros d’un polynôme mono-varié sur corps fini si son degré n’est pas trop élevé Corps fini extension de F2 (F2n), expression possible sous forme SEB (n eqs. à n vars. Booléennes)
HFE: exemple Polynôme secret de degré 9 sur F26: (01111)X1 + (01001)X2 + (01001)X3 + (000011)X4 + (11101)X5 + (110011)X6 + (010111)X8 + (11111)X9 y1=1+x1+x5+x6+x1x2+x1x3+x1x4+x2x3+x2x5+x2x6+x5x6 y2=1+x1+x2+x3+x4+x6+x1x2+x1x5+x1x6+x2x3+x3x4+x4x5+x4x6+x5x6 y3=0+x1+x2+x4+x5+x6+x1x2+x3x6+x4x6+x5x6 y4=0+x1+x2+x3+x1x2+x1x5+x1x6+x2x4+x2x6+x3x5+x3x6+x4x5+x4x6 y5=0+x4+x6+x1x5+x2x5+x2x6+x3x4+x3x5+x3x6 y6=0+x1+x2+x4+x6+x1x2+x1x4+x1x5+x2x5+x3x5+x3x6+x4x5+x4x6
HFE: publique/privée Polynôme: clé privée SEB: clé publique Il doit être (pour le moins) difficile de retrouver la clé privée à partir de la clé publique => Masquage du polynôme original en «brouillant» les pistes
HFE: (dé)chiffrement Chiffrement: Vecteur x de n bits en entrée (texte clair) du SEB => en sortie vecteur y de n bits (texte chiffré) Déchiffrement: «Remonter» y dans le corps F2n et résoudre P(X)-Y=0
HFE: challenge HFE sur F280 avec degré 96 HFE est aujourd’hui cassé Faugère (2002): base de Gröbner. Algorithme F5/2 implanté dans Magma D’autres techniques ? Tentative par BDD (MVY)
BDD: histoire Branching Programs Bryant’86 Représentation réduite canonique «efficace en pratique» des FB Utilisation: vérification de circuits, arbre de défaillances, (complexité Booléenne?)…
BDD: principes Décomposition des FB: Arbre de décomposition ex: f(x1,…,xn) = f'(0,x2,…,xn)+f "(1,x2,…xn) Arbre de décomposition Réduction d’arbre (par identification de sous-arbres isomorphes) => Graphe Booléen acyclique Confluence => Représentation canonique => Complexité Booléenne
BDD: exemple 1 Arbre de Vérité 1 1 BDD BDD irréductible
BDD: manipulation Algorithme de «composition» de BDD pour les opérateurs usuels: somme, produit, etc
BDD, HFE Résolution HFE par BDD: BDD de chaque Ei R0=1 Pour i=1..n Ri=Ri-1.Ei Lire le résultat dans Rn
BDD, HFE: mesures GF2(24) Degre 2304 Vecteur entrant Vx : 110101100010111011001110 Vecteur sortant Vy : 111111011001111111100111 Equation 1 : 0s 12283 nodes Equation 2 : 0s 9179 nodes Equation 3 : 0s 10235 nodes Equation 4 : 0s 8185 nodes Equation 5 : 0s 12283 nodes Equation 6 : 0s 7161 nodes Equation 7 : 0s 10229 nodes Equation 8 : 0s 6901 nodes Equation 9 : 0s 9205 nodes Equation 10 : 1s 10235 nodes Equation 11 : 1s 12279 nodes Equation 12 : 1s 12285 nodes Equation 13 : 1s 12281 nodes Equation 14 : 1s 7675 nodes Equation 15 : 1s 10235 nodes Equation 16 : 1s 12285 nodes Equation 17 : 1s 10235 nodes Equation 18 : 1s 10233 nodes Equation 19 : 2s 7285 nodes Equation 20 : 2s 11773 nodes Equation 21 : 2s 9209 nodes Equation 22 : 2s 12283 nodes Equation 23 : 2s 9213 nodes Equation 24 : 2s 10231 nodes Eq. 1 : 2s 12283 nodes Res. 1 : 3s 2s 12283 nodes Eq. 2 : 3s 9179 nodes Res. 2 : 4s 3s 210735 nodes Eq. 3 : 4s 10235 nodes Res. 3 : 7s 6s 589695 nodes Eq. 4 : 7s 8185 nodes Res. 4 : 11s 9s 490549 nodes Eq. 5 : 11s 12283 nodes Res. 5 : 13s 11s 318192 nodes Eq. 6 : 13s 7161 nodes Res. 6 : 14s 12s 199306 nodes Eq. 7 : 14s 10229 nodes Res. 7 : 15s 13s 123517 nodes Eq. 8 : 15s 6901 nodes Res. 8 : 16s 14s 78076 nodes Eq. 9 : 16s 9205 nodes Res. 9 : 16s 14s 46515 nodes Eq. 10 : 16s 10235 nodes Res. 10 : 16s 14s 26830 nodes Eq. 11 : 16s 12279 nodes Res. 11 : 16s 14s 16579 nodes Eq. 12 : 16s 12285 nodes Res. 12 : 16s 14s 11242 nodes Eq. 13 : 16s 12281 nodes Res. 13 : 16s 14s 8080 nodes Eq. 14 : 16s 7675 nodes Res. 14 : 17s 14s 5524 nodes Eq. 15 : 17s 10235 nodes Res. 15 : 17s 14s 3591 nodes Eq. 16 : 17s 12285 nodes Res. 16 : 17s 14s 2307 nodes Eq. 17 : 17s 10235 nodes Res. 17 : 17s 14s 1359 nodes Eq. 18 : 17s 10233 nodes Res. 18 : 17s 14s 883 nodes Eq. 19 : 17s 7285 nodes Res. 19 : 17s 14s 546 nodes Eq. 20 : 17s 11773 nodes Res. 20 : 17s 14s 332 nodes Eq. 21 : 17s 9209 nodes Res. 21 : 17s 14s 234 nodes Eq. 22 : 17s 12283 nodes Res. 22 : 17s 14s 121 nodes Eq. 23 : 17s 9213 nodes Res. 23 : 17s 14s 67 nodes Eq. 24 : 17s 10231 nodes Res. 24 : 17s 14s 25 nodes Pure time : 14 Vecteur entrant Vx : 110101100010111011001110 Voici la solution No 1: 110101100010111011001110 Biggest bdd : 589695 nodes Biggest equation : 12285 nodes Pure CPU time : 14 seconds Elapsed CPU Time : 17 seconds
BDD, HFE: mesures
BDD: complexité Quels sont ces BDDs générés ? Ils ne sont pas maximaux mais presque À quoi les maximaux ressemblent-ils ? Connu: ils sont de taille O(2n/n) Combien sont-ils ?
BDD: maximaux On sait: r0(f)=1 and rn(f)=1 or 2 ri+1(f) 2ri(f) ri(f) inf(2i,22n-i)
BDD: maximaux Hauteur d’inflexion: unique entier h(n): 2h(n)-1 22n-(h(n)-1) and 2h(n) ≥ 22n-h(n) Pair d’inflexion (2h(n)-1,22n-h(n))
BDD: maximaux n0, C(n) 2h(n) 1 card(Hn) ? 1 3 2 5 9 4 13 21 6 37 7 53 8 85 149 10 277 11 533 n0, C(n) 2h(n) 1 card(Hn) ? Quelles sont ces fonctions ?
BDD: maximaux Parties supérieure & inférieure fixées: arbre binaire complet toutes les FB Qu’y a t-il en zone d’inflexion ?
BDD: inflexion De combien de façon peut-on connecter 2h(n)-1 nœuds à 22n-h(n) ? Plus généralement de combien de façon C(k,m) peut-on connecter k nœuds à m nœuds (k et m respectent la construction BDD) ?
BDD: connexions Théorème: C(k,m) vérifie ou if then else C(k,m)=0 C(1,1)=1, C(1,2)=2 if then else C(k,m)=0 k!C(k,m) = (m2-k+1)(k-1)!C(k-1,m) + m(2m-1)(k-1)!C(k-1,m-1) + m(m-1)(k-1)!C(k-1,m-2)
BDD: nombres 1 2 3 4 5 6 7 8 18 72 123 126 84 36 9 12 248 1322 3864 7672 11296 12834 300 4800 32550 137900 423860 1017315 120 7800 121212 1003632 5634360 23963760 5880 235200 3791032 37162384 261418626 1680 248640 8280272 141626144 1605962556 136080 10886400 336616560 6156764640 10 30240 8517600 516327840 15590248560 11 3659040 512265600 26837228880 665280 318003840 31638388320 13 112432320 25184839680 14 17297280 12955662720 15 3891888000 16 518918400
BDD: nombres Cas particulier: Si n=a+2a l’inflexion est (22a-1, 22a) alors le nombre de BDD est 22a! Sinon Si n=a+b+2a où 0<=b<=2a alors le nombre de BDD est inférieur à 22a+b!
FB: Storage Access La fonction SA2a(x0,…,x2a-1,y0,…,ya-1)=xm où m=y0y1…ya-1 X: état de la mémoire Y: adresse à lire Théorème: SA2a est une fonction dure
FB: Twisted Storage Access SA2a(x0,…,x2a-1,y0,…,ya-1)= SA2a((X),y0,…,ya-1) où (X) est une permutation sur l’ensemble des mots x0…x2a-1 Les Twisted Storage Access sont dures et en nombre 22a!
C(p0,p1) x C(p1,p2) x … x C(pn-1,pn) FB: problèmes ? Dénombrer les FB pour un profil donné C(p0,p1) x C(p1,p2) x … x C(pn-1,pn) Dénombrer les FB pour une complexité donné (dénombrer les profils)
HFE: retour ? Exploration des autres modèles de BDD, en particulier les kBDD basés sur d’autres décomposition Booléennes: f(x1,…,xn) = x1.f'(x2,…,xn)+f "(x2,…xn) plus adaptés aux algorithmes basés sur l’algèbre (Buchberger/Gröbner)