# Chiffrement par bloc

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. 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 chiffrement par bloc :
* Data Encryption Standard (DES), l'ancêtre conçu dans les années 1970
* Advanced Encryption Standard (AES), ou algorithme Rijndael (terme construit à partir d'une partie du nom de chacun de ses créateurs belges, Vincent Rijmen et Joan Daemen)
* Blowfish, Serpent et Twofish, sont des alternatives à AES
En 1997, la sécurité du DES n'était plus garantie face à une recherche exhaustive de la clé désormais envisageable et le chiffrement Triple DES était jugé trop lent. C'est alors que le National Institute of Standard and Technology (NIST) américain - une agence du département du commerce des Etats-Unis - lanca un processus de standardisation appelé Advanced Encryption Standard process pour concevoir un nouvel algorithme de chiffrement par bloc. Pas moins de 16 équipes de cryptologues du monde entier y participèrent. En 2000, c'est l'équipe belge qui l'emporta et vit son algorithme remplacer le DES. La version de Rijndael standardisée par le NIST, appelé chiffrement AES, est un chiffrement par bloc de 128 bits de type réseau de substitutions-permutations utilisant des clés de 128, 192 ou 256 bits.
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éfinition

Un chiffrement par blocs se compose de deux algorithmes appariés, l'un pour le chiffrement, $E$, et l'autre pour le déchiffrement, $D$. Les deux algorithmes acceptent deux entrées : un bloc d'entrée de taille $n$ bits et une clé de taille $k$ bits ; et tous deux donnent un bloc de sortie de $n$ bits. L'algorithme de déchiffrement $D$ est défini comme étant la fonction inverse du chiffrement, c'est-à-dire $D$ = $E$$^{-1}$. Plus formellement, un chiffrement par bloc est spécifié par une fonction de chiffrement
    $E_{K}(P):=E(K,P):\{0,1\}^{k}\times \{0,1\}^{n}\rightarrow \{0,1\}^{n},$
qui prend en entrée une clé $K$ de longueur binaire $k$, appelée taille de la clé, et une chaîne de bits $P$ de longueur $n$, appelée "taille du bloc", et renvoie une chaîne $C$ de bits $n$. $P$ est appelée texte en clair, et $C$ est appelée texte chiffré. Pour chaque $K$, la fonction $E$$_{K{\displaystyleK}}$($P$) doit être une cartographie inversible sur {0,1}$^{n{\displaystylen}}$. L'inverse pour $E$ est défini comme une fonction
    $E_{K}^{-1}(C):=D_{K}(C)=D(K,C):\{0,1\}^{k}\times \{0,1\}^{n}\rightarrow \{0,1\}^{n},$
en prenant une clé $K$ et un texte chiffré $C$ pour renvoyer une valeur en clair $P$, de sorte que
    $\forall K:D_{K}(E_{K}(P))=P.$
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échiffrement est similaire : l'algorithme de déchiffrement 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.
Pour chaque clé K, E$_K$ est une permutation bijective sur l'ensemble des blocs d'entrée. Chaque touche sélectionne une permutation dans l'ensemble des $(2^{n})!$ permutations possibles.

## Histoire

La conception moderne des chiffrements par blocs est basée sur le concept d'un chiffrement de produit itéré. Dans sa publication phare de 1949, Communication Theory of Secrecy Systems, Claude Shannon a analysé les chiffrements de produits et les a suggérés comme moyen d'améliorer efficacement la sécurité en combinant des opérations simples telles que les substitutions et les permutations. Les chiffrements de produits itérés effectuent un chiffrement en plusieurs cycles, chacun utilisant une sous-clé différente dérivée de la clé d'origine. Une implémentation généralisée de tels chiffrements, nommée réseau Feistel d'après Horst Feistel, est notamment implémentée dans le chiffrement DES. De nombreuses autres réalisations de chiffrements par blocs, telles que l'AES, sont classées comme réseaux de substitution-permutation. Beaucoup d'autres réalisations de chiffrements par blocs telles que l'AES, sont classées comme réseau de substitution-permutation.
La racine de tous les formats de blocs cryptographiques utilisés dans les normes PCI DSS (Norme de sécurité de l'industrie des cartes de paiement) et ANSI (American National Standards Institute) réside dans le bloc de clé Atalla (AKB), qui était une innovation clé de l'Atalla Box, le premier HSM (Hardware Security Module en anglais, ou, module de sécurité matériel). Il a été développé en 1972 par Mohamed M. Atalla, fondateur d'Atalla Corporation (maintenant Utimaco Atalla), et publié en 1973. L'AKB était un bloc de clés, qui est nécessaire pour échanger en toute sécurité des clés symétriques ou des codes PIN avec d'autres acteurs du secteur bancaire. Cet échange sécurisé est effectué au format AKB.L'Atalla Box protégeait plus de 90 % de tous les réseaux de distributeurs automatiques de billets en service en 1998et les produits Atalla sécurisaient toujours la majorité des transactions de guichets automatiques dans le monde en 2014.
La publication du chiffrement DES par le United States National Bureau of Standards (devenu par la suite le National Institute of Standards and Technology, NIST) en 1977 a été fondamentale dans la compréhension publique de la conception moderne du chiffrement par blocs. Il a également influencé le développement académique des attaques cryptanalytiques. La cryptanalyse différentielle et linéaire est née d'études sur la conception du DES. Depuis 2016, il existe une palette de techniques d'attaque contre lesquelles un chiffrement par bloc doit être sécurisé, en plus d'être robuste contre l'attaque par force brute.

## Mode d'opération

Dans le cas le plus simple, l' Electronic Code Book (ECB), ou chiffrement à dictionnaire de codes, un message est d'abord divisé en blocs distincts de la taille du bloc du chiffrement (éventuellement en étendant le dernier bloc avec des bits de remplissage ou padding en anglais), puis chaque bloc est chiffré et déchiffré indépendamment. Cependant, une méthode aussi naïve n'est généralement pas sûre car des blocs de texte en clair égaux généreront toujours des blocs de texte chiffré égaux (pour la même clé), de sorte que les modèles dans le message en texte clair deviennent évidents dans la sortie de texte chiffré.
Pour surmonter cette limitation, plusieurs modes de fonctionnement dits 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 basée sur 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 populaire de Cipher Block Chaining (CBC), ou chiffrement à enchaînement des blocs, pour que le chiffrement soit sécurisé, le vecteur d'initialisation transmis avec le message en texte clair doit être une valeur aléatoire ou pseudo-aléatoire, qui est ajoutée à l'aide d'un OU exclusif au premier bloc de texte clair avant d'être chiffré. Le bloc de texte chiffré résultant est ensuite utilisé comme nouveau vecteur d'initialisation pour le bloc de texte clair suivant.
Dans le mode Cipher Feedback Block (CFB), ou chiffrement à rétroaction, le vecteur d'initialisation est d'abord chiffré, puis ajouté au bloc de texte clair.
Dans le mode Output Feedback Block (OFB), ou chiffrement à rétroaction de sortie, on chiffre à plusieurs reprises le vecteur d'initialisation pour créer un flux de clés pour l'émulation d'un chiffrement de flux synchrone.
Dans le mode CounTeR (CTR), ou chiffrement basé sur un compteur, on crée de la même manière un flux de clés, qui a l'avantage de n'avoir besoin que de 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 chiffrant ce compteur pour chaque bloc.
Du point de vue de la théorie de la sécurité, les modes d'opération doivent fournir ce que l'on appelle la sécurité sémantique. De manière informelle, cela signifie qu'étant donné un texte chiffré sous une clé inconnue, on ne peut pratiquement pas dériver d'informations 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 discutés ci-dessus, à l'exception du mode Electronic Code Book (ECB), fournissent cette propriété dans le cadre d'attaques dites à textes clairs choisis : l'attaquant peut obtenir le chiffrement de textes clairs de son choix ; autrement dit il peut toujours choisir un texte de son choix et le chiffrer lui-même.