Serveur HTTP Apache Version 2.4
Ce chapitre en guise d'introduction est destiné aux lecteurs pour lesquels
le Web, HTTP et Apache sont familiers, mais ne sont pas des experts en matière
de sécurité. Il n'a pas la prétention d'être un guide détaillé sur le
protocole SSL, il ne traitera pas non plus des techniques spécifiques de gestion
des certificats dans une organisation, ni des importants problèmes légaux de
brevets ou des restrictions d'importation ou d'exportation. Il se veut plutôt
une base de travail pour les utilisateurs de mod_ssl
en
rassemblant différents concepts, définitions et exemples comme point de départ
pour une exploration plus détaillée.
La maîtrise de SSL nécessite la compréhension des algorithmes de chiffrement, des fonctions relatives aux empreintes de messages (comme les fonctions de type hash ou non réversibles), et des signatures numériques. Ces techniques pourraient faire l'objet d'un ouvrage à elles seules (voir par exemple [AC96]) et constituent les bases de la confidentialité, de l'intégrité et de l'authentification.
Supposons qu'Alice veuille envoyer un message à sa banque pour transférer une certaine somme. Alice souhaiterait que le message soit privé, car il contient des informations comme son numéro de compte et le montant du transfert. Une solution consisterait à utiliser un algorithme de chiffrement, technique qui permet de remplacer un message par sa version chiffrée, illisible jusqu'à ce qu'elle soit déchiffrée. Sous sa forme chiffrée, le message ne peut être déchiffré qu'en utilisant une clé secrète. Sans la clé, le message est inutilisable : les bons algorithmes de chiffrement rendent si difficile la restitution du texte original par des intrus que ceux-ci y gaspilleraient leurs efforts.
Il existe deux catégories d'algorithmes de chiffrement : conventionnel ou à clé publique.
Tout le monde peut chiffrer un message en utilisant la clé publique, mais seul le propriétaire de la clé privée sera en mesure de le lire. De cette façon, Alice peut envoyer des messages privés au propriétaire d'une paire de clés (sa banque), en les chiffrant à l'aide de la clé publique. Seule la banque sera en mesure de les déchiffrer.
Bien qu'Alice puisse chiffrer son message pour le rendre privé, il subsiste toujours le risque que quelqu'un puisse modifier le message original ou le remplacer par un autre, afin d'effectuer le transfert de fonds à son profit, par exemple. Une solution pour garantir l'intégrité du message consisterait pour Alice à créer un résumé concentré de son message qu'elle enverrait à sa banque avec ce dernier. A la réception du message, la banque crée son propre résumé et le compare avec celui qu'Alice a envoyé. Si les deux résumés sont identiques, le message reçu n'a pas été modifié.
Un résumé tel que celui-ci est appelé empreinte numérique de message (message digest), fonction irréversible (one-way function) ou fonction de hashage (hash function). Une empreinte de message constitue une représentation courte et de longueur fixe, d'un message plus long et de longueur variable. Les algorithmes de création d'empreintes sont conçus pour produire une empreinte unique pour chaque message. Les empreintes de messages sont conçues pour que la restitution du message à partir de l'empreinte soit d'une difficulté insurmontable, et qu'il soit (en théorie) impossible de trouver deux messages différents qui produisent la même empreinte -- ce qui élimine la possibilité de remplacer un message par un autre en conservant la même empreinte.
Trouver le moyen d'envoyer l'empreinte de manière sécurisée à la banque constitue un autre défit auquel Alice doit faire face ; si l'empreinte n'est pas envoyée de manière sécurisée, son intégrité peut être compromise, et avec elle, la possibilité pour la banque de vérifier l'intégrité du message original. L'intégrité du message ne peut être vérifiée que si l'empreinte qui lui est associée est envoyée de manière sécurisée.
Une solution pour envoyer l'empreinte de manière sécurisée consiste à l'inclure dans une signature numérique.
Quand Alice envoie un message à sa banque, cette dernière doit s'assurer que le message a bien été envoyé par elle, pour éviter qu'un intrus puisse effectuer une transaction sur son compte. Une signature numérique, créée par Alice et incluse dans le message, permet d'atteindre cet objectif.
Les signatures numériques peuvent être créées en chiffrant une empreinte de message, ainsi que d'autres informations (comme un numéro d'ordre) avec la clé privée de l'expéditeur. Bien que tout le monde puisse déchiffrer la signature à l'aide de la clé publique, seul l'expéditeur connait la clé privée. Ce qui implique que seul l'expéditeur peut avoir signé le message. Inclure l'empreinte dans la signature entraîne que cette dernière n'est valable que pour ce message ; ceci assure aussi l'intégrité du message car personne ne peut modifier l'empreinte et ensuite signer le message.
Afin de se prémunir contre l'interception et la réutilisation de la signature par un intrus quelques jours plus tard, la signature contient un numéro d'ordre unique. Ceci protège la banque contre une plainte frauduleuse de la part d'Alice alléguant qu'elle n'a pas envoyé le message -- elle seule peut l'avoir signé (non-répudiation).