Utilisation de la cryptographie par blocs Fonctions de hachage 1
Les modes principaux d utilisation Supposons qu on ait un texte clair qu on découpe en plusieurs blocs d entrée x = x 1 x 2... x r. Comment va-t-on utiliser le système pour chiffrer ce texte clair?
3 Electronic Codebook Mode : ECB Le chiffrement. On part du texte clair x = x 1 x 2... x r où chaque bloc x i a la taille exacte t de l entrée du circuit de chiffrement. On calcule alors pour i = 1,..., r les textes chiffrés c i = e k (x i ). Le texte chiffré est c = c 1 c 2... c r. Le déchiffrement. On calcule pour i = 1,..., k les x i = d k (c i ). On reconstitue x = x 1 x 2... x r.
Cipher Block Chaining Mode : CBC Le chiffrement. Le texte clair est découpé en blocs x i, de taille t. En plus du texte clair x = x 1 x 2... x r on a besoin d un bloc initial IV tiré aléatoirement. Posons c 0 = IV. On calcule alors successivement : c 1 = e k (c 0 x 1 ), c 2 = e k (c 1 x 2 ),... c r = e k (c r 1 x r ), Le message chiffré est alors c = c 0 c 1 c 2... c r. Le déchiffrement s effectue en calculant successivement : x 1 = d k (c 1 ) c 0 x 2 = d k (c 2 ) c 1... x r = d k (c r ) c r 1
5 Avantage et inconvénients Mode ECB Deux blocs identiques sont chiffrés de la même façon Par contre il n y a pas propagation d erreurs Mode CBC Il y a propagation des erreurs Par contre il est utile dans un contexte d authentification
Fonctions de hachage 6
Fonctions de hachage Une fonction de hachage transforme un long message en un bloc court de taille fixe (le résumé, le condensé, l empreinte, le haché). Si bien que de nombreux messages ont le même résumé. Utilisation Vérifier l intégrité de données Signature numérique Mots de passe 1000 utilisation dans les systèmes d exploitations actuel
Fonctions de hachage Une fonction de hachage transforme un long message en un bloc court de taille fixe (le résumé, le condensé, l empreinte, le haché). Si bien que de nombreux messages ont le même résumé. Utilisation Vérifier l intégrité de données Signature numérique Mots de passe 1000 utilisation dans les systèmes d exploitations actuel
8 Critères de sécurité En pratique personne ne doit être capable de construire un message ayant un résumé donné (résistance à la détermination d une préimage), c est-à-dire qu une fonction de hachage doit être à sens unique. De plus, personne ne doit être capable en pratique de construire deux messages distincts ayant le même résumé (résistance aux collisions).
9 Fonctions de hachage résistantes aux collisions Définition Une fonction de hachage est dite résistante aux collisions s il est impossible en pratique de trouver deux valeurs x et x telles que h(x ) = h(x).
10 Trouver une collision pour h sur un ensemble de messages M De manière générale on se donne une fonction h : M C On choisit X une partie de M à q éléments. On calcule h(x) pour chaque x X Théorème La probabilité qu il y ait deux élément x x de X tels que h(x) = h(x ) est de ( 1 1 1 ) ( 1 2 ) (... 1 q 1 ) c c c Si q est assez petit devant c, elle est à peu près égale à ( ) q 2 1 exp. 2c Elle est égale à 1/2 si q 1, 17 c.
11 La probabilité qu il y ait deux élément x x de X ( tels ) que q h(x) = h(x 2 ) est à peu près égale à 1 exp 2c si q est assez petit devant c.
11 La probabilité qu il y ait deux élément x x de X ( tels ) que q h(x) = h(x 2 ) est à peu près égale à 1 exp 2c si q est assez petit devant c. La probabilité que pour deux élément x x de X on ait toujours h(x) h(x ) est de
La probabilité qu il y ait deux élément x x de X ( tels ) que q h(x) = h(x 2 ) est à peu près égale à 1 exp 2c si q est assez petit devant c. La probabilité que pour deux élément x x de X on ait toujours h(x) h(x ) est de ( 1 1 ) ( 1 2 ) (... 1 q 1 ) c c c
La probabilité qu il y ait deux élément x x de X ( tels ) que q h(x) = h(x 2 ) est à peu près égale à 1 exp 2c si q est assez petit devant c. La probabilité que pour deux élément x x de X on ait toujours h(x) h(x ) est de ( 1 1 ) ( 1 2 ) (... 1 q 1 ) c c c Si q est assez petit devant c
La probabilité qu il y ait deux élément x x de X ( tels ) que q h(x) = h(x 2 ) est à peu près égale à 1 exp 2c si q est assez petit devant c. La probabilité que pour deux élément x x de X on ait toujours h(x) h(x ) est de ( 1 1 ) ( 1 2 ) (... 1 q 1 ) c c c Si q est assez petit devant c ( exp 1 ) ( exp 2 ) c c ( = exp 1 + 2 + + q 1 ) c ( ) q(q 1) = exp 2c (... exp q 1 c )
La probabilité qu il y ait deux élément x x de X ( tels ) que q h(x) = h(x 2 ) est à peu près égale à 1 exp 2c si q est assez petit devant c. La probabilité que pour deux élément x x de X on ait toujours h(x) h(x ) est de ( 1 1 ) ( 1 2 ) (... 1 q 1 ) c c c Si q est assez petit devant c ( exp 1 ) ( exp 2 ) c c ( = exp 1 + 2 + + q 1 ) c ( ) q(q 1) = exp 2c (... exp q 1 c )
Applications Paradoxe des anniversaires Combien de personnes faut-il qu il y ait dans un groupe pour qu il y ait une probabilité de 1/2 que deux personnes partagent la même date d anniversaire? Taille minimale d une empreinte numérique. Il est recommandé d utiliser des empreintes numériques de 160 bits. L attaque des anniversaires aurait besoin de 2 80 hachages.
12 Applications Paradoxe des anniversaires Combien de personnes faut-il qu il y ait dans un groupe pour qu il y ait une probabilité de 1/2 que deux personnes partagent la même date d anniversaire? Taille minimale d une empreinte numérique. Il est recommandé d utiliser des empreintes numériques de 160 bits. L attaque des anniversaires aurait besoin de 2 80 hachages.
13 Les fonctions de hachage à usage de la cryptographie Les fonctions de hachage fournissent donc pour un x {0, 1} un résumé (ou condensé) y {0, 1} r où r est une taille fixée pour les sorties : y = h(x). Ces fonctions sont appelées fonctions de hachage MDC (Manipulation Détection Codes) ou MIC (Message Integrity Codes) ou plus simplement fonctions de hachage à usage de la cryptographie ;
La construction de MerkIe-Daingard Une fonction de compression est une fonction prenant en entrée une donnée binaire de taille s et retournant une donnée binaire de taille r (r < s). La construction de MerkIe-Daingard consiste à itérer une fonction de compression pour obtenir une fonction de hachage de {0, 1} dans {0, 1} r. A chaque itération de la fonction de compression, la donnée d entrée est composée d une partie du texte à hacher et de la sortie du tour précédent. La fonction de compression est très souvent de la forme : f (h, B) = π B (h) + h où les π B forment une famille de permutations. L utilisation de permutations évite les collisions internes L addition finale empêche les calculs arrières
La construction de MerkIe-Daingard Une fonction de compression est une fonction prenant en entrée une donnée binaire de taille s et retournant une donnée binaire de taille r (r < s). La construction de MerkIe-Daingard consiste à itérer une fonction de compression pour obtenir une fonction de hachage de {0, 1} dans {0, 1} r. A chaque itération de la fonction de compression, la donnée d entrée est composée d une partie du texte à hacher et de la sortie du tour précédent. La fonction de compression est très souvent de la forme : f (h, B) = π B (h) + h où les π B forment une famille de permutations. L utilisation de permutations évite les collisions internes L addition finale empêche les calculs arrières
La construction de MerkIe-Daingard Une fonction de compression est une fonction prenant en entrée une donnée binaire de taille s et retournant une donnée binaire de taille r (r < s). La construction de MerkIe-Daingard consiste à itérer une fonction de compression pour obtenir une fonction de hachage de {0, 1} dans {0, 1} r. A chaque itération de la fonction de compression, la donnée d entrée est composée d une partie du texte à hacher et de la sortie du tour précédent. La fonction de compression est très souvent de la forme : f (h, B) = π B (h) + h où les π B forment une famille de permutations. L utilisation de permutations évite les collisions internes L addition finale empêche les calculs arrières
La construction de MerkIe-Daingard Une fonction de compression est une fonction prenant en entrée une donnée binaire de taille s et retournant une donnée binaire de taille r (r < s). La construction de MerkIe-Daingard consiste à itérer une fonction de compression pour obtenir une fonction de hachage de {0, 1} dans {0, 1} r. A chaque itération de la fonction de compression, la donnée d entrée est composée d une partie du texte à hacher et de la sortie du tour précédent. La fonction de compression est très souvent de la forme : f (h, B) = π B (h) + h où les π B forment une famille de permutations. L utilisation de permutations évite les collisions internes L addition finale empêche les calculs arrières
La construction de MerkIe-Daingard Une fonction de compression est une fonction prenant en entrée une donnée binaire de taille s et retournant une donnée binaire de taille r (r < s). La construction de MerkIe-Daingard consiste à itérer une fonction de compression pour obtenir une fonction de hachage de {0, 1} dans {0, 1} r. A chaque itération de la fonction de compression, la donnée d entrée est composée d une partie du texte à hacher et de la sortie du tour précédent. La fonction de compression est très souvent de la forme : f (h, B) = π B (h) + h où les π B forment une famille de permutations. L utilisation de permutations évite les collisions internes L addition finale empêche les calculs arrières
La construction de MerkIe-Daingard Une fonction de compression est une fonction prenant en entrée une donnée binaire de taille s et retournant une donnée binaire de taille r (r < s). La construction de MerkIe-Daingard consiste à itérer une fonction de compression pour obtenir une fonction de hachage de {0, 1} dans {0, 1} r. A chaque itération de la fonction de compression, la donnée d entrée est composée d une partie du texte à hacher et de la sortie du tour précédent. La fonction de compression est très souvent de la forme : f (h, B) = π B (h) + h où les π B forment une famille de permutations. L utilisation de permutations évite les collisions internes L addition finale empêche les calculs arrières
La construction de MerkIe-Daingard 15
16 Plusieurs éléments rentrent en jeu dans ce schéma : la variable de chaînage CV (de taille r) qui correspond à la sortie du tour précédent. la valeur initiale IV qui est la première valeur de chaînage. Elle est choisie arbitrairement. le message x à hacher. Une entrée de la fonction de compression étant de taille s, dont r bits sont constitués par la variable de chaînage, le message va être découpé en blocs de taille s r. le padding ou bourrage qui consiste à compléter le document initial afin que sa taille soit un multiple de s r. Généralement on rajoute des 0 et un bloc de taille s r contenant la taille du message initial.
16 Plusieurs éléments rentrent en jeu dans ce schéma : la variable de chaînage CV (de taille r) qui correspond à la sortie du tour précédent. la valeur initiale IV qui est la première valeur de chaînage. Elle est choisie arbitrairement. le message x à hacher. Une entrée de la fonction de compression étant de taille s, dont r bits sont constitués par la variable de chaînage, le message va être découpé en blocs de taille s r. le padding ou bourrage qui consiste à compléter le document initial afin que sa taille soit un multiple de s r. Généralement on rajoute des 0 et un bloc de taille s r contenant la taille du message initial.
16 Plusieurs éléments rentrent en jeu dans ce schéma : la variable de chaînage CV (de taille r) qui correspond à la sortie du tour précédent. la valeur initiale IV qui est la première valeur de chaînage. Elle est choisie arbitrairement. le message x à hacher. Une entrée de la fonction de compression étant de taille s, dont r bits sont constitués par la variable de chaînage, le message va être découpé en blocs de taille s r. le padding ou bourrage qui consiste à compléter le document initial afin que sa taille soit un multiple de s r. Généralement on rajoute des 0 et un bloc de taille s r contenant la taille du message initial.
16 Plusieurs éléments rentrent en jeu dans ce schéma : la variable de chaînage CV (de taille r) qui correspond à la sortie du tour précédent. la valeur initiale IV qui est la première valeur de chaînage. Elle est choisie arbitrairement. le message x à hacher. Une entrée de la fonction de compression étant de taille s, dont r bits sont constitués par la variable de chaînage, le message va être découpé en blocs de taille s r. le padding ou bourrage qui consiste à compléter le document initial afin que sa taille soit un multiple de s r. Généralement on rajoute des 0 et un bloc de taille s r contenant la taille du message initial.
16 Plusieurs éléments rentrent en jeu dans ce schéma : la variable de chaînage CV (de taille r) qui correspond à la sortie du tour précédent. la valeur initiale IV qui est la première valeur de chaînage. Elle est choisie arbitrairement. le message x à hacher. Une entrée de la fonction de compression étant de taille s, dont r bits sont constitués par la variable de chaînage, le message va être découpé en blocs de taille s r. le padding ou bourrage qui consiste à compléter le document initial afin que sa taille soit un multiple de s r. Généralement on rajoute des 0 et un bloc de taille s r contenant la taille du message initial.
Pour obtenir la valeur h(x) à partir de la fonction de compression f, on utilise le procédé suivant : x Bourrage(x) = Y 1... Y t CV 0 IV CV i f (CV i 1, Y i ) i = 1... t h(x) CV t La construction de MerkIe et Daingard garantit que la sécurité de la fonction obtenue est au moins aussi élevée que la sécurité de la fonction de compression. De nombreuses fonctions de hachage sont basées sur cette construction : MD5, SHA-1, RIPEMD-160.
17 Pour obtenir la valeur h(x) à partir de la fonction de compression f, on utilise le procédé suivant : x Bourrage(x) = Y 1... Y t CV 0 IV CV i f (CV i 1, Y i ) i = 1... t h(x) CV t La construction de MerkIe et Daingard garantit que la sécurité de la fonction obtenue est au moins aussi élevée que la sécurité de la fonction de compression. De nombreuses fonctions de hachage sont basées sur cette construction : MD5, SHA-1, RIPEMD-160.
La sécurité de la fonction obtenue est au moins aussi élevée que la sécurité de la fonction de compression. 18 x Bourrage(x) = Y 1... Y t CV 0 IV CV i f (CV i 1, Y i ) i = 1... t h(x) CV t Si on peut construire un collision h(x) = h(x ), alors soient x = Y 1... Y t, et x = Y 1... Y t. On a f (CV t 1, Y t ) = f (CV t 1, Y t ). Ou bien c est une collision de la fonction de compression f, ou bien (CV t 1, Y t ) = (CV t 1, Y t ). Dans ce dernier cas, on a Y t = Y t, donc t = t car les derniers blocs contiennent la taille du message. On a aussi CV t 1 = CV t 1, donc f (CV t 2, Y t 1 ) = f (CV t 2, Y t 1 ), et on raisonne de même. On finit par avoir Y i Y i car les messages sont différents, d où une collision de la fonction de compression.
La sécurité de la fonction obtenue est au moins aussi élevée que la sécurité de la fonction de compression. 18 x Bourrage(x) = Y 1... Y t CV 0 IV CV i f (CV i 1, Y i ) i = 1... t h(x) CV t Si on peut construire un collision h(x) = h(x ), alors soient x = Y 1... Y t, et x = Y 1... Y t. On a f (CV t 1, Y t ) = f (CV t 1, Y t ). Ou bien c est une collision de la fonction de compression f, ou bien (CV t 1, Y t ) = (CV t 1, Y t ). Dans ce dernier cas, on a Y t = Y t, donc t = t car les derniers blocs contiennent la taille du message. On a aussi CV t 1 = CV t 1, donc f (CV t 2, Y t 1 ) = f (CV t 2, Y t 1 ), et on raisonne de même. On finit par avoir Y i Y i car les messages sont différents, d où une collision de la fonction de compression.
La sécurité de la fonction obtenue est au moins aussi élevée que la sécurité de la fonction de compression. 18 x Bourrage(x) = Y 1... Y t CV 0 IV CV i f (CV i 1, Y i ) i = 1... t h(x) CV t Si on peut construire un collision h(x) = h(x ), alors soient x = Y 1... Y t, et x = Y 1... Y t. On a f (CV t 1, Y t ) = f (CV t 1, Y t ). Ou bien c est une collision de la fonction de compression f, ou bien (CV t 1, Y t ) = (CV t 1, Y t ). Dans ce dernier cas, on a Y t = Y t, donc t = t car les derniers blocs contiennent la taille du message. On a aussi CV t 1 = CV t 1, donc f (CV t 2, Y t 1 ) = f (CV t 2, Y t 1 ), et on raisonne de même. On finit par avoir Y i Y i car les messages sont différents, d où une collision de la fonction de compression.
La sécurité de la fonction obtenue est au moins aussi élevée que la sécurité de la fonction de compression. 18 x Bourrage(x) = Y 1... Y t CV 0 IV CV i f (CV i 1, Y i ) i = 1... t h(x) CV t Si on peut construire un collision h(x) = h(x ), alors soient x = Y 1... Y t, et x = Y 1... Y t. On a f (CV t 1, Y t ) = f (CV t 1, Y t ). Ou bien c est une collision de la fonction de compression f, ou bien (CV t 1, Y t ) = (CV t 1, Y t ). Dans ce dernier cas, on a Y t = Y t, donc t = t car les derniers blocs contiennent la taille du message. On a aussi CV t 1 = CV t 1, donc f (CV t 2, Y t 1 ) = f (CV t 2, Y t 1 ), et on raisonne de même. On finit par avoir Y i Y i car les messages sont différents, d où une collision de la fonction de compression.
La sécurité de la fonction obtenue est au moins aussi élevée que la sécurité de la fonction de compression. 18 x Bourrage(x) = Y 1... Y t CV 0 IV CV i f (CV i 1, Y i ) i = 1... t h(x) CV t Si on peut construire un collision h(x) = h(x ), alors soient x = Y 1... Y t, et x = Y 1... Y t. On a f (CV t 1, Y t ) = f (CV t 1, Y t ). Ou bien c est une collision de la fonction de compression f, ou bien (CV t 1, Y t ) = (CV t 1, Y t ). Dans ce dernier cas, on a Y t = Y t, donc t = t car les derniers blocs contiennent la taille du message. On a aussi CV t 1 = CV t 1, donc f (CV t 2, Y t 1 ) = f (CV t 2, Y t 1 ), et on raisonne de même. On finit par avoir Y i Y i car les messages sont différents, d où une collision de la fonction de compression.
19 Obtention d une collision (méthode rho de Pollard) Soit x 0 un point quelconque de l ensemble de départ E d une fonction de compression f de taille de blocs 2m. On note G(x) = f (IV, x) On itére G: x i+1 = G(x i ) pour i = 1,..., 2 m Il existe i et j tels que x i = x j avec une bonne probabilité. On a donc une collision pour la fonction f (IV, x) Algorithme Calculer x m Calculer G t (x m ) jusqu à ce que G τ (x m ) = x m Calculer x τ Calculer G t (x 0 ) et G t (x τ ) jusqu à ce que G i (x 0 ) = G i (x τ ) Collision entre a = G i 1 (x 0 ) et b = G i 1 (x τ )
19 Obtention d une collision (méthode rho de Pollard) Soit x 0 un point quelconque de l ensemble de départ E d une fonction de compression f de taille de blocs 2m. On note G(x) = f (IV, x) On itére G: x i+1 = G(x i ) pour i = 1,..., 2 m Il existe i et j tels que x i = x j avec une bonne probabilité. On a donc une collision pour la fonction f (IV, x) Algorithme Calculer x m Calculer G t (x m ) jusqu à ce que G τ (x m ) = x m Calculer x τ Calculer G t (x 0 ) et G t (x τ ) jusqu à ce que G i (x 0 ) = G i (x τ ) Collision entre a = G i 1 (x 0 ) et b = G i 1 (x τ )
19 Obtention d une collision (méthode rho de Pollard) Soit x 0 un point quelconque de l ensemble de départ E d une fonction de compression f de taille de blocs 2m. On note G(x) = f (IV, x) On itére G: x i+1 = G(x i ) pour i = 1,..., 2 m Il existe i et j tels que x i = x j avec une bonne probabilité. On a donc une collision pour la fonction f (IV, x) Algorithme Calculer x m Calculer G t (x m ) jusqu à ce que G τ (x m ) = x m Calculer x τ Calculer G t (x 0 ) et G t (x τ ) jusqu à ce que G i (x 0 ) = G i (x τ ) Collision entre a = G i 1 (x 0 ) et b = G i 1 (x τ )
20 Fonctions de hachage à deux entrées Code d authentification de message (MAC) Ici, la fonction de hachage agit sur une entrée et une clé secrète. Les fonctions de hachage qui ont deux entrées, d une part le texte à condenser x {0, 1}, d autre part une clé k {0, 1} r, Elles sortent un résumé y {0, 1} t : y = h(x, k). Pour se servir d une telle fonction en tant qu authentificateur de message (MAC), on calcule pour un message x et une clé secrète k la marque h(x, k). Le message transmis est alors (x, h(x, k)). Le correspondant s assure avec la clé secrète partagée, que le fichier est bien intègre.
20 Fonctions de hachage à deux entrées Code d authentification de message (MAC) Ici, la fonction de hachage agit sur une entrée et une clé secrète. Les fonctions de hachage qui ont deux entrées, d une part le texte à condenser x {0, 1}, d autre part une clé k {0, 1} r, Elles sortent un résumé y {0, 1} t : y = h(x, k). Pour se servir d une telle fonction en tant qu authentificateur de message (MAC), on calcule pour un message x et une clé secrète k la marque h(x, k). Le message transmis est alors (x, h(x, k)). Le correspondant s assure avec la clé secrète partagée, que le fichier est bien intègre.
20 Fonctions de hachage à deux entrées Code d authentification de message (MAC) Ici, la fonction de hachage agit sur une entrée et une clé secrète. Les fonctions de hachage qui ont deux entrées, d une part le texte à condenser x {0, 1}, d autre part une clé k {0, 1} r, Elles sortent un résumé y {0, 1} t : y = h(x, k). Pour se servir d une telle fonction en tant qu authentificateur de message (MAC), on calcule pour un message x et une clé secrète k la marque h(x, k). Le message transmis est alors (x, h(x, k)). Le correspondant s assure avec la clé secrète partagée, que le fichier est bien intègre.
Les codes d authentification de message (MAC) On peut utiliser des circuits de chiffrement par bloc comme AES, dans le mode CBC: c est le principe de EMAC; CBC-MAC Le message x est découpé en blocs x = x 1 x 2... x r de taille t. Le dernier bloc, s il n est pas de la bonne taille, est terminé par des zéros. On prendra pour bloc initial c 0 = 0. On calcule alors successivement : c 1 = e k (c 0 x 1 ), c 2 = e k (c 1 x 2 ),... c r = e k (c r 1 x r ), La marque à joindre au message est c r.
Bart Preneel In spite of the popularity of cryptographic hash functions, very few theoretical results are known in this area; Collision resistance seems to be a condition that is particularly hard to analyze. Some open problems are whether it is possible to construct collision resistant hash functions based on weaker assumptions, and whether any theory can be developed to support the current constructions. In the area of practical constructions, there is a need for more efficient hash functions, the security of which is better understood. For hash functions based on block ciphers, the main problem seems to be the assumptions on the block cipher.
Historique des fonction de hachage Depuis quelques années un certain nombre de fonctions de hachage ont été cassées car on a trouvé des collisions. SHA2, qui regroupe SHA224, SHA256, SHA384,SHA512, n est pas (encore) touchée. Le NIST qui propose ces fonctions dans son standard de fonctions de hachage, a ouvert un appel d offre international, ainsi qu il avait fait pour AES, pour un futur standard SHA3 qu il espère mettre en place en 2012. 23