• Aucun résultat trouvé

La conception exceptionnelle de DES lui a permis de durer beaucoup plus longtemps que prvu au départ. À ce jour, aucune faiblesse structurelle majeure n’a été découverte. Néanmoins, des calculs ont démontré qu’il est tout à fait possible d’effectuer une recherche exhaustive de la clé dans un temps jugé raisonnable. Pour résoudre ce problème, d’autres travaux ont débouché au Triple-DES [19] dont l’algorithme consiste à itérer trois fois de suite l’algorithme DES sur un bloc de données de 64 bits en utilisant 2 ou 3 clés différentes. Ceci ne se passe pas sans inconvénient puisque l’algorithme Triple- DES est trois fois plus lent que l’algorithme DES simple. De point de vue pratique, le DES (simple ou triple) est facilement implantable et n’exige rien de spécifique quant au matériel ou au logiciel.

Le systèeme de chiffrement AES

Compte tenu de la faiblesse de la clé de DES et la lenteur du Triple-DES, le NIST a lancé un appel d’offre international en 1997 pour le développement d’un nouveau standard d’encryption dont les exigences sont les suivantes :

– grande sécurité : la sécurité doit être prouvable et le nouveau standard doit présenter une forte résistance aux différentes attaques connues ;

– large portabilité : le nouveau standard peut être facilement implanté sur des machines 32 bits, des cartes et processeur 8 bits, etc. ;

– excellente rapidité : le nouveau standard doit au moins être aussi rapide que DES simple (logi- ciel et matériel) ;

– forte flexiblité : le nouveau standard doit accepter des blocs de longueurs variables (128 bits, 192 bits, 256 bits) et des clés de tailles variables (128 bits, 192 bits, 256 bits) ;

– simplicité : il doit être facile à comprendre et à analyser.

En 1998, quinze algorithmes candidats ont été présentés à la première conférence AES et toutes ces propositions ont été mises à disposition de la communauté des cryptanalystes pour les étudier. Le NIST a retenu seulement cinq algorithmes finalistes pour la deuxième conférence AES en 1999 qui sont les suivants :

– MARS : de IBM ;

– RC6 : de RSA security inc. ;

– Rijndael : de Joan Daemen et Vincent Rijmen ;

– Serpent : de Ross Anderson, Eli Biham et Lars Knudsen ;

– Twofish : de Bruce Schneier, John Kelsey, Doug Whiting, David Wagner, Niels Ferguson et ChrisHall.

En 2000, à la troisième conférence AES, le NIST a déclaré l’algorithme Rijndael vainqueur qui a été finalement adopté par le NIST en 2001 et par le NSA en 2003 sous le nom de Advanced Encryption Standard [20] : AES.

AES est un algorithme de chiffrement par blocs mais n’utilise pas le chiffrement de Feistel. Il accepte des blocs de 128 bits, 192 bits et 256 bits. Les clés sont aussi de tailles variables de 128 bits, 192 bits et 256 bits. La taille de la clé est indépendante de la taille du bloc. Il utilise des techniques semblables à DES (substitutions, permutations et XOR). Toutes les opérations s’effectuent dans le corps de Galois GF(28) [21,22]. Le coprs de Galois GF(28) est le corps fini des polynômes de degré 7, c’est-à-dire, les polynômes de la forme b7x7+ b6x6+ ... + b1x + b0avec bi∈ {0, 1} et i ∈ {0, 1, ..., 7}. Un octet

est considéré par AES comme un élément de ce corps et toutes les opérations algébriques sur un octet suivent les opérations du corps. L’inversibilité du procédé d’encryption (i.e. décryption) est due ainsi à la structure de corps de GF(28).

Avant d’être encrypté, un bloc de 128 bits est découpé en 16 octets placés dans une matrice carrée de taille 4. Cette matrice subit les transformations suivantes :

1. un tour initial : dans ce tour, l’opération AddRoundKey est exécutée. Cette opération consiste en une simple addition XOR de la matrice avec une sous-clé de taille 128 bits déterminée à

partir de la clé initiale de l’utilisateur après avoir subi une expansion par un procédé qui fait appel à une rotation, une réduction dans GF(28) et une substitution. Ce procédé d’expansion de la clé de l’utilisateur est connu sous le nom de Rijndael key schedule ;

2. N tours : N tours sont appliqués à cette matrice. Le nombre de tours varie selon la taille du bloc et la taille de la clé. Il est égal à 9 (sans compter le tour final qui a sa spécificité) dans le cas d’un bloc de 128 bits et d’une clé de 128 bits. À chaque tour, les opérations suivantes sont exécutées :

a) l’opération SubByte : c’est une opération non linéaire qui consiste en une substitution d’un octet par un autre conformément à une table de correspondance (Sbox). Cette substitution dérive de l’inversion matricielle dans GF(28) connue par sa forte non-linéarité. Elle a la forme suivante :

S(X) = L.X−1+ C L et C sont ajoutés pour éviter le point fixe.

Cette étape assure la confusion et la non-linéarité de AES ;

b) l’opération ShiftRow : c’est une transformation linéaire qui consiste en un décalage dans les lignes. Pour un bloc de 128 bits, seulement les trois dernières lignes de la matrice subissent des décalages cycliques qui dépendent du rang de la ligne dans la matrice. Cette étape est essentielle pour la diffusion dans AES ;

c) l’opération MixColumn : cette opération est aussi une opération linéaire. Elle consiste en une multiplication de chaque colonne de la matrice par un polynôme fixe issu d’une matrice prédéfinie modulo un polynôme irréductible dans GF(28). Cette multiplication affecte les 4 octets de chaque colonne. Cette opération est la source primaire de la diffusion dans AES ;

d) l’opération AddRoundKey : décrite dans 1.

|k| = 128 bits |k| = 192 bits |k| = 256 bits

|bloc|=128 10 12 14

|bloc|=192 12 12 14

|bloc|=256 14 14 14

TABLE1.1 – Nombre de tours en fonction de la taille des blocs et de la clé en AES

3. un tour final : le tour final est analogue à un tour ordinaire mais sans exécuter l’opération Mix- Column.

La décryption en AES effectue les étapes de d’encryption dans l’ordre inverse tout en faisant appel aux inverses des opérations manipulées lors de l’encryption. La meilleure attaque connue sur AES- 128 est seulement 4 fois plus rapide que la recherche par force brute. Ce qui revient à dire qu’une clé

de 128 bits de AES-128 offre la même sécurité d’une clé de 126 bits d’un système parfait. Une attaque particulière sur AES-256 montre qu’à partir de 299paires de messages (mi, ci) générés à partir de 4

clés très proches l’une de l’autre (distance de Hamming très faible), le temps de retrouver les clés est de l’ordre de 299. Ce qui n’est pas très inquiétant dans la pratique vu que les clés sont indépendantes et aléatoires. D’autres attaques [23,24] qualifiées d’impraticables ont été menées contre cet algorithme qui reste très sécuritaire.

Comparé au DES, le standard AES-128 est de 2 à 7 fois plus rapide que Triple-DES qui est 3 fois plus rapide que DES. D’un point de vue sécurité, si on admet d’une façon caricaturale qu’il existe un calculateur puissant qui casse DES en une seconde, il lui faut 150 milles milliards d’années environ pour casser AES.

L’algorithme Blowfish

L’algorithme Blowfish [25] a été proposé en 1993 par Bruce Schneier et se base sur le chiffrement par bloc. Il s’appuie sur les réseaux de Feistel comme DES mais en utilisant des clés plus longues. Cet algorithme procède à un codage par bloc de 64 bits et fait usage d’une clé de longueur variable. Il se divise en deux parties : l’expansion de la clé et l’encodage de l’information. L’expansion de la clé est l’opération de conversion de la clé de départ d’un maximum de 448 bits en plusieurs sous-clés faisant ensemble 4168 octets. L’encryption de l’information se fait en seize itérations formée chacune d’une permutation qui dépend de la clé ainsi que d’une substitution qui dépend à la fois de la clé et des données. Les opérations que mène cet algorithme sont des ou-exclusifs et des additions sur des cases de 32 bits. Cet algorithme est réputé sécuritaire et rapide. Cependant quelques failles [26,27] ont été constatées mais elles sont qualifiées de non exploitables. La recherche par force brute reste, à ce jour, la seule façon pour défaire Blowfish.

L’algorithme SEAL

L’algorithme SEAL (Software-optimized Encryption ALgorithm) [28,29] a été élaboré par Coppers- mith et Rogaway pour IBM en 1993 et a été amélioré en 1997. Il n’y a que cinq opérations qui sont à réaliser pour générer un octet de texte encrypté. Il comporte une phase d’initialisation et utilise l’algorithme SHA-1 [30,31] pour générer pseudo-aléatoirement les valeurs des tables utilisées pour former le flux de clés à l’aide d’une clé secrète. Ensuite l’opération du XOR est appliquée entre le flux de clés et le texte clair pour former le texte encrypté. La décryption est l’inverse de l’encryption. SEAL est réputé rapide et facilement implantable. Des versions cablées sont aussi en usage. En 2004, Antoine Joux [32] et Xiaoyun Wang et al. [33] ont exhibé des communications qui laissent présager que SHA-1 pourrait subir une attaque ce qui influe directement sur SEAL. Ceci a donné naissance à l’algorithme SHA-2 en 2001, qui a été à son tour démontré vulnérable en 2009 par Yu Sasaki [34] et Hongbo Yu [35]. Bien que cette vulnérabilité ne soit pas qualifiée de significative, rien ne prouve qu’il n’y a pas d’autres mécanismes d’attaque qui sont en cours d’élaboration en privé. Ce qui a conduit à

l’adoption par le NIST de la version SHA-3 (Keccak) [36] en 2012.

Autres algorithmes symétriques

Il existe plusieurs autres algorithmes symétriques comme l’algorithme RC4 créé en 1987 par Ron Rivest, utilisé dans le protocole SSL et réputé très rapide mais contenant des failles exploitables ce qui a donné naissance à RC5 puis RC6 [37,38] qui en sont des variantes mais plus sûres. Nous citons également l’algorithme IDEA (International Data Encryption Algorithm) publié par Xuejia Lai et James Massey en 1990 [39]. Sa performance est nettement supérieure à l’algorithme DES en matière de sécurité mais il en est comparable en matière de rapidité. L’algorithme IDEA a été breveté en 2011 en Europe et en 2012 aux États-Unis et au Japon. Il constitue un standard de fait "totalement sûr" puisqu’une attaque contre lui nécessite une recherche exhaustive de l’orde de 1038 opérations. Des attaques récentes sur cet algorithme ont été rapportées [40–42] mais la cryptanalyse est d’une complexité algorithmique tellement élevée qu’elle ne menace pas son utilisation en pratique.

1.2.3 Chiffrement asymétrique

Le chiffrement asymétrique, dit aussi à clé publique, est basé sur des fonctions qui sont aisément cal- culables mais que leurs inverses sont extrêmement difficiles à solutionner. On peut assimiler "difficile" à "impossible" si on prouve théoriquement que le temps de calcul de l’inversion est infini (plusieurs centaines d’années) en utilisant les machines les plus puissantes au monde. Ces fonctions sont choi- sies de manière qu’elles soient difficiles à inverser à l’exception de celui qui détient une information tenue secrète. Le chiffrement asymétrique implique une paire de clés composée d’une clé publique et une clé privée. La clé publique est publiée dans des annuaires communs et donc connue de tous les intervenants alors que la clé privée n’est connue que de la personne détentrice de la paire de clés. Ce procédé est connu sous le nom de chiffrement de Deffie-Hellman [43], les inventeurs de ce type de cryptographie, mais sans donner concrètement les fonctions.

Le chiffrement à clé publique présente des avantages considérables par rapport au chiffrement à clé secrète. En effet, une communauté de n intervenants n’a besoin de posséder que n clés publiques et n clés secrètes. Cependant, dans le cas de chiffrement à clé secrète, cette même communauté a besoin de n.(n − 1) clés. Cet avantage augmente si le nombre d’intervenants d’une communauté est grand. Cependant, ces algorithmes sont lents (DES est 1000 fois plus rapide que RSA par exemple) et leur sécurité repose sur la limitation des ordinateurs actuels à élaborer des calculs arithmétiques particuliers et résoudre certains problèmes comme la factorisation des grands nombres et le logarithme discret dans un temps raisonnable. Une amélioration exponentielle potentielle des processeurs arithmétiques des machines de calcul peut rendre obsolète un système de chiffrement à clé publique. Actuellement, on est toujours à l’abri de ce danger.

Le système de chiffrement RSA

Le système de chiffrement RSA [44,45] a été inventé en 1978 par Rivest, Shamir et Adleman et bre- veté par Massachusetts Institute of Technology (MIT) en 1983 . Ce système est le plus connu et utilisé des systèmes de chiffrement à clé publique. Il est essentiellement utilisé aussi bien pour encrypter de l’information que pour la signature numérique. Le brevet de RSA fait partie de Security Dynamics et aux Public Key Parteners. Le principe de RSA est simple et se base sur la difficulté de décomposer un très grand entier naturel en ses facteurs premiers. En effet, étant donnés deux nombres premiers p et q, il est facile de calculer leur produit n = p.q. Cependant, il est très difficile de décomposer l’entier n suffisamment grand en ses facteurs premiers p et q. La création des clés par un agent dans le système RSA suit le schéma suivant :

1. il choisit deux entiers naturels premiers p et q suffisamment grands et dispersés ;

2. il calcule la fonction indicatrice d’Euler φ(n)=(p − 1).(q − 1). Cette fonction fournit le nombre d’entiers premiers avec n et inférieurs à n ;

3. il choisit un entier e tel que 1 < e < φ(n) et premier avec φ(n) ;

4. il calcule d tel que e.d ≡ 1 mod φ(n) ce qui signifie que d ≡ e−1 mod φ(n). L’entier d existe selon le théorème de Bachet-Bézout ;

5. la clé publique de cet intervenant est (n, e) et sa clé privée est (n, d).

L’envoi d’un message crypté d’un agent A à un agent B consiste en les étapes suivantes :

1. A récupère la clé publique de B : (n, e) ;

2. A calcule c ≡ memod n, m étant le message clair et c le message encrypté.

La décryption du message par B consiste en l’étape simple suivante :

1. B calcule m ≡ cdmod n.

La preuve de correction du système RSA s’explique par le suivant : Le texte encrypté reçu par B étant c ≡ memod n. Quand B calcule cd≡ me.dmod n et comme e.d ≡ 1 mod φ(n), on obtient, par la

Pour choisir un nombre premier de grande taille, on crée une suite aléatoire de bits, puis on lui ap- plique un test de primalité. Comme l’utilisation d’un algorithme du type le crible d’Ératosthène est trop lent, on utilise un test de primalité probabiliste, le test de primalité de Miller-Rabin par exemple. Ce test ne donne pas l’assurance que le nombre est premier, mais il donne une probabilité forte qu’il le soit. On peut aussi utiliser un test de primalité déterministe en temps polynomial (quoique plus lent) qui assure que le nombre est premier à l’instar du test de primalité AKS [47] proposé par Manindra Agrawal, Neeraj Kayal et Nitin Saxena et publié en 2002 dans un article intéressant intitulé «PRIMES is in P».

La sécurité de RSA repose sur le fait que le temps que prennent les algorithmes classiques pour facto- riser un nombre en ses facteurs premiers croît exponentiellement avec la longueur de la clé. En 1996 apparut une attaque sur RSA réalisée par Peter W. Shor [48] exhibant un algorithme de factorisation de grands nombres en un temps non exponentiel, ce qui permet donc d’attaquer [49] le système RSA par force brute, mais sur des ordinateurs quantiques. Plus récemment, en 2014, Santanu Sarkar [50] a montré qu’il est possible d’attaquer un système RSA modulo n = prq en un temps polynomial. De leur côté, en 2015, Abderrahmane Nitaj et Tajjeeddine Rachidi ont exhibé trois attaques concrètes en temps polynomial [51] sous les mêmes conditions de Sarkar et pour des formes particulières de p et q. D’autres attaques sur ce système ont été rapportées [52–54]. Ceci a ravivé les interrogations sur le futur du RSA et réactivé les recherches dans cette direction. En dépit de tout, on peut affirmer que RSA demeure toujours sûr si la taille de la clé est suffisamment grande et les nombres premiers choisis sont aléatoires et dispersés.

Le système de chiffrement El-Gamel

Le système de chiffrement El-Gamel [55] constitue un classique du chiffrement asymétrique. Il a été proposé en 1982 par Taher El Gamal. Il se base sur l’égalité :

(gx)y = gxy = (gy)x

Dans ce système, un agent A choisit un nombre x qu’il garde secret, ensuite il clacule X ≡ gx mod n qu’il fournit à un agent B. De la même façon, l’agent B choisit un nombre y qu’il garde secret et calcule Y ≡ gy mod n et l’envoie à A. L’agent A détient donc une clé privée x et B une clé privée y. La clé publique de B est la pair (n, g). Pour encrypter un message m, l’agent A envoie à l’agent B le message c ≡ m.Yxmod n et X. L’agent B de son côté calcule m ≡ c/(Xy) mod n ou encore m ≡ m.(gy)x/(gx)y mod n qui revient au message clair. La méthode de El-Gamel est sécuritaire. En effet, un intrus n’est capable de récupérer que X ou Y, et si de plus il connaît g et n, il n’est pas capable de calculer x et y car le calcul logarithmique x ≡ logg(X) est extrêmement difficile [56] à résoudre dans

le groupe cyclique Zn∗. Ce problème est connu sous le nom du problème de logarithme discret [57].

Néamoins, ceci ne protège pas les protocoles qui utilisent le système de El-Gamel contre les attaques de type Homme-au-Milieu.

Le système de sac à dos

Le système de sac à dos, proposé par Ralph Merkle et Martin Hellman [58] en 1978, repose sur un problème mathématique qui s’énonce comme suit : ayant n objets de poids respectifs a1, ..., an, quels

objets faut-il mettre dans un sac à dos pour obtenir un poids total égal à p ?

Ce problème est difficile à résoudre sauf dans le cas où la suite (an) est supercroissante. Dans ce cas

la solution est simple à trouver. Une suite (an) est dite supercroissante quand elle vérifie la condition

suivante :

i−1

X

j=1

aj < ai.

Un système de chiffrement asymétrique de sac à dos s’énonce comme suit :

1. on part d’un entier n, d’une suite supercroissante (an), et d’un entier V tels que : n

X

j=1

aj < V.

On construit ainsi un sac à dos supercroissant facile à résoudre ;

2. on choisit aléatoirement un entier Q, inférieur à V − 1, et premier avec V − 1 ; 3. on définit une permutation aléatoire σ dans l’ensemble {1, ..., n} ;

4. on définit le vecteur de camouflage bj = aσ(j)Q mod V pour transformer le problème de sac à

dos supercroissant en un problème de sac à dos général difficile à résoudre.

La clé publique dans ce système est la suite (bn) et la clé privée est l’ensemble {V, Q, σ, (an)}.

L’ecryption d’une suite de bits (αn) est donnée par la formule, modulo V , suivante :

C =

n

X

j=1

αjbj.

La décryption s’effectue selon le schéma, modulo V , suivant :

D = Q−1C = Q−1 n P j=1 αjbj = Q−1 n P j=1 αjaσ(j)Q = n P j=1 αjaσ(j).

Bien que l’idée soit attrayante et simple, les algorithmes de sac à dos ont été démontrés non sûrs [59] et plusieurs failles exploitables en temps polynomial [60] ont été rapportées. Ce qui a mené à l’abandon de ces systèmes cryptographiques.

Le système de chiffrement de Cramer–Shoup

Le système de Cramer–Shoup [61] est un schéma d’encryption asymétrique qui constitue une exten- sion du système cryptographique El-Gamel. Il a été conçu pour résister aux attaques adaptatives des textes encryptés choisis (adaptive chosen ciphertext attack) dites aussi attaques IND-CCA2 [62]. Dans une telle attaque, l’adversaire envoie un certain nombre de textes encryptés pour être décryptés, et le résultat de ces décryptions lui servira pour sélectionner des textes encryptés pour monter des attaques. On parle de malléabilité des messages.

Dans le système de Cramer–Shoup, la génération de clés s’effectue comme suit :

1. un agent A choisit deux générateurs g1et g2 dans un groupe cyclique G d’ordre q ;

2. ensuite, il choisit cinq valeurs aléatoires (x1, x2, y1, y2, z) dans {0, ..., q − 1} ;

3. puis, il calcule c = gx1 1 g x2 2 , d = g y1 1 g y2 2 et h = g1z;

4. enfin, il publie la clé (c, d, h) et garde secrète la clé (x1, x2, y1, y2, z). Le groupe G est partagé

entre les utilisateurs.

Un agent B, qui encrypte un message m par la clé publique de A, exécute les étapes suivantes :

1. d’abord, il convertit m dans G ;

2. ensuite, il choisit un nombre aléatoire k dans {0, ..., q − 1} ;

3. puis, il calcule :

a) u1= g1k;

b) u2= g2k;

c) e = hkm ;

d) α = H(u1, u2, e), où H est une fonction de hachage à faible taux de collision ;

e) v = ckdkα.

4. enfin, il envoie le texte encrypté (u1, u2, e, v).

L’agent A, qui reçoit le message encrypté (u1, u2, e, v), exécute les étapes suivantes pour le décrypter :

1. il calcule α = H(u1, u2, e) et vérifie si v = ux11u2x2(uy11uy22)α. Si cette vérification échoue, le

2. il calcule m = e/uz1.

La preuve de correction du protocole est simple à établir puisqu’on constate bien que :

u1 = gkz1 = hket m = e/hk

Le système de Cramer–Shoup est l’un des rares systèmes qui résiste aux attaques IND-CCA2. Cepen- dant, plusieurs critiques lui ont été attribuées qui sont principalement les suivantes :

1. il repose une partie de sa sécurité sur une fonction de hachage ;