Empreinte de clé publique
En cryptographie, une empreinte de clé publique (ou empreinte cryptographique de clé publique ; en anglais, public key fingerprint) est une courte séquence d'octets utilisée pour identifier une clé publique plus longue.
Les empreintes de clé publique sont créées en appliquant une fonction de hachage cryptographique à une clé publique.
Comme les empreintes de clĂ© publique sont plus courtes que les clĂ©s auxquelles elles se rapportent, elles peuvent ĂȘtre utilisĂ©es pour simplifier certaines tĂąches de gestion des clĂ©s.
Dans les logiciels Microsoft, le terme thumbprint est utilisé au lieu du terme fingerprint.
Création d'empreintes de clé publique
Une empreinte de clé publique est généralement créée de la façon suivante :
- Une clĂ© publique (et Ă©ventuellement des donnĂ©es supplĂ©mentaires) est codĂ©e en une sĂ©quence d'octets. Pour que la mĂȘme empreinte puisse ĂȘtre recrĂ©Ă©e ultĂ©rieurement, l'encodage doit ĂȘtre dĂ©terministe et toutes les donnĂ©es supplĂ©mentaires doivent ĂȘtre Ă©changĂ©es et stockĂ©es avec la clĂ© publique. Les donnĂ©es supplĂ©mentaires sont gĂ©nĂ©ralement des informations que toute personne utilisant la clĂ© publique doit connaĂźtre. Des exemples de donnĂ©es supplĂ©mentaires comprennent :
- les versions de protocole avec lesquelles la clĂ© doit ĂȘtre utilisĂ©e (dans le cas des empreintes de clĂ© publique PGP) ;
- ou le nom du dĂ©tenteur de la clĂ© (dans le cas des empreintes de clĂ© publique de confiance X.509 oĂč les donnĂ©es supplĂ©mentaires se composent d'un certificat autosignĂ© X.509).
- Les données produites à l'étape précédente sont hachées avec une fonction de hachage cryptographique telle que SHA-1 ou SHA-2.
- Si dĂ©sirĂ©, la sortie de la fonction de hachage peut ĂȘtre tronquĂ©e pour fournir une empreinte plus courte, plus commode.
Ce processus produit une empreinte de clĂ© publique courte qui peut ĂȘtre utilisĂ©e pour authentifier une clĂ© publique beaucoup plus longue. Par exemple, alors qu'une clĂ© publique RSA typique a une longueur de 1024 bits ou plus, les empreintes MD5 ou SHA-1 typiques n'ont que 128 ou 160 bits.
Lorsqu'elles sont affichées pour une inspection humaine, les empreintes de clé publique sont généralement codées en chaßnes hexadécimales. Ces chaßnes sont ensuite formatées en groupes de caractÚres pour en augmenter la lisibilité. Par exemple, une empreinte MD5 de 128 bits pour SSH s'afficherait comme suit :
- 43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8
Utilisation d'empreintes de clé publique pour l'authentification des clés
Lorsqu'une clĂ© publique est reçue sur un canal non fiable, tel qu'Internet, le destinataire souhaite souvent authentifier la clĂ©. Les empreintes de clĂ© publique permettent d'accomplir cela, car leur petite taille leur permet d'ĂȘtre transmises sur des canaux de confiance oĂč les clĂ©s publiques ne peuvent pas ĂȘtre transmises facilement Ă cause de leur longueur.
Par exemple, si Alice souhaite authentifier une clé publique comme appartenant à Bob, elle peut communiquer avec Bob par téléphone ou en personne et lui demander de lire son empreinte de clé publique, ou de l'écrire sur un morceau de papier. Alice peut alors vérifier que cette empreinte correspond à l'empreinte de la clé publique. De tels échanges et comparaisons de valeurs sont beaucoup plus faciles si les valeurs sont des empreintes courtes plutÎt que les longues clés publiques que l'on veut valider.
Les empreintes de clĂ© publique peuvent Ă©galement ĂȘtre utiles lors de l'automatisation de l'Ă©change ou du stockage des donnĂ©es d'authentification de clĂ©. Par exemple, si les donnĂ©es d'authentification de clĂ© doivent ĂȘtre transmises par un protocole ou stockĂ©es dans une base de donnĂ©es oĂč la taille d'une clĂ© publique complĂšte cause un problĂšme, l'Ă©change ou le stockage des empreintes de clĂ© publique peut ĂȘtre une solution viable.
En outre, un utilisateur peut faire une recherche en entrant une empreinte de clé publique dans un moteur de recherche afin de s'assurer que la clé publique qu'il vient de télécharger est authentique. Si le moteur de recherche fournit comme résultat le site propriétaire de la clé publique, l'utilisateur peut avoir confiance que la clé n'a pas été fournie par un attaquant de type homme du milieu.
PGP a développé la liste de mots de PGP pour faciliter l'échange d'empreintes de clé publique sur des canaux vocaux.
Les empreintes numériques en pratique
Dans des systĂšmes tels que SSH, les utilisateurs peuvent Ă©changer et vĂ©rifier les empreintes de clĂ© publique manuellement pour effectuer l'authentification des clĂ©s. Une fois qu'un utilisateur a acceptĂ© l'empreinte d'un Ă©metteur, cette empreinte (ou la clĂ© Ă laquelle elle se rapporte) sera stockĂ©e localement avec le nom ou l'adresse de l'Ă©metteur, afin que les communications futures avec cet Ă©metteur puissent ĂȘtre automatiquement authentifiĂ©es.
Dans des systĂšmes tels que les infrastructures Ă clĂ©s publiques basĂ©es sur X.509, les empreintes de clĂ© publique sont principalement utilisĂ©es pour authentifier les clĂ©s racines (les clĂ©s des autoritĂ©s de certification). Ces clĂ©s racines dĂ©livrent des certificats qui peuvent ĂȘtre utilisĂ©s pour authentifier des clĂ©s d'utilisateur. Cette utilisation des certificats Ă©limine la nĂ©cessitĂ© d'une vĂ©rification manuelle des empreintes de clĂ© publique entre les utilisateurs.
Dans des systĂšmes tels que PGP ou Groove, les empreintes de clĂ© publique peuvent ĂȘtre utilisĂ©es pour l'une ou l'autre des fonctions ci-dessus : elles peuvent ĂȘtre utilisĂ©es pour authentifier des clĂ©s appartenant Ă d'autres utilisateurs ou des clĂ©s appartenant Ă des autoritĂ©s de certification. Dans PGP, les utilisateurs peuvent Ă©mettre des certificats les uns aux autres, formant ainsi une toile de confiance et les empreintes de clĂ© publique sont souvent utilisĂ©es pour aider Ă ce processus (par exemple, lors de key signing parties).
Dans des systĂšmes tels que Cryptographically Generated Address (en) ou Self-certifying File System (en) et la plupart des rĂ©seaux cryptographiques pair-Ă -pair, les empreintes de clĂ© publique sont intĂ©grĂ©es dans les formats d'adresses et de noms prĂ©existants (tels que les adresses IPv6, les noms de fichier ou d'autres chaĂźnes d'identification). Si les adresses et les noms sont dĂ©jĂ Ă©changĂ©s par des canaux de confiance, cette approche permet aux empreintes de clĂ© publique de se communiquer par le mĂȘme chemin[1].
Dans PGP, la plupart des clĂ©s sont crĂ©Ă©es de telle sorte que ce que l'on appelle l'identifiant de clĂ© est Ă©gal aux 32 ou 64 bits infĂ©rieurs d'une empreinte de clĂ© publique. PGP utilise des identifiants de clĂ© pour se rĂ©fĂ©rer Ă des clĂ©s publiques pour diffĂ©rents objectifs. Les identifiants de clĂ© ne sont pas, Ă proprement parler, des empreintes de clĂ© publique, car leur courte longueur les empĂȘche d'authentifier en toute sĂ©curitĂ© une clĂ© publique. Les identifiants de clĂ© de 32 bits ne doivent pas ĂȘtre utilisĂ©s, car les ordinateurs actuels peuvent briser une clĂ© de 32 bits en seulement 4 secondes[2].
Sécurité des empreintes de clé publique
La principale menace Ă la sĂ©curitĂ© d'une empreinte est une attaque de prĂ©image oĂč un attaquant construit une clĂ© publique dont l'empreinte est la mĂȘme que l'empreinte de la clĂ© publique de la victime. L'attaquant peut alors prĂ©senter sa clĂ© publique Ă la place de la clĂ© publique de la victime et se faire passer pour la victime.
Une autre menace pour certains systĂšmes est une attaque de collisions dans laquelle un attaquant construit plusieurs clĂ©s publiques qui ont la mĂȘme empreinte. Cela peut lui permettre de rĂ©pudier les signatures qu'il a crĂ©Ă©es ou de provoquer d'autres confusions.
Pour prĂ©venir les attaques de prĂ©image, la fonction de hachage cryptographique utilisĂ©e pour une empreinte de clĂ© publique doit possĂ©der la propriĂ©tĂ© de rĂ©sistance Ă la seconde prĂ©image. Si les attaques de collisions sont une menace, la fonction de hachage devrait Ă©galement possĂ©der la propriĂ©tĂ© de rĂ©sistance aux collisions. Bien qu'il soit acceptable de tronquer la sortie de la fonction de hachage pour obtenir des empreintes numĂ©riques plus courtes et plus faciles Ă utiliser, les empreintes numĂ©riques tronquĂ©es doivent ĂȘtre suffisamment longues pour conserver les propriĂ©tĂ©s de la fonction de hachage contre les attaques par force brute.
En pratique, la plupart des empreintes de clĂ© publique couramment utilisĂ©es aujourd'hui reposent sur des hachages non tronquĂ©s MD5 ou SHA-1. En 2006, des collisions, mais pas les prĂ©images peuvent ĂȘtre trouvĂ©es dans MD5, et bien qu'aucune attaque pratique n'existe encore contre SHA-1, ce code a Ă©tĂ© partiellement cassĂ©. L'avenir est donc susceptible d'apporter une utilisation croissante des nouvelles fonctions de hachage telles que SHA-256. Cependant, les empreintes basĂ©es sur SHA-256 et d'autres fonctions de hachage avec de longues sorties sont plus susceptibles d'ĂȘtre tronquĂ©es que les empreintes numĂ©riques (relativement courtes) MD5 ou SHA-1.
Dans les situations oĂč la longueur des empreintes de clĂ© publique doit ĂȘtre minimisĂ©e Ă tout prix, des techniques telles que l'extension de hachage (voir Cryptographically Generated Address (en)) peuvent ĂȘtre utilisĂ©es pour renforcer la sĂ©curitĂ© des empreintes tronquĂ©es.
Notes et références
- (en) David MaziÚres et M. Frans Kaashoek « Escaping the Evils of Centralized Control with self-certifying pathnames » () (lire en ligne, consulté le ) {{PostScript}}
âProceedings of the 8th ACM SIGOPS European workshop: Support for composing distributed applications - Evil 32: Check Your GPG Fingerprints