Niveau :      
Résumé : certificat

Parlons un peu sécurité. Il a déjà été question de certificats iciet . Attachons-nous un peu plus à comprendre ce qu'est un certificat.

Un certificat est composé d'une partie publique et d'une partie privée. Je vous passe la théorie sur la cryptographie à clé publique, ce sera pour une autre fois. Intéressons-nous à la partie publique du certificat. Dans le cas d'un certificat x509 (initié par l'ITU, formaté par RSA et complété par l'IETF), on trouve un certain nombre d'informations. Ces informations permettent deux choses :

  • identifier le propriétaire
  • authentifier le propriétaire

Accessoirement on y retrouve aussi des signatures prouvant que l'identification a été faite par une personne digne de confiance.

Usage

On se sert de ces certificats pour initialiser des connexions sécurisées. Pour cela on commence par vérifier que le certificat appartient bien à la personne avec qui on veut communiquer grâce à une chaine de certification. Ensuite on vérifie qu'on a bien le propriétaire du certificat, et enfin on utilise un protocole adapté pour s'échanger une clé de session permettant de chiffrer les prochaines communications.

Détaillons tout ceci en partant de la fin.

Clé de session

Le chiffrement à clé publique a l'inconvénient d'être lent, on préfère donc utiliser un algorithme à clé privée, plus rapide, pour communiquer le plus gros des données. C'est pourquoi on s'échange une clé de session temporaire en utilisant un algorithme à clé publique, puis le reste de la communication se fait par clé privée.

Autre avantage, l'attaque est plus difficile puisque la clé servant à la communication peut changer régulièrement.

Mais avant de s'échanger une clé de session, il faut être sur de parler à la bonne personne.

Authentification

Pour être sur de communiquer avec le propriétaire du certificat, on utilise un algorithme à clé publique prouvant qu'on discute bien avec le propriétaire de la clé privée correspondante. Grâce à quelques échanges on sait qu'on communique avec la bonne personne et on peut commencer à échanger des données privées comme la clé de session.

Cette vérification peut être faite dans les 2 sens, chacun peut authentifier son correspondant. Pourtant dans le cas du web, c'est généralement seulement le client (internaute) qui authentifie le serveur (site web).

Mais avant d'authentifier votre correspondant, vous voudriez être sur que c'est bien avec lui que vous voulez communiquer.

Vérification du certificat

Rien ne sert de parler à Superman si sa carte d'identité indique qu'il est en fait Clark Kent

On vérifie donc que le certificat qui nous est présenté n'a pas été falsifié, mais surtout on vérifie ses signatures (toujours avec quelques algorithmes à clé privée bien sentis). S'il est signé par une personne de confiance alors on lui fait confiance. Sinon niet, rien ne prouve que ce n'est pas ma banque qui joue à se faire passer pour mon voisin.

La chaine de confiance

Un certificat est signé par une autorité, qui est elle-même représentée par un certificat. Mais alors, que vérifie-t-on ?

En effet, rien ne prouve qu'on connait l'autorité mieux que le correspondant. On vérifie donc qu'elle est elle-même signée par une autre autorité. La boucle ne s'arrête que lorsqu'on tombe sur un certificat racine, signé par lui-même. On est alors obligé de lui faire confiance les yeux fermés (enfin presque, on vérifie qu'elle est installée sur la machine) .

En pratique ces racines sont installées depuis longtemps sur les logiciels. Et la plupart les logiciels permettent d'en ajouter de nouvelles.