Quelle est la différence entre les deux algorithmes?
Une différence que je sache, c'est que MAC est à clé et le hachage ne l'est pas.
Pour faire simple: généralement, un MAC est une valeur de hachage chiffrée avec une clé secrète. Par exemple, les attaquants peuvent forger un message et calculer un nouveau hachage, mais il ne peut pas le faire si le système nécessite que le hachage soit chiffré avec une clé secrète.
A fonction de hachage cryptographique est une fonction de hachage déterministe complètement publique que tout le monde peut calculer sur des entrées arbitraires. Il prend en entrée une séquence de bits (n'importe quelle séquence de bits; certaines fonctions de hachage sont formellement limitées aux entrées de, disons, moins 264 bits, alias "2 millions de téraoctets") et génère des valeurs dans un espace assez petit, généralement une séquence de bits de taille fixe (par exemple toujours 160 bits avec la fonction de hachage standard SHA-1 ). De bonnes fonctions de hachage cryptographique respectent certaines conditions qui se résument à, officieusement, qu'elles mélangent les données d'entrée si soigneusement que nous ne pouvons pas les comprendre par la suite.
Un code d'authentification de message est un algorithme qui prend en entrée un message et une clé secrète et produit une sortie de taille fixe qui peut être vérifié ultérieurement pour correspondre au message; la vérification nécessite également la même clé secrète. Contrairement aux fonctions de hachage où tout est connu et où les attaquants luttent contre les mathématiques, MAC a du sens dans les modèles où il existe des entités connaissant un secret. Ce que nous attendons d'un bon MAC, c'est l'imprévisibilité: il devrait être impossible de calculer un message paire + une valeur MAC qui vérifie avec succès avec une clé donnée [~ # ~] k [~ # ~] sans sachant [~ # ~] k [~ # ~] exactement et dans son intégralité.
Les fonctions de hachage et MAC sont donc des types d'algorithmes distincts avec des propriétés distinctes et utilisés dans des situations vraiment distinctes.
Certains algorithmes MAC (mais certainement pas tous) peuvent être considérés comme des "fonctions de hachage avec une clé" mais ceci est une vue restrictive. HMAC est une construction MAC bien connue, qui s'appuie elle-même sur une fonction de hachage sous-jacente de manière intelligente. En effet, les propriétés et modèles de sécurité pour les fonctions de hachage et MAC sont suffisamment distincts les uns des autres pour que le fait de gifler une fonction de hachage et une clé ensemble ne donne pas nécessairement un MAC sécurisé, même si la fonction de hachage est secure (voir le attaque d'extension de longueur qui illustre ce point).
Dans une certaine mesure, nous pouvons affirmer qu'un algorithme MAC qui peut fonctionner en toute sécurité sans IV doit présenter des propriétés de hachage (c'est la raison pour laquelle j'aime HMAC: sans IV, il est beaucoup plus difficile de se tromper lors de sa mise en œuvre). Cependant, le diable est dans les détails.
Ce sont deux primitives totalement différentes. Un MAC est utilisé pour l'authentification des messages et est une primitive à clé symétrique. Une fonction de hachage peut être utilisée à de nombreuses fins et n'a pas d'entrée de clé spéciale. MAC est un acronyme de "code d'authentification de message".
Ne soyez pas dérouté par le fait que certains algorithmes MAC (par exemple, SHA1-HMAC) fonctionnent en utilisant une fonction de hachage comme sous-programme. Ce sont des bêtes très différentes.
J'ai trouvé cela au point de réponse d'un autre forum.
Ces types de primitives cryptographiques peuvent être distingués par les objectifs de sécurité qu'ils remplissent (dans le protocole simple de "l'ajout à un message"):
Intégrité: Le destinataire peut-il être sûr que le message n'a pas été accidentellement modifié?
Authentification: Le destinataire peut-il être sûr que le message provient de l'expéditeur?
Non-répudiation: Si le destinataire transmet le message et la preuve à un tiers, le tiers peut-il être sûr que le message provient de l'expéditeur? (Veuillez noter que je parle de non-répudiation au sens cryptographique, pas au sens juridique.) Cette question est également importante:
Clés: La primitive requiert-elle une clé secrète partagée ou des paires de clés publiques-privées? Je pense que la réponse courte est mieux expliquée avec un tableau:
Cryptographic primitive | Hash | MAC | Digital
Security Goal | | | signature
------------------------+------+-----------+-------------
Integrity | Yes | Yes | Yes
Authentication | No | Yes | Yes
Non-repudiation | No | No | Yes
------------------------+------+-----------+-------------
Kind of keys | none | symmetric | asymmetric
| | keys | keys
N'oubliez pas que l'authentification sans confiance dans les clés utilisées est inutile. Pour les signatures numériques, un destinataire doit être sûr que la clé de vérification appartient réellement à l'expéditeur. Pour les MAC, un destinataire doit être sûr que la clé symétrique partagée n'a été partagée qu'avec l'expéditeur.