# Mode d'opération (cryptographie)

En cryptographie, un mode de fonctionnement de chiffrement par bloc est un algorithme qui utilise un chiffrement par bloc pour assurer la sécurité des informations telles que la confidentialité ou l' authenticité.
Un chiffrement par bloc en lui-même ne convient que pour la transformation cryptographique sécurisée (chiffrement ou déchiffrement) d'un groupe de bits de longueur fixe appelé bloc. Un mode d'opération décrit comment appliquer de manière répétée l'opération monobloc d'un chiffrement pour transformer en toute sécurité des quantités de données supérieures à un bloc$^,$$^,$.
La plupart des modes nécessitent une séquence binaire unique, souvent appelée vecteur d'initialisation (IV), pour chaque opération de chiffrement. L'IV doit être non répétitif et, pour certains modes, aléatoire également. Le vecteur d'initialisation est utilisé pour garantir que des textes chiffrés distincts sont produits même lorsque le même texte en clair est chiffré plusieurs fois indépendamment avec la même clé.
Les chiffrements par blocs peuvent être capables de fonctionner sur plus d'une taille de bloc, mais pendant la transformation, la taille du bloc est toujours fixe. Les modes de chiffrement par bloc fonctionnent sur des blocs entiers et nécessitent que la dernière partie des données soit remplie pour former un bloc complet s'il est inférieur à la taille de bloc actuelle. Il existe cependant des modes qui ne nécessitent pas de remplissage car ils utilisent efficacement un chiffrement par bloc comme chiffrement de flux.
Historiquement, les modes de chiffrement ont été largement étudiés en ce qui concerne leurs propriétés de propagation des erreurs dans divers scénarios de modification des données. Le développement ultérieur a considéré la protection de l'intégrité comme un objectif cryptographique entièrement distinct. Certains modes de fonctionnement modernes combinent la confidentialité et l' authenticité de manière efficace, et sont connus sous le nom de modes de chiffrement authentifié.

## Histoire et normalisation

Les premiers modes de fonctionnement, ECB, CBC, OFB et CFB (voir ci-dessous pour tous), remontent à 1981 et ont été spécifiés dans FIPS 81, Modes d'opération DES.
En 2001, le National Institute of Standards and Technology (NIST) a révisé sa liste de modes de fonctionnement approuvés en incluant AES comme chiffrement par bloc et en ajoutant le mode CTR dans SP800-38A, Recommendation for Block Cipher Modes of Operation.
Enfin, en janvier 2010, le NIST a ajouté XTS-AES dans SP800-38E, Recommendation for Block Cipher Modes of Operation: The XTS-AES Mode for Confidentiality on Storage Devices.
Il existe d'autres modes de confidentialité qui n'ont pas été approuvés par le NIST. Par exemple, CTS est un mode de vol de texte chiffré et disponible dans de nombreuses bibliothèques cryptographiques populaires.
Les modes de chiffrement par bloc ECB, CBC, OFB, CFB, CTR et XTS assurent la confidentialité, mais ils ne protègent pas contre les modifications accidentelles ou les falsifications malveillantes. La modification ou la falsification peut être détectée à l'aide d'un code MAC (Message Authentication Code en anglais, ou, code d'authentification de message) distinct, tel que CBC-MAC, ou d'une signature numérique.
La communauté cryptographique a reconnu la nécessité de garanties d'intégrité dédiées et le NIST a répondu avec HMAC, CMAC et GMAC. HMAC a été approuvé en 2002 en tant que FIPS 198, Le Keyed-Hash Message Authentication Code (HMAC), CMAC a été publié en 2005 sous SP800-38B, Recommendation for Block Cipher Modes of Operation: The CMAC Mode for Authentication, et GMAC a été formalisé en 2007 sous SP800-38D, Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC.
La communauté cryptographique a observé que la composition (combinaison) d'un mode de confidentialité avec un mode d'authenticité pouvait être difficile et sujette aux erreurs. Ils ont donc commencé à fournir des modes qui combinaient confidentialité et intégrité des données en une seule primitive cryptographique (un algorithme de chiffrement). Ces modes combinés sont appelés chiffrement authentifié, AE ou « authenc ». Des exemples de modes AE sont CCM (SP800-38C), GCM (SP800-38D), CWC, EAX, IAPM, et OCB.
Les modes de fonctionnement sont définis par un certain nombre d'organismes de normalisation nationaux et internationaux reconnus. Les organismes de normalisation notables comprennent le NIST, l'ISO (avec ISO/IEC 10116), l'IEC, l'IEEE, l'ANSI et l'IETF.

## Vecteur d'initialisation (IV)

Un vecteur d'initialisation (IV), ou variable de départ (SV), est un bloc de bits utilisé par plusieurs modes pour randomiser le chiffrement et donc pour produire des textes chiffrés distincts même si le même texte en clair est chiffré plusieurs fois, sans avoir besoin d'un processus de ressaisie plus lent.
Un vecteur d'initialisation a des exigences de sécurité différentes de celles d'une clé, de sorte que l'IV n'a généralement pas besoin d'être secret. Pour la plupart des modes de chiffrement par bloc, il est important qu'un vecteur d'initialisation ne soit jamais réutilisé sous la même clé, c'est-à-dire qu'il doit s'agir d'un nonce cryptographique. De nombreux modes de chiffrement par blocs ont des exigences plus fortes, telles que le IV doit être aléatoire ou pseudo-aléatoire. Certains chiffrements par blocs ont des problèmes particuliers avec certains vecteurs d'initialisation, tels que tous les IV zéro ne générant aucun chiffrement (pour certaines clés).
Il est recommandé d'examiner les exigences IV pertinentes pour le mode de chiffrement par bloc particulier dans les spécifications pertinentes, par exemple SP800-38A.
Pour CBC et CFB, la réutilisation d'un IV divulgue certaines informations sur le premier bloc de texte en clair et sur tout préfixe commun partagé par les deux messages.
Pour OFB et CTR, la réutilisation d'un IV entraîne la réutilisation du flux binaire clé, ce qui brise la sécurité. Cela peut être vu parce que les deux modes créent effectivement un flux binaire XORé avec le texte en clair, et ce flux de bits dépend uniquement de la clé et de l'IV.
En mode CBC, l'IV doit être imprévisible (aléatoire ou pseudo-aléatoire) au moment du chiffrement; en particulier, la pratique (auparavant) courante consistant à réutiliser le dernier bloc de texte chiffré d'un message en tant que IV pour le message suivant n'est pas sécurisée (par exemple, cette méthode a été utilisée par SSL 2.0). Si un attaquant connaît le IV (ou le bloc précédent de texte chiffré) avant que le texte en clair suivant ne soit spécifié, il peut vérifier sa supposition sur le texte en clair d'un bloc qui a été chiffré avec la même clé auparavant (c'est ce qu'on appelle l'attaque TLS CBC IV).
Pour certaines clés, un vecteur d'initialisation tout zéro peut générer des modes de chiffrement par bloc (CFB-8, OFB-8) pour bloquer l'état interne à zéro. Pour CFB-8, un IV tout zéro et un texte clair tout nul, provoque 1/256 des clés pour ne générer aucun chiffrage, le texte en clair est renvoyé sous forme de texte chiffré. Pour OFB-8, l'utilisation de tous les vecteurs d'initialisation zéro ne générera aucun chiffrement pour 1/256 des clés. Le chiffrement OFB-8 renvoie le texte brut non chiffré pour les clés affectées.
Certains modes (tels que AES-SIV et AES-GCM-SIV) sont conçus pour être plus résistants à l'utilisation abusive, c'est-à-dire résilients aux scénarios dans lesquels la génération aléatoire est défectueuse ou sous le contrôle de l'attaquant.
* Les vecteurs d'initialisation synthétiques (SIV) synthétisent un IV interne en exécutant une construction de fonction pseudo-aléatoire (PRF) appelée S2V sur l'entrée (données supplémentaires et texte en clair), empêchant toute donnée externe de contrôler directement l'IV. Les nonces externes / IV peuvent être introduits dans S2V en tant que champs de données supplémentaires.
* Les AES-GCM-SIV synthétisent un IV interne en exécutant le mode d'authentification POLYVAL Galois sur l'entrée (données supplémentaires et texte en clair), suivi d'une opération AES.

## Remplissage

Un chiffrement par bloc fonctionne sur des unités d'une taille fixe (appelée taille de bloc), mais les messages sont de différentes longueurs. Ainsi, certains modes (à savoir ECB et CBC) nécessitent que le bloc final soit rempli avant le chiffrement. Plusieurs systèmes de remplissage (padding en anglais) existent. Le plus simple est d'ajouter des octets nuls au texte en clair pour amener sa longueur à un multiple de la taille du bloc, mais il faut veiller à ce que la longueur d'origine du texte en clair puisse être récupérée ; ceci est trivial, par exemple, si le texte en clair est une chaîne en langage C qui ne contient aucun octet nul sauf à la fin. Un peu plus complexe est la méthode DES originale, qui consiste à ajouter un seul bit, suivi de suffisamment de bits zéro pour remplir le bloc ; si le message se termine sur une limite de bloc, un bloc de remplissage entier sera ajouté.
Les plus sophistiqués sont les schémas spécifiques à CBC tels que le vol de texte chiffré ou la terminaison de bloc résiduel, qui ne provoquent aucun texte chiffré supplémentaire, au détriment d'une complexité supplémentaire. Schneier et Ferguson suggèrent deux possibilités, toutes deux simples: ajouter un octet avec la valeur 128 (hexadécimal 80), suivi d'autant d'octets zéro que nécessaire pour remplir le dernier bloc, ou remplir le dernier bloc avec n octets tous avec la valeur n.
Les modes CFB, OFB et CTR ne nécessitent pas de mesures spéciales pour gérer les messages dont les longueurs ne sont pas des multiples de la taille du bloc, car les modes fonctionnent en XORant le texte en clair avec la sortie du chiffrement par bloc. Le dernier bloc partiel de texte clair est XORé avec les premiers octets du dernier bloc de flux de clés, produisant un bloc de texte chiffré final de la même taille que le bloc de texte clair partiel final. Cette caractéristique des chiffrements de flux les rend adaptés aux applications qui nécessitent que les données chiffrées en texte chiffré aient la même taille que les données en texte clair d'origine, et aux applications qui transmettent des données sous forme de streaming où il n'est pas pratique d'ajouter des octets de remplissage.

## Modes communs
### AEAD : chiffrement authentifié avec modes de données additionnelles

Un certain nombre de modes d'opération ont été conçus pour combiner secret et authentification dans une seule primitive cryptographique. Des exemples de tels modes sont le chaînage étendu de blocs de chiffrement (XCBC), le chaînage de blocs de chiffrement conscient de l'intégrité (IACBC), le mode parallélisable sensible à l'intégrité (IAPM), OCB, EAX, CWC, CCM et GCM . Les modes de chiffrement authentifiés sont classés en modes monopasse ou en modes double passe. Certains algorithmes de chiffrement authentifiés en un seul passage, tels que le mode OCB, sont grevés de brevets, tandis que d'autres ont été spécifiquement conçus et libérés de manière à éviter une telle charge.
En outre, certains modes permettent également l'authentification de données associées non chiffrées, et ceux-ci sont appelés schémas AEAD (authenticated encryption with associated data). Par exemple, le mode EAX est un schéma AEAD à double passage tandis que le mode OCB est un mode monopasse.

#### Galois/counter (GCM)

Le mode Galois/compteur ( GCM ) combine le mode de chiffrement de compteur bien connu avec le nouveau mode d'authentification Galois. La caractéristique clé est la facilité de calcul parallèle de la multiplication de champ de Galois utilisée pour l'authentification. Cette fonctionnalité permet un débit plus élevé que les algorithmes de chiffrement.
GCM est défini pour les chiffrements par blocs avec une taille de bloc de 128 bits. Le code d'authentification de message Galois (GMAC) est une variante d'authentification uniquement du GCM qui peut former un code d'authentification de message incrémentiel. GCM et GMAC peuvent tous deux accepter des vecteurs d'initialisation de longueur arbitraire. GCM peut tirer pleinement parti du traitement parallèle et la mise en œuvre de GCM peut utiliser efficacement un pipeline d'instructions ou un pipeline matériel. Le mode d'exploitation CBC entraîne des blocages de pipelines qui nuisent à son efficacité et à son rendement.
Comme dans CTR, les blocs sont numérotés séquentiellement, puis ce numéro de bloc est combiné avec un IV et chiffré avec un chiffrement de bloc E, généralement AES. Le résultat de ce chiffrement est ensuite XORé avec le texte en clair pour produire le texte chiffré. Comme tous les modes de compteur, il s'agit essentiellement d'un chiffrement de flux, et il est donc essentiel qu'un IV différent soit utilisé pour chaque flux chiffré.
Les blocs de texte chiffré sont considérés comme des coefficients d'un polynôme qui est ensuite évalué à un point dépendant de la clé H, en utilisant l'arithmétique des corps finis. Le résultat est ensuite chiffré, produisant une balise d'authentification qui peut être utilisée pour vérifier l'intégrité des données. Le texte chiffré contient ensuite l'IV, le texte chiffré et la balise d'authentification.

#### Compteur avec code d'authentification de message de chaînage de blocs de chiffrement (CCM)

Compteur avec code d'authentification de message de chaînage de blocs de chiffrement (compteur avec CBC-MAC ; CCM) est un algorithme de chiffrement authentifié conçu pour assurer à la fois l'authentification et la confidentialité. Le mode CCM n'est défini que pour les chiffrements par blocs d'une longueur de bloc de 128 bits$^,$.

#### Vecteur d'initialisation synthétique (SIV)

Le vecteur d'initialisation synthétique (SIV) est un mode de chiffrement par blocs résistant à l'utilisation abusive de nonce . Le SIV synthétise un vecteur d'initialisation (IV) interne en utilisant la fonction pseudo-aléatoire S2V. S2V est une fonction implémentant une clé de hachage basée sur CMAC.
L'entrée de la fonction S2V est:
* des données authentifiées supplémentaires (zéro, un ou plusieurs champs AAD sont pris en charge)
* le texte en clair
* la clé d'authentification (K$_1$).
SIV chiffre le texte en clair à l'aide de : AES-CTR, du résultat renvoyé par la fonction S2V, la clé de chiffrement (K$_2$).
SIV peut également prendre en charge le chiffrement authentifié externe basé sur un nonce , auquel cas il utilise l'un des champs de données authentifiés supplémentaires.
RFC5297 spécifie qu'à des fins d'interopérabilité, c'est le dernier champ de données authentifiées supplémentaires qui doit être utilisé comme nonce externe. En raison de l'utilisation de deux clés (la clé d'authentification K$_1$ et la clé de chiffrement K$_2$), les schémas de dénomination pour les variantes SIV AEAD peuvent entraîner une certaine confusion ; par exemple, AEAD_AES_SIV_CMAC_256 fait référence à AES-SIV avec deux clés AES-128 et non AES-256.

#### AES-GCM-SIV

AES-GCM-SIV est un mode de fonctionnement de la norme Advanced Encryption Standard qui offre des performances similaires au mode Galois/compteur (GCM) ainsi qu'une résistance à une mauvaise utilisation en cas de réutilisation d'un nonce cryptographique. La construction est définie dans la RFC 8452.
AES-GCM-SIV synthétise l'IV interne. Il dérive un hachage des données authentifiées supplémentaires et du texte en clair à l'aide de la fonction de hachage POLYVAL Galois. Le hachage est ensuite chiffré par une clé AES et utilisé comme balise d'authentification et vecteur d'initialisation AES-CTR.
AES-GCM-SIV est une amélioration par rapport à l'algorithme très similaire GCM-SIV, avec quelques très petits changements (par exemple, la façon dont AES-CTR est initialisé), mais qui apporte des avantages pratiques à sa sécurité « Cet ajout permet de chiffrer jusqu'à 2$^{50}$ messages avec la même clé, par rapport à la limitation significative de seulement 2$^{32}$ messages qui étaient autorisés avec GCM-SIV. »

### Modes de confidentialité uniquement
#### « Electronic Codebook » (ECB): dictionnaire de codes

Il s'agit du mode le plus simple. Le message à chiffrer est divisé en plusieurs blocs qui sont chiffrés indépendamment les uns après les autres avec la même clé secrète. Le gros défaut de cette méthode est que deux blocs avec le même contenu seront chiffrés de la même manière, on peut donc tirer des informations à partir du texte chiffré en cherchant les séquences identiques. On obtient dès lors un « dictionnaire de codes » avec les correspondances entre le clair et le chiffré d'où le terme codebook.
Ce mode est pour ces raisons fortement déconseillé dans toute application cryptographique. Le seul avantage qu'il peut procurer est un accès rapide à une zone quelconque du texte chiffré et la possibilité de déchiffrer une partie seulement des données. Mais un mode bien plus sûr basé sur un compteur permet également ces accès aléatoires et les déchiffrements partiels.

##### Exemple sur du texte

On chiffre les deux messages suivants avec un mode ECB et un algorithme de chiffrement par bloc qui travaille avec un bloc de deux caractères à la fois. Ce type de fichier pourrait correspondre à une liste de salaires.
Le chiffrement sur le premier message donne ceci :
Et sur le deuxième message, on obtient :
On constate que des paires de caractères apparaissent dans les deux messages chiffrés, il en va de même dans les messages en clair :
En partant du principe que John connait son salaire, il pourrait deviner le salaire de Jack car la séquence "C9" correspond à "50" et "IO" à "00". John en déduit que le salaire de Jack, chiffré en « C9IOIO » correspond à « 500000 ».

##### Exemple avec une image

La vulnérabilité est encore plus flagrante sur une image. En effet, les images sont constituées de nombreuses redondances qui font que des blocs sont chiffrés de la même manière en mode ECB. Dans l'exemple ci-dessous, le chiffrement en ECB est réalisé sur des blocs de 4 pixels. On distingue très nettement les formes du Cervin ainsi que les séparations entre les blocs. Avec un mode plus sûr comme CBC ou CTR, l'image a un contenu aléatoire dont on ne peut tirer aucune information a priori. Cela ne veut toutefois pas dire que le chiffrement est sûr, des failles importantes peuvent également apparaître dans des schémas qui produisent des sorties aléatoires mais elles ne sont pas nécessairement liées au mode d'opération.
* Image originale
* Chiffrement en mode ECB
* Chiffrement avec un mode sûr (autre que ECB)

##### Autres défauts de ECB

ECB a d'autres effets négatifs sur l'intégrité et la protection des données. Ce mode est sensible à des « attaques par répétition » : elles consistent à réinjecter dans le système des données identiques à celles interceptées auparavant. Le but est de modifier le comportement du système ou répéter des actions. Par exemple, le jeu vidéo Phantasy Star Online: Blue Burst utilisait le chiffrement Blowfish en mode ECB. Blowfish est un algorithme robuste mais le mode ECB a été la porte ouverte pour diverses tricheries avec par exemple des joueurs qui envoyaient des paquets chiffrés « ennemi vaincu » à plusieurs reprises. Comme le chiffrement était identique pour tous les paquets de ce type, le serveur déclenchait en conséquence l'attribution de points illégitimes.
Un autre mode aurait pu contrer cela en produisant un chiffrement différent pour chaque paquet. Une modification du flot de données avec un meilleur mode entraîne alors un déchiffrement erroné des données suivantes, une détection de corruption des données ou de fraude est ainsi possible.

#### « Cipher Block Chaining » (CBC): enchaînement de blocs

Ce mode consiste à chiffrer le i-ème bloc préalablement combiné par un OU exclusif (XOR) avec le chiffré du bloc précédent et d'un vecteur d'initialisation. Il s'agit d'un bloc de données aléatoires qui permet de commencer le chiffrement du premier bloc et qui fournit ainsi une forme de hasard indépendant du document à chiffrer. Il n'a pas besoin d'être lui-même chiffré lors de la transmission, mais il ne doit jamais être réemployé avec la même clé.

##### Défauts de CBC

Un des points négatifs de CBC est qu'il ne peut pas être parallélisé étant donné que le bloc courant nécessite que le précédent soit chiffré. Il est donc séquentiel.
Selon l'implémentation qui est faite, le mode CBC peut être vulnérable à la méthode "Padding Oracle" qui permet de retrouver les blocs en clair. Le mode CBC étant un mode de chiffrement par bloc, il est nécessaire d'ajouter du "padding" à la fin de chaque bloc non rempli. Avec une compréhension du fonctionnement du "padding" (PKCS7) et en utilisant les mathématiques modernes, il est possible de retrouver l'ensemble du message en clair.

#### « CounTeR » (CTR): chiffrement basé sur compteur

Dans le mode CTR (de l'anglais Counter), c'est un vecteur d'initialisation concaténé avec un compteur (généralement écrit en binaire) qui est chiffré et qui produit un bloc pseudo-aléatoire qui servira à masquer les blocs de message clair par un ou exclusif (XOR) bit-bit comme dans le chiffrement de Vernam par masque jetable. La suite de bits utilisée pour masquer le message est appelée suite chiffrante. Ce mode est représenté sur la figure ci-dessous (notez bien que le Vecteur d'initialisation - appelé Clé sur le schéma - et le Compteur sont à concaténer). Comme dans le mode CBC, le vecteur d'initialisation est ajouté au chiffré et ne doit jamais être réemployé avec la même clé.
Ce mode combine de nombreux avantages car il est pré-calculable. De plus, il permet un accès aléatoire aux données, est parallélisable et n'utilise que la fonction de chiffrement. Le compteur utilisé peut être une suite pseudo-aléatoire qu'il sera facile de retrouver à partir du vecteur d'initialisation.

#### « Cipher Feedback Block » (CFB) : chiffrement à rétroaction

Le mode de chiffrement CFB est un chiffrement par bloc et une combinaison des modes CBC et CTR qui consiste à masquer le i-ème bloc du texte clair par le chiffrement du bloc précédent du texte chiffré.
Dans ce mode, le flux de clé est obtenu en chiffrant le précédent bloc chiffré. Son grand intérêt est qu'il ne nécessite que la fonction de chiffrement, ce qui le rend moins cher à câbler ou programmer pour les algorithmes ayant une fonction de chiffrement différente de la fonction de déchiffrement (exemple: AES).

#### « Output Feedback » (OFB): chiffrement à rétroaction de sortie

Dans ce mode, le flux de clé est obtenu en chiffrant le précédent flux de clé.
C'est un mode de chiffrement par bloc qui possède les mêmes avantages que CFB. De plus, il est possible de le pré-calculer en chiffrant successivement le vecteur d'initialisation. Il n'est donc sûr que si la fonction de chiffrement alliée à la clé forment une bonne suite pseudo-aléatoire.
Ce mode est très fragile vis-à-vis d'une attaque au clair. En effet, à l'unique condition de connaître le vecteur d'initialisation d'un message chiffré et de connaitre le clair d'un autre message chiffré, l'attaquant peut reconstituer aisément la chaîne ayant chiffré le premier message et donc déchiffrer ce dernier. Cette fragilité se retrouve dans le mode CFB, à ceci près que seul le premier bloc du message peut être reconstitué de cette manière, l'attaquant a besoin de déchiffrer le message bloc à bloc, en fournissant à chaque fois l'ensemble des blocs précédents, de manière à récupérer la chaîne ayant chiffré le bloc suivant (attaque au clair choisi).

#### « CipherText Stealing » (CTS): chiffrement avec vol de texte

Dans ce mode, applicable à un chiffrement par blocs (ECB, CBC, etc.), les deux derniers blocs sont partiellement combinés de façon à obtenir un message de même taille. Ici, exemple de CTS opérant sur un chiffrement en mode CBC
Les deux derniers blocs sont échangés et combinés en partie, ce qui nécessitera de les obtenir tous les deux pour en déchiffrer un. CTS n'est pas un mode de chiffrement par flot, mais permet d'éviter l'utilisation de bourrage dans les chiffrements par blocs, et donne une taille de message chiffré égale à la taille du message clair. Il est très utilisé dans les protocoles ou formats ne supportant pas une taille quelconque. Sa contrepartie, opérant sur un déchiffrement en mode CBC:

#### « Xor-Encrypt-Xor » (XEX): OU exclusif-Chiffrement-OU exclusif

Le chiffrement OUX est un chiffrement bit à bit qui utilise les propriétés mathématiques de la fonction OU exclusif notamment cette égalité $(a\oplus b)\oplus b=a$ ; $a$ sera le texte à chiffrer et $b$ sera la clé de chiffrement.
Voici un exemple illustré avec la lettre F chiffrée avec la clé V :
F correspond au code ASCII 70 représenté par 01110000 en binaire.
V correspond au code ASCII 86 représenté par 10000110 en binaire.
| Texte en clair (F en ASCII) | clé (V en ASCII) | Texte chiffré |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 0 | 1 |
| 1 | 0 | 1 |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
| 0 | 1 | 1 |

#### Liskov, Rivest, Wagner (LRW)

LRW est utilisé par les logiciels FreeOTFE, Bestcrypt et dm-crypt.

#### Xex-Tcb-Cts (XTS)

Dans ce mode, la clé est séparée en deux clés de taille égale, de telle sorte que : clé = clé 1 | clé 2.
La lettre i représente le numéro de secteur :
XTS est utilisé par CoreStorage, FreeOTFE, Bestcrypt, dm-crypt et Truecrypt.

## Propagation d'erreur

Aucun des modes ci-dessus ne protège l’intégrité du message. Il est généralement bien compris que lorsque des données sont chiffrées, il est presque toujours essentiel de fournir un tel mécanisme, car en son absence, les risques sont grands. Pour ce besoin, on peut utiliser un code d’authentification (HMAC) qui protègera le message chiffré et le vecteur d’initialisation.
Avant que ce sentiment ne soit largement partagé, il était fréquent de discuter des caractéristiques de « propagation d’erreur ». Il pouvait être observé, par exemple, qu’un bloc d’erreur dans le message chiffré engendrait un bloc d’erreur lors du déchiffrement en mode ECB, alors qu’en mode CBC, la même erreur affectait deux blocs.
Quoi qu’il en soit, quand une réelle protection d’intégrité est mise en œuvre, de telles erreurs provoqueront (avec une grande probabilité) le rejet du message complet. S'il est souhaitable de tolérer des erreurs aléatoires, le message chiffré devrait se voir appliquer un code de correction d’erreur avant d’être transmis.
À défaut, des modes d’opération sont conçus spécifiquement pour combiner sécurité et authentification, tels que, par exemple XCBC, IACBC, IAPM, OCB, EAX, CWC ou CCM.