Fonctions de hachage cryptographiques | Authentification des messages | Alison
Loading
Notes d'étude
Study Reminders
Support
Text Version

Authentification des messages à l'aide de fonctions de hachage

Set your study reminders

We will email you at these times to remind you to study.
  • Monday

    -

    7am

    +

    Tuesday

    -

    7am

    +

    Wednesday

    -

    7am

    +

    Thursday

    -

    7am

    +

    Friday

    -

    7am

    +

    Saturday

    -

    7am

    +

    Sunday

    -

    7am

    +

Fondations de la cryptographie Prof. Dr. Ashish Choudhury (ancienne) Infosys Foundation Career Development Chair Professeur International Institute of Information Technology – Bangalore Lecture – 29 Message Authentication Using Hash Functions (Référez-vous à la diapositive: 00:33) Bonjour à tous, bienvenue à cette conférence. Pour rappel lors de la dernière conférence, nous avons introduit une nouvelle primitive cryptographique, à savoir les fonctions de hachage cryptographique et nous avons aussi discuté rigoureusement de l'une des propriétés de sécurité importantes que nous avons besoin des fonctions de hachage cryptographiques, à savoir celui de la résistance aux collisions. Nous avons également vu comment construire des fonctions de hachage cryptographiques à l'aide du paradigme Merkle-Damgard. Le plan de cette conférence est donc le suivant. Nous verrons comment utiliser la fonction de hachage résistant aux collisions pour concevoir des codes d'authentification de messages pour des messages longs arbitraires et nous verrons une instanciation de ce paradigme, instanciation pratique, à savoir HMAC, qui est un code d'authentification de message largement utilisé dans la pratique. (Reportez-vous à la page Heure de la diapositive: 01 :10) Pour vous rappeler, nous avons déjà vu comment construire des codes d'authentification des messages pour les messages longs. Je vous rappelle donc la construction de notre PRF (F* CBC) F* utilisant le mode CBC de PRF pour les entrées de longueur fixe et ce PRF F* basé sur le mode CBC utilise des entrées comme des chaînes binaires de longueur arbitraire et vous donne une étiquette ou une sortie de taille fixe. Donc juste pour vous rappeler comment exactement cette construction F* ressemble. Il prend une entrée qui est une clé de taille n bits et l'entrée réelle sur laquelle le PRF doit être évalué qui peut être une chaîne de longueur de longueur jusqu'à n fois l bits et il vous donne une sortie fixe de taille n bits. Fondamentalement, selon que le message sous-jacent sur lequel vous voulez évaluer ce PRF F* est un multiple de n ou non, nous avons en fait l'un des 2 cas possibles. Donc le premier cas est quand le nombre de blocs dans votre message sur lequel vous voulez évaluer votre PRF F*, il est déjà un multiple de n, dans ce cas ce que nous faisons c'est, nous appliquons d'abord un encodage aléatoire gratuit de préfixe opéré par une clé k1. Une fois que nous avons le codage sans préfixe de votre message sur lequel vous voulez évaluer votre PRF, nous évaluons en gros le mode CBC de PRF qui est bloqué par bloc sécurisé et où le nombre de blocs dans l'entrée encodée m est déjà un multiple de la taille de bloc de votre taille fixe PRF F et que nous opérons à l'aide d'une autre clé k0 et que la sortie globale est prise comme la sortie de votre F* PRF pour l'entrée m. C'est le cas lorsque la taille de votre message est c fois une valeur n pour une constante c. Alors que si la taille du message n'est pas un multiple de n, alors ce que nous faisons est que nous faisons un remplissage, avant de calculer le codage de votre message. Donc, le padding est un padding déterministe, où nous divisons votre message en blocs de n bits, n bits, n bits et le dernier bloc se compose essentiellement des bits de pions qui est 1 suivi du nombre de zéros requis, puis nous calculons un codage sans préfixe de ce message de padded m ’ sous la clé k2. Une fois que nous avons le codage sans préfixe du message, nous exploitons maintenant le bloc sage sécurisé PRF FCBC sous la clé k0. Cela est considéré comme le résultat global de votre F* PRF pour l'entrée m. Donc, ici la clé est k0, k1, k2 et ils sont dérivés de la clé principale k avec laquelle vous allez utiliser votre PRF F* par un algorithme de génération de sous-clé qui pourrait être connu publiquement et selon que votre taille de message est un temps constant n ou non, le codage sans préfixe est opéré avec la clé k1 ou avec la clé k2. Donc c'est une indication du côté de la réception si le message qui a été évalué par ce PRF F* sa taille est déjà des temps constants n ou pas. Maintenant, l'objectif ici est de construire un code d'authentification de message à nouveau pour des messages arbitrairement longs, mais maintenant à l'aide d'une fonction de hachage résistante aux collisions et d'une MAC à longueur fixe et nous espérons qu'en effet si nous avons une telle construction, nous pouvons complètement nous débarrasser du grand nombre d'appels PRF qui sont utilisés dans cette construction F*, pas vrai. (Reportez-vous à la page Heure de la diapositive: 04:49) Voyons comment nous pouvons concevoir un code d'authentification de message pour les messages longs arbitraires à l'aide d'une fonction de hachage résistante aux collisions et ce paradigme est communément appelé paradigme de Hash-et MAC. Donc, comme le nom suggère ce que nous faisons est si vous avez un message de longueur arbitraire sur lequel vous voulez calculer la balise d'authentification, alors la balise est calculée en 2 étapes. N'oubliez pas que notre étiquette doit être de longueur fixe, sa longueur ne doit pas dépendre du message que vous souhaitez authentifier. Cette balise de longueur fixe est donc calculée en 2 étapes. Dans l'étape 1, nous hachons d'abord le message arbitraire sur lequel vous voulez calculer la balise à une chaîne de longueur fixe et ceci est fait à l'aide d'une fonction de hachage résistant aux collisions et maintenant une fois que vous avez le hachage du message ou le digest du message que vous avez obtenu à l'étape 1, nous calculons la balise sur la sortie que nous avons obtenue à l'étape précédente en utilisant un code d'authentification de message de longueur fixe et c'est pourquoi le nom de paradigme de Hash-et-MAC. Nous hachons d'abord l'entrée, puis nous calculons la balise sur la sortie du hachage du message. Donc bloquer ce que vous êtes donné ici, c'est que vous avez un code d'authentification de message que je dénote en disant Π MAC et qui est une MAC sécurisée, qui a un algorithme de génération de clé, algorithme de génération de balises, et algorithme de vérification d'étiquette et il peut authentifier des messages de taille fixe, c'est-à-dire des messages de taille disons l bits et il a son propre espace de message, l'espace-clé et l'espace d'étiquette. On nous donne aussi une fonction de hachage sécurisée ou résistante aux collisions, par exemple H prenant des entrées de longueur arbitraire et vous donnant des sorties de taille fixe, les sorties de taille l bits. Alors ce que nous allons faire dans ce paradigme de Hash-and-MAC est, nous allons combiner ces deux primitives et obtenir une MAC sécurisée, que je dénote comme Π et elle aura son algorithme de génération de clé, algorithme de génération de balises, et algorithme de vérification des balises. L'espace clé de la MAC que nous avons obtenu en composant la longueur fixe MAC et la fonction de hachage résistante aux collisions sera le même que l'espace clé de la MAC de longueur fixe, alors que l'espace de message sera des chaînes ou des chaînes binaires de longueur arbitraire et l'espace de balise sera le même que l'espace d'étiquette de votre MAC Π MAC de longueur fixe. (Reportez-vous à la page Heure de la diapositive: 07 :02) Donc, voici comment nous composons la MAC de longueur fixe avec la fonction de hachage résistant aux collisions pour obtenir le code d'authentification de message Π. L'algorithme de génération de balises est donc le suivant. Il faut un message qui peut être de n'importe quelle longueur, il s'agit d'une chaîne de bits arbitraire et d'une clé k générée de manière aléatoire par l'algorithme de génération de clé. Donc juste pour souligner ici l'algorithme de génération de clé de la MAC composée est le même que l'algorithme de génération de clé de votre MAC de base. Donc, la base MAC génère une clé uniformément aléatoire d'une taille fixe, alors c'est l'algorithme de génération de clé de ce MAC composé. Donc la clé k est l'une de ces clés et m est le message sur lequel nous voulons calculer la balise. Donc, ce que nous faisons en interne à l'intérieur de cet algorithme de génération de balises est que nous appliquons la fonction de hachage résistante aux collisions sur votre entrée m et une fois que nous avons le hachage du message qui est dit des bits de taille l, nous invoquerons l'algorithme de génération de balise de notre base MAC sous la clé k de la MAC composée et la sortie résultante est considérée comme la balise générée par le MAC composé. L'algorithme de vérification des balises est également fait ici. Alors imaginez que vous avez une entrée de longueur arbitraire avec la balise correspondante et que vous voulez le vérifier par rapport à une clé k. Donc ce que nous faisons est que nous recalculons la balise sur la partie de message de l'entrée. Ce que nous faisons est d'appeler l'algorithme de vérification de balise de notre MAC de base par rapport à la clé k, et si la vérification de la balise échoue, cela signifie que ce message, la paire de balises doit être rejeté alors que si la vérification de la balise de base MAC est un succès, alors cela signifie que nous devrions accepter le message, la balise que nous avons Obtenu pour le MAC composé. C'est ainsi que fonctionne le paradigme Hash-and-MAC. (Reportez-vous à la page Heure de la diapositive: 09:19) Donc, maintenant, nous voulons analyser si ce paradigme de Hash-and-MAC va nous donner un code d'authentification de message sécurisé pour l'authentification des entrées de longueur arbitraire. Donc ce que nous voulons prouver ici, c'est que si le composant-wise, la MAC de longueur fixe est une MAC sécurisée, disons CMA sécurisée ou forte CMA sécurisée et si le composant H qui nous est donné est aussi une fonction de hachage résistante aux collisions, alors la MAC composée que nous avons obtenue est en effet une MAC sécurisée qui peut authentifier les entrées de longueur arbitraire. Donc, pour la simplicité ce que nous allons prouver, c'est que nous allons prouver la sécurité CMA de la MAC composée en supposant que la base MAC est aussi un déterministe, mais cela ne doit pas être le cas si votre base MAC est une MAC randomisée, alors la CMA globale que nous sommes en train d'obtenir est aussi une MAC randomisée, dans ce cas nous devrions aller pour une sécurité forte CMA, mais juste pour garder notre argument simple, nous supposons que la base MAC est une MAC déterministe et comme donc le MAC composé est aussi un MAC déterministe et donc nous allons prouver la sécurité de CMA. Donc juste pour vous rappeler comment exactement le jeu CMA sera joué contre ce MAC composé. Ainsi, selon les règles du jeu CMA, l'adversaire va demander des balises sur plusieurs messages de son choix adaptivement, c'est-à-dire le nombre polynomial des messages et pour répondre aux requêtes de l'adversaire, le challenger de l'expérience exécute l'algorithme de génération de clé obtient une clé uniformément aléatoire et il calcule la balise sur tous les messages pour lesquels l'adversaire a demandé la balise. Ces balises sont retournées à l'adversaire selon l'algorithme de génération de balise du schéma MAC composé, et finalement, l'adversaire produit une contrefaçon, à savoir un message, une paire de balises et nous disons que l'adversaire a gagné le jeu ou que la sortie de l'expérience est 1, si ce message m * qui a été soumis par l'adversaire est différent de tous les messages pour lesquels l'adversaire a demandé les balises et la vérification de balise de la MAC composée sur le m *, t * vous donne la sortie 1. Notre but est donc de montrer que si le composant-sage de la base MAC est sécurisé et que la fonction de hachage sous-jacente est résistante aux collisions, la probabilité que tout adversaire polytime puisse gagner cette expérience est bornée par une probabilité négligeable. L'idée derrière la preuve est donc la suivante. Donc, s'il existe un adversaire qui peut venir avec une contrefaçon m *, t * en temps polynomial, alors il pourrait y avoir 2 cas possibles: le premier cas pourrait être que l'adversaire qui a présenté le faux m *, t * pour lui il se trouve qu'il existe au moins un des messages pour lesquels il a demandé la balise telle que, que nous dénotent par m, de telle sorte que le message faux m * même si c'est différent de ce message particulier m, il est arrivé que le message m, m * constitue une collision pour votre fonction de hachage sous-jacente. Si cela se produit, alors dans ce cas il est facile pour l'adversaire de trouver une étiquette sur le message m * parce que l'adversaire a déjà demandé la balise sur le message m et dire qu'il a obtenu une étiquette t et si le hachage du message m et le hachage du message m * sont identiques, cela signifie que la balise pour le message m * selon le code d'authentification de message composé sera également t. Et donc en sachant m, t, il sera facile pour un adversaire de trouver la balise sur le message m * et ce sera le faux pour l'adversaire. Mais cela signifie en interne que l'adversaire a besoin de trouver une collision pour la fonction de hachage sous-jacente en quantité polynomiale, ce qui contredit notre hypothèse selon laquelle la fonction de hachage sous-jacente est une fonction de hachage résistante aux collisions, non. Il s'agit donc d'un des cas par lesquels l'un des moyens par lesquels l'adversaire pouvait se présenter avec la contrefaçon m *, t *. Le deuxième cas peut être qu'il peut arriver que le message m *, son hachage soit différent du hachage de tous les messages pour lesquels l'adversaire a demandé ou demandé la balise. Mais même si le hachage du message m et le hachage du message m * sont différents, il peut arriver que l'adversaire soit en mesure de forger une balise sur l'entrée de longueur fixe, c'est-à-dire le hachage du message m *. Si c'est le cas, encore une fois ce que la contrefaçon m *, t * l'adversaire a soumis, il sera considéré comme une contrefaçon valide, mais pour ce cas 2 à être vrai, ce que l'adversaire a fondamentalement à faire, il doit fondamentalement forger une étiquette sur le message H (m *). Où H (m *) est différent de tous les H (m) pour lesquels l'adversaire a demandé la balise comme pour le schéma composé, mais cela va à l'encontre de notre hypothèse selon laquelle le code d'authentification de message de base que nous supposons est sécurisé CMA. Il s'agit donc des deux cas possibles dans lesquels un adversaire arbitraire contre un système composé pourrait se présenter avec une contrefaçon. Maintenant ce que nous allons établir de manière informelle, c'est que ces deux cas 1 et 2 vont réussir pour n'importe quel adversaire de poly-time seulement avec une probabilité négligeable, non. (Voir Diapositive Heure: 14:32) Donc formellement, voici votre jeu CMA sur le code d'authentification de message composé pour les messages de longueur arbitraire contre un adversaire de poly-time arbitraire. Alors il demande les balises pour un certain nombre de messages et l'ensemble de ces messages que je dénote par ce jeu de Q et en réponse, il obtient la balise sur ces messages comme par la clé uniformément aléatoire inconnue choisie par l'algorithme de génération de clé et comme pour la syntaxe de ce schéma composé, chacune de cette balise ti est essentiellement obtenue par le premier hachage du message mi, puis le calcul d'une balise de longueur fixe sous la clé inconnue k sur le hachage de mi ’ s. Après avoir obtenu les balises pour ces messages Q, l'adversaire soumet une contrefaçon et notre but est d'analyser quelle est la probabilité de succès de l'expérience gagnante de cette expérience que nous dénotent que l'expérience CMA a dépassé 1 et tout comme les règles du jeu l'expérience CMA sorties 1 si et seulement si le message faux m * est différent de tous les messages dans l'ensemble Q et une vérification de balise par rapport à la clé inconnue pour ce message m * en ce qui concerne la balise t * est un succès. Pour analyser la probabilité de succès de l'expérience CMA, permettez-moi d'appeler un événement Coll qui indique essentiellement l'existence d'au moins un message dans l'ensemble de messages pour lesquels l'adversaire a demandé la balise telle que le hachage de ce message m est le même que le hachage du message contrefait m *, et maintenant il est facile de voir que la probabilité de succès de l'adversaire de l'expérience CMA ou la probabilité que la sortie de l'expérience CMA soit 1 peut être divisée en 2 événements disjoints, à savoir conditionnés sur l'événement si la collision survient ou non, non. Donc, la probabilité globale que la production de l'expérience CMA est de 1, peut être écrite comme la probabilité que la sortie de l'expérience CMA est 1 et que la collision survient plus la probabilité que la sortie de l'expérience CMA soit 1 et que la collision ne se produise pas, non. Donc, ceci découle des règles de base de la probabilité et maintenant ce que je peux faire c'est ce premier terme ici Pr [ CMA Π MAC can always be upper bounded by the probabilité of the event collision to collision and the restante probabilités I am conservant as it is, right. Donc je fais quelques substitutions ici. Donc, je peux toujours respecter la probabilité que la sortie de l'expérience CMA est 1 par cette entité et maintenant ce que nous allons montrer est que chacune de ces expressions sur votre côté droit, à savoir la probabilité de collision d'événements et la probabilité que la sortie de l'expérience CMA est 1 et que la collision ne se produise pas les deux sont des fonctions négligeables de votre paramètre de sécurité sous-jacent. (Référez-vous à la diapositive: 17 :35) Donc, établissez ces deux faits un par un. Donc, ces deux faits que nous allons établir par le biais d'une preuve de réduction. Donc ce que nous allons faire est de supposer que nous avons un adversaire arbitraire qui peut forger votre MAC ou qui peut soumettre une contrefaçon contre le combiné ou le MAC composé et utiliser que notre but est de trouver ou de créer un autre adversaire poly-time ce C dont l'objectif est de trouver fondamentalement une collision dans la fonction de hachage sous-jacente résistante aux collisions. Donc ce que nous faisons essentiellement ici dans la réduction est l'adversaire ou le faussaire MAC demande la balise sur plusieurs messages de son choix, par exemple le nombre de messages, et pour répondre à ces requêtes ce que fait cet algorithme de recherche de collision, il exécute l'algorithme de génération de clé de la MAC elle-même, génère une clé uniformément aléatoire, et il calcule la balise sur les messages pour lesquels notre MAC a demandé la balise et les réponses sont données au faussaire MAC et, conformément à la syntaxe de la MAC composée, chacun de ces ti est calculé en gros par le premier hachage du message selon la fonction de hachage sous-jacente H et Puis calculer une balise de longueur fixe sur le hachage de chaque mi sous la clé inconnue k. Donc si vous voyez ce qui se passe dans cette réduction est du point de vue de ce faussaire MAC, à droite, si nous considérons ce faussaire MAC, la distribution de probabilité des informations qu'elle reçoit de cet outil de recherche de collision est exactement la même que ce faussaire MAC aurait attendu en participant à une vraie instance du jeu CMA contre le MAC composé. Parce que dans une vraie instance du jeu CMA CMA, ce que l'adversaire aurait fait, c'est qu'il aurait soumis plusieurs messages de son choix et que les balises qu'il aurait vues en réponse auraient exactement la même distribution que celle fournie par l'algorithme de l'outil de recherche de collision à ce faussaire MAC, non. Par conséquent, la distribution de la probabilité de l'information que le faussaire MAC voit dans cette réduction est exactement la même que celle de son adversaire dans une véritable instance de l'expérience de l'AMC. Après avoir obtenu les balises sur les messages du choix de l'adversaire, c'est essentiellement cet adversaire ou les résultats des faussaires MAC d'une contrefaçon et quel est l'objectif de l'outil de recherche de collision? L'objectif de l'outil de recherche de collision est de repérer une collision dans la fonction de hachage sous-jacente. Donc ce qu'il fait, c'est qu'il analyse fondamentalement l'ensemble des messages dans l'ensemble de requêtes, donc il a l'ensemble de messages pour lesquels l'adversaire a demandé la balise et il analyse ces messages et voit s'il existe au moins un de ce message mi dans cet ensemble de sorte que le message mi est différent du message forgé m * et que le hachage de ce message mi est le même que le hachage du message m *. Si c'est le cas, alors cet algorithme d'évitement de collision génère une collision pour la fonction de hachage sous-jacente H et il est facile de voir que le temps d'exécution de cet algorithme d'évitement de collision est polynomial, si le temps d'exécution de l'algorithme de faussaire MAC est de temps polynomial, non. Donc maintenant, il est facile de voir que la probabilité que l'outil de recherche de collision produise une collision est exactement la même que celle avec laquelle la collision survient lorsque ce faussaire de l'adversaire MAC participe à une instance du jeu CMA. Parce que si effectivement la collision se produit, cela signifie qu'il existe au moins un message mi qui est différent de m *, mais le hachage de m * est identique à H de mi, puis, en effet, l'algorithme de l'outil de recherche de collision sera en mesure de trouver la collision et l'événement qui mi différent de m *, mais leurs valeurs de hachage sont identiques n'est rien d'autre que la collision d'événements. Donc, puisque je suppose que ma fonction de hachage sous-jacente est une fonction de hachage résistante aux collisions, alors que, selon la définition de la fonction de hachage résistant aux collisions, cette probabilité devrait être une fonction négligeable du paramètre de sécurité. Puisque cette probabilité est la même que la probabilité de collision d'événements qui signifie que la collision survient aussi avec une probabilité négligeable. Nous avons donc établi notre premier fait que nous voulions établir. Maintenant, nous devons établir le même fait, à savoir que nous voulons prouver que si la collision ne se produit pas, la probabilité qu'un algorithme de faussaire MAC contre le MAC composé puisse gagner le jeu CMA est délimitée par une fonction négligeable et que nous établissez en donnant une réduction. Nous supposons donc que nous avons un adversaire de poly-time, un adversaire MAC qui peut se forger contre, qui peut briser la sécurité ou la sécurité CMA du MAC composé. Maintenant, en utilisant cet adversaire, nous concevons un autre adversaire que nous dénotent comme dit A ’ et son but est de créer une contrefaçon contre la base de longueur fixe MAC. Alors maintenant, ce que cet adversaire pour le MAC composé, c'est qu'il participe à une instance du jeu CMA contre le MAC composé et conformément aux règles du jeu CMA, il demande les tags pour plusieurs messages de son choix. Ce que cet adversaire A ’ maintenant, c'est qu'il appelle une instance de jeu CMA par rapport à la longueur fixe MAC, où les messages qui sont authentifiés sont de longueur fixe, à savoir les messages l-bit, pas vrai. Donc la différence dans la partie CMA, l'expérience CMA ici et l'expérience CMA ici, c'est la longueur des messages. Dans l'expérience CMA sur le schéma composé, chacun de ces messages m1, m2, mq, ils pouvaient être de n'importe quelle longueur, mais dans le jeu CMA joué contre une MAC de longueur fixe, le jeu de requêtes ne peut être que des messages dont les longueurs sont de l bits. Donc ce que cet adversaire A ’ fait est qu'il joue un double rôle sur votre gauche, il agit en fait comme un adversaire et son but est de gagner une instance de jeu de CMA contre une MAC de longueur fixe, mais sur le côté droit, il agit comme un vérificateur droit et il interagit avec le faussaire MAC contre les entrées de longueur arbitraire. Donc ce que cet adversaire A ’ est en train de faire est qu'il a un ensemble de requêtes sur lesquelles il est supposé créer des balises comme pour le schéma composé. Pour ce faire ce que c'est qu'il hache tous ces messages et bien que le hachage de ces messages soit fourni comme un ensemble de requêtes au vérificateur dans le jeu CMA contre la longueur fixe MAC, fondamentalement l'adversaire A ’ se demande maintenant pour les tags sur le hachage de ces messages m1, m2, mq et selon les règles du jeu CMA, le vérificateur du jeu CMA contre la longueur fixe MAC génère une clé et il répond en calculant une balise sur le hachage de chacun des messages qui a été soumis par l'adversaire A ’, à droite. Maintenant ce que cet adversaire A ’ c'est qu'il doit répondre aux demandes que l'adversaire A a soulevées à l'adversaire A ’. Donc ce qu'il fait, c'est qu'il fournit la même réponse au faussaire MAC qu'il a récupéré du vérificateur dans le jeu CMA par rapport à la MAC de longueur fixe. Donc ces 2 couches de l'itération de la construction Davies-Meyer sont contrôlées par une clé et finalement nous obtenons la balise. Alors, que sont exactement ces 2 couches, n'est-ce pas? Donc la couche 1 est une couche interne et ce qu'elle fait, elle prend l'entrée arbitraire sur laquelle vous voulez calculer la balise et elle crée une sortie à longueur fixe de cette entrée sur laquelle nous voulons calculer la balise selon la transformation Merkle-Damgard par application itérative de cette fonction Davies-Meyer plusieurs fois et mémoriser la sortie de la transformation Merkle-Damgard vous donne une sortie de longueur fixe. Une fois que nous avons la couche 1, ce que nous faisons dans la couche externe, c'est en fait que nous calculons la balise sur la sortie que nous avons obtenue à partir de la couche interne, et ceci est fait de manière intéressante à l'aide d'une instance de la fonction Davies-Meyer. C'est la différence ici, pas vrai. Donc même si cela peut être considéré comme une instanciation de votre paradigme Hash-and-MAC parce que nous avons d'abord haché le message et ensuite nous créons la balise sur le message. La partie intéressante ici est que la balise du message est également calculée à l'aide d'une instanciation dans un cas de la fonction Davies-Meyer ou de la fonction de compression résistante aux collisions. Nous n'avons pas besoin d'une MAC distincte pour cette deuxième couche. (Référez-vous à la diapositive: 31 :55) Donc voyons l'architecture du HMAC. Donc nous avons des constantes connues publiquement ici que nous détenons comme ipad et opad, ipad essentiellement pour les supports d'entrée et les supports opad pour le tampon de sortie, chacun de longueur l bits et nous avons une clé secrète de l bits qui est la clé principale de la CMA globale que nous voulons construire, pas vrai. Donc ce que nous faisons c'est d'invoquer une instance de la construction Davies-Meyer où l'apport total était de taille n + l bits. La partie du message est essentiellement la XOR de l'ipad avec la clé et nous avons un IV publiquement connu, et ensuite ce que nous faisons c'est que nous appliquons la transformation Merkle-Damgard. Donc ce que nous avons fait ici, c'est que vous avez le message m sur lequel vous voulez calculer la balise pour le message sous la clé k. Donc, ce que nous faisons c'est cette partie est fondamentalement une couche interne de hachage où cette couche interne de hachage de cette partie n'est rien d'autre qu'une transformation Merkle-Damgard où nous aurions encodé le message et ensuite le dernier bloc nous aurions ajouté quelques bits de remplissage, ce qui signifie essentiellement la représentation binaire du nombre de blocs l-bit qui sont présents dans votre message et ensuite nous aurions fait une séquence de chaînage, où dans chaque itération nous aurons un appel de votre fonction Davies-Meyer sur le bloc en cours du message et la sortie de l'appel précédent de hDM. La différence ici est que le IV maintenant ici est un IV ou une valeur clé qui est obtenue en exécutant un appel de la fonction Davies-Meyer sur cette entrée k XOR ipad avec un IV connu. Donc c'est votre couche interne de hachage et ça va vous donner une sortie de taille fixe et ce que nous faisons maintenant dans la partie MAC ou la couche externe est le suivant. Nous prenons la sortie t qui est de taille par exemple n bits et n peut être inférieur à l. Donc ce que nous faisons c'est que nous faisons le remplissage ici et nous faisons 2 invocations de la fonction Davies-Meyer ici où le premier appel est maintenant avec le XOR de k avec opad et quelle que soit la sortie, il est utilisé comme une clé, à droite, ou il est utilisé comme l'une des entrées avec la balise concaténée avec le tampon de sortie étant entrée et quelle que soit la sortie qui est prise comme la sortie globale de la construction HMAC pour votre message et cette seconde couche est en fait la couche externe du code d'authentification du message. Donc vous avez la couche interne de hachage où nous prenons le message de longueur arbitraire, calculer une balise de longueur fixe, et ensuite nous prenons cette balise de longueur fixe, puis de nouveau faire 2 invocations de la fonction Davies-Meyer pour calculer la MAC finale. (Référez-vous à la diapositive: 34 :44) Donc, maintenant, nous n'allons pas entrer dans la sécurité à part entière de la construction HMAC, mais essayons intuitivement de comprendre ce qui se passe ici. Il s'agit donc de l'architecture globale de la construction HMAC. Donc ce que nous faisons ici, c'est que nous dérivons en fait 2 clés en exécutant la fonction Davies-Meyer ici, vous pouvez appeler ces clés comme kin et kout right et kin sert essentiellement comme IV pour votre transformation Merkle-Damgard, alors que le kout sert comme la partie de l'entrée pour la fonction Davies-Meyer quand nous sommes en fait le calcul de la balise. Alors imaginez que nous définissons une fonction G qui prend une clé k pour l'ensemble MAC et qu'elle appelle la fonction Davies-Meyer deux fois comme ça, désolé pour cette typo ce DM devrait venir dans le sous-script. Nous avons donc 2 invocations de la fonction Davies Meyer. Le premier appel est en entrée IV concaténé avec le XOR de k et ipad et le second appel est sur l'entrée IV concaténé avec k XOR opad et disent que la sortie résultante est kin et kout, droite. Il est intéressant de noter que ce que nous pouvons prouver, c'est la construction G (k) que nous avons définie comme ça. C'est comme un générateur de pseudorandom si nous allons dans le modèle de chiffrement idéal.  

Notification
You have received a new notification
Click here to view them all