Lundi 22 Septembre 2014
La Tragédie des facteurs communs
Publié le 27 Février 2012

X.509 (#) est un standard de l'ITU Telecommunication Standardization Sector pour les infrastructures à clés publiques. (Il est également parfois employé dans les infrastructure de gestion de privilèges pour le traitement des autorisations.) Dans cette norme, un certificat garantit l'association d'une clé publique à une entité nommée et identifiée. Les certificats sont délivrés par des autorités de certification qui peuvent dépendre les unes des autres dans une forme hiérarchique. Les navigateurs du marché sont livrés, par exemple, avec un certain nombre de certificats des autorités « racines » pré-installés de façon à ce que les certificats SSL des éditeurs et des fournisseurs de services soient immédiatement reconnus.



OpenPGP(#) est un autre dispositif populaire sur Internet pour chiffrer les échanges et authentifier les messages. Il fonctionne sans hiérarchie d'autorités de certifications, comme celles du standard X.509, et met également en oeuvre un chiffrement symétrique à clés publiques.
 

Les clés publiques sont donc devenues avec la généralisation des infrastructures de sécurité — que l'on pense aux protocoles SSL/TLS (#) et HTTPS (#), par exemple — l'épine dorsale du e-commerce, du paiement des transactions en ligne, de l'authentification des utilisateurs de services Web mais également de toutes les télécommunications, via leur rôle dans les routeurs, les équipements de télécommunications, les cartes à puces et les lecteurs, et dans la prolifération envahissante des devices connectés qui nous submerge.
 

Une cladistique des clés publiques. À première vue, ces clés publiques sont d'apparence bien modeste au regard de l'importance qu'elles ont prise aujourd'hui dans tous les secteurs de l'économie numérique : ce ne sont, après tout, que des nombres entiers, si connus et ressasses qu'on les dit « naturels ». Mais, pas de méprise ! Ces entiers ne sont point les chétives créatures qu'ils paraissent à l'oeil non averti...
 

Le naturaliste arithméticien porté sur la cryptographie distingue ainsi dans la zoologie des clés publiques quelques clades particulièrement intéressants. Les modules RSA, peut-être les plus populaires et les plus connus — nommés d'après Ron Rivest, Adi Shamir et Leonard Adleman en 1978 (#) — sont des nombres entiers qui sont le produit de deux très grands nombres premiers : n = pq, où p et q représentent ces très grands nombres premiers. La robustesse de RSA repose sur la difficulté que représente la factorisation de n : c'est-à-dire l'effort de calcul nécessaire pour déterminer p et q connaissant n. C'est un problème pour lequel on ne connaît pas à ce jour d'algorithme en temps polynomial. Dans l'infrastructure à clés publiques RSA, le message M est chiffré en calculant Me [n], M porté à la puissance e, modulo n, la clé publique du destinataire. (On suppose que tous les messages sont au final codés comme des entiers, ou des blocs d'entiers.) Le destinataire, seul à connaître les fameux très grands nombres premiers p et q du module RSA, est donc seul à posséder la clé privée d qui lui permet de déchiffrer le message crypté Me. En effet, connaissant p et q, d et e ont été choisis tels que ed - 1 soit divisible par (p - 1)(q - 1) ; du coup, pour déchiffrer on élève à nouveau le message crypté à la puissance d modulo n et l'on obtient Med qui n'est autre que M lui-même modulo n. (Cette dernière identification miraculeuse est due au Petit théorème de Fermat (#), l'autre gus de Montauban, notre arithméticien national plus fameux par son grand théorème, dit aussi le dernier, démontré il y a quelques années (#) par Andrew Wiles.)


Dans cette cladistique des clés publiques on trouve également les clés El Gamal (#) qui en appellent à l'imposante théorie algébrique des nombres. Cette fois la clé est constituée de trois entiers : p un nombre premier, g un générateur du groupe des entiers modulo p, et y un entier (public) tel que y = gxx, un entier strictement inférieur à p - 1, est la clé privée.


D'autres clés publiques sont utilisées pour la signature numérique ou DSA (Digital Signature Algorithm) défini dans les standards du FIPS (FIPS 186-3) promulgués par le gouvernement américain. La clé publique DSA est un quadruplet (p, q, g, y) dans lequel p et q sont des nombres premiers tels que q divise p - 1, g est un générateur d'un sous-groupe d'ordre q du groupe des entiers positifs modulo p et, comme dans le El Gamal, y = gxx, un entier strictement inférieur à q, est la clé privée.


Enfin on trouve également les clé publiques basées sur les courbes elliptiques (#) depuis les premiers travaux de Miller en 1985, dont je vous ferai grâce des détails puisque, vaillant lecteur, vous êtes malgré tout parvenu jusqu'ici !


De la poliorcétique des clés publiques. Inutile de dire que ces clés publiques ont été, depuis la publication des premiers algorithmes de chiffrement, l'objet d'attaques innombrables et furieuses tant des mathématiciens intéressés à la démonstration de leur robustesse que des hackers sublimés par l'exploit et la gloire du cassage des infrastructures de sécurité. Dans l'ensemble, cependant, le secret RSA — pour prendre le plus répandu — est plutôt bien gardé (#) et les ingénieux algorithmes de décomposition en facteurs premiers lancés à son assaut n'ont pas encore fait tomber la forteresse.


Il est difficile de résister ici à la tentation de mentionner quelques uns de ces algorithmes qui sont de véritables petits bijoux calculatoires (#). Par exemple, le crible algébrique (GNFS General Number Field Sieve) est un algorithme, fondé sur l'arithmétique modulaire particulièrement efficace pour la décomposition en facteurs premiers. L'algorithme de décomposition par fractions continues (#) plus ancien est toujours efficace, mais on lui préfère le crible quadratique de Pomerance (#) qui en 1990 établit un record en décomposant un nombre de 116 chiffres — en 1994, il décomposait un module RSA de 129 chiffres, premier d'une longue série de réussites des hussards de l'agèbre modulaire à l'assaut de la forteresse RSA : le dernier en date, en 2009, étant la décomposition d'un module RSA long de 768 bits (#) rendant aujourd'hui préférable le choix de clé de 1 024, voire 2 048 bits, dans les infrastructures PKI. Les algorithmes de Pollard (#) et de Williams, dont dérive le GNFS, établirent les records ultérieurs et furent employés dans les premières recherches de facteurs premiers réparties sur un très grand nombre de machines — technique de parallélisation maintenant très souvent employée pour l'analyse de très grands volumes de données en météorologie, en génétique, en astronomie, souvent via de simples économiseurs d'écrans proposés en libre chargement. Son titre de gloire fut la factorisation en 1993 (#) du neuvième nombre de Fermat — encore lui ! — 2512 + 1. Citons encore l'imprononçable SQUFOF (Square Form Factorization) de Daniel Shanks (#), et la factorisation par utilisation de courbes elliptiques (#) de Lenstra dans cette revue superficielle de l'attirail guerrier du cryptographe.


Si les modules RSA résistent encore c'est que sous leur frêle constitution de simple produit d'entiers, leur robustesse réside dans un choix des facteurs premiers p et q bien loin d'être innocent. La génération des clés pour les algorithmes comme RSA et ceux mentionnés précédemment est méticuleusement spécifiée dans plusieurs standards comme PKCS, IEEE 1363-2000, FIPS 186-3, ANSI X9.44 et ISO/IEC 18033-2, pour précisément résister aux attaques connues et anticipées. Cependant, première ombre au tableau réel qui s'annonce moins idyllique que le satisfecit irénique qui, semble-t-il, prévaut aujourd'hui, à l'examen approfondi (#) ces standards bien intentionnés diffèrent substantiellement les uns des autres. Cette diversité semblerait indiquer qu'il existe un consensus autour de l'idée que la robustesse d'un module RSA ne dépendrait pas nécessairement de l'exactitude de l'algorithme de génération. Et, de fait, on peut imaginer plusieurs processus de construction des modules RSA : construction théorique (#) — où p < q < rp pour r > 1 — ; construction simple décrite dans les standards et dans certaines implémentations comme OpenSSL, GnuPG et la librairie crypto de GNU, dans laquelle p et q sont choisis dans des intervalles donnés ; construction algorithmique dans laquelle, une fois choisi p, un calcul détermine q, pour que le produit tombe dans un intervalle choisi à l'avance. L'analyse de ces constructions démontre en effet que si la factorisation est dure (en temps non polynomial) celle des modules RSA uniformément construits par ces processus l'est également, ce qui serait donc plutôt positif. L'analyse des implémentations existantes, en revanche, montre qu'aucune d'entre elles (GNU crypto, GnuPG, OpenSSL, Openswan) ne suit exactement les standards en question (PKCS, IEEE 1363-2000, FIPS 186-3, RSA-OAEP, IEEE 1363-2000, NESSIE), avec pour résultat net que certaines implémentations et certains standards engendrent ces modules RSA de façon non uniforme. La non-uniformité, rappelons-le, ne met pas a priori en danger la sécurité des modules RSA, i.e la difficulté de leur factorisation qui est leur utime rempart, mais peut avoir un impact plus subtil qui vient d'être brutalement démontré par deux études de la population des clés publiques in vivo.

Skyscraper-ad

L'ethnologie des clés publiques. Sur ces considérations, somme toute relativement rassurantes, deux papiers récemment publiés — l'un à la conférence IMC 2011 (#), en novembre dernier à Berlin, par une équipe de TU München (#) ; l'autre dans l'ePrint Archive, mi-février 2012, par une équipe de l'EPFL (#) — distillent un troublant sentiment de panique. Ces ethnologues numériques ramènent des nouvelles bien inquiétantes de leurs études in vivo des clés publiques et des certificats X.509 tels qu'ils sont aujourd'hui utilisés dans leur habitat naturel Internet.


Tels des Dian Fossey de l'arithmétique, l'équipe de la TU München a vécu plus de 18 mois en compagnie de certificats X.509 sauvages, dans leur milieu Internet naturel, collectant des données depuis le premier million de sites Web les plus populaires dans le classement d'Alexa (#) et écoutant plus de 250 millions de sessions SSL/TLS sur le réseau universitaire allemand servant 120.000 personnes. Les résultats sont édifiants : l'infrastructure de certification X.509 actuellement en ligne se trouve dans un état avancé de détérioration.


Le pourcentage de certificats qui ne déclencheraient pas d'avertissement à l'utilisateur chez un client utilisant le référentiel racine de Mozilla (#) — qui a pourtant du pas mal grossir ces dernières années — ne dépasse par un très faible niveau de 18 %. Ce faible niveau de conformité s'explique par le très grand nombre de chaînes de validation incorrectes (40 % de tous les certificats vus !) et l'encore plus grand nombre de noms d'hôte incorrects ou manquants dans le certificat — ce qui contredit l'utilité et l'existence même d'un certificat en premier lieu ! Autres problèmes récurrents, les dates de validité des certificats depuis longtemps expirées, les certificats « escrocs » sans autorité racine, et le très grand nombre de certificats partagés par des entités sans relation entre elles (menant au problème d'usurpation d'identité, par exemple). Bref, un constat de déliquescence bien loin de la netteté chirurgicale du dispositif in vitro des spécifications des organismes de standardisation.


Mais ce n'est pas tout ! La seconde étude ethnologique de l'EPFL qui, quant à elle, a collecté plus de 11 millions de clés publiques par des scans d'un grand nombre d'hôtes Internet et en analysant le nouvel Observatoire du SSL (#) récemment mis en ligne par l'Electronic Frontier Foundation bat en brèche la belle assurance des arithméticiens modulaires.


Les 11,7 millions de clés publiques vues contiennent 6,4 millions de modules RSA distincts ; le reste est réparti entre clés El Gamal et clés DSA — une seule clé ECDSA repérée, un hapax. On y lit encore les scories de la dévastation due à la vulnérabilité de l'OpenSSL Debian de 2009 (#). Notée en mai 2008, une erreur de jugement avait conduit à retirer une seule ligne de code du générateur de nombre pseudo-aléatoire du paquetage OpenSSL dans la distribution Debian. Cette suppression entraînait une insuffisance d'entropie dans l'initialisation du générateur — à chaque usage — dont les nombres aléatoires ne devenaient plus aussi imprévisibles que théoriquement prévu, et qui, en conséquence, compromettait toutes les clés publiques engendrées sur les distributions dérivées de Debian, entre septembre 2006 et mai 2008. Par ricochet tous les systèmes, même non Debian, qui auraient utilisés des clés engendrées par l'OpenSSL Debian courraient de ce fait le risque d'être infectés et d'avoir été compromis. Épidémie majeure de compromission potentielle des transmissions et des échanges d'autant plus dangereuse qu'elle est largement sourde et invisible du grand public ! Ces clés furent blacklistées (#) et ces listes diffusées dans toutes les installations avec les mises à jour. Mais ces clés faibles circulent toujours aujourd'hui, leur proportion (0,3 %) est en baisse depuis 2009.


Ces modules RSA uniques, une fois collectés, ont été soumis à des analyses de factorisation, superficielles au vu de leur nombre, mais significatives quant aux conséquences réelles de leur usage sur le Net. Elles visent, notamment à vérifier l'hypothèse sous-jacente à la sécurité des architectures PKI qui est que dans la génération de clés publiques les choix antérieurs de nombres premiers ne sont jamais répétés. Et là, patatras ! Tout le bel édifice s'écroule devant les faits : sur 6,6 millions de certificats X.509 et clés PGP contenant des modules RSA, 270.000, soit 4 % partagent le même module RSA bien que n'impliquant des entités totalement étrangères. La duplication des clés est parfois la règle plutôt que l'exception...


Par ailleurs, l'étude a trouvé 12.934 modules RSA, soit 2 pour 1000, n'offrant aucune sécurité. Même en se restreignant aux modules RSA de taille 1.024 bits, les modules RSA en liberté aujourd'hui n'assurent au mieux qu'un niveau de sécurité de 99,8 %. (Une illustration saisissante : 98,49 % des certificats X.509 utilisent le même exposant RSA, 65.537, le lointain second à 0,76 % étant 17.) Lorsqu'on regroupe les 6.185.228 certificats X.509 lorsqu'ils partagent le même module RSA — les groupes qui ne contiennent qu'un seul module sont les « bons », leur sécurité est garantie par la solidité théorique de RSA — on trouve avec désespoir plus de 14 groupes de plus de 1.000 certificats ayant des modules RSA communs. Au total, l'étude ne dégage que 5.989.523 modules RSA distincts qui, de surcroît, malgré les factorisations des modules de 512 bits en 2006 et de 768 bits en 2009, ont à 2,4 % des tailles encore inférieures à 768 bits. Aujourd'hui 73,9 % sont des modules RSA de 1.024 bits, 21,7 % de 2.048 bits et le reste est constitué d'entiers de tailles supérieures, jusqu'à 16.384 bits (pour 181 d'entre eux). Mais plus grave encore, une grande proportion des ces modules RSA ont en commun l'un de leurs deux nombres premiers (les p et q mentionnés plus haut) ce qui entraîne la perte totale de sécurité parce que leur décomposition commune est simplifiée par des algorithmes ad hoc (#).
 

L'aléatoire est au coeur des systèmes de chiffrement et faute de les tester correctement et de savoir tester correctement les générateurs de nombres aléatoires, on se rassurera à trop bon compte de leur fiabilité et de leur sécurité. Le ton alarmiste de certains commentaires publiés (#) sur cette étude est bien de mise : elle tire la sonnette d'alarme sur un problème profond et difficilement indétectable des architectures de sécurité. Quelques équipes innovantes travaillent aujourd'hui sur des nouvelles pistes pour y remédier. La jeune pousse MassiveRand — dont cet auteur est un très modeste actionnaire minoritaire — (#) par exemple, propose un TRNG True Random Number Generator, générateur de nombres aléatoires non déterministe) à très haut débit, pour les applications dans lesquelles la qualité des nombres aléatoires est cruciale.


Comme le répète inlassablement Bruce Schneier (#) les mauvais générateurs de nombres aléatoires nuisent gravement à la sécurité, quelle que soit l'ingéniosité du dispositif mis en oeuvre.