C'est quoi une PKI ?

tbowan

19 Septembre 2019

À force d'en parler, c'est presque devenu un buzzword vide de sens. Démystifions donc ce concept pour voir ce qu'il apporte et comment s'en servir à propos.

Il y a quelques années, je me suis retrouvé bête lorsqu'un recruteur m'a demandé de définir ce qu'était une PKI. N'étant pas fan des acronymes et ayant des fuites de mémoires dès qu'on parle de noms propres, je lui ai demandé de me traduire l'acronyme avant de m'exclamer : Ha, mais ça n'est que ça ?

Divulgâchage : ça veut dire Public Key Infrastructure (Infrastructure à clé publique en français) et, pour faire simple, c’est à propos de ces fameux certificats cryptographiques.

Confiance numérique

Tout commence par un problème de confiance. Lorsqu'on communique ou qu'on accède à des données, on peut légitimement se poser les trois questions suivantes :

  1. Qui est l'auteur ? Techniquement, on parle alors d'authentification lorsqu'on s'en assure, et d'usurpation lorsqu'on se fait avoir.
  2. Les données ont-elles été modifiées ? En informatique, on parle d'intégrité. Les cryptographes parlent plutôt d'authenticité car ils y ajoutent l'identité de l'auteur.
  3. Ont-elles été divulguées ? Cette fois, informaticiens et cryptographes sont d'accord pour parler de confidentialité.

Dans la vraie vie, en face à face, les choses sont simples. L'Évolution nous a doté de très bonne capacités de reconnaissances des visages pour identifier nos pairs, ainsi que de la parole et de l'ouïe pour transmettre les messages assez efficacement. Et si on veut être discrets, on peut s'isoler du groupe.

Avec l'écriture, et l'artisanat en général, ça devient plus compliqué. Avec cette ingéniosité qui la caractérise, l'humanité a alors inventé les sceaux. Le principe est toujours le même :

Intégrer un petit quelque chose d’unique ou de très difficilement reproductible.

Il peut s’agir d’une signature manuscrite, d’un cachet à la cire, d’un poinçon ou tout autre technique difficilement falsifiable. La présence du sceau permet de déterminer l’origine de l’objet et s’il est utilisé sur une enveloppe, un conteneur ou un scellé, que ce dernier n’a pas été ouvert.

Par contre, dans notre monde du tout numérique, un sceau physique n’est évidemment plus utilisable1. Mais rassurez-vous, l’humanité a élaboré des méthodes adaptées…

Méthodes cryptographiques

La cryptographie est née du besoin de rendre des messages illisible. L’Histoire nous a fourni des algorithmes ayant eu plus ou moins de succès. Avec le temps, on s’est rendu compte qu’on pouvait faire plus que simplement rendre illisible : détecter des modification et même authentifier l’émetteur.

C’est exactement ce dont nous avons besoin et pour ça, trois grandes catégories d’algorithmes sont utilisés :

  1. Les algorithmes symétriques, qui utilisent la même clé pour chiffrer et déchiffrer les messages. Ils sont relativement rapides mais nécessitent de se partager préalablement une clé lorsqu’on veut sécuriser une communication ;
  2. Les algorithmes asymétriques, qui utilisent deux clés qui s’annulent mutuellement (ce que l’une chiffre, l’autre le déchiffre). Ils sont plus lents mais permettent de diffuser la clé publique avec tout le monde (la clé privée est très difficile à retrouver à partir de la clé publique) ;
  3. Les fonctions de hachage, qui calculent une empreinte de petite taille à partir de n’importe quelle donnée. Un changement dans la donnée initiale ayant des répercussions visibles sur l’empreinte.

Il est alors possible de résoudre les trois problèmes initiaux en utilisant ces algorithmes, symétriques, asymétriques et de hachages.

Finalement, toute la confiance dans les communications en ligne se réduit à l'utilisation de clé privée et la diffusion de clés publique. D'où le nom de ce type d'infrastructure de confiance dite à clés publiques.

Certificats cryptographiques

Un certificat cryptographique (ou encore certificat numérique) n'est autre qu'un document informatique contenant une clé publique, les informations concernant l'identité son propriétaire et quelques informations de contrôle (dates de validité, utilisations possibles de la clé, ...).

Une fois muni d'un certificat, il est possible de communiquer et d'échanger des documents avec son propriétaire en toute confiance. Vous serez en mesure de contrôler l'authenticité de ses messages. Si de son côté, il désire aussi vous authentifier, vous devrez lui fournir votre propre certificat, on parlera alors d'authentification mutuelle.

Mais il reste le problème de la transmission du certificat en lui même et la confiance qu'on peut accorder à ce document.

Pour de petits groupes de correspondants, on peut distribuer le certificat manuellement. Mais lorsque le nombre de certificats ou de participants grandi, ce n'est plus possible et il faut alors les distribuer numériquement.

C'est pourquoi un certificat est toujours signé par un tiers de confiance. Ce tiers va calculer l'empreinte du certificat et la chiffrer avec sa clé privée. Lui seul pouvant effectuer cette signature, si vous faite confiance à ce tiers, vous faite confiance au certificats qu'il a signé. Réciproquement, si vous voulez que votre correspondant vous fasse confiance, vous devez demander au tiers de vous signer votre certificat.

Et pour que vous puissiez valider la signature des certificats, le tiers de confiance vous a fourni le sien. Un autre certificat, contenant son identité, sa clé publique et les informations de contrôles (mentionnant qu'il peut signer des certificats, entre autre).

Les certificats forment donc des chaînes, chaque maillon étant signé par le maillon suivant. Et au bout de la chaîne, parce qu'il faut bien qu'elle s'arrête, se trouve un certificat qui se signe lui-même (on le dit auto-signé). On l'appelle certificat racine ou encore Autorité de certification (qu'on abrège CA pour Certificate Authority en anglais) puisque c'est lui qui fait autorité sur toute la chaîne2.

C'est donc la CA que l'on distribue et qu'on renseigner dans les logiciels effectuant les vérifications de sécurité.

Construire une PKI consiste à créer un certificat racine auto-signé, à créer d'éventuels certificats intermédiaires (signés par la racine) puis à signer les certificats des personnes ayant besoin de prouver leurs identités. Réciproquement, utiliser une PKI consiste à intégrer le certificat racine et les éventuels intermédiaires dans vos logiciels.

Exemple avec HTTPS

Très rapidement, après avoir créé le World Wide Web, est apparu le besoin de sécuriser les communications en ligne. L'exemple le plus parlant étant le site d'une banque en ligne.

Cette sécurisation passe par une couche de cryptographie insérée entre le protocole réseau qui achemine les données (i.e. TCP/IP) et la couche d'application utilisée par votre navigateur et le serveur (i.e. HTTP). On parle alors du protocole HTTPS.

C'est cette couche qui assure l'authenticité et la confidentialité de vos échanges. Pour ça, elle va utiliser les mêmes algorithmes que précédemment et donc utiliser des certificats numériques. Celui du serveur pour que vous puissiez l'authentifier et, plus rarement, le votre lorsqu'il nécessite une authentification mutuelle3.

L'installation d'une CA n'est pas compliquée mais pour éviter des manipulations pour les utilisateurs finaux, les navigateurs (et les systèmes d'exploitations) sont fourni d'origine avec un paquet de CA qui ont été validées par les éditeurs des logiciels et sont reconnus pour leur sérieux.

Ces CA disposent donc d'un avantage commercial évident puisque n'importe quel certificat qu'elles signeront sera automatiquement reconnu par les navigateurs du monde entier. Créer une PKI ne vous coûtera que du temps ; mais avoir des communications HTTPS automatiquement validées nécessite de passer par ces CA.

Heureusement, les choses ont changé depuis 2015, avec le lancement de Let's Encrypt. C'est une autorité de certification qui fourni des certificats gratuitement et automatiquement (dont le notre).

Et après ?

Créer une PKI avec XCA

26 Septembre 2019 Parce que la création des certificat est plutôt complexe, je préfère utiliser des outils graphiques plus intuitifs. Aujourd'hui, je vous montre comment créer une autorité de certification (CA) et un certificat pour serveur web.

Sécuriser son Kimsufi Web avec SFTP et Let's Encrypt

1er juillet 2019 Une fois son hébergement web activé, il est utile de configurer certains paramètres incontournables liés à la sécurité de votre site : SFTP pour vos transferts de fichiers et TLS pour vos visiteurs.


  1. Mis à part, bien sûr, si vous utilisez des pigeons pour transmettre les données.

  2. D'ailleurs, de son point de vue, il ne s'agit pas d'une chaîne mais d'un arbre, dont il est la source. Car chaque certificat va en fait signer plusieurs autres, formant ainsi des générations de certificats.

  3. C'est l'une des méthodes les plus sûres pour vous authentifier sur un site web mais elle nécessite a) que le serveur soit configuré, b) que vous ayez généré un certificat, c) que l'autorité l'ait ensuite signé et d) que vous l'ayez enfin intégré à votre navigateur. Ça n'est pas très compliqué, c'est surtout fastidieux, ce qui explique pourquoi cette technique est rarement utilisée.