C'est quoi une PKI ?

À 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 avais demandé de me traduire l'acronyme avant de m'exclamer :

Ha, mais ça n'est que ça ?

tbowan

geralt @ pixabay
geralt @ pixabay

Bon, ça ne m’a pas vraiment aidé à les convaincre de m’embaucher mais je me suis toujours dit que c’était bête de passer à côté d’opportunités parce qu’on oublie le sens d’un acronyme.

Ça veut dire Public Key Infrastructure (Infrastructure à clé publique en français) et, pour faire simple, c’est lorsqu’on sécurise ses communications réseau avec des certificats dont l’authenticité est établie par des tiers de confiance (les CA).

Confiance numérique

Tout commence par un problème de confiance sur les réseaux. Lorsqu'on communique ou qu'on accède à des données, on peut légitimement se poser ces 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.

TayebMEZAHDIA @ pixabay
TayebMEZAHDIA @ pixabay

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

Par contre, dans notre monde du tout numérique, un sceau physique n’est évidemment plus utilisable (sauf si vous utilisez des pigeons pour vos communications). Mais rassurez-vous, l’humanité a élaboré des méthodes adaptées…

Cryptographie

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.
geralt @ pixabay
geralt @ pixabay

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

Un certificat cryptographique (ou encore certificat numérique) n'est autre qu'un document informatique spécifique 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.

webandi @ pixabay
webandi @ pixabay

C'est pourquoi un certificat est toujours signé par un tiers de confiance. Ce tiers va calculer l'empreinte du certificat et la signer 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îne.

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.

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 applications et 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.

Concrètement, TLS

Très rapidement, après la naissance du World Wide Web, on a eu 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 (e.g. TLS) insérée entre le protocole réseau qui achemine les données (chiffrées) et la couche des applications qui gère ces données (en clair).

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 mutuelle.

Free-Photos @ pixabay
Free-Photos @ pixabay

Pour faire la distinction entre les versions avec et sans TLS, il était d’usage d’ajouter un s au protocole lorsqu’il est sécurisé. HTTP, une fois protégé par TLS, devient HTTPS. De même, LDAP devient LDAPs. Et comme toujours, il y a des exceptions, comme le DNS qui devient DoT (DNS over TLS).

L’authentification des utilisateurs par certificats est une des méthodes les plus sûres mais est généralement boudée. D’un côté parce que le serveur doit être configuré spécifiquement (et certaines applications ne sont pas compatibles). De l’autre parce que les utilisateurs doivent générer des certificats que l'administrateur doit ensuite signer. Ça n'est pas très compliqué (une fois qu'on sait quoi faire) mais c'est fastidieux.

L'authentification des serveurs, de son côté, nécessite moins d'opérations, il suffit d'installer la CA dans votre navigateur. Ça n'est pas fondamentalement compliqué mais encore faut-il savoir comment s'y prendre.

Et après ?

Une PKI n’est donc rien de plus qu’une méthode pour sécuriser des communications réseaux basée sur des certificats cryptographiques dont l’authenticité est assurée par des tiers de confiance, les CA qu’il faut déployer dans les applications.

Pour simplifier la vie de tout le monde, certaines CA sont d’ailleurs pré-installées par les éditeurs de logiciels. C’est le cas des navigateurs web ; si le certificat de votre serveur est signé par une de ces CA, il sera reconnu automatiquement par les navigateurs de vos visiteurs qui n’auront rien à faire pour profiter de votre site web « en toute sécurité ».

Cet avantage à créé tout un marché très lucratif de la signature de certificats. Les entreprises possédant des CA intégrées aux navigateur se partageant le monopole et faisant payer cher le privilège d’être signé et donc reconnu par vos visiteurs (à partir de 179 €/an chez GlobalSign, $238/an chez digicert).

Heureusement pour tous les administrateurs de site web, les choses ont changé depuis 2015, avec le lancement de Let's Encrypt, autorité de certification intégrée aux navigateurs qui signe des certificats gratuitement et automatiquement (dont le notre).