Intégrité des messages
Les cryptosystèmes offrent le secret (équivalent, la confidentialité) contre un adversaire qui écoute, qui est souvent appelé un adversaire passif. Un adversaire passif est supposé être capable d'accéder à n'importe quelle information envoyée d'Alice à Bob ;
Cependant, il existe de nombreuses autres menaces contre lesquelles nous pouvons vouloir nous protéger, en particulier lorsqu'un adversaire actif est présent. Un adversaire actif est celui qui peut modifier les informations transmises d'Alice à Bob.
Un adversaire actif pourrait :
- Modifier les informations envoyées d'Alice à Bob,
- Envoyer des informations à Bob de telle sorte que Bob pense que les informations proviennent d'Alice,
- Détourner les informations envoyées d'Alice à Bob de manière à ce qu'un tiers (Charlie) reçoive ces informations à la place de Bob.
Il existe différents types de garanties « d'intégrité » que nous pourrions chercher à fournir, afin de se protéger contre les actions possibles d'un adversaire actif. Un tel adversaire pourrait changer les informations qui sont transmises d'Alice à Bob (et notez que ces informations peuvent ou non être cryptées). Alternativement, l'adversaire pourrait essayer de « falsifier » un message et l'envoyer à Bob, en espérant qu'il pensera qu'il provient d'Alice. Des outils cryptographiques qui protègent contre ces menaces et les types de menaces connexes peuvent être construits dans les paramètres de clé secrète et de clé publique. Dans le cadre de la clé secrète, nous aborderons brièvement la notion de code d'authentification de message (ou MAC). Dans le cadre de la clé publique, l'outil qui sert à peu près le même objectif est un schéma de signature.
Code d'authentification de message (MAC)
Un code d'authentification de message exige qu'Alice et Bob partagent une clé secrète. Lorsqu'Alice veut envoyer un message à Bob, elle utilise la clé secrète pour créer une étiquette qu'elle ajoute au message (l'étiquette dépend à la fois de la clé et du message). Lorsque Bob reçoit le message et l'étiquette, il utilise la clé pour recalculer l'étiquette et vérifie si elle est identique à celle qu'il a reçue. Si c'est le cas, Bob accepte le message comme un message authentique d'Alice ; sinon, Bob rejette le message comme étant invalide.
Pour qu'un MAC soit considéré comme sécurisé, il devrait être impossible pour l'adversaire de calculer une étiquette correcte pour tout message pour lequel il n'a pas déjà vu une étiquette valide.
Schéma de signature
Dans le cadre de la clé publique, un schéma de signature fournit une assurance similaire à celle fournie par un MAC. Dans un schéma de signature, la clé privée spécifie un algorithme de signature qu'Alice peut utiliser pour signer des messages. Semblable à un MAC, l'algorithme de signature produit une sortie, appelée dans ce cas une signature, qui dépend du message signé ainsi que de la clé. La signature est ensuite ajoutée au message. Notez que l'algorithme de signature n'est connu que d'Alice. D'autre part, il existe un algorithme de vérification qui est une clé publique (connue de tous). L'algorithme de vérification prend en entrée un message et une signature, et renvoie vrai ou faux pour indiquer si la signature doit être acceptée comme valide. Une caractéristique intéressante d'un système de signature est que n'importe qui peut vérifier les signatures d'Alice sur les messages, à condition d'avoir une copie authentique de la clé de vérification d'Alice. En revanche, dans le paramètre MAC, seul Bob peut vérifier les étiquettes créées par Alice (quand Alice et Bob partagent une clé secrète).
Les schémas de signature peuvent être combinés avec des schémas de chiffrement à clé publique pour assurer la confidentialité ainsi que les garanties d'intégrité d'un schéma de signature.
Certificats
Nous avons mentionné qu'il est important de vérifier l'authenticité des clés publiques, avant qu'elles ne soient utilisées. Un certificat est un outil commun pour aider à atteindre cet objectif. Un certificat contiendra des informations sur un utilisateur particulier ou, plus communément, un site Web, y compris les clés publiques du site Web. Ces clés publiques seront signées par une autorité de confiance. Il est supposé que tout le monde possède la clé de vérification publique de l'autorité de confiance, de sorte que tout le monde peut vérifier la signature de l'autorité de confiance sur un certificat.
Fonctions de hachage
Les schémas de signature ont tendance à être beaucoup moins efficaces que les MAC. Il n'est donc pas conseillé d'utiliser un schéma de signature pour signer des messages « longs ». (En fait, la plupart des schémas de signature sont conçus pour signer uniquement des messages d'une longueur fixe et courte.) En pratique, les messages sont « hachés » avant d'être signés. Une fonction de hachage cryptographique est utilisée pour compresser un message de longueur arbitraire en un résumé de message court, aléatoire et de longueur fixe. Notez qu'une fonction de hachage est une fonction publique qui est supposée être connue de tous. De plus, une fonction de hachage n'a pas de clé.
Une fonction de hachage cryptographique est très différente d'une fonction de hachage utilisée pour construire une table de hachage, par exemple. Dans le contexte des tables de hachage, une fonction de hachage n'est généralement requise que pour générer des collisions avec une probabilité suffisamment faible. D'un autre côté, si une fonction de hachage cryptographique est utilisée, il devrait être informatiquement impossible de trouver des collisions, même si elles doivent exister. Les fonctions de hachage cryptographique sont généralement requises pour satisfaire des propriétés de sécurité supplémentaires.
Enfin, il convient de souligner que les fonctions de hachage ne peuvent pas être utilisées pour le cryptage, pour deux raisons fondamentales. La première est le fait que les fonctions de hachage ne possèdent pas de clé. La seconde est que les fonctions de hachage ne peuvent pas être inversées (ce ne sont pas des fonctions injectives), de sorte qu'un condensé de message ne peut pas être "décrypté" pour obtenir une valeur unique du texte en clair.