LE MODELE SOUS FORME DE CLAUSES DE HORN
Confidentialité et algorithmes de chiffrement
La confidentialité est historiquement le premier problème posé à la cryptographie. Il se résout par la notion de chiffrement, mentionnée plus haut. Il existe deux grandes familles d’algorithmes cryptographiques à base de clefs : • les algorithmes à clef secrète ou algorithmes symétriques, • et les algorithmes à clef publique ou algorithmes asymétriques.
Chiffrement symétrique ou à clef secrète
Dans la cryptographie conventionnelle, les clefs de chiffrement et de déchiffrement sont identiques : c’est la clef secrète, qui doit être connue des tiers communicants et d’eux seuls. Le procédé de chiffrement est dit symétrique. Les algorithmes symétriques sont de deux types : • les algorithmes de chiffrement en continu, qui agissent sur le texte en clair un bit à la fois ; • les algorithmes de chiffrement par blocs, qui opèrent sur le texte en clair par groupes de bits appelés blocs.
Modes de chiffrement par blocs
Les algorithmes de chiffrement par blocs peuvent être utilisés suivant différents modes, dont les deux principaux sont le mode ECB (Electronic CodeBook) et le mode CBC (Cipher Block Chaining).
Le mode ECB (Electronic CodeBook)
Le mode du « carnet de codage électronique » (Electronic CodeBook) est la méthode la plus évidente pour utiliser un algorithme de chiffrement par blocs : un bloc du texte en clair se chiffre, indépendamment de tout, en un bloc de texte chiffré. L’avantage de ce mode est qu’il permet le chiffrement en parallèle des différents blocs composant un message.. Le mode ECB – L’inconvénient de ce mode est qu’un même bloc de texte en clair sera toujours chiffré en un même bloc de texte chiffré. Or, dans le chiffrement sur un réseau par exemple, les données à chiffrer ont des structures régulières facilement repérables par un cryptanalyste, qui pourra donc obtenir beaucoup d’informations. D’autre part, un attaquant actif pourra facilement manipuler les messages chiffrés en retirant, répétant ou interchangeant des blocs. Un autre inconvénient, qui s’applique au chiffrement par blocs en général, est l’amplification d’erreur : si un bit du texte chiffré est modifié pendant le transfert, tout le bloc de texte en clair correspondant sera faux.
Le mode CBC (Cipher Block Chaining)
La solution aux problèmes posés par le mode ECB est d’utiliser une technique dite de chaînage, dans laquelle chaque bloc du cryptogramme dépend non seulement du bloc de texte en clair correspondant, mais aussi de tous les blocs précédents. En mode de « chiffrement avec chaînage de blocs » (Cipher Block Chaining), chaque bloc de texte en clair est combiné par ou exclusif avec le bloc chiffré précédent avant d’être chiffré. Le premier bloc du texte en clair est, quant à lui, combiné avec un bloc appelé vecteur d’initialisation. L’utilisation d’un vecteur d’initialisation différent pour chaque message permet de s’assurer que deux messages identiques (ou dont les premiers blocs sont identiques) donneront des cryptogrammes totalement différents. – Figure 6. Le mode CBC – 23 Le gros avantage du mode CBC est donc que la structure du texte en clair est masquée par le chaînage. Un attaquant ne peut plus manipuler le cryptogramme, excepté en retirant des blocs au début ou à la fin. Un inconvénient est qu’il n’est plus possible de paralléliser le chiffrement des différents blocs (le déchiffrement reste parallélisable). On pourrait craindre que le chaînage de bloc n’entraîne une propagation d’erreur importante. De fait, une erreur d’un bit sur le texte en clair affectera tous les blocs chiffrés suivants. Par contre, si un bit du texte chiffré est modifié au cours du transfert, seul le bloc de texte en clair correspondant et un bit du bloc de texte en clair suivant seront endommagés : le mode CBC est dit autoréparateur.
Chiffrement par blocs avec itération
Un algorithme de chiffrement par blocs avec itération est un algorithme qui chiffre les blocs par un processus comportant plusieurs rondes. Dans chaque ronde, la même transformation est appliquée au bloc, en utilisant une sous-clef dérivée de la clef de chiffrement. En général, un nombre de rondes plus élevé garantit une meilleure sécurité, au détriment des performances. Un cas particulier d’algorithmes de chiffrement par blocs avec itération est la famille des chiffres de Feistel. Dans un chiffre de Feistel, un bloc de texte en clair est découpé en deux ; la transformation de ronde est appliquée à une des deux moitiés, et le résultat est combiné avec l’autre moitié par ou exclusif. Les deux moitiés sont alors inversées pour l’application de la ronde suivante. Un avantage de ce type d’algorithmes est que chiffrement et déchiffrement sont structurellement identiques.
Exemples d’algorithmes symétriques
La méthode la plus employée pour concevoir un procédé de chiffrement est de chercher à réaliser une transformation suffisamment compliquée et irrégulière pour que son analyse soit difficile. Cette méthode empirique ne fournit aucune garantie quant à la résistance de l’algorithme résultant. Des exemples d’algorithmes asymétriques d’utilisation courante aujourd’hui sont le DES (Data Encryption Standard), le DES triple à deux ou trois clefs, IDEA (International Data Encryption Algorithm), RC5 (Rivest’s Code 5),… Masque jetable (one-time pad) Il existe un algorithme de chiffrement prouvé inconditionnellement sûr : le chiffre de Vernam ou masque jetable (one-time pad en anglais), inventé en 1917. Dans ce système, la « clef » a la même taille que le texte à chiffrer et est appelée masque jetable. « Masque », car cette clef est combinée par ou exclusif avec le texte en clair pour obtenir le texte chiffré ; « jetable », car une clef ne doit servir qu’une seule fois, sans quoi un cryptanalyste pourrait retrouver le texte en clair. Le point important de ce système est que la clef est générée de façon totalement aléatoire ; tout masque est alors équiprobable, si bien qu’un attaquant n’a aucune information pour baser sa cryptanalyse. En effet, si M est le message à chiffrer, C le cryptogramme correspondant et K le masque jetable, nous avons C = M ⊕ K. Supposons que le cryptanalyste connaisse C ; quel que soit M’, il existe K’ tel que C = M’ ⊕ K’, c’est K’ = M’ ⊕ C : tous les messages en clair sont équiprobables ! Sans information sur K, le cryptanalyste n’a donc aucun moyen de savoir quel est le bon texte en clair. Les principaux inconvénients de ce système sont la taille de la clef et la nécessité de posséder un générateur aléatoire pour sa création. La conséquence en est que ce système est inutilisable dans le cadre du chiffrement d’un flux important de données et reste limité à des applications extrêmes. DES (Data Encryption Standard) Le gouvernement américain a adopté, en 1977, la fonction DES (Data Encryption Standard) comme algorithme de chiffrement standard officiel. Le DES est un algorithme de chiffrement par blocs qui agit sur des blocs de 64 bits. C’est un chiffre de Feistel à 16 rondes. La longueur de la clef est de 56 bits. Généralement, celle-ci est 25 représentée sous la forme d’un nombre de 64 bits, mais un bit par octet est utilisé pour le contrôle de parité. Les sous-clefs utilisées par chaque ronde ont une longueur de 48 bits. Le DES triple est une variante du DES qui consiste à appliquer l’algorithme trois fois à chaque bloc : chiffrement, déchiffrement puis de nouveau chiffrement. Les clefs utilisées pour chaque application du DES peuvent être toutes les trois distinctes, ou bien on peut utiliser seulement deux clefs distinctes : une pour le chiffrement et une pour le déchiffrement. Dans tous les cas, la longueur efficace de la clef du triple DES ne dépasse pas 112 bits. Un nouvel algorithme, qui vise à remplacer le DES, est en cours de normalisation auprès du NIST (National Institute of Standards and Technology). Il sera désigné sous le sigle AES (Advanced Encryption Standard). IDEA (International Data Encryption Algorithm) Un autre algorithme de chiffrement répandu est IDEA (International Data Encryption Algorithm), qui a vu le jour en 1991. IDEA est un algorithme de chiffrement par blocs avec itération qui utilise une clef de 128 bits et comporte 8 rondes.
Nomenclature |