Le chiffrement par bloc
Quatre modes de chiffrement par bloc sont utilisés : Electronic CodeBook (ECB), Cipher Block Chaining (CBC),
Cipher FeedBack (CFB) ou Output FeedBack (OFB).
Le cryptage en blocs (block-cipher) est au contraire beaucoup plus utilisé et permet une meilleure sécurité.
Les algorithmes concernés sont également plus connus (DES, AES, Skipjack...); leur nom leur vient du fait
qu'ils s'appliquent à des blocs de données et non à des flux de bits (cf. stream-ciphers). Ces blocs sont
habituellement de 64 bits mais cela dépend entièrement de l'algorithme utilisé et de son implémentation.
De même, la taille de la clé varie suivant l'algorithme et suivant le niveau de sécurité requis; ainsi,
un cryptage de 40 bits (c'est-à-dire utilisant une clé longue de 40 bits) pourra être déclaré faible puisque
aisément cassable. Un cryptage de 56 bits (qui est le standard dans le cas du DES) sera qualifié de moyen
puisque cassable mais nécessitant pas mal de moyens pour être exploitable (vis-à-vis du temps requis et de
la valeur des données). Enfin, un cryptage de 128 bits (valeur standard utilisée par Rijndael alias AES) est
plutôt fort à l'heure actuelle.
Rappelons à cette occasion que la Loi de Moore prévoit le doublement de la puissance de calcul des processeurs
tous les 18 mois (Loi toujours vérifiée de la fin des années 70 à nos jours).
Sans entrer dans les détails, il faut savoir que le cassage de cryptés nécessite
essentiellement des ressources processeur, RAM et éventuellement ROM ou disque dur si le cassage se fait par
précalcul. L'évolution générale est donc extrêmement rapide, sans parler des ordinateurs plus perfectionnés
(scientifiques ou autres), à architectures parallèles, ou distribuées...
Il reste donc relatif de parler de sécurité absolue, en tout cas en ce qui concerne la cryptographie symétrique.
Les quatres modes cités précédement sont plus ou moins indépendants de l'algorithme choisi.
Toutefois, tout les algorithmes ne permettent pas d'utiliser tout les modes possibles.
Pour mieux comprendre, voyons ces modes plus en détails. Pour désigner le processus de cryptage simple
(tel que décrit précédement), on utilisera la notation suivante :
où K désigne la clé utilisée par l'algorithme, E désigne le cryptage en lui-même, M (ou m, mi) désigne
le message en clair (c'est-à-dire un bloc) et C (ou c, ci) le chiffré résultant.
- Le mode Electronic CodeBook (ECB) est le plus simple des modes et s'applique aux block ciphers.
Il revient à crypter un bloc indépendamment des autres; cela permet entre autre de crypter suivant un
ordre aléatoire (bases de données, etc...) mais en contre-partie, ce mode est très vulnérable aux attaques.
Il est par exemple possible de recenser tous les cryptés possibles (code books) puis par recoupements et
analyses statistiques recomposer une partie du message original sans avoir tenté de casser la clé de chiffrement.
Il demeure que si la clé fait 128 bits ou plus, cette attaque n'es pas exploitable en pratique de nos jours.
Cette technique est sensible à l'inversion ou la duplication de blocs sans que le destinataire s'en apperçoive. On
peut l'utiliser pour pipeliner du hardware.
- Le mode Cipher Block Chaining (CBC) peut-être utilisé par les algorithmes en bloc. C'est d'ailleurs le mode
le plus courant. Il permet d'introduire une complexité supplémentaire dans le processus de cryptage en créant
une dépendance entre les blocs successifs; autrement dit, le cryptage d'un bloc va être -d'une manière ou d'une
autre- lié à ou aux blocs/chiffrés précédents. Le schéma de base sera le suivant :
Le message initial M est divisé en n blocs mi conformément aux spécifications de l'algorithme (par exemple en
blocs de 64 bits). Chaque bloc donne un chiffré correspondant (ci) après cryptage suivant le même algorithme
E utilisant la même clé K. Comme expliqué ci-dessus, le mode CBC introduit une dépendance entre deux cycles de
cryptage : le chiffré obtenu au rang i-1 est utilisé pour obtenir le chiffré du rang i. Concrètement, ce chiffré
ci-1 subit un XOR avec le bloc mi.
On peut se demander ce qu'il se passe lors du premier cycle d'encodage, lorsqu'il n'y a pas encore de chiffré
à xorer avec notre premier bloc. La réponse est que l'on utilise une valeur par défaut prédéfinie appelée
Vecteur d'Initialisation (Initialization Vector, IV). Ce vecteur d'initialisation change à chaque session, et doit
être transmis au destinataire. Par contre, il n'est pas nécessaire de le chiffrer avant de l'envoyer : il peut
être connu de l'adversaire. Il évite l'attaque sur le mode ECB en multipliant la taille de la base de données
précalculées. Il ne faut néanmoins pas négliger l'importance de ce vecteur qui peut constituer une faille
sérieuse s'il est mal choisi et compromettre ainsi l'intégrité de l'ensemble malgré l'utilisation de
composantes fortes (algos, clés, etc).
Le déchiffrement est auto-synchonisé comme le mode EBC. Si on pert un bloc de chiffré, on pourra se
resynchoniser en ne perdant que deux blocs.
- Le mode Cipher FeedBack (CFB) est un mode destiné aux block ciphers dans le but d'en autoriser une utilisation
plus souple, qui s'apparente plus à celle des algorithmes en continu. On peut le considérer comme un intermédiaire
entre les deux. En effet, en partant d'un algorithme en bloc utilisant une longueur standard de n bits/blocs, le
mode CFB va permettre de crypter des blocs dont la longueur pourra varier de n à 1 bits/blocs. Sachant que dans
ce dernier cas, il serait plus économique en calculs d'utiliser directement un algorithme en continu. Quant au
cas où la longueur est celle de l'algorithme (à savoir n), le schéma de CFB se simplifie et ressemble quelque
peu à celui de CBC (à quelques nuances près) :
- Le mode Output FeedBack (OFB) est une variante de mode CFB précédemment abordé. Il est d'ailleurs parfois appelé
internal feedback. Il présente beaucoup de problèmes de sécurité et il est peu conseillé sauf dans le cas où sa
longueur est égale à celle de l'algorithme utilisé.
Relu par
Pierre Alain Fouque