Français

Outils de développement · Calculateur de hachage SHA

Certificat et empreintes SSH : comment SHA-256 identifie une clé publique

· Contexte

sha-256 cryptographie sécurité

Invite de clé d'hôte SSH affichant SHA256 : empreinte digitale avec résumé base64
Illustration vectorielle originale de ToolAcre

Une empreinte digitale est un hachage d'un certificat ou d'une clé, suffisamment court pour être lu à haute voix. Cet article explique comment les empreintes digitales TLS et SSH sont calculées, pourquoi les empreintes digitales SHA-1 sont remplacées et ce que prouve une correspondance.

L'invite de clé hôte que vous acceptez toujours - ce que la ligne SHA256: vous demande de comparer

Lorsque vous vous connectez à un serveur via SSH pour la première fois, vous voyez une invite vous demandant si vous devez accepter la clé d'hôte. L'invite affiche une empreinte digitale : `SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8` ou similaire. Cette empreinte digitale est un hachage de la clé publique du serveur. Il vous est demandé de vérifier hors bande (en dehors du protocole SSH) que vous reconnaissez cette clé. L'invite affiche également généralement le type de clé (RSA, ED25519, ECDSA) et le format d'empreinte digitale. Si vous avez déjà vu l'empreinte digitale de cette clé via un canal de confiance, vous pouvez taper « oui » en toute confiance. Dans le cas contraire, accepter signifie faire confiance au réseau pour fournir la bonne clé.

Une empreinte digitale est simplement le résultat d'une fonction de hachage cryptographique appliquée à la clé codée. Pour SSH, la clé est codée sous forme de blob binaire (le format filaire OpenSSH) et le hachage est calculé sur ce blob. L'empreinte digitale est plus courte que la clé complète, ce qui la rend lisible et tapable. La même empreinte digitale résultera toujours de la même clé, vous pourrez donc comparer une empreinte digitale publiée à plusieurs endroits ou canaux.

L'empreinte digitale est égale au hachage de l'encodage – le certificat DER ou le blob de clé publique comme entrée

Les clés d'hôte SSH et les certificats TLS sont codés différemment, mais le principe des empreintes digitales est identique. Pour SSH, l’empreinte digitale est calculée à partir du matériel de clé publique. Pour les certificats TLS, l'empreinte digitale est calculée à partir de l'intégralité du certificat (y compris l'émetteur, les dates de validité et d'autres champs). Lorsque vous vous connectez à un serveur Web, le navigateur ne vous affiche pas l'empreinte digitale du certificat, car TLS utilise un modèle de confiance différent : le navigateur fait confiance à un ensemble d'autorités de certification (CA) préinstallées, et ces autorités de certification se portent garantes du certificat. SSH n'utilise aucune autorité de certification préinstallée ; au lieu de cela, vous faites confiance à des clés spécifiques et les stockez localement dans `~/.ssh/known_hosts`.

Étant donné que l'empreinte digitale inclut la totalité des octets du certificat pour TLS, la modification des dates de validité sans re-signer entraîne une empreinte digitale différente. Pour SSH, l’empreinte digitale concerne uniquement la clé publique, elle est donc stable tant que la clé n’est pas modifiée.

Cette calculatrice montre les longueurs SHA-1 et SHA-256 ; les recommandations en matière de politique d'empreintes digitales nécessitent des sources de protocole

Historiquement, les empreintes digitales SSH étaient affichées en hexadécimal MD5. MD5 est cryptographiquement cassé et les collisions sont pratiques. La communauté de la sécurité est passée aux empreintes digitales SHA-256 par défaut. Vous pouvez toujours voir les deux formats affichés par votre client SSH : `SHA256: base64` et `MD5: hex`. L'empreinte digitale SHA-256 est celle à laquelle il faut faire confiance pour la vérification de l'identité. Si vous voyez les deux, comparez la version SHA-256 avec une empreinte digitale provenant d'une source fiable (le site Web du serveur, un e-mail signé d'un administrateur, un wiki interne). L'empreinte MD5 est moins fiable car des collisions MD5 existent.

Le changement de format de l'empreinte digitale est un signe visible de la transition cryptographique. Les anciennes versions d'OpenSSH affichaient uniquement MD5. Les versions modernes affichent SHA-256 par défaut. La commande `ssh-keygen -l -f /path/to/key` affiche l'empreinte digitale de la clé dans le format par défaut de votre version de ssh-keygen ; vous pouvez forcer un format spécifique avec l'indicateur `-E` (par exemple, `-E sha256` ou `-E md5`).

Base64 de SSH SHA256 : format – le changement d'encodage qui a rendu les empreintes digitales plus courtes que l'hexadécimal

Les empreintes digitales SSH base64 utilisent un format variable : elles sont préfixées par le nom de l'algorithme et deux points, par exemple `SHA256:base64string`. Ceci est différent du format d'intégrité des sous-ressources (SRI), qui utilise un trait d'union et inclut uniquement la base64 standard. Le format SSH inclut une étiquette qui indique sans ambiguïté quel algorithme a produit le résumé. Lorsque vous voyez une empreinte digitale dans la sortie SSH, l'algorithme est toujours affiché. Lorsque vous voyez un attribut d'intégrité SRI, l'algorithme est codé sous forme de préfixe avec un trait d'union.

La sortie base64 du calculateur de hachage ToolAcre SHA est la forme standard ; pour correspondre aux empreintes digitales SSH, ajoutez `SHA256: ` (nom de l'algorithme, deux points et espace). La forme hexadécimale de la calculatrice n'est pas celle affichée par SSH, bien qu'elle représente le même résumé et soit également valable à des fins de vérification.

Ce qu'une correspondance prouve : que vous détenez les mêmes octets de clé que l'autre côté a publiés, et rien sur le propriétaire de la clé sans une vérification hors bande

Une correspondance d'empreinte digitale prouve deux choses : premièrement, que vous détenez les mêmes octets de clé que l'autre côté a publié, et deuxièmement, que ni la clé ni l'empreinte digitale n'ont été modifiées depuis le calcul du résumé. Il ne prouve pas l'identité du propriétaire de la clé et n'autorise aucune action spécifique. La vérification d'une empreinte digitale hors bande est une condition nécessaire mais pas suffisante pour faire confiance à une clé. Vous devez également vérifier que la personne qui a publié l’empreinte digitale est bien celle qu’elle prétend être.

En pratique, si un administrateur publie l'empreinte SSH d'un serveur sur l'intranet de l'entreprise ou dans un e-mail signé, vous pouvez vérifier qu'elle correspond à l'invite que vous recevez lors de la connexion. Si l'empreinte digitale ne correspond pas, vous pouvez refuser la connexion en toute confiance parce que quelqu'un intercepte votre trafic ou que la clé du serveur a changé. Si l’empreinte digitale correspond, vous savez que vous disposez de la bonne clé. La question de savoir si cette clé appartient au bon serveur est une question distincte à laquelle vous pouvez répondre en vérifiant le canal de publication (la page intranet semble-t-elle légitime ? l'e-mail provient-il réellement du compte de cet administrateur ?).

Exemple concret : vérification d'une empreinte digitale par rapport à une empreinte publiée via un canal de confiance, étape par étape

Une empreinte digitale de certificat a le même objectif : elle identifie un certificat spécifique de manière unique. Si un serveur TLS modifie son certificat (par exemple lors du renouvellement), le nouveau certificat a une empreinte digitale différente. L'épinglage de certificat (codage en dur d'une empreinte digitale ou d'un petit ensemble d'empreintes digitales acceptables dans une application) est une technique de sécurité permettant de détecter les modifications de certificat. Si le serveur présente un certificat avec une empreinte différente, l'application le rejette. Cela protège contre une autorité de certification compromise émettant un certificat frauduleux auquel le navigateur aurait autrement confiance.

L'épinglage de certificat nécessite une gestion minutieuse : si le serveur met à jour son certificat et que vous ne l'aviez pas prévu, votre application rejettera le nouveau certificat valide. De nombreuses applications utilisent plutôt l’épinglage de clé publique, qui épingle la clé publique plutôt que l’intégralité du certificat. Cela permet le renouvellement du certificat sans rejet tant que la même clé est utilisée.

Exemple pratique : vérifiez avec des outils compatibles avec le protocole, car ToolAcre hache le texte UTF-8, et non les octets de fil DER ou SSH.

Le calcul manuel d'une empreinte digitale à des fins de vérification est simple. Enregistrez le certificat ou la clé dans un fichier, utilisez `openssl dgst -sha256 filename` ou `ssh-keygen -l -f filename -E sha256` pour afficher l'empreinte digitale et comparez-la à celle que le serveur vous a montrée. La calculatrice de hachage ToolAcre SHA peut également calculer le résumé si vous collez les octets clés, mais n'oubliez pas que la calculatrice hache le texte UTF-8 que vous collez, pas les fichiers binaires. Si la clé est au format PEM (texte avec en-tête `-----BEGIN CERTIFICATE-----` et octets codés en base64), vous pouvez la coller dans la calculatrice. S'il est au format DER (binaire), vous devez d'abord utiliser des outils de ligne de commande ou le convertir en PEM.

La limite est importante : ToolAcre hache le texte UTF-8 que vous collez dans l'interface de la calculatrice. Il ne lit pas les fichiers de votre appareil (tous les calculs se font dans le navigateur, dans votre onglet, sans réseau). Si vous disposez d'un fichier clé sur disque, vous pouvez l'ouvrir dans un éditeur de texte, copier le texte et le coller dans la calculatrice s'il est au format PEM. Ou vous pouvez utiliser des outils de ligne de commande comme `openssl`, `ssh-keygen` ou `sha256sum` pour calculer le hachage localement.

À retenir : comparez les empreintes digitales hors bande - le calculateur de hachage ToolAcre SHA montre à quoi ressemblent les résumés SHA-1 et SHA-256 en fonction des longueurs utilisées par les empreintes digitales.

La calculatrice de hachage ToolAcre SHA affiche les résumés SHA-1 et SHA-256 pour toute saisie de texte. Si vous collez un certificat au format PEM ou une clé publique SSH, la calculatrice calcule les deux résumés. Pour les clés SSH, la calculatrice hachera le texte que vous collez ; si vous collez le format de clé publique SSH standard codé en base64, le résumé ne correspondra pas à l'empreinte digitale SSH car SSH applique son propre formatage (le format filaire) avant le hachage. Pour une correspondance directe, vous avez besoin de la clé dans le format exact utilisé par SSH en interne, qui n'est pas le format d'affichage public.

Pour les empreintes digitales du certificat, le comportement est similaire : si vous collez le texte du certificat codé au format PEM, la calculatrice hache ce texte. L'empreinte digitale d'un certificat est calculée sur les octets codés du certificat (format DER), et non sur le wrapper de texte PEM. Les octets sont les mêmes, mais le codage du texte diffère. Pour faire correspondre une empreinte digitale de certificat d'OpenSSL ou de la visionneuse de certificats du navigateur, vous devrez fournir les octets DER, qui ne sont pas lisibles par l'homme. Le but de la calculatrice est de hacher le texte UTF-8 que vous pouvez coller et lire, ce qui rend la limite claire : elle hache le texte saisi, et non les fichiers de clé cryptographique dans leurs formes binaires ou de protocole filaire standard.