Signatures numériques et fonctions de hachage

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche

Portail > Fondamentaux cryptographiques

La signature numérique est l'opération qui lie un contenu à une clé, et donc à une identité. C'est elle qui rend un certificat vérifiable, et c'est l'enchaînement de signatures qui constitue la chaîne de confiance. Elle s'appuie systématiquement sur une fonction de hachage.

Fonctions de hachage

Une fonction de hachage cryptographique transforme une entrée de taille quelconque en un condensé (digest) de taille fixe. Pour un usage cryptographique, elle doit présenter les propriétés suivantes :

  • Déterministe : la même entrée produit toujours le même condensé.
  • Sortie de taille fixe : par exemple 256 bits pour SHA-256, indépendamment de la taille de l'entrée.
  • Résistance à la préimage : à partir d'un condensé, il est infaisable de retrouver une entrée correspondante (sens unique).
  • Résistance aux collisions : il est infaisable de trouver deux entrées distinctes produisant le même condensé.
  • Effet d'avalanche : la moindre modification de l'entrée change radicalement le condensé.
Algorithme Taille du condensé Statut
MD5 128 bits Cassé (collisions triviales) — à proscrire.
SHA-1 160 bits Obsolète (collisions démontrées) — interdit pour les certificats publics.
SHA-256 / SHA-384 / SHA-512 256 / 384 / 512 bits Recommandés (famille SHA-2).
SHA-3 (Keccak) variable Alternative moderne, construction interne différente de SHA-2.

Pourquoi hacher avant de signer

On ne signe pas directement le message : on signe son condensé. Deux raisons :

  • Performance : les opérations asymétriques (RSA, ECDSA) sont coûteuses ; signer un condensé de taille fixe est bien plus rapide que de signer un document entier.
  • Sécurité et contraintes de format : les schémas de signature opèrent sur une entrée de taille bornée. Le hachage normalise l'entrée et, combiné à un padding adéquat (PKCS#1 v1.5, PSS), protège contre certaines attaques.

Mécanisme de la signature

Production (signer)

  1. Calculer le condensé du message avec une fonction de hachage (ex. SHA-256).
  2. Transformer ce condensé avec la clé privée de l'émetteur (selon le schéma : RSA-PSS, ECDSA…). Le résultat est la signature.

Vérification

  1. Le vérificateur recalcule le condensé du message reçu.
  2. À l'aide de la clé publique de l'émetteur, il dérive de la signature le condensé attendu.
  3. Si les deux condensés coïncident : la signature est valide → le message provient bien du détenteur de la clé privée et n'a pas été altéré.

<mermaid> flowchart LR

   M[Message] --> H1[Hachage]
   H1 --> D1[Condensé]
   D1 --> SIG["Clé privée → Signature"]
   M2[Message reçu] --> H2[Hachage]
   H2 --> D2[Condensé recalculé]
   SIG --> V["Clé publique → Condensé attendu"]
   D2 --> CMP{Égaux ?}
   V --> CMP
   CMP -->|oui| OK[Signature valide]
   CMP -->|non| KO[Rejet]

</mermaid>

(Schéma en Mermaid ; sinon le retirer ou l'exporter en image.)

Application aux certificats

Dans un certificat X.509, c'est la partie TBSCertificate (To Be Signed : tous les champs sauf la signature elle-même) qui est hachée puis signée par l'autorité de certification. Le certificat contient donc :

  • le champ signatureAlgorithm (ex. sha256WithRSAEncryption, ecdsa-with-SHA384) ;
  • la valeur de signature produite par la clé privée de l'autorité.

Vérifier un certificat, c'est vérifier cette signature avec la clé publique de l'autorité émettrice — opération répétée à chaque maillon de la chaîne.

Signature ≠ empreinte (fingerprint)

Distinction fréquente source de confusion :

  • La signature est produite par la clé privée de l'émetteur et prouve l'authenticité du certificat.
  • L'empreinte (fingerprint) est un simple condensé (SHA-256…) du certificat entier, calculable par n'importe qui. Elle sert d'identifiant pour comparer ou épingler un certificat, mais ne prouve rien sur son origine.

Importance de la résistance aux collisions

Une fonction de hachage faible compromet directement la PKI : une collision permet de fabriquer deux certificats au même condensé, dont l'un est signé légitimement et l'autre forgé. Ce scénario a été exploité concrètement contre MD5 (création d'un faux certificat d'autorité), d'où le bannissement de MD5 puis de SHA-1 pour les certificats.

Points clés à retenir

  • On signe un condensé, pas le message entier.
  • Signer = transformer le condensé avec la clé privée ; vérifier = retrouver ce condensé avec la clé publique et comparer.
  • Dans un certificat, c'est le TBSCertificate qui est signé ; le champ signatureAlgorithm indique hachage + schéma.
  • Ne pas confondre signature (preuve d'origine) et empreinte (simple identifiant).
  • La solidité de la fonction de hachage conditionne la sécurité de toute la chaîne.

Voir aussi

Chaînes de certificats — Portail
Fondamentaux Cryptographie asymétrique · Signatures et hachage
Certificat X.509 Structure X.509 · Extensions X.509 · Formats et encodage
PKI et autorités PKI · Autorités de certification · Ancres de confiance
Chaîne Principe · Construction du chemin · Validation · Contraintes de chemin
Cycle de vie CSR et émission · Cycle de vie · Révocation
Avancé Cross-signing · Dépannage