Chiffrement par bloc

algorithme de chiffrement qui marche avec des blocs d'une taille fixe

Le chiffrement par bloc (en anglais block cipher) est une des deux grandes catégories de chiffrements modernes en cryptographie symétrique, l'autre étant le chiffrement par flot. La principale différence vient du découpage des données en blocs de taille généralement fixe. La taille de bloc est comprise entre 32 et 512 bits, dans le milieu des années 1990 le standard était de 64 bits mais depuis 2000 et le concours AES le standard est de 128 bits. Les blocs sont ensuite chiffrés les uns après les autres. Il est possible de transformer un chiffrement de bloc en un chiffrement par flot en utilisant un mode d'opération comme CTR (des blocs formant un compteur sont chiffrés pour former une séquence pseudo-aléatoire) ou CFB (on chaîne le chiffrement en effectuant un XOR entre les résultats successifs).

Une liste non exhaustive de chiffrements par bloc :

  • DES, l'ancêtre conçu dans les années 1970, a été passablement étudié
  • AES, le remplaçant de DES
  • Blowfish, Serpent et Twofish, des alternatives à AES

Il y en a encore bien d'autres qui sont adaptés à des besoins particuliers. Certains consomment plus de mémoire ou sont plus gourmands en puissance de calcul. Un chiffrement par bloc peut également être utilisé comme une fonction de hachage, c'est-à-dire une fonction à sens unique. Une variante de DES est employée pour le système de mots de passe dans Unix. Une chaîne contenant uniquement des zéros est chiffrée avec une clé correspondant au mot de passe (une composante aléatoire appelée "sel" est encore intégrée à l'algorithme). Ce chiffrement est itératif et se fait 25 fois avant d'obtenir le résultat final.

DéfinitionModifier

Un chiffrement par blocs se compose de deux algorithmes appariés, l'un pour le chiffrement,  , et l'autre pour le déchiffrement,  [1]. Les deux algorithmes acceptent deux entrées : un bloc d'entrée de taille   bits et une clé de taille   bits ; et tous deux donnent un bloc de sortie de   bits. L'algorithme de décryptage   est défini comme étant la fonction inverse du cryptage, c'est-à-dire,   =  -1. Plus formellement, un chiffrement par bloc est spécifié par une fonction de chiffrement

 

qui prend en entrée une clé   de longueur binaire  , appelée taille de la clé, et une chaîne de bits   de longueur  , appelée "taille du bloc", et renvoie une chaîne   de bits  .   est appelée texte en clair, et   est appelée texte chiffré. Pour chaque  , la fonction   ( ) doit être une cartographie inversible sur {0,1} . L'inverse pour   est défini comme une fonction

 

en prenant une clé   et un texte chiffré   pour renvoyer une valeur en clair  , de sorte que

 

Par exemple, un algorithme de chiffrement par bloc peut prendre un bloc de 128 bits de texte en clair comme entrée, et produire un bloc de 128 bits de texte chiffré correspondant. La transformation exacte est contrôlée à l'aide d'une deuxième entrée - la clé secrète. Le décryptage est similaire : l'algorithme de décryptage prend, dans cet exemple, un bloc de 128 bits de texte chiffré avec la clé secrète, et donne le bloc de 128 bits de texte en clair d'origine[2].

Pour chaque clé K, EK est une permutation. (un bijective mapping) sur l'ensemble des blocs d'entrée. Chaque touche sélectionne une permutation dans l'ensemble des   permutations possibles.[3]

Mode d'opérationModifier

Un chiffrement par blocs ne permet de chiffrer qu'un seul bloc de données de la longueur du bloc de chiffrement. Pour un message de longueur variable, les données doivent d'abord être divisées en blocs de chiffres séparés. Dans le cas le plus simple, connu sous le nom de mode "livre de code électronique" (ECB), un message est d'abord divisé en blocs séparés de la taille du bloc de chiffrement (en étendant éventuellement le dernier bloc avec des bits de remplissage), puis chaque bloc est chiffré et déchiffré indépendamment. Cependant, une méthode aussi naïve est généralement peu sûre car des blocs de texte en clair identiques génèrent toujours des blocs de texte chiffré identiques (pour la même clé), de sorte que les motifs du message en texte en clair deviennent évidents dans la sortie du texte chiffré.

Pour surmonter cette limitation, plusieurs modes de fonctionnement de chiffrement par blocs ont été conçus et spécifiés dans des recommandations nationales telles que NIST 800-38A et BSI TR-02102 et des normes internationales telles que ISO/IEC 10116. Le concept général est d'utiliser la randomisation des données en texte clair sur la base d'une valeur d'entrée supplémentaire, souvent appelée vecteur d'initialisation, pour créer ce que l'on appelle un chiffrement probabiliste. Dans le mode CBC (Cipher Block Chaining), pour que le cryptage soit sûr, le vecteur d'initialisation transmis avec le message en clair doit être une valeur aléatoire ou pseudo-aléatoire, qui est ajoutée de manière exclusive au premier bloc de texte en clair avant qu'il ne soit crypté. Le bloc de texte chiffré qui en résulte est ensuite utilisé comme nouveau vecteur d'initialisation pour le bloc de texte en clair suivant. Dans le mode de retour de chiffrement (CFB), qui émule un chiffrement de flux autosynchronisé, le vecteur d'initialisation est d'abord chiffré puis ajouté au bloc de texte en clair. Le mode de retour de sortie (OFB) crypte de manière répétée le vecteur d'initialisation pour créer un flux de clés pour l'émulation d'un chiffrement à flux synchrone. Le nouveau mode de compteur (CTR) crée de la même manière un flux de clés, mais il a l'avantage de ne nécessiter que des valeurs uniques et non (pseudo-)aléatoires comme vecteurs d'initialisation ; le caractère aléatoire nécessaire est dérivé en interne en utilisant le vecteur d'initialisation comme compteur de blocs et en cryptant ce compteur pour chaque bloc.

Du point de vue de la théorie de la sécurité, les modes de fonctionnement doivent assurer ce que l'on appelle la sécurité sémantique[28]. Officieusement, cela signifie qu'étant donné un certain texte chiffré sous une clé inconnue, on ne peut pratiquement tirer aucune information du texte chiffré (autre que la longueur du message) sur ce que l'on aurait su sans voir le texte chiffré. Il a été démontré que tous les modes examinés ci-dessus, à l'exception du mode BCE, fournissent cette propriété dans le cadre d'attaques dites de texte en clair choisi.

Notes et référencesModifier

  1. Thomas W. Cusick et Pantelimon Stanica, Cryptographic Boolean functions and applications, Academic Press, , 158-159 p. (ISBN 9780123748904, lire en ligne)
  2. D. Chakraborty et F. Rodriguez-Henriquez, Cryptographic Engineering, Springer, (ISBN 9780387718163), « Block Cipher Modes of Operation from a Hardware Implementation Perspective », p. 321
  3. Menezes, van Oorschot et Vanstone 1996, section 7.2.

AnnexesModifier

Articles connexesModifier

Liens externesModifier