lundi 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 = gx où
x, 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 = gx où
x, 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.
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.
http://www.infodsi.com/tribune/129475/tragedie-facteurs-communs.html?key=