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
Portail de la cryptologie