Cryptographie symétrique


  La cryptographie à algorithmes symétriques utilise la même clé pour les processus de codage et de décodage; cette clé est le plus souvent appelée "secrète" (en opposition à "privée") car toute la sécurité de l'ensemble est directement liée au fait que cette clé n'est connue que par l'expéditeur et le destinataire. La cryptographie symétrique est très utilisée et se caractérise par une grande rapidité (cryptage à la volée, "on-the-fly"), des implémentations aussi bien software (Krypto Zone, firewalls logiciels type Firewall-1 et VPN-1 de Checkpoint) que hardware (cartes dédiées, processeurs cryptos 8 à 32 bits, algorithmes cablés...) ce qui accélère nettement les débits et autorise son utilisation massive.

Ce type de cryptographie fonctionne habituellement suivant 2 procédés différents, le cryptage par blocs ou le cryptage de "stream" (en continu), et sous 4 modes différents : Electronic CodeBook (ECB), Cipher Block Chaining (CBC), Cipher FeedBack (CFB) ou Output FeedBack (OFB).

Pour comprendre le cryptage en continu, il suffit de connaitre par exemple les videos au format RealVideo très répandues sur internet : on visualise l'image au fur et à mesure que les données sont reçues. Le principe est le même dans le cas de nos "stream-ciphers" : le cryptage est effectué bit-à-bit sans attendre la réception complête des données à crypter. Concrêtement, il en résulte un cryptage très léger qui ne garantit pas une grande confidentialité; en effet le nombre de possibilités offertes par un bit isolé est très limité en soi, ce qui réduit d'autant l'efficacité de l'algorithme. Si celui-ci tenait compte des bits précédents ou suivants, le nombre de possibilités serait décuplé, comme nous le verrons dans l'étude des 4 modes. Une autre technique consiste à "xorer", c'est-à-dire à appliquer un OU exclusif (XOR) au message avec un autre message prédéfini. Bien entendu, cela nécessite que le destinataire (la personne qui décrypte) connaisse le message prédéfini et donc cela rajoute de la complexité au schéma général.Les stream-ciphers sont peu utilisés aujourd'hui mais le furent beaucoup dans le passé.

Le cryptage en blocks (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 concernant la puissance des processeurs etc, prévoit le doublement des valeurs tout les 18 mois. Sans entrer dans les détails, il faut savoir que le cassage de cryptés nécessite essentiellement des ressources processeur et RAM. L'évolution générale est donc extrêmement rapide, sans parler des ordinateurs plus perfectionnés (scientifiques ou autres), à architectures parallèles et processeurs RISC qui ont des capacités de calcul pur sans commune mesure... Il reste donc relatif de parler de sécurité absolue, en tout cas en ce qui concerne la cryptographie symétrique.


Les 4 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 :


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 tout 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.


- 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 2 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) qui est d'habitude une série de 0. 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 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é.


 
  Retour à la page principale: