La signature numérique des autorités de certification

Introduction

Les autorités de certification publiques sont des éléments importants de l’Internet mondial. C’est un tiers de confiance qui permet de garantir l’identité d’un correspondant grâce à l’émission de certificat décrivant l’identité numérique de la ressource accédée. Cette ressource peut être un service, un serveur ou un utilisateur.

De plus les autorités mettent à disposition des moyens pour contrôler la validité du certificat présenté (CRL ou OCSP).

Un ensemble d’autorité de certification est appelé une infrastructure à clé publique (PKI).

J’ai remarqué, après plusieurs mise en place de PKI privée chez des clients, que le concept de PKI, d’autorité de certification et de certificat n’est pas bien compris ou pire, mal compris. Je pense donc qu’il est important de clarifier les choses.

Je vais donc aujourd’hui m’attarder sur le fonctionnement de la signature numérique en utilisant un exemple concret. Mais d’abord c’est quoi une signature numérique ?

« La signature numérique est un mécanisme permettant de garantir l’intégrité d’un document électronique et d’en authentifier l’auteur, par analogie avec la signature manuscrite d’un document papier. »

Wikipédia

De part sa fonction, la signature doit donc être authentique, infalsifiable, inaltérable et irrévocable, comme une signature manuscrite. Des protocoles existants peuvent donc faire le boulot, les protocoles de hash.

Le hash

Un protocole de hash est une fonction mathématique non-réversible qui, avec la même chaîne d’entrée, donnera toujours le même résultat (Empreinte). Ces deux points sont très importants. Les protocoles de hash les plus communs sont :

  • MD (Message Digest)
    • MD4 (Non fiable)
    • MD5 (Non fiable)
  • SHA (Secure Hash Algorithm)
    • SHA128 (Sur le déclin, les grands du Web ne supporteront plus ce protocole d’ici 2017)
    • SHA256 (Valide)
    • SHA384 (Valide)

Schématiquement, il est possible de représenter une fonction de hash comme ceci :

jrsy

Le hash ne doit pas être réversible, car sinon, l’identité (dans le cas des certificats) pourra être altérée. Le seul et unique moyen de casser une empreinte de sortie est l’utilisation de « table rainbow ».

Les protocoles de hash ne sont donc pas des protocoles de chiffrement car le chiffrement est un processus réversible.

Alors, comment est signé un certificat émis par une autorité de certification ?

Exemple

Imaginons le société X, cette société X veut exposer un serveur Web (Apache ou IIS) sur Internet. Cette société X va générer une demande de certificat sous un format *.CSR (Certificate Signing Request) et cette demande va être transmise à une autorité publique :

etape1

L’autorité de certification publique reçoit la demande *.CSR. L’autorité de certification génère donc un certificat à partir de cette demande avec un couple de clé privée / clé publique pour ce certificat. Ensuite, le certificat est passé dans une fonction de hash pour donner une empreinte numérique unique de ce certificat.

Cette empreinte passe ensuite dans une phase de chiffrement. Le chiffrement est réalisé à partir de la clé privée de l’autorité de certification. Ce chiffrement avec la clé privée de l’autorité de certification va permettre de garantir que le certificat destiné au serveur est bien validé par cette autorité de certification.

Cette empreinte chiffrée est associée au certificat pour former un certificat signé par l’autorité :

etape2

Ce certificat est ensuite transmis à la société X qui pourra l’installer sur son serveur Web :

capture3

Mais comment ensuite le client qui se connecte au serveur Web peut savoir que le certificat qui lui est présenté est valable ? En se connectant, le client va effectuer plusieurs points de contrôle sur le certificat. En premier lieu, il va d’abord vérifier si la chaîne d’autorité de certification est valide.

Cette vérification est effectuée en recherchant les certificats d’autorité de certification dans la magasin local de la machine. Si les certificats des autorités sont connus, la première étape est validée.

Le certificat du serveur Web est ensuite analysé afin de vérifier que ce certificat est bien émis par une autorité de certification valide. La signature du certificat du serveur Web est d’abord enlevée pour créer deux piles de traitement :

  • Traitement 1 : Le certificat est passé par une fonction de hash. Cette fonction donne une empreinte du certificat.
  • Traitement 2 : L’empreinte chiffrée (Signature) est déchiffrée grâce à la clé publique de l’autorité de certification qui a signée le certificat.
  • Traitement final : Les deux empreintes sont comparées. Si elles sont égales, cela veut dire que le certificat est validé, si elles ne sont pas égales, une erreur sera affichée et le certificat ne sera pas approuvé.

capture4

Dernière partie, la vérification des CRLs pour vérifier que le certificat n’est pas révoqué par l’autorité de certification.

Conclusion

Dans ce billet, je me suis attardé sur la signature numérique des autorités de certification, il existe cependant bien d’autres aspects que je n’ai pas abordé comme le chiffrement symétrique ou asymétrique, le processus d’établissement d’une session sécurisée ou encore la processus de publication des CRLs.

Ces points pourront faire l’objet d’un autre billet.

2 commentaires Ajoutez le vôtre

  1. harfangus dit :

    Bien expliqué ! Il y a des organismes comme let’s encrypt qui fournissent des certificats gratuit. J’attends le prochain article.

    J'aime

    1. Merci :), il faut que je prenne le temps de faire la suite

      Aimé par 1 personne

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google

Vous commentez à l’aide de votre compte Google. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s