Académique Documents
Professionnel Documents
Culture Documents
Cryptographie TP
Cryptographie TP
Cryptographie appliquée
Deuxième édition
Protocoles, algorithmes
et codes cource en C
P ré fa ce xiii
Comment lire ce livre ........................................................................................... xiv
R em erciem ents....................................................................................................... xvii
À p ro p o s de l’ au teu r x ix
1 Protocoles cryptographiques 21
3 P r o to c o le s élém en taires 51
3.1 Échange de clefs ......................................................................................... 51
3.2 Authentification............................................................................................ 56
3.3 Authentification et échange de c le fs ......................................................... 61
3.4 Analyse formelle des protocoles d ’authentification et d ’échange de clefs 70
3.5 Cryptographie à clef publique à clefs multiples....................................... 74
3.6 Secret m orcelé............................................................................................... 75
3.7 Secret r é p a r t i............................................................................................... 77
TABLE DES MATIÈRES
4 P r o to c o le s in term édiaires 81
4.1 Services de datation ................................................................................ 81
4.2 Canal su b lim in a l......................................................................................... 85
4.3 Signatures numériques incontestables....................................................... 87
4.4 Signatures numériques à vérificateurd é d ié ............................................... 88
4.5 Signatures par procuration......................................................................... 89
4.6 Signatures collectives................................................................................... 90
4.7 Signatures numériques « Fail-Stop »..... ..................................................... 91
4.8 Calcul avec données chiffrées...................................................................... 92
4.9 Mise en gage ............................................................................................... 92
4.10 Jouer à pile ou f a c e ...................................................................................... 95
4.11 Poker à l’a v e u g le ......................................................................................... 99
4.12 Accumulateurs à sens unique ................................................................... 102
4.13 Divulgation tout ou rien de s e c r e t s .......................................................... 103
4.14 Dépôt de c le f s ............................................................................................... 103
5 P r o to c o le s avancés 109
5.1 Preuves à divulgation nulle ...................................................................... 109
5.2 Identification par preuve à divulgation n u lle .......................................... 117
5.3 Signatures en aveugle ................................................................................ 120
5.4 Cryptographie à clef publique à based ’identification . . . . . . . . . 123
5.5 Transfert in con scien t.................................................................................. 124
5.6 Signatures in conscien tes............................................................................ 126
5.7 Signature simultanée de co n tr a t................................................................ 127
5.8 Courrier électronique certifié...................................................................... 131
5.9 Echange simultané de s e c r e t s ................................................................... 132
6 P r o to c o le s ésotériq u es 135
6.1 Elections sûres ............................................................................................ 135
6.2 Calcul réparti s û r ......................................................................................... 144
6.3 Diffusion de messages anonymes . 148
6.4 Argent électronique . . . . . . . 150
9 T y p e s et m o d e s d ’a lgorith m es 201
9.1 Carnet de codage électronique.................................................................... 202
9.2 Bloc rejoué ................................................................................................... 203
9.3 Mode de chiffrement avec chaînage de b l o c s ........................................... 205
9.4 Algorithmes de chiffrement en c o n t in u .................................................... 209
9.5 Chiffrement autosynchrone en c o n t i n u ....................................................... 211
9.6 Chiffrement à rétroaction ............................................................................. 212
9.7 Chiffrement synchrone en co n tin u ................................................................ 214
9.8 Mode de rétroaction de s o r t i e ................................................ 216
9.9 Mode « compteur » ......................................................................................... 219
9.10 Autres m o d e s .................................................................................................. 220
9.11 Choix d’un mode opératoire de chiffrement.................................. 222
9.12 Intercalation..................................................................................................... 223
9.13 Chiffrement par blocs vs chiffrement en co n tin u ....................................... 225
12 Le D E S 281
12.1 H istoriqu e...................................................................................................... 281
12.2 Description du DES....................................................................................... 286
12.3 Niveau de sécurité du D E S • 296
12.4 Cryptanalyse différentielle et linéaire ............ . . . 302
12.5 Les critères réels de conception . . . . . . . . 311
12.6 Variantes du DES ........................ 312
12.7 A quel point le DES est-il sûr de nos j o u r s ? . . 318
25 P o litiq u e 625
25.1 « National Security Agency » ( N S A ) ...................................................... 625
25.2 « National Computer Security Center » (N C SC ).................................... 627
25.3 « National Institute of Standards and Technology »( N I S T ) .............. 628
25.4 R SA D ata Se c u r it y , In c ....................................................................... 632
25.5 « Public Key Partners » ( P K P ) ............................................................... 632
25.6 « International Association for Cryptologie Research »(IACR) . . . 634
25.7 « R A C E Integrity Primitives Evaluation » (R IP E ) . . . . . 634
25.8 « Conditional Access for Europe » ( C A F E ) .......................................... 635
25.9 « ISO/IEC 9979 » ......................................................................................... 636
25.10 Groupes industriels, de défense des libertés civiles, et professionnelles 637
25.11 S c i .c r y p t ................................................................................................... 638
25.12 C y p h e r p u n k s .......................................................................................... 638
xii TABLE DES MATIÈRES
P o stfa ce de M a tt B la ze 651
L ex iq u e anglais—français 741
B ib lio g ra p h ie 747
In d ex 827
Préface
impossible de n’en laisser aucune. La seconde édition contient sûrement moins d’erreurs
que la première. Je tiens à votre disposition une liste des errata qui est périodiquement
postée au group USENET s c i . c r y p t . Si quelqu’un trouve une erreur, s’il vous plaît,
avertissez-moi. Pour chaque erreur, la première personne qui me la signale recevra une
copie gratuite de la disquette1.
1. N ote du traducteur : cette offre n ’est valable que pou r l’édition am éricaine de l’ouvrage.
Préface xvii
Remerciements
La liste des gens qui ont contribué à la réalisation de ce livre semble infinie mais ils
méritent tous d ’être mentionnés. Je tiens à remercier Don A l v a r e z , R oss A n d e r s s o n ,
Dave B a l e n s o n , Karl B a r r u s , Steve B e l l o v i n , Dan B e r n s t e i n , Eli B i h a m , Joan
B o y a r , Karen C o o p e r , W hit D if f ie , Joan F e i g e n b a u m , Phil K a r n , Neal K o b l i t z ,
Xuejia L a i , Tom L e r a n t h , Mike M a r k o w i t z , Ralph M e r k l e , Bill P a t t o n , Peter
P e a r s o n , Charles P f l e e g e r , Ken P iz z i n i , Bart P r e n e e l , Mark R io r d a n , Joachim
S c h u r m a n , et Marc S c h w a r t z pour avoir lu et corrigé tout ou partie du ma
nuscrit de la première édition; Marc VÀUCLAIR pour avoir traduit la première édi
tion en français ; Abe A b r a h a m , Ross A n d e r s o n , Dave B a n i s a r , Steve B e l l o v i n ,
Edi B i h a m , Matt B is h o p , Matt B l a z e , Gary C a r t e r , Jan C o m e n is c h , Claude
C r é p a u , Joan D a e m e n , Jorge D a v i l a , Ed D a w s o n , Whit D if f ie , Cari E l l is o n ,
Joan F e i g e n b a u m , Niels F e r g u s o n , Matt F r a n k l i n , Rosario G e n n a r o , Dieter
G ollm ' a n n , Mark G o r e s k y , Richard G r a v e m a n , Stuart H a b e r , Jingman H e , bob
H o g u e , Kenneth I v e r s e n , Markus J a k o b s s o n , Burt K a l i s k i , Phil K a r n , John
K e l s e y , John K e n n e d y , Lars K n u d s e n , Paul K o c h e r , John L a d w i g , Xuejia L a i ,
Arjen L e n s t r a , Paul L e y l a n d , Mike M a r k o w i t z , Jim M a s s e y , Bruce M c N a i r ,
William H u g h M u r r a y , Roger N e e d h a m , Clif N e u m a n , Kaisa N y b e r g , Luke
O ’ C o n n o r , Peter P e a r s o n , René P e r a l t a , Bart P r e n e e l , Yisrael R a d a i , Matt
R o b s h a w , Michael R o e , Phil R o g a w a y , Avi R u b i n , Paul R u b i n , Selwyn R u s s e l l ,
Kazue S a k o , Mahmoud S a l m a s i z a d e h , Markus S t a d l e r , Dmitry T i t o v , Jimmy
U p t o n , Marc V a u c l a i r , Serge V a u d e n a y , Gideon Y u v a l , Glen Z o r n , et plusieurs
employé anonymes du gouvernement américain pour avoir lu et édité plusieurs parties
de la seconde édition ; Lawrie B r o w n , Leisa C o n d i e , Joan D a e m e n , Peter G u t m a n n ,
Alan I n s l e y , Chris J o h n s t o n , John K e l s e y , Xuejia L a i , Bill L e i n i n g e r , Mark
M a r k o w i t z , Richard O u t e r b r i d g e , Peter P e a r s o n , Ken P iz z i n i , Colin P l u m b ,
Steph R a v a n o n a , R S A D a t a S e c u r i t y , I n c ., Michael R o e , Michael W o o d , et
Phil Z i m m e r m a n n pour m’avoir fourni des codes sources ; Paul M a c N e r l a n d pour
avoir réalisé les figures de la première édition; Karen C o o p e r pour son travail de
secrétaire de rédaction pour la seconde édition ; Beth F r i e d m a n pour avoir revu et
corrigé la seconde édition ; Carol K e n n e d y pour avoir fait l’index de la seconde édi
tion; les lecteurs de s c i .c r y p t et de la liste de courrier électronique Cypherpunks
pour avoir commenté des idées, avoir répondu à des questions et avoir corrigé des er
reurs dans la première édition ; Randy S e u s s pour avoir fourni un accès à l’iNTERNET ;
Jeff D u n t e m a n n et Jon E r ic k s o n pour m ’avoir aidé à commencer ; la famille I n s l e y
pour avoir donné l’impulsion, les encouragements, le soutien, les conversations, l’amitié
et les dîners ; et A T & T B e l l L a b s pour m ’avoir licencié et pour avoir rendu tout cela
possible. Ces personnes m’ont aidé à créer un livre bien meilleur que ce que j ’aurais pu
faire tout seul.
Bruce S c h n e ie r
Oak Park, 111.
schneier@couterpane.coin
A propos de l’auteur
Principes de base
1.1 Terminologie
Expéditeur et destinataire
Supposons qu’un expéditeur veut envoyer un message à un destinataire. Cet expéditeur
veut envoyer le message de manière sûre: il veut s’assurer qu’aucune oreille indiscrète
ne puisse s’informer du message.
Messages et chiffrement
Un message est appelé te x te en clair. Le processus de transformation d ’un message de
telle manière à le rendre incompréhensible est appelé chiffrem ent (ou en cry p tion ).
Le résultat de ce processus de chiffrement est appelé te x te chiffré (ou encore c r y p to
gram m e). Le processus de reconstruction du texte en clair à partir du texte chiffré est
appelé déch iffrem en t (ou d é cry p ta g e ). Ces différents processus sont illustrés par la
figure 1.1.
l’ordinateur, A i n’est rien d’autre que de l’information binaire1. Le texte en clair peut
être transmis ou stocké. Dans tous les cas, A i est le message à chiffrer.
Le texte chiffré est noté C. C ’est aussi de l’information binaire, parfois de la même
taille que A i, parfois plus grand2. La fonction de chiffrement, notée E , transforme A i
en C. Ce qui en notation mathématique s’écrit :
E ( M ) = C.
D{C) = A i.
Comme le but de toutes ces opérations n’est rien d’autre que de retrouver le message
en clair à partir de la version chiffrée de ce même message, l’identité suivante doit être
vérifiée :
D ( E ( M ) ) = A i.
2. In tég rité. Le destinataire d ’un message doit pouvoir vérifier que celui-ci n’a
pas été modifié en chemin. Un intrus doit être incapable de faire passer un faux
message pour un légitime.
3. N o n désaveu. Un expéditeur ne doit pas pouvoir, par la suite, nier à tort avoir
envoyé un message.
Ce sont des exigences vitales en matière d ’interactions sociales par ordinateur; elles
sont l’analogue des rencontres face à face. Quelqu’un est-il celui qu’il prétend être? La
pièce d’identité, le permis de conduire, le diplôme de médecin, ou le passeport d’une
personne sont-ils valides? Ce sont les questions auxquelles l’authentification, l’intégrité,
et le non désaveu répondent.
Algorithmes cryptographiques
Un a lgorith m e cry p to g ra p h iq u e est une fonction mathématique utilisée pour le
chiffrement et le déchiffrement3.
1. A partir du chapitre suivant, ce livre ne traite que de cryptographie appliquée à de l’inform ation
binaire.
2. En com binant com pression et chiffrement, C peut être plus petit que A 4. Toutefois, en général,
le chiffrement à lui seul ne fait pas l’opération de com pression.
3. Généralement, un algorithm e cryptographique com prend deux fonctions: une pour chiffrer et
l’autre pou r déchiffrer.
1.1 Terminologie 3
Si la sécurité d’un algorithme est basée sur le fait que celui-ci est tenu secret, on parlera
alors d ’algorithme restreint. De tels algorithmes ne présentent plus qu’un intérêt
historique car de nos jours ils sont inadéquats pour les besoins actuels de sécurité.
Un groupe d ’utilisateurs important ou variable ne peut utiliser de tels algorithmes
car chaque fois qu’un membre quitte le groupe, tous les autres doivent se mettre à
utiliser un autre algorithme. Si quelqu’un révèle accidentellement le secret, tout le
mende doit changer d’algorithme. Encore plus accablant, les algorithmes restreints
ne permettent aucun contrôle de qualité et aucune standardisation. Chaque groupe
d’utilisateurs doit avoir son propre algorithme. Un tel groupe ne peut pas utiliser de
produits tout faits, matériels ou logiciels, vendus dans le commerce; un espion peut
acheter le même produit et apprendre l’algorithme. Ils leur faut écrire leur propres
algorithmes et les programmer eux même. S’il n’y a pas de bon cryptographe dans le
groupe, ils ne sauront pas s’ils ont un algorithme sûr.
Malgré cela, les algorithmes restreints sont très populaires pour les applications à bas
niveau de sécurité. Les utilisateurs ne réalisent pas, ou bien ne se soucient pas des
problèmes de sécurité inhérents à leur système.
La cryptographie moderne résoud ce problème avec une clef, notée k. Cette clef peut
prendre une des valeurs parmi un grand nombre de valeurs possibles. L ’ensemble des
valeurs possibles d ’une clef est appelé esp ace d es clefs. Les opérations de chiffrement
et de déchiffrement utilisent toutes les deux cette clef (i.e., elles dépendent de la clef
et ceci est dénoté par l’indice k), aussi les fonctions s’écrivent de la manière suivante:
E k{ M ) = C
D k(C) = M .
D k(Ek( M ) ) = M .
D k2(Ekl( M ) ) = M .
Avec ces algorihtmes, toute la sécurité réside dans la (ou les) clef(s), et non dans
les détails de l’algorithme. Ceci implique que l’algorithme peut être publié et anlysé.
4 Chapitre 1 Principes de base
Clef de Clef de
chiffrement déchiffrement
Texte en clair
Texte en clair
1 Texte chiffré original
.
Chiffrement Déchiffrement
On peut fabriquer en masse un produit utilisant cet algorithme. Peu importe qu’une
espionne connaisse votre algorihtme; si elle ignore votre clef, elle ne pourra pas lire vos
messages.
Un cryptosystème est composé d ’un algorithme, et de tous les textes en clairs, textes
chiffrés, et clefs possibles.
E k{ M ) = C
D k(C) = M .
Les algorithmes à clef secrète peuvent être classés en deux catégories. Certains opèrent
sur le message en clair un bit à la fois. Ceux-ci sont appelés algorith m es de chif
frem ent en continu. D ’autres opèrent sur le message en clair par groupes de bits.
Ces groupes de bits sont appelés b lo cs, et les algorithmes correspondants sont appelés
a lgorith m es d e ch iffrem en t par b lo cs. Pour des algorithmes réalisés sur ordina
teur, la taille typique des blocs est de 64 bits — ce qui est assez grand pour interdire
l’analyse et assez petit pour être pratique4.
chiffrement pour chiffrer un message mais seul celui qui possède la clef de déchiffrement
peut déchiffrer le message chiffré résultant. Dans de tels systèmes, la clef de chiffrement
est appelée c le f p u b liq u e et la clef de déchiffrement est appelée c le f privée. La clef
privée est aussi parfois appelée c le f secrète mais pour éviter toute confusion avec les
algorithmes à clef secrète, ce terme ne sera pas utilisé ici.
Le chiffrement en utilisant la clef publique k est noté :
E k( M ) = C .
Bien que les clefs publique et privée soient différentes, le déchiffrement avec la clef
privée correspondante est noté :
D k(C) = M .
Parfois, les messages seront chiffrés avec la clef privée et déchiffrés avec la clef publique ;
une telle technique est utilisée pour les signatures numériques (voir § 2.6). Malgré le
risque de confusion possible, ces opérations seront notées :
E k{ M ) = C
D k(C) = M .
Cryptanalyse
Le but principal de la cryptographie est de préserver le texte en clair de l’indiscré
tion des espions (aussi appelés adversaires, attaquants, intercepteurs, intrus, oppo
sants, oreilles indiscrètes, cryptanalystes, décrypteurs, ou tout simplement ennemis).
On suppose que les espions ont plein accès aux communications entre l’expéditeur et
le destinataire.
La cryptanalyse est la science de la reconstitution du texte en clair sans connaître
la clef. Une cryptanalyse réussie peut fournir soit le texte en clair, soit la clef. La
cryptanalyse peut également mettre en évidence les faiblesses d’un cryptosystème qui
peuvent éventuellement faciliter les attaques contre celui-ci5.
Une tentative de cryptanalyse est appelée attaque. Un des axiomes fondamentaux
de la cryptographie, énnoncé pour la première fois par l’hollandais A. Kerckhoffs au
dixneuvième siècle, est que l’ennemi possède tous les détails de l’algorithme et qu’il ne
lui manque que la clef spécifique utilisée pour le chiffrement [795]6. Bien que cela ne
soit pas toujours le cas dans le monde réel de la cryptanalyse, c ’est toujours vrai dans
le monde académique de la cryptanalyse, et c ’est de toute façon une bonne assertion
dans le monde réel de la cryptanalyse. Si l’on ne sait pas casser un algorithme même
en sachant comment il fonctionne, on ne sait certainement pas le casser sans cette
connaissance.
Il y a quatre types génériques d’attaques cryptanalytiques. Il va de soi que chacune
d’entre elles repose sur l’hypothèse que le cryptanalyste dispose de la connaissance
complète de l’algorithme de chiffrement :
1. L ’a ttaq u e à te x te ch iffré seu lem en t. Le cryptanalyste dispose du texte chif
fré de plusieurs messages, tous ayant été chiffrés avec le même algorithme. La
5. La perte d ’ une clef par des moyens autres que la cryptanalyse est appelée com prom ission.
6. Bien sûr, on peut supposer que la C IA n ’ a pas l’habitude de com m uniquer au M ossad quoique
ce soit au sujet de ses algorithm es. Bien que le M ossad le découvre de toute façon...
6 Chapitre 1 Principes de base
R e q u is : k.
Ce type d’ attaque est principalement applicable aux cryptosystèmes à clef pu
blique et sera illustrée dans le paragraphe 19.3. Une attaque à texte chiffré choisi
fonctionne parfois pour les cryptosystèmes à clef secrète9.
Les attaques à texte en clair connu et les attaques à texte en clair choisi sont plus
courantes que vous ne pourriez l’imaginer. Il arrive qu’un cryptanalyste dispose du
texte en clair d ’un message ou qu’il soudoie quelqu’un pour chiffrer un message choisi.
Parfois, vous n’avez même pas besoin de soudoyer quelqu’un : si vous donnez un mes
sage à un ambassadeur, il y a de fortes chances pour que ce message soit chiffré et
envoyé à son pays d ’origine pour évaluation. Beaucoup de messages ont des en-têtes
et des conclusions qui peuvent être connues ou devinées par le cryptanalyste. Le code
source chiffré est particulièrement vulnérable à cause de l’apparition fréquente des mots
clefs: # d efin e, s tr u c t, e ls e , return. Le code exécutable chiffré souffre de la même
vulnérabilité : dans ce cas ce sont les fonctions, les structures de boucles, etc. qui sont
en cause. Il est connu que des attaques à texte en clair connu (et même à texte en
clair choisi) ont été menées avec succès durant la Seconde Guerre mondiale. Le livre de
David K a h n [468, 469, 470] donne quelques exemples historiques de ce type d’attaques.
Et n’oubliez pas l’axiome de Kerckhoffs: ne comptez pas sur un cryptosystème dont
la résistence réside dans le fait que l’ennemi ne sait pas comment fonctionne votre
algorithme. Vous vous trompez si vous croyez qu’il vaut mieux garder secret les détails
de votre algorithme plutôt que de laisser la communauté scientifique l’analyser. De
plus, il serait naïf de penser que personne ne désassemblera votre code exécutable pour
reconstruire votre algorithme10. Les meilleurs algorithmes dont nous disposions sont
ceux qui ont étés rendus publics et attaqués par les meilleurs cryptographes au monde,
et qui ne sont toujours pas cassés11.
Les cryptanalystes n’ont pas toujours accès à l’algorithme — c ’était le cas quand les
Etats-Unis ont cassé le code diplomatique japonais, P U R P L E , pendant la Seconde
Guerre mondiale [795] mais la plupart du temps ils y ont accès. Si l’algorithme
est utilisé dans un programme commercial de sécurité, c ’est seulement une question
de temps et d ’argent pour désassembler le programme et retrouver l’algorithme. Si
l’algorithme est utilisé dans un système militaire de communication, c’est aussi une
question de temps et d ’argent pour acheter (ou voler) l’équipement et reconstruire
l’algorithme. Il y a beaucoup de cas historiques où les cryptanalystes ne connaissaient
pas l’algorithme ; parfois ils l’ont cassé, parfois ils ont échoué. Dans tous les cas il est
irréaliste de compter sur la confidentialité de l’algorithme.
9. Une attaque â texte en clair choisi menée de front avec une attaque â texte chiffré choisi est
parfois appelée a tta q u e à te x te choisi.
10. C eci est arrivé en 1994 avec l’algorithm e R C 4 voir la section 17.1
11. La « N ational Security A gen cy » garde ses algorithm es secrets, mais les meilleurs cryptographes
travaillent dans ses murs. D e plus, ils s’échangent leurs algorithm es les uns les autres, s’ appuyant sur
leurs pairs pour déceler toute faiblesse dans leurs travaux.
8 Chapitre 1 Principes de base
Ceux qui clament avoir un système inviolable seulement parce qu’ils ne peuvent pas
eux-mêmes le casser sont soit des génies, soit des fous. Malheureusement, il y en a plus
de la seconde espèce de par le monde. Attention à ceux qui vantent les vertus de leur
algorithme mais qui refusent de le rendre public : avoir confiance en leur algorithme est
comme faire confiance à un remède de charlatan.
Pour différencier les bons algorithmes des mauvais, les bons cryptographes acceptent
le regard critique de leurs pairs.
Un algorithme est in con d ition n ellem en t sûr si — peu importe la quantité de texte
chiffré dont le cryptanalyste dispose — il n’y a pas d ’information suffisante pour re
trouver le texte en clair. De fait, seul le masque jetable (voir § 1.5) est invulnérable
étant donné des ressources infinies. Tous les autres cryptosystèmes sont vulnérables à
une attaque à texte chiffré seulement, simplement en essayant toutes les clefs possible
une par une et en regardant si le texte en clair résultant a un sens. Ceci s’appelle une
attaque exh a u stive (voir la section 7.1).
La cryptographie se préoccupe plus particulièrement de cryptosystèmes invulnérables
par calcul. Un algorithme est considéré in vu ln érable par ca lcu l (ou parfois qualifié
de fort), s’il ne peut pas être cassé avec les ressources disponibles actuellement et dans
le futur. Ce qui constitue ces « ressources disponibles » est ouvert à l’interprétation.
1.2 Steganographie 9
2. C o m p le x ité en tem ps. Le temps nécessaire pour achever l’attaque. Ceci est
aussi appellé effort.
Terminologie historique
Historiquement, on appelle c o d e un cryptosystème qui sert au niveau des unités linguis
tiques : mots, locutions, phrases, etc. Par exemple, le mot « SOEUR » peut être le texte
chiffré pour la phrase entière : « TOURNER À GAUCHE DE 90 DEGRÉS » ; le mot
« NONNES » peut être le texte chiffré de « TOURNER À DROITE DE 90 DEGRÉS * ;
et les mots « TR A LA LA » peuvent être le texte chiffré pour « OBUSIER » . Les codes
de ce type ne sont pas décrits dans ce livre, ils sont présentés dans [795, 796]. Les codes
sont utiles dans certaines circonstances seulement. Les chiffres sont utiles en toute cir
constance. S’il n’y a pas d ’entrée pour le mot « TROPPO » dans le carnet de codage,
il ne peut pas être « codé ». On peut tout chiffrer à l’aide d’un chiffre.
1.2 Steganographie
La stegan ograph ie sert à cacher des messages secrets dans d’autres messages, de
sorte que l’existence même du secret est dissimulée. Généralement, l’expéditeur écrit
12. Ces opérations peuvent être com plexes et coûteuses en tem ps de calcul.
10 Chapitre 1 Principes de base
Chiffre à substitution
Un chiffre à su b stitu tio n est un chiffre dans lequel chaque caractère du texte en
clair est remplacé par un autre caractère dans le texte chiffré. Le destinataire applique
la substitution inverse au texte chiffré pour recouvrer le texte en clair.
En cryptographie classique, il y a quatre types de base de substitution :
- Un ch iffre à su b stitu tio n sim ple est un chiffre dans lequel chaque caractère du
texte en clair est remplacé par un caractère correspondant dans le texte chiffré.
Les cryptogrammes publiés dans les journaux sont des exemples de chiffres à
substitution simple.
- Un ch iffre à su b stitu tio n sim ple par p oly g ra m m es est un chiffre pour lequel
les caractères sont chiffrés par blocs. Par exemple, « ABA » peut être chiffré par
« RTQ » tandis que « ABB » est chiffré par « SLL ».
Le fameux ch iffre d e Jules C ésar, dans lequel chaque caractère du texte en clair est
remplacé par celui qui se trouve trois places plus loin dans l’alphabet modulo 26 (A est
remplacé par D, B est remplacé par E..., W est remplacé par Z, X est remplacé par A, Y
est remplacé par B, Z est remplacé par C) est un chiffre à substitution simple.
R O T I3 est un programme de chiffrement fréquemment utilisé sur les systèmes UNIX.
Dans ce chiffre, A est remplacé par N , B est remplacé par O , etc. Chaque lettre est
décalée de 13 places. .
Chiffrer un fichier deux fois avec R O T 13 redonne le fichier original :
M = R O T 1 3 (R O T 1 3 (A f)).
R O T I3 n’est pas destiné à la sécurité. Il est souvent utilisé dans les messages de cour
rier électronique pour cacher du texte pouvant être offensant, pour éviter de dévoiler
trop tôt la solution d ’un casse-tête, etc.
Ce type de chiffres peut être facilement cassé car le chiffre ne cache pas les fréquences
sous-jacentes des différents caractères du texte en clair. En langue anglaise, il ne faut
pas plus de 25 caractères du texte chiffré avant qu’un bon cryptanalyste ne puisse
reconstruire le texte en clair [1439]. Un algorithme général pour casser ce genre de
chiffre est décrit dans [581, 589, 1602, 85, 1481, 1246, 880]. Une bonne réalisation sur
ordinateur est donnée dans [700].
Les chiffres à substitution à représentation multiple furent utilisés dès 1401 par le
Duché de Mantoue en Italie [795]. Ils sont biens plus difficiles à casser que les chiffres
à substitution simple, mais toutefois ils ne cachent pas suffisamment les propriétés
statistiques de la langue du texte en clair. Ces chiffres sont trivialement cassés par
une attaque à texte en clair connu. Une attaque à texte chiffré seulement est plus
difficile mais elle ne prend que quelques secondes par ordinateur. Les détails sont donnés
dans [1272].
Les chiffres à substitution simple par polygrammes sont des chiffres dans lesquels les
lettres sont chiffrées par groupe. Le procédé PLAYFAIR, inventé en 1854, était utilisé
par les Britanniques pendant la Première Guerre mondiale [795]. Il chiffre les lettres
par paires. La cryptanalyse de ce procédé est présentée dans [589, 1481, 880]. Le chiffre
de H ill est encore un autre exemple de chiffre à substitution simple par polygrammes
[734]. Les codes de Huffman sont parfois utilisés pour chiffrer, c ’est un chiffre à substi
tution simple par polygrammes qui est peu sûr.
Les chiffres à substitution polyalphabétique ont été inventés par Léon BATTISTA en
1568 [795]. Ils furent utilisés par les Nordistes durant la guerre de Sécession. Bien qu’ils
puissent être facilement cassés [820, 579, 589, 795] (plus particulièrement avec l’aide
d’ordinateurs), nombre de produits commerciaux de sécurité informatique utilisent ce
type de chiffre [1392, 1397, 1506]. La méthode pour casser le système de chiffrement
à substitution polyalphabétique, utilisé par le traitement de texte WordPerfect, est
12 Chapitre 1 Principes de base
Chiffre à transposition
Un chiffre à tra n sp o sitio n est un chiffre dans lequel les caractères du texte en clair
demeurent inchangés mais dont les positions respectives sont modifiées. Pour appliquer
la tra n sp o sitio n sim ple en colon n es, on écrit le texte en clair horizontalement sur
un morceau de papier quadrillé de largeur fixe et l’on relève le texte chiffré verticalement
(voir la figure 1.4). Pour déchiffrer le texte chiffré, il suffit d ’écrire verticalement celui-ci
sur un morceau de papier quadrillé de la même largeur et de lire horizontalement le
texte en clair.
Texte en clair
l ’a s s a s s in est le d o cteu r M a t r ix , r e g a r d e z d e r r iè r e l ’h o r l o g e
LASSASSIN
ESTLEDOCT
EURMATRIX
REGARDEZD
ERRIERELH
0RL0GE
Texte chiffré :
LEERE OASUE RRSTR GRLSL M AIOA EAREG SDTDR ESORE EICIZ LN TXD H
La cryptanalyse de ces chiffres est présentée dans [589, 1481]. Comme les lettres du
texte chiffré sont les mêmes que celles du texte en clair, une analyse statistique de la
fréquence des lettres montre que chaque lettre se comporte à peu près comme dans la
langue d ’origine du texte. Cela donne un indice imprtant au cryptanalyste qui peut
essayer différentes techniques pour retrouver l’ordre correct des lettres. Appliquer une
deuxième transposition au texte chiffré augmente grandement la sécurité. Il y a des
chiffres à transposition encore plus compliqués mais les ordinateurs permettent de les
1.3 Substitution et transposition 13
Machines à tambours
Dans les années 20, de nombreux dispositifs mécaniques ont été inventés pour automa
tiser le chiffrement. Ils utilisaient une (ou plusieurs) pièce mécanique appelée ta m b ou r
(ou r o to r) qui était conçue de manière à effectuer une opération de substitution.
Une m achines à ta m b o u rs (ou m achines à rotors) a un clavier et un ensemble de
rotors, et réalise une version du chiffre de VlGENÈRE. Chaque rotor est une permutation
arbitraire de l’alphabet, a 26 positions et effectue une substitution simple. Par exemple,
un rotor pouvait être conçu pour substituer « F » à « A » , « U » à « B », « L » à « C »,
etc. Les picots de sortie d ’un rotor entraînent ceux du rotor suivant.
Par exemple, dans une machine à quatre rotors, le premier rotor pouvait substituer
« F » à « A », le deuxième « Y » à « F », le troisième « E » à « Y », et le quatrième « C »
à « E »; « C » étant la sortie dans le texte chiffré. Puis certains rotors se décalent et la
substitution est différente la fois suivante.
C’est la combinaison de tous ces rotors et des engrenages les entraînant qui rendent
cette machine sûre.Comme tous les rotors bougent, et à des vitesses différentes, la pé
riode d’une machine à n rotors est 26” . Certaines machines peuvent avoir des nombres
de positions différents sur chaque rotor, ce qui complique encore plus la tâche du cryp
tanalyste.
La machine à rotors la plus connue est la machine E n i g m a , utilisée par les Allemands
pendant la Seconde Guerre mondiale. L’idée de base est due à Arthur S c h e r b iu s
et Arvid Gerhard D a m m en Europe. Elle a été brevetée aux Etats-Unis par Arthur
S c h e r b iu s [1388]. Les Allemands avaient considérablement étoffé le concept de base
pour leur effort de guerre.
Il y avait un tableau qui permutait légèrement le texte en clair, et un rotor supplémen
taire qui obligeait chaque rotor à opérer deux fois sur chaque lettre. Aussi compliquée
qu’elle fut, la machine ENIGMA a été « cassée » durant la Seconde Guerre mondiale.
Une équipe de cryptographes polonais a cassé une version simplifiée de la machine
E n ig m a , une équipe britannique, dont Alan T u r in g faisait partie, a cassé la vraie
machine E n i g m a . Pour plus d ’informations concernant les machines à rotors et la fa
çon dont elles peuvent être cassées voyez [795, 93, 451, 496, 449, 880, 1326, 1589, 691].
Deux comptes rendus fascinants relatant comment la machine E n i g m a a été cassée
sont donnés dans [737, 797],
Lectures recommandées
Ce n’est pas un livre sur la cryptographie classique, aussi ne vais-je pas m’étendre
plus avant sur ce sujet. Deux excellents livres présentant la cryptologie d’avant l’ère
H Chapitre 1 Principes de base
informatique sont [589, 1481]; la cryptanalyse des machines à chiffrer se trouve dans
[451]. Dorothy D e n n in g présente nombre de ces chiffres dans [462], et [880] donne une
analyse relativement mathématique de ces mêmes chiffres. Un autre texte plus ancien
sur la cryptographie, qui traite des sujets analogues, est [106]. Un article qui donne
un bon aperçu du sujet est [580]. Les livres historiques de David K a h n sont aussi
excellents [795, 796, 797).
00 0 = 0
001 = 1
1©0=1
101 = 0
a© a= 0
a © b© b = a
if (cp = argv[l] ) {
if ((fi = fopen(argv[2] ,"rb")) != NULL) -[
if ((fo = fopen(argv[3],"wb")) != NULL) {
while ((c = getc(fi)) != EOF) {
if (!*cp) cp = argv[l];
c '= *(cp++);
putc(c,fo);
>
fclose(fo);
>
1.5 Masque jetable 15
fc lo s e (fi);
>
>
>
C ’est un algorithme à clef secrète. Le texte en clair est combiné à la clef par une
opération « ou exclusif » pour produire le texte chiffré. Comme l’application du ou
exclusif deux fois avec la même valeur redonne la valeur initiale, le chiffrement et le
déchiffrement utilisent exactement le même programme (© dénote l’opération logique
ou exclusif) :
M ® K = C
C®K = M
Il n’y a pas de vraie sécurité ici. Ce type de chiffre est trivial à casser, même sans
ordinateur [589, 1481]. Cela ne prendra que quelques minutes avec un ordinateur.
Faisons l’hypothèse que le texte est en langue anglaise. De plus, supposons que la clef
a une petite longueur arbitraire. Voici comment le casser :
Malgré cela, la liste des marchands de logiciels qui prétendent que cet algorithme est
« presque aussi sûr que l’algorithme DES » continue de s’allonger [1392]. C ’est cet
algorithme (avec une clef de 160 bits) que la NSA a finalement permis à l’industrie
américaine du téléphone cellulaire numérique d’utiliser pour assurer la confidentialité
des communications. Un ou exclusif simple empêchera peut-être votre sœur de lire vos
fichiers mais cela n’arrêtera pas un cryptographe plus de quelques minutes.
MASQUEJET ABLE
TBFRGFARFMIKL
GCYIBKKWZNKWQ
puisque l’on a:
M + T mod 26 = G
A + B mod 26 = C
S + F mod 26 = Y
etc.
En émettant l’hypothèse que l’adversaire n’a pas accès au bloc qui contient le masque
jetable, ce système est parfaitement sûr. Un texte chiffré donné peut correspondre à
n’importe quel texte en clair de même longueur.
Comme tout masque est également probable (rappelez-vous que le masque est une suite
aléatoire), un adversaire n’a pas d ’information pour baser sa cryptanalyse. Le morceau
de masque aurait tout aussi bien pu être :
RXDCXFHVQBYRX
OEUFDECAILLES
ou encore :
RTFDAPUVHMGNX
OISEAUPARADIS
14. En fait, un masque jetable est un cas particulier d ’un schém a à seuil (voir § 3.7).
1.5 Masque jetable 17
Ce point vaut la peine d’être répété : comme tout texte en clair est équiprobable, il n’y
a aucun moyen pour le cryptanalyste de déterminer quel est le bon texte en clair. Le
« ou exclusif » d ’une clef aléatoire avec un texte en clair non aléatoire produit un texte
chiffré complètement aléatoire, peu importe la puissance de calcul.
Le point faible, et il est de taille, est que les lettres du masque doivent être engendrées
aléatoirement. Toute attaque contre la technique du masque jetable se fera contre la
méthode utilisée pour engendrer le masque. On ne peut pas envisager l’utilisation d’un
générateur pseudo-aléatoire ; ceux-ci possèdent toujours des propriétés non aléatoires.
Si vous utilisez un générateur vraiment aléatoire — c ’est beaucoup moins facile qu’il
n’y paraît (voir § 17.14) — cette technique est sûre.
L’autre point important est que vous ne pouvez jamais utiliser à nouveau le même
morceau du masque. Même avec un masque de plusieurs gigaoctets, un cryptanalyste
qui possède des textes chiffrés avec des séquences de masque se recouvrant peut re
construire le texte en clair. Il compare chaque paire de textes chiffrés en décalant l’un
par rapport à l’autre et compte le nombre de lettres identiques en même position.
Quand les textes sont alignés, la proportion de lettres identiques augmente d’un coup
— le pourcentage exact dépend de la langue utilisée dans le texte en clair. Ensuite la
cryptanalyse est facile. Il s’agit d ’un index de coïncidences mais avec deux « périodes »
seulement à comparer [905].
L’idée du masque jetable peut être facilement étendue au chiffrement de données bi
naires. On utilise un masque composé de bits au lieu de caractères. Au lieu d ’addition
ner le texte en clair et le masque, on utilise le ou exclusif. Pour déchiffrer, on applique
le ou exclusif avec le même masque jetable. On ne change rien d ’autre et on a un
niveau de sécurité parfait.
Tout cela à l’air mirobolant, mais il y a quand même quelques problèmes. La longueur
du masque est égale à la longueur du message à transmettre. C ’est acceptable pour
quelques messages courts mais pas pour une ligne de transmission à 1,544 mégabit par
seconde. Malgré tout, vous pouvez enregistrer 650 mégaoctets de bits aléatoires sur
un CD-ROM mais il y a des problèmes. Premièrement, vous avez besoin d ’exactement
deux copies des bits aléatoires alors que les CD-ROMs sont économiquement intéres
sants en grande quantité seulement. Deuxièment, vous devez pouvoir détruire les bits
aléatoires déjà utilisés. Un CD-ROM ne peut-être effacé autrement qu’en le détrui
sant physiquement. Les cassettes numériques sont bien mieux adaptées à ce genre de
besoins.
Même si vous résolvez les problèmes de la distribution du masque et de sa sauvegarde,
vous devez encore vous assurer que l’expéditeur et le destinataire soient parfaitement
synchronisés. Si le destinataire est décalé ne serait-ce que d ’un bit (ou si quelques
bits sont perdus pendant la transmission), le message déchiffré n’aura aucun sens. Si
quelques bits sont faussés durant la transmission (aucun bit n ’est ajouté ou retiré, ils
sont seulement modifiés), seul ces bits-là seront mal déchiffrés. D’autre part, un masque
jetable ne permet aucune authentification.
Les masques jetables ont encore leur utilité aujourd’hui, principalement pour des ca
naux de communications ultra-secrets et à faible débit. Le « téléphone rouge » entre les
Etats-Unis et l’ex-Union soviétique était15, paraît-il, chiffré à l’aide de la technique du
masque jetable. Nombre de messages d ’espions soviétiques étaient chiffrés par masque
jetable. De tels messages sont encore secrets même aujourd’hui et le resteront à tout ja
mais. Peu importe combien de temps les super-ordinateurs consacreront à essayer de les
casser, peu importe le nombre de personnes qui essaieront encore d’ici à un demi-siècle
avec des machines et des techniques inimaginables, ils resteront secrets. Même quand
les extraterrestres venant d’Andromède atterriront avec leurs gigantesques engins spa
tiaux et leur puissance de calcul inimaginable, ils ne seront pas capables de déchiffrer
les messages des espions soviétiques chiffrés à l’aide de la technique du masque jetable
(à moins qu’il puissent aussi voyager dans le temps et récupérer les masques utilisés).
Protocoles cryptographiques
Chapitre 2
Briques élémentaires
- le protocole doit être non ambigu : chaque étape doit être bien définie et il ne
doit pas y avoir de possibilité de mésentente ;
- un protocole doit être complet: il doit y avoir une action spécifique à chaque
situation possible.
1. D e fait, c ’est le but d e l’ inform atique tou t cou rt — ce que beaucoup de gens tendent à oublier.
24 Chapitre 2 Briques élémentaires
Les protocoles dans ce livre sont organisés en une série d’étapes. L ’exécution d ’un
protocole parcourt linéairement ces étapes, sauf s’il y a des instructions de branchement
indiquant qu’il faut poursuivre à partir d’une autre étape. Chaque étape comprend des
calculs effectués par l’un des participants, et/ou des messages envoyés d ’un participant
à un autre.
Un p r o t o c o le cry p to g ra p h iq u e est un protocole qui utilise la cryptographie. Les
participants peuvent être des amis qui ont implicitement confiance les uns en les autres
ou ils peuvent être des ennemis qui ne se font pas confiance du tout. Un protocole
cryptographique utilise certains algorithmes cryptographiques, mais en général le but
d’un protocole va au-delà de la simple confidentialité. Les participants d’un protocole
peuvent vouloir partager partiellement un secret pour calculer une valeur, engendrer
une suite aléatoire, convaincre l’autre interlocuteur de son identité, ou signer simul
tanément un contrat. Tout l’intêret d’utiliser la cryptographie dans un protocole est
d ’empêcher ou de détecter l’espionnage ou la tricherie. Si vous n ’avez jamais vu de tels
protocols auparavant, cela va changer radicalement votre idée de ce que des participants
mutuellement méfiants peuvent accomplir sur un réseau informatique. En général, on
peut formuler cela ainsi:
- Il doit être impossible de faire ou d ’apprendre plus que ce qui est prévu dans le
protocole.
C ’est beaucoup plus difficile qu’il n’y parraît. De nombreux protocoles sont exami
nés dans les prochains chapitres. Dans certains, un des participant peut tromper les
autres. Dans d ’autres, un espion peut altérer le protocol ou apprendre des informations
secrètes. Certains protocoles échouent faute de précision dans la définition des régies.
D ’autres échouent parce que leurs auteurs ont manqué de méticulosité dans leur ana
lyse. Comme pour un algorithme, il est bien plus difficile de prouver qu’un protocle est
sûr que le contraire.
autres peuvent faire beaucoup de dégâts. En formalisant les protocoles, nous pouvons
examiner comment des participants malhonnêtes peuvent essayer de tricher et ainsi
développer des protocoles qui excluent les tricheurs.
Non seulement les protocoles formalisent les comportements mais de plus il permettent
d’abstraire le processus d’accomplissement d’une tâche des mécanismes par lesquels
cette tâche est accomplie. Un protocole de communication entre deux ordinateurs est
le même, que ce soient des P C d ’IBM , des V A X de D i g i t a l o u encore des téléco
pieurs. Nous pouvons examiner les protocoles sans nous noyer dans les détails de leur
réalisation concrète. Une fois que nous sommes convaincus de tenir un bon protocole,
nous pouvons le réaliser avec n’importe quoi tel que des ordinateurs, des téléphones ou
même des gaufriers intelligents.
Les acteurs
Pour illustrer les protocoles, j ’ai engagé des acteurs (voir le tableau 2.1)2. Alice et
Bernard sont les acteurs principaux. Ils accompliront tous les protocoles généraux à
deux participants. Par convention, Alice commencera tous les protocoles. Bernard ré
pondra. Si le protocole requiert l’intervention d ’un troisième ou quatrième participant,
Christine et David seront appelés à la rescousse. Les autres acteurs joueront des rôles
spécifiques qui seront détaillés plus tard.
Protocoles arbitrés
Un arbitre est un tiers, personne de confiance et désintéressée qui veille au bon dérou
lement du protocole (voir la figure 2.1a). L ’arbitre est dit « désintéressé » parce qu’il
n’a pas d’intérêt dans l’accomplissement du protocole et qu’il n’a aucune allégeance
envers les autres participants. L ’arbitre est dit de « confiance » parce que tous les par
ticipants au protocole acceptent que ce qu’il dit est vrai, que ce qu’il fait est correct
2. Note du traducteur : dans la littérature anglo-saxonne, les prénom s des acteurs : A lice, B ob , Carol,
Dave, Eve, Mallet, Trent, W arden, P eggy et V ictor correspondent respectivem ent à Alice, Bernard,
Christine, David, Estelle, M artin, Ivan, G atien, P atricia et V ictor dans cette édition française. Le
choix de Bernard plutôt que B ob n ’est pas traditionnel mais cela ne change rien à la com préhension
de l’ouvrage car ces prénom s peuvent être quelconques pour autant qu ’ ils com m encent par la bonne
lettre.
26 Chapitre 2 Briques élémentaires
et que sa part du protocole sera complète. Les arbitres aident au bon accomplissement
de protocoles entre participants méfiants.
Dans le monde réel, les hommes de loi jouent souvent le rôle d’arbitre. Par exemple,
Alice vend une voiture à Bernard, un inconnu. Bernard veut payer par chèque mais
Alice n’a aucun moyen de savoir si le chèque est un chèque en bois. Alice veut s’assurer
de la solvabilité du chèque avant de céder les papiers du véhicule (titre de propriété
inclus) à Bernard. Bernard, qui n’a pas plus confiance en Alice qu’elle en lui, ne veut
pas donner le chèque avant d ’avoir reçu les papiers.
Un homme de loi qui a la confiance d ’Alice et de Bernardentre alors en scène. Grâce à
l’aide de celui-ci, Alice et Bernard peuvent se mettre d ’accord sur le protocole suivant,
qui garantit que ni l’un ni l’autre ne pourra tricher :
Dans ce protocole, Alice fait confiance à l’homme de loi pour qu’il ne donne les papiers
et les clefs que si le chèque est solvable (et donc encaissé) et pour qu’il lui rende ceux-
ci dans le cas contraire. Bernard fait confiance à l’homme de loi pour qu’il garde les
papiers et les clefs jusqu’à ce que le chèque soit encaissé. Pour l’homme de loi, peu
importe si le chèque est solvable ou non. Il fera sa part du protocole dans tous les cas
puisqu’il sera payé de toute façon.
Dans cet exemple, l’homme de loi joue le rôle d’un agent de dépôt. Les hommes de loi
agissent comme arbitres pour les testaments et parfois pour la négociation de contrats.
Les Bourses agissent comme arbitres entre les acheteurs et les vendeurs.
Les banques agissent aussi comme arbitres. Bernard peut acheter la voiture d ’Alice à
l’aide d’un chèque certifié :
- Comme tout le monde sur le réseau doit faire confiance à l’arbitre, il devient le
point sensible du réseau et la cible privilégiée de ceux qui veulent corrompre le
réseau.
Malgré tout, les arbitres ont encore un rôle à jouer. Dans les protocoles, le rôle de
l’arbitre sera tenu par Ivan.
La différence entre un arbitre et un juge-arbitre (du moins pour les besoins de cet
ouvrage) est que le juge-arbitre n’est pas toujours nécessaire. S’il y a contestation, un
juge est appelé pour trancher. S’il n’y a pas contestation, un juge n’est pas nécessaire.
Il existe des protocoles informatiques avec juges-arbitres. Ces protocoles reposent sur
l’hypothèse que les participants sont honnêtes mais si quelqu’un triche, les données
collectées pendant l’exécution du protocole permettront à un tiers désintéressé de dé
terminer s’il y a eu tricherie. Dans un bon protocole avec juge-arbitre, ce dernier peut
2.1 Introduction aux protocoles 29
également indiquer l’identité de celui qui a triché. Au lieu d’empêcher la tricherie, les
protocoles avec juge-arbitre détectent la tricherie. Le caractère inévitable de la détec
tion agit comme une mesure préventive et décourage la fraude.
Attaques de protocoles
Les attaques dirigées contre les protocoles peuvent viser soit les algorithmes cryptogra
phiques utilisés par les protocoles, soit les techniques cryptographiques utilisées pour
réaliser les algorithmes, ou encore le protocole lui-même. Comme ce paragraphe ne
traite que les protocoles, nous allons supposer que les algorithmes et les techniques
sont sûres et ne regarder que les attaques contre le protocole lui-même.
II y a plusieurs façons d ’attaquer un protocole. Quelqu’un qui n ’est pas impliqué dans
le protocole peut espionner tout ou partie de celui-ci. C ’est ce que l’on appelle une
attaque passive parce que l’attaquant ne modifie pas le protocole. Tout ce qu’il peut
faire c’est observer le protocole et ainsi essayer de collecter de l’information. Ce type
d’attaque correspond à une attaque à texte chiffré seulement, telle celle que décrite dans
le paragraphe 1.1. Les attaques passives sont difficiles à détecter, aussi les protocoles
essayent de s’en prémunir plutôt que de les détecter. Dans de telles attaques le rôle de
l’espion sera joué par Estelle.
Un attaquant peut aussi essayer d ’altérer le protocole pour le tourner à son avantage. Il
peut prétendre être quelqu’un d’autre, intercaler de nouveaux messages, supprimer des
messages, remplacer un message par un autre, envoyer un vieux message, détruire le
canal de communication ou encore modifier l’information enregistrée par un ordinateur.
On parlera alors d’a ttaq u es actives car elles requièrent une attitude active de la part
de l’attaquant. La manière dont sont menées ces attaques dépendent du réseau.
Les attaquants passifs ne sont intéressés que par l’information qu’ils peuvent glaner
concernant les participants au protocole. Ils collectionnent les messages qui circulent
entre les différents participants et en essayant de les cryptanalyser. Les attaques ac
tives peuvent au contraire avoir bien d’autres objectifs. L’attaquant peut vouloir soit
obtenir de l’information, soit dégrader les performances du système, soit corrompre de
l’information existante, soit encore avoir accès à des ressources non autorisées.
Les attaques actives sont bien plus sérieuses, plus particulièrement dans les protocoles
où les participants n’ont pas confiance entre eux. L’attaquant n’est pas forcément un
étranger. Il peut être un utilisateur légitime du système. Il peut être l’administrateur
du système. Il peut même y avoir plusieurs attaquants actifs, travaillant ensemble,
30 Chapitre 2 Briques élémentaires
chacun étant un utilisateur légitime. Le rôle de l’attaquant malicieux actif sera joué
par Martin.
Il se peut que l’attaquant soit un des participants au protocole. Ilpeut mentir pendant
le protocole ou même ne pas du tout suivre les règles. Ce type d’attaquantest appelé
tricheur. Les trich eu rs passifs respectent le protocole mais ils essaient d’obtenir
plus d ’informations que le protocole ne leur permet normalement. Les tricheu rs actifs
altèrent le protocole en cours en essayant de tricher.
Il est très difficile de garantir la sécurité du système si la plupart des participants
sont des tricheurs actifs mais, parfois, il est possible pour les participants légitimes de
détecter qu’il y a tricherie active. De toute façon, les protocoles doivent se prémunir
de manière fiable contre la tricherie passive.
3° Alice chiffre son texte en clair à l ’aide de l ’algorithme choisi et avec la clef
sélectionnée. Cette étape produit un texte chiffré.
Que peut apprendre Estelle un espion qui se place entre Alice et Bernard, en écoutant
le protocole? Si tout ce qu’elle peut entendre est la transmission de l’étape 4, elle peut
essayer de cryptanalyser le texte chiffré. Cette attaque passive est une attaque à texte
chiffré seulement. Il existe des algorithmes qui sont résistants (pour autant que l’on
sache) peu importe la puissance de calcul dont Estelle dispose pour s’y attaquer.
Toutefois, Estelle n’est pas stupide. Elle sait que si elle peut écouter les étapes 1 et
2 du protocole, elle aura ce qu’il lui faut. Elle connaîtra alors l’algorithme et la clef;
elle en saura autant que Bernard. Quand le message est transmis à l’étape 4, tout ce
qu’elle a à faire est de le déchiffrer pour elle-même.
Un bon cryptosystème est un système où la sécurité est inhérente à la connaissance
de la clef et non pas à celle de l’algorithme. C ’est pourquoi la gestion des clefs est un
problème si important en cryptographie. Avec un algorithme à clef secrète, Alice et
Bernard peuvent réaliser l’étape 1 en public mais ils doivent réaliser l’étape 2 en secret.
La clef doit rester secrète avant, pendant et après le protocole, sinon, le message ne
serait plus confidentiel3.
3. La cryptographie à clef publique résout ce problèm e d ’ une autre manière qui sera décrite dans
le paragraphe 2.5.
2.3 Fonctions à sens unique 31
Martin, un attaquant actif, peut faire d ’autres choses. Il peut essayer de casser le canal
de communication de l’étape 4, s’assurant ainsi qu’Alice ne peut pas transmettre du
tout son message à Bernard. Martin peut aussi intercepter les messages d’Alice et les
remplacer par d’autres de son cru. Si de plus Martin connaît la clef (en interceptant la
communication de l’étape 2 par exemple), il peut chiffrer ses propres messages et les
envoyer à Bernard en lieu et place des messages interceptés. Bernard n’aurait aucun
moyen de détecter que ces messages ne viennent pas d ’Alice. Si Martin ne connaissait
pas la clef, les messages qu’il enverrait en remplacement seraient du charabia lorsqu’ils
seraient déchiffrés par Bernard. Bernard, pensant que le message vient d’Alice, croirait
que le réseau, ou Alice, ont de sérieux problèmes.
Quant à Alice, que peut-elle faire pour fausser le protocole? Elle peut donner une copie
de la clef à Estelle. A l’aide de celle-ci, Estelle peut lire tout ce que Bernard dit. Elle
peut reproduire ses propos dans le New York Times. Bien que cela soit grave, la faute
n’est pas imputable au protocole. Il n’y a rien dans le protocole qui puisse empêcher
Alice de donner une copie du texte en clair à Estelle. Bien sûr, Bernard peut faire
tout ce qu’Alice peut faire. Ce protocole présume qu’Alice et Bernard se font confiance
mutuellement.
En résumé, un cryptosystème à clef secrète a les problèmes suivants :
- Les clefs doivent être distribuées secrètement. Elles ont autant de valeur que
tous les messages chiffrés avec elles car connaître les clefs donne accès à tous les
messages. Pour des cryptosystèmes utilisés à l’échelle de la planète, la distribution
des clefs peut être une tâche décourageante. Souvent, des messagers apportent
les clefs à leur destination (de la main à la main).
- Si la clef est compromise (volée, devinée, extorquée, achetée, etc.) alors Estelle
peut déchiffrer tous les messages chiffrés à l’aide de cette clef. Elle peut alors
se faire passer pour l’un des participants et insuffler ses propres messages pour
tromper l’autre participant.
- Si une clef différente est utilisée pour chaque paire d’utilisateurs d’un réseau, le
nombre total de clefs croît très vite par rapport au nombre d ’utilisateurs. Par
exemple, 10 utilisateurs ont besoin de 45 clefs différentes pour pouvoir mener
n’importe quelle conversation deux à deux ; 100 utilisateurs ont besoin de 4950
clefs différentes. Ce problème peut être minimisé en gardant un petit nombre
d’utilisateurs mais cela n’est pas toujours possible.
Casser une assiète est un bon exemple de fonction à sens unique. Il est facile de cas
ser l’assiète en mille morceaux. Toutefois, il est très difficile de recoller les morceaux
ensembles pour reconstruire l’assiète.
Cela a l’air correct mais on ne peut pas en démontrer la véracité. D ’un point de
vue strictement mathématique, il n’y a pas de preuve que des fonctions à sens unique
existent ni même d ’indice qu’elles peuvent être définies [233, 532, 603, 662]. Cependant,
de nombreuses fonctions ont l’air d’être à sens unique: nous pouvons facilement les
calculer et, à ce jour, nous ne connaissons pas de moyen simple pour les inverser. Par
exemple, x2 dans un corps fini est facile à calculer mais le calcul de \fx est nettement
plus difficile. Par la suite, je prétendrai que des fonctions à sens unique existent. Nous
en reparlerons dans le paragraphe 11.2.
Mais à quoi peuvent bien servir des fonctions à sens unique? On ne peut pas les
utiliser telles quelles pour le chiffrement. Un message chiffré à l’aide d’une fonction à
sens unique n’est pas d ’une grande utilité: personne ne peut le déchiffrer4. Pour la
cryptographie à clef publique, nous avons besoin de ce que l’on appelle une fon ctio n
à sens u n iqu e à b rè ch e s e c r è te 5.
Une fo n ctio n à sens unique à brèch e secrète est un type spécial de fonction à sens
unique. Il est facile de la calculer dans un sens et difficile de le faire dans l’autre sens.
Mais pour celui qui connaît le secret, il est aisé de calculer la fonction dans l’autre sens.
En d ’autres termes, il est facile de calculer f (x) étant donné x et difficile de calculer x
étant donné f{x). Toutefois, il existe une information secrète, y, telle qu’étant donné
f(x) et y, il est facile de calculer x.
Une montre est un bon exemple de fonction à sens unique à brèche secrète. Il est facile
de démonter une montre en ses centaines de pièces. Il est très difficile de remettre
les pièces ensemble pour reconstruire une montre qui fonctionne. Toutefois, grâce à
l’information secrète que constitue le plan de montage de la montre, il est bien plus
facile de reconstruire la montre.
4. E xercice : écrivez un message sur une assiette, cassez l’ assiette en mille m orceaux, et donnez
ensuite les morceaux à un ami. Demandez-lui de lire le message. Constatez à quel point votre ami est
impressionné par cette fonction à sens unique.
5. Il existe des applications cryptographiques des fonctions à sens unique tou t court (voir § 3.2).
6. N ote du traducteur : les fonctions de hachages sont parfois appelées « fonctions à adressage
dispersé ».
2.5 Communications à l’aide d’un cryptosystème à clef publique 33
octet qui serait le résultat du ou exclusif de tous les caractères de la chaîne donnée.
Le but de l’opération est de déterminer une empreinte digitale de la chaîne de caractères
d’entrée. Cette empreinte permettrait de déterminer si une autre chaîne a des chances
d’être identique à celle pour laquelle l’empreinte a été calculée. Comme les fonctions
de hachage ont la caractéristique de faire correspondre plusieurs valeurs d ’entrée dif
férentes à une même valeur de sortie, on ne peut pas s’en servir pour déterminer avec
certitude si deux chaînes sont égales mais on peut l’utiliser pour avoir une garantie
raisonnable d ’égalité.
Une fonction de hachage à sens unique est une fonction de hachage qui est aussi une
fonction à sens unique ; il est aisé de calculer l’empreinte à partir de la chaîne d ’entrée
mais il est difficile d’engendrer des chaînes qui ont une certaine empreinte. La fonction
de hachage du paragraphe précédent n’est pas à sens unique : étant donné un octet, il
est trivial d’engendrer une chaîne dont le « ou exclusif » de ses caractères donne cet
octet-là. Vous ne pourriez pas faire cela pour des fonctions de hachage à sens unique.
Avec une bonne fonction de hachage à sens unique, il est aussi difficile de produire
deux chaînes ayant la même empreinte.
La fonction de hachage est publique; il n’y a pas de secret dans l’opération. Une fonction
de hachage est sûre parce qu’elle est à sens unique. La sortie ne dépend pas de l’entrée
de manière observable. Tout changement d ’un bit quelconque à l’entrée entraîne le
changement, en moyenne, de la moitié des bits du résultat. Etant donné une empreinte
il est irréalisable par calcul de trouver une chaîne ayant cette empreinte.
Pensez à cela comme un moyen d ’associer une empreinte à des fichiers. Si vous vou
lez vérifier que quelqu’un possède un fichier donné (que vous avez aussi) sans qu’il
vous l’envoie, vous lui demandez alors l’empreinte du fichier. S’il vous envoie la bonne
empreinte, alors il est très probable que la personne a le fichier en question. C ’est
particulièrement adapté aux transactions financières où l’on ne veut pas qu’un retrait
de cent francs devienne un retrait de mille francs. Normalement, vous utiliseriez une
fonction de hachage à sens unique sans clef de telle manière que n’importe qui puisse
calculer l’empreinte. Si vous voulez que seul votre correspondant soit capable de la
calculer, alors lisez le paragraphe suivant.
naison, peut ouvrir le coffre et prendre le document. Toute personne qui ne connaît
pas la clef n’a pas d’autre ressort que d ’apprendre l’art de percer les coffres-forts.
En 1976, Whitfîeld D i f f i e et Martin H e l l m a n ont changé ce paradigme de la cryp
tographie à tout jamais [494]7. Ils ont décrit la cry p to g ra p h ie à c le f publique. Au
lieu d ’une clef, il y a deux clefs différentes : une publique et une privée. De plus, il est
difficile de calculer la clef privée à partir de la clef publique. Toute personne peut à
l’aide de la clef publique chiffrer un message mais elle ne peut pas le déchiffrer. Seule la
personne en possession de la clef privée peut déchiffrer le message. C ’est comme si quel
qu’un avait changé le coffre-fort de la cryptographie en une boîte aux lettres. Mettre
une lettre dans la boîte revient à chiffrer avec la clef publique, tout le monde peut le
faire. Il suffit de la glisser dans la fente. Sortir le courrier de la boîte revient à déchiffrer
avec la clef privée. C ’est difficile en général, il faut un chalumeau. Cependant, celui
qui détient le secret (la clef physique de la boîte aux lettres) peut facilement retirer le
courrier de la boîte.
Mathématiquement, le procédé est basé sur une fonction à sens unique à brèche secrète
décrite ci-dessus. Le chiffrement est la direction facile La clef publique constitue les
instructions pour le chiffrement : tout le monde peut chiffrer un message. Le déchif
frement est la direction difficile. C ’est suffisamment difficile pour que des gens avec
des ordinateurs C r a y et des milliers (ou même des millions) d’années à leur disposi
tion ne puissent pas déchiffrer les messages sans connaître le secret. Le secret, ou la
brèche secrète, est la clef privée. Avec ce secret, le déchiffrement est aussi facile que le
chiffrement.
Voici comment Alice peut envoyer un message à Bernard en utilisant la cryptographie
à clef publique :
3° Alice chiffre son message en utilisant la clef publique de Bernard et lui envoie
le résultat.
7. La N SA prétend avoir eu connaissance du con cept dès 1966, mais ne l’a jam ais prouvé.
2.5 Communications à l’aide d’un cryptosystème à clef publique 35
Dans le premier protocole, Bernard devait envoyer sa clef publique à Alice avant qu’elle
ne puisse lui envoyer un message. Le second protocole est plus proche du courrier
traditionnel. Bernard n’est pas concerné par le protocole tant qu’il ne lit pas son
courrier.
Cryptosystèmes hybrides
Les premiers algorithmes à clef publique furent publiés à l’époque où il était question
de prendre le DES comme standard. Il en résulta une sorte de politique partisane dans
le milieu de la cryptographie. D i f f i e la décrivit dans ces termes [492] :
- Les algorithmes à clef publique sont lents. Les algorithmes à clef secrète sont
généralement au moins 1000 fois plus rapides que les algorithmes à clef publique.
Il est vrai que les ordinateurs sont de plus en plus rapides et qu’ils pourront
dans quinze ans utiliser la cryptographie à clef publique aussi rapidement que la
cryptographie à clef secrète aujourd’hui. Mais les besoins en bande passante aug
mentent aussi et on aura toujours besoin de chiffrer des données plus rapidement
que cela n’est possible avec la cryptographie à clef publique.
36 Chapitre 2 Briques élémentaires
- Les cryptosystèmes à clef publique sont vulnérables aux attaques à texte en clair
choisi. Si C = E(Ai) où A i est un texte en clair parmi n textes en clair possibles,
alors il suffit à un cryptanalyste de chiffrer les n messages et de comparer les
textes chiffrés résultant avec C (la clef de chiffrement est publique). Il ne pourra
pas trouver la clef de déchiffrement de cette manière, mais il pourra déterminer
M.
Une attaque à texte en clair choisi peut être particulièrement efficace s’il y a relative
ment peu de messages chiffrés possibles. Par exemple, si A i est un montant en francs
inférieur à un million, cette attaque marchera; le cryptanalyste essaye les un million
de montants possibles. (Le chiffrement probabiliste résoud ce problème; voir § 23.15.)
Même si A i n’est pas aussi clairement défini, cette attaque peut être très efficace.
Savoir simplement qu’un texte chiffré ne correspond pas à un texte en clair particulier
peut s’avérer une information utile. Un cryptosystème à clef secrète ne présente pas
ce défaut car un cryptanalyste ne peut pas faire des chiffrements d’essai avec une clef
inconnue.
Dans la plupart des applications pratiques, la cryptographie à clef publique est utilisée
pour protéger et distribuer les clefs de session, et ces clefs d e session sont utilisées
dans des algorithmes à clef secrète pour protéger les messages transmis [879]. Cela est
parfois appelé im c r y p to sy stè m e hybride.
E B{k)
3° Bernard utilise sa clef privée pour déchiffrer le message d’Alice et ainsi retrou
ver la clef de session.
D B(EB(k)) = k
4° Alice et Bernard utilisent alors la même clef de session pour chiffrer leur
conversation.
à l’Université de Berkeley en Californie. Son devoir de fin dânnée, soumis bien avant
la fin de l’année avait pour sujet le problème des « Communications privées par des
canaux peu sûrs » [1073]. Hoffman ne put comprendre l’idée de Merkle et ce dernier
abandonna peut-être le cours. Il continua de travailler sur le problème, malgrès un
échec continuel à faire comprendre ces résultats.
La technique de Merkle était basée sur des « énigmes » plus faciles à résoudre pour
l’expéditeur et le destinataire que pour un espion. Voici comment Alice envoie un
message chiffré à Bernard sans avoir besoin d’échanger une clef avec lui.
2° Alice choisi un message au hasard et opère une attaque exhaustive pour retrou
ver le texte en clair. Cela demande un travail important mais pas impossible.
3° Alice chiffre son message secret avec la clef qu’elle a récupérée et l’envoie à
Bernard avec x.
4° Bernard connaît la clef secrète y qu’il avait mise dans le message x, aussi
peut-il déchiffrer le message.
Estelle peut casser ce système, mais elle doit faire beaucoup plus de travail que Alice
ou Bernard. Pour retrouver le message de l’étape 3, elle doit effectuer une attaque
exhaustive sur chacun des 220 messages de l’étape 1; cette attaque a une complexité
de 240. La valeur de x n’aidera pas Estelle car elle a été donnée au hasard à l’étape 1.
En général, Estelle doit effectuer un effort environ égal au carré de celui produit par
Alice.
Cet avantage de n par rapport à n2 est petit pour les standards cryptographiques mais
cela peut suffir dans certaines circonstances. Si Alice et Bernard pauvent tester dix
mille clefs par seconde, il leur faudra chacun une minute pour mener à bien leur étape
et une autre minute pour envoyer les énigmes de Bernard à Alice par une liaison à 1,544
mégaoctets. Si Estelle dispose de moyens de calcul comparables, il lui faut environ un
an pour casser le système. Il existe d ’autres algorithmes encore plus difficiles à casser.
2. Une signature ne peut pas être falsifiée (imitée). La signature est la preuve que
le signataire a délibérément signé le document.
38 Chapitre 2 Briques élémentaires
4. Un document signé est inaltérable. Une fois le document signé, il ne peut plus
être modifié.
5. Une signature ne peut pas être reniée. La signature et le document sont des
objets physiques. Le signataire ne peut pas prétendre plus tard ne pas avoir
signé le document.
Dans la réalité, aucune de ces affirmations n’est, tout à fait vraie. Les signatures peuvent
être falsifiées; des signatures peuvent être transférées d ’un document à l’autre. Les
documents peuvent être altérés après avoir été signés. Toutefois, nous acceptons de
vivre avec ces problèmes : c ’est difficile de tricher et on risque d’être démasquer.
On aimerait bien faire la même chose avec des ordinateurs mais il y a des problèmes.
Premièrement, les fichiers informatiques sont facilement copiables. Même si la signature
de quelqu’un est difficile à falsifier (une image graphique de la signature manuscrite,
par exemple), il est facile de la transférer d ’un document à un autre par « couper,
coller ». La simple présence d ’une telle signature ne garantit rier. Deuxièmement, il
est facile de modifier un document après qu’il a été signé sans laisser de traces de la
modification.
1° Alice chiffre son message pour Bernard avec la clef K a et envoie le résultat à
Ivan.
2° Ivan déchiffre le message avec K a -
3° Ivan assemble le message déchiffré et un avis comme quoi il a reçu ce message
d ’Alice. Ivan chiffre le résultat avec K b -
4° Bernard déchiffre le tout avec K b - Il peut maintenant lire le message et la
certification d’Ivan comme quoi Alice a bien envoyé ce message.
Comment Ivan sait-il que le message vient bien d ’Alice et non pas d’un imposteur? Il
déduit cela du message chiffré. Comme seuls lui et Alice partagent la clef secrète, seule
Alice peut chiffrer un message avec cette clef.
Est-ce aussi valable qu’une signature sur papier? Voyons caractéristique par caracté
ristique :
1. La signature est authentique. Ivan est un arbitre en qui on a confiance et Ivan
sait que le message venait d’Alice. Le certificat d ’Ivan sert de preuve à Bernard.
2.6 Signatures numériques 39
2. La signature est infalsifiable. Seule Alice (et Ivan mais tout le monde lui fait
confiance) connaît K A, donc seule Alice peut envoyer un message chiffré avec K A
à Ivan. Si quelqu’un avait essayé de se faire passer pour Alice, Ivan s’en serait
rendu compte immédiatement à l’étape 2 du protocole et n’aurait pas certifié
l’authenticité du message.
5. La signature ne peut pas être reniée. Même si plus tard, Alice prétend ne pas
avoir envoyé le message, le certificat d ’Ivan démontre le contraire. Rappelez-vous
que tout le monde a confiance en Ivan, ce qu’il dit est la vérité.
Si Bernard veut montrer le document signé par Alice à Christine, il ne peut pas révéler
sa clef secrète à Christine. Il doit passer par Ivan également :
Ces protocoles sont valables mais ils sont coûteux en temps pour Ivan. Il doit passer ses
journées à chiffrer et déchiffrer des messages, jouant le rôle d’intermédiaire pour toute
paire de correspondants qui veulent s’échanger des documents signés. Il doit garder une
copie de chaque message (encore que ceci puisse-être évité en envoyant au destinataire
une copie du message crypté de l’expéditeur). Ivan va devenir le goulot d ’étranglement
du système de communication même s’il est incarné par un programme informatique
sans âme.
Ce qui est plus ardu reste encore de créer et d ’entretenir quelqu’un comme Ivan, quel
qu’un en qui tout le monde dans le réseau a confiance. Ivan doit être infaillible ; même
s’il ne fait qu’une erreur sur un million de signatures, personne n’aura confiance en
lui. Ivan doit être totalement sûr. Si sa base de données de clefs secrètes venait à être
divulguée ou si quelqu’un modifiait son code, toute signature deviendrait inutilisable.
Des faux documents prétendument signés des années auparavant pourraient fleurir. Il
en résulterait le chaos. Cela pourrait marcher en théorie mais il en va autrement de la
pratique.
40 Chapitre 2 Briques élémentaires
Ce protocole est nettement meilleur que le précédent. Ivan n’est pas nécessaire ni pour
signer, ni pour vérifier les signatures8. Alice et Bernard n’ont même pas besoin d’Ivan
pour résoudre les contestations : si Bernard ne peut effectuer l’étape 3, alors il sait que
la signature n’est pas valide.
Ce protocole a aussi les propriétés que nous recherchons :
1. La signature est authentique: quand Bernard vérifie le message avec la clef pu
blique d’ Alice, il sait qu’Alice l’a signé.
5. La signature ne peut pas être reniée. Bernard n’a pas besoin de l’aide d ’Alice
pour vérifier sa signature.
8. II est nécessaire pour assurer que la clef publique d ’A lice est bien la sienne.
2.6 Signatures numériques 41
compte d ’Alice au compte de Bernard. Bernard qui est un personnage peu recomman-
dable garde une copie du chèque numérique. La semaine suivante, il peut l’apporter de
nouveau à la banque (ou même à une autre banque). La banque vérifie la signature et
transfère l’argent d ’un compte à l’autre. Si Alice ne vérifie jamais ses relevés bancaires,
Bernard peut continuer ainsi ad vitam aeternam.
Pour éviter cela, les signatures numériques contiennent souvent une datation (date +
heure) Cette datation de la signature est attachée à l ’ensemble du message et signée
avec le reste du message. La banque stocke ces datations dans une base de données.
Dès lors, si Bernard essaie d ’encaisser le chèque d’Alice une deuxième fois, la banque
compare la datation avec sa base de données. Comme la banque à déjà honoré ce chèque
avec la même datation, la banque appelle la police. Bernard passe alors quhize ans en
prison et occupe son temps libre à apprendre les protocoles cryptographiques.
La vitesse de ce procédé est beaucoup plus élevée et comme les chances d ’avoir deux
documents différents ayant la même empreinte de 160 bits sont seulement de 1 sur 2160,
tout le monde peut sans crainte identifier la signature de l’empreinte à la signature du
document lui-même. Si la fonction utilisée n’est pas à sens unique, il serait aisé de créer
plusieurs documents ayant la même empreinte et d ’amener quelqu’un à les signer tous
à son insu en ne lui faisant signer qu’un seul. Ce protocole n’est pas valable sans une
fonction de hachage à sens unique.
Ce protocole a d ’autres avantages. Premièrement, la signature peut être gardée sépa
rément du document. Deuxièmement, pour le destinataire, les exigences en espace de
stockage pour le document et la signature sont beaucoup plus restreintes. Un système
d’archivage peut utiliser ce type de protocole pour vérifier l’existence d ’un document
sans stocker son contenu. La base de données centrale ne stockerait que les empreintes
des fichiers. Elle ne doit avoir aucun accès aux fichiers ; les utilisateurs envoient leurs
Chapitre 2 Briques élémentaires
Algorithmes et terminologie
Il y a de nombreux algorithmes de signature numérique. Tous sont des algorithmes à
clef publique : il y a une information secrète pour signer les documents et il y a une
information publique pour vérifier les signatures. Parfois le procédé de signature est
appelé ch iffrem en t avec une c le f p riv é e et le procédé de vérification est appelé
déch iffrem en t avec une c le f pu bliqu e. Cela prête à confusion et n’est valable que
pour un seul algorithme, R SA . Et diffients algorithmes présentent des différences de
réalisation. Par exemple, l’utilisation de fonctions de hachage à sens unique et/ou
de datations ajoute des étapes aux procédés de signature et de vérification. Plusieurs
algorithmes peuvent être utilisés pour des signatures numériques mais pas pour chiffrer.
En général, je ferai référence aux procédés de signature et de vérification sans plus
entrer dans le détail des algorithmes utilisés. Signer un message avec une clef privée K
est noté :
Sk ( M )
Vk ( M) .
Signatures multiples
Comment Alice et Bernard peuvent-ils signer le même document numérique? Sans les
fonctions de hachage à sens unique, il y a deux façons de procéder. Dans le premier
cas, Alice et Bernard signent séparément des copies du document lui-même. Le message
résultant aura le double de la taille du document original. Dans le deuxième cas, Alice
signe le document en premier et ensuite Bernard signe la signature d’Alice. Cela marche
sauf qu’il est impossible de vérifier la signature d’Alice sans vérifier celle de Bernard.
Si une empreinte du document est signée en lieu et place du document lui-même, alors
le protocole pour la signature multiple est facile :
Alice et Bernard peuvent faire les étapes 1 et 2 en série ou en parallèle. Dans l’étape
5, Christine peut vérifier n’importe quelle signature sans vérifier l’autre.
5° Alice vérifie le message que Ivan a envoyé à Bernard. Si elle n’a pas émis le
message, elle le fait rapidement savoir.
Un autre protocole utilise Ivan après le fait [213]. Après avoir reçu un message signé,
Bernard peut en envoyer une copie à Ivan pour vérification. Ivan peut attester de la
validité de la signature d’Alice.
sur le territoire de leur homologue pour contrôler les essais nucléaires réellement effec
tués. Le problème était que la nation qui contrôlait voulait être sûre que l’homologue
ne truquait pas les données produites par les sismographes placés sur son sol. De plus,
chaque nation voulait s’assurer que les sismographes n’envoient que les informations
spécifiquement nécessaires au contrôle.
Les techniques d ’authentification traditionnelles permettaient de faire face au premier
problème mais seules les signatures numériques permettaient de faire face aux deux
problèmes. Grâce à ces dernières, la nation contrôlée pouvait lire les données des sis
mographes sur son territoire et la nation qui contrôle savait que les données n’avaient
pas été falsifiées.
Sa ( M )
2° Alice chiffre le message signé avec la clef publique de Bernard et lui envoie le
résultat.
E b (Sa ( M ) )
D b (E b (Sa { M ) ) ) = S a { M )
Va (Sa ( M ) ) = M
Il semble naturel de signer avant de chiffrer. Quand Alice écrit une lettre, elle la signe
et le met ensuite dans l’enveloppe. Si elle met la lettre non signée dans l’enveloppe
et signe ensuite l’enveloppe, alors Bernard pourrait craindre que la lettre n’aie été
remplacée. Si Bernard montrait à Christine la lettre et l’enveloppe d’Alice, Christine
pourrait l’accuser de mentir sur la lettre qui est arrivée dans l’enveloppe.
En matière de correspondance aussi il est prudent de signer avant de chiffrer. C ’est
non seulement plus sûr — un adversaire ne peut retirer la signature d’un message pour
y mettre la sienne — mais il faut prendre en compte des considérations légales: si le
signataire ne peut pas voir le texte qu’il signe, sa signature pourrait alors être contestée
au vues de la loi [1323]. De plus, il existe des attaques cryptanalytiques contre cette
technique utilisée avec des signatures R S A (voir § 19.3).
Alice n’a aucune raison d’utiliser la même paire clef publique, clef privée pour chiffrer
et signer. Elle peut avoir deux paires de clef: une pour chiffrer et une pour signer. La
Ü.7 Signatures numériques avec chiffrement
séparation présente des avantages: elle peut livrer sa clef de chiffrement à la police sans
compromettre sa signature, une clef peut être mise en dépôt (voir § 4.13) sans affecter
l’autre, et les clefs peuvent avoir des tailles différentes ou encore expirer à des dates
différentes.
Bien sûr, les messages doivent être datés pour éviter qu’ils ne soient réutilisés. La
datation peut aussi aider à se prémunir contre d’autres ennuis comme celui décrit dans
le paragraphe suivant.
1° Alice signe un message avec sa clef privée, le chiffre avec la clef publique de
Bernard et lui envoie le résultat.
E b {Sa { M) )
Va (D b (E b (Sa ( M )))) - M
3° Bernard signe le message avec sa clef privée, le chiffre avec la clef publique
d’Alice et envoie le résultat à Alice.
E A(SB( M ) )
E m {D b {E b {D a {M)))) = E m {D a { M) ) .
Il est possible de modifier le protocole afin qu’Alice chiffre le message avant de le signer.
Bien que cela puisse être utile dans certaines circonstances — quand un intermédiaire
doit pouvoir vérifier la signature sans être capable de lire le message — en général c ’est
mieux de chiffrer tout. Pourquoi donner de l’information à Estelle après tout?
remplacer la clef publique de Bernard par une de son choix. Après cela, Bernard ne
pourrait plus lire les messages qui lui seraient destinés tandis que Martin le pourrait.
Même si les clefs publiques sont stockées dans une base de données sûre, Martin peut
encore remplacer une clef par une autre pendant sa transmission. Pour éviter cela, Ivan
peut signer chaque clef publique avec sa propre clef privée (voir § 2.6). Quand Ivan
fait cela, il agit comme une Autorité d ’Authentification de Clefs ou comme un
Centre de Distribution de Clefs (appelons-le C D C en abrégé). Dans les réalisations
pratiques, le C D C signe un message composite contenant le nom de l’utilisateur, la clef
publique et toute autre information importante concernant l’utilisateur. Ce message
composite signé est stocké dans la base de données du C D C . Quand Alice obtient la
clef publique de Bernard, elle vérifie la signature du C D C pour s’assurer de la validité
de la clef qu’elle a obtenue.
En analyse finale, cela ne rend pas les choses impossibles pour Martin, juste plus
difficiles. Alice a encore la clef publique du C D C stockée quelque part. Martin doit
remplacer cette clef par la sienne, fausser la base de données et remplacer les clefs
valides par les siennes toutes signées avec sa clef privée comme s’il était le C D C et
alors il est arrivé à ses fins. Même des signatures sur papier peuvent être contrefaites si
Martin s’en donne la peine. Comme il a été dit précédemment, cela sera raconté dans
les moindres détails au paragraphe 3.1.
fois. Entrez la même chose dans deux ordinateurs identiques et le même résultat sera
produit par chacun d ’eux. Il n’y a qu’un ensemble fini d ’états dans lesquels peut se
trouver un ordinateur (un grand nombre fini, mais un nombre fini toutefois) et ce qui
sort sera toujours une fonction déterministe de ce qui entre et de l’état de l’ordinateur.
Cela veut dire que tout générateur aléatoire de nombres sur ordinateur (du moins, sur
une machine de Turing) est, par définition, périodique. Tout ce qui est périodique est,
par définition, prévisible. Et ce qui est prévisible n’est pas aléatoire. Un vrai générateur
aléatoire de suites nécessite une entrée vraiment aléatoire ; un ordinateur ne peut pas
fournir cela.
Suites pseudo-aléatoires
Le mieux que peut produire un ordinateur est un gén érateu r p seu d o-a léa toire de
suites. Qu’est-ce? Beaucoup de gens se sont attaqués au problème de définir cela
formellement, mais je m ’abstiendrai ici. La période de la suite doit être suffisamment
longue de telle manière qu’une suite finie de longueur raisonnable — c ’est-à-dire une
suite qui soit utile dans un contexte donné — ne soit pas périodique. En d’autres
termes, si vous avez besoin d ’une suite d’un milliard de bits aléatoires, ne choisissez
pas un générateur qui a une période de 16000 bits. Ces sous-suites non périodiques
relativement courtes, doivent être autant que possible indiscernables d ’une suite aléa
toire. Par exemple, elles doivent avoir le même nombre de 1 que de 0 ; à peu près la
moitié des segments (suites de bits ayant la même valeur) doivent être de longueur 1,
un quart de longueur 2, un huitième de longueur 3, etc. On ne doit pas pouvoir les
compresser. Les distributions des segments de 0 et des segments de 1 doivent être les
mêmes [645, 864, 106, 1359]. Ces propriétés peuvent être mesurées empiriquement et
comparées aux prévisions statistiques en utilisant un test en y 2.
Pour nos besoins, un générateur de suites est pseudo-aléatoire s’il satisfait la propriété
suivante :
1. Il a l’air aléatoire. Cela veut dire qu’il réussit tous les tests statistiques que l’on
peut trouver. (Commencez par ceux décrits dans [864].)
Pas mal d’efforts ont été investis pour produire des bonnes suites pseudo-aléatoires
sur ordinateur. Les descriptions de tels générateurs abondent dans la littérature aca
démique, avec des tests variés sur leur caractère aléatoire. Tous ces générateurs sont
périodiques (il n’y a pas moyen de l’éviter) ; mais avec des périodes potentielles de 2256
bits et plus, il peuvent être utilisés pour les applications les plus exigeantes.
Mais le problème des corrélations non désirées et des résultats étranges est toujours
présent. Tout générateur déterministe en produira si vous l’utilisez d’une certaine façon.
Et c’est cette propriété que le cryptanalyste utilisera pour attaquer le système.
2. Il est imprévisible. Il doit être impossible par calcul de prédire quel sera le bit aléa
toire suivant, connaissant complètement l’algorithme ou le matériel qui engendre
la suite et connaissant tous les bits déjà engendrés.
La sortie d’un générateur satisfaisant ces trois propriétés conviendrait pour engendrer
un masque jetable, générer des clefs ou pour toute autre application cryptographique
qui a besoin d ’un générateur vraiment aléatoire. La difficulté est de déterminer si une
suite est vraiment aléatoire. En chiffrant de manière répétée une chaîne avec DES et
une clef fixée, on obtient une suite qui a l’air aléatoire; vous ne pourrez pas savoir si elle
n’est pas aléatoire, à moins d ’employer l’équipe de la NSA qui travaille sur le DES.
Chapitre 3
Protocoles élémentaires
*
3.1 Echange de clefs
Une technique cryptographique courante consiste à utiliser une clef différente pour
chiffrer chaque conversation entre deux individus. On parlera alors de clef de session
parce qu’elle n’est utilisée que pour une session particulière de communication. Comme
on le vera au paragraphe 8.5, les clefs de session sont utiles car elles n ’existent que
durant la durée de la communication. Il n’est pas simple de faire aboutir cette clef de
session commune entre les mains des participants de la conversation.
1° Alice appelle Ivan et demande une clef de session pour communiquer avec
Bernard.
2° Ivan engendre aléatoirement une clef de session. Il chiffre deux copies de celle-
ci, l’une avec une clef secrète qu’il partage avec Alice, et l’autre avec une clef
secrète qu’il partage avec Bernard. Ivan envoie les deux copies à Alice.
Ce protocole repose sur la sécurité absolue de Ivan qui sera plutôt un programme
informatique de confiance qu’une personne de confiance. Si Martin corrompt Ivan,
tout le réseau est compromis. Il a alors à sa disposition toutes les clefs secrètes que
1. Le protocole passe sous silence le réel problèm e de la distribution de ces clefs secrètes; on fait
l’hypothèse q u ’elles sont en service et que M artin ne sait pas où elles se trouvent.
52 Chapitre 3 Protocoles élémentaires
Ivan partage avec tous les utilisateurs ; il peut lire tous les messages passés qu’il a
enregistrés et toutes les communications futures. Tout ce qu’il doit faire c’est placer
une écoute sur les lignes de communication et enregistrer le trafic des messages chiffrés.
L’autre inconvénient de ce système est que Ivan représente un potentiel goulot d ’étran
glement. Il doit participer à chaque échange de clef. Si Ivan se trompe, cela perturbe
tout le système.
4° Alice et Bernard utilisent alors la même clef de session pour chiffrer leur
conversation.
L’attaque de l’intercepteur
Tandis qu’Estelle ne peut pas faire mieux que tenter de casser l’algorithme à clef
publique, ou tenter une attaque à texte chiffré seulement contre les textes chiffrés,
Martin peut déchiffrer les messages entre Alice et Bernard. Martin est beaucoup plus
fort qu’Estelle. Non seulement il peut écouter les messages entre Alice et Bernard, mais
il peut aussi modifier des messages, détruire des messages et en insérer des nouveaux
de son cru. Martin peut se faire passer pour Bernard en s’adressantà Alice et se
faire passer pour Alice en s’adressant à Bernard. Voici comment l’attaque peut être
conduite :
1° Alice envoie sa clef publique à Bernard. Martin intercepte cette clef et envoie
sa propre clef publique à Bernard.
2° Bernard envoie sa clef publique à Alice. Martin intercepte cette clef et envoie
sa propre clef publique à Alice.
3° Quand Alice envoie un message à Bernard, chiffré avec ce qu’elle croit être
la clef publique de Bernard, Martin l ’intercepte. Comme ce message est en
fait chiffré avec sa clef publique, il le déchiffre avec sa clef privée, le chiffre à
nouveau avec la clef publique de Bernard et envoie le résultat à Bernard.
4° Quand Bernard envoie un message à Alice, chiffré avec ce qu’il croit être la
clef publique d’Alice, Martin l’intercepte. Comme ce message est en fait chiffré
avec sa clef publique, il le déchiffre avec sa clef privée, le chiffre à nouveau avec
la clef publique d’Alice et envoie le résultat à Alice.
3.1 Échange de clefs 53
Même si les clefs publiques d ’Alice et de Bernard sont stockées dans une base de
données, cette attaque peut être conduite. Il suffit que Martin intercepte la requête
d’Alice vers la base de données et qu’il envoie à Alice sa propre clef publique à la
place de celle de Bernard. Il peut faire la même chose avec Bernard et remplacer la clef
d’Alice par la sienne. Il peut même subrepticement pénétrer dans la base de données
et remplacer les clefs d’Alice et Bernard par sa clef publique. Le lendemain, il attend
simplement qu’Alice et Bernard dialoguent entre eux. Il intercepte alors les messages
et les modifie. Il a réussi.
L’attaque de l’intercepteur marche parce qu’Alice et Bernard n’ont aucun moyen de
vérifier qu’ils parlent bien l’un à l’autre. En faisant l’hypothèse que Martin est rapide
et qu’il n’introduit pas de délai notable dans le comportement du réseau, aucun des
deux ne peut soupçonner que quelqu’un est là entre eux deux en train d ’espionner toute
leur correspondance supposée confidentielle.
Protocole à cliquets
Le protocole à cliquets, inventé par Ron R i v e s t et Adi S h a m i r [1338] a de bonnes
chances de repousser l’attaque de l’intercepteur. Voici comment cela marche :
4° Bernard chiffre son message avec la clef publique d’Alice. Il envoie la moitié
du message chiffré à Alice.
7° Alice réunit les deux morceaux du message chiffré venant de Bernard et dé
chiffre le résultat avec sa clef privée.
Le point important est qu’une moitié de message est inutilisable sans l’autre moitié ;
on ne peut déchiffrer les moitiés séparément. Bernard ne peut lire aucune partie du
message d ’Alice avant l’étape 6 et Alice ne peut lire aucune partie du message de
Bernard avant l’étape 7. Il y a plusieurs moyens de réaliser cela :
Pour voir comment cela complique la vie de Martin, revoyons sa tentative de corruption
du protocole. Il peut toujours remplacer les clefs publiques d ’Alice et de Bernard par
sa propre clef publique dans les étapes 1 et 2. Mais maintenant, quand il intercepte
la première moitié du message d’ Alice à l’étape 3, il ne peut pas le déchiffrer avec sa
clef privée et le rechiffrer avec la clef publique de Bernard. Il doit inventer un nouveau
message et envoyer la moitié à Bernard. Quand il intercepte la moitié du message de
Bernard vers Alice à l’étape 4, il a le même problème. Il ne peut pas le déchiffrer avec
sa clef privée et le rechifîrer avec la clef publique d’Alice. Il doit inventer un nouveau
message et envoyer la moitié de celui-ci à Alice. Quand il intercepte les deux autres
moitiés des messages d ’Alice et de Bernard aux étapes 5 et 6, il est trop tard pour qu’il
puisse changer les nouveaux messages qu’il a inventés. La conversation entre Alice et
Bernard sera forcément complètement différente de ce qu’elle aurait dû être.
Martin peut peut-être appliquer ce schéma. S’il connaît Alice et Bernard suffisamment
pour imiter les deux côtés d ’une conversation entre eux, alors ils ne se rendront jamais
compte qu’ils sont dupés. Mais c ’est certainement plus difficile pour Martin que de
simplement intercepter et lire les messages qu’ils s’échangent.
réseaux informatiques, c’est plus facile et il semble que cela devienne plus facile chaque
jour. Il est possible de duper les protocoles d ’intercommunication et d ’attaquer les
routeurs d’un réseau; les attaque actives ne signifient pas quelqu’un dans les égouts
avec un stétoscope et elles ne sont pas réservées aux agences dont le nom comporte
trois lettres.
E k (M)
E b ( K)
E k (A4),E b ( K )
Pour mieux se prémunir contre une attaque de l’intercepteur, Alice peut signer
la transmission.
5° Bernard déchiffre la clef de session, K , en utilisant sa clef privée.
6° Bernard déchiffre le message d’Alice en utilisant la, clef de session.
C’est avec ce système hybride que la cryptographie à clef publique est souvent utilisée
dans les systèmes de communication. Elle peut être combinée aux signatures numé
riques, à la datation, ou à tout autre protocole de sécurité.
E k (A4)
2° Alice obtient les clefs publiques de Bernard, Christine et David par la base de
données.
3° Alice chiffre K avec la clef publique de Bernard, chiffre K avec la clef publique
de Christine et chiffre K avec la clef publique de David.
E b (K) , E c ( K) ,E d (K)
56 Chapitre 3 Protocoles élémentaires
4° Alice diffuse le message chiffré et toutes les clefs chiffrées à qui veut bien les
recevoir.
E b (K),Ec (K),Ed (K),Ek ( M )
Cet algorithme peut être réalisé dans un réseau « stocke-et-relaie ». Un serveur central
peut relayer le message d’Alice à Bernard, Christine et David avec chacun une version
chiffrée de la clef de session. Le serveur n’a pas à être sûr et il n’a pas à avoir la
confiance des utilisateurs car il ne peut déchiffrer aucun message.
3.2 Authentification
Quand Alice accède à un ordinateur (ou un distributeur de billets automatique, ou un
service de banque à domicile, ou tout autre type de terminal), comment l’ordinateur
peut-il savoir qui elle est? Comment l’ordinateur sait-il qu’elle n’est pas Estelle essayant
de se faire passer pour Alice? Traditionnellement, les mots de passe servent à résoudre
ce problème. Alice entre un mot de passe, et l’ordinateur confirme qu’il est correct.
Alice et l’ordinateur connaissent tous deux cette information secrète, et l’ordinateur le
demande à Alice chaque fois qu’elle essaie d’entrer en communication avec lui.
L’attaque de quelqu’un qui pénètre dans le système informatique et qui vole la liste
des mots de passe est moins à craindre, car l’ordinateur ne stocke plus la table des
mots de passe corrects mais bien la liste des résultats de l’application de la fonction à
sens unique aux mots de passe. Cette liste est inutilisable parce que la fonction à sens
unique ne peut pas être inversée pour retrouver les mots de passe.
utilisés. Il calcule alors la fonction à sens unique pour tous les 1000 000 mots de passe
et stocke le résultat.
Si chaque mot de passe a environ 8 octets, le fichier résultant n’aura pas plus de 8
méga-octets ; ce qui tient aisément sur quelques disquettes. Ensuite, Martin vole le
fichier des mots de passe chiffrés. Il compare les mots de passe chiffrés avec son fichier
des mots de passe chiffrés possibles et localise ceux qui sont identiques.
C’est une attaque par dictionnaire. Celle-ci est étonnamment efficace en pratique
(voir § 8.1). Le salage est un moyen de rendre cette attaque plus difficile. Le sel est
une chaîne aléatoire qui est jointe au mot de passe avant qu’il ne soit transformé par la
fonction à sens unique. Ensuite, le sel utilisé et le résultat de la fonction à sens unique
sont tous deux stockés dans la base de données. Si le nombre de valeurs de sel possibles
est suffisamment grand, cela empêche presque tout à fait l’attaque par dictionnaire
de mots de passe communs car Martin doit calculer les valeurs de la fonction à sens
unique pour chaque sel. C ’est un embryon de vecteur d ’initialisation (voir § 9.3).
L’idée ici est d’obliger Martin à chiffrer chacun des mots de passe de son dictionnaire
qu’il tente comme mot de passe de quelqu’un et ce pour chaque nouvelle personne et
non une fois pour toutes.
Il faut pas mal de sel. La plupart des systèmes U N IX n’utilisent que 12 bits pour
le sel. Même avec cela, Daniel K l e in a développé un programme qui retrouve 21 %
des mots de passe sur un système donné en à peu près une semaine [848, 849]. David
F e l d m e ie r et Philip K a r n ont rassemblé une liste d ’environ 732 000 mots de passe
communs combinés avec 4096 valeurs possibles de sel. Ils estiment qu’environ 30 %
des mots de passe d’un système donné peuvent être retrouvés grâce à cette liste [563].
Saler n’est par le remède universel; augmenter le nombre de bits du sel ne va pas
résoudre tous les problèmes. Le sel ne protège que contre les attaques par dictionnaires
contre un fichier de mots de passe chiffrés, mais non contre une attaque concertée
dirigée contre un seul mot de passe. Le salage masque le fait que certaines personnes
ont le même mot de passe sur plusieurs systèmes mais cela ne rend pas meilleurs des
mots de passe mal choisis.
SKEY
SKEY est un programme d’authentification dont la sécurité repose sur une fonction à
sens unique / . Il est facile à expliquer.
Pour mettre en place le système, Alice entre un nombre aléatoire R. L ’ordinateur calcule
f(R), f {f {R)) , f(.f(f(R))) et ainsi de suite cent fois. Notons ces nombres X i , . . . , x 10o-
L’ordinateur affiche la liste de ces nombres et Alice la met dans sa poche à l’abri.
L’ordinateur conserve aussi Xioi en clair dans une base de données à côté du nom
d’Alice.
La première fois qu’Alice veut se connecter, elle entre son nom et aqoo- L’ordinateur cal
cule f ( x ioo) et le compare avec arioiî s’il sont égaux, Alice est authentifiée. L’ordinateur
remplace alors aqoi par .x10o dans la base de données. Alice barre aqoo de sa liste.
Chaque fois qu’Alice se connecte, elle entre le dernier nombre x* qu’elle n’a pas encore
barré sur sa liste. L ’ordinateur calcule f{xf) et le compare avec xi + 1 qui se trouve dans
la base de donnée. Estelle ne peut pas obtenir d ’information intéressante car chacun
des nombres n’est utilisé qu’une seule fois, et la fonction est à sens unique. De cette
manière, un attaquant ne peut pas se servir de la base de données. Bien sûr, quand
58 Chapitre 3 Protocoles élémentaires
Alice est à court de nombres sur sa liste, elle doit refaire l’opération d ’initialisation du
système.
Personne d’autre n’a accès à la clef privée d’Alice et donc personne ne peut se faire
passer pour Alice. Ce qui est plus important encore : Alice n’envoie jamais sa clef privée
sur la ligne de communication vers l’ordinateur hôte. Estelle, qui écoute le protocole,
ne peut obtenir aucune information qui lui permette de deviner la clef privée ou de se
faire passer pour Alice.
La clef privée est longue et non mnémonique. De plus, elle sera manipulée automatique
ment par le logiciel et le matériel de communication de l’utilisateur. Le terminal d’Alice
doit donc être « intelligent » et Alice doit avoir confiance en lui, mais ni l’ordinateur
hôte à distance, ni le canal de communication n’ont à être sûrs.
En général, il est idiot de chiffrer des chaînes de caractères aléatoires envoyées par
un autre participant : des attaques telles que celles décrites dans le paragraphe 19.3
peuvent être montées.
Un protocole de preuve d ’identité sûr prend la forme plus compliquée suivante :
3° Alice effectue des calculs à partir des nombres aléatoires (ceux qu’elle avait
choisis et celui qui lui a été envoyé par l’ordinateur) et de sa clef privée. Elle
envoie le résultat à l’ordinateur hôte.
4° L ’ordinateur hôte effectue un calcul à partir des différents nombres qu ’il a reçus
d’Alice et de la clef publique d’Alice pour vérifier qu’Alice connaît bien sa clef
privée.
Si Alice n’a pas plus confiance en l’ordinateur hôte que l’ordinateur hôte n’a confiance
en Alice, alors Alice peut demander à l’ordinateur hôte de prouver son identité de la
même manière.
L’étape 1 peut paraître superflue et déroutante mais elle est nécessaire pour résister
à certaines attaques. Les sections 21.1 et 21.2 décrivent mathématiquement plusieurs
algorithmes et protocoles. Voyez aussi [946].
Martin peut monter avec succès une attaque de l’intercepteur (voir § 3.1) :
1° Alice et Bernard échangent leurs clefs publiques. Martin intercepte les deux
messages. Il remplace la clef publique de Bernard par la sienne et envoie le
résultat à Alice. Il remplace la clef publique d’Alice par la sienne et envoie le
résultat à Bernard.
2° Alice chiffre Pa avec la clef publique qu’elle croit être celle de Bernard et envoie
le résultat à Bernard. Martin intercepte le message, déchiffre P a avec sa clef
privée, rechiffre Pa avec la clef publique de Bernard et envoie le résultat à
Bernard.
3° Bernard chiffre Pg avec la clef publique qu’il croit être d’Alice et envoie le
résultat à Alice. Martin intercepte le message, déchiffre Pg avec sa clef privée,
rechiffre Pg avec la clef publique d’Alice et envoie le résultat à Alice.
Du point de vue d’Alice et Bernard, rien ne change. Mais maintenant, Martin connaît
Pa et Pg
60 Chapitre 3 Protocoles élémentaires
SKID
SKID2 et SK ID 3 sont des protocoles d’identification à clef secrète développés pour
le projet R IP E du programme R A C E [1316] (voir § 25.7). Ils utilisent une fonction
à sens unique à clef (un C A M , pour « Code d'Authentification de Messages », voir
§ 2.4) pour fournir la sécurité, et tous les deux font l’hypothèse qu’Alice et Bernard
partagent une clef secrète K .
SKID2 permet à Bernard de prouver son identité à Alice. Voici le protocole :
R b ,H k {R a ,Rb ,B)
Authentification de message
Quand Bernard reçoit un message de la part d ’Alice, comment est-il sûr de son authen
ticité? Si Alice a signé son message, c’est facile. La signature numérique suffit pour
convaincre n’importe qui de l’authenticité du message.
La cryptographie à clef secrète permet une part d’authentification. Quand Bernard
reçoit de la part d ’Alice un message chiffré avec la clef qu’il partagent, il sait qu’il
vient bien d’Alice. Personne d’autre ne connaît leur clef. Toutefois, Bernard n’a aucun
moyen de prouver ce fait à un troisième parti. Bernard ne peut pas montrer le message
à Ivan et le convaincre qu’il vient d ’Alice. Ivan peut être convaincu que le message
vient soit d ’Alice, soit de Bernard (car ils sont les seuls à posséder cette clef secrète),
mais il ne peut pas savoir lequel.
Si le message n’est pas chiffré, Alice pourrait aussi utiliser un CAM . Cela convaincra
aussi Bernard de l’authenticité du message, mais cela présente le problème que la
solution apportée par la cryptographie à clef secrète.
“ Note du traducteur: ce num éro perm et différencier les différentes utilisations d ’un mêm e protocole.
« Wide-Mouth Frog »
Le. protocole « Wide-Mouth Frog » [287, 288] est probablement le protocole de gestion
de clefs secrètes le plus simple qui utilise un serveur en qui l’on a confiance. Alice
et Bernard partagent chacun une clef secrète avec Ivan. Ces clefs ont elles-mêmes été
distribuées secrètement et avec garantie d ’authenticité par un autre canal externe dont
62 Chapitre S Protocoles élémentaires
nous admettrons qu’il est sûr. Ces clefs sont seulement utilisées pour la distribution
des clefs et non pas pour chiffrer des messages entre utilisateurs. Rien qu’en utilisant
deux messages, une clef de session est transférée d ’Alice à Bernard :
A , E a (Ta , B, K)
2° Ivan déchiffre le message d’Alice. Ivan combine une nouvelle datation, le nom,
d’Alice, et la clef de session aléatoire. Il chiffre le tout avec la clef secrètequ’il
partage avec Bernard. Ivan envoie le résultat chiffré à Bernard.
E B(TB, A , K )
L’hypothèse la plus risquée faite par ce protocole est qu’Alice est suffisamment com
pétente pour engendrer des clefs de session valables. Rappelez-vous qu’il n’est pas aisé
d’engendrer des nombres aléatoires ; le protocole fait peut-être trop confiance à Alice
à ce propos.
Yahalom
L’auteur de ce protocole est Y a h a l o m [187]. Comme dans le protocole précédent, Alice
et Bernard partagent une clef secrète avec Ivan [287, 288].
1° Alice combine son nom avec un nombre aléatoire et envoie le tout à Bernard:
A, R a
B , E b (A,R a ,R b )
E a ( B , K , R a ,R b ),E b (A, K)
4° Alice déchiffre le message chiffré avec sa clef secrète, extrait K , et confirme que
R a a la même valeur qu’à l’étape 1. Alice envoie à Bernard deux messages. Le
premier est le message qu’elle a reçu d’Ivan, chiffré avec la clef de Bernard. Le
deuxième est R B, chiffré avec la clef de session:
E b ( A , K) , E k (R b )
3.3 Authentification et échange de clefs 63
Finalement, Alice et Bernard sont convaincus qu’ils se parlent bien l’un à l’autre et
non pas à un tiers. La nouveauté ici c ’est que Bernard est le premier à contacter Ivan
qui n’envoie qu’un seul message à Alice.
Needham et Schroeder
Ce protocole, inventé par Roger N e e d h a m et Michael S c h r o e d e r [1159], utilise aussi
la cryptographie à clef secrète et Ivan.
2° Ivan chiffre, avec la clef secrète qu ’il partage avec Bernard, un message consti
tué d’une clef de session aléatoire et du nom d’Alice. Ensuite, il chiffre, avec la
clef secrète qu ’il partage avec Alice, un message constitué de la valeur aléatoire
d’Alice, du nom de Bernard, de la clef de session et du message chiffré avec la
clef secrète qu’il partage avec Alice. Finalement, il envoie à Alice le message
chiffré :
E a (Ra , B , K , E b (K,A))
3° Alice déchiffre le message et extrait K . Elle confirme que R a est bien la même
valeur qu’elle a envoyée à Ivan à l’étape 1. Ensuite, elle envoie à Bernard le
message qu ’lvan a chiffré avec la clef de Bernard :
E b (K,A)
E k {Bb )
E k {Rb — 1 )
6° Bernard déchiffre le message avec K et vérifie qu’il s ’agit bien de R b ~ 1.
Toutes ces allées et venues avec Ra , R b et R b —1 garantissent qu’il n’y a pas d’attaque
où les messages sont rejoués. La présence de R a à l’étape 3 confirme à Alice que le
message d’Ivan est légitime et non pas une répétition d ’une réponse à une exécution
antérieure du protocole. Quand Aüce déchiffre R b avec succès et qu’elle envoie R b — 1
chiffré à Bernard à l’étape 5, celui-ci est assuré que les messages d ’Alice ne sont pas
des répétitions de messages d’exécutions antérieures du protocole.
Le plus grand problème de sécurité avec ce protocole est que les vieilles clefs de session
ont de la valeur. Si Martin parvient à obtenir une ancienne clef de session K , il peut
64 Chapitre S Protocoles élémentaires
monter l’attaque suivante avec succès [467]. Tout ce qu’il doit faire c ’est enregistrer
les messages d ’Alice à Bernard pendant l’étape 3. Alors, une fois qu’il a K , il peut
prétendre être Alice :
E b (K ,A )
E k (R b )
E k {R b - 1)
Otway-Rees
Ce protocole utilise aussi la cryptographie à clef secrète [1234].
1° Alice engendre un message constitué d’un numéro d ’ordre, de son nom, du nom
de Bernard, et d’un nombre aléatoire, le tout chiffré avec la clef secrète qu’elle
partage avec Ivan. Elle envoie le message chiffré à Bernard avec le numéro
d ’ordre, son nom à elle et son nom à lui:
I , A , B , E a (R a ,I,A,B)
3° Ivan engendre une clef de session aléatoire. Il crée alors deux messages. L ’un
est composé du nombre aléatoire d’Alice et de la clef de session, et est chiffré
avec la clef qu ’il partage avec Alice. L ’autre est composé du nombre aléatoire
de Bernard et de la clef de session, et est chiffré avec la clef qu’il partage avec
Bernard. Il envoie les deux messages avec le numéro d’ordre à Bernard:
I , E a (RA jK ) , E b (R b , K )
4° Bernard envoie à Alice le message chiffré avec la clef d’Alice et avec le numéro
d’ordre:
I , E a {R a , K)
En émettant l’hypothèse que tous les nombres aléatoires sont corrects et que le numéro
d’ordre n’a pas changé en cours de route, Alice et Bernard sont maintenant convaincus
de leurs identités respectives et ils ont une clef secrète avec laquelle communiquer.
Kerberos
K e r b e r o s est une variante du protocole de Needham et Schroeder, il est présenté en
détail dans le paragraphe 17.4. Dans le protocole de base K e r b e r o s version 5, Alice et
Bernard partagent chacun des clefs avec Ivan. Alice veut engendrer une clef de session
pour dialoguer avec Bernard.
A ,B
2° Ivan engendre un message avec la datation, une longévité, une clef de ses
sion aléatoire, et l’identité d’Alice. Il chiffre cela avec la clef qu’il partage avec
Bernard. Ensuite il engendre un autre message avec la datation, la longévité,
la clef de session et l’identité de Bernard, et il chiffre le résultat avec la clef
qu’il partage avec Alice. Il envoie les deux messages chiffrés à Alice:
E a ( T, L,K,B) ,E b (T,L,K,A)
3° Alice engendre un message avec son identité et la datation, chiffre cela avec K
et envoie le résultat à Bernard. Alice envoie aussi à Bernard le message qu ’elle
a reçu d’Ivan, chiffré avec la clef de Bernard :
E k (T,A),E b (T,L,K,A)
Le protocole marche mais il présume que toutes les horloges sont synchronisées avec
l’horloge d’Ivan. En pratique, cet effet est obtenu en synchronisant les horloges à
quelques minutes près d ’une horloge de référence et en détectant les répétitions dans
l’intervalle de temps donné.
66 Chapitre 3 Protocoles élémentaires
Neuman-St ubblebine
Que ce soit par des erreurs de système ou par sabotage, il se peut que les horloges se
désynchronisent, Si cela arrive, il existe une attaque possible contre la plupart de ces
protocoles [646]. Si l’horloge de l’expéditeur est en avance, Martin peut intercepter un
message de l’expéditeur et le rejouer plus tard quand la datation devient à jour sur le
site du destinataire. Cette attaque peut avoir des conséquence désagréables.
Ce protocole présenté pour la première fois dans [821] et corrigé dans [1162] tente de
contrer cette attaque. C ’est une amélioration du protocole Yalahom qui en fait un
excellent protocole.
1° Alice engendre un message avec son nom, un nombre alâtoire et l’envoie à
Bernard.
A, R a
3° Ivan engendre une clef de session aléatoire et crée alors deux messages. Le
premier est constitué du nom de Bernard, du nombre aléatoire d ’Alice, de la
clef de session, et de la datation, le tout chiffré avec la clef qu'il partage avec
Alice. Le second se compose du nom d ’Alice, de la clef de session, et de la
datation, le tout chiffré avec la clef qu ’il partage avec Bernard. U envoie les
deux messages à Alice avec le nombre aléatoire de Bernard.
E a (B, R a ,K,T b ),E b (A,K,T b ),R b
4° Alice déchiffre le message chiffré avec sa clef, extrait K , et vérifie que R a est
bien le même quà l’étape 1. Alice envoie deux messages à Bernard. Le premier
est celui qu’elle a reçu de Ivan et qui est chiffré avec la clef de Bernard. Le
second est R b , chiffré avec la clef de session.
Si les nombres aléatoires et les datations correspondent, Alice et Bernard sont convain
cus de l’identité de l’un l’autre et ils partagent une clef secrète. Il n ’est pas nécessaire
que les horloges soient synchronisées car les datations proviennent toutes de l’horloge
de Bernard ; il vérifie uniquement des datations qu’il a engendrées lui-même.
Ce protocole présente un autre avantage: Alice peut utiliser le message qu’elle a reçu de
Ivan pour d ’autres authentifications avec Bernard jusqu’à une certaine limite de temps
fixée à l’avance. Supposons que Bernard et Alice ont terminé le protocole ci-dessus
et ont fini de communiquer. Alice et Bernard sont en mesure de mener une nouvelle
authentification en trois étapes, sans l’aide de Ivan.
1° Alice envoie à Bernard le message que Ivan lui avait envoyé à l’étape 3 et un
nouveau nombre aléatoire.
E b (A,K,T b ),R’a
3.3 Authentification et échange de clefs 67
R'B,E K (R'A)
3° Alice envoie à Bernard son nouveau nombre aléatoire chiffré avec leur clef de
session.
E k (R'b )
Les nouveaux nombres aléatoires empêchent toute attaque consistant à rejouer de vieux
messages.
DASS
Les protocoles DASS, développés par D i g it a l E q u i p m e n t C o r p o r a t i o n , per
mettent aussi l’authentification mutuelle et l’échange de clefs [606, 1523, 1522].
Contrairement aux autres protocoles, DASS utilise à la fois la cryptographie à clef
secrète et la cryptographie à clef publique. Alice et Bernard ont chacun une clef privée.
Ivan possède des copies signées de ces clefs privées.
2° Ivan envoie à Alice la clef publique de Bernard, K b , signée avec la clef privée
d’Ivan, T . Le message signé comprend le nom de Bernard.
St ( B , K b )
3° Alice vérifie la signature d’Ivan pour confirmer que la clef qu’elle a reçue est
bien la clef publique de Bernard. Elle engendre une clef secrète aléatoire, et une
paire aléatoire « clef publique, clef privée » : Kp. Elle chiffre une datation avec
K . Elle signe une longévité de clef, L, son identification, A , et K p avec sa clef
privée, K A. Enfin, elle chiffre K avec la clef publique de Bernard et signe le
résultat avec K p. Elle envoie le tout à Bernard:
4° Bernard envoie à Ivan (ce peut être un autre Ivan) un message contenant le
nom d’Alice:
A
5° Ivan envoie la clef publique d’Alice à Bernard, signée avec la clef publique
d’Ivan :
St ( K a )
6° Bernard vérifie la signature d ’lvan pour confirmer que la clef qu ’il a reçue est
bien la clef publique d’Alice. Il vérifie alors la signature d’Alice et récupère
K p. Il vérifie la signature et utilise sa clef privée pour retrouver K . Ensuite, il
déchiffre TA pour être sûr que le message n’est pas périmé.
68 Chapitre 3 Protocoles élémentaires
E k (Tb )
8° Alice déchiffre Tb avec K pour être sûre que le message n’est pas périmé.
D E C a réalisé les protocoles DASS. Vous trouverez plus d ’informations dans [35].
Denning-Sacco
Ce protocole utilise aussi la cryptographie à clef publique [467]. Ivan conserve une base
de donnée contenant toutes les clefs publiques.
A ,B
2° Ivan envoie à Alice la clef publique de Bernard, K b , qu’il signe avec sa propre
clef privée, T. Ivan envoie aussi à Alice la clef publique de celle-ci, K a , qu’il
signe avec sa clef privée.
St ( B , K b ),St ( A, K a )
3° Alice envoie à Bernard une clef de session aléatoire et une datation signés avec
sa clef privée et chiffrés avec la clef publique de Bernard, le tout accompagné
des deux clefs publiques signées.
À ce niveau, Alice et Bernard ont tous les deux la clef K , et peuvent communiquer en
sécurité.
Cela a l’air de fonctionner mais il n’en est rien. Après avoir terminer le protocole avec
Alice, Bernard peut se faire passer pour Alice [9]:
B ,C
2° Ivan envoie à Bernard les clefs publiques de Bernard et Christine qu ’il signe.
St ( B , K b ),St (C, Kc )
Christine croit maintenant parler avec Alice; Bernard l’a trompée avec succès. En fait,
Bernard peut tromper n’importe quel membre du réseau jusqu’à ce que la datation
expire.
Ce problème est facile à régler. Il suffit d ’ajouter les noms dans le message chiffré à
l’étape 3:
E b {Sa {A, B, K, T a )),St { B , K b ),St { A , Ka )
Maintenant Bernard ne peut plus réutiliser le vieux message d ’Alice avec Christine
parce qu’il est clairement dédié à la communication entre Alice et Bernard.
Woo-Lam
Ce protocole utilise encore la cryptographie à clef publique [1612, 1613]:
2° Ivan envoie à Alice la clef publique de Bernard qu’il signe avec sa propre clef
privée.
St ( K b )
3° Alice vérifie la signature de Ivan. Elle envoie alors à Bernard son nom et un
nombre aléatoire, qu’elle chiffre avec la clef publique de Bernard.
E k b ( A, R a )
4° Bernard envoie à Ivan son nom, celui d’Alice et le nombre aléatoire d’Alice
qu’il chiffre avec la clef publique de Ivan.
A , B , E k t {Ra )
5° Ivan envoie à Bernard la clef publique d’Alice qu’il signe avec sa propre clef
privée. Il lui envoie aussi le nombre aléatoire d’Alice, une clef de session aléa
toire, le nom d’Alice, le nom de Bernard, le tout signé avec la clef privée de
Ivan et chiffré avec la clef publique de Bernard.
S t ( K a ),EKb (St (Ra ,K, A, B))
7° Alice vérifie la signature de Ivan et son nombre aléatoire. Elle envoie alors à
Bernard le second nombre aléatoire qu’elle chiffre avec la clef de session.
E k (R b )
8° Bernard déchiffre son nombre aléatoire et vérifie qu’il n’a pas changé.
70 Chapitre 3 Protocoles élémentaires
Autres protocoles
Il y a beaucoup d ’ autres protocoles dans la littérature. Les protocoles X .509 sont
décrits dans le paragraphe24.9. Le protocole K r y p t o K n ig h t est décrit dans le pa
ragraphe 24.6. Le protocole: « Echange de Clef Chiffré » 3, est décrit dans le para
graphe 22.5.
K u p e r e e [695] est un autre protocole à clef publique. D ’autres protocoles à l’étude
utilisent beacons, un noeud du réseau en qui l’on a confiance et qui émet en continu
des nombre aléatoires authentifiés [783].
Les leçons
Il faut tirer quelques leçons importantes des protocoles précédents, à la fois de ceux
qui ont étés cassés et de ceux qui ne l’on pas été:
3. E n c r y p te d K e y E x ch a n g e.
3-4 Analyse formelle des protocoles d’authentification et d’échange de clefs 71
3. Modéliser les nécéssités d’une famille de protocoles à l’aide de régies logiques sur
l’anlyse de savoir et de croyance.
4. Développer une méthode formelle basée sur les propriétés de réécriture de termes
algébriques dans les sytèmes cryptographiques.
Une discussion complète de ces quatres approches et des recherches qui tournent autour
dépasse largement le sujet de ce livre. Voir [1055, 1357] pour une bonne introduction;
nous allons juste toucher du bout des doigts les avancées majeures dans le domaine.
La première approche traite un protocole cryptographique comme n’importe quel autre
programme et s’occuppe de prouver son exactitude. Certains chercheurs présentent un
protocole comme une machine à état fini [1455, 1357], d’autres utilisent des exten
sions du calcul des prédicats du premier ordre [823], et d ’autres encore analysent les
protocoles à l’aide de languages de spécification [1568]. Toutefois, ce n’est pas pareil
de prouver l’exactitude que de prouver la sécurité et cette approche ne permet pas
de détecter de nombreux protocoles défectueux. Bien qu’elle fût largement étudiée en
premier lieu, la plupart des travaux dans le domaine ont étés redirigés alors que la
troisième approche gagnait en popularité.
La deuxième approche utilise des systèmes experts pour déterminer si le protocole peut
atteindre un état indésirable (comme la divulgation d ’une clef par exemple). Si cette
approche est plus apte à détecter les failles, elle ne garantie pas la sécurité et ne fournit
pas non plus de technique pour découvrir des attaques. C ’est efficace pour déterminer
si un protocole a une faille donnée mais pas pour trouver une faille inconnue dans un
protocole. On trouvera des exemples d’une telle approche dans [997, 1525]; un système
à base de règles développé par l’armée américaine qui s’appelle l’ « Interrogateur4 » est
examiné dans [1098].
La troisième approche est de loin la plus populaire, elle fut lancée par Michael
B u r r o w s , Martin A b a d i et Roger N e e d h a m . Ils ont développé un modèle de logique
formelle pour l’analyse de savoir et de croyance appelé la logiqu e B A N [287, 288].
BAN est la logique la plus utilisée pour analyser les protocoles d’authentification. Elle
repose sur l’hypothèse que l’authentification est une fonction dépendant de l’intégrité
et de la fraîcheur, et elle permet de suivre la valeur de ces deux attributs au cours
du protocole au moyen de règles logiques. Malgrès le développement de beaucoup de
variantes et d ’extensions, la plupart des concepteurs de protocoles se réfèrent encore
aux premiers travaux.
La logique BAN ne permet pas de prouver la sécurité; elle permet seulement de rai
sonner sur l’authentification. Cette logique est simple et immédiate, facile à appliquer
4. L’« I n te r ro g a to r » en anglais.
72 Chapitre 3 Protocoles élémentaires
et pourtant utile pour détecter des failles. Certaines formulations de la logique BAN
ressemblent à ceci:
Et ainsi de suite. La logique B A N fournit aussi des règles pour raisonner sur des
croyances à l’intérieur d’un protocole. En appliquant ces règles aux formulations lo
giques concernant le protocole, on peut prouver certaines choses ou répondre à certaines
questions à propos du protocole. Par exemple, une des règles est celle de la signification
d’un message:
Si Alice croit que X n’a pu être prononcé que récemment et que Bernard
a dit A , alors Alice croit que Bernard croit A .
3. Insérer des formules logiques inhérentes aux formulations: des assertions à propos
de l’état du système après chaque formulation.
4. Applliquer les règles logiques aux assertions et aux hypothèses pour trouver les
croyances de chaque parti au cours du protocole.
Les auteur de la logique B A N « voient les protocoles idéalisés comme des spécifications
plus claires et plus complètes que les descriptions traditionnelles de la littérature... »
[287, 288]. D ’autres ne se laissent pas impressionner et critiquent cette étape car elle
pourrait dénaturer le protocole réel [1161, 1614], Voir [225, 1563] pour une poursuite
du débat. D ’autres détracteurs essayent de montrer que la logique BAN peut conduire
pour certains protocoles à des caractéristiques clairement fausses [1161] — voir [289,
1513] pour une réfutation — et que la logique BA N concerne seulement la confiance
et pas la sécurité [1513]. De plus amples débats se trouvent dans [1495, 707, 1011],
3-4 Analyse formelle des protocoles d’authentification et d’échange de clefs 73
Malgrès ces critiques, la logique B A N est un succès. Elle a contribué à trouver des failles
dans différents protocoles dont N E E D H A M -S C H R O E D E R et une première version d’un
protocole C C IT T X .509 [308]. Elle a permis de montrer des redondances dans beau
coup de protocoles comme Y a h a l o m , N e e d h a m - S c h r o e d e r , et K e r b e r o s . Bien
des articles publiés font état de la sécurité de leurs protocoles grâce à la logique BAN
[41, 1162, 80].
D’autres systèmes de logique ont étés publiés, certains sont des extensions de la logique
BAN [647, 588,1562, 829], et les autres sont basés sur B A N pour palier à des faiblesses
connues [1495, 1011]. La plus prisée parmi celles-là est G N Y [647] bien qu’elle présente
certains défauts [41]. Des probabilités de croyance ont été ajoutées à la logique B A N
avec un succès mitigé [296, 507]. D ’autres logiques formelles sont proposées dans [163,
799, 292]; dans [1518], les auteurs essayent de combiner les aspects de plusieurs logiques.
Enfin, il existe des logiques où les croyances peuvent changer avec le temps [1130, 1515].
Avec quatrième approche à l’analyse des protocoles cryptographiques, on modélise le
protocole par un système algébrique, on exprime l’état de connaissance des participants
en ce qui concerne le protocole, et on analyse alors s’il est possible d’ateindre certains
états. Cette approche n’a pas connu autant d ’égards que les logiques formelles, mais ça
ne saurait tarder. Michael M e r r i t t l’a utilisée le premier en montrant qu’un modèle
algébrique permet d’analyser les protocoles cryptographiques. On trouvera d’autres
approches dans [506, 1512, 1538, 1539, 1540, 1514, 1614],
L’Analyseur de Protocoles des laboratoires de recherche de la marine américaine5 est
probablement l’application la plus réussie de ces techniques [1516, 824, 1054, 1517]; il
a mis en évidence de nouvelles failles et d ’autre déjà connues dans quelques protocoles
[1052, 1053, 1055]. L 'Analyseur de Protocoles utilise des définitions d ’actions du type:
Pour utiliser l’ Analyseur de Protocoles, le protocole doit être spécifier avec les construc
teurs précédents. On distingue alors quatre phases dans l’analyse: la définition des
règles de transition pour les participants honêtes, la description des opérations acces
sibles à tous les participants (honêtes ou malhonêtes), la description des blocs de base
5. N a vy R esea rch L a b o ra to ry (N R L ).
74 Chapitre 3 Protocoles élémentaires
Chiffré avec les clefs : Doit être déchiffré avec les clefs :
Ka K b et K c
Kb K a et K c
Kc K a et K b
K a et K b KC
K a et K c Kb
K b et K c Ka
Diffusion de message
Imaginez que vous ayez cent opérateurs sur le terrain. Vous voulez envoyer des messages
à certains sous-ensembles de vos opérateurs mais vous ne connaissez pas à l’avance
la composition des sous-ensembles. Vous pouvez chiffrer le message séparément pour
chaque destinataire, ou créer des clefs pour chaque combinaison possible. La première
option augmente considérablement le trafic des communications ; la deuxième nécessite
un très grand nombre de clefs.
La cryptographie à clefs multiples est nettement plus facile. Considérons trois opéra
teurs: Alice, Bernard et Christine. Vous donnez à Alice K a et K b , à Bernard K b et
K c , et à Christine K a et K c - Ainsi, vous pouvez dialoguer avec n’importe quel sous-
ensemble d’entre eux. Si vous voulez envoyer un message que seule Aüce puisse lire,
chiffrez-le avec K c - Quand elle reçoit le message, elle le déchiffre avec K a et puis K r .
Si vous voulez envoyer un message que seul Bernard puisse lire, chiffrez-le avec K a - Si
vous voulez envoyer un message que seule Christine puisse lire, chiffrez-le avec K b - Si
vous voulez envoyer un message qu’Alice et Bernard puissent lire, chiffrez-le avec K a
et K c , et ainsi de suite.
Cela peut paraître peu excitant, mais avec 100 opérateurs, ce schéma est pour le moins
efficace. Envoyer des messages individuels nécessite de partager une clef avec chaque
opérateur (100 clefs au total). Pour couvrir tous les sous-ensembles possibles, il faut
2100 — 2 clefs (on exclus les messages destinés à tous les opérateurs et à aucun). Le
schéma qui vient d ’être décrit marche avec un seul texte chiffré et 100 clefs différentes.
Le seul inconvénient est qu’il faut aussi diffuser le sous-ensemble d’opérateurs auquel ce
message est destiné; sans cela, chaque opérateur devrait essayer toutes les combinaisons
de clefs possibles à la recherche de la bonne. Les nom des destinataires suffisent. Dans
la réalisation directe de ceci, chacun reçoit une quantité massive de données relatives
aux clefs.
Il y a d’autres techniques pour la diffusion de messages, certaines ne présentent pas le
problème précédent. Elles sont décrites dans le paragraphe 22.7.
celle de vos concurrents. C ’est important, vous devez garder le secret. Vous ne pouvez
indiquer la composition exacte des ingrédients qu’à vos employés en qui vous avez
le plus confiance: mais qu’arrive-t-il si l’un d ’entre eux vous quitte pour aller à la
concurrence? Le secret est dévoilé et il ne faudra pas attendre longtemps avant que
tous les marchands de « fastfood » du quartier ne fassent des hamburgers aussi insipides
que les vôtres.
Pour remédier à cela, on fera appel au secret m orcelé. Il y a moyen de prendre un
message et de le couper en morceaux [553]. Chaque morceau en lui-même n’a aucune
signification mais si vous les rassemblez vous pouvez faire la sauce. Si un employé vous
quitte avec un morceau de la recette, cette information est inutilisable par elle-même.
Le morcellement de secret le plus simple partage un message entre deux personnes.
Voici un protocole où Ivan partage un message entre Alice et Bernard.
1° Ivan engendre une chaîne aléatoire de bits, R, ayant la même longueur que le
message A i.
2° Ivan combine A i avec R par ou exclusif pour obtenir S.
A4 ® R = S
Cette technique, pour autant que tout soit fait correctement, est absolument sûre.
Chaque élément est en lui-même sans valeur. Essentiellement, Ivan chiffre le message
avec un masque jetable. Il donne ensuite le masque à une personne et le message chiffré
à l’autre. Le paragraphe 1.5 explique la technique du masque jetable; ce système de
chiffrement est absolument sûr. Aucune puissance de calcul ne permet de retrouver le
message avec un seul morceau.
Il est aisé d ’étendre ce schéma à plusieurs personnes. Pour morceler un message entre
plus de deux personnes, on combine d’autres chaînes aléatoires de bits avec le message
Dans l’exemple qui suit, Ivan partage le message en quatre morceaux :
AA@R®S®T = U
R @ S < $ > T ® U = A4
3.7 Secret réparti 77
C’est un protocole à juge-arbitre. Ivan a tous les pouvoirs et il peut faire ce qu’il
veut. Il peut donner du charabia et prétendre que ce sont les bons éléments du secret ;
personne ne le saura jusqu’à ce qu’ils essaient de reconstruire le secret. Il peut donner
un morceau à Alice, Bernard, Christine et David, puis dire à tout le monde que seuls
Alice, Christine et David sont nécessaires pour reconstruire le secret. Il peut alors
licencier Bernard. Et comme c ’est Ivan qui décide comment partager le secret, c ’est en
son pouvoir d’agir ainsi.
Il y a toutefois un défaut à ce protocole : si un des morceaux est perdu, le message est
perdu aussi. Par exemple, si Christine s’en va chez le concurrent avec son morceau de
la recette de la sauce, les autres sont dans l’embarras. Elle ne peut pas reproduire la
recette, mais il en est de même pour Alice, Bernard et David. Alice, Bernard et David
n’ont qu’une information commune : la longueur du message — rien de plus. Cela est
dû au fait que R, S, T, U et A4 ont tous la même longueur; dès que l’on connaît l’un
d’eux, on connaît la longueur du message. Rappelons que A4 n’est pas morcelé dans le
sens usuel du terme, il est combiné par ou exclusif avec des chaînes aléatoires de bits.
6. Si vous êtes vraim ent inquiet, vous pou vez éloigner les serrures à grande distance et exiger que
les clefs soient insérées simultanément. Vous ne voudriez quand m êm e pas qu ’ un officier fou furieux
qui aurait volé deux clefs soit capable d ’annihiler tou te une ville?
78 Chapitre S Protocoles élémentaires
Les schémas à seuil sont plus variés que cela. Tout scénario de répartition peut être
modélisé à l’aide de schémas. Vous pouvez diviser un message entre les occupants de
votre immeuble, pour cela vous avez besoin de : 1°) sept occupants du premier étage et
cinq occupants du deuxième étage ; 2°) il y a quelqu’un du troisième étage, dans ce cas
il ne faut que cet occupant-là, trois occupants du premier étage et deux personnes du
deuxième étage ; 3“) il y a quelqu’un du quatrième étage, auquel cas il faut cet occupant
et un occupant du troisième étage, ou cet occupant et deux personnes du premier étage
avec une personne du deuxième étage, etc.
Cette idée a été inventée indépendamment par Adi S h a m i r [1421] et George B l a k l e y
[189], et étudiée en profondeur par Gus SiMMONS [1473]. 11 y a plusieurs algorithmes
différents décrits dans le paragraphe 23.2.
Ces schémas présentent un problème. Quand tout le monde se réunit pour reconstruir
le secret, chacun doit révéler sa part. Il peut en être autrement. Si le secret réparti est
une clef privée (pour une signature numérique par exemple), alors n détenteurs d’une
partie du secret peuvent partiellement signer un document. Le document est signé avec
la clef privée répartie seulement après la derniere signature partielle et personne n’est
informé de la part d’un autre. Le secret peut alors être réutilisé et son maniement
ne nécessite pas d ’opérateur de confiance. Ce concept est exploré plus avant par Yvo
D e s m e d t et Yair F r a n k e l [481, 482].
Ivan donne à Alice, Bernard, Christine et David une part du secret à chacun, ou du
moins prétend le faire. La seule façon pour chacun d ’eux pour savoir s’il a une part
valide est de reconstruire le secret. Ivan a pu envoyer à Bernard une part de rien
du tout, ou bien Bernard a reçu accidentellement une mauvaise part à cause d’une
erreur de transmission. Le secret réparti vérifiable permet à chacun d’eux de contrôler
individuellement qu’il possède une part valide, sans qu’il soit nécessaire de reconstruire
le secret [560, 1245].
Un secret est réparti entre cinquante personnes de manière que dix d ’entre-elles puissent
reconstituer le secret. C ’est facile. Mais peut-on réaliser un schéma de secret réparti
avec la contreinte supplémentaire que vingt personnes puissent empêcher les autres -
quel que soit leur nombre - de reconstruire le secret? Il se trouve que c’est possible
[160].
Les mathématiques sous-jacentes sont compliquées, mais l’idée de base est que chacun
reçoit deux parts : un « oui » et un « non ». Au moment de reconstruire le secret, chacun
soumet une de ses deux parts. Le choix de la part dépend du souhait du participant
quand à la reconstruction du secret. S’il y a au moins m parts « oui » et au plus n
parts « non », alors le secret est reconstruit. Dans la cas contraire, il ne l’est pas.
Bien sûr, rien n’empêche un nombre suffissant de personnes favorables d’aller dans un
coin sans les autres (en supposant qu’ils se connaissent) et de reconstruire le secret.
Mais dans la situation ou chacun soumet sa part dans un ordinateur central, cela n’est
pas possible.
Vous avez installé votre de système de secret réparti et vous voulez maintenant licencier
un des participants. Vous pourriez instaurer un nouveau schéma mais cela demande
du temps. Il existe des méthodes pour copier ce système. Elles permettent d ’activer
instantanément un nouveau schéma dès qu’un participant devient indésirable [851].
80 Chapitre 3 Protocoles élémentaires
Protocoles intermédiaires
- il ne doit pas être possible de changer le moindre bit d’un document sans que
cela soit apparent ;
- il doit être impossible de dater un document avec une date et une heure différentes
de la vraie date.
Solution arbitrée
Ce protocole utilise Ivan, qui assume le rôle d ’un service de datation sûr et fiable. Bien
sûr, Alice veut dater un document :
Cela permet de pallier tous les défauts sauf le dernier mentionné. Alice ne doit plus
craindre de devoir révéler le contenu de son document : l’empreinte est suffisante. Ivan
ne doit plus stocker des copies des documents (ni même de leur empreinte), ainsi les
problèmes de capacité de stockage excessive sont résolus (rappelez-vous que les fonc
tions de hachage à sens unique n’ont pas de clef). Alice peut immédiatement examiner
l’empreinte datée et signée qu’elle a reçue à l’étape 4 et ainsi détecter toute erreur de
transmission. Il reste le risque qu’Alice et Ivan puissent être complices pour produire
n’importe quelle datation.
Protocole de filiation
Un moyen d ’éviter ce dernier défaut est de lier la datation d ’Alice avec les autres
datations déjà produites par Ivan, pour d’autres utilisateurs éventuels. Comme l’ordre
dans lequel Ivan recevra les requêtes n’est pas connu d’avance, la datation d ’Alice doit
être plus récente que celle de la requête précédente. Et comme la requête qui suit celle
d’Alice est liée à la datation qu’ Alice a obtenue, sa requête doit forcément avoir eu lieu
avant. La requête d’Alice est donc prise en sandwich dans le temps.
4-1 Services de datation 83
Si A est le nom d ’Alice, l’empreinte qu’Alice veut dater est Hn, et la datation précédente
est Tn- 1 , alors le protocole est donné par:
H ( I n - l , H n - \ , T n -.\ )
Sk signifie que le message est signé avec la clef publique d’Ivan. Le nom d’Alice
certifie celle-ci comme auteur de la requête. Le paramètre n indique le numéro
d’ordre de la requête: c ’est la ne datation produite par Ivan. La datation est
donnée par le paramètre Tn. L ’information additionnelle consiste en l'identi
fication de l’auteur, l’empreinte, la datation et l’empreinte de la datation du
document précédent qu’Ivan a daté.
3° Après qu’Ivan ait daté le document suivant, il envoie à Alice l’identification de
l’auteur de ce document: In+ i ■
Si quelqu’un met en doute la datation d’Alice, elle contacte les auteurs des documents
antérieurs et postérieurs : In- t et In+i- Si leurs documents sont aussi remis en question,
ils se mettent en contact avec In- 2 et In+2 , et ainsi de suite. Chacun peut montrer que
son document a été daté après celui qui précède et avant celui qui suit.
Ce protocole rend très difficile la complicité entre Alice et Ivan et les empêche de pro
duire un document avec une fausse datation. Ivan ne peut pas postdater un document
car cela nécessiterait de connaître à l’avance la requête qui précédera ce document.
Même s’il pouvait falsifier cela, il devrait alors connaître d’avance la requête avant
* cela » , et ainsi de suite. Il ne peut pas antidater un document car la datation
doit être prise en sandwich entre des documents datés juste avant et juste après : or
ces documents ont déjà été datés. Le seul moyen de contrer ce schéma est d ’inventer
des chaînes de requêtes fictives, passées et futures par rapport au document d’Alice,
suffisamment longues pour décourager toute personne de contester la datation.
Protocole distribué
Les gens meurent. Les datations se perdent. Beaucoup d’événements peuvent se pro
duire entre le moment de la datation et la contestation de celle-ci. Quand la contestation
arrive, Alice ne pourrait plus forcément obtenir une copie de la datation d’/ „ _ i . Ce
défaut peut être évité en incorporant dans la datation d ’Alice les datations des 10
requêtes qui ont précédé celle d ’Alice et en envoyant à Alice les identifications des
auteurs des 10 requêtes qui ont suivi la sienne. Alice a ainsi plus de chance de trouver
quelqu’un qui a encore sa datation.
Suivant le même ordre d’idée, le protocole suivant se passe tout à fait de la collaboration
d’Ivan :
1° A partir d’Hn, Alice engendre une suite de valeurs aléatoires en se servant d’un
générateur aléatoire de suites cryptographiquement sûr:
v 1,v2,v3,...yk
84 Chapitre 4 Protocoles intermédiaires
Développements futurs
D ’autres améliorations des protocoles de datation sont présentées dans [99]. Les au
teurs utilisent des arbres binaires pour augmenter le nombre de datations qui dépendent
d’une datation donnée, réduisant par la même occasion la possibilité de produire des
chaînes de datations fictives. Ils recommandent également d’éditer publiquement l’em
preinte des datations du jour, dans les journaux par exemple. Cela remplit une fonction
similaire à l’envoi de l’empreinte à un ensemble aléatoire de personnes dans le protocole
distribué. De fait, B e l l C O R E fait cela dans chaque numéro du New York Times du
dimanche depuis 1992.
Ces protocoles de datation sont brevetés [685, 686, 687]. Une société inattendue de
Bellcore, SU RETY TECHNOLOGIES, détient les brevets et a mis sur le marché un « sys
tème de notaire numérique » mettant en oeuvre ces protocoles. Dans la première ver
sion, les clients envoyaient une requête « certifiée » à un serveur central de coordination.
En suivant la technique de Ralph M e r k l e [590], qui permet de construire des arbres
grâce à des fonctions de hachage [77], le serveur produit un arbre d ’empreintes dont les
feuilles sont toutes les requêtes reçues durant une seconde, et renvoie à chaque client
la liste des empreintes du chemin allant de la feuille lui correspondant jusqu’à la racine
de l’arbre. Le client la conserve localement et peut produire un « certificat de notaire
numérique » pour chacun des fichiers qui ont étés certifiés. La suite des racines de ces
arbres forme le « dossier de validation universel » qui est accessible dans de multiples
banques de données et publié sur CD-ROM. Le logiciel client comprend une fonction
de « validation » qui permet à l’utilisateur de tester si un fichier a été certifié dans sa
forme actuelle 1 2.
1. Pour cela il faut récupérer la racine de l’arbre approprié et la com parer à la valeur obtenue en
appliquant la fonction de hachage adéquate sur le fichier et son certificat.
2. Pour plus d’ informations, contacter Surety T ech n ologies, 1 Main S t ., Chatham, NJ, 07928
É tats-U nis, T é l: (201) 701-0600, Fax: (201) 701-0601.
4-2 Canal subliminal 85
d’introduire des messages factices. Comme il ne peut pas engendrer de signature valide,
Bernard détecterait la tentative de Gatien à l’étape 5. Et comme il ne connaît pas la
clef secrète partagée, il ne peut pas lire le canal subliminal. Plus important encore, il
n’a pas la moindre idée que des messages subliminaux sont échangés. Des messages
numériques signés ne sont pas différents d’aspect des messages numériques signés avec
messages subliminaux cachés dans la signature.
La tricherie entre Alice et Bernard est plus problématique. Dans certaines réalisations
du canal subliminal, l’information secrète dont Bernard a besoin pour lire les messages
subliminaux est la même information dont Alice a besoin pour signer les messages
innocents. Si tel est le cas, Bernard peut se faire passer pour Alice. Il peut signer
des messages dont Alice serait alors prétendûment l’auteur et Alice ne peut rien faire
pour l’en empêcher. Si elle doit lui envoyer des messages subliminaux, elle doit lui faire
confiance pour qu’il n ’abuse pas de sa clef privée
D’autres réalisations du canal subliminal n’ont pas ce défaut Une clef secrète partagée
entre Alice et Bernard permet à Alice d ’envoyer des messages subliminaux à Bernard
mais elle est différente de la clef privée d ’Alice. Cette clef secrète ne permet pas à
Bernard de signer des messages à la place d ’Alice. Alice n’a pas à faire confiance à
Bernard pour qu’il n’abuse pas de sa clef privée.
L’application la plus évidente du canal subliminal est observée dans un réseau d’es
pionnage. Si tout le monde envoie et reçoit des messages signés, les espions ne se feront
pas remarquer en envoyant des messages subliminaux dans des documents signés. Bien
entendu, les espions de la partie adverse peuvent faire la même chose.
Grâce à un canal subliminal, Alice peut signer un contrat sous la menace. Quand elle
signe le contrat, elle introduit le message subliminal : « J ’y suis contrainte. » D ’autres
applications sont plus subtiles. Une société peut signer des documents et cacher des
messages subliminaux, lui permettant ainsi de suivre les documents tout au long de leur
existence. Le Gouvernement peut marquer de la monnaie numérique. Un programme de
signature malveillant peut dévoiler la clef privée par le canal subliminal. Les possibilités
sont sans fin.
Alice et Bernard échangent des messages signés pour négocier les termes d’un contrat.
Ils utilisent un protocole de signature numérique. Toutefois, cette négociation de
contrat sert de façade à leurs activités d’espionnage. Quand ils usent de l’algorithme
de signature numérique, peu leur importe les documents qu’ils signent. Ils utilisent un
canal subliminal dans les signatures pour échanger de l’information secrète entre eux.
Les services de contre-espionnage, en revanche, ne savent pas que cette négociation
de contrat et leurs signatures sont des façades. Ceci a conduit certaines personnes à
créer des schémas de signature exempts de canal subliminal. Ce sont des sché
mas de signature numérique qui ne peuvent pas être modifiés pour contenir un canal
subliminal [477, 479].
4-3 Signatures numériques incontestables 87
Il y a un protocole suplémentaire dans lequel Alice prouve qu’elle n’a pas signé un
document, sans pouvoir le contester s’il s’agit bien de sa signature.
Bernard ne peut pas contourner le protocole et convaincre Christine que la signature
d’Alice est valide, parce que Christine ne sait pas que les nombres de Bernard sont
aléatoires. Il peut très bien avoir refait le protocole à l’envers sur papier sans l’aide
d’Alice et ensuite montrer le résultat à Christine. Christine ne peut pas être convaincue
que la signature d’Alice est valide à moins d’exécuter le protocole avec Alice elle-même.
Cela peut ne pas avoir beaucoup de sens maintenant mais cela en aura une fois que les
mathématiques sous-jacentes auront été présentées au paragraphe 23.4.
Cette solution n ’est pas parfaite. Y vo D e s m e d t et Moti Y u n g montrent que Bernard
peut, dans certaines applications convaincre Christine de la validité de la signature
d’Alice [487].
Par exemple, Bernard achète une copie légale du logiciel D E W . Il peut valider la
signature qui accompagne le logiciel quand il le veut. Bernard peut alors convaincre
Christine qu’il est un vendeur de la société A l i c e S o f t w a r e C o m p a n y . Il lui vend
une copie pirate du logiciel D E W . Quand Christine essaie de valider la signature avec
88 Chapitre 4 Protocoles intermédiaires
Bernard, il valide simultanément la signature avec Alice. Quand Christine lui envoie
le nombre aléatoire, il l’envoie à Alice. Quand Alice répond, il envoie la réponse à
Christine. Christine est alors convaincue qu’elle est une acheteuse légitime du logiciel
alors qu’il n’en est rien. Cette attaque est un cas particulier du problème du grand
maître aux échecs qui est décrit en détail dans le paragraphe 5.2.
Telles quelles, les signatures icontestables ont de nombreuses applications; il y a beau
coup de situation où Alice ne veut pas que n ’importe qui puisse vérifier sa signature.
Elle ne veut sûrement éviter que sa correspondance personnelle puisse être vérifiée par
la presse, montrée et vérifiée hors du contexte, où même vérifiée après que les choses ont
changé. Si elle signe une bribe d’information qu’elle a vendue, elle ne veut pas que ceux
qui n’ont pas payé pour l’information puissent tout de même en vérifier l’authenticité.
En contrôlant ceux qui vérifient sa signature, Alice protège sa vie privée.
Une variante des signatures incontestables permet de séparer le lien entre le signataire
et le message, et le lien entre le signataire et la signature [911]. Dans ce cadre, n’im
porte qui est capable de vérifier que le signataire a bien produit la signature, mais la
coopération du signataire est nécessaire pour vérifier que la signature est valide pour
le message en question.
Il existe une notion similaire, celle de signatures incontestables arbitrées. Imaginez
qu’Alice travaille pour la société Toxines et envoie des documents compromettants à
un journal en utilisant un protocole de signature incontestable. Alice peut confirmer sa
signature au prés du journaliste, et à personne d ’autre. Toutefois, Bernard, le contre
maître suspecte Alice d ’avoir divulgué les documents. Il demande à Alice de contester
le protocole pour se laver de tout soupçon, et Alice refuse. Bernard prétend que la seule
raison poussant Alice à refuser est sa culpabilité et il la licencie.
Les signatures incontestables arbitrées s’utilisent comme les signatures incontestables
sauf que seul Ivan peut effectuer le protocole de contestation. Bernard ne peut pas
demander à Alice de contester sa signature car seul Ivan en est capable. Si Ivan est le
sytème judiciaire, il ne devra effectuer le protocole qu’en cas de dispute.
Les signatures à vérificateur dédié sont une sorte de compromis entre les signatures nu
mériques classiques et les signatures incontestables. Dans certaines circonstances, Alice
voudra restreindre le nombre des personnes capables de vérifier sa signature. D ’un autre
côté, donner un contrôle total à Alice peut compromettre l’utilisation des signatures :
Alice pourrait refuser de coopérer pour confirmer ou désavouer une signature en pré-
texant qu’elle a perdu les clefs nécessaires, ou en étant simplement injoignable. Les
signatures à vérificateur dédié assurent à Alice la protection d ’une signature incontes
table sans lui permettre d’abuser de cette protection. Alice préférera voir les choses
ainsi: les signatures à vérificateur dédié lui permettent d ’éviter des utilisations indé-
risables, de la protéger si elle perd sa clef, et d’assurer la pérénité du fonctionnement
des signatures si elle est en vacances, à l’hopital, ou morte.
Cette idée permet toutes sortes d ’applications. Christine peut se déclarer « notaire
publique ». Elle publie sa clef et n’importe qui peut la désigner comme vérificatrice de
ses signatures. Elle peut faire payer chaque confirmation de signature et mener une vie
tranquille.
Christine peut être un bureau de brevetage, une agence gouvernementale, ou l’ordi
nateur hôte d ’une organisation. Ce protocole permet de différencier les personnes qui
signent les documents de celles qui vérifient les signatures.
- Non désaveu. Un signataire interposé ne peut pas désavouer une signature par
procuration qu’il a produit.
90 Chapitre 4 Protocoles intermédiaires
Dans certains cas, une forme d’identification plus large est nécessaire, permettant à
n’importe qui de déterminer l’identité du signataire interposé à partir de la signature
par procuration. Des protocoles de signatures par procuration, basés sur différentes
réalisations de signatures numériques, se trouvent dans [1010].
- Celui qui reçoit une signature peut vérifier que c’est une signature valide de ce
groupe mais ne peut pas déterminer quel membre du groupe a signé.
1° Ivan engendre un lot de paires « clef privée, clef publique » et donne à chaque
membre du groupe une liste différente de clefs privées uniques. Il n’y a pas de
doublon entre les listes3.
2° Ivan publie la liste principale de toutes les clefs publiques pour le groupe dans
un ordre aléatoire. Il reste seul à savoir qui possède quelle clef.
5° En cas de litige, Ivan connaît la correspondance entre les clefs publiques et les
membres du groupe.
Le défaut de ce protocole est qu’il nécessite l’intégrité d ’Ivan. Il connaît les clefs privées
de tout le monde et il peut imiter des signatures. De plus, la liste des clefs de chaque
membre doit être suffisamment longue pour éviter que l’on puisse analyser quelles clefs
ils ont utilisées.
L’article de C h a u m [333] donne d ’autres protocoles. Pour certains d ’entre eux, Ivan
ne peut pas imiter de signatures. Dans d’autres Ivan n’est pas toujours nécessaire.
Un autre protocole [352] permet non seulement de cacher l’identité du signataire, mais
aussi d’élargir le groupe à de nouveaux membres. On trouvera encore un autre protocole
dans [1241]
Voilà le problème : Alice veut s’en remettre à un choix mais elle ne veut pas révéler ce
choix avant un certain temps. Bernard, de son côté, veut être sûr qu’Alice ne puisse
pas changer son choix après coup.
4-9 Mise en gage 93
2° Alice crée un message constitué du bit qu’elle veut mettre en gage, b (cela peut
même être plusieurs bits), et de la chaîne aléatoire de Bernard. Elle chiffre le
tout avec une clef aléatoire, K et envoie le résultat à Bernard.
E K (R,b)
C’est la partie de mise en gage du protocole. Bernard ne peut pas déchiffrer le message
et donc il ne connaît pas la valeur du bit.
Quand vient le moment pour Alice de révéler la valeur du bit, le protocole se poursuit
ainsi :
R i ,R2
2° Alice crée un message contenant les deux chaînes aléatoires et le bit qu’elle veut
mettre en gage (cela peut même être plusieurs bits).
(Ri,R2,b)
H(Ri,R2,b),Ri
4. Remarquez que tou te fonction à sens unique générale convient pou r ce ty p e d e protocole, pas
seulement les fonctions de hachage à sens unique.
94 Chapitre 4 Protocoles intermédiaires
Cette dernière transmission est la mise en gage proprement dite. Alice a utilisé une
fonction à sens unique à l’étape 3 et donc Bernard ne peut pas l’inverser pour retrouver
la valeur du bit.
Quand.vient le tour d ’Alice pour révéler le bit, le protocole se poursuit ainsi:
L’avantage de ce protocole sur le précédent est que lorsque la communication est établie,
seule une communication unidirectionnelle est nécessaire : Bernard n’a pas à parler à
Alice. Alice envoie à Bernard un message pour mettre en gage le bit et un message
pour le révéler.
La chaîne aléatoire de Bernard n’est pas nécessaire car le message de mise en gage
d ’Alice est le résultat d ’une fonction à sens unique. Alice ne peut pas tricher et trouver
un autre message (Ri,R'2,b'), tel que H(Ri,R'2,b') = H(R\,R 2 ,b). Si Alice n’envoyait
pas Ri, alors elle pourrait changer les valeurs de Ri et R^ et ainsi changer la valeur
de b. Le fait que Bernard connaisse déjà R\ l’en empêche.
Rb
Quand vient le moment pour Alice de révéler son bit, le protocole se poursuit ainsi :
Pâtés
Les chaînes de mise en gage qu’Alice envoie à Bernard sont parfois appelées pâtés. Un
pâté est une suite de bits, bien que les protocoles n’utilisent pas cette propriété. Comme
le dit Gilles B r a s s a r d : « Ils pourraient tout aussi bien être faits de poussière d’étoile
(ou de photons polarisés!) si cela s ’avérait utile. » [239] Les pâtés ont les propriétés
suivantes :
- Alice peut mettre un pâté en gage. Ce faisant, elle s’engage quant à la valeur
d’un bit spécifique.
- Alice peut ouvrir n’importe quel pâté qu’elle a mis en gage. Quand elle ouvre un
pâté, elle peut convaincre Bernard de la valeur du bit qu’elle a mis en gage lors
qu’elle a mis le pâté en gage. Donc, elle ne peut pas ouvrir un pâté indifféremment
à la fois comme un 0 ou comme un 1.
- Bernard ne peut rien apprendre sur la méthode pour ouvrir un pâté non encore
ouvert et mis en gage par Alice. C ’est vrai même après qu’Alice a ouvert d’autres
pâtés.
- Les pâtés ne contiennent pas d’autre information que le bit mis en gage par Alice.
Les pâtés eux-mêmes ainsi que les procédés de mise en gage et d ’ouverture ne sont
en aucune façon corrélés avec d ’autres secrets qu’Alice pourrait vouloir cacher à
Bernard.
Alice et Bernard veulent jouer à pile ou face mais ils n’ont pas de pièce
à lancer. Alice propose une méthode pour jouer à pile ou face mentalement.
« Premièrement, tu penses à un bit aléatoire, ensuite je pense à un bit
aléatoire. Ensuite on prend le ou exclusif des deux bits. » suggère-t-elle.
« Mais que se passe-t-il si l’un de nous deux ne choisit pas aléatoire
ment? » demande Bernard.
« Peu importe. Aussi longtemps que l’un des deux bits est vraiment
aléatoire, le ou exclusif des deux bits doit être aléatoire. » répond Alice, et
après un moment de réflexion, Bernard est d ’accord.
Peu de temps après, Alice et Bernard trouvent dans la rue un livre sur
l’intelligence artificielle. En bonne citoyenne, Alice dit : « L ’un de nous deux
doit ramasser le livre et le mettre dans une poubelle. » Bernard est d ’accord
et suggère qu’ils utilisent leur protocole de tirage à pile ou face pour décider
qui devra jeter le livre.
« Si le dernier bit est 0, alors tu ramasseras le livre, et si c ’est un 1,
alors je le ferai. Quel est ton bit ? » dit Alice.
Bernard répond « 1. »
« Comme le mien, répond-t-elle avec espièglerie. Ce n’est pas ton bon
jour. »
96 Chapitre 4 Protocoles intermédiaires
Ces enveloppes ressemblent à des pâtés. Quand Manuel B lum introduisit le problème
du jeu à pile ou face au téléphone [201], il obtint une solution grâce au protocole de
mise en gage suivant :
1° Alice met en gage un bit aléatoire, en utilisant l ’un des protocoles de mise en
gage décrits au paragraphe 4-9.
- Alice ne doit pas être capable de changer la pièce après avoir entendu le choix de
Bernard.
- Bernard ne doit pas pouvoir savoir comment la pièce a atterri avant de faire son
choix.
En général, cette propriété n’est pas satisfaite par les algorithmes à clef secrète,
mais l’est par les algorithmes à clef publique (l’algorithme à clef publique R S A , par
exemple). Voici le protocole:
1° Alice et Bernard engendrent chacun une paire « clef publique, clef privée ».
2° Alice engendre deux messages, l’un indiquant face et l’autre pile. Ces messages
doivent contenir une chaîne aléatoire unique, de manière qu’Alice puisse véri
fier leur authenticité plus tard dans le protocole. Alice chiffre les deux messages
avec sa clef et les envoie à Bernard.
E A ( M l ) , E A ( M 2)
3° Bernard, qui ne peut lire aucun des deux messages, choisit l’un d’entre eux au
hasard (il peut lancer une pièce de monnaie, engager un ordinateur malfaisant
pour tenter en vain de décider lequel choisir, ou même consulter son horoscope
chinois - peu importe). Il chiffre celui qu’il a choisi avec sa clef et envoie le
résultat à Alice.
E b (E a ( M ) )
4° Alice qui ne peut pas lire ce message, le déchiffre avec sa clef et envoie le résultat
à Bernard.
D a {E b (E a ( M) ) ) = E b ( M i ) si M = M !
= E b {A42) si A4 — A42
5. Le bit de poids faible constitue parfois un mauvais ch oix car il arrive q u ’il soit plus facile à
calculer.
98 Chapitre 4 Protocoles intermédiaires
D b (E b ( M ) ) = Mi si M = M i
— M 2 si M = M 2
6° Alice lit le résultat du lancer et vérifie que la chaîne aléatoire est correcte.
7° Alice et Bernard révèlent tous les deux leurs clefs de telle manière qu’ils
puissent vérifier que ni l’un ni l’autre n’a triché.
1° Alice, Bernard, et Christine, chacun, engendrent une clef secrète ou une paire
« clef privée, clef publique ».
2° Alice engendre 52 messages, un pour chaque carte à jouer. Ces messages
doivent contenir une chaîne aléatoire unique de manière qu’elle puisse véri
fier leur authenticité plus tard dans le protocole. Alice chiffre tous les messages
avec sa clef et les envoie à Bernard.
E A ( M n)
3° Bernard, qui ne peut lire aucun des messages, en choisit 5 au hasard. R les
chiffre avec sa clef et les renvoie à Alice.
E B(EA( M n))
E A( M n)
5° Christine, qui ne peut lire aucun des messages, en choisit 5 au hasard. Elle les
chiffre avec sa clef et les renvoie à Alice.
E c (EA( M n))
100 Chapitre 4 Protocoles intermédiaires
6° Alice, qui ne peut lire aucun des messages qui lui sont renvoyés, déchiffre ceux-
ci avec sa clef et envoie les résultats à Bernard ou Christine (en fonction de
leur provenance).
D A(EB(EA( M n))) = E B( M n)
7° Bernard et Christine déchiffrent les messages avec leurs clefs respectives pour
découvrir leurs donnes.
D B(EB ( M n)) — M n
Dc {Ec { M n)) = M n
8° Christine choisit 5 autres messages parmi les 42 restant. Elle les envoie à Alice.
E A( M n)
10° A la fin du jeu, Alice, Bernard et Christine dévoilent leurs jeux et leur clefs
afin que chacun puisse vérifier qu’il n’y a pas eu tricherie.
table virtuelle avec deux autres joueurs qui ne révèlent jamais leur main quand l’un
des deux est le donneur (Alice, dans le protocole ci-dessus), arrêtez de jouer.
Il faut noter que si cela constitue une théorie intéressante, le réaliser sur un ordinateur
est une tâche ardue. Une réalisation sur des stations de travail Sparc avec trois joueurs
(un par station) prend huit heures pour mélanger les cartes [515].
1° Alice engendre une paire « clef privée, clef publique ». Pour ce protocole, elle
garde les deux clefs secrètes.
Estelle, qui écoute tout, n’a pas la moindre idée de la clef choisie par Alice. Elle voit un
flot continu de clefs passer à l’étape 4. Quand Alice renvoie sa clef au serveur à l’étape
7, elle est chiffrée avec sa clef publique, qui est également secrète. Estelle n’a aucun
moyen de corréler celle-ci avec le flot de clefs du serveur. Quand le serveur renvoie la
clef à Alice à l’étape 9, elle est aussi chiffrée avec la clef publique d ’Alice. Ce n’est qu’à
l’étape 10, quand Alice déchiffre sa clef, que celle-ci est dévoilée.
Si vous utilisez l’algorithme R S A , il y a des fuites d’information dans ce protocole,
au rythme d ’un bit par message. C ’est lié aux résidus quadratiques une fois de plus.
Si vous envisagez de distribuer des clefs ainsi, veillez à ce que la fuite d’information
soit suffisamment faible. Bien sûr, si Alice ne peut pas faire confiance au C D C, la
fuite d ’information est inévitable. Un C D C malveillant garderait un enregistrement
de toutes les clefs qu’il engendre. Il pourrait ensuite parcourir cet enregistrement pour
déterminer quelle est la clef d’Alice.
Ce protocole présume qu’Alice agit honnêtement. Si l’algorithme R SA est utilisé, elle
peut agir pour obtenir plus d’information qu’elle ne devrait en avoir. Ce n ’est pas un
problème dans notre scénario, mais peut le devenir dans d ’autres circonstances.
produit le même résultat que l’ajout du nom d’ Alice à sa propre valeur d’accumulation.
Bernard fait de même. Chacun sait alors que l’autre est bien un membre. De plus, aucun
des deux n’a la moindre idée des identités des autres membres.
Encore mieux, on peut donner toutes les valeurs d’accumulation à des personnes exté
rieures. Alice peut alors prouver son appartenance à la société à une personne extérieure
(peut-être pour obtenir une remise au magasin local de contre espionnage) sans que la
personne extérieure puisse deviner la liste entière des membres.
Pour ajouter de nouveaux membres, il suffit d’envoyer leurs noms aux autres.
Malheureusement, le seul moyen d ’effacer un membre et d ’envoyer à tout le monde
une nouvelle liste et de recalculer les valeurs d’accumulation. Mais la société Clique
n’a besoin de faire cela que si un membre démissionne; les membres morts peuvent
rester sur la liste. (Aussi étrange que cela puisse paraître, cela n’a jamais posé de
problème).
C’est une idée intelligente qui entre en application chaque fois que vous désirez les
mêmes effets que les signatures numérique sans avoir recourt à un signeur centralisé.
1° Alice crée sa paire « clef privée, clef publique ». Elle partage sa clef privée en
plusieurs morceaux publics et privés.
Si une autorité judiciaire autorise une écoute, alors chaque dépositaire remet son mor
ceau au C D C . Le C D C reconstruit alors la clef privée. Avant cela, ni le C D C , ni
aucun des dépositaires ne pouvait reconstruire individuellement la clef privée : tous les
dépositaires sont requis pour reconstruire la clef.
Tout algorithme à clef publique peut être rendu équitable de cette manière. Certains
algorithmes particuliers sont décrits dans le paragraphe 23.10. L’article de M lC A L i
[1091, 1090] présente des méthodes pour combiner cela avec un schéma à seuil, de
manière qu’un sous-ensemble des dépositaires (par exemple, 3 parmi 5) soit nécessaire
pour reconstruire la clef privée. Il montre aussi comment combiner cela avec un transfert
inconscient (voir § 5.5) afin que les dépositaires ne puissent pas connaître l’identité du
propriétaire de la clef privée reconstruite.
Les cryptosystèmes équitables ne sont pas parfaits. Un criminel peut exploiter le sys
tème en utilisant un canal subliminal (voir § 4.2) pour insérer une autre clef secrète
dans son morceau. De cette manière, il peut communiquer de façon sûre avec quelqu’un
d’autre en utilisant cette clef subliminale sans avoir à se soucier d’une mise sur écoute
judiciaire. Un autre protocole appelé d é p ô t d e clefs à sû reté in tégrée résoud ce
problème [957, 834]. L’algorithme et le protocole seront décrits au paragraphe 23.10.
obtenir ses clefs le fasse dans le cadre de la loi et avec responsabilité. Imaginez une
attaque terroriste massive à New York; quelles seraient les limites dépassées par la
police en répercussion?
Il est dur d ’imaginer des plans de dépôts de chiffrement fonctionnant tels que ses parti
sans le voudraient, c ’est-à-dire sans aucune sorte de pression légale. La prochaine étape
évidente est de bannir l’utilisation des chiffrements non déposés. C ’est probablement la
seule manière de rendre un système commercial lucratif, et c’est certainement la seule
manière de les faire utiliser par des criminels et terroristes techniquement très équipés.
Il n’est pas facile de dire s’il sera aisé de faire disparaître la cryptographie non dépo
sée, ou si cela affectera la cryptographie en tant que discipline académique. Comment
puis-je rechercher des programmes d’algorithmes cryptographiques sans avoir en ma
possession du matériel de chiffrement non déposé; aurai-je besoin d ’une autorisation
spéciale ?
Il y a des questions légales. Les dépôts de clefs engageront-ils la responsabilité des uti
lisateurs s’il y avait une fuite de données chiffrées? Si le gouvernement américain essaie
de protéger les agences de dépôts, cela ne voudrait-il pas dire que c ’est l’utilisateur qui
sera systématiquement en faute si le secret devait être compromis soit par l’utilisateur
soit par l’agence de dépôts?
Que se passerait-il si une grande entreprise de dépôts de clefs, gouvernementale ou
civile, se faisait voler toutes ses clefs mises en dépôt? Que se passerait-il si le gou
vernement américain essayait d ’étouffer l’affaire? Cela aurait un indéniable effet sur la
volonté des utilisateurs à continuer à utiliser le dépôt de clefs. Si ce n’est pas volontaire,
quelques scandales de ce genre auraient pour effet d ’augmenter la pression politique
pour soit le rendre volontaire, soit rajouter des règles complexes à cette industrie.
Ce qui serait encore plus dangereux serait un scandale rendu publique où un membre
de l’opposition à l’administration en place, ou un vif opposant aux agences de ren
seignement ou de police, aurait été sous surveillance pendant plusieurs années. Ceci
pourrait faire monter un sentiment hostile au chiffrement mis sous dépôt.
Si les signatures de clefs sont comme les chiffrement de clefs mises sous dépôt, il y a
alors d ’autres débouchés. Peut-on accepter des autorités qu’elles utilisent des signatures
de clefs pour mener des opérations contre des criminels? Est-ce-que l’authenticité des
signatures basées sur des clefs déposées sera reconnue en cour de justice? Quels recours
auront les utilisateurs si les autorités utilisent leurs signatures de clefs pour signer des
contrats défavorables, pour aider une industrie étatisée, ou pour voler de l’argent?
La globalisation de la cryptographie amène toute une série de questions. Est-ce-que les
politiques de dépôts de clefs seront compatibles entre différentes nations? Est-ce-que les
entreprises multi-nationales devront déposer leurs clefs séparément dans chaque pays
afin de respecter les différentes législations? Sans un minimum de compatibilité, un
des avantages supposés des dépôts de clefs (utilisation internationale de chiffrement)
disparaît.
Que se passerait-il si des pays ne faisaient pas confiance en la sécurité des agences
de dépôts de clefs? Comment les utilisateurs feraient-ils des affaires? Leurs contrats
digitaux seront-ils confirmés par la cour, ou est-ce-que le fait que leur signature de
clef soit sous dépôt aux Etats-Unis leur permet de dire qu’en Suisse quelqu’un d ’autre
aurait pu signer ce contrat électronique ? Y aura-t-il des dispositions spéciales pour les
personnes faisant des affaires dans de tels pays?
Et à propos de l’espionnage industriel, il n’y a aucune raison de croire que les pays
4-14 Dépôt de clefs 107
Protocoles avancés
Patricia connaît le secret de la grotte. Elle veut le prouver à Victor mais elle ne veut
pas lui révéler la formule magique. Voici comment elle le convainc :
Supposons que Victor filme tout ce qu’il voit avec une caméra. Il enregistre disparais
sant dans la cave, il enregistre le moment où il crie à Patricia par quel tunnel elle doit
sortir et il filme Patricia sortant. Il enregistre les n essais. En voyant ce film, Christine
serait-elle convaincue que Patricia connaît la formule magique? Non Victor et Patricia
auraient pu s’entendre à l’avance ce que Victor crierait et Patricia n’aurait eu qu’à
aller dans le bon tunnel. Elle serait ainsi toujours sortie du bon côté sans connaître
la formule magique. Us pourraient encore procéder autrement. Patricia va dans un des
5.1 Preuves à divulgation nulle 111
passages et Victor lui fait une requête aléatoire. Si Victor a demandé le bon passage,
tout va bien; sinon, ils coupent cette séquence du film final. De quelque manière que
ce soit, Victor peut obtenir un film avec exactement la même séquence d ’événements
que dans une preuve réelle où Patricia connaît la formule magique.
Cela prouve deux choses. Premièrement, Victor ne peut pas convaincre un troisième
parti de ta validité de la preuve. Deuxièmement, le protocole a une divulgation nulle.
Dans le cas où Patricia ne connaissait pas la formule magique, Victor n’apprendra
évidemment rien en regardant le film. Mais comme il n’y a pas de moyen de distinguer
un enregistrement réel d ’un faux, Victor ne peut rien apprendre de la preuve réelle,
elle a forcément une divulgation nulle.
La technique utilisée dans ce protocole est appelée « couper-et -choisir » à cause de sa
similitude avec le protocole classique pour diviser quelque chose équitablement :
Il est dans l’intérêt d ’Alice de partager honnêtement à l’étape 1, car Bernard peut
choisir sa part à l’étape 2. Michael R a b i n est le premier à avoir utilisé la technique
« couper-et-choisir » en cryptographie [1293]. Les concepts de p r o to c o le in te ra ctif
et de divulgation nulle furent formalisés par la suite [628, 629].
La technique couper-et~choisir marche parce que Patricia ne peut pas deviner à coup
sûr le côté par lequel Victor lui demandera de sortir. Si elle ne connaît pas le secret,
elle ne peut ressortir que par où elle est entrée. Elle a 50 % de chance de deviner le
côté par lequel Victor lui demandera de sortir au tour suivant, elle a donc 50 % de
chance de pouvoir le duper. Les chances de pouvoir le duper en deux tours sont de
25 % et les chances de pouvoir le duper en n tours n fois sont de une sur 2n . Après
16 tours, Patricia a une chance sur 65 536 de duper Victor à chaque fois. Victor peut
raisonnablement conclure que si les 16 preuves de Patricia sont toutes valables, alors
elle doit connaître la formule magique pour ouvrir la porte entre C et D. (L’analogie
avec la grotte n’est pas parfaite. Patricia peut simplement prendre un des tunnels et
ressortir par l’autre ; la technique couper-et-choisir n ’est pas nécessaire. Toutefois, la
preuve mathématique en a besoin.)
Faites l’hypothèse que Patricia connaît une information et que cette information est la
solution d ’un problème très difficile. Le protocole de base consiste en plusieurs tours :
(b) soitde dévoiler la solution mise en gage à l’étape 2, et de prouver que c ’est
bien une solution du nouveau problème.
5° Patricia s ’exécute.
6° Patricia et Victor effectuent les étapes 1 à 5 un nombre n de fois.
Isomorphisme de graphes
Un exemple permettra de mieux illustrer ce concept. Celui-ci vient de la théorie des
graphes [621, 624]. Un graphe est un réseau de lignes connectant des points. Si deux
graphes sont identiques mis à part les noms des étiquettes, on dit qu’ils sont iso
m orph es. Pour des graphes extrêmements grands, il peut falloir des siècles de calcul
pour vérifier s’ils sont isomorphes; c ’est l’un des problèmes difficiles abordés au para
graphe 11.1.
Faites l’hypothèse que Patricia connaît l’isomorphisme entre deux graphes G i et GV
Le protocole suivant convainc Victor que Patricia connaît bien cet isomorphisme :
4° Patricia s ’exécute :
{a) soit elle prouve que Gi et H sont isomorphes sans prouver que G 2 et H
sont isomorphes ;
( b ) soit elle prouve que G 2 et H sont isomorphes sans prouver que G i et H
sont isomorphes.
Circuit hamiltonien
Une variante de cet exemple fut présentée pour la première fois par Manuel B l u m [133].
Patricia connaît un chemin fermé continu, suivant les lignes, et qui passe par tous les
points une fois et une seule. Un tel chemin est appelé circu it ham iltonien .
Trouver un tel chemin est un autre problème difficile. Patricia dispose de cette
information— qu’elle a certainement obtenue en construisant le graphe à partir d ’un
certain circuit hamiltonien— et elle veut convaincre Victor qu’elle connaît un tel che
min.
Patricia connaît le circuit hamiltonien du graphe G. Victor connaît G mais pas le
circuit hamiltonien. Patricia veut prouver qu’elle connaît ce circuit hamiltonien sans
le dévoiler. Voici comment le protocole se déroule :
(sl) soit de lui prouver que H ’ est le chiffrement d’un graphe isomorphe à G ;
(b ) soit de lui montrer un circuit hamiltonien de H .
4° Patricia s ’exécute :
(a) soit elle prouve que H ’ est le chiffrement d’un graphe isomorphe à G en
révélant la permutation et en déchiffrant tout, sans montrer un circuit
hamiltonien de G ou H ;
1. Cela doit être un chiffrement probabiliste de chaque ligne connectant deu x points de H , c ’est à
dire un 0 chiffré ou un 1 chiffré pou r chaque ligne dans H .
U4 Chapitre 5 Protocoles avancés
Si Patricia est honnête, elle peut produire la preuve à l’étape 3 à Victor. Toutefois, si
elle ne connaît pas un circuit hamiltonien de G, elle ne peut pas créer un graphe H qui
lui permette de relever les deux défis. Le mieux qu’elle puisse alors faire est soit de créer
un graphe isomorphe à G, soit de créer un graphe qui ait le même nombre de lignes et
de points avec un circuit hamiltonien correct. Comme elle a 50 % de chance de deviner
quelle épreuve Victor lui fera passer à l’étape 3, Victor peut répéter le protocole assez
de fois pour se convaincre que Patricia connaît un circuit hamiltonien de G.
(a ) soit de lui prouver que les nouveau et ancien problèmes sont isomorphes ;
(b) soitde lui montrer la solution qu’elle a mise en gage à l ’étape 2 et lui
prouver que c ’est une solution du nouveau problème.
Malheureusement, ce n’est pas si simple. Ce protocole ne remplit pas les mêmes pro
priétés de divulgation nulle que le protocole précédent. A l’étape (4), Victor peut choisir
comme requêtes le résultat d ’une fonction de hachage à sens unique appliquée aux va
leurs mises en gages à la première étape, rendant ainsi la transcription non simulable.
Le protocole est toujours à divulgation nulle, mais d’une manière différente. Il a l’air
sût en pratique, mais personne ne sait comment le prouver. Nous savons que dans cer
taines circonstances, certains protocoles pour certains problèmes peuvent marcher en
parallèle en restant à divulgation nulle [251, 112, 548, 618].
Des protocoles ont été inventés pour des preuves à divulgation nulle non interactives
[1380, 204, 1381, 207]. Ces protocoles ne nécessitent aucune interaction; Patricia peut
les publier et ainsi apporter la preuve à quiconque se donne la peine de la vérifier.
Le protocole de base est similaire à celui des preuves à divulgation nulle en parallèle,
mais une fonction à sens unique prend la place de Victor:
4° Patricia prend les n bits engendrés à l’étape S. Pour chaque ie nouveau pro
blème difficile — suivant que le ie bit vaut 0 ou 1 — elle exécutera l’une des
deux étapes suivantes :
(a.)s’il vaut 0 , elle prouve que l’ancien et le nouveau problèmes sont iso
morphes ;
(b ) s ’il vaut 1, elle dévoile la solution qu’elle a mise en gage à l’étape 2 et
prouve que c ’est une solution du nouveau problème.
5° Patricia publie toutes les mises en gage de l’étape 2 ainsi que les réponses de
l’étape 4-
6° Victor, Christine, ou toute autre personne intéressée, vérifie que les étapes 1 à
5 ont été exécutées correctement.
C’est étonnant : Patricia publie des données qui ne contiennent pas la moindre infor
mation sur son secret et pourtant ces données peuvent être utilisées pour convaincre
n’importe qui de l’existence du secret. On peut aussi utiliser le protocole pour des
schémas de signature numérique en appliquant la fonction de hachage à sens unique à
la fois aux messages initiaux et au message à signer.
Cela marche parce que la fonction de hachage à sens unique se comporte comme un
générateur aléatoire non biaisé de bits. Pour que Patricia puisse tricher, elle devrait
être capable de prédire le résultat de la fonction de hachage à sens unique. Rappelez-
vous que si elle ne connaît pas la solution du problème difficile, elle ne peut répondre
qu’à un des défis de l’étape 4 mais pas aux deux. Si elle arrivait à savoir d ’avance
ce que la fonction de hachage à sens unique donnera, elle pourrait tricher. Toutefois,
Patricia ne dispose d’aucun moyen pour forcer la fonction de hachage à sens unique
à produire certains bits, ou pour deviner ceux qui seront produits. La fonction à sens
unique remplace en fait Victor dans le protocole, en choisissant au hasard un des deux
défis à l’étape 4.
Pour un protocole non interactif, il doit y avoir bien plus d’itérations « défi-réponse ».
Patricia, et non Victor, choisit les problèmes difficiles à l’aide de nombres aléatoires.
Elle peut prendre différents problèmes, donc différents vecteurs de bits de mise en gage,
116 Chapitre 5 Protocoles avancés
jusqu’à ce que le résultat de la fonction de hachage à sens unique lui convienne. Pour
le protocole interactif, 1 0 itérations sont suffisantes (cela donne une probabilité de 1
chance sur 2 10 = 1024 que Patricia puisse tricher). Pour le protocole non interactif ce
n’est pas suffisant. Rappelons que Martin peut toujours relever un des deux défis à
l’étape 4. Il peut essayer de deviner les défis qu’il devra relever à l’étape 4, effectuer
les étapes 1 à 3, et regarder s’il a bien deviné. Dans le cas contraire, il peut répéter
l’opération jusqu’à un coup de chance. Un ordinateur permet aisément de faire 1024
tentatives. Pour se prémunir de cette attaque exhaustive, les protocoles non interactifs
requièrent 64 itérations, ou même 128, pour être valables.
C ’est là tout l’intérêt d’utiliser une fonction de hachage à sens unique: Patricia ne peut
pas prédire la sortie de la fonction car elle ne peut pas prédire son entrée. Les mises en
gage utilisées en entrée ne sont connues qu’après avoir résolu les nouveaux problèmes.
Généralités
B l u m a prouvé que tout théorème mathématique peut être converti en un graphe tel
que la preuve du théorème est équivalente à un circuit hamiltonien. On trouvera dans
[623] une preuve du cas général statuant que tout problème NP admet une preuve à
divulgation nulle si l’on admet l’existence des fonctions de hachage à sens unique et donc
de bons algorithmes de chiffrement. De cette façon toute preuve mathématique peut
être convertie en une preuve à divulgation nulle. Grâce à cette technique, les chercheurs
peuvent prouver au monde entier qu’ils connaissent la preuve d’un théorème particulier
sans rien révéler de celle-ci. En effect, B l u m aurait pu publier ses résultats sans les
dévoiler.
On distingue aussi les preu ves à d iv u lg a tion m inim ale. Dans une preuve à divul
gation minimale, les propriétés suivantes sont vérifiés :
- Patricia ne peut pas tromper V ictor: si Patricia ne connaît pas la preuve, ses
chances de convaincre Victor sont négligeables.
Victor ne peut pas tromper Patricia. Il n’a pas le moindre indice concernant la
preuve, à part le fait que Patricia connaît la preuve. En particulier, Victor ne peut
faire la démonstration à personne sans d ’abord en faire la preuve par lui-même
à partir de zéro.
Pour les protocoles de preuve à divulgation nulle, une propriété supplémentaire doit
être vérifiée :
- Victor n’apprend rien de Patricia qu’il ne puisse apprendre par lui-même mis à
part le fait que Patricia connaît le secret.
Il y a une différence notable entre les preuves à divulgation minimale et les preuves à
divulgation nulle2. Ces concepts ont été présentés dans [628, 621, 624]. Des théories
plus poussées, basées sur des concepts mathématiques différents ont été développées
indépendamment dans [244, 323, 243].
2. C e sujet dépasse le cadre de ce livre mais le lecteur intéressé pou rra faire b o n usage de la
bibliographie à la fin de cet ouvrage.
5.2 Identification par preuve à divulgation nulle 117
- C alcu la toire. Il existe un simulateur qui donne des transcriptions que l’on ne
peut distinguer des transcriptions réelles.
Au fil des années, pas mal de recherches ont été effectuées, tant sur le plan théorique
que sur le plan pratique, sur les preuves à divulgation minimale et à divulgation nulle.
Mike B u r m e s t e r et Yvo D e s m e d t ont inventé les p r e u v e s i n t e r a c t i v e s d i f f u s é e s ,
où un plaideur peut diffuser une preuve interactive à divulgation nulle à un grand
groupe de vérificateurs [284]. Une horde de cryptographes a prouvé que tout ce qui
peut être prouvé par une preuve interactive peut l’être aussi à l’aide d ’une preuve
interactive à divulgation nulle [755, 122].
Un bon article général sur le sujet est [550]. Pour des détails mathématiques supplé
mentaires, des variantes, des protocoles et des applications consultez [592, 621, 244,
323, 623, 123, 245, 1536, 1561, 242, 593, 619, 511, 594, 217, 113, 219, 833, 104, 950,
624, 480, 617, 620, 218, 1379, 76]. On a écrit énormément sur le sujet.
Quand David pose des questions à Christine dans le cadre du protocole de preuve
à divulgation nulle, Christine les relaie par radio à Alice, qui y répond elle-même.
Christine donne ces réponses-là à David. En réalité, Alice prouve son identité à David,
avec Christine faisant l’office de voie de communication. Quand le protocole se termine,
David pense que Christine est Alice et la laisse entrer dans le pays. Trois jours plus
tard, Christine commet un acte terroriste.
Propositions de solutions
Les supercheries des mafiosi et des terroristes sont toutes deux réalisables parce que
les conspirateurs communiquent par une liaison radio secrète. Un moyen d’éviter ces
fraudes consisterait à exiger que toutes les identifications aient lieu dans une cage
de Faraday, qui bloque toutes les émissions électromagnétiques. Dans l’exemple des
terroristes, cela garantirait à David que Christine ne reçoit pas ses réponses d’Alice.
Dans l’exemple des mafiosi, Bernard pourrait construire une fausse cage de Faraday
dans son restaurant mais le bijoutier David en aurait une vraie : Bernard et Christine ne
pourraient pas communiquer. Pour résoudre le problème du grand maître aux échecs,
il faudrait, obliger Alice à reter assise jusqu’à la fin de la partie.
Thomas B e t h et Y vo D e s m e d t proposent une autre solution qui utilise des horloges
précises [155]. Si chaque étape du protocole doit se dérouler à un instant donné précis,
les conspirateurs n’auront pas de temps pour communiquer. Dans le cas de l’histoire des
grands maîtres aux échecs, si chaque coup doit être joué quand l’aiguille des secondes
passe par 0, alors Alice n’aura pas le temps de courir d ’une pièce à l’autre. Bernard et
Christine n’auront pas le temps de se passer les questions et les réponses.
Il existe d’autres moyens de violer les preuves à divulgation nulle, décrits également
dans [483, 130]. Dans certaines réalisations, l’identité de ceux qui enregistrent une clef
publique n’est pas contrôlée. Ainsi, Alice peut avoir plusieurs clefs privées et donc
plusieurs identités. Cela peut être très utile si elle a l’intention de frauder le fisc. Alice
peut aussi commettre un crime et disparaître. Tout d ’abord, elle crée et publie plusieurs
identités. Elle n’utilise pas l’une d ’entre elles. Ensuite, elle se sert de cette identité-là
une fois et commet un crime de manière que celui qui l’a identifiée soit le témoin. Le
témoin connaît l’identité de la personne qui a commis le crime, mais Alice ne se sert
plus jamais de cette identité — on ne pourra pas retrouver sa trace.
Pour éviter cela, il devrait exister une technique qui empêche chaque personne d’avoir
plus d’une identité. Dans [130], les auteurs suggèrent l’idée « terrifiante » de bébés
« infalsifiables » qui ne peuvent pas être clonés et qui ont un numéro unique gravé dans
leur code génétique. Ils suggèrent aussi que chaque bébé devrait requérir une identité à
sa naissance (de fait, ce serait les parents qui devraient faire les démarches car les bébés
ont d’autres préoccupations). Il est facile de tricher dans ce cas : les parents pourraient
requérir plusieurs identités à la naissance de l’enfant. A la fin, le caractère unique d ’un
individu serait basé sur la confiance.
120 Chapitre 5 Protocoles avancés
Le prêt de passeports
Alice veut aller en Argentine, mais le Gouvernement refuse de lui donner un visa.
Christine propose de louer son identité à Alice (Bernard s’était proposé en premier
mais cela posait des problèmes évidents). Christine vend sa clef privée à Alice et Alice
part en Argentine prétendant être Christine.
Non seulement Christine a été payée pour son identité mais encore elle dispose main
tenant d ’un alibi parfait. Elle commet un crime pendant qu’Alice est en Argentine.
« Christine » a prouvé son identité en Argentine : comment pourrait-elle commettre un
crime chez elle?
Bien sûr, Alice est libre de commettre des crimes également. Elle les commet avant son
départ ou après son retour, de préférence près du domicile de Christine. D ’abord, elle
s’identifie comme Christine (elle a la clef privée de Christine, c ’est donc facile pour elle),
ensuite elle commet un crime et s’enfuit. La police vient alors appréhender Christine.
Christine prétendra qu’elle a loué son identité à Alice mais qui pourrait croire une
histoire aussi insensée?
Le problème est qu’Alice ne prouve pas effectivement son identité, elle prouve qu’elle
possède une information secrète. C ’est le lien entre cette information et la personne
qui est faussé. La solution des bébés « infalsifiables » éviterait ce genre de fraudes, de
même qu’un état policier dans lequel chaque citoyen devrait très fréquemment prouver
son identité (à la fin de chaque jour, à chaque coin de rue, etc.). Les méthodes de
biométrie— empreintes digitales, images rétiniennes, empreintes vocales, et ainsi de
suite—peuvent aider à résoudre le problème.
il ne fait que certifier que le document a été enregistré devant notaire à une certaine
date. Voilà ce à quoi il consent :
1° Alice prend le document et le multiplie par une valeur aléatoire. Cette valeur
aléatoire est appelée f a c t e u r d e c a m o u f l a g e .
2° Alice envoie le document camouflé à Bernard.
3° Bernard signe le document camouflé.
4° Alice divise par le facteur de camouflage, retrouvant ainsi le document original
signé par Bernard.
- Bernard ne peut pas faire le lien entre un document signé et l’acte de signature
du document Même s’il garde une trace de toutes les signatures en aveugle qu’il
a effectuées, il ne peut pas déterminer quand il a signé un document donné.
Estelle, assise entre les deux, qui écoute tout le protocole, en sait, encore moins que
Bernard.
Signatures en aveugle
Avec le protocole de signature en aveugle total, Alice peut faire signer n’importe quoi
par Bernard : « Bernard doit un million de francs à Alice », « Bernard est le père du
premier-né d’Alice », « Bernard doit un sachet de dragées à Alice ». Les possibilités
sont infinies. Nul besoin d’insister, ce protocole n’est pas particulièrement utile.
Il existe toutefois un moyen pour Bernard de savoir ce qu’il signe, tout en maintenant
les propriétés intéressantes de la signature en aveugle. Le cœur de ce protocole est la
122 Chapitre 5 Protocoles avancés
Ce protocole résiste aux tricheries éventuelles de Bernard. Pour tricher, il devrait pré
dire de façon sûre quel document OSCAR n’examinera pas. Ses chances sont de 1
sur n : pas très bonnes. OSCAR sait cela aussi et il est confiant quand il signe le ne
document : celui qu’il n’a pas pu examiner. Avec ce document-là, le protocole est le
même que le protocole précédent de signature en aveugle total, et il préserve toutes les
propriétés d ’anonymat.
Il est possible de rendre les chances pour Bernard de tricher avec succès aussi petites
que nécessaires. A l’étape 4, OSCAR choisit au hasard n /2 documents et Bernard lui
envoie les bons facteurs de camouflage correspondants à l’étape 5. À l’étape 7, OSCAR
multiplie ensembles les documents restants et signe le tout. À l’étape 8 , Bernard re
tire les facteurs de camouflage. La signature d’ OSCAR n’est valable que si les n /2
documents signés étaient identiques. Pour tricher, Bernard doit deviner quel est le
sous-ensemble qu’OSCAR va choisir; ses chances de réussite sont bien moindre que
lorsqu’il essaye de deviner le document qu’OSCAR n’examinera pas.
Il y a un autre moyen pour Bernard de tricher. Il peut engendrer deux documents
différents: un qu’OSCAR serait prêt à signer et un autre non. Ensuite, il trouve deux
facteurs de camouflage tels que l’un appliqué au premier document et l’autre au se
cond donnent le même document camouflé. De cette façon, si OSCAR demande à
examiner le document, Bernard lui donne le facteur de camouflage qui le transforme
en un document anodin. Si OSCAR ne demande pas à voir le document et le signe,
Bernard utilise le facteur de camouflage qui transforme le document camouflé en do
cument malveillant. Bien que cela soit théoriquement possible, les mathématiques des
algorithmes particuliers utilisés pour ce protocole, rendent les chances de Bernard de
trouver une telle paire de facteurs infiniment faibles. Nous en reparlons plus en détail
dans le paragraphe 23.12.
Brevets
C h a u m a posé des brevets sur différents types de signatures en aveugle (voir le ta
bleau 5.1).
pas enregistrer la clef publique de Bernard sur son propre ordinateur. Elle veut juste
lui envoyer un message confidentiel.
Les c r y p t o s y s t è m e s à b a s e d ’ i d e n t i f i c a t i o n 5 permettent de résoudre ce problème
[1429]. La clef publique de Bernard est basée sur son nom et son addresse électronique
(ou encore son numéro de téléphone, ou son addresse en ville, ou quoi que ce soit
d’autre). Avec la cryptographie à clef publique classique, Alice a besoin d ’un certificat
signé numériquement qui lie l’identité de Bernard à sa clef publique. Avec la cryptogra
phie à clef publique à base d ’identification, la clef publique de Bernard est son identité.
C ’est une idée vraiment séduisante, l’idée idéale dont on peut rêver pour un système
de courrier électronique: si Alice connaît l’addresse de Bernard, elle peut lui envoyer
du courrier en toute sécurité. Cela rend la cryptographie aussi transparente qu’il est
possible.
Le sytème est fondé sur Ivan qui fournit des clefs privées basées sur l’identité. Si jamais
la clef d’Alice est compromise, elle doit changer un aspect de son identité pour avoir
une autre clef. Le problème le plus sérieux est d ’élaborer un système qui ne laisse pas
la possibilité à des utilisateurs malhonnêtes de s’unir pour créer une clef.
Une grande part de travail a été faite sur les mathématiques sous-jacentes— la plupart
au Japon— qui s’avèrent affreusement compliquées quand il s’agit de rendre le sytème
sûr. De nombreuses solutions parmi celles proposées impliquent que Ivan choisisse un
nombre aléatoire pour chaque utilisateur— ce qui à mon avis vient à l’encontre de l’idée
même du système. Certains algorithmes décrits aux chapitres 19 et 20 peuvent s’utiliser
à base d ’identification. Pour les détails algorithmiques et cryptographiques, se reporter
à [198, 1429, 891, 1030, 1519, 1224, 1205, 909, 693, 675, 1138, 1031, 1520, 1544, 1552,
6 8 , 1218, 318, 319, 1553, 1547, 1551, 944, 1521, 750, 1238]. On trouvera un algorithme
qui ne repose pas sur des nombres aléatoires dans [1043]. Le système introduit dans
[1554, 1555, 1511] résiste aux attaques à clefs publiques choisies, de même que celui
présenté dans [1550, 1548, 1549, 1003, 378, 1546]. Honnêtement, rien de ce qui a été
proposé jusqu’à présent n’est à la fois réalisable et sûr.
5. Ces cryptosystèm es sont aussi qualifiés de systèmes sans partage interactif de clef.
5.5 Transfert inconscient 125
faire des heures supplémentaires et il va rater son poker à l’aveugle hebdomadaire avec
Alice.)
Alice passe alors par là :
1 ° Alice engendre deux paires « clef publique clef privée », soit 4 clefs au total.
Elle envoie les deux clefs publiques à Bernard.
2° Bernard choisit une clef pour un algorithme à clef secrète (le DES par
exemple). Il choisit une des clefs publiques d’Alice aléatoirement et chiffre sa
clef DES avec cette dernière. Il envoie la clef chiffrée à Alice sans lui dire
quelle clef publique il a utilisée pour la chiffrer.
3° Alice déchiffre la clef de Bernard avec ses deux clefs privées. Dans un des cas
elle utilise la bonne clef et déchiffre avec succès la clef DES de Bernard. Dans
l’autre cas, elle utilise la mauvaise clef et n’engendre rien d’autre qu’une suite
de bits sans sens qui néanmoins n’en ressemble pas moins à une clef DES
quelconque. Comme elle ne connaît pas le texte en clair correct, elle ignore
quoi est quoi.
4° Alice chiffre ses deux messages chacun avec une des deux clefs DES qu’elle a
engendré à l’étape précédente (une vraie et une sans sens) et envoie les deux
résultats à Bernard.
5° Bernard reçoit l’un des messages d’Alice chiffré avec la bonne clef DES et
l’autre message avec une clef factice. Bernard utilise sa clef DES pour déchiffrer
les deux messages d’Alice mais il ne peut lire avec succès que l’un d’entre eux.
126 Chapitre 5 Protocoles avancés
À ce point, le transfert inconscient est terminé. Bernard a pu lire un des deux messages
(celui chiffré avec sa clef DES) et Alice n’a aucun moyen de savoir lequel. Une étape
supplémentaire est nécessaire pour qu’Alice ne puisse pas tricher.
1 ° Après avoir terminé le protocole et quand les deux résultats possibles du trans
fert sont connus, Alice doit donner à Bernard ses clefs privées afin qu ’il puisse
vérifier qu’elle n’a pas triché. Après tout, elle pourrait avoir chiffré le même
message avec les deux clefs à l’étape 4-
1 . Alice possède n messages différents. Bernard peut choisir un des n messages pour
qu’Alice le signe, et Alice n ’aura aucun moyen de savoir quel message elle a signé.
2 . Alice possède un message. Bernard peut choisir une clef parmi n avec laquelle Alice
va signer le message, et Alice ne pourra pas déterminer la clef elle aura utilisé.
C ’est une idée intéressante, je suis sûr qu’elle a son utilité quelque part.
5.7 Signature simultanée de contrat 127
6° Alice et Bernard informent Ivan qu’ils ont chacun une copie du contrat signée
par eux deux.
7° Ivan déchire les deux copies de contrat chacun avec une seule signature.
Le protocole marche parce qu’Ivan empêche les deux parties de tricher. Si Bernard
refusait de signer le contrat à l’étape 5, Alice pourrait demander à Ivan la copie du
contrat déjà signée par Bernard. Si Alice refusait de signer à l’étape 4, Bernard pourrait
faire de même. Quand Ivan indique qu’il a reçu les deux contrats à l’étape 3, Alice et
Bernard savent tous deux qu’ils sont liés par le contrat. Si Ivan ne reçoit pas les deux
contrats, il déchiffre celui qu’il a reçu et aucune partie n’est liée.
1° Alice signe avec la première lettre de son nom et passe le contrat à Bernard.
2° Bernard signe avec la première lettre de son nom et passe le contrat à Alice.
3° Alice signe avec la deuxième lettre de son nom et passe le contrat à Bernard.
4° Bernard signe avec la deuxième lettre de son nom et passe le contrat à Alice.
5° Cela continue ainsi jusqu’à ce qu’Alice et Bernard aient tous deux signé avec
leurs noms en entier.
Si vous ignorez le défaut évident de ce protocole (Bernard a un nom plus long qu’Alice),
cela marchera. Après avoir signé avec une seule lettre, Alice sait qu’aucun juge ne la
considérera comme liée par les termes du contrat. Mais cette lettre est un acte de bonne
volonté et Bernard répond avec un acte similaire de bonne volonté.
Après que chaque participant a signé avec quelques lettres, un juge sera certainement
convaincu que les deux parties ont signé le contrat. Toutefois, les détails sont obscurs.
Sûrement qu’ils ne sont pas liés après la première lettre ; mais ils le sont certainement
dès qu’ils ont signé leur nom entier. A quel point du protocole deviennent-ils liés?
128 Chapitre 5 Protocoles avancés
Après avoir signé avec la moitié de leurs noms? Les deux tiers de leurs noms? Les trois
quarts?
Comme ni Alice ni Bernard ne sont certains de l’instant à partir duquel ils sont liés,
ils craignent un peu, à chaque instant, d ’être liés. Cela n’a pas de sens pour Bernard
de dire : « Tu as signé avec quatre lettres et moi je n’ai signé qu’avec trois lettres. Tu
es liée et moi pas. » Il n’y a pas de raison que Bernard ne continue pas le protocole.
Plus longtemps ils continuent, plus grande est la probabilité qu’un juge les considèrent
comme liés. Une fois de plus, il n ’y a aucune raison de ne pas continuer le protocole.
Après tout, ils voulaient tous deux signer le contrat ; ils ne voulaient simplement pas
signer l’un avant l’autre.
6 ° Soit p' la probabilité du message que Bernard a reçu d ’Alice à l’étape précédente.
Bernard envoie à Alice un message signé avec le minimum de p = p' + B ou
p= 1.
Tout au long du déroulement du protocole, Alice et Bernard consentent à être liés par
le contrat avec une probabilité de plus en plus grande. Par exemple, le premier message
d’Alice pourrait indiquer qu’elle se considère comme liée avec une probabilité de 2 %.
Bernard pourrait répondre qu’il est lié avec une probabilité de 3 %. Le message suivant
d’Alice pourrait indiquer qu’elle est liée avec une probabilité de 4 %, et ainsi de suite
jusqu’à ce qu’ils soient liés avec une probabilité de 1 0 0 %.
Si Alice et Bernard terminent tous deux le protocole, tout va bien. Si la date d’échéance
du protocole arrive, chaque participant peut montrer le contrat à un juge avec le dernier
5.7 Signature simultanée de contrat 129
message signé de l’autre participant. Le juge choisit simplement une valeur aléatoire
entre 0 et 1. Si la valeur est inférieure à la probabilité que l’autre participant a signé,
alors les parties sont liées. Si la valeur est plus grande que la probabilité, alors les
parties ne sont pas liées6. C ’est cela que l’on entend par être lié au contrat avec une
probabilité p.
C’est le protocole de base, mais il peut y avoir d ’autres complications. Si Alice com
mence à signer des messages avec des incréments de plus en plus faibles de probabilité,
Bernard peut répondre dans le même sens. Le juge peut trancher en l’absence d’un
des participants. La décision du juge lie soit les deux parties, soit aucune ; il n’y a pas
de situations où l’une des parties est liée et l’autre pas. Aussi longtemps que l’une des
parties est disposée à avoir une probabilité légèrement supérieure d ’être liée à l’autre
(peut importe la petitesse de l’écart), le protocole se terminera.
1 ° Alice et Bernard choisissent chacun aléatoirement 200 clefs DES groupées par
paires. Il n’y a rien de spécial à propos de ces paires ; elles sont juste appariées
pour les besoins du protocole.
3° Alice et Bernard chiffrent tous deux leurs paires de messages avec chaque paire
de clefs D ES, le message gauche avec la clef gauche de la paire, et le message
droit avec la clef droit de la paire.
6° Alice et Bernard déchiffrent tous deux les moitiés de messages comme ils
peuvent, en utilisant les clefs qu’ils ont reçues. Ils s ’assurent que les messages
déchiffrés sont corrects.
7° Alice et Bernard s ’envoient réciproquement les premiers bits des 2n clefs DES.
8° Alice et Bernard répètent l’étape 7 pour les deuxièmes bits des 2n clefs DES,
les troisièmes bits, et ainsi de suite, jusqu’à ce que toutes les clefs DES aient
été transférées.
9° Alice et Bernard déchiffrent les moitiés restantes des paires de messages et le
contrat est signé.
Pourquoi Alice et Bernard doivent-ils faire tout cela? Supposons qu’Alice veuille tricher
et voyons ce qui se passe. Aux étapes 4 et 5, Alice peut perturber le protocole en
envoyant à Bernard des chaînes de bits sans sens. Bernard découvrirait cela à l’étape
6 , quand il essaierait de déchiffrer la moitié qu’il a reçue, quelle que soit cette moitié.
Bernard peut alors arrêter sans dommage, puisqu’Alice ne peut déchiffrer aucune des
paires de messages de Bernard.
Si Alice était très maligne, elle pourrait ne perturber que la moitié du protocole. Elle
pourrait envoyer la moitié gauche de chaque paire correctement et envoyer du charabia
comme moitié droite. Bernard n’a que 50 % de chance de recevoir la moitié droite et
donc Alice peut tricher la moitié du temps. Toutefois, cela ne marche que s’il n’y a
qu’une paire de clefs. S’il n’y avait que deux paires, ce type de supercherie pourrait
réussir dans 25 % des cas. C ’est pour cela que n doit être grand. Alice doit anticiper
correctement le résultat de n protocoles de transfert inconscient; Alice n’a que 1 chance
sur 2” de réussir cela. Si n = 10, Alice a une chance sur 1024 de rouler Bernard.
Alice peut aussi envoyer des bits aléatoires à Bernard à l’étape 8 . Peut-être que Bernard
ne saura pas qu’elle lui a envoyé des bits aléatoires jusqu’à ce qu’il reçoive la clef
complète et qu’il essaie de déchiffrer les moitiés de messages. Mais une fois de plus, les
probabilités sont du côté de Bernard. Il a déjà reçu la moitié des clefs et Alice ne sait
pas quelles sont ces moitiés. Alice est sûre de lui envoyer un bit erroné pour une des
clefs qu’il a déjà reçues, et lui, il saura immédiatement qu’Alice essaie de le rouler.
Peut-être qu’ Alice va continuer l’étape 8 jusqu’à ce qu’elle ait suffisamment de bits des
clefs pour casser les messages DES et ensuite arrêter de transmettre les bits. Le DES
a une longueur de clef de 56 bits. Si elle reçoit 40 des 56 bits, elle ne doit essayer que
2 16 (65 536) clefs pour pouvoir lire le message une tâche qui est certainement à la
portée d ’un ordinateur. Mais Bernard aura exactement le même nombre de bits des
clefs d ’Alice (ou un bit de moins tout au plus) et donc il pourra faire la même chose.
Alice n’a pas d’autre choix que de poursuivre le protocole.
Le point principal est qu’Alice doit jouer le jeu honnêtement, car les chances de rouler
Bernard sont bien trop minces. A la fin du protocole, les deux parties ont n paires de
messages signés, chacune d ’elles suffit pour une signature valable.
Alice a néanmoins la possibilité de tricher; elle peut envoyer des messages identiques
à Bernard durant l’étape 5. Bernard ne pourra s’en rendre compte qu’à la fin du
protocole, mais il peut utiliser une transcription du protocole pour convaincre un juge
de la duplicité d ’Alice.
Il y a deux faiblesses dans les protocoles de ce type [120] :
Premièrement, il y a un problème si l’une des parties a nettement plus de puissance de
calcul que l’autre. Si, par exemple, Aüce peut casser l’algorithme plus rapidement que
5.8 Courrier électronique certifié 131
Bernard, alors elle peut arrêter plus tôt de transmettre des bits à l’étape 8 et calculer
elle-même les clefs de Bernard. Bernard qui ne peut pas faire la même chose en un
temps raisonnable ne sera pas content.
Deuxièmement, il y a un problème si une des parties arrête le protocole plus tôt. Si
Alice arrête abruptement le protocole, tous deux devront faire le même effort pour
faire les calculs, mais Bernard n’a pas de réel recours légal. Si, par exemple, le contrat
spécifie qu’il doit faire quelque chose dans une semaine, et qu’ Alice arrête le protocole
en un point où Bernard devrait consacrer un an à calculer pour qu’ Alice soit vrai
ment engagée, il y aurait alors un problème. La vraie difficulté ici est qu’il n’y a pas
d’échéance à court terme à laquelle le processus doit se terminer comme il se doit : soit
les deux parties liées, soit aucune.
On retrouve ces problèmes avec les protocoles décrits aux paragraphes 5.8 et 5.9.
1° Alice chiffre son message en utilisant une clef DES aléatoire et envoie le ré
sultat à Bernard.
2° Alice engendre n paires de clefs DES. La première clef de chaque paire est
engendrée aléatoirement; la seconde clef de chaque paire est le ou exclusif de
1a. première clef et de la clef de chiffrement du message.
3° Alice chiffre un message factice avec chacune de ses 2n clefs.
4° Alice envoie à Bernard tous les messages chiffrés en s ’assurant qu’il sache que
tel message est telle moitié de telle paire.
132 Chapitre 5 Protocoles avancés
Les étapes 5 à 8 pour Bernard et les étapes 9 à 12 pour Alice et Bernard sont les
mêmes que pour le protocole de signature de contrats. La différence se marque par
les messages factices chiffrés d’Alice. Ds donnent à Bernard un moyen de vérifier les
transferts inconscients d’Alice à l’étape 1 0 , qui oblige Alice à être honnête aux étapes
11 à 13. Et tout comme pour le protocole de signature simultanée de contrat, une
moitié gauche et une moitié droite d ’une des paires de messages d’Alice sont toutes
deux nécessaires pour terminer le protocole.
protocole suivant peut être observé dans une cours d ’école, il ne marche manifestement
pas:
Protocoles ésotériques
4. Personne ne peut dupliquer le vote de quelqu’un d ’autre. (Il s’avère que cette
exigence est la plus difficile à remplir.)
6. Tous les votants peuvent vérifier que leur vote a bien été pris en compte dans le
décompte final.
Avant d’aborder les protocoles compliqués qui ont ces caractéristiques, voyons quelques
protocoles simplistes qui ne les ont pas.
Ce protocole a des défauts à chaque point. L’A C D n’a aucune idée d ’où viennent les
votes, et donc elle ne sait pas si les votes sont émis par des votants autorisés ou pas.
Elle n’a pas la moindre possibilité de détecter si les votants votent plus d ’une fois.
Du côté des avantages, personne ne peut modifier le vote de quelqu’un d ’autre, mais
personne n’essaierait de le faire quand c’est tellement plus facile de voter un nombre
infini de fois pour forcer le résultat de son choix.
Ce protocole satisfait les propriétés ( 1 ) et ( 2 ) : seuls les votants autorisés peuvent voter
et personne ne peut voter plus d ’une fois. Pour cela, l’A C D doit garder une trace des
votes reçus à l’étape 3. Les votes sont signés avec la clef privée des votants donc l’ACD
sait qui a voté, qui n’a pas voté et combien de fois chaque votant a voté. Si un vote
signé par un votant non autorisé arrive — ou un vote signé par un votant qui a déjà
voté — l’A C D l’ignore. De plus, personne ne peut modifier le vote d’autrui même s’il
l’intercepte à l’étape 2 grâce à la signature numérique.
Le défaut de ce protocole est que la signature est attachée au vote et qu’ainsi l’ACD
sait qui a voté pour qui. Le chiffrement des votes avec la clef publique de l’ACD
empêche quiconque écoute le protocole de déterminer qui vote pour qui, mais ce n’est
pas suffisant. C ’est comme si un assesseur de bureau de vote regardait par-dessus votre
épaule dans l’isoloir.
Les deux exemples suivants montrent à quel point il est difficile de remplir ne serait-ce
que les trois premières exigences d ’un protocole de vote sûr.
4° Les votants dévoilent les messages pour donner un ensemble de votes signés
par TA C D . (Ces votes sont signés mais non chiffrés, donc les votants peuvent
aisément voir quel vote est « oui » et quel vote est « non ».)
5° Les votants choisissent l’un des votes ( O Démocratie !) et chiffrent celui-ci avec
la clef publique de l’A C D .
7° L ’A C D déchiffre les votes, vérifie les signatures, vérifie dans sa base de don
nées pour des numéros de série redondants, enregistre le numéro de série, et
décompte les voix. Elle publie les résultats du vote avec tous les numéros de
série et leur vote associé.
6° Après que tous les votes ont été reçus, Z’A C D publie le résultat ainsi que les
listes des numéros d’identification et pour qui leur propriétaire a voté.
Un avantage de ce système est que tous les votants peuvent regarder la liste des nu
méros d ’identification et trouver le leur. Cela leur prouve que leur vote a été pris en
compte. Bien sûr, tous les messages circulant entre les différents participants du pro
tocole doivent être chiffrés et signés pour éviter que quelqu’un puisse se faire passer
pour quelqu’un d ’autre et pour éviter les interceptions.
L’A C D ne peut pas modifier les votes parce que tous les votants vont rechercher leur
numéro d ’identification. Si un votant ne le trouve pas ou le trouve dans une autre liste
que celle pour laquelle il a voté, il saura immédiatement qu’il y a eu tricherie. L’ACD
ne peut pas trafiquer l’urne parce que l’A C L surveille. L ’A C L sait combien de votants
ont été validés ainsi que leurs numéros de validation. Toute modification de l’un ou
l’autre est immédiatement détectée.
Martin qui n’est pas un votant autorisé, peut essayer de tricher en devinant un numéro
de validation valide. La probabilité de succès de cette attaque peut être minimisée
en rendant le nombre de numéros de validation possibles nettement plus grand que
le nombre de numéros de validation effectivement émis : un million de nombres de
100 chiffres par exemple. Bien sûr, les numéros de validation doivent être engendrés
aléatoirement.
Malgré cela, l’A C L fait, en quelque sorte, toujours autorité. Elle peut valider des
votants non autorisés. Elle peut valider des votants légitimes plusieurs fois. Le risque
peut être minimisé en obligeant l’A C L à publier la liste des votants validés (mais pas
leur numéro de vaüdation). Si le nombre de votants sur cette liste est inférieur au
nombre de votes comptés, il y a anguille sous roche. S’il y a plus de votants validés
que de votes, cela signifie probablement que des votants validés ne se sont pas donnés
la peine de voter. De nombreuses personnes sont enregistrées pour voter choisissent de
ne pas participer aux ballottages.
Ce protocole est aussi vulnérable à une collusion entre l’A C D et l’ACL. Si les deux
se mettent ensemble, elles peuvent corréler leurs bases de données et déterminer qui a
voté pour qui.
6.1 Élections sûres 139
- A N D O S (voir § 4.13) est utilisé pour distribuer des numéros de validation ano
nymes à l’étape 2 .
7. Les votants peuvent changer d’avis (c’est-à-dire, retirer leur vote et voter à nou
veau) pendant une période de temps donnée.
8. Si les votants découvrent que leur vote a été mal comptabilisé, ils peuvent iden
tifier et corriger le problème sans compromettre la confidentialité de leur vote.
Voici le protocole :
I ,E k(I,v)
E k(I,v)
I,d
Chapitre 6 Protocoles ésotériques
8° L ’A C D utilise d pour déchiffrer les votes. A la fin de l’élection, elle publie les
résultats de l’élection et pour chaque vote possible, la liste de tous les E k(I,v)
contenant ce vote-là.
10 ° Si un votant veut changer son vote (c ’est possible dans certains types d’élec
tions) de v à v', il peut envoyer à l ’A C D :
I ,E k(i,v'),d
Un autre protocole de vote [587] utilise des signatures en aveugle à la place d ’ANDOS,
mais il est essentiellement le même. Les étapes 1 à 3 sont des préliminaires au vote
lui-même. Leur but est de déterminer et de publier le nombre total de votants. Bien
que certains d ’entre eux ne participeront probablement pas, cela réduit la possibilité
pour l’A C D d ’ajouter des votes frauduleux.
A l’étape 4, il est possible que deux votants reçoivent le même numéro d ’identification.
Cette éventualité peut être évitée en ayant bien plus de numéros d ’identification qu’il
n’y a de votants. Si deux votants soumettent des votes avec le même identificateur,
l’A C D engendre un nouveau numéro d’identification i', choisit l’un des deux votes et
publie :
r , E k(i,v)
5° Bernard déchiffre tous les votes avec sa clef publique, vérifie que son vote est
bien parmi l’ensemble des votes, retire toutes les chaînes aléatoires à ce niveau,
mélange tous les votes et envoie le résultat à Christine.
Chaque vote ressemble à ceci maintenant:
E c ( R 3 ,E d ( R 2,E a ( E b ( E c ( E d ( V ,R 1 ) ) ) ) ) )
142 Chapitre 6 Protocoles ésotériques
6° Christine déchiffre tous les votes avec sa clef publique, vérifie que son vote est
bien parmi l’ensemble des votes, retire toutes les chaînes aléatoires à ce niveau,
mélange tous les votes et envoie le résultat à David.
Chaque vote ressemble à ceci maintenant :
E d (R 2 ,E a (E b (E c (E d (V A ) ) ) ) )
7° David déchiffre tous les votes avec sa clef publique, vérifie que son vote est
bien parmi l ’ensemble des votes, retire toutes les chaînes aléatoires à ce niveau,
mélange tous les votes et envoie le résultat à Alice.
Chaque vote ressemble à ceci maintenant :
E a (E b (E c (E d (V,R i))))
8° Alice déchiffre tous les votes avec sa clef publique, vérifie que son vote est bien
parmi l’ensemble des votes, signe l’ensemble des votes, et envoie le résultat à
Bernard, Christine et David.
Chaque vote ressemble à ceci maintenant:
S a (E b (E c (E d (V ,/Zi))))
9° Bernard vérifie et retire la signature d’Alice. Il déchiffre tous les votes avec sa
clef publique, vérifie que son vote est bien parmi l’ensemble des votes, signe
l’ensemble des votes, et envoie le résultat à Alice, Christine et David.
Chaque vote ressemble à ceci maintenant :
S B {E c{E D{V,Ry)))
10 ° Christine vérifie et retire la signature de Bernard. Elle déchiffre tous les votes
avec sa clef publique, vérifie que son vote est bien parmi l’ensemble des votes,
signe l ’ensemble des votes, et envoie le résultat à Alice, Bernard et David.
Chaque vote ressemble à ceci maintenant:
SC{E D{V,Ry))
1 1 ° David vérifie et retire la signature de Christine. Il déchiffre tous les votes avec
sa clef publique, vérifie que son vote est bien parmi l ’ensemble des votes, signe
l’ensemble des votes, et envoie le résultat à Alice, Bernard et Christine.
Chaque vote ressemble à ceci maintenant:
S d {V,R i)
12° Tous vérifient et retirent la signature de David. Ils s ’assurent que leur vote est
bien parmi l’ensemble des votes (en cherchant leur chaîne aléatoire parmi les
votes).
13° Chacun retire les chaînes aléatoires de chaque vote et compte les voix.
6.1 Élections sûres
Non seulement ce protocole marche mais il est auto-arbitré. Alice, Bernard, Chris
tine et David sauront immédiatement si quelqu’un triche. Aucune A C D ou A C L n’est
nécessaire. Pour voir comment cela marche, essayons de tricher.
Si quelqu’un essaie de rajouter des voix, Alice le détectera à l’étape 3 quand elle
recevra plus de votes que de participants. Si Alice essaie de rajouter des voix, Bernard
le détectera à l’étape 4.
Un moyen plus détourné de tricher est de remplacer un vote par un autre. Comme les
votes sont chiffrés avec plusieurs clefs publiques, n’importe qui peut créer autant de
votes valides que nécessaire. Il y a deux rondes au protocole de déchiffrement : la ronde
1 est constituée des étapes 3 à 7, et la ronde 2 est constituée des étapes 8 à 11. Le
remplacement de votes est détecté de façon différente dans les deux rondes.
Si quelqu’un remplace un vote par un autre dans la ronde 2 , ces actions sont découvertes
immédiatement. A chaque étape les votes sont signés et envoyés à tous les votants. Si
un (ou plusieurs) votant constate que son vote n ’est plus dans l’ensemble des votes, il
peut immédiatement arrêter le protocole. Comme les votes sont signés à chaque étape,
et que tout le monde peut remonter la ronde 2 du protocole, il est aisé de déterminer
qui a remplacé des votes.
Remplacer un vote par un autre pendant la ronde 1 du protocole est plus subtil. Alice ne
peut pas le faire à l’étape 3, car Bernard, Christine ou David le détecteraient à l’étape
5, 6 ou 7. Bernard pourrait essayer à l’étape 5. S’il remplace le vote de Christine ou de
David (rappelez-vous qu’il ne sait pas à qui tel vote correspond). Christine ou David
s’en rendront compte à l’étape 6 ou 7. Ils ignoreront qui a modifié leur vote (bien
que cela ne puisse être que quelqu’un ayant déjà manipulé leur vote) mais ils sauront
que leur vote a été falsifié. Si Bernard est chanceux et choisit le vote d’Alice pour la
substitution, elle ne s’en rendra compte qu’à la deuxième ronde. A ce moment-là, elle
détectera à l’étape 8 que son vote manque. Toutefois, elle ne saura pas qui a modifié
son vote. Durant la première ronde, les votes sont mélangés d ’une étape à l’autre et
non signés: il est impossible pour qui que ce soit de remonter le protocole afin de
déterminer qui a truqué les votes.
Un autre moyen de tricher est d ’essayer de deviner qui a voté pour qui. A cause du
mélange durant la première ronde, il est impossible de remonter le protocole pour
associer les votants aux votes. Le retrait des chaînes aléatoires pendant la première
ronde est également crucial pour préserver l’anonymat. Si elles ne sont pas retirées, le
mélange des votes peut être défait en rechiffrant les votes avec la clef publique de celui
qui a mélangé. Tant que le protocole tient, la confidentialité des votes est sûre.
Plus fort encore, à cause de la chaîne aléatoire initiale R i , même des votes identiques
sont chiffrés différemment à chaque étape du protocole. Personne ne connaît le résultat
du vote avant l’étape 1 1 .
Quels sont les défauts de ce protocole? Premièrement, le protocole nécessite un grand
nombre de calculs. L’exemple décrit ici n’implique que 4 votants et c ’était compliqué.
Cela ne marcherait jamais pour de vraies élections avec des dizaines de milliers de
votants. Deuxièmement, David apprend les résultats de l’élection avant tout le monde.
Bien qu’il ne puisse plus en modifier le résultat, cela lui donne un pouvoir que les
autres n’ont pas. Pour en finir, tout cela s’applique aux protocoles de vote avec autorité
centrale.
Le troisième problème est qu’Alice peut faire le même vote que n’importe quel autre
votant. Pour comprendre pourquoi cela peut être un problème, considérons une élection
144 Chapitre 6 Protocoles ésotériques
à trois personnes Alice, Bernard et Estelle. Estelle ne soucie pas du résultat de l’élection,
mais elle veut connaître le vote d ’Alice. Pour cela, elle copie le vote d’Alice et le résultat
de l’élection sera forcément égal au vote d ’Alice.
X. C ette idée de scinder une autorité centrale en plusieurs parties, en qui l’ on n ’a confiance que si
elles sont réunies vient de [320].
2. Il y a des protocoles qui perm ettent de vérifier l’exactitude des totaux.
6.2 Calcul réparti sûr
Protocole n° 1
Comment un groupe de personnes peuvent-elles calculer la moyenne de leurs salaires
sans que personne n’apprenne le montant du salaire d ’un autre?
1° Alice ajoute un nombre aléatoire secret à son salaire, chiffre le résultat avec la
clef publique de Bernard et l’envoie à Bernard.
2° Bernard déchiffre le résultat d ’Alice avec sa clef privée. Il ajoute son salaire à
ce qu’il a reçu d’Alice, chiffre le résultat avec la clef publique de Christine et
l’envoie à Christine.
3° Christine déchiffre le résultat de Bernard avec sa clef privée. Elle ajoute son
salaire à ce qu’elle a reçu de Bernard, chiffre le résultat avec la clef publique
de David et l’envoie à David.
4° David déchiffre le résultat de Christine avec sa clef privée. Il ajoute son salaire
à ce qu’il a reçu de Christine, chiffre le résultat avec la clef publique d’Alice et
l’envoie à Alice.
5° Alice déchiffre le résultat de David avec sa clef privée. Elle retire le nombre
aléatoire de l’étape 1 pour retrouver la somme des salaires de tout le monde.
Ce protocole fait l’hypothèse que tout le monde est honnête. Si les participants mentent
à propos de leur salaire, la moyenne sera fausse. Un défaut plus sérieux est qu’Alice
peut truquer le résultat présenté aux autres. Elle peut retirer le nombre qu’elle veut
du résultat à l’étape 5 et personne ne s’en rendrait compte. Alice pourrait en être
empêchée en l’obligeant à mettre en gage son nombre aléatoire en utilisant n’importe
quel schéma de mise en gage de le paragraphe 4.9 mais quand elle révèle son nombre
aléatoire à la fin du protocole, Bernard peut connaître le montant du salaire d ’Alice.
Protocole n° 2
Alice et Bernard sont ensemble au restaurant et discutent de leur âge respectif. Ni l’un
ni l’autre ne veut dire son âge à l’autre mais ils sont tous les deux curieux de savoir
qui est le plus âgé. Ils pourraient chacun murmurer leur âge à l’oreille d’un tiers de
confiance (le serveur, par exemple), qui calculera de tête et qui annoncera le résultat
à Alice et Bernard.
Il y a deux défauts au protocole ci-dessus. Premièrement, le serveur ordinaire n’a pas
de capacité de calcul pour traiter des problèmes plus complexes que la comparaison
entre deux nombres. Deuxièmement, si Alice et Bernard étaient vraiment soucieux du
caractère secret de leurs informations, ils devraient noyer le serveur dans un verre d’eau
de Vichy sinon celui-ci pourrait tout raconter au sommelier.
La cryptographie à clef publique offre une solution bien moins violente. U existe un
protocole grâce auquel Alice qui connaît la valeur a, et Bernard qui connaît la va
leur b, peuvent ensemble calculer f(a,b) de manière qu’ Alice n’ait aucune information
concernant b et que Bernard n’ait aucune information concernant a. Ainsi, Alice et
Bernard sont tous deux convaincus de la validité des calculs. Comme l’algorithme
146 Chapitre 6 Protocoles ésotériques
cryptographique utilisé est partie intégrante du protocole, les détails seront donnés
dans le paragraphe 23.14.
Bien sûr, ce protocole ne protège pas contre les tricheurs actifs. Il n’y a rien qui empêche
Alice (ou Bernard par la même occasion) de tricher sur son âge. Si Bernard était
un programme informatique qui exécutait aveuglément le protocole, Alice pourrait
apprendre son âge (est-ce que l’âge d ’un programme informatique est compté à partir
du temps où il a été écrit ou à partir du temps où il a commencé à être exécuté?) par
applications répétées du protocole. Alice peut exécuter le protocole en donnant comme
âge 60 ans. Après avoir appris qu’elle est plus âgée, elle exécute le protocole à nouveau
en prétendant être âgée de 30 ans. Après avoir appris que Bernard est plus âgé, elle
exécute le protocole à nouveau avec 45 et ainsi de suite jusqu’à que ce qu’elle connaisse
l’âge de Bernard avec une précision aussi grande que souhaitée.
En faisant l’hypothèse que les participants ne trichent pas activement, il est aisé
d ’étendre ce protocole à plus de deux participants. N’importe quel nombre de personnes
peuvent déterminer l’ordre de leurs âges par des applications honnêtes et répétées du
protocole ; et aucun participant n’apprendra l’âge d’un autre participant.
Protocole n° 3
Alice aime faire des choses un peu perverses avec des ours en peluche. Bernard a des
fantasmes érotiques à propos des tables en marbre. Chacun est gêné d ’évoquer ses
fétiches particuliers mais aimerait bien trouver le compagnon qui partage leur ... hum
... style de vie.
Au « Service Informatique Sécurisé de Rencontres de Groupetm » nous avons conçu
un protocole pour de telles personnes. Nous avons numéroté une liste étonnante de
fétiches depuis « a » jusqu’à « z ». Discrètement, séparés par un modem, Alice et
Bernard peuvent participer à un protocole multi-participants sûr. Ensemble, ils peuvent
déterminer s’ils partagent ou non un fétiche particulier. Si oui, ils peuvent envisager
une heureuse relation. Si non, ils peuvent se dire au revoir, assurés de la confidentialité
de leurs secrets. Personne, même pas la « Secure Multiparty Computation Dating
Servicetm » ne saura jamais.
Voilà comment ça marche.
1 ° Alice applique une fonction de hachage a sens unique au nom de son fétiche et
obtient une suite de huit chiffres.
2° Alice se sert de cette suite de chiffres comme d’un numéro de téléphone au quel
elle appelle et laisse un message pour Bernard. Si personne ne répond ou si le
numéro n’est pas en service, Alice applique autant de fois qu’il est nécessaire
la fonction de hachage au numéro de téléphone pour avoir en ligne quelqu’un
qui puisse participer au protocole.
3° Alice dit à Bernard combien de fois elle a du appliquer la fonction de hachage
au nom de son fétiche.
4° Bernard applique la fonction de hachage au nom de son fétiche le même nombre
de fois. Il téléphone au numéro que forme le résultat et demande si personne
n’a laissé de message pour lui.
Bernard peut faire une attaque à texte en clair choisi. Il peut appliquer la fonction de
hachage à des noms de fétiches usuels et appeller aux numéros de téléphones résultants
6.2 Calcul réparti sûr 147
à la recherche de messages pour lui. Ce protocole ne marche vraiment que s’il y a assez
de textes en clair possibles pour rendre cette attaque infaisable.
Il existe aussi un protocole mathématique similaire au protocole n° 2. Alice connaît a,
Bernard connaît b et ensemble ils vont déterminer si a = b de telle manière que Bernard
n’apprenne rien sur a et Alice n’apprenne rien sur b. Les détails sont donnés dans le
paragraphe 23.14.
Protocole n° 4
Voici un autre problème pour le calcul réparti sûr [1375]. Un comité se réunit réguliè
rement pour voter secrètement sur certains sujets. (Oui, ils gouvernent secrètement le
monde, ne dites à personne que je vous l’ai dit.) Tous les membres du comité peuvent
voter par « oui » ou « non ». En plus, deux participants ont le droit d’émettre des
« super-votes » : « S—oui » et « S non ». Ils ne sont pas obligés d’émettre des super
votes, ils peuvent émettre des votes normaux s’ils préfèrent. Si personne n’émet de
super-vote, alors la majorité des voix décide de l’issue du scrutin. Dans le cas où il n’y
a qu’un seul super-vote, ou deux super-votes équivalents, tous les votes normaux sont
ignorés. Dans le cas de deux super-votes contradictoires, la majorité des votes normaux
l’emporte. Nous voulons un protocole qui réalise de façon sûre ce type de vote.
Deux exemples illustreront le processus de vote. Faites l’hypothèse qu’il y a 5 votants
normaux, Nj à IV5 et deux super-votants Si et S2. Voici le résultat du vote n° 1
Si S-2 Ni N2 N3 N4 N5
S -oui non non non non oui oui
Si S2 Ni N2 N3 N4 N5
S -oui S- non non non non oui oui
3. Alice et Bernard peuvent tous deux calculer la sortie en étant tous deux convain
cus que la sortie est correcte et que personne n ’a triché.
Les détails concernant les évaluations sûres de circuits peuvent être trouvés dans [832].
« Chaque cryptographe lance une pièce non biaisée derrière son menu, entre
lui et le cryptographe à sa droite, de telle façon qu’eux deux seuls voient le
résultat du lancer. Chaque cryptographe annonce alors à haute voix si les
deux pièces qu’il peut voir — celle qu’il a lancée et celle que son voisin de
gauche a lancée — sont tombées sur la même face ou sur des faces opposées.
Si l’un des cryptographes est le payeur, il annonce le contraire de ce qu’il
voit. Un nombre impair de différences annoncé autour de la table indique
que l’un des cryptographes paie l’addition ; un nombre pair de différences
indique que la NSA paie (en faisant l’hypothèse que le repas n ’est payé
qu’une seule fois). Ainsi, si un cryptographe paie, aucun des deux autres
n’apprend quoi que ce soit concernant l’identité du payeur à partir des
annonces. »
Pour voir si cela marche, imaginez qu’Alice essaie de deviner quel autre cryptographe a
payé le dîner (en faisant l’hypothèse que ni elle ni la NSA n’ont payé). Si elle voit deux
6.3 Diffusion de messages anonymes 149
faces différentes, alors les deux autres cryptographes, Bernard et Christine, ont tous
deux annoncé « identiques », ou ils ont tous deux annoncé « différentes ». (Rappelez-
vous qu’un nombre impair de cryptographes annonçant « différentes » indique que
l’un d’entre eux paie.) Si tous les deux ont dit « différentes » alors le payeur est le
cryptographe le plus proche de la pièce qui est identique à la pièce cachée (celle qui
a été lancée entre Bernard et Christine). Si tous les deux ont dit « identiques » alors
le payeur est le cryptographe le plus proche de la pièce différente de la pièce cachée.
De même, si Alice voit deux faces identiques, alors soit Bernard a dit « identiques » et
Christine « différentes » ou inversément. Si la pièce cachée est la même que les deux
pièces qu’elle voit, alors le cryptographe qui a dit « différentes » est le payeur. Si la
pièce cachée est différente des deux pièces qu’elle voit, alors le cryptographe qui a dit
« identiques » est le payeur. Dans tous les cas, Alice doit connaître le résultat du lancer
entre Bernard et Christine pour déterminer qui a payé.
Ce protocole peut être généralisé pour n’importe quel nombre de cryptographes : ils sont
tous assis en rond et lancent des pièces entre eux. Même deux cryptographes peuvent
effectuer le protocole: bien sûr ils savent qui a payé mais quelqu’un qui observe le
protocole peut seulement dire si un des cryptographes a payé ou si la NSA a payé. Il
ne peut pas dire quel cryptographe a payé.
Les applications de ce protocole dépassent largement le cadre du restaurant. C ’est un
exemple d ’ a b s e n c e i n c o n d i t i o n n e l l e d e m o y e n d e r e t r o u v e r l ’ e x p é d i t e u r e t
le d e s t i n a t a i r e . Un groupe d ’utilisateurs d ’un réseau disposent du protocole suivant
pour échanger des messages anonymes.
trace et enregistre les motifs de communication entre les gens bien que les messages
soient eux-mêmes chiffrés, est inutile dans ce cas-là.
Une alternative au lancer de pièce entre participants adjacents est de partager un
fichier de bits aléatoires. Peut-être pourront-ils le ranger sur un CD-ROM, ou l’un
des membres de la paire pourra engendrer un paquet de bits aléatoires et les envoyer
à l’autre participant (en chiffrant le transfert bien sûr) ? Une autre possibilité est de
convenir de l’utilisation d ’un générateur pseudo-aléatoire de nombres et ils peuvent
alors chacun engendrer la même chaîne de bits pseudo-aléatoires pour le protocole.
Un problème dans ce protocole est le suivant: si un participant malveillant ne peut
lire aucun message, il peut par contre fausser le système sans être pris en mentant
à l’étape 3. Il existe une modification de ce protocole qui permet de détecter les
perturbations [1580, 1253] ; le problème s’appelle le « Dîner des Cryptographes à la
Discothèque ».
3. Les gens ont de bonnes raisons d’être rétissants avant d’envoyer leur numéro de carte de crédit
via Internet.
6.4 Argent électronique 151
pour Lancer l’argent électronique, c ’est une institution de confiance qui changera les
nombres numériques contre de l’argent officiel.
Les protocoles d’argent électronique sont très compliqués. Nous allons en mettre un
sur pied, étape par étape. Pour plus de détails lisez [322, 344, 330, 340, 345]. Rendez
vous bien compte qu’il s’agit là d’un seul protocole d’argent électronique, il en existe
d’autres.
Protocole n° 1
Les quelques premiers protocoles sont des analogies matérielles des protocoles crypto-
graphiques. Le protocole suivant est un protocole matériel pour des ordres de paiement
anonymes :
2° Alice place chacun d’entre eux avec une feuille de carbone dans 100 enveloppes
différentes. Elle donne le tout à la banque.
Protocole n° 2
Le protocole précédent empêche Alice d ’indiquer un montant supérieur à ce qu’elle est
en droit de prétendre sur un ordre de paiement, mais rien ne l’empêche de photocopier
l’ordre de paiement et de l’utiliser deux fois. Pour éviter cela nous devons compliquer
le protocole :
1° Alice prépare 100 ordres de paiement anonymes de 1000 francs chacun. Sur
chaque ordre de paiement elle ajoute une chaîne aléatoire différente et unique,
suffisamment longue pour que les chances qu’un autre utilisateur utilise la
même chaîne soient négligeables.
2° Alice place chacun d’entre eux avec une feuille de carbone dans 100 enveloppes
différentes. Elle donne le tout à la banque.
Dès lors, si Alice essaie d ’utiliser une photocopie de l’ordre de paiement, ou si le com
merçant essaie d ’encaisser une photocopie de l’ordre de paiement, la banque le détec
tera.
Protocole n° 3
Le protocole précédent protège la banque de la tricherie mais il ne permet pas l’identifi
cation du tricheur. La banque ne sait pas si la personne qui a acheté l’ordre de paiement
(la banque ne peut pas savoir que c ’est Alice) a essayé de rouler le commerçant ou si
le commerçant a essayé de rouler la banque. Le protocole suivant corrige ce défaut :
1° Alice prépare 100 ordres de paiement anonymes de 1000 francs chacun. Sur
chaque ordre de paiement elle ajoute une chaîne aléatoire différente et unique,
suffisamment longue pour que les chances qu’un autre utilisateur utilise la
même chaîne soient négligeables.
2° Alice place chacun d’entre eux avec une feuille de carbone dans 100 enveloppes
différentes. Elle donne le tout à la banque.
6.4 Argent électronique 15S
Ce protocole fait l’hypothèse que le commerçant ne peut pas modifier la chaîne d’iden
tification une fois qu’Alice l’a écrite sur l’ordre de paiement. L’ordre de paiement peut
avoir une suite de petites cases que le commerçant demandera à Alice de remplir avec
des X ou des O. L’ordre de paiement serait fait de papier qui se déchire si l’on tente
d’effacer.
Comme l’interaction entre le commerçant et la banque a lieu après qu’Alice a dépensé
l’argent, le commerçant reste avec un mauvais ordre de paiement sur les bras. Des
réalisations pratiques de ce protocole nécessitent qu’Alice attende près de la caisse
pendant l’interaction entre le commerçant et la banque tout comme pour les cartes de
crédit aujourd’hui.
Alice peut essayer de rouler le commerçant. Elle peut essayer d ’utiliser une copie de
l’ordre de paiement une seconde fois en donnant la même chaîne d ’identification à
l’étape 7. A moins que le commerçant n’enregistre les ordres de paiement qu’il reçoit
dans une base de données, le commerçant se fera rouler. Le protocole suivant élimine
ce défaut.
Protocole n° 4
S’il s’avère que la personne qui a acheté l’ordre de paiement a essayé de rouler le
commerçant, il incombe à la banque de déterminer l’identité du tricheur. Pour ce faire
nous devons quitter le monde matériel pour celui de la cryptographie.
154 Chapitre 6 Protocoles ésotériques
La technique du morcellement de secret peut être utilisée pour cacher le nom d’Alice
dans l’ordre de paiement numérique.
ln (^nci^np)
10° La banque vérifie la signature et contrôle sa base de données ■pour vérifier qu’un
ordre de paiement avec la même chaîne aléatoire unique n’a pas été déposé
auparavant. Si tout est en ordre, la banque crédite le compte du commerçant
du montant de 1000 francs. La banque enregistre la chaîne aléatoire unique et
toutes les informations d’identification dans sa base de données.
11° Si la chaîne aléatoire unique est dans sa base de données, la banque refuse
d’accepter l’ordre de paiement. Ensuite, elle compare la chaîne d’identification
sur l’ordre de paiement avec celle qui est enregistrée dans sa base de données.
5* c 'est la même, la banque sait que c ’est le commerçant qui a fait une photo
copie de l ’ordre de paiement. Si elle est différente, la banque sait que c ’est la
personne qui a acheté l’ordre de paiement qui l’a photocopié. Comme le second
commerçant — qui a accepté l’ordre de paiement d’Alice — lui a donné une
autre chaîne de sélection que le premier commerçant, la banque trouvera une
position de bit où l’un des commerçants a demandé d’ouvrir la moitié gauche
et l’autre commerçant a demandé d’ouvrir la moitié droite. La banque calcule
le ou exclusif des deux moitiés pour retrouver l’identité d’Alice.
pas. Ou, vous pouvez augmenter le nombre d ’ordres de paiement qu’Alice doit préparer
à l’étape 2 .
Est-ce que le commerçant peut tricher? Ses chances sont encore moins grandes. Il
ne peut pas encaisser l’ordre de paiement deux fois : la banque détecterait la double
utilisation de la chaîne de sélection. Il ne peut pas reporter la faute sur Alice, seule
Alice peut ouvrir les chaînes d ’identification.
Même une collusion entre Alice et le commerçant ne peut pas duper la banque. Comme
la banque signe l’ordre de paiement avec la chaîne unique, elle est sûre de ne payer cet
ordre qu’une fois.
Qu’en est-il de la banque? A-t-elle un moyen de déterminer qu’un ordre de paiement
encaissé a été signé pour Alice? Alice est protégée par le protocole de signature en
aveugle des étapes 2 à 5. La banque ne peut faire le lien, même si elle garde un enre
gistrement complet de toutes les transactions. Bien mieux, la banque et le commerçant
n’ont aucun moyen de se mettre ensemble pour déterminer qui est Alice. Alice peut
entrer dans le magasin et dans le plus complet anonymat faire ses achats.
Estelle peut tricher. Elle peut espionner la communication entre Alice et le commerçant,
et si elle peut aller à la banque avant lui, elle peut porter l’ordre de paiement à la banque
en premier. La banque l’acceptera, et même pire, quand le commerçant viendra porter
son ordre de paiement, il sera suspecté de tricherie. Si Estelle vole et dépense l’argent
électronique d’ Alice avant cell-ci, c’est Alice qui sera suspectée de tricherie. Il n’y a
aucun moyen d ’empêcher cela; c ’est la conséquence directe de l’anonymat procuré par
l’argent électronique. Alice et le commerçant doivent tous les deux protéger leurs bits
comme ils le feraient avec des billets.
Ce protocole se situe quelque part entre les protocoles arbitrés et les protocoles auto-
arbitrés. Alice et le commerçant font confiance à la banque pour qu’elle honore les
ordres de paiement, mais Alice n’a pas confiance dans la banque en ce qui concerne
son identité.
Cette situation est autrement dramatique que toute autre impliquant des biens ma
tériels (de l’agent liquide par exemple). Comme il n’y a pas de contact physique, la
police a moins de chances d’appréhender le ravisseur.
En général, cependant, l’argent électronique n’est pas une bonne affaire pour les crimi
nels. Le problème vient du fait que l’anonymat ne marche que dans un sens: l’acheteur
est anonyme, mais pas le vendeur. De plus, le vendeur ne peut pas cacher le fait qu’il a
reçu de l’argent électronique. Avec l’argent électronique, le gouvernement pourra faci
lement déterminer combien d ’argent vous recevez, mais pas comment vous le dépensez.
6. Divisibilité. Une pièce d ’argent électronique d ’un certain montant peut être
subdivisée en pièces d ’argent plus petites de montants moins élevés. (Bien sûr,
les totaux doivent être corrects au bout du parcours.)
Techniques cryptographiques
Chapitre 7
Avant de vous précipiter pour inventer un cryptosystème avec une clef de 8 kilo-octets,
rappelez-vous qu’il y a une autre condition à satisfaire : l’algorithme doit être suffisam
ment solide pour qu’il n’y ait pas d ’autre attaque possible que l’attaque exhaustive. Ce
n’est pas aussi facile qu’il y paraît. La cryptographie est un art subtil. Les cryptosys
tèmes qui semblent parfaits sont souvent mauvais. Des cryptosystèmes solides peuvent
être grandement affaiblis par de toutes petites modifications. Deux cryptosystèmes so
lides utilisés ensemble sans précautions peuvent interagir entre eux et produire des
textes codés faciles à déchiffrer. Le meilleur conseil que l’on puisse donner au cryp
tographe amateur est de suspecter tout nouvel algorithme et ce, même avec un petit
brin de paranoïa. Il vaut mieux avoir confiance en un algorithme parce que des crypto
graphes professionnels l’ont examiné sous toutes ses coutures pendant de nombreuses
années sans trouver de failles, plutôt que parce que les inventeurs d ’un algorithme
clament haut et fort que leur algorithme est inviolable.
Rappelez vous une remarque importante faite au paragraphe 1.1 : la sécurité d’un cryp
tosystème doit résider dans la clef et non pas dans les détails de l’algorithme. Faites
toutes les hypothèses suivantes : 1 - 1 ’attaquant a accès à tous les détails de votre algo
rithme. 2 —il a accès à autant de texte chiffré qu’il le souhaite et il peut attaquer votre
algorithme grâce à des textes chiffrés seulement. 3- il peut monter une attaque à texte
en clair. 4—il peut monter une attaque à texte en clair choisi. Si votre cryptosystème
reste sûr même avec toute cette connaissance dans les mains de l’attaquant, alors vous
avez atteint le niveau de sécurité souhaitable.
Cet avertissement mis à part, il y a suffisamment de marge de manœuvre dans le
domaine de la cryptographie. Dans la vie de tous les jours, il y a des situations où un
tel niveau de sécurité n’est pas vraiment nécessaire. La plupart des attaquants n’ont
pas les connaissances et les ressources de nos Gouvernements, et même ceux qui ont
de tels moyens ne sont pas forcément intéressés à casser votre cryptosystème. Si vous
avez l’intention de comploter pour renverser un Gouvernement, alors tenez-vous en aux
algorithmes éprouvés décrits à la fin de cet ouvrage. Pour les autres : amusez-vous !
million » ou plus !
La communauté cryptographique s’est surtout concentrée sur l’ attaque exhaustive de
l’algorithme DES. En 1977, Whitfield D i f f i e et Martin H e l l m a n [495] ont décrit
une machine hypothétique. Elle serait composée d’un million de processeurs et chacun
de ces processeurs serait capable de tester un million de clefs par seconde. Une telle
machine pourrait tester 256 clefs en 20 heures. Si une telle machine était construite
pour attaquer une clef de 64 bits, elle testerait les 264 clefs en 214 jours.
L’attaque exhaustive est faite pour les processeurs parallèles. Chaque processeur peut
tester un sous-ensemble des clefs. Les processeurs n’ont pas à communiquer entre eux :
la seule communication nécessaire est un message indiquant la réussite et la clef pour
laquelle elle a été obtenue. U n’y a pas de contraintes de mémoire partagée. Il est facile
de concevoir une telle machine parallèle avec un million de processeurs, chacun d ’entre
eux calculant indépendamment des autres.
Plus récemment, Michael Wiener a décidé de concevoir une machine spécialement dé
diée à la recherche exhaustive [1599, 1600] L II a conçu des puces et des cartes spéciali
sées. Après estimation des prix, il s’est aperçu qu’on pouvait construire pour 1 million
de dollars une machine capable de casser une clef de 56 bits dans un temps moyen
de trois heures et demi (et sept heures au pire). De plus le rapport prix sur vitesse
est linéaire. Le tableau 7.1 donne une généralisation de ces résultats pour différentes
longueurs de clef. Rappelez vous de la loi de M o o r e : la puissance de calcul des or
dinateurs double tous les 18 mois environ. Cela signifie que le coût est divisé par 10
tous les cinq ans; ce qui coûte 1 million de dollars en 1995 sera construit pour 100 000
dollars en l’an 2000. Les ordinateurs systoliques pourraient même faire mieux [726].
Tab. 7.1 - Estimation du temps moyen d’une attaque exhaustive par une machine
dédiée construite en 1995.
Pour les clefe de 56 bits, c’est à la portée de la plupart des grandes entreprises et
de nombreuses organisations criminelles. Les budgets militaires des nations les plus
industrialisées permettraient de construire une machine à casser les clefs de 64 bits.
Casser une clef de 80 bits est toujours hors de portée, mais si la tendance actuelle
continue, cela changera dans 30 ans seulement.
U est bien sûr ridicule d ’estimer la puissance des ordinateur à venir dans 30 ans.
Une avancée dans quelque technologie de science-fiction pourrait faire de ces chiffres
1. II a conçu la machine pour DES, mais l’analyse tient pout la plupart des algorithmes.
166 Chapitre 7 Longueur des clefs
une histoire drôle. À l’opposé, des limitations physiques encore inconnues pourraient
impliquer qu’ils sont exagérément optimistes. En cryptographie, il vaut mieux être
pessimiste. Opter pour un algorithme avec des clefs de 80 bits semble une vue à très
court terme. Il faut des clefs d ’au moins 112 bits.
Si un attaquant veut vraiment trouver une clef, tout ce qui lui reste à faire est de dé
penser le montant nécessaire. En conséquence, il semble prudent d’estimer la « valeur »
minimale d ’une clef: quelle valeur peut être attribuée à une clef avant que cela n’ait
un sens économique de la trouver ? Pour donner un exemple extrême, si un message en
clair vaut 1,39 $, cela n’aurait pas grand sens de dépenser 10 million de dollars pour
trouver la clef. D ’un autre côte, si le message en clair vaut 100 million de dollars, alors
le déchiffrement de ce seul message justifierait la dépense. Notons aussi que la valeur
de certains messages décroît rapidement avec le temps.
« Le nœud d’une attaque par logiciel est la pure malchance. Imaginez un ré
seau informatique universitaire avec 512 stations de travail mises en réseau.
Sur certains campus ce serait un réseau de taille moyenne. Elles pourraient
même être répandues de par le monde et elles coordonneraient leur activité
par courrier électronique. Faisons l’hypothèse que chaque station de travail
est capable d’effectuer 15 000 chiffrements par seconde ... En tenant compte
du surcoût pour tester une clef et passer à la clef suivante, ce chiffre est
ramené à 8 192 tests par seconde par machine. Pour essayer toutes les clefs
possibles [de 56 bits] cela prendrait ainsi 545 ans (en faisant l’hypothèse
que le réseau est dédié à cette tâche 24 heures par jour). Notez qu’avec
ces données cela donne à nos étudiants casseurs de code une chance sur
200 000 de trouver une clef en un jour. Sur un long week-end, leurs chances
passent à 1 sur 66000. Plus le matériel est rapide, ou plus il y a d ’ordina
teurs disponibles, plus leurs chances augmentent. Ce ne sont pas de bons
rapports pour gagner au tiercé mais cela n’est cependant pas acceptable.
De tels rapports sont meilleurs que ce que la loterie nationale offre. « Une
chance sur un million? » « Cela ne peut pas se reproduire en mille ans? »
Il n’est plus possible honnêtement de dire de telles choses. Est-ce un risque
acceptable de nos jours ? »
7.1 Longueur des clefs secrètes 167
L’utilisation d’un algorithme avec une clef de 64 bits au lieu de 56 bits rend ce type
d’attaque 256 fois plus difficile. Avec une clef de 40 bits, la situation est nettement plus
dramatique. Un réseau de 400 ordinateurs, chacun capable de faire 32 000 chiffrements
par seconde, peut effectuer une attaque exhaustive contre une clef de 40 bits en une
seule journée2.
L’utilisation d’une clef de 128 bits rend une telle attaque ridicule à envisager.
L’industrie estime que d ’ici à 1996, il y aura 200 millions d ’ordinateurs de par le
monde. Cette estimation inclut tout depuis les super-ordinateurs Cray jusqu’aux nano-
ordinateurs. Si tous ces ordinateurs coopéraient à une attaque exhaustive à raison de
1 million de chiffrements par seconde, cela prendrait encore 1 million de fois l’âge de
l’univers pour trouver la clef.
Réseaux neuronaux
Les réseaux neuronaux ne sont pas très utiles pour la cryptanalyse, premièrement à
cause de la forme de l’espace des solutions. Les réseaux neuronaux sont efficaces dans
les problèmes où il y a une continuité des solutions, certains plus que d’autres. Ceci
permet à un réseau neuronal d ’apprendre et de proposer des solutions de plus en plus
adaptées au fur et à mesure. Les opportunités d’apprendre quelque chose quand on
casse un algorithme sont rares: soit on retrouve la clef, soit on ne la retrouve pas3.
Les réseaux neuronaux marchent bien dans les environnements structurés où il y a
quelque chose à apprendre mais pas dans le monde de grande entropie et d ’apparent
chaos qu’est la cryptographie.
Virus
La difficulté majeure dans une attaque de cette ampleur est de convaincre chaque
utilisateur individuel de se prêter à l’expérience. Vous pourriez demander poliment mais
cela prendrait trop de temps. Pire même, ils pourraient refuser. Vous pourriez essayer
d’investir leurs machines la nuit mais ce serait encore plus coûteux en temps. De plus,
vous risqueriez de finir en prison pour violation de domicile. Les virus informatiques
pourraient répandre un programme de recherche exhaustive de clef efficacement sur un
nombre maximum d’ordinateurs.
Cette idée, particulièrement insidieuse, a été présentée pour la première fois dans [1595].
L’attaquant écrit un virus informatique et le lâche dans la nature. Ce virus-là ne refor
mate pas le disque dur, ou ne détruit pas des fichiers ; tout ce qu’il fait c’est travailler
à une attaque exhaustive quand l’ordinateur n’a rien d ’autre à faire. Différentes études
ont montré que les micro-ordinateurs sont inactifs 70 % à 90 % du temps. Ainsi le
virus n’aurait aucune difficulté pour trouver du temps pour accomplir sa tâche. Si par
ailleurs il est bénin, il peut même passer inaperçu en continuant sa tâche.
Éventuellement, une des machines infectées trouvera la bonne clef. A ce point, il y deux
manières de procéder. Premièrement, le virus peut donner naissance à un nouveau virus
différent. Celui-ci ne ferait rien d ’autre que se répandre et détruire toute copie de son
ancêtre, tout en transportant de machine en machine l’information concernant la bonne
2. En 1992, les algorithmes RC2 et RC4 ont été autorisés à l’exportation hors des Etats-Unis pour
autant que leur clef soit restreinte à 40 bits (voir § 13.8).
3. Du moins, c’est vrai quand l’algorithme est bon.
168 Chapitre 7 Longueur des clefs
clef. Lors de ses pérégrinations, il finirait par atterrir sur la machine de celui qui a lancé
l’attaque initiale.
Une autre approche plus subtile consisterait à afficher le message suivant sur l’écran
de l’ordinateur infecté qui a trouvé la bonne clef :
Quelle est l’efficacité d’une telle attaque? Faisons l’hypothèse qu’un ordinateur infecté
essaie 1 000 clefs par seconde. C ’est nettement moins que ce que l’on attendrait comme
vitesse, mais n’oublions pas que cet ordinateur est sensé accomplir d’autres tâches.
Faisons également l’hypothèse qu’un tel virus peut infecter 10 millions d ’ordinateurs.
Le virus pourrait casser une clef de 56 bits en 83 jours et une clef de 64 bits en 58
ans. Vous devrez peut-être corrompre les auteurs de vaccins informatiques mais c’est
votre problème. Toute augmentation de la vitesse des micro-ordinateurs ou du nombre
d’ordinateurs rendrait bien évidemment cette attaque plus efficace.
La loterie chinoise
La « loterie chinoise » est une suggestion originale mais réalisable pour une machine
massivement parallèle pour attaquer l’algorithme DES [1289]. Imaginez que l’on incor
pore une puce de recherche exhaustive de clef, capable de faire un million de tests par
seconde dans chaque radio et dans chaque télévision nouvellement construits. Chaque
puce est programmée pour tester un ensemble différent de clefs et ce automatiquement,
dès qu’elle reçoit une paire « texte en clair, texte chiffré » sur les ondes. Alors chaque
fois que le Gouvernement chinois veut casser une clef, il diffuse les données et toutes
les radios et les télévisions du pays se mettent à la tâche. Eventuellement, la bonne
clef apparaîtra sur l’écran de télévision de quelqu’un, quelque part dans le pays. Le
Gouvernement chinois paie alors un prix à cet heureux gagnant d’une loterie un peu
particulière. Grâce à la promesse d’une récompense, le Gouvernement est sûr que la
bonne clef sera transmise correctement et en prime, cela favorise la vente de radios et
de télévisions contenant cette puce spéciale.
Si chaque homme, femme et enfant en Chine possède une radio ou une télévision,
la bonne clef, pour un algorithme qui utilise 56 bits pour la clef, sera trouvée en 64
secondes. Si seulement un chinois sur dix possède une radio ou une télévision (ce qui
est plus proche de la réalité), alors la bonne clef apparaîtra au bout de 11 minutes. La
bonne clef pour un algorithme à 64 bits apparaîtra au bout de 4 heures et demie (45
heures si seulement un chinois sur dix possède une radio ou une télévision).
Certaines modifications sont nécessaires pour rendre cette attaque praticable. Premiè
rement, il serait plus facile que chaque puce essaie des clefs aléatoires au lieu d’un
ensemble prédéterminé de clefs. Cela ne ralentirait l’attaque que de 39 % (pas grand
chose en comparaison des chiffres que nous manipulons). De plus, le parti commu
niste chinois devrait convaincre chaque personne d ’écouter ou de regarder une certaine
7.1 Longueur des clefs secrètes 169
émission à un certain moment de la journée pour être sûr que toutes les radios et télé
visions sont opérationnelles au moment de la diffusion de la paire « texte en clair, texte
chiffré ». Finalement, chacun recevrait comme instruction de contacter le Central-Peu-
Importe-Son-Nom si jamais une clef apparaît à l’écran et de lire les nombres qui y
figurent. Le Parti pourrait même transformer cela en loterie : la personne qui trouve la
clef, reçoit un prix.
Le tableau 7.2 montre l’efficacité de la loterie chinoise pour différents pays et pour
différentes longueurs de clef. La Chine est clairement en bonne position pour conduire
une telle attaque, mais elle devrait équiper chaque homme, femme et enfant de sa
propre radio ou télévision. Les Etats-Unis ont moins d ’habitants mais beaucoup plus
d’équipement par tête d’habitant. L’état du Wyoming pourrait casser une clef de 56
bits rien qu’à lui seul en moins d’un jour.
Tab. 7.2 —Estimations pour une attaque exhaustive pour la loterie chinoise (les données
concernant la population et le nombre de radios et télévisions proviennent de « 1995
World Almanac and Book o f Facts ») _____________________________________________
Nombre de
Population télévisions Temps nécessaire
Contrée (approx.) et radios Clef de 56 bits Clef de 64 bits
Chine 1190431000 257000000 280 secondes 20 heures
Etats-Unis 260 714000 739000000 97 secondes 6,9 heures
Irak 19890000 4730000 4,2 heures 44 jours
Israël 5051000 3 640000 5,5 heures 58 jours
Wyoming (USA) 470 000 1330000 15 heures 160 jours
Morehead, NC (U SA) 6100 17300 48 jours 34 années
Biotechnologie
Si les biopuces sont possibles, il serait alors idiot de ne pas s’en servir pour construire
un outil d’attaque exhaustive répartie. Considérez un animal hypothétique, malencon
treusement appelé « DESosaure » [1289]. Il est constitué de cellules biologiques capables
de tester les clefs possibles. La paire « texte en clair-texte chiffré » est diffusée aux
cellules par un canal optique (ces cellules sont transparentes, vous voyez). Les solutions
sont transmises à l’organe vocal du DESosaure par l’intermédiaire de cellules spéciales
qui se propagent dans le système circulatoire de l’animal.
Un dinosaure typique a 1014 cellules (sans compter les bactéries). Si chacune d’entre
elles est capable d ’effectuer un million de chiffrements par seconde (d’accord, cela est
un grand « si »), retrouver une clef de 56 bits prendrait sept dix millièmes de seconde.
Retrouver une clef de 64 bits prendrait moins de deux dixièmes de seconde. Retrouver
une clef de 128 bits prendrait encore 1 0 1 1 années, malgré tout.
Une autre approche biologique serait d’utiliser des algues modifiées génétiquement pour
la cryptographie et qui seraient capables d’effectuer des attaques exhaustives contre les
algorithmes cryptographiques [1289]. Ces organismes rendraient possible la réalisation
d’une machine distribuée avec plus de processeurs, car ils pourraient couvrir une grande
surface. La paire « texte en clair-texte chiffré » pourrait être diffusée par satellite. Si un
organisme trouve le résultat, il pourrait induire un changement de couleur des cellules
voisines pour communiquer le résultat en retour au satellite.
170 Chapitre 7 Longueur des chefs
Faites l’hypothèse qu’une cellule d ’algue typique a la taille d ’un cube de 10 fi de côté
(cela est probablement une large estimation), alors 1 0 1 5 d’entre elles peuvent remplir
un mètre cube. Déversez-les dans l’océan pour couvrir une superficie de 518 km2, sur
une épaisseur d’eau d ’un mètre (vous vous débrouillez pour savoir comment faire —
moi je suis juste celui qui a les idées), et vous aurez 1 0 23 d ’entre elles flottant sur
l’océan (ce qui représente plus de 380 milliards de litres4). Si chacune d ’entre elles
peut essayer un million de clefs par seconde, elles retrouveront la clef d’un algorithme
avec une clef de 128 bits en juste un peu plus de 100 ans5. Des percées dans la vitesse
de calcul des algues, du diamètre des algues ou même dans la taille de la flaque sur
l’océan pourraient réduire ces nombres de façon significative.
Ne me parlez même pas de la nanotechnologie.
Limitations thermodynamiques
Selon le second principe de la thermodynamique, une certaine quantité d ’énergie est
nécessaire pour représenter de l’information. Enregistrer un simple bit en changeant
l’état d’un sytème requiert une quantité d ’énergie supérieure à kT, où T est la tempé
rature fondamentale du système et A; la constante de B o l t z m a n . (Restez avec moi, la
leçon de physique est presque terminée.)
Etant donné que k = 1,38.10” 16 et que la température ambiante de l’univers est de 3,2,
un ordinateur idéal marchant à 3,2 consommerait 4,4.10 ~ 16 à chaque modification ou
effacement d ’un bit. Faire tourner un ordinateur à une température plus basse que le
rayonnement cosmique environnant demanderait un apport énergétique suplémentaire
pour faire fonctionner une pompe à chaleur.
Maintenant, le soleil dégage chaque année une énergie égale à 1 ,2 1 .1041 environ. C’est
assez pour effectuer 2 ,7 .1 0 56 changements de bit dans notre ordinateur idéal; et assez
pour qu’un compteur de 18 7 bits prenne toutes ses valeurs. En construisant une sphère
de D y s o n autour du soleil et en captant toute son énergie pendant 32 ans, notre
ordinateur pourrait compter jusqu’à 2 192. Bien-sûr il ne resterait pas assez d ’énergie
pour effectuer d’autres opérations utiles avec ce compteur.
Mais il s’agit juste d ’une étoile, pas très douée pour cela. Une supemova moyenne
dégage quelque chose comme 1051. (Environ cent fois plus d ’énergie serait dégagée
sous forme de neutrinos, mais laissons les passer pour l’instant.) Si toute cette énergie
pouvait être canalisée afin d ’effectuer un seul calcul gigantesque, un compteur de 219
bits pourrait passer par tous ses états.
Ces nombres n’ont rien à voir avec la technologie du matériel; ils sont les bornes supé
rieures autorisées par la thermodynamique. Et ils impliquent fortement qu’une attaque
exhaustive contre des clefs de 256 bits restera impossible jusqu’à ce que les ordinateurs
soient construits avec autre chose que de la matière et fonctionnent ailleurs que dans
l’espace.
11/780. Donc un mips-an est l’équivalent d ’un VAX 11/780 tournant pendant un an.
(Un Pentium 100 MHz est une machine de 50 mips; une machine Paragon d ’Intel à
1800 processeurs est une machine de 50000 mips.)
En 1983, factoriser un nombre à 71 chiffres demandait 0,1 mips-an ; la même opération
en 1994 avec un nombre à 129 chiffres demandait 5000 mips-an. Cette augmentation
insensée de la puissance de calcul est principalement le résultat de l’introduction du
calcul distribué, utilisant le temps d ’inactivité des stations de travail d ’un réseau. Cette
tendance a été initiée par Bob S i l v e r m a n et développée par Arjen L e n s t r a et Mark
M a n a s s e . En 1983, factoriser prenait 95 heures CPU sur un seul Cray X-M P ; en 199A
cela nécessitait 5000 mips-ans et utilisait le temps d’inactivité de 1600 ordinateurs à
travers le monde pendant environ huit mois. Les méthodes modernes de factorisation
se prêtent à ce genre de distribution des tâches.
La situation s’empire encore. Un nouvel algorithme de factorisation a remplacé le crible
quadratique : le crible général sur corps numérique. En 1989, les mathématiciens vous
auraient dit que le crible général sur corps numérique ne serait jamais pratique. En
1992, ils vous auraient dit que c’était pratique, mais seulement plus rapide que le
crible quadratique dans les cas de nombres à plus de 130 à 150 chiffres. Aujourd’hui,
il est reconnu être plus rapide que le crible quadratique pour des nombres compre
nant bien moins de 116 chiffres [504, 637]. Le crible général sur corps numérique peut
factoriser un nombre de 512 bits plus de 10 fois plus rapidement que le crible qua
dratique. L’algorithme tournerait moins d’un an sur un Paragon Intel 1800. Le ta
bleau 7.4 nous donne le nombre de mips-ans nécessaires pour factoriser des nombres de
différentes tailles, en considérant les applications actuelles du crible général sur corps
numérique [1195].
Le crible général sur corps numérique est de plus en plus rapide. Les mathématiciens
trouvent toujours des nouvelles optimisations, des nouvelles techniques. Il n’y a aucune
raison de penser que cette tendance ne continuera pas. Un algorithme voisin, le crible
spécial sur corps numérique, peut déjà factoriser des nombres d’une forme spécialisée (ce
sont des nombres généralement pas utilisés pour la cryptographie) bien plus rapidement
que le crible général sur corps numérique peut factoriser des nombres généraux de même
taille. Il n’est pas déraisonnable de penser que le crible général sur corps numérique
peut être optimisé pour aller aussi vite [1195] ; il est d ’ailleurs fort possible que la NSA
sache déjà comment faire. Le tableau 7.5 donne le nombre de mips-ans nécessaires
pour que le crible spécial sur corps numérique factorise des nombres de différentes
longueurs [1195].
Lors d’un atelier de l’Institut européen pour la sécurité des systèmes en 1991, les
participants ont convenu qu’un module de 1024 bits devrait être suffisant pour des
secrets à long terme jusqu’en 2005 [157]. Néanmoins, ils ajoutèrent: « Bien que les
participants de cet atelier pensent être les plus qualifiés dans leurs domaines respectifs,
cette déclaration [concernant la durabilité de la sécurité] devrait être considérée avec
beaucoup de prudence. » C ’est un bon conseil.
Le cryptographe avisé est très prudent lorsqu’il choisit la longueur de clefs publiques.
Pour déterminer de quelle longueur de clef vous avez besoin, il faut que vous considériez
à la fois le niveau de sécurité désiré et la durée de vie de la clef, ainsi que le nec plus
ultra de la factorisation. Aujourd’hui, vous avez besoin d’un nombre de 1024 bits pour
avoir le niveau de sécurité que vous aviez en 1980 avec un nombre de 512 bits. Si
vous voulez que vos clefs restent sûres pour les 20 prochaines années, 1024 bits sont
probablement insuffisants.
Même si vos secrets ne valent pas l’effort investit pour factoriser votre module, vous
êtes peut-être en danger. Imaginez un système bancaire automatique qui utilise le RSA
pour la sécurité. Martin peut aller devant la justice et déclarer : « Avez-vous lu dans
les journaux qu’en 1994 le RSA-129 a été cassé et que les nombres de 512 bits peuvent
être factorisés par toute organisation prête à dépenser quelques millions de dollars et
à attendre quelques mois? Pour sa sécurité, ma banque utilise des nombres à 512 bits,
et j’en profite pour vous dire que ce n’est pas moi qui ait effectué ces septs retraits. »
Même si Martin ment, il est probable que le juge somme la banque de s’expliquer.
Mais alors, pourquoi ne pas utiliser des clefs de 10000 bits? Vous pouvez, mais sachez
que plus votre clef sera longue, plus vous passerez de temps à la calculer. Vous voulez
une clef assez longue pour qu’elle soit sûre, mais assez courte pour que le calcul soit
faisable.
174 Chapitre 7 Longueur des clefs
Un peu plus haut dans ce paragraphe, j ’ai dit que faire des prédictions est stupide. Je
vais maintenant en faire quelques-unes. Le tableau 7.6 regroupe mes recommandations
pour les longueurs de clefs publiques, selon le niveau de sécurité de votre clef que
vous désirez. Il y a trois longueurs de clefs pour chaque année, une pouvant supporter
les attaques individuelles, une sûre pouvant supporter les attaques d’une entreprise
majeure, et une pouvant supporter les attaques d’un gouvernement.
« Nous pensons pouvoir acquérir 100 000 machines sans développer d ’efforts
surhumains et en toute probité. En fait, nous ne lâcherions pas un virus sur
Internet pour trouver les ressources pour nous. Beaucoup d’organisations
ont chacune des milliers de machines sur le réseau. Les utiliser demanderait
une grande diplomatie, mais ne devrait pas être impossible. En considérant
la puissance moyenne de 5 mips et une durée d ’un an, il ne semble pas trop
déraisonnable de s’embarquer sur un projet qui exigera un demi-million de
mips-ans. »
Le projet de factorisation d ’un nombre à 129 chiffres a mobilisé à peu près 0,03 pourcent
de la puissance de calcul globale d’Internet [1195], et ils n’ont vraiment pas forcé. Il
est raisonnable de penser qu’un projet ayant fait l’objet d’une bonne campagne de
publicité puisse mobiliser 2 pourcents de la puissance de calcul mondiale pendant une
année.
Supposons qu’un cryptanalyste puisse mettre la main sur 10000 mips-ans, une grande
entreprise peut en avoir 107 et un gouvernement 10°. Supposons également que la
puissance de calcul augmente d’un facteur 10 tous les cinq ans. Enfin, supposons que
les progrès mathématiques en matière de factorisation nous permettent de factoriser
des nombres généraux à la vitesse du crible spécial sur corps numérique. (Ce n’est pas
encore possible, mais cette avancée pourrait survenir à tout moment.) Le tableau 7.6
recommande différentes longueurs de clefs pour la sécurité en différentes années.
N’oubliez pas de prendre la valeur de la clef en considération. Les clefs publiques sont
souvent utilisées pour sécuriser des choses de grande valeur pour une longue durée:
la clef maîtresse d’une banque pour un système d ’argent électronique, la clef qu’un
gouvernement utilise pour certifier ses passeports ou la clef publique d ’une signature
électronique d’un notaire. Cela ne vaut probablement pas la peine de passer des mois
de calcul pour casser la clef privée d’un individu, mais si vous pouvez imprimer votre
propre argent avec une clef que vous avez cassé, l’idée devient plus attrayante. Une clef
de 1024 bits est assez longue pour signer quelque chose qui sera vérifié dans la semaine,
7.2 Longueur des clefs publiques 175
le mois, ou même quelques années. Mais vous ne voulez sûrement pas vous retrouver
devant la justice dans 2 0 ans avec un document signé électroniquement et voir la partie
opposée démontrer comment contrefaire un document avec la même signature.
Faire des prédictions au-delà d ’un future proche est encore plus insensé. Qui connait
les progrès qui vont être effectué en calcul, en matière de réseau et en mathématiques
d’ici à l’an 2020? Néanmoins, si on considère la situation d’un point de vue général,
pour chaque décade, nous pouvons factoriser des nombres deux fois plus longs que la
décade précédente. Ceci nous mène au tableau 7.7.
D’un autre côté, la technologie de factorisation peut atteindre son apogée bien avant
2045. D’ici vingt ans, nous serons peut-être capable de factoriser n’importe quel
nombre. Je pense néanmoins que ceci est très peu probable.
Tout le monde ne sera pas d ’accord avec mes recommandations. La NSA a mandaté
des clefs de 512 à 1024 bits pour leur standard de signature électronique (voir § 20.1),
ce qui est bien moins que ce que je recommande pour une sécurité à long terme. Pretty
Good Privacy (voir § 24.12) a une longueur de clef RSA maximum de 2047 bits. Arjen
LENSTRA, le plus célèbre « factorisateur » mondial, refuse de faire des prédictions au-
delà de 10 ans [960]. Le tableau 7.8 nous livre les recommandations sur la longueur de
clef de Ron R i v e s t , faites en 1990, que je considère bien trop optimistes [1334]. Bien
que son analyse paraisse correcte sur papier, les événements récents montrent que des
surprises arrivent régulièrement. Il semble logique de choisir ses clefs afin de se protéger
de futures surprises.
Les estimations les plus basses parlent d’un budget de 25 000 dollars, de l’algorithme
du crible quadratique et d ’un progrès technologique de 20 pourcents par an. Les es
timations moyennes parlent d ’un budget de 25 millions de dollars, de l’algorithme du
176 Chapitre 7 Longueur des clefs
crible général sur corps numérique et d ’un progrès technologique de 33 pourcents par
an. Enfin, les estimations les plus optimistes avancent un budget de 25 milliards de
dollars, un algorithme du crible général quadratique tournant à la vitesse du crible
spécial sur corps numérique et un progrès technologique de 45 pourcents par an.
Il est toujours possible qu’un progrès en matière de factorisation me surprenne, mais
j ’ai intégré ceci dans mes calculs. Mais pourquoi me faire confiance? Je viens de prouver
ma stupidité en faisant des prédictions.
Calculs biologiques
Maintenant, cela devient étrange. En 1994, Léonard M. A d l e m a n a trouvé une mé
thode pour résoudre un problème N P —complet (voir § 1 1 .2 ) dans un laboratoire de
biochimie, en utilisant des molécules d ’ADN pour représenter les solutions du pro
blème [21]. (Ici, par « solutions », on entend « réponses » et non pas « liquide conte
nant des substances ».) Le problème qu’ A d l e m a n a résolu était un cas particulier
du problème de trouver un chemin orienté Hamiltonien : soit une carte avec des villes
connectées par des routes à sens unique, trouvez un chemin de la ville A à la ville Z qui
ne passe exactement qu’une seule fois par chaque ville de la carte. Chaque ville était
représentée par des chaînes aléatoires distinctes de 20 bases d ’ADN ; avec les techniques
conventionnelles de biologie moléculaire, A d l e m a n a synthétisé 50 picomoles (30 mil
lions de millions de molécules) de la chaîne d’ADN représentant chaque ville. Chaque
route était aussi représentée par une chaîne de 20 bases d ’ADN, mais ces chaînes n’ont
pas été choisies de façon aléatoire : elles ont été choisies judicieusement de manière à ce
que la fin de la chaîne d’ADN représentant la route de la ville P à la ville K (« route
P K ») ait tendance à se rapprocher de la chaîne d’ADN représentant la ville P , et que
la fin de la route P K ait tendance à se rapprocher de la ville K .
A d l e m a n a synthétisé 50 picomoles d’ADN représentant chaque route, les a mixé tous
ensemble avec l’ADN représentant toutes les villes et a ajouté un enzyme ligase qui
noue ensemble les bouts de molécules d ’ADN. La relation judicieuse entre les chaînes
d’ADN de la route et les chaînes d’ADN de la ville fait que la ligase lie les chaînes
d’ADN de la route entre-elles de manière légale. C ’est-à-dire que l’issue de la route
qui va de P à A sera toujours reliée au début d ’une route qui part de la ville K ,
jamais à l’issue d ’une autre route ou au début d’une route qui part d’une ville autre
que K . Après un temps de réaction minutieusement limité, la ligase a construit un
grand nombre de chaînes d ’ADN représentant des chemins multiroutes légaux bien
qu’aléatoires sur la carte.
De cette soupe de chemins aléatoires, A d l e m a n peut retrouver la plus infime trace
(peut-être même une seule molécule) d ’ADN qui représente la réponse au problème. En
utilisant les techniques communes de la biologie moléculaire, il écarte toutes les chaînes
d ’ADN qui représentent des chemins trop longs ou trop courts. (Le nombre de routes
dans le chemin cherché doit être égal au nombre de villes moins un.) Ensuite, il écarte
toutes les chaînes d ’ADN qui ne passent pas par la ville A, puis celles qui ne passent
pas par la ville B, etc... S’il reste un ADN à l’issue de cette série d ’éliminations, la
séquence de routes qu’il décrit est la solution au problème de découverte d ’un chemin
orienté Hamiltonien.
Par définition, toute instance d ’un problème N P —complet peut être transformé, en
temps polynomial, en une instance de tout autre problème N P —complet, et par consé
quent en un problème de découverte d ’un chemin orienté Hamiltonien. Depuis les an
7.2 Longueur des clefs publiques 177
nées 1970, les cryptologues ont essayé d ’utiliser les problèmes N P —c o m p l e t s pour la
crypotographie à clef publique.
Bien que le cas résolu par A d l e m a n fut modeste (sept villes sur sa carte, une énigme
qui peut être résolue en réfléchissant quelques minutes), la technique en est à ses
balbutiements et ne rencontrerait aucun obstacle à être étendue à des problèmes
plus conséquents. C ’est pourquoi, les arguments à propos des protocoles cryptogra-
phiques basés sur des problèmes N P c o m p l e t s , arguments qui jusqu’alors commen
çaient par « Supposons qu’un adversaire possède un million de processeurs, chacun
d’entre-eux pouvant effectuer un million de tests par seconde, » pourraient bientôt de
venir « Supposons qu’un adversaire possède un millier de lieux de fermentation, chacun
ayant une capacité de 2 0 0 0 0 litres. »
Ordinateurs quantiques
Attention, cela devient encore plus étrange. Le principe sous-jacent de l’ordinateur
quantique inclut la dualité onde-particule découverte par Albert E i n s t e i n . Un photon
peut simultanément exister dans un grand nombre d ’états. L ’exemple classique est celui
du photon qui se comporte comme une onde quand il rencontre un mirroir partiellement
argenté ; il est à la fois réfléchi et transmis. C ’est tout comme une vague qui vient se jeter
sur une digue qui comporte une petite ouverture, la vague sera refoulée mais passera
un peu à travers la digue. Néanmoins, quand un photon est mesuré, il se comporte
comme une particule et un seul état peut être détecté.
Dans [1449], Peter S h o r nous montre une conception d e machine à factoriser qui repose
sur les principes de la mécanique quantique. A l’inverse d’un ordinateur classique, qui
en fait est dans un état unique, fixe, à un moment donné, un ordinateur quantique a
une fonction d ’onde interne, qui est une superposition d ’une combinaison des états de
base possibles. Les calculs transforment la fonction d ’ondulation, modifiant ainsi tout
l’ensemble des états en une seule opération. De cette façon, un ordinateur quantique est
une amélioration par rapport à l’automate classique à état fini : il utilise les propriétés
quantiques afin de factoriser en temps polynomial ; ce qui nous permet théoriquement
de casser les cryptosystèmes basés sur la factorisation ou le problème du logarithme
discret.
Le consensus est que les ordinateurs quantiques sont compatibles avec les lois fonda
mentales de la mécanique quantique. Néanmoins, il est peu probable qu’une machine
de factorisation quantique soit construite dans le futur. Un obstacle majeur est le pro
blème de décohérence qui fait que des formes ondulatoires superposées perdent leur
distinction et que l’ordinateur ne marche pas. La décohérence implique qu’un ordi
nateur quantique fonctionnant à 1 Kelvin ne marche pas plus d ’une nanoseconde. De
plus, un très grand nombre de portes serait nécessaire pour construire une machine
de factorisation quantique ; cela peut rendre sa construction impossible. Le concept
de SHOR nécessite un module complet d’exponentiation en arithmétique modulaire.
Aucune horloge interne ne peut être utilisée, alors des millions, voire des milliards de
portes seraient nécessaires pour factoriser des nombres cryptographiquement signifi
catifs. Si n portes quantiques ont une probabilité minimum p d ’échouer, le nombre
moyen d’essais par coup réussi est de (1/(1 — p))n- Le nombre de portes nécessaires
croît polynômialement avec la longueur en bits du nombre, donc le nombre d’essais
nécessaires serait superexponentiel en la longueur des nombres utilisés (ce qui est pire
que factoriser par des divisions).
178 Chapitre 7 Longueur des clefs
Ainsi, alors que la factorisation quantique attire de nombreux chercheurs, il est extrê
mement peu probable qu’elle soit jamais mise en pratique. Mais ne dites pas que je ne
vous ai pas prévenu.
T ab . 7.9 - Longueurs des clefs secrètes et des clefs publiques avec résistances similaires
aux attaques exhaustives_____________________________________________
Longueur de clef secrète Longueur de clef publique
56 bits 384 bits
64 bits 512 bits
80 bits 768 bits
1 1 2 bits 1792 bits
128 bits 2304 bits
Ce tableau nous dit que si vous êtes assez soucieux pour votre sécurité pour choisir
un algorithme à clef secrète avec une clef de 1 1 2 bits, alors vous devriez choisir une
longueur de module d ’au moins 1792 bits pour votre algorithme à clef publique. En
général, vous devriez choisir une longueur de clef publique plus sûre que votre longueur
de clef secrète. Les clefs publiques demeurent généralement plus longtemps et sont
utilisées pour protéger plus d’informations.
La longueur de clef doit être telle qu’il n’y ait pas une probabilité de plus
de 1 pour 2 32 qu’un attaquant disposé à dépenser 1 0 0 millions de dollars
puisse casser le système en moins d ’un an, même en faisant l’hypothèse
180 Chapitre 7 Longueur des clefs
La puissance de calcul future est plus difficile à évaluer, mais à vue de nez : l’efficacité
des équipements de calcul divisée par le prix double tous les 18 mois et augmente d’un
facteur 10 tous les 5 ans [100]. Donc, d ’ici à 50 ans, les ordinateurs les plus rapides seront
10 milliards de fois plus rapides qu’aujourd’hui ! Gardons à l’esprit que ces chiffres ne
prennent en compte que des ordinateurs génériques ; qui sait quel type de système de
recherche cryptographique exhaustive pourra être développé d’ici à 50 ans?
En faisant l’hypothèse qu’un algorithme cryptographique sera utilisé pendant 30 ans,
vous pouvez avoir une idée du niveau de sécurité qu’il doit offrir. Un algorithme conçu
aujourd’hui ne sera probablement pas d’un usage généralisé avant l’an 2 0 0 0 et sera tou
jours utilisé en l’an 2025 pour chiffrer des messages qui devront rester secrets jusqu’en
2075 ou plus tard.
7.6 Avertissement
Ce chapitre entier ne veut absolument rien dire. La notion de prédiction de la puis
sance de calcul dans les 10 années à venir, sans parler des 50 prochaines années, est
absolument ridicule. Ces calculs ne doivent être qu’une indication, rien de plus. Si le
passé est une indication, le futur sera bien différent de tout ce qu’on a pu prévoir.
Soyez prudent. Si vos clefs sont plus longues qu’il vous semble nécessaire, alors moins
de surprises technologiques vous concerneront.
Chapitre 8
Alice et Bernard ont un système de communication sûr. Ils jouent au poker en aveugle,
ils signent simultanément des contrats et échangent même de l’argent électronique.
Leurs protocoles sont sûrs. Leurs algorithmes sont le nec plus ultra. Malheureusement,
ils achètent leurs clefs à la société C l e f s e t c o n f i a n c e d’Estelle dont le slogan est
« Vous pouvez nous faire confiance : la sécurité est le deuxième nom de l’ex-belle-mère
de notre voyageur de commerce. »
Estelle n’a pas à casser les algorithmes. Elle ne compte pas sur les failles subtiles dans
les protocoles. Elle peut utiliser leurs clefs pour lire tous les messages entre Alice et
Bernard sans lever le moindre petit doigt cryptographique.
Dans le monde réel, la gestion des clefs est la partie de la cryptographie la plus difficile.
Concevoir des algorithmes et des protocoles sûrs n’est pas chose aisée mais vous pouvez
compter sur un corps important de recherche académique. Garder les clefs secrètes est
encore plus dur.
Les cryptanalystes attaquent souvent les algorithmes à clef secrète et les algorithmes à
clef publique par leur gestion des clefs. Pourquoi Estelle s’évertuerait-elle à casser un
algorithme cryptographique quand il lui est plus facile de retrouver les clefs à cause d ’un
relâchement dans les procédures de gestion des clefs? Pourquoi devrait-elle dépenser
1 0 millions de dollars pour construire une machine de cryptanalyse alors que 1 0 0 0
dollars suffirait à corrompre un employé? Dépenser 1 million de dollars pour acheter
un employé des communications occupant un poste stratégique au sein d’une ambassade
diplomatique peut se révéler être une vrai affaire. Les W a l k e r s ont vendu pendant des
années aux soviétiques les clefs de chiffrement de la marine américaine. Le directeur du
contre-espionnage de la C IA s’est vendu pour moins de 2 millions de dollars, femme
incluse. C’est beaucoup moins onéreux que de construire de puissantes machines de
cassage de chiffrement et d ’employer de brillants cryptanalystes. Estelle peut voler
les clefs. Elle peut arrêter ou kidnapper quelqu’un qui connaît les clefs. Elle peut
séduire quelqu’un et lui soutirer les clefs de cette façon. (Les M a r i n e s qui gardaient
l’ambassade américaine à Moscou n’étaient pas insensibles à ce type d ’attaque.) Il
est beaucoup plus facile de trouver les points faibles chez une personne que dans un
système cryptographique.
Alice et Bernard doivent protéger leurs clefs au même niveau de sécurité que les données
qu’elles chiffrent. Si une clef n’est pas changée régulièrement, ça pourrait être une
182 Chapitre 8 Gestion des clefs
Tab. 8.2 - Recherche exhaustive de différents espaces de clefs (sur la base d’un million
de tentatives par secondes)
4 octets 5 octets 6 octets 7 octets 8 octets
Lettres minuscules (26) 0,5 s 12 s 5 mn 2,2 h 2,4 j
Lettres minuscules et chiffres (36) 1,7 s 1 mn 36 mn 22 h 33 j
Caractères alphanumériques (62) 15,0 s 15 mn 16 h 41 j 6,9 ans
Caractères affichables (95) 1,4 mn 2,1 h 8,5 j 2,2 ans 210 ans
Caractères ASCII (128) 4,5 mn 9,5 h 51 j 18 ans 2 300 ans
Caractères ASCII 8 bits (256) 1,2 h 13 j 8,9 ans 2300 ans 580000 ans
2. Des mots de différentes bases de données. Celles-ci comprennent les listes des
noms d’hommes et de femmes (environ 16 0 0 0 au total) ; des noms d ’endroits (y
1 Note du traducteur : l’ inform ation reprise dans cette section est typiquem ent anglo-saxonne mais
elle est également d ’ application, moyennant de légères m odifications, pou r les utilisateurs d ’ expression
francophone.
184 Chapitre 8 Gestion des clefs
3. Des variantes des mots de l’étape 2. Cela inclut : mettre la première lettre en
majuscule, mettre un caractère de contrôle comme première lettre, mettre tout le
mot en majuscule, renverser le mot (avec et sans la mise en majuscule précédente),
remplacer la lettre « o » par le chiffre « 0 » (ainsi le mot « sc h o la r » sera aussi
testé comme « schOlar »), remplacer la lettre « 1 » par le chiffre « 1 » (ainsi le
mot « sch o la r » sera aussi testé comme « sc h o la r »), et faire des remplacements
similaires de la lettre « z » par le chiffre « 2 » et la lettre « s » par le chiffre « 5 ».
Un autre test consistait à mettre le mot au pluriel (peu importe si le mot était
bien un substantif) avec suffisamment de subtilité de telle manière que « d re ss »
devenait « d r e sse s », « house » devenait « houses », et « d a is y » devenait
« d a i s ie s ». Les règles de mise au pluriel ne furent pas seulement prises au pied
de la lettre par K l e in , ainsi « datum » devint « datums » (et non pas « data »),
tandis que « sphynx » devint « sphynxs » (et non pas « sphynges »). De la même
façon, les suffixes « -ed », « -e r » et « -in g » furent ajoutés pour transformer
des mots tels que « phase » en « phased », « phaser » et « phasing ». Ces
tests supplémentaires ajoutèrent 1000 000 de mots à la liste des mots de passe
possibles à tester pour chaque utilisateur.
4. Différentes mises en majuscule des mots de l’étape 2 qui ne furent pas considérées
pour l’étape 3. Cela inclut la mise en majuscule d’une seule lettre à toutes les
positions possibles (ainsi « m ichael » donne « m ichael », « miChael », « micHael »,
« michAel », etc.), la mise en majuscule de deux lettres (« M ichael », « MiChael »,
« MicHael », .. , « mIChael », « mlcHael », etc.), la mise en majuscule de trois
lettres, etc. La mise en majuscule d’une seule lettre rajouta environ 400000 mots
à tester par utilisateur tandis que la mise en majuscule de deux lettres rajouta
1500 000 de mots supplémentaires. La mise en majuscule de trois lettres aurait
rajouté au moins 3000000 de mots par utilisateur s’il y avait eu suffisamment de
8.1 Génération de clefs 185
temps pour effectuer les tests. Tester les mises en majuscule de quatre, cinq et
six lettres s’avérait infaisable sans beaucoup plus de puissance de calcul.
5. Des mots de langues étrangères pour des utilisateurs étrangers. Le test spécifique
qui fut réalisé était d’essayer des mots de passe chinois pour les utilisateurs chi
nois. La romanisation Pidgin des syllabes chinoises a été utilisée, en combinant
les syllabes par une, deux ou trois pour former des mots. Comme aucun test ne
fut fait pour déterminer si les mots engendrés avaient un sens, une recherche ex
haustive fut entamée. Comme il y a 298 syllabes chinoises dans le système Pidgin,
il y a 158 404 mots de deux syllabes et un peu plus de 16 000 000 de mots de trois
syllabes. Un mode d ’attaque similaire peut être aisément utilisé pour la langue
anglaise en utilisant des règles pour construire des mots prononçables mais sans
aucun sens.
6. Des paires de mots. L ’ordre de grandeur d’un test exhaustif de ce type est stupé
fiant. Pour simplifier le test, seuls les mots de trois et quatre caractères de long
de /usr/dic.t/words furent utilisés. Même ainsi, le nombre de paires est de l’ordre
de dix millions.
Une attaque par dictionnaire est bien plus efficace quand elle est montée contre un
fichier de clefs plutôt que contre une seule clef. Un seul utilisateur peut être assez
malin pour choisir de bonnes clefs. Si un millier de personnes choisissent leur propre
clef comme mot de passe d ’accès à un système informatique, les chances sont élevées que
le mot de passe d ’au moins une personne se trouve dans le dictionnaire de l’attaquant.
Clefs aléatoires
Les bonnes clefs sont des chaînes aléatoires de bits générées par des processus automa
tiques. Si une clef a 64 bits de long, toutes les chaînes possibles de 64 bits devraient
être équiprobables. Engendrez les bits de la clef à partir d’une source aléatoire fiable
(voir § 17.14) ou d ’un générateur pseudo-aléatoire de bits cryptographiquement sûr
(voir chapitres 16 et 17). Si ces dispositifs automatiques ne sont pas disponibles, lancez
une pièce de monnaie ou un dé.
C’est important, mais ne vous laissez pas emporter dans une conversation quant à
savoir si les bruits aléatoires des sources audios sont plus aléatoires que ceux des déchets
radioactifs. Aucun de ces bruits aléatoires sera parfait, mais ils seront probablement
assez bons. Il est important d ’utiliser un bon générateur de nombre aléatoire pour la
génération de clef, mais il est encore plus important d’utiliser de bons algorithmes de
chiffrement et de bonnes procédures de gestion de clefs. Si le fait que vos clefs soient
aléatoires vous ennuie, utilisez la technique du broyage de clef, décrite plus loin.
Certains algorithmes de chiffrement ont des clefs faibles : des clefs spécifiques qui sont
moins sûres que les autres clefs. Je vous conseille de détecter ces clefs et d ’en engendrer
une autre si vous en découvrez une. Le DES n’a que 16 ('lefs faibles sur 256, donc les
chances d’engendrer Lune d ’elles sont incroyablement faibles. Il a été argumenté qu’un
cryptanalyste n’aurait pas la moindre idée qu’une clef faible est utilisée et donc ne
tire pas avantage de leur utilisation accidentelle. Toutefois, détecter les quelques clefs
faibles est tellement facile qu’il semble imprudent de ne pas le faire.
Engendrer des clefs pour les systèmes de cryptographie à clef publique est nettement
plus difficile car souvent les clefs doivent avoir certaines propriétés mathématiques
186 Chapitre 8 Gestion des clefs
(elles doivent parfois être un nombre premier, un résidu quadratique, etc.). Des tech
niques pour engendrer des grands nombres premiers aléatoires sont décrites dans le
paragraphe 11.5. La chose importante à se rappeler du point de vue de la gestion des
clefs est que les germes de ces générateurs doivent être complètement aléatoires.
Engendrer une clef aléatoire n ’est pas toujours possible. Parfois, il est nécessaire de
mémoriser votre clef2. Si vous devez engendrer une clef facile à mémoriser, rendez-
la obscure. L’idée est d ’avoir quelque chose de facile à mémoriser mais de difficile à
deviner. Voici quelques suggestions :
- Des chaînes de caractères qui sont un acronyme de phrases plus longues, par
exemple « Mein Luftkissenfahrzeug ist voiler Aale! » donne la clef « MLivA ! ».
Phrases-mots de passe
Une meilleure solution est d ’utiliser une phrase entière au lieu d’un seul mot et de
convertir cette phrase en une clef. Ces phrases sont appelées phrase clef Une technique
appelée broyage de clef, transforme des phrases faciles à mémoriser en des clefs
aléatoires. Utilisez une fonction de hachage à sens unique pour transformer un texte
de longueur quelconque en une chaîne de bits pseudo-aléatoire.
Par exemple, le texte suivant facile à mémoriser:
Mon nom est Ozymandias, roi des rois. Contemple mon œuvre, O toi le
tout puissant, et désespère.
pourrait être « broyé » pour donner la clef de 64 bits suivante (en hexadécimal) :
Bien sûr, taper une phrase entière dans un ordinateur peut se révéler difficile. Les
bonnes idées pour résoudre ce problème sont les bienvenues.
Si la phrase est assez longue, la clef résultante sera aléatoire. Ce que signifie exactement
« assez longue » est sujet à interprétation. La théorie nous dit que l’anglais standard a
à peu près 1,3 bits d ’information par caractère (voir § 11.1). Pour une clef de 64 bits,
une phrase clef d’à peu près 49 caractères, ou de 10 mots normaux anglais, devrait
être suffisante. A vue de nez, dites-vous que vous avez besoin de 5 mots pour 4 bits de
clef C ’est une hypothèse modérée, sachant que cela ne prend en compte ni les lettres
majuscules ou minuscules, ni l’espacement, ni la ponctuation.
Cette technique peut même être utilisée pour engendrer la clef privée des systèmes
cryptographiques à clef publique : le texte peut être transformé en un germe aléatoire
et ce germe peut être fourni à un système déterministe qui engendre la paire « clef
privée, clef publique ».
Si vous choisissez une phrase clef, choisissez quelque chose d ’unique et de facile à retenir.
Ne choisissez pas des phrases extraites de la littérature, l’exemple de « Ozymandias »
n’est pas bon. Les œuvres complètes de S h a k e s p e a r e et les dialogues de « La guerre
des étoiles (Star Wars) » sont disponibles et peuvent être utilisés pour une attaque
2. Constatez com bien de tem ps il vous faut pou r m ém oriser 25e8 5 6 f2 e8ba c820.
8.1 Génération de clefs 187
Soit E k ( X ) le chiffrement DES de X avec la clef K . C ’est une clef spéciale réservée
à la génération de clefs. Vo est un germe de 64 bits secret. T est une datation. Pour
engendrer la clef aléatoire Ri, calculez :
Ri = Epc(Efi-(7'z) © Vi).
Pour engendrer U f i, calculez:
V%+ 1 — E k ( E k ( Ti ) © R i ) .
Pour transformer Ri en une clef DES, ajustez simplement un bit sur huit pour la
parité. Si vous avez besoin d’une clef de 64 bits, utilisez-la telle quelle. Si vous avez
besoin d’une clef de 128 bits, engendrez une paire de clefs et joignez-les.
en clair sur le même canal garantit que n’importe qui écoutant le canal peut déchiffrer
toutes les communications.
Le standard X 9 .17 [57] détermine deux types de clefs : les clefs de chiffrement de clefs
et les clefs de données. Les clefs de chiffrement de clefs chiffrent les autres clefs
pour la distribution. Les clefs de données chiffrent le trafic des messages. Ces clefs de
chiffrement de clefs doivent être distribuées manuellement (bien qu’elles puissent être
en sécurité dans un système inviolable, tel qu’une carte à puce), mais seulement très
rarement. Les clefs de données sont distribuées plus souvent. Vous trouverez plus de
détails dans [82]. Ce concept de deux niveaux de clefs est très utilisé dans la distribution
de clefs.
Une autre solution au problème de distribution est de diviser la clef en plusieurs mor
ceaux (voir § 3.6) et d’envoyer chaque morceau par un canal différent. Un morceau
pourrait être envoyé par téléphone, un par courrier, un par courrier express, un par
pigeon voyageur, etc. (voir la figure 8.2). Comme un adversaire arrivant à collecter
tous les morceaux sauf un ne pourra pas reconstruire la clef, cette méthode marchera
dans tous les cas excepté les cas extrêmes. Le paragraphe 3.6 présente des schémas
pour diviser une clef en plusieurs morceaux. Alice pourrait même utiliser un schéma
de partage de secret (voir § 3.7), permettant à Bernard de reconstruire la clef même si
quelques morceaux se sont égarés pendant la transmission.
Alice envoie à Bernard la clef de chiffrement de clefs de manière sûre, soit en se ren
contrant en chair et en os, soit par la technique de morcellement présentée ci-dessus.
Une fois qu’Alice et Bernard disposent tous deux de la clef de chiffrement de clefs,
Alice peut envoyer à Bernard les clefs de données journalières sur le même canal de
communication. Alice chiffre chaque clef de données journalière avec la clef de chiffre
ment de clefs. Comme le volume chiffré avec la clef de chiffrement de clefs est faible,
elle ne doit pas être changée trop souvent. Toutefois, si la clef de chiffrement de clefs
est compromise alors tous les messages chiffrés avec toutes les clefs journalières sont
compromis, la clef de chiffrement des clefs doit être stockée de manière sûre.
190 Chapitre 8 Gestion des clefs
Il peut être nécessaire de vérifier qu’elle appartient bien à la même personne que celle à
qui elle appartenait l’an dernier. Si quelqu’un envoie un ordre de retrait à une banque, la
banque ne doit pas s’inquiéter de savoir qui retire l’argent, elle doit seulement s’assurer
que c’est la même personne que celle qui a déposé l’argent originellement.
3° Hachez le résultat.
4° Utilisez les même bits de l’empreinte, par exemple 32, pour la somme de
contrôle de la clef.
Ceci donne à Estelle des informations, mais très peu. Si elle essaie d’utiliser les 32
bits de la valeur finale du hachage pour entreprendre une attaque massive, elle devra
effectuer de multiples chiffrements ainsi qu’un hachage par clef; une attaque massive
sur la clef elle-même serait plus rapide.
192 Chapitre 8 Gestion des clefs
De plus, elle n’aura pas de valeurs de texte en clair connues à essayer, et même si elle
arrive à choisir une valeur aléatoire à notre place, elle ne pourra pas choisir un de nos
textes, puisqu’ils passent au hachage avant qu’elle puisse les voir.
directement aux clefs. Ce système est abordé plus à fond dans les chapitres 24.1 et
24.8.
Des clefs difficiles à mémoriser peuvent être stockées sous forme chiffrée, en utilisant
quelque chose de similaire à une clef de chiffrement de clefs. Par exemple, une clef
privée R SA peut être chiffrée par DES et stockée sur le disque. Pour récupérer la clef
R SA , l'utilisateur doit donner la clef D ES au programme de déchiffrement.
Si les clefs sont engendrées de manière déterministe (avec un générateur pseudo
aléatoire de nombres cryptographiquement sûr) il peut être plus simple de réengendrer
les clefs à partir d ’un mot de passe facile à retenir chaque fois qu’elles sont nécessaires.
L’idéal serait qu’une clef n’apparaisse jamais non-chiffrée hors du module de chiffre
ment. Ce n’est pas toujours possible, mais c’est un but que nous devons atteindre.
ne peut pas la connaître. Et le système marche à double sens : Bernard peut vérifier
que la clef permet l’accès à l’ordinateur d ’Alice, et quand Alice reviendra, elle pourra
vérifier si Bernard a utilisé la clef et si oui, combien de fois.
Un tel schéma n’est pas applicable aux transmissions de données. Sur un téléphone
protégé, la clef ne devrait exister que le temps de l’appel. Pour le stockage de données,
comme on vient de le dire, le dépôt de clef peut être une bonne idée. J’ai perdu environ
une clef tous les cinq ans, et ma mémoire est supérieure à la moyenne. Si 200 millions
de personnes utilisaient la cryptographie, ce même taux équivaudrait à 40 millions de
clefs perdues annuellement. Je laisse un double des clefs de ma maison à mon voisin,
au cas où je les perde. Si les clefs de la maison étaient des clefs cryptographiques, et si
je les perdais, je ne pourrais plus jamais rentrer chez moi. Au même titre que je garde
à part un duplicata de mes données, il me semble logique de garder une copie de ses
clefs de chiffrement de données.
Les procédures et les recommandations sont rarement optimales, mais elles sont ce que
l’on peut faire de mieux. La morale de cette histoire est qu’il faut protéger les clefs, et
les clefs privées par-dessus tout.
- Plus la clef sera utilisée longtemps, plus elle aura de chances d’être compromise.
Les gens mettent par écrit les clefs, ils les perdent. Les accidents arrivent. Si
vous utilisez la même clef pendant un an, il y a bien plus de chances qu’elle soit
compromise que si vous l’utilisez un jour seulement.
Plus la clef est utilisée longtemps, plus grande est la perte si la clef est compro
mise. Si la clef est utilisée seulement pour chiffrer un seul document de budget
sur un serveur de fichiers, alors la perte de la clef ne compromet que ce document.
Si la même clef est utilisée pour chiffrer tous les budgets sur le serveur de fichiers
alors la perte est nettement plus catastrophique.
- Plus la clef est utilisée longtemps, plus grande est la tentation pour quelqu’un de
fournir l’effort nécessaire pour la retrouver — même si cet effort est une attaque
exhaustive. Retrouver une clef partagée par deux unités militaires pendant un
jour permettrait à quelqu’un de lire et d’engendrer des messages entre ces deux
unités pendant un jour. Retrouver une clef partagée par un état-major de l’armée
pendant un an permettrait à la même personne de lire et d’engendrer des mes
sages à travers le monde entier pendant toute une année. En ayant conscience
du budget, dans notre monde d’après-guerre froide, quelle clef choisiriez-vous
d’attaquer?
- Il est en général plus facile d ’effectuer une cryptanalyse quand on a plus de texte
chiffré avec une même clef.
Pour toute application cryptographique, il doit y avoir une consigne qui détermine la
longévité d’une clef. Des clefs différentes peuvent avoir des longévités différentes. Pour
un système basé sur la connection, tel que le téléphone, il semble logique d’utiliser une
clef pour la durée de l’appel et d ’en utiliser une nouvelle à chaque appel. Les systèmes
dédiés aux canaux de communication ne sont pas si évidents Les clefs devraient avoir
une durée de vie relativement courte, selon la valeur et la quantité de données chiffrées
pendant une période donnée. La clef pour une liaison de communication à 1 gigabit
par seconde doit être changée plus souvent que la clef pour une liaison par modem à
9600 bauds. En faisant l’hypothèse qu’il existe une méthode efficace pour transmettre
des nouvelles clefs à l’aide d ’une clef de chiffrement de clefs, les clefs de session doivent
être changées au minimum chaque jour.
Les clefs de chiffrement de clefs ne doivent pas être changées aussi souvent. Elles sont
utilisées occasionnellement (grosso modo une fois par jour) pour l’échange de clefs. Cela
génère peu de texte chiffré au cryptanalyste, et le texte en clair correspondant n’a pas
8.11 Destruction des clefs 197
- Quel niveau de confiance en l’identité de quelqu’un est induit par son certificat ?
- Quelles sont les relations entre une personne et l’A C qui certifie sa clef publique,
et comment ces relations peuvent être impliquées par le certificat?
L’idéal serait que Bernard suive une sorte de procédure d ’authentification avant que
l’AC ne signe son certificat. De plus, une datation ou une indication de la période de
validité du certificat est importante pour se protéger des clefs compromises [467].
La datation n’est pas suffisante. Les clefs peuvent être invalidées avant expiration, soit
pour des raisons de compromission ou administratives. C ’est pourquoi il est important
que l’A C garde une liste des certificats invalidés et que les utilisateurs la consulte
régulièrement. Ce problème de révocation de clef est toujours difficile à résoudre.
Une paire « clef publique, clef privée » n ’est pas suffisante. Il est certain qu’une bonne
application de la cryptographie à clef publique requiert des clefs distinctes pour le chif
frement et les signatures digitales. Cette séparation permet d ’avoir différents niveaux
de sécurité, temps d’expiration, procédures de duplication, etc... Quelqu’un pourrait
signer des messages avec une clef de 2048 bits stockée dans une carte à puce et va
lable pour 20 ans, alors qu’ils pourraient utiliser une clef de 768 bits stockée dans un
ordinateur et valable pour six mois pour le chiffrement.
Une paire unique de clefs pour le chiffrement et la signature n’est pas non plus suf
fisante. Une clef privée authentifie une relation ainsi qu’une identité, et les personnes
ont plus d’une relation. Alice pourrait vouloir signer un document en tant qu’Alice,
l’individu, un autre en tant qu’Alice, vice-présidente de la société « Monolith, S.A. », et
un troisième en tant qu’Alice, présidente d ’une organisation communautaire. Certaines
de ces clefs sont plus importantes que d ’autres et demandent à être mieux protégées.
Alice pourrait avoir à stocker un duplicata de sa clef de travail auprès de l’officier de
sécurité de l’entreprise ; elle ne veut pas que l’entreprise ait une copie de la clef avec
laquelle elle a signé un emprunt. Tout comme Alice a plusieurs clefs dans sa poche, elle
aura plusieurs clefs cryptographiques.
qu’Alice et Bernard n’ont confiance qu’en leurs amis. Peut-être qu’Alice et Bernard
n’ont confiance en personne.
La gestion distribuée des clefs, utilisée dans le programme « Pretty Good Privacy »
(P G P ) (voir § 24.12) résout ce problème à l’aide de parrains. Les parrains sont
d’autres utilisateurs du système qui peuvent signer les clefs publiques de leurs amis.
Par exemple, quand Bernard engendre sa clef publique, il en donne une copie à ses
amis: Christine et David. Ils connaissent Bernard et donc ils signent chacun la clef
publique de Bernard et lui envoient une copie des clefs signées. Maintenant, Bernard
présente sa clef publique à une étrangère, Alice; il la lui présente avec les signatures
de ses deux parrains. Si Alice connaît et a confiance en Christine, elle a des raisons
de croire que la clef de Bernard est valide. Si elle connaît un peu et a quelque peu
confiance en Christine et David, elle a des raisons de croire que la clef de Bernard est
valide. Si elle ne connaît ni Christine ni David, elle n’a aucune raison de faire confiance
à la clef de Bernard.
Au fil du temps, Bernard rassemblera bien plus de parrains. Si Alice et Bernard gra
vitent dans les mêmes cercles, les chances d ’Alice de connaître un des parrains de
Bernard sont élevées. Pour se prémunir contre Martin qui remplace une clef par une
autre, un parrain doit s’assurer que la clef de Bernard appartient bien à celui-ci avant de
la signer. Le parrain peut demander que la clef soit communiquée lors d ’une rencontre
en chair et en os, ou vérifiée par téléphone.
L ’avantage de ce mécanisme est qu’il n’y a pas d’A C en qui tout le monde doit avoir
confiance. Le défaut est que lorsqu’Alice reçoit la clef publique de Bernard, elle n’a
aucune garantie de connaitre un des parrains, et par conséquent aucune garantie de
pouvoir avoir confiance dans la validité de cette clef.
Chapitre 9
Il y a d’autres motifs de sécurité : les motifs dans un texte en clair doivent être dissimu
lés, l’entrée de l’algorithme cryptographique doit être rendue aléatoire, la manipulation
du texte en clair par insertion d’erreurs dans le texte chiffré doit être difficile et le chif
frement de plus d’un message avec la même clef doit être possible. Nous discuterons
de tout ceci en détails dans les paragraphes suivants.
L’efficacité est aussi à prendre en considération. Le mode ne doit pas être moins efficace,
de manière significative, que l’algorithme cryptographique sous-jacent. Dans certaines
circonstances, il est important que le texte chiffré ait la même taille que le texte en
clair.
Remplissage
La plupart des messages ne se divisent pas exactement en un nombre entier de blocs
de 64 bits (ou de toute autre taille) : il y a d ’habitude un bloc court à la fin. L’ECB
traite des blocs de 64 bits. Le rem plissage permet de régler ce problème.
Remplissez le bloc avec un schéma régulier des zéros, des uns, des uns et des zéros en
alternance — pour compléter le bloc. Si vous devez être capable de retirer le remplissage
après le déchiffrement, ajoutez le nombre d ’octets de remplissage comme dernier octet
du dernier bloc. Par exemple, faites l’hypothèse que la taille des blocs est de 64 bits,
et que le dernier bloc contient 3 octets (24 bits). Cinq octets de remplissage sont
nécessaires pour transformer le dernier bloc en un bloc de 64 bits; ajoutez 4 octets
de 0 et un octet final avec le nombre 5. Après déchiffrement, détruisez les 5 derniers
octets du dernier bloc déchiffré. Pour que cette méthode marche correctement, tous les
message doivent être remplis. Même si le texte en clair s’achève à la limite d’un bloc,
vous devez remplir un bloc complet. Sinon, vous pouvez utiliser un caractère marqueur
de fin de fichier pour délimiter la fin du texte en clair, puis remplir à la suite de ce
caractère.
La figure 9.1 propose une alternative appelée vol de texte chiffré [405]. E i n- i est le
dernier bloc en clair plein et M .n est le bloc final en clair court. Cn~j est le dernier bloc
chiffré plein et Cn est le bloc final chiffré court. C' est juste un résultat intermédiaire
et ne fait pas partie du texte chiffré transmis.
Chiffrement Déchiffrement
Mn-1 Mn Cnu Cn C’
«=•
1r 1f 1 r
°k
ir 1r 1r
C„ C’ Mn C’
la vie plus facile pour le système informatique de la banque, les banques se sont mises
d’accord sur un format de message standard pour les transferts d’argent qui ressemble
à ceci :
Datation 1 bloc
Banque A : émettrice 15 blocs
Banque B : bénéficiaire 15 blocs
Nom du déposant 6 blocs
Numéro de compte dudéposant 2 blocs
Montant du dépôt 1 bloc
Deux messages identiques seraient facilement identifiés avec ce système. Mais, en utili
sant une méthode appelée blocs rejoués, Martin peut encore s’enrichir. La figure 9.2
montre que Martin peut extraire les huit blocs chiffrés correspondant à son nom et
son numéro de compte : les blocs 5 à 12. En analysant cette figure, Martin, désormais
armé, ricane dans son coin.
Il intercepte aléatoirement des messages de la banque d ’Alice vers la banque de Bernard
et remplace les blocs 5 à 12 dans le message avec les octets correspondant à son nom et à
son numéro de compte. Ensuite, il les envoie à la banque de Bernard.Il n’a pas à savoir
qui est le déposant légitime ; il n ’a même pas à connaître lemontantdu transfert (bien
9.3 Mode de chiffrement avec chaînage de blocs 205
Numéro de bloc
1 2 3 4 5 6 7 8 9 10 11 12 13
Cham p
qu’il puisse corréler les messages des différents transferts avec des montants différents
qu’il a effectués vers son compte, et ainsi déterminer les blocs chiffrés correspondant à
certains montants). Simplement, il remplace les noms et les numéros de compte par les
siens et il contemple le solde de son compte augmenter, (il faut que Martin soit prudent
et ne modifie pas le message de retrait, imaginez rien qu’une seconde que chacun ait
une longueur différente.)
Cela prendra plusieurs jours aux banques pour détecter cela. Lorsqu’elles feront la
balance journalière des transferts, tout sera en ordre. Ce ne sera certainement pas
avant que l’un des déposants honnêtes s’aperçoive que l’argent ne lui a pas été crédité,
ou que quelqu’un remarque l’activité inhabituelle du compte de Martin, que les banques
découvriront l’escroquerie. Martin n’est pas stupide, et d’ici là il aura fermé son compte,
changé son nom et acheté une villa en Argentine.
Les banques peuvent minimiser le problème en changeant fréquemment de clef mais
Martin peut aussi travailler plus vite. Néanmoins, rajouter un C A M peut aussi ré
soudre le problème. Pourtant, c ’est un défaut fondamental en mode ECB. Martin peut
retirer, répéter ou échanger des blocs à volonté. La solution est une technique appelée
chaînage.
M.
i-l
M.
i M. ,
1+1
Ci-l C:i+1
M i-l M. M.
■VI S i+J ' 'i '" i + l
Le déchiffrement est aussi facile(voir la figure 9.3b). Un bloc de texte chiffré est déchiffré
normalement, et aussi sauvé dans le registre de rétroaction. Une fois que le bloc suivant
a été déchiffré, il est combiné par ou exclusif avec le contenu du registre de rétroaction.
Ensuite, le bloc suivant de texte chiffré est sauvé dans le registre de rétroaction, et ainsi
de suite jusqu’à la fin du message.
Mathématiquement, on peut écrire :
Ct = E fc i- M t © C j - i )
Vecteur d’initialisation
Le mode C B C ne produit des blocs chiffrés différents pour des mêmes blocs en clair
seulement si un des blocs précédents est différent. Deux messages identiques donneront
toujours le même texte chiffré. Pis encore, deux messages qui commencent de la même
façon donneront le même texte chiffré jusqu’à la première différence. Certains messages
ont un en-tête commun : un en-tête de lettre, une ligne « Frorri » d’un message électro
nique, par exemple. Bien qu’une attaque par blocs rejoués soit toujours impossible, ce
début identique donne encore d’utiles informations au cryptanalyste.
Evitez cela en chiffrant des données aléatoires comme premier bloc. Ce bloc de données
aléatoires est appelé vecteur d’initialisation (IV pour « initialization vector »),
variable d ’initialisation ou valeur initiale de chaînage. L’IV n’a pas de sens : il
est juste là pour rendre chaque message unique. Quand le destinataire déchiffre ce bloc,
il l’utilise pour remplir le registre de rétroaction et l’ignore par ailleurs. Une datation
fait un bon IV. Sinon, utilisez des bits aléatoires.
9.3 Mode de chiffrement avec chaînage de blocs 201
Avec l’addition de l’IV , des messages en clair identiques donneront des messages chiffrés
différents. Il est donc impossible pour un espion de tenter une attaque par blocs rejoués,
et encore plus difficile de constituer un carnet de codage. Bien que l’IV devrait être
unique par message chiffré avec la même clef, ce n’est pas une condition absolue.
L’IV n’a pas besoin d’être tenu secret ; il peut être transmis en clair avec le texte chiffré.
Si vous n’êtes pas persuadé, considérez le raisonnement suivant. Nous possédons un
message de plusieurs blocs: B\, B 2 , ......., B ,. B\ est chiffré avec l’IV. B 2 est chiffré
avec le texte chifré de Bi en tant qu’IV . B 3 est chiffré avec le texte chifré de B 2 en
tant qu’IV , etc. Donc, s’il y a n blocs, il y a n — 1 IV , même si l’IV original est gardé
secret. Il n’y a donc aucune raison de garder l’IV secret ; l’IV est juste un simple bloc
de texte chiffré — un peu comme Bq qui commence la série.
Remplissage
Le remplissage marche exactement comme dans le mode E B C , mais dans certaines
applications le texte chiffré doit avoir exactement la même taille que le texte en clair.
Peut-être qu’un texte en clair doit être chiffré et mis exactement à la même place en
mémoire. Dans ce cas, vous devez chiffrer le dernier bloc court différemment. Faites
l’hypothèse que le dernier bloc a j bits. Après avoir chiffré le dernier bloc complet,
rechiffrez le texte chiffré, sélectionnez les j bits les plus à gauche du texte chiffré deux
fois et combinez le résultat par ou exclusif avec le bloc court pour donner le texte
chiffré. Cela est illustré par la figure 9.4.
M M Pn (j-bits de long)
n-2
-*0
Sélectionne
les j-bits -e
les plus a gauchi
La faiblesse ici est que bien que Martin ne puisse pas retrouver le dernier bloc, il
peut le modifier systématiquement en changeant des bits du texte chiffré. Si les tout
derniers bits du texte chiffré contiennent de l’information vitale, c ’est une faiblesse. Si
les derniers bits contiennent simplement des informations de gestion, ce n’est pas un
problème.
Le vol de texte chiffré est une meilleure méthode (voir la figure 9.5) [405]. M „_ i est le
dernier bloc en clair plein et M n est le bloc final en clair court. Cn^\ est le dernier bloc
chiffré plein et Cn est le bloc final chiffré court. C ' est juste un résultat intermédiaire
208 Chapitre 9 Types et modes d’algorithmes
et ne fait pas partie du texte chiffré transmis. L’avantage de cette méthode est que
tous les bits d ’un message en clair passent par l’algorithme de chiffrement.
Propagation d’erreurs
Le mode C B C peut être décrit comme une rétroaction du texte chiffré du côté du
chiffrement et une alimentation en texte chiffré du côté du déchiffrement. Ceci a des
conséquences sur les erreurs. Une erreur d ’un seul bit dans un bloc de texte en clair
va affecter le bloc de texte chiffré correspondant et tous les blocs de textes chiffrés qui
suivent. Ce n’est pas de grande portée parce que le déchiffrement va inverser cet effet
et le texte en clair retrouvé aura la même seule erreur.
Les erreurs dans le texte chiffré sont plus fréquentes. Elles peuvent tout simplement
provenir d ’un bruitage de la liaison ou d ’un disfonctionnement du dispositif de stockage.
En mode C B C , une erreur d ’un seul bit dans le texte chiffré affecte un bloc, et un bit
du texte en clair reconstruit. Le bloc contenant l’erreur est complètement brouillé. Le
bloc suivant a une erreur de 1 bit au même endroit que le bit erroné.
Cette transformation d’une petite erreur dans le texte chiffré en une grande erreur
dans le texte en clair est appelée amplification d’erreur. C’est un handicap majeur.
Les blocs après le deuxième ne sont pas affectés par l’erreur, donc le mode C B C est
auto-réparateur. Deux blocs sont affectés par une erreur mais le système récupère
et continue à fonctionner correctement pour tous les blocs suivants. Le C B C est un
exemple d ’algorithme de chiffrement par blocs utilisé d ’une manière auto-synchronisée,
mais seulement au niveau du bloc.
Bien que le mode C B C récupère rapidement les erreurs de bits, il ne récupère pas du
tout les erreurs de synchronisation. Si un bit est ajouté ou perdu dans le flot de texte
chiffré, alors tous les blocs suivants sont décalés d ’un bit et le déchiffrement va produire
du charabia indéfiniment. Tout cryptosystème qui utilise le mode C B C doit s’assurer
que la structure des blocs reste intacte, soit par encadrement soit en stockant les
données dans des paquets de plusieurs blocs.
9-4 Algorithmes de chiffrement en continu 209
Problèmes de sécurité
Des problèmes potentiels sont causés par la structure même du C B C . Primo, du fait
qu’un bloc de texte chiffré affecte les blocs suivants d’une manière simple, Martin peut
ajouter des blocs à la fin d ’un message chiffré sans être détecté. Ce sera à coup sûr
déchiffré en charabia, mais dans certaines situations, ce n’est pas désirable.
Si vous utilisez le C B C , vous devriez structurer votre texte en clair de façon à savoir
où le message s’arrête et de pouvoir détecter les rajouts de blocs supplémentaires.
Secundo, Martin peut altérer un bloc de texte chiffré pour introduire des changements
voulus dans le bloc déchiffré de texte en clair. Par exemple, si Martin change un seul
bit de texte chiffré, le déchiffrement du bloc entier sera incorrect, mais le bloc suivant
comportera une erreur d ’ 1 bit en lieu et place du bit correspondant. Il y a des situations
où ceci est désirable. Le message en clair entier devrait inclure une sorte de contrôle
redondant ou une authentification.
Finalement, bien que les motifs du texte en clair soient dissimulés par le chaînage, les
très longs messages auront encore des motifs. Le paradoxe de l’anniversaire prévoit
qu’il y aura des blocs identiques après 2m / 2 blocs, où m est la taille du bloc. Pour un
bloc d ’une taille de 64 bits, ça représente à peu près 34 giga-octets. Un message doit
être incroyablement long avant que ce ne soit un problème.
1. Note du traducteur : le term e « c o d o n » a été utilisé pou r alléger la traduction de termes techniques
anglo-saxons qui n ’ont pas d ’équivalents simples en français.
210 Chapitre 9 Types et modes d’algorithmes
Du côté du déchiffrement, les bits du texte chiffré sont combinés par ou exclusif avec
un flux identique de codons pour retrouver les bits du texte en clair.
rrii = a © kt
Comme :
ml ® k i @ki = ml
tout va bien.
La sécurité du système dépend entièrement des détails internes du générateur de co
dons. Si le générateur de codons engendre un flux continu de zéros, le texte chiffré sera
identique au texte en clair et toute l’opération sera inutile. Si le générateur de codons
engendre un motif répétitif de 16 bits, l’algorithme n’est rien d’autre que le simple
algorithme du ou exclusif qui n’est pas du tout sûr (voir § 1.4). Si le générateur de
codons engendre une suite de bits aléatoires (pas pseudo-aléatoires, vraiment aléatoires
— voir § 2 .8 ), vous avez la technique du masque jetable et une sécurité parfaite.
La sécurité des algorithmes de chiffrement en continu concrets est entre les deux ex
trêmes (ou exclusif et masque jetable) — idéalement, elle est plus proche du masque
jetable. Le générateur de codons engendre un flux de bits qui ont l’air aléatoires, mais
en fait il est déterministe et il peut être reproduit de façon infaillible au moment du
déchiffrement. Plus la sortie du générateur est aléatoire, plus il est difficile pour le
cryptanalyste de le casser.
Si, néanmoins, le générateur de codons engendre le même flot de bits chaque fois qu’on
l’active, le système cryptographique résultant sera facile à casser. Un exemple montrera
mieux pourquoi.
Si Estelle a un texte chiffré et le texte en clair correspondant, elle peut combiner par
ou exclusif le texte en clair avec le texte chiffré pour retrouver le flux de codons. Ou, si
elle dispose de deux textes chiffrés avec le même flux de codons, elle peut les combiner
par ou exclusif pour obtenir le résultat de la combinaison par ou exclusif des deux
textes en clair. C ’est facile à casser et elle peut alors combiner par ou exclusif un des
textes en clair avec le texte chiffré pour retrouver le flux de codons.
Maintenant, chaque fois qu’elle intercepte un message chiffré, elle a les codons néces
saires pour déchiffrer le message. De plus, elle peut déchiffrer et lire tout texte chiffré
qu’elle aurait intercepté avant. Quand Estelle obtient une seule paire « texte en clair,
texte chiffré », elle peut tout lire.
C’est pourquoi tous les algorithmes de chiffrement en continu utilisent des clefs. La sor
tie du générateur de codons est une fonction de la clef.Maintenant, si Estelle a une paire
« texte en clair, texte chiffré », elle peut seulement lire les messages chiffrés avec une
seule clef. Changez la clef et l’adversaire se retrouve à la case départ. Les algorithmes
de chiffrement en continu sont spécifiquement utiles pour chiffrer des communications
continues : un lien T - l entre deux ordinateurs, par exemple.
Un générateur de codons est composé de trois parties de base (voir la figure 9.7). L’état
interne décrit l’état courant du générateur de codons. Deux générateurs de codons, avec
la même clef et le même état interne, produisent le même flux de codons. La fonction
de sortie prend l’état interne et engendre un codon (un bit). La fonction état-suivant
prend l’état interne et engendre un nouvel état interne.
9.5 Chiffrement autosynchrone, en continu 211
Problèmes de sécurité
Les systèmes de chiffrement autosynchrone en continu sont aussi vulnérables aux at
taques par blocs rejoués. D ’abord, Martin enregistre quelques bits de texte chiffré. Puis,
un peu plus tard, il place cet enregistrement dans la communication. Après quelque
charabia initial pendant que le récepteur se resynchronise, le vieux texte chiffré sera
déchiffré normalement comme légitime. Le récepteur n’a aucun moyen de déterminer
que ces données ne sont pas courantes, mais qu’il s’agit de vieilles données rejouées. A
moins qu’un système de datation soit utilisé, Martin peut convaincre une banque de
créditer son compte plusieurs fois en répétant toujours le même message (en suppo
sant que la clef n’ait pas changé, bien sûr). D ’autres faiblesses dans ce type de schéma
pourraient être exploitées dans le cas de fréquentes resynchronisations [412].
maintenant être transmis. Les mêmes huit bits sont placés dans les huit bits les plus à
droite de la file d’attente et tous les autres bits sont décalés de huit positions vers la
gauche. Les huit bits les plus à gauche sont ignorés. Le caractère en clair suivant est
alors chiffré de la même manière. Le déchiffrement est le processus inverse. Des deux
côtés, chiffrement et déchiffrement, l’algorithme de chiffrement par blocs est utilisé
dans son mode de chiffrement.
M.i = Ci © EK(Ci~i).
Tout comme le mode C B C , le mode C FB lie les caractères du texte en clair entre eux
de manière que le texte chiffré dépende de tout le texte en clair qui précède.
Vecteur d’initialisation
Pour initialiser le processus C FB , l’entrée de l’algorithme de blocs doit être initiée par
un IV. Tout comme l’IV du mode C B C , il n’a pas besoin d’être secret.
Néanmoins, l’IV doit être unique2. Si le l’IV du mode C F B n’est pas unique, un
cryptanalyste peut retrouver le texte en clair correspondant. LTV doit être changé
avec chaque message. Ce peut être un nombre de série, qui augmente après chaque
message et qui ne se répète pas tout au long de la vie de la clef. Pour des données
chiffrées à stocker, cela peut être une fonction de l’index utilisé pour rechercher les
données.
Propagation d’erreurs
Avec le mode C F B , une erreur dans le texte en clair affecte tous les textes chiffrés
suivants et cette erreur est inversée par le déchiffrement. Une erreur dans le texte
chiffré est plus intéressante à considérer. Le premier effet d ’une erreur d ’un seul bit
dans le texte chiffré est de provoquer une erreur d’un seul bit dans le texte en clair.
Après cela, cette erreur entre dans le registre à décalage, où elle embrouille tout jusqu’à
ce qu’elle ressorte à la fin du registre. En mode C FB à 8 bits, 9 octets de texte en clair
déchiffré sont embrouillés par une erreur d’un seul bit dans le texte chiffré. Après cela,
le système récupère et tous les textes en clair suivants sont déchiffrés correctement.
En général, en mode C F B à n bit, une seule erreur d’un texte chiffré affectera le
déchiffrement du bloc présent et des m /n —1 blocs suivants, où m est la taille du bloc
Un problème subtil avec ce type de propagation d’erreur est que si Martin connaît le
texte en clair de la transmission, il peut changer 1 état de certains bits d’un bloc donné
et ainsi le faire déchiffrer en ce qu’il veut. Le bloc suivant peut être déchiffré comme
du charabia, mais les dégâts peuvent déjà avoir été accomplis. Et il peut changer les
derniers bits d ’un message sans être détecté.
Le mode C F B est aussi autoréparateur pour ce qui est des erreurs de synchronisation.
L’erreur entre dans le registre à décalage, embrouille 8 octets de données, jusqu’à ce
qu’elle ressorte à l’autre bout. Le C FB est un exemple d ’algorithme de chiffrement par
blocs utilisé comme algorithme de chiffrement autosynchrone en continu.
Martin insère un seul bit connu, m ', dans le texte en clair après m,\ et s’arrange pour
faire chiffrer ce nouveau texte en clair avec le même flux de codons. Il enregistre le
216 Chapitre 9 Types et modes d’algorithmes
En faisant l’hypothèse qu’il connaît la valeur de m ', il peut déterminer tout le texte en
clair après ce bit à partir du texte chiffré original et du nouveau texte chiffré :
Martin n’a même pas à connaître la position dans laquelle le bit a été inséré ; il doit
juste comparer le texte chiffré avec le texte chiffré mis à jour et déterminer à partir
de quel endroit ils diffèrent. Pour se protéger contre cette attaque, il ne faut jamais
utiliser le même flux de codons pour chiffrer deux messages différents.
M , = Cr © St ; Sx — Ej((St- i ) .
Si est l’état, qui est indépendant soit du texte en clair soit du texte chiffré.
Une caractéristique intéressante du mode O F B est qu’ une grosse partiedu travail peut
être effectuée séparément, avant mêmeque le message en clair n’existe.Puis,quand
le message arrive, il peut être combiné par ou exclusif avec le produit de l’algorithme
pour produire le texte chiffré.
Vecteur d’initialisation
Le registre à décalage de l’O F B doit aussi être chargé initialement avec un IV. Il
devrait être unique mais n’a pas besoin d ’être secret.
9.8 Mode de rétroaction de sortie 217
Propagation d’erreurs
Le mode O F B n’a pas d ’amplification d’erreur. Une erreur d ’un seul bit dans le texte
chiffré occasionne une erreur d’un seul bit dans le texte en clair récupéré. Cela peut
être utile dans certaines transmissions analogiques numérisées, comme la voix ou la
vidéo numérisée, où une erreur occasionnelle d’un bit peut être tolérée mais pas l’am
plification d’erreur.
D ’autre part, la perte de synchronisation est fatale. Si les contenus des registres à déca
lage de chiffrement d’une part et de déchiffrement d’autre part ne sont pas identiques,
alors le texte en clair récupéré sera du charabia. Tout système qui utilise le mode OFB
doit avoir un mécanisme de détection de perte de synchronisation, et un mécanisme
pour remplir les deux registres à décalage avec un nouveau (ou le même) IV pour
resynchroniser.
Dans une variante de ce mode, la clef détermine juste l’état initial du générateur de
9.9 Mode « compteur » 219
codons. Une fois que la clef aura réglé l’état interne du générateur, celui-ci marchera
sans problème.
Ci = EK (M i ® Ft) ; Fi+i = Fz © C%
■Adj = © M t- i © D k (Cz)
une combinaison par ou exclusif de tous les blocs de texte en clair, et combinez-la par ou
exclusif avec le dernier bloc de texte en clair avant chiffrement. Le mode C B C C s’assure
que tout changement effectué à un quelconque des blocs chiffrés change le résultat
déchiffré du dernier bloc. Si le dernier bloc contient un type de contrôle d ’intégrité ou
une constante, alors l’intégrité du texte en clair déchiffré peut être vérifiée avec peu de
frais supplémentaires.
Ci = EKl{ M t) ; K i = EK {Ki- 1)
M i = D Kt(Ci) ; K i ~ E K ( K i ^ i)
Une erreur d’un seul bit dans le texte chiffré ne se répercute que dans un seul bloc en
clair. Néanmoins, si un seul bit est perdu ou ajouté, alors il y a une propagation infinie
d’erreurs. Avec un algorithme de chiffrement par blocs qui a un algorithme compliqué
de gestion de clef, comme le DES, ce mode est lent. Je ne connais pas de cryptanalyse
de ce mode.
bloc de texte en clair au lieu du texte chiffré. Le mode de chiffrem ent à rétroaction
du te x te en clair (P F B pour « plaintext feedback ») est comme le mode C FB , sauf
que c ’est le texte en clair, et non pas le texte chiffré, qui est utilisé pour la rétroaction.
Ces deux modes permettent les attaques à texte en clair choisi afin de résister aux
attaques à texte en clair connu. Il y a aussi le mode de chiffrem ent p a r b lo cs avec
chaînage des différen ces en tre b lo c s d e te x te en clair (C B C P D pour « cipher
block chaining of plaintext différence »). Je suis persuadé que c ’est encore plus étrange.
Si un cryptanalyste a une machine de recherche exaustive de clefs, alors il peut re
trouver la clef s’il peut deviner un des blocs de texte en clair. Certains de ces modes
étranges reviennent à un chiffrement léger avant d ’appliquer l’algorithme de chiffre
ment : par exemple, combiner le texte par ou exclusif avec une chaîne de caractères
secrète ou le permuter. A peu près n’importe quoi d’inhabituel permet d ’éviter ce type
de cryptanalyse.
T a b . 9.1 - R é s u m é d e s m o d e s d e c h if f r e m e n t s p a r b l o c s
ECB C BC
Sécurité Sécurité
— Les motifs des textes en clair ne sont + Les motifs des textes en clair sont
pas dissimulés. dissimulés en combinant par o u e x c l u s i f
— L ’entrée de l’algorithme de chiffrement avec le bloc chiffré précédent.
par bloc n’est pas aléatoire ; c ’est comme + L’entrée de l’algorithme de chiffrement
le texte en clair. par bloc est aléatoire en combinant par
+ Plus d ’un seul message peut être chiffré o u e x c l u s i f avec le bloc chiffré précédent.
avec la même clef. + Plus d ’un seul message peut être chiffré
— Le texte en clair est facile à manipuler ; avec la même clef.
des blocs peuvent être retirés, répétés ou + / — Le texte en clair est quelque peu
interchangés. difficile à manipuler; des blocs peuvent
être retirés du début et de la fin du
Efficacité message, des bits du premier bloc peuvent
+ La vitesse est la même que celle de être changés, et la répétition permet des
l’algorithme de chiffrement par blocs. changements contrôlés.
— Le texte chiffré est jusqu’à un bloc
plus long que le texte en clair, du fait du Efficacité
remplissage. + La vitesse est la même que celle de
— Pas de pré-traitement possible. l’algorithme de chiffrement par blocs.
+ Le traitement est parallélisable. — Le texte chiffré est jusqu’à un bloc plus
long que le texte en clair, sans compter
Tolérance aux fautes l’IV.
— Une erreur dans le texte chiffré affecte — Pas de pré-traitement possible.
tout un bloc du texte en clair. + / — Le traitement n’est pas dérivable;
— Une erreur de synchronisation est le déchiffrement est parallélisable et
irrécupérable. supporte l’accès aléatoire.
Aucun des modes étranges n’a de meilleures propriétés pour la propagation d’erreurs
et pour les mécanismes de récupération d’erreurs.
9.12 Intercalation
Dans la plupart des modes, le chiffrement d’un bit (ou d’un bloc) dépend du chiffre
ment du bit (ou du bloc) précédent. Cela rend souvent impossible la parallélisation du
chiffrement. Prenez par exemple du matériel qui fait du chiffrement en mode CBC.
Même si ce matériel contient quatre puces de chiffrement, une seule peut marcher à la
fois. La puce suivante a besoin du résultat de la puce précédente pour commencer à
224 Chapitre 9 Types et modes d’algorithmes
T a b . 9.2 - R é s u m é d e s m o d e s d e c h if f r e m e n t s p a r b l o c s
CFB ÔFB/Compteur
Sécurité Sécurité
+ Les motifs des textes en clair sont + Les motifs des textes en clair sont
dissimulés. dissimulés.
+ L’entrée de l’algorithme de chiffrement + L ’entrée de l’algorithme de chiffrement
par bloc est aléatoire. par bloc est aléatoire.
+ Plus d ’un seul message peut être + Plus d’un seul message peut être
chiffré avec la même clef pourvu qu’un IV chiffré avec la même clef pourvu qu’un IV
différent soit utilisé. différent soit utilisé.
+ / — Le texte en clair est quelque peu — Le texte en clair est très facile à
difficile à manipuler; des blocs peuvent manipuler ; tout changement dans le texte
être retirés du début et de la fin du chiffré affecte directement le texte en clair.
message, des bits du premier bloc peuvent
être changés, et la répétition permet des Efficacité
changements contrôlés. + La vitesse est la même que celle de
l’algorithme de chiffrement par blocs.
Efficacité — Le texte chiffré est de la même taille
+ La vitesse est la même que celle de que le texte en clair, sans compter l’IV.
l’algorithme de chiffrement par blocs. — Du pré-traitement est possible avant
— Le texte chiffré est de la même taille l’apparition du message.
que le texte en clair, sans compter l’IV. + / — Le traitement OFB n’est pas pa
+ / — Le chiffrement n ’est pas paralléli rallélisable ; le traitement compteur est
sable; le déchiffrement est dérivable et parallélisable.
supporte l’accès aléatoire.
— Du pré-traitement est possible avant Tolérance aux fautes
l’apparition d ’un b loc; le bloc de texte — Une erreur dans le texte chiffré affecte
chiffré précédent peut être chiffré. seulement le bit correspondant du texte
en clair.
Tolérance aux fautes + Une erreur de synchronisation est
— Une erreur dans le texte chiffré affecte irrécupérable.
le bit correspondant du texte en clair et
le bloc suivant.
-I- Des erreurs de synchronisation de la
taille d ’un bloc sont récupérables. Le
mode C F B à 1 bit peut récupérer après
le rajout ou la perte de bits.
travailler.
La solution est d ’in terca ler les multiples flots de chiffrement. (Ce n’est pas un chiffre
ment multiple, ceci sera abordé dans les paragraphes 15.1 et 15.2). Au lieu d ’utiliser
une seule chaîne en mode C B C , utilisez-en quatre. Les premier, cinquième et un bloc
sur quatre par la suite sont chiffrés en modes C B C avec un IV. Les second, sixième et
un bloc sur quatre par la suite sont chiffrés en modes C B C avec un autre IV , et ainsi
de suite. LTV total est plus long qu’il l’aurait été sans intercalaires.
C’est comme si vous chiffriez quatre messages différents avec la même clef et quatre
différents IV. Ces messages sont tous intercalés.
9.13 Chiffrement par blocs vs chiffrement en continu 225
Cette astuce peut aussi être utilisée pour augmenter la vitesse de matériels de chiffre
ment. Si vous avez trois puces de chiffrement, chacune capable de chiffrer des données à
33 mégabits/seconde, vous pouvez les intercaler pour chiffrer un seul canal de données
à 100 mégabits/seconde.
La figure 9.16 montre trois flots parallèles intercalés en mode C FB . L ’idée peut aussi
marcher en modes C B C et O FB , et avec autant de flots parallèles que désiré. Souvenez-
vous juste que chaque flot a besoin de son propre IV. Il ne doit pas être partagé.
« Les systèmes de chiffrement par blocs agissent sur des données avec une
transformation fixe des grands blocs de données en clair; les systèmes de
chiffrement en continu agissent avec une transformation variant avec le
temps des chiffres en clair individuels. »
Dans le monde réel, les systèmes de chiffrement par blocs sont plus généraux (ils
peuvent être utilisés dans n’importe lequel des quatres modes) et les systèmes de chif
frement en continu sont plus faciles à analyser mathématiquement. Il y a beaucoup
de travail théorique effectué sur l’analyse et la conception des systèmes de. chiffrement
en continu ; la plupart de ces travaux sont effectués en Europe, je ne sais pour quelle
raison. Ils ont été utilisés par les militaires du monde entier depuis l’invention de l’élec
tronique. Cela semble changer dorénavant ; récemment, une grande quantité d’articles
théoriques sur les systèmes de chiffrement par blocs ont été publiés. Il y aura peut-être
que bientôt une théorie sur le modèle des systèmes de chiffrement par blocs aussi riche
que la théorie sur la conception des systèmes de chiffrement en continu.
226 Chapitre 9 Types et modes d’algorithmes
Ceci mis à part, les différences entre ces deux systèmes se trouvent dans les réalisations.
Les systèmes de chiffrement en continu qui ne chiffrent et ne déchiffrent qu’un bit à
la fois ne sont pas vraiment adaptés à des réalisations logicielles. Les systèmes de
chiffrement par blocs sont nettement plus faciles à réaliser en logiciel, car ils évitent
les manipulations de bits qui sont coûteuses en temps de calcul et ils opèrent sur
des données dans des blocs de taille raisonnable. D ’un autre côté, les systèmes de
chiffrement en continu sont mieux adaptés à des réalisations matérielles car ils peuvent
être réalisés de façon très efficace dans du silicone.
Ce sont des considérations importantes. Il semble logique pour un appareil de chiffre
ment d’un canal digital de communications de chiffrer chaque bit quand il arrive. C ’est
ce que l’appareil voit. D ’un autre côté, il semble illogique pour un logiciel de chiffre
ment de chiffrer chaque bit séparément. Il y a des exemples précis où le chiffrement de
chaque bit et de chaque octet est nécessaire dans un système informatique — chiffrer
le lien entre le clavier et le microprocesseur, par exemple — mais généralement le bloc
de chiffrement devrait au moins être de la largeur du bus de données.
Chapitre 10
stupides, des ratés d ’intégration et des idioties aléatoires. (Je recommande fortement
le papier de Ross A n d e r s o n « Pourquoi les cryptosystèmes ont échoué » [45] ; il de
vrait être lu par toute personne évoluant dans ce domaine.) Même si la N SA a admis
que la plupart des échecs de sécurité dans sa zone d ’intérêt sont dus à des échecs de
réalisations, et non pas à des échecs au niveau des algorithmes et des protocoles [1125].
Dans ces exemples, peu importe si la cryptographie était bonne ou pas ; les attaques
victorieuses l’ont complètement surpassée.
- Ils peuvent utiliser un algorithme publié, croyant que les algorithmes publiés ont
été décortiqués par de nombreux cryptographes ; si personne ne l’a encore cassé,
alors il doit être très bon.
- Ils peuvent faire confiance à un fabricant, croyant qu’un fabricant connu a une
réputation à défendre et qu’il ne risquera pas cette réputation en vendant des
équipements ou des programmes avec des algorithmes de mauvaise qualité.
- Ils peuvent écrire leur propre algorithme, croyant que leurs compétences en cryp
tographie n’ont pas leur pareil et qu’ils ne doivent avoir confiance en personne
d’autre qu’eux-même.
Chacune de ces croyances est problématique, mais la première semble être la plus
sensée. Placer votre confiance dans un seul fabricant, consultant ou gouvernement
revient à chercher des ennuis. La plupart des gens qui portent l’étiquette « consultant
en sécurité » (même des firmes célèbres) ne connaissent en général rien au chiffrement.
La plupart des fabricants en sécurité ne sont pas fiables. Les meilleurs cryptographes
au monde travaillent pour la NSA, mais ils ne disent pas tout ce qu’ils savent. Les
intérêts qu’ils poursuivent ne sont pas conformes à ceux des citoyens. Et même si vous
êtes un génie, écrire votre propre algorithme et ensuite l’utiliser sans l’avoir soumis à
l’examen critique des pairs est de l’inconscience pure.
Les algorithmes de ce livre sont publiques. La plupart ont été divulgués dans la littéra
ture publique et ont été cryptanalysés par des experts dans le domaine. Je mentionne
tous les résultats publiés, positifs et négatifs. Je n’ai pas accès aux cryptanalysés en
treprises par la myriade d ’organisations de sécurité militaire de par le monde (qui sont
probablement meilleures que les institutions académiques — elles le font depuis plus
longtemps et elles sont mieux financées), donc il est possible que ces algorithmes soient
plus faciles à casser qu’ils ne le paraissent. Même ainsi, il est bien plus probable qu’ils
soient plus sûrs qu’un algorithme conçu et réalisé en secret par une société spécialisée
en sécurité.
10.1 Choix d’un algorithme 229
Le point faible de ce raisonnement est que nous ne connaissons pas les capacités des
nombreuses organisations militaires de cryptanalyse.
Quels algorithmes la NSA peut-elle casser? Pour la majorité d’entre nous, il est impos
sible de le dire. Si vous êtes arrêté en possession d’un ordinateur chiffré avec DES, il
est peu probable que le FB I produise le contenu déchiffré comme pièce à conviction ; le
fait qu’ils peuvent casser l’algorithme est souvent un secret bien plus important que les
informations qui sont alors déchiffrées. Pendant la deuxième guerre mondiale, il était
interdit aux Alliés d ’utiliser une information déchiffrée du trafic Ultra des Allemands, à
moins qu’ils aient pu plausiblement obtenir l’information autrement. La seule façon de
pousser la NSA à reconnaître sa capacité à casser un algorithme donné est de chiffrer
une information tellement importante qu’ils ne pourront pas faire autrement que de la
divulguer publiquement. Ou, mieux encore, créez une blague très drôle et envoyez-la
par courrier électronique chiffré à des correspondants ambigus dans des pays suspects.
Les employés de la NSA sont aussi des hommes; je doute qu’il puisse garder une si
bonne blague secrète.
Une bonne hypothèse de travail est que la N SA peut lire chaque message qu’elle choisit,
mais qu’elle ne peut pas lire tous les messages qu’elle choisit. La NSA est limitée par
ses ressources et doit faire un choix dans ses cibles. Une autre bonne hypothèse est
qu’elle préfère casser autre chose que des codes ; cette préférence est si forte qu’elle se
résoudra à casser les codes seulement quand elle voudra préserver le secret qu’elle a lu
le message.
Dans tous les cas, la meilleure chose que la plupart d ’entre-nous peuvent faire est de
choisir parmi des algorithmes publiques qui ont raisonnablement résisté à une obser
vation publique et à des cryptanalysés.
- Laissez passer un bit de la clef de temps à autre caché dans le texte chiffré ;
- Ramenez la clef effective à quelque chose dans la gamme des 30 bits. Par exemple,
tandis qu’un algorithme pourrait accepter une clef de 100 bits, la plupart de ces
clefs peuvent être équivalentes ;
La NSA reçoit une copie du code source, mais les détails de l’algorithme restent cachés
pour les autres. Il est évident que personne ne fait de publicité quant à ces faiblesses,
230 Chapitre 10 Utilisation des algorithmes
mais faites attention si vous achetez un produit de chiffrement américain qui a été
approuvé pour Pexport.
T ab . 1 0 .1 - C lasses d ’a l g o r it h m e s
aussi simple : seules les deux extrémités d ’une ligne doivent partager une clef et elles
peuvent changer leur clef indépendamment du reste du réseau.
Imaginez-vous une ligne de communication synchrone, chiffrée en mode C FB à 1 bit.
Après l’initialisation, cette ligne peut fonctionner indéfiniment, récupérant automati
quement des erreurs de bit ou de synchronisation. La ligne chiffre dès que des messages
sont envoyés à partir d ’une extrémité vers l’autre ; sinon, elle chiffre et déchiffre des
données aléatoires. Estelle n’a aucune idée de la date des messages envoyés ou non;
elle n’a pas d ’idée du début et de la fin des messages. Tout ce qu’elle voit est un flux
continu de bits qui ont l’air aléatoires.
Si la ligne de communication est asynchrone, le même mode C FB à 1 bit peut être
utilisé. La différence est que l’adversaire peut obtenir de l’information sur le taux de
la transmission. Si cette information doit rester secrète, prenez des précautions en
envoyant des messages factices entre les communications utiles.
Le plus gros défaut du chiffrement lien par lien est que chaque lien physique du réseau
doit être chiffré : laisser un seul lien non chiffré compromet la sécurité de tout le réseau.
Si le réseau est grand, le coût peut rapidement devenir prohibitif pour ce type de
chiffrement.
De plus, tous les nœuds du réseau doivent être protégés, car ils véhiculent des données
non chiffrées. Si tous les utilisateurs du réseau se font confiance mutuellement et si tous
les nœuds sont en lieu sûr, cela peut être acceptable. C ’est toutefois improbable. Même
dans une société, l’information doit être gardée secrète au sein d’un département. Si
le réseau se trompe de chemin pour acheminer une information, tout le monde peut la
lire. Le tableau 10.2 résume les avantages et les inconvénients du chiffrement lien par
lien.
Avantages
Opération plus simple, puisqu’elle est transparente pour l’utilisateur. Tout est chiffré
avant d ’être envoyé sur le lien.
Un seul jeu de clefs par lien est nécessaire.
Fournit une sécurité du flot de traffic, puisque chaque information de routage est
chiffrée.
Le chiffrement est en ligne.
Inconvénients
Les données sont vulnérables dans les nœuds intermédiaires.
Avantages
Niveau de secret plus élevé.
Inconvénients
Requiert un système de gestion des clefs plus complexe.
L’analyse de trafic est possible, puisque l’information de routage n’est pas chiffrée.
Le chiffrement est hors-ligne.
rendre sûr un réseau. Le chiffrement de tout lien physique rend toute analyse des
informations de routage impossible, tandis que le chiffrement de bout en bout réduit
le danger des données non chiffrées aux différents nœuds du réseau. Les gestions des
clefs des deux schémas peuvent être complètement séparées : les gestionnaires de réseau
peuvent s’occuper du chiffrement au niveau physique, tandis que les individus peuvent
avoir la responsabilité du chiffrement de bout en bout.
Tab. 10.4 Comparaison des chiffrements lien par lien et de bout en bout
C h if f r e m e n t l ie n par l ie n C h if f r e m e n t de bo u t en bout
Rôle de l’utilisateur
Effectué par l’hôte envoyeur. Effectué par le processus d’envoi.
Transparent pour l’utilisateur. L’utilisateur effectue le chiffrement.
L ’hôte maintient le chiffrement. L’utilisateur doit trouver l’algorithme.
Un service pour tous les utilisateurs. L’utilisateur sélectionne le chiffrement.
Peut être réalisé en matériel. Plus facilement effectué dans le logiciel.
Tous ou aucun messages chiffrés. L’utilisateur choisit de chiffrer ou pas,
pour chaque message.
Exigences de la réalisation
Nécessite une clef par paire d’hôtes. Nécessite une clef par paire d’utilisa
Nécessite un matériel ou un logiciel de teurs.
chiffrement à chaque hôte. Nécessite un matériel ou un logiciel de
Effectue l’authentification des nœuds. chiffrement à chaque nœud.
Effectue l’authentification des utilisa
teurs.
10. Jf Chiffrement des données à des fins de stockage 2S5
- Les données peuvent aussi exister sous forme de texte en clair, soit sur un autre
disque, dans un autre système informatique ou sur papier. Il y a plus d’occasions
pour des cryptanalystes de monter une attaque à texte en clair connu.
- Dans les applications de bases de données, des parcelles de données peuvent être
plus petites que la taille de blocs de la plupart des algorithmes. Cela donnera un
texte chiffré qui peut être largement plus grand que le texte en clair.
- La gestion des clefs est nettement plus compliquée, car différentes personnes
doivent accéder à différents fichiers, différentes portions d’un même fichier, etc.
Si les fichiers chiffrés ne sont pas structurés en enregistrements et champs, comme dans
les fichiers de texte, l’accès est facile : tout le fichier est déchiffré avant usage. Si les
fichiers chiffrés sont des fichiers d’une base de données, la solution est problématique.
Déchiffrer toute la base de données pour accéder à un seul enregistrement est inefficace,
2S6 Chapitre 10 Utilisation des algorithmes
mais chiffrer les enregistrements indépendamment peut être sujet à une attaque du type
des blocs rejoués.
De plus, vous devez être sûr que le fichier non chiffré est effacé après le chiffrement
(voir § 10.9). Pour plus de détails et un autre aperçu, consultez [427, 571].
Pour la clef maîtresse, générez un bloc pseudo-aléatoire aussi grand qu’un secteur.
(Vous pouvez le faire en utilisant un algorithme en mode O F B par exemple.) Pour
chiffrer tout secteur, combinez d ’abord par ou exclusif avec ce bloc pseudo-aléatoire,
puis chiffrez normalement avec un algorithme de chiffrement par blocs en mode ECB.
Cela s’appelle E C B + O F B (voir § 15.4).
Comme C B C et C FB sont des modes de récupération d ’erreurs, vous pouvez utilisez
tous les blocs du secteur sauf les premiers et seconds pour générer un IV pour ce
secteur. Par exemple, l’IV du secteur 3 001 peut être le hachage de toutes les données du
secteur, mis à part les premiers 128 bits. Après avoir généré l’IV , chiffrez normalement
en mode C B C . Pour déchiffrer le secteur, vous utilisez les 64 bits du second bloc
du secteur en tant qu’IV puis déchiffrez le reste du secteur. Ensuite, en utilisant les
données déchiffrées, vous régénérez l’IV et déchiffrez les premiers 128 bits.
Vous pouvez utiliser un algorithme de chiffrement par blocs avec une taille de bloc
assez grande pour pouvoir chiffrer tout le secteur d’un coup. C R A B (voir § 14.6) en
est un exemple.
C h if f r e m e n t a u n iv e a u d e s f ic h ie r s C h if f r e m e n t au n iv e a u du d is q u e
Bénéfices
Facilité de réalisation et d’utilisation. Les fichiers temporaires, de travail, et
Flexibilité. autres, peuvent être gardés dans le
Baisse de performance très faible. disque sûr.
Les utilisateurs peuvent transférer des fi- Il est plus difficile d ’oublier de rechiffrer
chiers entre différentes machines sans quelque chose avec ce genre de système,
problèmes.
Les utilisateurs peuvent sauvegarder des
fichiers sans problèmes.
Questions de sécurité
Fuite possible par des programmes non- Beaucoup de choses peuvent mal se pas
sécurisé (un programme peut écrire un ser avec un disque ou un programme
fichier sur le disque pour un stockage résident en mémoire.
temporaire, par exemple). De mauvaises conceptions permettront
Une mauvaise conception peut toujours des attaques à texte en clair, voire à
rechiffrer la même clef pour le même texte chiffré, choisi.
mot de passe. Si tout le système est verrouillé avec un
mot de passe, la perte de ce mot de
passe fait que l’attaquant peut tout ob
tenir.
Un ensemble plus limité d ’algorithmes
de chiffrement peut raisonnablement
être utilisé pour ce genre d ’application.
Par exemple, des algorithmes de chif
frement en continu en mode O F B ne
marcheraient pas.
Problèmes d’ utilisation
L’utilisateur doit savoir ce qu’il doit II y aura une baisse de performance.
faire. Le disque peut réagir de manière inat-
II peut y avoir différents mots de passe tendu
pour différents fichiers. avec W i n d o w s , l’émulation OS2 DOS,
Le chiffrement manuel de fichiers sélec- des gestionnaires de disque, etc...
tionnés
est le seul contrôle d ’accès.
graphe 24.1.
Le rayonnement électromagnétique peut parfois révéler ce qui se passe dans un équipe
ment électronique. Des boîtes dédiées au chiffrement peuvent être blindées de manière
à ne pas laisser s’échapper d’information. Les ordinateurs multi-usage traditionnels
peuvent être blindés également, mais c’est nettement plus complexe à réaliser. Les mi
litaires américains appellent ceci T E M P E S T ; c ’est un sujet qui dépasse largement le
cadre de ce livre.
La raison finale pour la prédominance des réalisations matérielles est la facilité d’ins
tallation. La plupart des applications de chiffrement n’impliquent pas des ordinateurs
classiques. Les gens peuvent vouloir chiffrer leur conversations téléphoniques, leurs en
vois de fax, ou leurs liens de données. Il est moins cher de mettre du matériel dédié
au chiffrement dans les téléphones, les fax, et les modems que de mettre le chiffrement
dans un microprocesseur et un logiciel.
Même quand les données chiffrées viennent d’un ordinateur, il est plus simple d’installer
un périphérique de chiffrement que de modifier le logiciel système de l’ordinateur. Le
chiffrement doit être invisible et ne doit pas gêner l’utilisateur. Le seul moyen de réaliser
cela en logiciel est de réaliser le chiffrement dans les couches profondes du système de
conduite. Ce n’est pas simple. De plus, même un néophyte de l’informatique peut
brancher une boîte de chiffrement entre son ordinateur et son modem externe.
Aujourd’hui, les trois types principaux de dispositifs matériels de chiffrement sur le
marché sont : des modules de chiffrement autonomes (qui effectuent des fonctions telles
que la vérification de mots de passe et la gestion des clefs pour les banques), des boîtes
dédiées au chiffrement pour les liens de communications et les cartes que l’on enfiche
dans les ordinateurs personnels.
Certaines boîtes de chiffrement sont conçues pour des types spéciaux de liens de com
munication, comme les boîtes de chiffrement pour liens T -1 qui sont conçues pour ne
pas chiffrer les bits de synchronisation. Il existe différentes boîtes pour les lignes de
communications synchrones et asynchrones. De nouvelles boîtes semblent accepter de
plus grandes vitesses (en bits par seconde) et sont plus versatiles.
Malgré cela, nombre de ces périphériques occasionnent des incompatibilités. Les ache
teurs doivent en être avertis et doivent bien connaître leurs besoins particuliers, sinon
ils se retrouvent propriétaires d ’un équipement de chiffrement qui n’arrive pas à effec
tuer la tâche demandée. Faites attention aux restrictions quant au type de matériel,
au système de conduite, aux programmes d ’application, au réseau, etc.
Les cartes chiffreuses P C chiffrent en général tout ce qui est écrit sur le disque dur et
peuvent également être configurées pour chiffrer tout ce qui est écrit sur des disquettes
ou sur les ports séries. Ces cartes ne sont pas blindées contre les rayonnements électro
magnétiques ou les interférences de signaux, puisque cela n’a pas de sens de protéger
les cartes si l’ordinateur ne l’est pas.
De plus en plus de sociétés commencent à mettre du matériel de chiffrement dans leurs
équipements de communication. Des téléphones sûrs, des fax sûrs et des modems sûrs
sont tous disponibles.
La gestion interne des clefs de ces périphériques est en général sûre, bien qu’il existe
autant de schémas que de vendeurs d’équipement. Certains schémas sont mieux adaptés
à une situation qu’à une autre, et les acheteurs doivent savoir d’une part quel type de
gestion des clefs est incorporé dans la boîte de chiffrement et d’autre part ce qu’ils
doivent fournir par eux-mêmes.
240 Chapitre 10 Utilisation des algorithmes
Chiffrement logiciel
Tout algorithme de chiffrement peut être réalisé en logiciel. Les désavantages sont la
vitesse, le coût et la facilité de modification (ou de manipulation). Les avantages sont
la flexibilité et la portabilité, la facilité d ’utilisation et la facilité de mise à jour. Les
algorithmes écrits en C à la fin de cet ouvrage peuvent être réalisés, modulo des petites
modifications, sur n’importe quel ordinateur. Ils peuvent être incorporés dans de plus
grandes applications comme les programmes de communications ou les traitements de
texte.
Les logiciels de chiffrement sont populaires et disponibles pour tous les systèmes de
conduites majeurs. Ils sont destinés à protéger des fichiers individuels : l’utilisateur
doit généralement chiffrer et déchiffrer des fichiers spécifiques. Il est important que la
gestion des clefs soit sûre : les clefs ne devraient pas être stockées sur le disque n’importe
où (ou même écrites dans une zone mémoire qui peut être recopiée sur le disque par la
gestion de mémoire virtuelle). Les clefs et les fichiers non chiffrés doivent être effacés
après chiffrement. Nombre de programmes sont négligents à ce propos et l’utilisateur
doit choisir prudemment.
Bien sûr, Martin peut toujours remplacer le logiciel de chiffrement par autre chose. Mais
pour la plupart des utilisateurs, ce n’est pas un problème. Si Martin peut s’introduire
dans nos bureaux et modifier nos programmes de chiffrement, il peut aussi installer une
caméra cachée dans le mur, mettre le téléphone sur écoute, et un détecteur T E M P E S T
dans la rue. Si Martin est aussi puissant, l’utilisateur a alors perdu le jeu avant même
qu’il n’ait commencé.
- Essayer de compresser le fichier. Si le fichier est du texte chiffré (et que l’algo
rithme est bon), alors la probabilité que le fichier puisse être compressé à un
degré appréciable par une compression d ’usage général est faible. (Par « à un
degré appréciable », j ’entends plus de 1 ou 2 pourcents.) Si c’est quelque chose
d’autre (une image binaire ou un fichier de données binaires, par exemple) cela
peut probablement être compressé.
Tout fichier qui ne peut être compressé et qui ne l’est pas déjà est probablement du
texte chiffré. (Bien entendu, il est toujours possible de faire un texte chiffré spécifique
qui soit compressible.) Identifier l’algorithme est beaucoup plus dur. Si l’algorithme
est bon, vous ne pourrez pas. S’il a quelques petites altérations, il peut être possible
de reconnaître ces altérations dans le fichier. Néanmoins, les altérations devront être
assez significatives ou le fichier assez gros afin que cela puisse marcher.
242 Chapitre 10 Utilisation des algorithmes
Ad © K = C
C@K = M
Si la police secrète les force à leur livrer leur clef, ils ne livrent pas K , mais à la place :
K' = C© £
C© K’ = £
Comme ce sont des masques jetables et que K est totalement aléatoire, il n ’y a pas de
moyen de prouver que K ' n’était pas la bonne clef. Pour rendre les choses encore plus
convaincantes, Alice et Bernard devraient concocter des messages leurres moyennement
compromettants pour les substituer aux messages réels vraiment compromettants. Une
paire d ’espions israéliens l’ont fait une fois.
Alice pourrait prendre Ad et le chiffrer avec son algorithme préféré et sa clef K pour
obtenir C. Puis elle prend C et le combine par ou exclusif avec un bout de texte en clair
mondain (« Ici Pans » par exemple) pour obtenir K '. Elle stocke C et la combinaison
par ou exclusif sur son disque dur. Maintenant, si la police secrète l’interroge, elle
peut expliquer qu’elle est une cryptographe amateur et que K ' est simplement un
masque jetable pour C. La police pourrait suspecter quelque chose, mais à moins qu’elle
connaisse K , elle ne peut pas prouver que l’explication d ’Alice est fausse.
Une autre méthode consiste à chiffrer Ad avec un algorithme à clef secrète K , et £ avec
K '. Intercalez les bits (ou octets) des textes chiffrés pour faire le texte chiffré final. Si
la police secrète demande la clef, Alice lui donne K ' et dit que les bits (ou octets)
alternés sont des bruits aléatoires pour décourager toute cryptanalyse. Le fait est que
cette explication est si peu plausible que la police secrète ne la croira probablement
pas (surtout maintenant qu’elle est suggérée dans ce livre).
10.9 Destruction d’information 243
Une meilleure manière est qu’Alice crée un message leurre, £ , tel que A4 et £ mis bout
à bout et compressés soient à peu près de la taille de £ . Appelez cet enchaînement A i'.
Alice chiffre alors A i' avec tout algorithme qu’elle partage avec Bernard pour obtenir
C. Puis elle envoie C à Bernard. Bernard déchiffre C pour obtenir A i', puis A i et £.
Ensuite, ils calculent tous les deux
C® L — K'
Ce K ' devient le masque jetable leurre qu’ils utiliseront si la police secrète fait irruption.
Alice doit transmettre £ afin que son alibi et celui de Bernard coïncident.
Une autre méthode est qu’Alice prenne un message banal et le passe par un code
correcteur d’erreur. Puis elle peut introduire des erreurs qui correspondent au message
secret chiffré. A la réception, Bernard peut extraire les erreurs pour reconstruire le
message secret et le déchiffrer. Il peut aussi utiliser le code correcteur d’erreur pour
retrouver le message banal. Alice et Bernard auront du mal à expliquer à la police
secrète pourquoi ils obtiennent constamment un taux d ’erreur de bits de 30 pourcents
sur un réseau pourtant sans bruit, mais dans certaines circonstances, ceci peut marcher.
Enfin, Alice et Bernard peuvent utiliser des canaux subliminaux dans leurs algorithmes
de signature digitale (voir § 4.2 et § 23.3). C ’est indétectable, ça marche très bien mais
a le défaut de n’autoriser qu’environ 20 caractères de texte subliminal par l’envoi de
message banal signé. Ce n’est bon que pour l’envoi de clefs.
« La réécriture est le procédé par lequel des données non secrètes sont
écrites dans des zones de stockage qui contenaient auparavant des données
sensibles ... Pour purger le ... support de stockage, le D o D (le Département
de la Défense américaine) requiert la réécriture avec un motif, puis son
complément et finalement un autre motif ; par exemple réécrivez première
ment avec 0011 0101, suivi de 1100 1010 et ensuite avec 1001 0111. Le
Chapitre 10 Utilisation des algorithmes
Vous aurez peut-être à effacer des fichiers, voire des disques entiers. Vous devrez aussi
effacer tout l’espace inutilisé de votre disque dur.
La plupart des logiciels qui prétendent réaliser le standard du D oD réécrivent trois fois :
une fois avec uniquement des 1, ensuite avec uniquement des 0 et finalement avec un
motif répétitif de 1-0. Etant donné mon niveau général de paranoïa, je recommande de
réécrire un fichier détruit sept fois : la première fois avec uniquement des 1, la seconde
avec uniquement des 0 et les 5 autres fois avec un générateur de séquence pseudo
aléatoires cryptographiquement sûr. Des développements récents au N IST avec des
microscopes à effet tunnel suggèrent que même cela pourrait ne pas être suffisant.
Honnêtement, si vos données ont tant de valeur, considérez qu’il est « impossible » de
les effacer complètement d ’un support magnétique. Brûlez ou déchiquetez le support ;
il est moins onéreux d’acheter un nouveau support que de perdre vos secrets.
Troisième partie
Algorithmes cryptographiques
Chapitre 11
Rudiments mathématiques
Entropie et incertitude
La théorie de l’information définit la q u a n t i t é d ’ i n f o r m a t i o n d ’un message comme
le nombre minimal de bits nécessaires pour coder toutes les significations possibles de
ce message. Par exemple, le champ « jour de la semaine » dans une base de données
ne contient pas plus de 3 bits d’information, parce que l’information peut être codée
avec 3 bits :
000 = dimanche
001 = lundi
010 = mardi
011 = mercredi
100 = jeudi
101 = vendredi
110 = samedi
Si cette information était représentée par les chaînes de caractères ASCII correspon
dantes, cela prendrait plus de place mémoire mais cela ne contiendrait pas plus d’infor
mation. De façon similaire, le champs « sexe » de la base de données contient seulement
1 bit d’information, bien qu’il donne l’impression de devoir être stocké comme l’une
des deux chaînes de 5 caractères ASCII « homme » ou « femme ».
Formellement, la quantité d’information dans un message M est mesurée par
l’e n t r o p i e d’un message, dénotée H (M ). L ’entropie d’un message indiquant le sexe est
de 1 bit ; l’entropie d’un message indiquant le jour de la semaine est un tout petit peu
moins que 3 bits. En général, l’entropie d ’un message est log2 n, où n est le nombre de
significations possibles. Cela suppose que toutes les significations sont équiprobables.
S48 Chapitre 11 Rudiments mathématiques
Taux du langage
Pour un langage donné, le t a u x d u l a n g a g e est
r = H ( M ) /N
où N est la longueur des messages. Le taux de l’anglais courant prend plusieurs valeurs
entre 1 bit et 1,5 bit par lettre, pour des grandes valeurs de N . Dans son livre [1439],
S h a n n o n annonce que l’entropie dépend de la longueur du texte. Plus précisément,
il indique un taux de 2,3 bit par lettre pour des bribes de 8 lettres, mais le taux
tombe entre 1,3 et 1,5 bits par lettre pour des bribes de 16 lettres. Thomas C o v e r a
trouvé, avec des techniques de théorie des jeux, une entropie de 1,3 bits par lettre1.
Le t a u x a b s o l u d’un langage est le nombre maximal de bits qui peuvent être codés
par chaque caractère, en faisant l’hypothèse que toutes les séquences de caractères sont
équiprobables. S’il y a L caractères dans le langage, le taux absolu est :
R = log2 L
D — R —r
Étant donné que le taux de l’anglais est de 1,3, la redondance est de 3,5 bits par lettre2.
Cela veut dire que chaque caractère apporte 3,5 bits d ’information redondante.
Un message ASCII qui n’est rien d ’autre que de l’anglais écrit n’a que 1,2 bit d ’infor
mation par 8 bits du message. Cela veut dire qu’il y a alors 6,8 bits de redondance, ce
qui donne une redondance globale de 0,85 bit d ’information par bit de texte ASCII et
une entropie de 0,15 bit d ’information par bit de texte ASCII. Le même message codé
par le système B A U D O T , à 5 bits par caractère, a une redondance de 0,76 bit et une
entropie de 0,34 bit par bit de texte B A U D O T . La prise en compte des blancs, de la
ponctuation, des nombres et de la mise en page modifierait ces résultats.
en clair A4, ou les deux. Toutefois, ils peuvent se contenter de certaines informations
probabilistes concernant A4 si c’est du son numérisé, si c ’est un texte en allemand, si
ce sont des données pour un tableur, ou quelque chose d ’autre.
Pour la plupart des cryptanalysés du monde réel, les cryptanalystes ont quelques in
formations probabilistes concernant A4 avant de commencer. Ils connaissent probable- .
ment le langage du texte en clair. Ce langage a une certaine redondance associée. Si
c’est un message destiné à Bernard, il commence probablement par « C h e r B o b , ».
Certainement, « C h e r B o b , » est plus probable que « e 8 T & g [,m ». Le but de la cryp
tanalyse est, par analyse, de modifier les probabilités associées avec tous les textes en
clair possibles. Finalement un texte en clair considéré comme certain (ou au moins,
très probable) émergera du paquet des textes en clair possibles.
Il existe quelque chose que l’on peut appeler cryptosystème à c o n f i d e n t i a l i t é p a r
f a i t e . C ’est un cryptosystème dans lequel le texte chiffré ne fournit pas la moindre
information concernant le texte en clair (excepté peut-être sa longueur). S h a n n o n
postula que ce n’était possible que si le nombre de clefs possibles est au moins aussi
grand que le nombre de messages possibles. En d ’autres termes, la clef doit être au
moins aussi longue que le message lui-même et aucune clef ne peut être réutilisée. En
d’autres termes encore, le masque jetable (voir § 1.5) est le seul cryptosystème qui
assure une confidentialité parfaite.
La confidentialité parfaite mise à part, le texte chiffré donne quelques informations sur
le texte en clair correspondant. C ’est inévitable. Un bon algorithme cryptographique
minimisera cette information ; un bon cryptanalyste exploite cette information pour
retrouver le texte en clair.
Les cryptanalystes utilisent la redondance naturelle du langage pour réduire le nombre
possible de textes en clair. Plus le langage est redondant, plus simple il est à cryp
tanalyser. C ’est la raison pour laquelle de nombreuses réalisations cryptographiques
concrètes utilisent avant de chiffrer un programme de compression pour réduire la
taille du texte. La compression réduit la redondance du message et aussi le travail à
fournir pour chiffrer et déchiffrer.
L’entropie d’un cryptosystème est une mesure de la taille de l’ensemble des clefs. Elle
est approchée par le logarithme en base 2 du nombre de clefs :
H (K ) = log2(nombre de clefs)
Distance d’unicité
Pour un message de longueur n, le nombre de clefs différentes qui traduiront un message
chiffré en un texte en clair intelligible dans un même language est donné par la formule
suivante [714, 102] :
2H ( K ) ~ n D _ ^
des textes chiffrés plus longs que cette valeur sont raisonnablement certains de n’avoir
qu’un seul déchiffrement plausible. Des textes chiffrés significativement plus courts
que cela ont des chances d’avoir plusieurs déchiffrements également valables et donc
augmentent la sécurité, car il est difficile à l’attaquant de choisir le bon déchiffrement.
Pour la plupart des cryptosystèmes à clef secrète, la distance d’unicité est définie comme
l’entropie du cryptosystème divisée par la redondance du langage :
U = H (K)/D .
La distance d’unicité n’est pas une mesure de la quantité de texte chiffré qu’il faut pour
la cryptanalyse mais bien de la quantité de texte chiffré nécessaire pour qu’il n’y ait
qu’une solution raisonnable à la cryptanalyse. Un cryptosystème peut être inviolable
par calcul même si théoriquement il est possible de le casser avec une faible quantité de
texte chiffré3. La distance d ’unicité est inversement proportionnelle à la redondance.
Quand la redondance approche de zéro, même un chiffrement trivial peut être inviolable
par une attaque à texte chiffré seulement.
S h a n n o n définit un cryptosystème dont la distance d ’unicité est infinie comme un
système à c o n f i d e n t i a l i t é i d é a l e . Remarquez qu’un cryptosystème idéal n’est pas
forcément un cryptosystème parfait, bien qu’un cryptosystème parfait soit nécessai
rement un cryptosystème idéal. Si un cryptosystème offre une confidentialité idéale,
même une cryptanalyse réussie laissera une incertitude quant à savoir si le texte dé
codé est le bon texte.
Confusion et diffusion
Les deux techniques de base pour gommer les redondances dans un texte en clair sont
selon S h a n n o n la confusion et la diffusion [1438].
La c o n f u s i o n gomme les relations entre le texte en clair et le texte chiffré. Elle évite
l’analyse du texte chiffré par recherche de redondances et de motifs statistiques. Le
moyen le plus simple de réaliser cela est la substitution. Un chiffre à substitution
simple, tel le système à décalage de Jules César, est un système dans lequel chaque
lettre identique du texte en clair est remplacée par une même autre lettre dans le
texte chiffré. Les chiffres à substitution modernes sont plus compliqués : un long bloc
de texte en clair est remplacé par un autre bloc de texte chiffré et le mécanisme de
substitution change avec chaque bit du texte en clair. Ce type de substitution n’est
pas nécessairement suffisant ; le système allemand E N IG M A est un algorithme de
substitution complexe qui fut cassé durant la Seconde Guerre mondiale.
La d i f f u s i o n disperse la redondance du texte en clair en la répartissant dans le texte
chiffré. Un cryptanalyste qui recherche ces redondances aura plus de difficultés à les
trouver. Le moyen le plus simple de provoquer la diffusion est la transposition (ap
pelée aussi p e r m u t a t i o n ) . Un chiffre à transposition simple, telle la transposition
en colonnes, réarrange simplement les lettres du texte en clair. Les chiffres modernes
réalisent ce type de permutation, mais ils emploient d’autres formes de diffusion qui
peuvent diffuser les parties du message à travers la totalité du message.
Les chiffres en continu se basent sur la confusion seulement. Les algorithmes par blocs
utilisent à la fois la confusion et la diffusion. En règle générale, la diffusion seule est
facile à casser (bien que la double transposition résiste mieux que beaucoup d’autres
méthodes faisables avec un papier et un crayon).
4. Il y a d ’ autres mesures de la com plexité : le nom bre de bits aléatoires, le débit de com m unications,
la quantité de données, etc.
11.2 Théorie de la complexité 253
superpolynomiale en temps mais qu’il n’est pas encore possible de prouver qu’on ne
pourra jamais découvrir un algorithme de cassage polynomial en temps. Les avancées
en théorie de la complexité permettront peut-être un jour de concevoir des chiffres
pour lesquels l’existence d’algorithmes de cassage polynomiaux en temps pourra être
écartée mathématiquement avec certitude.
Quand n croît, la complexité en temps d’un algorithme peut faire une énorme différence
quant à l’applicabilité de l’algorithme. Le tableau 11.2 montre les temps d ’exécution
de différentes classes d’algorithmes pour lesquels n vaut un million. Le tableau passe
sous silence les constantes et montre pourquoi il est raisonnable de les ignorer.
Complexité de problèmes
La théorie de la complexité classe aussi la complexité inhérente des problèmes, et
pas seulement la complexité d ’algorithmes particuliers utiüsés pour résoudre des pro
blèmes5. La théorie détermine les temps et espace minimaux nécessaires pour résoudre
l’instance la plus difficile du problème sur un ordinateur théorique connu sous le nom
de m a c h i n e d e T u r i n g . Il s’agit d ’une machine à états finis avec une mémoire en
5. Une excellente introduction du sujet est donnée dans [603, 214, 1236] ; voyez également [1102,
31, 741],
254 Chapitre 11 Rudiments mathématiques
écriture et en lecture sous la forme d ’un ruban infini. Il s’avère que la machine de
Turing est un modèle réaliste du calcul.
Les problèmes qui peuvent être résolus avec des algorithmes polynomiaux en temps
sont appelés s o l u b l e s , parce qu’ils peuvent généralement être résolus en un temps
raisonnable pour des entrées de taille raisonnable6. Les problèmes qui ne peuvent
pas être résolus en temps polynomial sont appelés n o n s o l u b l e s , parce que calculer
leur solution devient rapidement impossible. Les problèmes non solubles sont parfois
appelés simplement d i f f i c i l e s . Ils le sont. Les problèmes qui peuvent être résolus par
des algorithmes exponentiels ou superpolynomiaux sont non solubles par calcul, même
pour des valeurs relativement petites de n.
Il y a pire. Alan T u r i n g a prouvé que certains problèmes étaient i n d é c i d a b l e s . Il
est impossible de concevoir un algorithme pour les résoudre, et certainement pas un
algorithme polynomial.
Les problèmes peuvent être rangés dans des classes de complexité qui dépendent de
la complexité de leurs solutions. La figure 11.1 montre les classes de complexité les
plus importantes et leurs liens présumés (malheureusement il n’y a pas beaucoup de
preuves mathématiques à ce propos).
F ig . 1 1 .1 - Classes de complexité
Tout en bas, la classe P contient tous les problèmes qui peuvent être résolus en temps
polynomial. La classe N P contient tous les problèmes qui peuvent être résolus en
temps polynomial sur une machine de Turing non déterministe. C’est une variante de
la machine de Turing normale qui devine les solutions. La machine devine une solution
d ’un problème— soit en faisant par chance une bonne hypothèse, soit en essayant toutes
les possibilités en parallèle— et vérifie son hypothèse en temps polynomial.
Problèmes N P —complets
Michael G a r e y et David J o h n s o n ont rassemblé une liste de plus de 300 problèmes
N P —complets [603]. En voici seulement quelques-uns:
Congruences
Vous avez tous appris l’arithmétique modulo n 9 à l’école ; cela s’appelait Y arithmé
tique de l’horloge. Rappelez-vous les problèmes tels que:
(1 0 + 1 3 ) mod 12 = 11.
On peut ainsi, par exemple, calculer des exponentielles en arithmétique modulo n sans
engendrer des résultats intermédiaires démesurés.
Elever un nombre à une puissance entière modulo n,
ax mod n
se fait par une série de multiplications et de divisions, mais il existe des techniques pour
effectuer cela efficacement. Une de ces techniques consiste à minimiser le nombre de
multiplications modulo n ; une autre consiste à optimiser le calcul de la multiplication
modulo n. Comme l’arithmétique modulo n est distributive, il est plus efficace d ’entre
lacer les multiplications avec des réductions modulo n à chaque étape intermédiaire.
Pour les exemples qui suivent, cela peut ne pas sembler d ’une grande utilité, mais pour
des nombres de 200 bits c ’est essentiel.
Par exemple, si vous voulez calculer a8 mod n, n’utilisez pas l’approche simpliste qui
consiste à effectuer 7 multiplications suivies d ’une coûteuse réduction modulo n finale :
( a x a x a x a x a x a x a x a ) mod n.
Il est plus avantageux d ’effectuer 3 multiplications plus petites ainsi que 3 réductions
modulo n également plus petites :
Calculer ax mod n quand x n ’est pas une puissance de 2 n’est qu’un tout petit peu
plus difficile. Illustrons cela pour x — 25. La première étape consiste à représenter x en
notation binaire (c’est-à-dire, comme une somme de puissances de 2). La représentation
binaire de 25 est 11001 et donc 25 = 24 + 23 + 2°. Ensuite, quelques transformations
élémentaires donnent :
a25 mod n
= (g x a8 x a 16) mod n
= (a x ((a2)2)2 x (((a 2)2)2)2) mod n
= ((((a 2 x a)2)2)2 x a) mod n
Cette technique de calcul s’appelle la so m m a tion en chaîne [864]. Elle utilise une
suite d’additions simple et évidente qui est basée sur la représentation binaire. Cela
peut être codée en C par la fonction suivante :
unsigned long s;
s = 1;
while(u) -[
if(x&l) /* x est-il impair ? */
s = (s*a)%n;
x»=l;
a = (a*a)%n;
}
return(s);
}
if(x==l) return(a°/n) ;
if(l~(a&l)) {
tmp = exp_rapide(a,x»l,n) ;
return((tmp*tmp)%n);
>
else {
tmp = exp_rapide(a, (x-l)»l,n) ;
tmp = (tmp*tmp)%n;
tmp = (tmp*a)%n;
return(tmp);
>
}
10. La m éthode de M o n t g o m e r y peut aussi tirer avantage des petites puissances en utilisant ce qui
s’appelle de l ’arithm étique m ixte.
260 Chapitre 11 Rudiments mathématiques
Nombres premiers
Un nombre premier est un nombre entier, strictement plus grand que 1, dont les seuls
facteurs sont 1 et lui-même : aucun autre nombre ne le divise exactement. Le nombre
2 est un nombre premier, de même que: 73, 2 521, 2 365 3 4 7 7 3 4 3 3 9 , et 2 756839 — 1. Un
nombre qui n’est pas premier est dit composé. Il y a une infinité de nombres premiers.
En cryptographie, on utilise souvent de très grands nombres premiers (de 512 bits ou
plus).
Evengelos K r a n a k i s est l’auteur d ’un excellent livre sur la théorie des nombres, les
nombres premiers, et leur application en cryptographie [896]. Paulo R lB E N B O lM a écrit
deux excellents ouvrages de référence sur les nombres premiers en général [1318, 1319].
pgcd(a,n) = 1.
Les nombres 15 et 28 sont premiers entres eux ainsi que 13 et 500, tandis que 15 et
27 ne le sont pas (3 est un facteur commun plus grand que 1). Un nombre premier est
premier par rapport à tous les autres nombres excepté ses propres multiples.
La méthode la plus simple pour calculer le plus grand commun diviseur de deux
nombres est donnée par l’algorithme d ’Euclide. Cet algorithme est décrit dans les
« Eléments d’Euclide » écrits 300 ans avant J.-C. E u c l i d e ne l’a pas inventé. Les his
toriens pensent que l’algorithme en question pourrait être plus vieux de 200 ans. C ’est
un des plus vieux algorithmes non triviaux connus et nous nous en servons encore de
nos jours. K n u t h décrit cet algorithme et quelques variantes modernes [864].
En C :
/* calcule le plus grand commun diviseur de x et y */
int pgcdfint x, int y)
f
int g;
if (x < 0)
x = -x;
if (y < 0)
y = -y ;
if (x + y == 0)
ERR0R j
g = y;
whilefx > 0) {
g = x;
x = y 7. x;
y = g;
>
return(g);
>
ll.S Théorie des nombres 261
Cet algorithme peut être généralisé pour calculer le PGCD d’un tableau de m nombres :
if(m < 1)
re tu r n (O );
g = x [0] ;
f o r ( i = l ; i<m; + + i) {
g = p g cd (g , x [ i ] ) ;
/ * o p tim isa tio n car pour des x [ i ] a lé a t o ir e s , g==l 60% du temps * /
i f (g == 1)
re tu rn (l);
>
r e t u r n (g );
>
Inverses modulo n
Vous vous rappelez les inverses? L ’inverse de 4 est 1/4 car 4 x 1 / 4 = 1. Dans le monde
de l’arithmétique modulo n, c ’est plus compliqué:
4 x i s l (mod 7).
f
Cette équation revient à chercher un x et un k tels que :
4x = 7k + 1
1 = (a x x) mod n
void EuclideÉtendu(int *u, int *v, int *ul, int *u2, int *u3) {
// Attention : u et v seront intervertis si u < v
int k, tl, t2, t3;
if(argc < 3) {
cerr << "Utilisation : euclide u v" << endl;
return(-l);
>
int u = atoi(argv[l]);
11.3 Théorie des nombres 263
int v = atoi(argv[2]);
if(u <= 0 II v <= 0) {
cerr « "Les arguments doivent être strictement positifs!"
« endl;
return(-2);
>
// Attention, u et v seront échangés si u < v
EuclideÉtendu(&u,& v ,& a ,& b ,fepgcd);
cout « a « " * " « u « " + (
« b « ") * " « v « " = " « pgcd « endl;
if(pgcd == 1)
cout « "L’inverse de " « v « " mod " « u « " est : "
« u - b « endl;
return(O);
>
Je ne vais pas prouver que cela marche, ni donner la théorie sous-jacente. Les détails
se trouvent dans [864], ou dans tout autre texte sur la théorie des nombres cité plus
haut.
L’algorithme est itératif et peut être lent pour des grands nombres. K n u t h a montré
que le nombre moyen de divisions pour cet algorithme est donné par :
Calcul de coefficients
L’algorithme d’EucilDE peut aussi être utilisé pour résoudre la classe de problèmes
suivante. Etant donné un tableau de m variables xi,X 2 ,—,xm, trouver un tableau de m
coefficients Wi,U2 ,...,um, tel que:
m x x xm — 1.
Fonction d’Euler
Il y a une autre méthode pour calculer l’inverse d ’un nombre modulo n mais il n’est
pas toujours possible de l’appliquer. L ’ e n s e m b l e r e s t r e i n t d e s r é s i d u s modulo n est
l’ensemble des résidus premiers par rapport à n (cet ensemble est un sous-ensemble de
11. Pierre de Fermât, m athém aticien français, a vécu de 1601 à 1665 C e théorèm e n ’ a rien à voir
avec son dernier théorème.
264 Chapitre 11 Rudiments mathématiques
l’ensemble de tous les résidus modulo n défini précédemment). Par exemple, l’ensemble
restreint des résidus modulo 12 est {1,5,7,11}. Si n est premier, alors l’ensemble res
treint des résidus est l’ensemble de tous les nombres entre 1 et n — 1. Le nombre 0 ne
fait jamais partie de l’ensemble restreint des résidus.
La fonction d’Euler12 de n (parfois appelée indicateur d’Euler de n) est le nombre
d’éléments (« le cardinal ») de l’ensemble restreint des résidus modulo n. Cette fonction
est notée : <p(n). En d ’autres termes, <fi(n) est le nombre d ’entiers positifs plus petits
que n et premiers par rapport à n.
Si n est premier, alors <p(n) — n — 1. Si n = p x q et p et q sont premiers, alors
<p(n) = (p — l ) ( ç — 1). Ces nombres apparaîtront souvent lors de la présentation des
algorithmes à clef publique.
D ’après le petit théorème de Fermât généralisé par Euler, si pgcd(a,n) = 1,
alors:
av ^ mod n = 1.
x = av^ ~ x mod n.
Par exemple, quel est l’inverse de 5 modulo 7? Comme 7 est premier, <p(7) = 7 —1 = 6.
Ainsi, l’inverse de 5 modulo 7 est :
Les deux méthodes de calcul d ’inverses peuvent être étendues pour calculer x dans
l’équation (si pgcd(a,n) = 1) :
(a x x) mod n = b.
x = (b x av^ ~ x) mod n.
En général, l’algorithme d ’EucLiDE est une méthode plus rapide pour calculer les
inverses modulo n, plus particulièrement pour des nombres d ’environ 500 bits. Si
pgcd(a,n) / 1, tout n’est pas perdu. Dans le cas général, (a x x) mod n = b peut
avoir des solutions multiples ou pas de solution du tout.
admet une solution unique x, telle que x soit inférieur à n. Certains nombres premiers
peuvent apparaître plusieurs fois dans le produit. Par exemple, pi peut être égal à p 2 .
Ainsi, pour a et 6 quelconques tels que a < p et b < q (p et q premiers), il existe un
seul x tel que x soit inférieur à p x q et tel que :
u x q= 1 (mod p)
et ensuite on calcule :
x = (((a — b) x u) mod p) x q + b.
/* l a fo n c t io n d ’ Euler e u le r ( ) e s t la is s é e
comme e x e r c ic e au le c t e u r . * /
in t r e s t e _ c h in o is (s iz e _ t r , in t *m, in t *u)
s iz e _ t i ;
in t module;
in t n;
module = 1;
f o r ( i= 0 ; i< r ; ++i)
module *= m [ i ] ;
n = 0;
f o r ( i= 0 ; i< r ; + + i) {
n += u [ i ] * m odexp(m odule/m ti], e u l e r ( m [i ] ) , m [ i ] ) ;
n '/.= module;
}
r e t u r n (n );
}
266 Chapitre 11 Rudiments mathématiques
Un corollaire du théorème du reste chinois peut être utilisé pour résoudre un problème
similaire : si p et q sont premiers et p est inférieur à q, alors il existe un x unique
inférieur à p x q tel que :
Résidus quadratiques
Si p est premier et a est inférieur à p, alors a est un r é s i d u q u a d r a t i q u e modulo p
si :
x 2 = a (mod p), pour un certain x.
Une valeur quelconque de a ne satisfait pas forcément cette propriété. Par exemple, si
p — 7, les résidus quadratiques sont 1, 2 et 4 :
12 = 1 = 1 (mod 7)
22 = 4 ee 4 (mod 7)
32 = 9 = 2 (mod 7)
42 = 16 EE 2 (mod 7)
52 = 2 5 = 4 (mod 7)
62 = 36 = 1 (mod 7).
Remarquez que chaque résidu quadratique apparaît deux fois dans la liste.
Il n’existe pas de valeur de x qui satisfasse une des équations :
x2 = 3 (mod 7)
x2 = 5 (mod 7)
x2 = 6 (mod 7)
Symbole de Legendre
Le sy m b o le d e L egen dre, noté13 L(a,p), est défini quand a est un entier quelconqi
et p est un nombre premier plus grand que 2. Il vaut 0, 1 ou —1 :
L(a,p) = o ( 2 mod p.
Un autre moyen de le calculer est donné par les formules récursives suivantes :
1. si a = 1, alors L(a,p) = 1 ;
3. si a est impair, alors L(a,p) = L(p mod a,a) x (—i ) !0- 1)*!?*-1)/4.
Remarquez que c ’est aussi un moyen efficace de déterminer si a est un résidu quadr
tique modulo p (seulement quand p est premier, évidemment).
Symbole de Jacobi
Le s y m b o l e d e J a c o b i , noté J(a,n) est une généralisation du symbole de L e g e n d r
il est défini pour toute paire d’entiers a et n. Cette fonction est utilisée dans les tes
de primalité. Le symbole de JACOBI est une fonction de l’ensemble restreint des résid
des facteurs de n. Il peut être calculé grâce à différentes formules [1418]. En voici u
qui repose sur les définitions suivantes :
2. J(0,n) = 0.
1. J(l,n) = 1
6. Si pgcd(a,b) = 1 et a et b sont tous deux impairs (la loi de réciprocité n’est pas
valable pour les entiers pairs) :
Voici l’algorithme en C :
assert(estImpair(b));
if (a < 0)
if(estPair((b-1)/2))
re t u m Jacobi(-a,b) ;
else
return -Jacobi(-a,b);
if(estPair(a))
if(estPair((b*b - l)/8>)
return +Jacobi(a/2,b);
else
return -Jacobi(a/2,b); /* Règles 3 et 2 */
d = pgcd(a,b);
assert(estlmpair(a));
/* Ceci est garanti par le test estPair(a) plus haut */
if(d == a) /* a divise b */
return 0; /* Règle 5 */
else if(d != 1)
return Jacobi(d.b) * Jacobi(a/d,b); /* Règle 2 */
11.3 Théorie des nombres 269
else if(estPair((a-l)*(b-l)/4))
return +Jacobi(b,a); /* Règle 6a */
else
return -Jacobi(b,a); /* Règle 6b */
>
Si on sait que n est premier, il suffit de calculer a^n~ 1^ 2 mod n au lieu d’exécuter
l’algorithme précédent; dans ce cas, J(a,n) est équivalent au symbole de Legendre.
Le symbole de Jacobi ne permet pas de déterminer si a est un résidu Si J{a,n) = 1 et
n est un nombre composé, a n’est pas forcément un résidu quadratique modulo n. Par
exemple :
7(7,143) = J ( 7 ,ll) x 7(7,13) = (—1)(—1) = 1.
Toutefois, il n’existe pas de nombre entier tel que x2 = 7 (mod 143).
Entiers de Blum
Si p et ç sont deux nombres premiers et qu’ils sont tous les deux congrus à 3 modulo
4, alors n = pq est appelé e n t i e r d e B l u m . Si n est un entier de B l u m , chaque résidu
quadratique modulo n a exactement 4 racines carrées. L ’une de ces racines carrées
est aussi un carré; c ’est la racine carrée p r i n c i p a l e . Par exemple, la racine carrée
principale de 139 modulo 437 est 24. Les trois autres racines carrées sont 185, 252 et
413
Générateurs
Si p est premier, et g est plus petit que p, alors g est un g é n é r a t e u r modulo p si :
pour chaque b de 1 à p — 1, il existe un certain a tel que ga = 6 (mod p).
En général, trouver un générateur n’est pas un problème facile, sauf si l’on connaît la
décomposition en facteurs premiers de p — 1. Soit çi,Ç 2 viÇ n les facteurs premiers de
p — 1. Pour déterminer si un nombre, g, est un générateur modulo p, on calcule:
2 ( n - i ) / 5 m od n = 4
2( n - i)/2 mod n _ 1Q
3 ( n - i ) / 5 m od n = 9
3 ( n - i )/2 m o d n = L
Corps de Galois
Pas de panique ! Ce titre ne cache rien de terrible. En fait, depuis plusieurs paragraphes,
nous effectuons déjà des calculs dans un corps de G a l o i s . Dans le cadre de l’arithmé
tique modulo n, si n est premier ou une puissance entière d’un nombre premier, alors
nous avons ce que les mathématiciens appellent un co r p s fini. Dans le cas particulier
de n premier, nous utiliserons plutôt la lettre p. Ce type de corps fini est tellement
important que les mathématiciens lui ont donné le nom de son promoteur : on parlera
d’un co rp s d e G a lois et on l’écrira Zjp. Evariste G a l o i s , mathématicien français
qui a vécu au début du XIXe siècle, a beaucoup produit dans le domaine de la théorie
des nombres avant de mourir à l’âge de 20 ans dans un duel.
Dans u n corps de G a l o i s , l’addition, la soustraction, la multiplication et la division
sont bien définies. Il existe un élément neutre pour l’addition : 0 et un élément neutre
pour la multiplication: 1. Chaque nombre non nul a un inverse unique (cela ne serait
pas vrai si p n’était pas premier). Les lois de commutativité, d ’associativité et de
distributivité s’appliquent.
E n cryptographie, on se sert beaucoup de l’arithmétique dans un corps de G a l o i s .
Toute la théorie des nombres s’applique, les nombres gardent une taille finie et il n’y a
pas d’erreur d’arrondi pour la division. Nombre de cryptosystèmes sont basés sur Z /p ,
où p est un nombre premier très grand.
Pour compliquer un peu plus les choses, les spécialistes de cryptographie utilisent aussi
l’arithmétique modulo des polynômes irréductibles de degré u et à coefficients entiers
11-4 Factorisation 271
modulo q (avec q premier). Ces corps sont notés Z jqn. Tous les calculs sont fait modulo
un certain polynôme irréductible de degré n, p(x).
La théorie de ces corps est hors du propos de cet ouvrage: malgré cela, je décrirai
certains cryptosystèmes qui en font usage. Si vous voulez jouer un peu avec ces corps,
Z / 23 a pour éléments : 0 , 1 , x, x + 1 , x2, x 2 + 1 , x2+ x , x 2 + X + 1 . Ï I existe un algorithme
pour calculer des inverses dans Z /2 n dont on peut faire mie réalisation sur machine
parallèle [423].
Quand on parle de polynômes, le terme « premier » est souvent replacé par le terme
« irréductible » . Un polynôme est dit irréductible s’il ne peut pas être exprimé comme le
produit de deux autres polynômes (différents de 1 et de lui-même). Le polynôme x 2 + 1
est irréductible sur les entiers. Par contre, le polynôme x z + 2x2 -f x est réductible : il
est équivalent au produit x(x + l)(a: + 1).
On appelle primitif un polynôme qui est générateur dans un corps donné; tous ses co
efficients sont premiers entre eux. Nous reparlerons de polynômes primitifs à l’occasion
des générateurs de nombres pseudo-aléatoires (voir § 16.2).
Les calculs dans 2 /2 ” peuvent être rapidement réalisés matériellement grâce à des
registres à décalage linéaire à rétroaction. Pour cette raison, les calculs dans Z j2 n sont
souvent plus rapides que dans 2 /p . Tout comme l’exponentiation peut être réalisée de
manière très efficace dans Z j 2” , il en est de même du logarithme discret [187, 188, 372,
383]. Si vous voulez en apprendre plus consultez [147].
Pour le corps de G a lo is 2 /2 ” , les spécialistes de cryptographie aiment utiliser le
trinôme p(x) = x n + x + 1 comme module car la longue série de coefficients nuls entre
xn et x rendent la réalisation de la multiplication très efficace [190], Le trinôme doit
être primitif, sinon cela ne fonctionne pas. Pour n inférieur à 1000, le trinôme x n + x + 1
est primitif [1651, 1650] si n vaut :
1,3,4,6,9,15,22,28,30,46,60,63,127,153,172,303,471,532,865,900.
11.4 Factorisation
Factoriser un nombre signifie trouver ses facteurs premiers :
10 = 2 x 5
60 = 2 x 2 x 3 x 5
252 601 = 41 x 61 x 101
2113 - 1 = 3 391 x 23 279 x 65 993 x 1868 569 x 1066 818132 868 207
Le problème de la factorisation est l’un des plus vieux de la théorie des nombres. Il
est facile de factoriser un nombre mais c ’est coûteux en temps. Toutefois, il y a eu des
avancées dans l’état de l’art.
Actuellement, le meilleur algorithme de factorisation est :
Il existe d ’autres algorithmes de factorisation, mais ils ont été supplantés par le crible
sur corps numérique :
Voyez [255] pour une bonne introduction à ces différents algorithmes de factorisation,
excepté pour le crible sur corps numérique. La meilleur présentation du crible sur corps
numérique se trouve dans [962]. Des références plus anciennes sont [502, 1604, 1268].
Des informations sur la factorisation parallèle peuvent être trouvées dans [253].
Si n est le nombre à factoriser, la variante la plus rapide du crible quadratique nécessite
un nombre d’opérations équivalent à :
Le crible sur corps numérique est plus rapide avec un temps heuristique asymptotique
estimé de :
(l,9 2 3 + 0 (l))(ln n )4 (ln (ln n ))§
En 1970, la factorisation d ’un nombre « difficile » de 41 chiffres était à la une des jour
naux [1129] 14. Dix ans après, factoriser des nombres difficiles de taille double prenait
quelques heures de calcul sur un ordinateur CRAY [442].
En 1988, Cari P o M E R A N C E a conçu une machine à factoriser modulaire en utilisant des
puces VLSI sur mesure [1269]. La taille du nombre que vous pouvez factoriser dépend
14. Un nom bre « difficile » est un nom bre qui n ’a pas de petits facteurs et qui n ’ a pas une forme
spéciale qui perm et de le factoriser plus facilement.
11.4 Factorisation 273
de la taille de la machine que vous pouvez vous permettre de construire. Il ne l’a jamais
construite.
En 1993, un nombre difficile de 120 chiffres a été factorié grâce au crible quadratique;
le calcul a demandé l’équivalent de 825 millions d ’instructions par seconde pendant un
an (mips-an en abrégé) et fut mené en trois mois de temps réel [469] D ’autres résultats
se trouvent dans [501].
Aujourd’hui, la factorisation tend à utiliser les réseaux d ’ordinateurs [304, 966]. En
factorisant un nombre de 116 chiffres, Arjen L E N S T R A et Mark M A N A S S E utilisèrent
400 mips-an, le temps d ’inaction d ’une batterie d ’ordinateurs tout autour du monde
pendant quelques mois.
En mars 1994, une équipe de mathématiciens menée par L e n s t r a a factorisé un
nombre de 129 chiffres (428 bits) grâce à la variante du crible quadratique multi
polynomial [71]. Des volontaires sur Internet ont mené à bien le calcul: 600 personnes
et 1600 machines durant huit mois, probablement le plus grand multi-processeur ad
hoc jamais assemblé. Le calcul a demandé l’équivalent de 4000 à 6000 mips-an. Les ma
chines communiquaient par courrier électronique, envoyant leurs résultats individuels
à un central qui s’est occupé de l’étape finale de l’analyse. Ce calcul était basé sur le
crible quadratique et des théories vieilles de cinq sms; un dixième du temps de calcul
aurait suffit avec le crible sur corps numérique [960]. Selon [71] : « Nous en concluons
que les nombres de 512 bits courament utilisés pour R SA sont vulnérables face à n’im
porte quelle organisation prête à dépenser quelques millions de dollars et à attendre
quelques mois. » Ils estiment que factoriser un nombre de 512 bits demande 100 fois
plus de travail avec les mêmes moyens et 10 fois plus en utilisant le crible sur corps
numérique et la technologie actuelle [960].
Pour rester au courant de l’art de factoriser, R SA D a t a S e c u r i t y a instauré en mars
1991 un concours de factorisation ( le « RSA Factoring Challenge * ) [534]. Il s’agit
d’une liste de nombres difficiles, chacun étant le produit de deux nombres premiers
de tailles comparables. Chaque nombre premier est congru à 2 modulo 3. Il y a 42
nombres dans le concours; leur taille va croissante de 100 chiffres à 500 chiffres de
10 en 10 (plus un nombre de 129 chiffres). Au moment d ’écrire ces lignes, RSA-100,
RSA-110, RSA-120 et RSA-129 ont étés factorisés, tous grâce au crible quadratique.
RSA-130 pourrait être le prochain (en utilisant le crible sur corps numérique), ou les
champions de factorisation pourraient bien sauter directement à RSA-140
C’est un domaine qui évolue vite. Il est difficile d ’extrapoler les progrès de la technologie
de la factorisation car personne ne peut prédire les avancées mathématiques. Avant que
le crible sur corps numérique ne soit découvert, de nombreuses personnes ont conjecturé
que le crible quadratique était asymptotiquement aussi rapide que toute autre méthode
de factorisation pourrait l’être. Ils avaient tort.
Des progrès à court terme dans le crible sur corps numérique pourraient aller dans le
sens d’abaisser la constante : 1.923. Pour certains nombres de forme spéciale, comme
les nombres de F e r m â t, la constante avoisine plutôt 1.5 [966, 965]. Si c ’était le cas
pour les nombres difficiles utilisés en cryptographie à clef publique, les nombres de 1024
bits pourraient être factorisés aujourd’hui. Une façcon d ’abaisser la constante consiste
à trouver de meilleurs moyens de représenter les nombres par des polynômes à petits
coefficients. Le problème n’a pas encore été étudié en profondeur, mais des avancées
vont probablement arriver [960].
Chapitre 11 Rudiments mathématiques
Pour obtenir les résultats les plus récents du concours de factorisation, envoyez un
courrier électronique à ch a lle n g e -in fo @ rsa .com .
1. Si tous le monde a besoin d’un nombre premier différent, ne va-t-on pas tomber
à court? Non, le père Noël ne tombera jamais à court de nombres premiers
pour tous les petits garçons et toutes les petites filles sages. En fait, il y a plus
de 10151 nombres premiers de 512 bits de long ou m oins15. Il y a 1084 d ’atomes
dans l’univers. Si chaque atome de l’univers avait besoin d ’un milliard de nombres
premiers chaque microseconde depuis l’origine des temps jusqu’à maintenant, il
faudrait 10116 nombres premiers; il en resterait encore approximativement 10151.
3. Si quelqu’un créé une base de donnée contenant tous les nombres premiers,
pourra-t-il s’en servir pour casser les algorithmes à clef publique? Oui, mais
il ne peut pas la créer. Si vous disposiez de disques de un gigaoctets pesant un
gramme, alors la liste des nombres premiers de 512 bits serait si lourde qu’elle
dépasserait la limite de Chandrasar et imploserait pour se transformer en trou
noir... ainsi, vous ne pourriez pas en retirer de données de toute manière.
Si la factorisation d ’un nombre est si difficile, comment peut-il être facile de générer un
nombre premier? L’astuce vient de ce que répondre par oui ou par non à la question
« Est-ce que n est premier? » est bien plus facile que de répondre à la question plus
compliquée « Quels sont les facteurs premiers de n ? »
Générer des nombres aléatoires, puis essayer de les factoriser est une mauvaise méthode
de génération de nombres premiers. La méthode appropriée consiste à générer des
15. Pour des nom bres de taille N , la probabilité q u ’un nom bre aléatoire soit premier est approxim a
tivement de 1 pou r ln 2 .IV-
11.5 Génération de nombres premiers 275
nombres aléatoires et tester s’ils sont premiers. Il existe plusieurs tests probabilistes
de primalité, ce sont des tests qui permettent de déterminer si un nombre est premier
avec un certain niveau de confiance. En supposant que ce « niveau de confiance » est
suffisant, ce type de tests est assez bon. J’ai entendu appeler les nombres ainsi produits
« nombres premiers de type industriel » : ce sont des nombres probablement premiers
avec une faible chance d’erreur contrôlable.
Supposons qu’un test soit mis au point pour échouer une fois sur 250. Cela veut dire
qu’il y a une chance sur 1015 pour que le test affirme à tort qu’un nombre composé
est premier16. Si pour certaines raisons vous avez besoin de plus de certitude dans
la primalité du nombre, vous pouvez faire descendre le taux d ’erreur plus bas encore.
Par contre, si vous considérez que les chances d ’obtenir un nombre composé sont 300
millions de fois plus faibles que celles de gagner à la loterie nationale, peut-être que
vous ne vous inquiéterez pas trop.
Une présentation générale des développements dans le sujet se trouve dans [1266, 210].
D’autres articles importants sont [1497, 388, 15, 23, 628, 654, 912].
Solovay—Strassen
S o l o v a y et S t r a s s e n ont développé un algorithme probabiliste de test de prima
lité [1497]. Cet algorithme utilise le symbole de JACOBI pour tester si p est premier:
Un nombre a qui permet d ’affirmer que p n’est certainement pas premier s’appelle un
tém oin. Si p est composé, il y a au moins 50 % de chances pour qu’un nombre a
aléatoire soit un témoin. Répétez ce test t fois avec t valeurs différentes aléatoires pour
a. Un nombre composé à une chance sur 2* de passer les t tests.
Lehmann
Un autre test, plus simple, a été développé indépendamment par L e h m a n n [956]. Voici
l’algorithme pour tester si t est premier :
3. Si a^p 'U /2 lou — 1 (mod p) pour tous les i, alors p n’est pas premier.
Rabin—Miller
L’algorithme que tout le monde utilise— il est facile— a été développé par R a b i n , en
partie à partir des idées de M i l l e r [1099, 1295]. En fait, c ’est une version simplifiée
de l’algorithme recommandé par la proposition pour le DSS du N IST [1176, 1174].
Choisissez d ’abord un nombre aléatoire p à tester. Calculez b, où b est le nombre de
fois que 2 divise p — 1 (c’est-à-dire que 2b est la plus grande puissance de 2 qui divise
p — 1). Ensuite calculez m tel que p = 1 + 2bm.
2. Posez j = 0 et z = am mod p.
Les chances d ’un nombre composé de passer ce test décroissent plus vite qu’avec les
algorithmes précédents. Trois quarts des valeurs possibles de a sont à coup sûr des
témoins. Cela veut dire qu’un nombre composé passera le test moins d ’une fois sur 4f,
où t est le nombre d’itérations. En réalités, ces estimations sont très pessimistes. Pour
la plupart des nombres aléatoires, environ 99,9 % des valeurs possibles de a sont des
témoins [103].
Il existe même de meilleures estimations [420]. Pour des candidats de n bits (où n est
supérieur à 100), les chances d ’erreur sur un test sont de 1 sur A n 2 ' ^ 2. Et pour un
candidat de 256 bits, les chances d ’erreurs après six tests sont inférieures à une sur 251.
Vous trouverez plus de théorie dans [421],
Considérations pratiques
Dans les réalisations du monde courant, la génération de nombres premiers est rapide.
3. Vérifiez par prudence que p n’est pas divisible par les petits nombres premiers :
3, 5, 7, 11, etc. De nombreuses réalisations testent la divisibilité de p par tous les
nombres premiers inférieurs à 256. Le plus efficace est de tester la divisibilité par
tous les nombres premiers inférieurs à 2000. Vous pouvez faire cela efficacement
avec une roue [864].
17. Le bit de poids fort assure que p a la longueur requise et le bit d e poids faible assure que p est
impair.
11.5 Génération de nombres premiers 277
Une autre option consiste à ne pas générer p au hasard mais à essayer les uns après
les autres tous les nombres à partir d ’un point aléatoire jusqu’à trouver un nombre
premier.
L’étape 3 est optionnelle, mais c ’est une bonne idée. Tester si un nombre p impair
aléatoire est divisible par 3, 5 et 7 permet d’éliminer 54 % des nombres impairs avant
d’arriver à l’étape 4. Tester avec tous les nombres premiers inférieurs à 100 permet
d’éliminer 76 % des nombres impairs; tester avec tous les nombres premiers inférieurs
à 256 permet d’éliminer 80 % des nombres impairs. En général, la part de nombre
impairs qui ne sont multiples d’aucun nombre premier inférieur à n est de 1.12/ km .
Plus vous prenez n grand, plus cela requiert de pré-calcul avant d ’arriver au test de
R a b in -M il l e r .
Une réalisation de cette méthode sur une Sparc II était capable de trouver des nombres
premiers de 256 bits en un temps moyen de 2,8 secondes, des nombres premiers de 512
bits en un temps moyen de 24,0 secondes, des nombres premiers de 768 bits en un
temps moyen de 2 minutes, des nombres premiers de 1024 bits en un temps moyen de
5,1 minutes [929].
La question de savoir si des nombres premiers forts sont nécessaires est sujette à débat.
Ces propriétés ont été développées pour empêcher certains algorithmes de factorisation.
Toutefois, les algorithmes de factorisation les plus rapides ont autant de chances de
factoriser des nombres qui satisfont ces critères que ceux qui ne les satisfont pas [832].
Je recommande de ne pas générer spécifiquement des nombres premiers forts. La taille
des nombres premiers est bien plus importante que leur structure. De plus les exigences
de structure peuvent être néfastes car elles vont à l’encontre du caractère aléatoire.
Cela peut changer. De nouveaux algorithmes de factorisation peuvent être découverts
qui marchent mieux avec des nombres ayant certaines propriétés qu’avec ceux qui n’en
jouissent pas. S’il en est ainsi, des nombres premiers forts seront peut-être à nouveau
nécessaires. Vérifiez votre journal de mathématiques théoriques local pour les dernières
nouvelles.
ax mod n.
Par exemple :
Les logarithmes discrets n’ont pas tous des solutions (rappelez-vous que les seules
solutions valides sont entières). Il est facile de voir qu’il n’y a pas de solution x pour
l’équation :
3X mod 13 = 7.
Il est encore plus difficile de résoudre ces problèmes pour des nombres de 1024 bits.
e ( l + 0(l))(ln n ) i (ln(ln n) ) i
11.6 Logarithmes discrets dans un corps fini 279
Le crible sur corps numérique est plus rapide avec son estimation asymptotique heu
ristique du temps de calcul :
Stephen POHLtG et Martin H e llm a n ont trouvé un moyen rapide de calculer des
logarithmes discrets dans Z j p si p - 1 n’a que des petits facteurs premiers [1263]. Pour
cette raison, seuls les corps tels que p — 1 a au moins un grand facteur premier sont
utilisés en cryptographie. Un autre algorithme [18] calcule les logarithmes discrets à une
vitesse comparable à la factorisation ; il a été ensuite étendu aux corps de la formes
Z / p n [716]. Cet algorithme a été critiqué [729] car il a certains défauts théoriques.
D’autres articles [1590] montrent combien le problème est effectivement difficile.
Le calcul de logarithme discret est intimement lié à la factorisation. Si vous savez
calculer le logarithme discret, alors vous savez factoriser19. Actuellement, il y a trois
méthodes de calcul de logarithmes discrets dans un corps premier [374, 945, 650] : le
crible linéaire, le schéma d ’entiers de Gauss et le crible sur corps numérique.
Le plus gros des calculs préliminaires ne doit être effectué qu’une fois pour chaque corps.
Après cela, des logarithmes donnés peuvent être rapidement calculés. C’est un défaut de
sécurité pour les systèmes basés sur ces corps. Il est important que différents utilisateurs
utilisent des corps premiers différents. Des utilisateurs de la même application peuvent
cependant utiliser le même corps premier.
Le monde des corps polynomiaux, Z j 2", n’a pas été ignoré par les chercheurs. Un
algorithme heuristique a été proposé dans [729]. L’algorithme de C O P P E R S M IT H rend
raisonnable la recherche des logarithmes discrets dans des corps tels que Z j 2127 et
possible la recherche dans Z j 2400 [372], Cela est basé sur les travaux de [187]. L’étape
de précalcul est énorme, mais sinon c’est élégant et efficace. Une réalisation pratique
avec une version nettement moins efficace du même algorithme, après une période de
précalcul de 7 heures, trouve des logarithmes discrets dans Z j 2127 en quelques secondes
chacun [1137, 794]20.
Plus récemment, les précalculs pour Z j 2227, Z / 2 313 et Z j 2401 ont été terminés et
des progrès significatifs ont été faits pour Z j 2503. Ces calculs sont exécutés sur un
ordinateur massivement parallèle n C u b e -2 avec 1024 processeurs [651, 652], Calculer
des logarithmes discrets dans Z j 2593 est encore hors de portée.
Tout comme pour les logarithmes discrets dans un corps premier, les précalculs néces
saires pour calculer des logarithmes discrets dans un corps polynomial ne doivent être
faits qu’une fois. E l G a m a l [522] donne un algorithme pour calculer des logarithmes
discrets dans le corps Z j p 2 .
Le DES
12.1 Historique
Le DES (pour « Data Encryption Standard »), aussi connu sous le nom D E A pour la
norme ANSI (pour « Data Encryption Algorithm ») et D E A -1 pour la norme ISO, est
un standard mondial depuis plus de 20 ans. Bien qu’il montre des signes de vieillesse,
il a remarquablement bien résisté à des années de cryptanalyse et il est toujours sur
contre tous les adversaires, excepté peut-être contre les plus puissants.
Développement du standard
Au début des années 70, la recherche cryptographique non militaire était faite au
petit bonheur. Il n’y avait quasiment aucune publication dans le domaine. Beaucoup
de gens savaient que les militaires utilisaient des équipements de codages spéciaux
pour communiquer, mais peu d’entre eux comprenaient la science de la cryptographie.
L’Agence nationale de sécurité américaine (N SA pour « National Security Agency »)
avait une expérience considérable mais son existence n’était même pas publiquement
admise.
Les acheteurs ignoraient ce qu’ils achetaient. Quelques petites compagnies concevaient
et vendaient des équipements cryptographiques, principalement pour les gouverne
ments hors Etats-Unis. Ils étaient tous différents ; aucun de ces dispositifs ne pouvait
communiquer avec un autre. Et personne ne savait s’ils étaient vraiment sûrs ou pas ;
il n’existait pas d’instance indépendante pour certifier leur niveau de sécurité, et ceux
qui achetaient des équipements cryptographiques ne savaient pas vraiment ce qu’ils
achetaient. Un rapport gouvernemental rapporta [443] :
En 1972, le Bureau national des standards américain (NBS pour « National Bureau of
Standards »), maintenant dénommé l’Institut national des standards et de la technologie
(N IST pour « National Instïtute of Standards and Technology »), a lancé un programme
pour protéger les ordinateurs et les communications de données. Un des objectifs ce
programme consistait à développer un algorithme standard de cryptographie unique
qui puisse protéger les données numériques durant leur transmission et leur stockage.
Cet algorithme unique serait testé et certifié, et il permettrait à différents équipements
cryptographiques d’interagir. Il serait moins cher à réaliser et aisément disponible
Dans le numéro du 15 mai 1973 du « Fédéral Register », le NBS faisait un appel d’offres
public pour un algorithme standard de cryptographie, qui spécifiait un ensemble de
critères de conception de l’algorithme :
- il devait pouvoir être réalisé de façon économiquement rentable dans des dispo
sitifs électroniques ;
La réponse du public indiqua qu’il existait une demande très forte pour un standard
de cryptographie, mais qu’il y avait très peu d’expertise dans ce domaine. Certains
mathématiciens ont envoyé des squelettes d ’algorithmes assez sommaires. Aucune des
soumissions ne satisfaisait les critères énumérés ci-dessus.
Le NBS émit un deuxième appel d ’offres dans le numéro du 27 août 1974 du « Fédéral
Register » . Finalement, ils obtinrent un candidat prometteur basé sur un algorithme
développé par IBM au début des années 70, appelé L u c i f e r (voir § 13.1). Une équipe
d’IBM travaillait sur la cryptographie à la fois à Kinston et à Yorktown Heights; elle
était constituée entre autres de Roy A d l e r , Don C o p p e r s m i t h , Horst F E IS T E L , Edna
G r o s s m a n , Alan K o n h e i m , Cari M e y e r , Bill N o t z , Lynn S m i t h , Walt T u c h m a n
et Bryant T u c k e r m a n .
L’algorithme, bien que complexe, était sans détours. Il n’utilisait que des opérations
logiques simples sur des petits groupes de bits et pouvait être réalisé de manière rela
tivement efficace en matériel et en logiciel.
Le NBS demanda le concours de la NSA pour évaluer le niveau de sécurité de cet al
gorithme et pour déterminer son adéquation comme standard fédéral. IBM avait déjà
déposé un brevet pour cet algorithme [516], mais était prêt à céder la propriété intellec
tuelle en vue de sa fabrication, de sa réalisation et de son utilisation. Le NBS travailla
12.1 Historique 283
sur les termes de cet accord avec IBM et obtint finalement une licence non exclusive
et gratuite de fabriquer, utiliser et vendre des dispositifs appliquant cet algorithme.
Finalement, dans le numéro du 17 mars 1975 du « Fédéral Register », le NBS publiait
à la fois les détails de l’algorithme et la déclaration d’IB M d’octroi d ’une licence non
exclusive et gratuite [538]. Un autre avis publié dans le numéro du 1er août 1975 du
« Fédéral Register » faisait appel aux commentaires des agences nationales et du public
en général.
Et il y eut de nombreux commentaires [722, 495, 1126]. De nombreux cryptographes
voyaient d’un mauvais œil la « main invisible de la N SA dans le développement de cet
algorithme. Ils craignaient que la N SA ait pu modifier l’algorithme pour y introduire
une brèche secrète. Ils protestèrent contre le fait que la NSA avait réduit à 56 bits
la longueur de clef qui était de 128 bits originellement (voir § 13.1). Le raisonnement
sous-jacent aux choix faits dans la conception du DES devint clair au début des années
90, mais dans les années 70 cela semblait mystérieux et inquiétant.
En 1976, le NBS organisa deux ateliers pour évaluer la proposition de standard. Le
premier atelier s’intéressa aux mathématiques de l’algorithme et à l’existence possible
d’une brèche secrète [1199]. Le second atelier s’intéressa à la possibilité d ’augmenter la
longueur de clef [232]. Les concepteurs, les évaluateurs, les réalisateurs, les vendeurs,
les utilisateurs et les critiques furent invités. A tout point de vue, les ateliers furent
animés [1124].
En dépit des critiques, le DES fut adopté au niveau fédéral le 23 novembre 1976 [232]
et son utilisation autorisée pour les communications gouvernementales non classées
secrètes. La description officielle du standard, FIPS PU B 46, « Data Encryption
Standard » [1153] fut publiée le 15 janvier 1977 et entra en vigueur un mois plus
tard. Le FIPS PU B 81, « DES Modes of opération » [1156] en 1980, et le FIPS PU B
74, « Guidelines for Implementing and Using the NBS Data Encryption Standard »
[1155] parut en 1981. Le NBS publia également le document FIPS PU B 112 qui
spécifie l’utilisation du DES pour le chiffrement de mots de passe [1151] et le FIPS
PUB 113, qui spécifie l’utilisation du DES pour l’authentification de données informa
tiques [1152]. (FIPS vient de « Fédéral Information Processing Standard », standard
fédéral pour le maniement d’informations.)
Adoption du standard
L’Institut national américain de standardisation (AN SI pour « American National
Standards Institute ») homologua le DES comme standard pour le secteur privé
sous la référence ANSI X 3.92 [56]. Us l’appelèrent D E A (pour « Data Encryption
Algorithm »). AN SI publia un standard pour les modes d ’opération du D E A sous la
référence AN SI X 3.106 [55], qui correspondait au document NBS, et un standard
pour le chiffrement avec le DES en réseau AN SI X 3.105 [54].
Deux autres groupes au sein de l’AN SI, représentant respectivement le monde ban
caire des opérations aux particuliers et le monde bancaire des grands comptes, ont
développé des standards basés sur le DES. Les opérations bancaires aux particuliers
concernent les transactions entre les institutions financières et les particuliers, tan
dis que les opérations bancaires des grands comptes concernent les transactions entre
institutions bancaires.
Le groupe de travail « Financial Institution Wholesale Retail Working Group» de
l’ANSI a développé un standard pour la gestion et la sécurité des PIN (ANSI
Chapitre 12 Le D ES
X 9.8) [64], ainsi qu’un autre standard basé sur le DES pour l’authentification de
messages dans le commerce de détail (A N SI X 9.19) [58]. Le groupe a une ébauche de
standard pour la distribution sûre de clefs (AN SI X 9.24) [60].
Le groupe de travail « Financial Institution Wholesale Security Working Group » de
l’AN SI a développé ses propres standards pour l’authentification de messages (ANSI
X 9 .9) [65], pour la gestion des clefs (A N SI X 9.17) [57, 1171], pour le chiffrement
(ANSI X 9.23) [59], et pour l’authentification sûre de personne ou de nœud (ANSI
X 9.26) [61].
L ’ « American Bankers Association » développe des standards optionnels pour le monde
financier. Ils ont publié un standard recommandant l’utilisation du D ES chaque fois que
le chiffrement est nécessaire [5] et un autre pour la gestion des clefs cryptographiques [6].
Avant le « Computer Security Act » de 1987, les services généraux de l’administration
américaine (G S A pour « General Services of Administration ») avaient la responsabi
lité de la définition des standards de communication fédéraux. Depuis le « Computer
Security Act », cette responsabilité a été transférée au NIST. Les G SA publièrent
trois standards qui utilisaient le DES : deux concernant les exigences en matière de
sécurité en général et de l’interfonctionnement des équipements (F E D E R A L STAN D ARD
1026 [663] et F é d é r a l S t a n d a r d 1027 [664]), et un pour les équipements de télécopie
suivant la norme « Groupe 3 » ( F é d é r a l S t a n d a r d 1028 [665]).
Le Département du Trésor (« Department of Treasury») a émit une directive afin
que tous les messages de transferts de fonds électroniques soient authentifiés par le
DES [474, 476] ; il décrivit également les critères que devaient satisfaire tous les équi
pements d’authentification [475].
L’Organisation internationale de normalisation (ISO pour « International Organiza-
tionfor Standardization ») décida dans un premier temps de soutenir le DES (rebaptisé
pour l’occasion D E A -1) comme norme internationale; mais l’ISO décida ensuite de
ne pas se mêler de la cryptographie. Toutefois, le groupe de travail « International
Wholesale Financial Standards » de l’ISO utilisa le DES dans une norme d ’authen
tification internationale [762] et pour la gestion des clefs [765]. DES est aussi spécifié
dans un standard financier australien [1197].
Dans le cadre du DES, le N IST valide les réalisations du DES. Cette validation
confirme que la réalisation est conforme au standard. Jusqu’en 1994, le N IST n’a validé
que les réalisations en matériel ou en microprogrammation; jusqu’alors, les réalisations
logicielles ont été exclues du standard. En mars 95, 73 réalisations différentes avaient
été validées.
Le N IST a aussi développé un programme certifiant les équipements conformes
aux AN SI X 9.9 et FIPS 113. En mars 1995, 33 produits avaient été validés. Le
Département du Trésor a une procédure supplémentaire de validation. Le N IST a
aussi un programme certifiant qu’un équipement est conforme à AN SI X 9.17 pour la
gestion des clefs dans les grands comptes [1171]; en mars 1995, quatre produits avaient
été validés.
12.1 Historique 285
1987
Les termes du standard prévoient qu’il peut être revu tous les cinq ans. Dans le numéro
du 6 mars 1987 du « Fédéral Register », le NBS faisait un appel aux commentaires
concernant l’évaluation de la deuxième tranche de cinq ans. Le NBS soumettait trois
choix à l’examen [1487, 1488] : reconduire le standard pour trois ans, le supprimer ou
revoir son domaine d ’application.
Le NBS et la NSA évaluèrent le standard. La NSA était plus impliquée cette fois-ci.
Grâce à une directive de l’exécutif signée par Ronald R e a g a n , appelée N SDD-145, la
NSA avait un droit de veto sur le NBS en matière de cryptographie. Tout d ’abord, la
NSA annonça qu’elle ne reconduirait pas le standard. Le problème n’était pas que le
DES ait été cassé ou même qu’il pût être suspecté d ’avoir été cassé. Il était simplement
de plus en plus probable qu’il serait bientôt cassé.
A sa place, la NSA proposait le programme « Commercial COMSEC Endorse-
ment » (C C E P ), qui aurait finalement offert une série d ’algorithmes pour remplacer
le DES [92]. Ces algorithmes conçus par la N SA ne seraient pas divulgués; une couche
protectrice dans les puces VLSI aurait empêché la reconstruction de l’algorithme (voir
§ 25.1).
Cette annonce ne fut pas très bien accueillie. De nombreuses personnes indiquèrent que
le DES était très répandu dans le monde des affaires (plus particulièrement le monde
financier) et qu’aucune alternative valable n’était disponible. Le retrait du standard
aurait laissé de nombreuses organisations sans protection pour leurs données. Après pas
mal de débats, le DES fut reconduit comme standard gouvernemental américain jus
qu’en 1992 [1154]. D ’après le NBS, le DES ne serait plus reconduit par la suite [1487].
1993
Ne dites jamais « jamais plus ». En 1992, il n’y avait toujours pas d ’alternative au
DES. Le NBS, maintenant appelé N IST, sollicita une fois de plus les commentaires
dans le « Fédéral Register » [543] :
Texte en clair
çjp
k2
F ig . 12.1 - DES
L’algorithme n’utilisant que des opérations arithmétiques et logiques standard sur des
nombres d’au maximum 64 bits, il était facile de le réaliser avec la technologie de la
fin des années 70. La nature répétitive de l’algorithme le rend idéal pour l’utilisation
de puces spécialisées. Les premières réalisations logicielles étaient inélégantes mais les
réalisations actuelles sont nettement meilleures.
permutée une fois de plus. La « fonction / » est constituée de ces quatre opérations. La
sortie de la « fonction / » est alors combinée avec la moitié gauche par un ou exclusif.
Le résultat de ces opérations devient la nouvelle moitié gauche ; l’ancienne moitié de
gauche devient la nouvelle moitié droite. Ces opérations sont répétées 16 fois, donnant
le DES à 16 rondes.
R% — i © f ( R i - i , K t ).
La permutation initiale
Le tableau 12.1 décrit la permutation initiale qui transpose le bloc d’entrée avant la
première ronde. Ce tableau, ainsi que les autres tableaux de ce chapitre, doit être lu
de gauche à droite et de haut en bas. Par exemple, la permutation initiale déplace le
bit 58 jusqu’à la position 1, le bit 50 jusqu’à la position 2, le bit 42 jusqu’à la position
3, etc.
~ 58 50 42 34 26 18 ÏÔ 2 60 52 44 36 28 20 12 T
62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7
12.2 Description du DES 289
Initialement, les 64 bits de la clef DES sont réduits à 56 bits en ignorant un bit sur
huit. Ceci est décrit par le tableau 12.2. Ces bits peuvent être utilisés comme bits de
contrôle de parité pour vérifier qu’il n’y a pas eu d’erreur lors de la saisie de la clef.
~ 57 49 41 33 25 Ï7 9 ï 58 50 42 34 26 Ï 8~
10 2 59 51 43 35 27 19 11 3 60 52 44 36
63 55 47 39 31 23 15 7 62 54 46 38 30 22
14 6 61 53 45 37 29 21 13 5 28 20 12 4
Après que la clef de 56 bits a été extraite, une clef de 48 bits différente est engendrée
pour chaque ronde du DES. Ces clefs K i, sont déterminées de la manière suivante :
Tout d ’abord, la clef de 56 bits est divisée en deux moitiés de 28 bits. Ensuite les
moitiés sont décalées vers la gauche d’une ou deux positions, en fonction de la ronde.
Le nombre de bits de décalage est donné par le tableau 12.3.
Après avoir été décalés, 48 bits parmi les 56 sont sélectionnés. Comme cette opération
combine une permutation des bits avec une sélection d ’un sous-ensemble des bits, elle
est appelée permutation compressive, ou encore choix permuté. Cette opération
fournit un sous-ensemble de bits qui a la même taille que la sortie de la permutation
expansive. Le tableau 12.4 définit la permutation compressive. Par exemple, le bit en
position 33 de la clef décalée va en position 35 de la sortie, et le bit en position 18 de
la clef décalée est ignoré.
Les décalages ont pour effet de rendre différents les sous-ensembles de bits utilisés dans
chaque sous-clef. Chaque bit est utilisé dans approximativement 14 des 16 sous-clefs,
bien que tous les bits ne soient pas utilisés exactement le même nombre de fois.
290 Chapitre 12 Le D E S
14 Vf II 24 ï 5 3 28 Ï5 6 21 10
23 19 12 4 26 8 16 7 27 20 13 2
41 52 31 37 47 55 30 40 51 45 33 48
44 49 39 56 34 53 46 42 50 36 29 32
La permutation expansive
Par cette opération, la moitié droite des données, Rl, est étendue de 32 à 48 bits.
Comme cette opération change l’ordre des bits et qu’elle répète certains bits, elle est
appelée permutation expansive. Cette opération a deux buts : le résultat a la même
taille que la clef pour l’opération ou exclusif, et elle fournit un résultat plus long qui
pourra être comprimé pendant l’opération de substitution. Toutefois, aucun de ces
deux buts n’est sa raison d ’être cryptographique. En permettant à un bit d’affecter
deux substitutions, la dépendance entre les bits d’entrée et les bits de sortie se dilue
plus vite. On parlera d’effet d ’avalanche. Le DES est conçu afin de parvenir le plus
vite possible à ce que chaque bit du texte chiffré dépende de chaque bit du texte en
clair et de chaque bit de la clef.
La figure 12.3 illustre la permutation expansive. On l’appelle parfois ta b le T . Pour
chaque bloc de 4 bits d ’entrée, le premier et le quatrième bit, représentent chacun 2
bits du bloc de sortie, tandis que les deuxième et troisième bits, représentent chacun
un bit du bloc de sortie. Le tableau 12.5 indique la correspondance entre les positions
de sortie et les positions d ’entrée. Par exemple, le bit en position 3 du bloc d ’entrée va
en position 4 du bloc de sortie, et le bit en position 21 du bloc d ’entrée va en positions
30 et 32 du bloc de sortie.
Bien que le bloc de sortie soit plus grand que le bloc d ’entrée, il n’existe qu’un bloc
d’entrée possible pour un bloc de sortie donné.
32 1 2 3 4 5 4 5 6 7 8 9
8 9 10 11 12 13 12 13 14 15 16 17
16 17 18 19 20 21 20 21 22 23 24 25
24 25 26 27 28 29 28 29 30 31 32 1
T ab . 12.6 - Tables-S
Table-5 1:
14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
Table-S 2 :
15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5
0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
Table-S 3:
10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
Table-S 4:
7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
Table S 5:
2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6
4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
Table-S 6 :
12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
Table S 7 :
4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
Table-S 8 :
13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11
12.2 Description du DES 293
elles fonctionnent. On peut voir chaque table-S 1 comme une permutation de quatre de
ses entrées: les bits de £>2 à 65 sont pris en entrée et il en sort un résultat de quatre
bits. Les bits bi et be proviennent des emplacements contigus; ils sont utilisés pour
sélectionner une des quatres permutations possibles de la table-S en question.
Cette étape de substitution par tables-S est cruciale dans le DES. Toutes les autres
opérations sont linéaires et faciles à analyser. Les tables-S sont non linéaires et, par
dessus tout, elles confèrent au DES son niveau de sécurité.
Cette phase de substitution donne 8 blocs de 4 bits qui sont recombinés pour former
un seul bloc de 32 bits. Ce bloc passe alors à l’étape suivante : la permutation-P.
La permutation—P
Les 32 bits de sortie des substitutions par tables .S sont permutés à l’aide d ’une table-
P. Cette table met en correspondance chaque bit de l’entrée avec un bit de sortie;
aucun bit n’est utilisé deux fois et aucun bit n’est ignoré. O 11 parlera de permutation
pure, ou tout simplementde permutation. Le tableau12.7montre à quelle position
migre chaque bit. Par exemple, le bit 21 va en position 4, tandis que le bit 4 va en
position 31.
T ab . 12.7 —Permutation-P
Ï6 7 20 21 29 12 28 Ï7 1 15 23 26 5 Ï 8 31 10
2 8 24 14 32 27 3 9 19 13 30 6 22 11 4 25
La permutation finale
La permutation finale, qui est l’inverse de la permutation initiale, est décrite par le
tableau 12.8. Notez que les parties gauche et droite ne sont pas échangées après la
dernière ronde du DES ; c ’est le bloc RieLie qui est utilisé comme entrée pour la
permutation finale. Il n’y a rien de bien particulier ici ; échanger les moitiés et décaler
la permutation donnerait exactement le même résultat ; il en est ainsi pour que le même
algorithme puisse être utilisé pour le chiffrement et le déchiffrement.
~4Ô 8 48 16 56 24 64 32 39 7 47 15 55 23 63 3F
38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25
294 Chapitre 12 Le D ES
Déchiffrement du DES
Après toutes ces substitutions, permutations, ou exclusif et décalages, vous pourriez
penser que l’algorithme de déchiffrement est totalement différent et aussi déroutant que
l’algorithme de chiffrement. Tout au contraire, les différentes opérations ont été choisies
pour offrir une propriété très utile : le même algorithme est utilisé pour le chiffrement
et le déchiffrement.
Avec le DES il est possible d’utiliser la même fonction pour chiffrer un bloc et pour le
déchiffrer. La seule différence est que les clefs doivent être utilisées dans l’ordre inverse.
Si les clefs de chiffrement de chaque ronde sont A i , A 2 , A 3 , ... , A i 6 , alors les clefs de
déchiffrement sont respectivement A 16, A 1 5 , A 1 4 , ... , K\. L’algorithme qui engendre
les clefs pour chaque ronde est également circulaire, et le nombre de décalages (vers la
droite) à effectuer devient 0 ,1 ,2 ,2 ,2 ,2 ,2 ,2 , 1 ,2 ,2 ,2 ,2 ,2 ,2 , 1 .
Plus loin dans l’article, T u c h m a n déclara: « Nous avons développé l’algorithme DES
entièrement à l’intérieur d’IBM avec des IBMistes. La NSA n’a pas dicté une seule
ligne! » T U C H M A N confirma ceci lorsqu’il présenta l’histoire du DES à la « National
Computer Security Conférence » en 1992.
D ’un autre côté, C o p p e r s m i t h a écrit [376, 379]: « La NSA a aussi apporté des
conseils techniques à IB M .» Et les propos suivant de K o n h e i m ont été rapportés:
«Nous avons envoyé nos tables S à Washington. Elles nous ont été renvoyées toutes
différentes. Nous leur avons fait subir nos tests et elles ont réussi.» Certaines personnes
ont pris cela comme une preuve que la NSA avait caché une « brèche secrète ».
Quand la NSA fut interrogée quant à toute faiblesse introduite intentionnellement dans
le DES, elle répondit [367] :
Pourquoi ont-ils alors modifié les tables-S? Peut-être pour s’assurer qu’IBM n’avait
pas caché une « brèche secrète » dans le DES. La NSA n’avait aucune raison de faire
confiance aux chercheurs d ’IBM , et aurait manqué à son devoir en n ’évitant pas toute
possiblité d ’une « brèche secrète » dans le DES. Donner les tables-S était un moyen
de s’en assurer.
Très récemment, de nouveaux résultats de cryptanalyse ont éclairé cette question sous
un autre jour, mais pendant de nombreuses années elle fut l’objet de multiples spécu
lations.
Clefs faibles
La méthode pour obtenir les sous-clefs pour chaque ronde de l’algorithme à partir
de la clef initiale implique l’existence de certaines clefs faibles [722, 428]. Rappelez-
vous que la valeur initiale est divisée en deux moitiés, chaque moitié étant décalée
indépendamment de l’autre. Si tous les bits de chaque moitié sont soit des 0, soit
des 1, alors la clef utilisée pour n’importe quel cycle de l’algorithme est la même que
pour tous les cycles de l’algorithme. Tel est le cas si la clef est constituée entièrement
de 1 ou entièrement de 0, ou si une moitié est entièrement constituée de 1 et l’autre
entièrement de 0. De plus, deux des clefs faibles ont d ’autres propriétés qui les rendent
moins sûres [428].
Les quatre clefs faibles sont données en notation hexadécimale par le tableau 12.11.
Rappelez-vous qu’un bit sur huit est un bit de contrôle de parité et que la permutation
initiale change légèrement l’ordre des bits de la clef.
De plus, il existe des paires de clefs qui chiffrent un texte en clair en un même texte
chiffré. En d ’autres termes, une clef de la paire peut être utilisée pour déchiffrer des
messages chiffrés avec l’autre clef de la paire. Ceci est dû à la méthode utilisée pour
engendrer les sous-clefs dans le DES ; au lieu d’engendrer 16 sous-clefs différentes, ces
paires de clefs n’engendrent que 2 sous-clefs différentes. Chacune de ces sous-clefs est
utilisée 8 fois dans l’algorithme. Ces clefs sont appelées clefs sem i-faibles. Elles sont
décrites dans le tableau 12.12.
Il y a aussi des clefs qui ne produisent que 4 sous-clefs différentes, chacune étant utilisée
4 fois dans l’algorithme. Ces clefs sont décrites dans le tableau 12.13.
Avant de condamner le DES parce qu’il a des clefs faibles, notez que cette liste de 64
clefs est minuscule en comparaison du nombre total de clefs possibles, à savoir :
72057594037927936.
Si vous choisissez les clefs aléatoirement, les chances d ’en choisir une parmi ces clefs
298 Chapitre 12 Le D E S
1F 1F 01 01 OE OE 01 01 EO 01 01 EO FI 01 01 FI
01 1F 1F 01 01 OE OE 01 FE 1F 01 EO FE OE 01 FI
1F 01 01 1F OE 01 01 OE FE 01 1F EO FE 01 OE FI
01 01 1F 1F 01 01 OE OE EO 1F 1F EO FI OE OE FI
FE 01 01 FE FE 01 01 FE
EO EO 01 01 FI FI 01 01 EO 1F 01 FE FI OE 01 FE
FE FE 01 01 FE FE 01 01 EO 01 1F FE FI 01 OE FE
FE EO 1F 01 FE FI OE 01 FE 1F 1F FE FE OE OE FE
EO FE 1F 01 FI FE OE 01
FE EO 01 1F FE FI 01 OE 1F FE 01 EO OE FE 01 FI
EO FE 01 1F FI FE 01 OE 01 FE 1F EO 01 FE OE FI
EO EO 1F 1F FI FI OE OE 1F EO 01 FE OE FI 01 FE
FE FE 1F 1F FE FE OE OE 01 EO 1F FE 01 FI OE FE
FE 1F EO 01 FE OE FI 01 01 01 EO EO 01 01 FI FI
EO 1F FE 01 FI OE FE 01 1F 1F EO EO OE OE FI FI
FE 01 EO 1F FE 01 FI OE 1F 01 FE EO OE 01 FE FI
EO 01 FE 1F FI 01 FE OE 01 1F FE EO 01 OE FE FI
1F 01 EO FE OE 01 FI FE
01 EO EO 01 01 FI FI 01 01 1F EO FE 01 OE FI FE
1F FE EO 01 OE FE FO 01 01 01 FE FE 01 01 FE FE
1F EO FE 01 OE FI FE 01 1F 1F FE FE OE OE FE FE
01 FE FE 01 01 FE FE 01
1F EO EO 1F OE FI FI OE FE FE EO EO FE FE FI FI
01 FE EO 1F 01 FE FI OE EO FE FE EO FI FE FE FI
01 EO FE 1F 01 FI FE OE FE EO EO FE FE FI FI FE
1F FE FE 1F OE FE FE OE EO EO FE FE FI FI FE FE
faibles sont négligeables. Si vous être vraiment paranoïaque, vous pouvez détecter les
ciels faibles lors de la génération de clefs. Certains ne pensent pas que cela en vaille la
peine. D ’autres pensent que c ’est tellement facile qu’il vaut mieux le faire.
Vous trouverez plus de détails concernant les clefs faibles et semi-faibles dans [1122].
D ’autres types de clefs faibles ont été recherchés mais aucun n’a été trouvé.
12.3 Niveau de sécurité du D E S 299
Clefs complémentaires
Prenez le complément bit à bit d’une clef ; autrement dit, remplacez tous les 0 par des
I et tous les 1 par des 0. Après cela, si la clef originale est utilisée pour chiffrer un bloc
de texte en clair, alors le chiffrement du complément du bloc de texte en clair par la
clef complémentaire donnera le complément du texte chiffré.
Si x' est le complément de x, alors l’identité est donnée comme suit :
E k {M ) = C
Cela n’a rien de mystérieux. Les sous-clefs sont combinées avec la moitiée de droite
après la permutation expansive. Cette propriété de complémentarité provient de
ce fait.
Cela veut dire qu’une attaque à textes en clair choisis contre le DES ne devra tester
que la moitié des clefs possibles : 2 55 clefs au lieu de 2 51 [1084]. B i h a m et S h a m i r
montrent [178] qu’il existe une attaque à textes en clair connus de la même complexité
avec au moins 2 3 3 textes en clair connus.
II est douteux que cela constitue une faiblesse, car la plupart des messages n’ont pas
de blocs complémentaires de texte en clair (dans un texte en clair aléatoire, les chances
sont infimes) et l’on peut conseiller aux utilisateurs de ne pas utiliser de clefs complé
mentaires.
Structure algébrique
Il y a 264! manières de mettre en correspondance tous les textes en clair possibles
de 64 bits avec tous les textes chiffrés possibles. Avec sa clef de 56 bits, l’algorithme
DES donne donc 256 (~ 1016) de ces relations. En utilisant le surchiffrement, il semble
possible d ’obtenir un plus grand nombre de ces relations. Toutefois, ceci n’est vrai que
si le DES n’a pas une certaine structure algébrique.
Si l’opération de chiffrement par le DES était interne, pour tous K\ et K 2, il existerait
A 3 tel que :
E K2 ( EK l(P )) - E K3(P)
4. Rem arquez q u ’un algorithm e de chiffrement interne est nécessairement pur, mais un algorithm e
de chiffrement pur n ’est pas forcém ent interne.
300 Chapitre 12 Le D ES
mais il fallut attendre 1992 pour que les cryptographes réussissent à prouver que le DES
n’est pas un groupe [297], C o p p e r s m i t h a affirmé que l’équipe d’IBM le savait depuis
longtemps.
Longueur de clef
La première proposition d ’IBM à la NBS avait une clef de 112 bits. Quand le DES
devint un standard, cette longueur avait été ramenée à 56 bits. De nombreux cryp
tographes préconisaient une clef longue. Leurs arguments tournaient principalement
autour de la possibilité d ’une attaque exhaustive (voir § 7.1).
En 1976 et 1977, D i f f i e et H e l l m a n démontrèrent qu’un ordinateur parallèle dédié
à l’attaque du DES pouvait retrouver la clef en un jour et coûterait 20 millions de
dollars. En 1981, D i f f i e et H e l l m a n révisèrent leurs chiffres à la hausse : deux jours
de recherche par clef et 50 millions de dollars [489]. Ils admettaient que c ’était hors de
portée de quiconque excepté les organisations telles que la NSA, mais considéraient
que d ’ici à 1990, le DES ne serait plus sûr du tout [717].
H e l l m a n [716] présenta un autre argument contre une petite taille de clef : en jouant
sur le compromis mémoire - temps de calcul dans le sens de la mémoire, il serait
possible d ’accélérer le processus de recherche. II suggérait la possibilité de calculer et
de stocker 256 résultats possibles du chiffrement d ’un même bloc de texte en clair avec
toutes les clefs possibles. Alors, pour retrouver une clef, tout ce qui restait à faire au
cryptanalyste était d ’insérer le bloc de texte en clair dans le processus de chiffrement,
de récupérer le texte chiffré et de rechercher la clef par comparaison. H e l l m a n estima
le coût d ’une telle machine à 5 millions de dollars.
Les argumentations pour ou contre l’existence d’un système permettant de casser le
DES quelque part dans les caves du Gouvernement ont continué. Plusieurs personnes
firent remarquer que le temps moyen entre deux pannes des puces DES ne serait jamais
assez grand pour garantir qu’une telle machine puisse marcher. Cette objection est
superflue comme le montre [1289]. D ’autres ont suggéré d ’accélérer encore le processus
et de réduire l’effet de pannes des puces.
Entre-temps, les réalisations matérielles du DES ont lentement approché le million de
chiffrements par seconde nécessaire pour la machine spécialisée de D i f f i e et H e l l m a n .
En 1984, des puces capables d’exécuter 256000 chiffrements par seconde ont été fabri
quées [535, 536]. En 1987, des puces qui effectuaient 512000 chiffrements par seconde
ont été développées, et une version capable de tester plus d ’un million de clefs par
seconde était faisable [740, 1575]. Et en 1993, Michael W i e n e r a conçu une machine
coûtant un million de dollars pouvant accomplir une attaque exhaustive contre le DES
en un temps moyen de 3,5 heures (voir § 7.1).
Jusqu’ici, personne n’a admis publiquement avoir construit une telle machine, bien
qu’il soit raisonnable de penser que quelqu’un en a déjà construit une. Un million de
dollars ne constitue pas une somme importante pour un pays développé.
Ce n’est qu’en 1990 que deux mathématiciens israéliens, B i h a m et S h a m i r , ont dé
couvert la cry p ta n a lyse différentielle, une technique qui écarta la question de la
longueur de clef. Avant que nous ne décrivions cette technique, énumérons quelques
autres critiques à l’encontre de la conception du DES.
12.3 Niveau de sécurité du D E S 301
Nombre de rondes
Pourquoi 16 rondes? Pourquoi pas 32? Après 5 rondes, chaque bit du texte chiffré
est une fonction de chaque bit du texte en clair et de chaque bit de la clef; et après
8 rondes, le texte chiffré est essentiellement une fonction aléatoire de chaque bit du
texte en clair et de chaque bit de la clef [1088, 1084]5. Alors pourquoi l’algorithme ne
s’arrête-t-il pas alors après 8 rondes?
Au fil des ans, il y a eu des attaques réussies contre des variantes du DES avec un
nombre de rondes réduit. Le DES avec 3 ou 4 rondes fut facilement cassé en 1982 [50].
Le DES avec 6 rondes est tombé quelques années plus tard [341]. C ’est la cryptanalyse
différentielle de B i h a m et S h a m i r qui explique également cela; avec n’importe quel
nombre de rondes inférieur à 16 le DES peut être cassé par une attaque à texte en
clair connu plus efficacement que par recherche exhaustive. L’attaque exhaustive est
certainement plus pratique, mais il est intéressant de constater que l’algorithme a
exactement 16 rondes.
« Certaines structures découvertes dans le DES ont sans doute été in
sérées pour renforcer le système contre certains types d’attaques. D’autres
structures tendent à affaiblir le système. »
Plusieurs excentricités concernant les tables - S ont vu le jour dans la littérature. Les
trois derniers bits de sortie de la quatrième table S 4 peuvent être obtenus de la
même manière que les premiers en prenant le complément de certains bits d ’entrée
[436, 438]. Deux entrées différentes, mais soigneusement choisies, peuvent produire la
même sortie [436]. Il est possible d ’obtenir la même sortie d ’une seule ronde DES en
changeant les bits de trois tables S contigües seulement [485]. S h a m i r a remarqué que
les tables-S1paraissaient déséquilibrées en quelque sorte, mais il était loin de pouvoir
utiliser cela dans une attaque [1430]6. D ’autres chercheurs ont montré que des principes
publiques de conception permettaient de générer des tables-S ayant les caractéristiques
observées [270].
Résultats supplémentaires
Il y a eu d ’autres tentatives de cryptanalyse du DES. Un cryptographe a recherché
l’absence de caractère non aléatoire sur la base de tests spectraux [561]. D ’autres cryp
tographes ont recherché des séquences de facteurs linéaires dans le DES, mais leur
attaque échouait après huit rondes [1308, 341, 533]. En 1987, une attaque non publiée
de Donald D a v ie S exploitait la façon dont la permutation expansive répète les bits
dans des tables S adjacentes ; cette attaque est elle aussi inutilisable à partir de huit
rondes [178, 441].
6. Il m entionna aussi une caractéristique de la cinquièm e ta b le -S , mais c ’est seulement après huit
ans que la cryptanalyse pu t exploiter cette caractéristique.
7. Pour le D E S, le term e « différence » est défini par l’opération de « o u e x c lu s if ». Il peut en être
autrement pou r d ’autres algorithm es.
12. J) Cryptanalyse différentielle et linéaire 303
donc aussi. B et B ' ne sont pas connus mais leur différence A B est égale à A / l 8. Voici
l’astuce : pour tous les A A possibles, toutes les valeurs de ÔC ne sont pas équiprobables.
La combinaison de A A et A C donne des indications sur les bits de A © K i et A' © Ki-
Comme A et A! sont connus, cela nous donne de l’information sur Ki.
Examinons la dernière ronde du DES. (La cryptanalyse différentielle ignore les per
mutations initiales et finales. Elles n’ont aucun effet sur l’attaque mis à part celui de
la rendre plus difficile à expliquer.) Si nous pouvons déterminer K ie, alors nous avons
48 bits de la clef9. Les 8 autres bits peuvent être obtenus par recherche exhaustive. La
cryptanalyse différentielle nous donnera /C e-
Certaines différences dans les paires de textes en clair ont de fortes chances de réap
paraître dans les paires de textes chiffrés correspondantes. On les appelle caractéris
tiques. Les caractéristiques s’étendent sur plusieurs rondes et définissent essentielle
ment un chemin à travers ces rondes. Il y a une différence en entrée de chaque ronde
et une différence en sortie avec une certaine probabilité.
Vous pouvez trouver ces caractéristiques en générant un tableau où les lignes corres
pondent aux entrées possibles (les combinaisons par ou exclusif de deux ensembles
différents de bits d’entrée), les colonnes correspondent aux différences en sorties pos
sibles, et chaque case contient le nombre de fois où une sortie particulière est obtenue
pour une entrée donnée. Vous pouvez générer un tel tableau pour chacune des huit
tables-S 1 du DES.
Par exemple la figure 12.6a donne une caractéristique d’une ronde. La différence en
entrée du côté gauche est L ; cela peut-être n’importe quoi. La différence en entrée du
côté droit est O10. Comme il n’y a pas de différence à l’entrée de la fonction résultant
de la ronde, il n’y en a pas à la sortie. Ainsi, la différence du côté gauche est L ® 0 = L,
et la différence du côté droit est 0. C ’est une caractéristiques triviale, qui est vrai avec
probabilité 1 .
La figure 12.6b donne une caractéristique moins évidente. La différence du côté gauche
est à nouveau arbitraire: L. La différence du côté droit est 0x60000000; les deux
entrées ne différent que par le premier et le troisième bits. Il y a une probabilité de
14/64 pour que la différence en sortie de ronde soit L © 0x00808200. Cela signifie que
la différence en sortie est L © 0x00808200 du côté gauche et 0x60000000 du côté droit
avec probabilité 14/64.
Des caractéristiques différentes peuvent être combinées. Et en supposant que les rondes
sont indépendantes, on peut multiplier les probabilités. La figure 12.7 combine les
deux caractéristiques décrites ci-dessus. La différence en entrée est 0x00808200 du
côté gauche et 0x60000000 du côté droit. A la fin de la première ronde, la différence
en entrée et la sortie de la fonction résultant de la ronde s’annulent, laissant une
différence en sortie de 0. Cela entre dans la deuxième ronde; la différence finale en
sortie est 0x60000000 du côté gauche et 0 du côté droit. Cette caractéristique sur deux
rondes a probabilité 16/64.
Une paire de textes en clair qui satisfait la caractéristique est une paire juste. Une
paire de textes en clair qui ne la satisfait pas est une paire fausse. Une paire juste
suggérera la bonne clef de ronde (pour la dernière ronde de la caractéristique) ; une
10. Les deux entrées ont mêm e partie droite, ce qui donne une différence égale à 0.
12-4 Cryptanalyse différentielle et linéaire 305
A=Y A=X
▼ T
A=X A =Y
X = 0x60000000
Y = 0x00808200
A vec probabilité —
64
paire fausse suggérera une clef aléatoire. Pour trouver la bonne clef, il suffit rassembler
assez d’essais pour qu’une clef soit suggérée plus souvent que les autres. En effet, la
bonne clef se démarquera des autres alternatives qui sont aléatoires.
Ainsi l’attaque différentielle brute sur le DES à n rondes produira la sous-clef de 48
bits utilisée à la ronde n, et les huit bits restants sont obtenus par recherche exhaustive.
Il reste des problèmes importants. Tout d’abord les chances de réussite sont faibles
avant d’avoir atteind un certain seuil. Avant d’avoir obtenu assez de données, vous ne
pouvez pas distinguer la bonne clef au milieu de tout le bruit. Ensuite, l’attaque est
trop lourde en pratique : il faut utiliser des compteurs pour assigner des probabilité à
2 48 sous-clefs différentes, la somme de données requise est trop importante pour que
cela puisse marcher.
B i i i a m et S h a m i r ont modifié leur attaque. Au lieu d ’utiliser une caractéristique à 15
rondes sur le DES à 16 rondes, ils ont utilisé une caractéristique à 13 rondes et quelques
astuces pour les rondes restantes. Une caractéristique plus courte avec une probabilité
plus grande fonctionnait mieux. Us utilisèrent de plus des mathématiques astucieuses
pour obtenir des clefs candidates de 56 bits qui pouvaient être testées immédiatement,
ce qui permet de se passer des compteurs. Cette attaque réussi dès que la bonne paire
est trouvée ; cela évite le seuil et donne une probabilité linéaire de succès. Si vous avez
1000 fois moins de paires, vous avez mille fois moins de chances de succès. Cela paraît
306 Chapitre 12 Le D ES
terrible, mais c ’est beaucoup mieux que le seuil. Il reste toujours une petite chance de
succès immédiat.
Les résultats sont très intéressants. Le tableau 12.14 est un résumé de l’attaque contre
le DES avec différents nombres de rondes [178].
La meilleure attaque contre le DES complet à 16 rondes nécessite 247 textes en clair
choisis. Ceci peut être converti en une attaque à texte en clair connu, mais qui néces
site 255 textes en clairs connus. De plus cela requiert 237 opérations du DES durant
l’analyse.
La cryptanalyse différentielle marche contre le DES et d ’autres algorithmes similaires
avec des tables-5 constantes. L’attaque dépend fortement de la structures des tables-
S ; il se trouve que celles du DES sont optimisées contre la cryptanalyse différentielle.
L’attaque marche contre le DES sous tous ses modes opératoires - E C B , C B C , CFB
et O F B - avec la même complexité [178].
La résistance du DES peut être améliorée en augmentant le nombre de rondes. La
cryptanalyse différentielle (à texte en clair choisi) contre le DES avec 17 ou 18 rondes
prend à peu près le même temps que la recherche exhaustive [167]. Avec 19 rondes
ou plus, la cryptanalyse différentielle devient impossible car elle nécessite plus de 2 64
textes en clair choisis : rappelez-vous que le DES utilise des blocs de 64 bits, de sorte
qu’il n’y a que 2 64 textes en clair possibles11.
Voici quelques points importants. Premièrement, l’attaque est largement théorique. Le
temps énorme et les données requises pour monter une attaque cryptanalytique diffé
rentielle mettent celle-ci hors de portée de presque tout le monde: pour collecter les
données nécessaires à cette attaque, il faut chiffrer, au taux de 1,5 mégabit par seconde,
un flot de textes en clair choisis pendant presque trois ans. Deuxièmement, ce doit être
une attaque à texte en clair choisi. La cryptanalyse différentielle marche aussi pour une
attaque à texte en clair connu, mais vous devez parcourir toutes les paires « texte en
clair-texte chiffré » pour trouver celles qui conviennent. Pour un DES complet à 16
11. En général, on prouve q u ’un algorithm e résiste à la cryptanalyse différentielle en prouvant que
le nom bre de textes en clair nécessaires pou r l'attaque est plus grand que le nom bre de textes en clair
possibles.
12. J, Cryptanalyse différentielle et linéaire 307
rondes, cela rend l’attaque légèrement moins efficace que l’attaque exhaustive (l’at
taque cryptanalytique différentielle nécessite 2 5 5 ,1 opérations et l’attaque exhaustive
255 opérations). Tout le monde admet que le DES correctement réalisé est encore sûr
par rapport à la cryptanalyse différentielle.
Pourquoi le DES est-il si résistant à la cryptanalyse différentielle? Pourquoi les tables-
S sont-elles optimisées pour rendre cette attaque aussi difficile que possible? Pourquoi
comporte-t-il le nombre de rondes nécessaires mais ni plus ni moins? Parce que les
concepteurs étaient au courant. Don C o p p e r s m i t h d’IB M a récemment écrit [376,
379] :
Le tableau 12.3 donne le nombre de bits de décalage de la clef après chaque ronde : 2
bits après chaque ronde, excepté 1 bit après les rondes 1, 2, 9 et 16. Pourquoi?
La c r y p t a n a l y s e p a r c l e f s c o r r é l é e s examine les différences entre des clefs diffé
rentes, comme la cryptanalyse différentielle. Cette attaque est différente de toutes les
attaques déjà présentées : le cryptanalyste choisit une relation entre une paire de clefs,
mais ne choisit pas les clefs elles-mêmes. Les données sont chiffrées avec les deux clefs.
Dans la version à texte en clair connu, le cryptanalyste connaît le texte en clair et le
texte chiffré de données quelconques chiffrées avec la clef. Dans la version à texte en
clair choisi, le cryptanalyste a la possibilité de choisir les textes en clair chiffrés avec
les deux clefs.
Un DES modifié, où la clef est décalée de 2 bits après chaque ronde, est moins sûr.
Eli B i h a m a développé une attaque par clefs corrélées qui casse cette variante en
utilisant 2 1 7 clefs choisies - textes en clair choisis, ou 2 3 3 clefs choisies - textes en clair
connus [165, 169].
Cette attaque n’est pas réalisable, mais elle est intéressante pour trois raisons. Tout
d’abord, c ’est la première attaque contre le système de génération de sous-clefs de
l’algorithme. Deuxièmement, cette attaque est indépendante du nombre de rondes de
l’algorithme ; elle est tout aussi efficace sur le DES à 16, 32 ou 1000 rondes. Et troisiè
mement, le DES résiste à cette attaque. Les variations dans les rotations contrecarrent
la cryptanalyse par clefs corrélées.
308 Chapitre 12 Le D E S
Cryptanalyse linéaire
La c r y p t a n a l y s e l i n é a i r e est un autre type d ’attaque cryptanalytique inventée par
Mitsuru M a t s u i [1024, 1026, 1025]. Cette attaque utilise des approximations linéaires
pour décrire l’action d’un algorithme de chiffrement par blocs (en l’occurrence, le DES).
Cela veut dire que si vous combinez par ou exclusif une partie des bits du texte en clair,
une partie des bits du texte chiffré, puis les deux résultats ensembles, vous obtenez un
simple bit qui est la combinaison par ou exclusif de certains bits de la clef. Ceci est une
approximation linéaire qui est valide avec une probabilité p. Si p ^ 1/ 2 , il est possible
d’exploiter ce biais. En rassemblant des textes en clair et leurs textes chiffrés associés,
vous pouvez devinez la valeur des bits de la clef. Plus vous rassemblez de données, plus
votre clef supposée est fiable. Plus le biais est important, plus les chances de succès
sont grandes, pour la même quantité de données.
Comment trouver de bonnes approximations linéaires pour le D E S? Trouvez de bonnes
approximations linéaires sur une ronde, puis et joignez les ensembles12. Regardons les
tables- S. Il y a 6 bits en entrée et 4 en sortie. Les bits en entrée peuvent être combinés
de 63 manière utiles (2 6 — 1), et ceux en sortie peuvent être combinés de 15 manière
utiles. Maintenant, pour chaque table-5, vous pouvez estimez pour une entrée choisie
aléatoirement la probabilté qu’une combinaison par ou exclusif en entrée soit égale à
une combinaison par ou exclusif en sortie. S’il y a une combinaison présentant un biais
assez important, alors la cryptanalyse linéaire peut marcher.
Si les approximations linéaires ne sont pas biaisées, alors elles sont valides pour 32
des 64 entrée possibles. Je vous épargne les pages de tables, mais sachez que la table-
S la plus biaisée est la cinquième. Plus précisément, le deuxième bit est égal à la
combinaison par ou exclusif des 4 bits d ’entrée pour seulement 12 entrées. Ceci se
traduit par une probabilité de 3/16, ou un biais de 5/16, et constitue le biais le plus
extrême de toutes les tables-S1. ( S h a m i r avait remarqué cela [1430], sans trouver de
moyen de l’exploiter.)
La figure 12.8 montre comment faire de cela une attaque contre la fonction résultant
d’une ronde de DES. Le bit en entrée de la cinquième table-S est f>26 13- Les 4 bits
de sortie de la cinquième table-S sont Cn, c 1 g, C19 et c2o •Nous pouvons suivre le bit
f>26 de l’entrée à la table-S. Le bit a 26 est combiné par ou exclusif au bit K z^6 de
la sous-clef pour obtenir f>26. Et le bit X n devient a 2 6 via la permutation expansive.
Après la table-S, les 4 bits de sortie deviennent via la table-P 4 des bits de sortie de la
fonction résultant de la ronde: I 3 , lg , E14 et Y25. Cela signifie que l’équation suivante
est vérifiée avec probabilité 1/2 — 5/16 :
Les approximations linéaires de différentes rondes peuvent être combinées d’une ma
nière similaire à celle présentée pour la cryptanalyse différentielle. La figure 12.9 est
une approximation sur 3 rondes avec une probabilité de 1/2 —0,0061. Chaque approxi
mation est de qualité variable : la dernière est très bonne, la première est assez bonne,
et celle du milieu est mauvaise. Mais les trois approximations sur une ronde ensembles
donnent une très bonne approximation sur trois rondes.
12. Vous pouvez à nouveau ignorer les perm utations initiale et finale qui n ’affectent pas l’ attaque.
13. Je num érote les bits de gauche à droite et de 1 à 64. M a t s l 'I n ’ a pas tenu com pte de cette
convention avec le D E S, et il num érote ses bits de droite à gauche et de 0 à 63. C ela suffirait à vous
rendre fou.
12.J, Cryptanalyse différentielle et linéaire 309
B 17
A =[3,8,14,25] B = [8 ,14,25]
contre la cryptanalyse linéaire [1027]. Selon Don COPPERSMITH [376, 379], la résistence
à la cryptanalyse linéaire « ne faisait pas parti des critères de conception du DES ».
Soit ils n’avaient pas connaissance de la cryptanalyse linéaire, soit ils connaissaient une
autre technique encore plus puissante dont le critère de résistence prenait le dessus.
La cryptanalyse linéaire est plus récente que la cryptanalyse différentielle, et elle peut
connaître plus d ’améliorations de performances durant les prochaines années. Quelques
idées sont proposées dans [1281, 801], mais il n’est pas clair qu’elles puissent être
utilisées contre le DES complet. Cependant, elles fonctionnent très bien contre les
variantes avec moins de rondes.
12.5 Les critères réels de conception 311
Directions futures
Certains travaux ont visé à étendre le concept de cryptanalyse différentielle à un niveau
plus haut de différentielles [703, 168, 938, 858, 861]. Lars K n u d s e n utilise ce qu’il
appelle les différentielles partielles pour attaquer le DES à 6 rondes ; cela nécessite 32
textes en clair choisis et 20000 chiffrement [861]. C ’est encore trop récent pour savoir
si ces extensions faciliteront l’attaque du DES à 16 rondes.
Une autre voie d ’attaque est la c r y p t a n a l y s e d i f f é r e n t i e l l e - l i n é a i r e qui consite à
combiner la cryptanalyse différentielle et la cryptanalyse linéaire. Susan L a n G F O R D
et H e l l m a n ont une attaque contre le DES à 8 rondes qui trouve 10 bits de la clef
avec une probabilité de succès de 80 avec 512 textes en clair choisis et une probabilité
de succès de 95 avec 768 textes en clair choisis [949]. Après l’attaque, une recherche
exhaustive de l’espace des clefs restantes (246 clefs possibles) est nécessaire. Si cette
attaque est comparable en temps aux attaques précédentes, elle nécessite beaucoup
moins de textes en clair. Cependant, elle ne semble pas s’étendre facilement à plus de
rondes.
Mais cette attaque est encore récente et le travail continue. Il est possible qu’il y ait
une percée dans les années à venir. Il est possible que la combinaison de cette attaque
avec la cryptanalyse différentielle de haut niveau puisse porter ses fruits. Qui sait?
Aucun bit de sortie d’une table-S' ne devrait s’approcher d’une fonction linéaire
des bits d ’entrée.
- Si l’on fixe les bits les plus à gauche et les bits les plus à droite d’une table-S1,
et si l’on fait varier les 4 bits du milieu, toutes les sorties possibles de 4 bits sont
obtenues exactement une fois.
- Si deux vecteurs d ’entrée à une table-S ne diffèrent que d ’un bit, les vecteurs de
sortie doivent différer d’au moins deux bits.
- Si deux vecteurs d’entrée à une table S ne diffèrent que par les deux bits du
milieu, les vecteurs de sortie doivent différer d’au moins deux bits.
Si deux vecteurs d’entrée à une table-S 1 diffèrent par les deux premiers bits et
sont identiques sur les deux derniers, les vecteurs de sortie ne doivent pas être
les mêmes.
- Pour toute différence non nulle entre deux vecteurs d’entrée, parmi les 32 paires
possibles de vecteurs présentant cette différence, au plus 8 doivent donner la
même différence en sortie.
Les quatre bits de sortie de la table .S' de la ronde i sont distribués de manière
que deux d’entre eux affectent les deux bits du milieu de la table-S^ de la ronde
i + 1 et que les deux autres en affectent les deux derniers bits.
- Les quatre bits de sortie de chaque table-S' affectent six autres tables S ; deux
d’entre eux n’affectent jamais la même table-S.
- Si le bit de sortie d’une table-S affecte l’un des deux bits du milieu d’une autre
table-S, alors aucun bit de sortie de cette autre table S ne peut affecter l’un des
bits du milieu de la première table-S.
L’article continue sur l’explication des critères. Il est assez facile de générer des tables-
S de nos jours, mais cela constituait une tâche hardue au début des années 1970. Une
citation de T u c h m a n révèle qu’ils ont fait des tourner des ordinateurs durant des mois
pour mitonner les tables S.
chacune des 16 rondes, cela signifie que la longueur de clef de cette variante est de 768
bits. Cette variante augmenterait radicalement la difficulté d’une attaque exhaustive
contre l’algorithme; cette attaque aurait une complexité de 2 768.
Cependant, une attaque par collisions (voir § 15.1) est possible. Cela réduit la com
plexité de l’attaque à 2 384 ; ce qui est encore assez grand pour toute exigence de sécurité
concevable.
Bien que l’utilisation de sous-clefs indépendantes contrecarre la cryptanalyse linéaire,
la cryptanalyse différentielle s’applique encore à cette variante qui peut être cassée avec
261 textes en clair choisis (voir le tableau 12.15) [174, 178]. Il semble qu’il n’existerait
aucune modification du plan de génération de clefs qui puisse rendre le DES beaucoup
plus fort.
DESX
DESX est une variante du DES de la R S A D a t a S e c u r i t y , I n c . qui a été incluse
dans le programme de courrier électronique sûr M a i l S a f e en 1986 et la « boîte à
outils » B SA FE en 1987. Le D E S X utilise une technique appelée le blanchiment (voir
§ 15.6) pour embrouiller les entrées et les sorties du DES. En plus de la clef de DES de
56 bits, le D E SX a une clef de blanchiment de 64 bits. Ces 64 bits sont combinés par
ou exclusif au texte en clair avant la première ronde du DES. 64 bits supplémentaires,
calculés à l’aide d ’une fonction à sens unique à partir de la clef totale de 1 2 0 bits, sont
combinés par ou exclusif au texte chiffré après la dernière ronde [162]. Le blanchiment
rend le D E S X nettement plus fort que le DES contre une attaque exhaustive ; l’attaque
fera 2120/n opérations avec n textes en clair connus. Il augmente aussi la sécurité face
à la cryptanalyse différentielle et à la cryptanalyse linéaire ; ces attaques nécessitent
261 textes en clair choisis et 260 textes en clair connus respectivement [1350].
crypt(3)
CRYPrr(3 ) est une variante du DES que l’on trouve dans les systèmes U NIX. Elle est
principalement utilisée comme fonction à sens unique pour les mots de passe, mais elle
est aussi parfois utilisée pour le chiffrement. A la différence du DES, CRYPT(3) a une
permutation expansive qui dépend de la clef avec 2 1 2 permutations possibles. Le but
initial était d ’empêcher l’utilisation des puces DES disponibles dans le commerce pour
construire un casseur de mots de passe.
Le DES généralisé
Le DES généralisé (G D E S pour « Generaltzed DES >) a été inventé à la fois pour ac
célérer le DES et pour renforcer l’algorithme [1386, 1387]. La taille des blocs augmente
tandis que la quantité de calcul reste constante.
La figure 12.11 donne le diagramme du G DES. Le G D E S opère sur des blocs de taille
variable de texte en clair. Les blocs à chiffrer sont divisés en q sous-blocs de 32 bits
dont le nombre exact dépend de la taille globale (il est libre, mais doit être fixé pour
chaque réalisation). En général, q est égal à la taille de bloc divisé par 32.
La fonction f est calculée une fois par ronde sur le bloc le plus à droite. Le résultat
est combiné par ou exclusif avec toutes les autres parties, qui sont alors décalées
circulairement vers la droite. Le G D E S utilise un nombre variable de rondes, n. Il y a
314 Chapitre 12 Le DES
Texte en clair
i i H i i
*o(I) V 2) *o(3) B 0(V
- “V f \ _
' ,r
t
i
x
^X 4 X
*!«> b,<3> B,(q-o
k2
■\— _ —
■ ««
« tld) (2)
B, (3)
~ ~ r~
Texte chiffré
F i g . 12.11 - Aperçu du G D ES
Les tables-S du D ES n’ont pas été optimisées contre la cryptanalyse linéaire. Il existe
de meilleures tables-S que celles qui vont avec le DES, mais choisir en aveugle de
nouvelles tables-S est une mauvaise idée.
Le tableau 12.15 [174, 176] donne la liste de quelques modifications du DES et le
nombre de textes en clair choisis nécessaires pour en faire la cryptanalyse différentielle.
Une modification non évoquée dans la liste qui consiste à combiner les moitiés de droite
et de gauche en utilisant l’addition modulo 24 au lieu du ou exclusif est 2 17 fois plus
difficile à casser que le DES [690].
Tab. 12.15 Attaques par cryptanalyse différentielle contre des variantes du DES
le o u e x c l u s i f est remplacé par l’addition ; des entrées séparées par un trait d ’union
indiquent l’intervalle du nombre de textes en clair choisis nécessaires en fonction
des nombres aléatoires.
316 Chapitre 12 Le DES
RDES
RDES est une variante du DES où l’échange des moitiés gauche et droite n’est pas
toujours fait, cela dépend de la clef [893]. Les échanges sont fixés en fonction de la clef
uniquement. Cela veut dire qu’il y a 215 possiblités pour les 15 échanges dépendants de
la clef, et que la variante ne résiste pas à la cryptanalyse différentielle [817, 894, 119].
Le R D E S possède de nombreuses clefs faibles. En fait, presque toutes les clefs sont
plus faibles qu’une clef typique du DES. Cette variante ne devrait pas être utilisée.
Une meilleure idée consiste à n ’échanger qu’à l’intérieur de la moitié de droite au début
de chaque ronde. Une autre idée préférable consiste à faire dépendre les échanges des
données en entrée au lieu d’une fonction statique de la clef. 11 y a nombre de variantes
possibles [814, 815]. Dans le R D E S-1, les échanges dépendent des données de par le
mot de 16 bits au début de chaque ronde. Dans le R D ES-2, il y a échange des octets
dépendant des données au début de chaque ronde après les échanges sur 16 bits comme
dans le R D E S-1. Et ainsi de suite jusqu’au R D ES-4. R D ES-1 est sûr à la fois contre
la cryptanalyse différentielle [815] et la cryptanalyse linéaire [1145]. On peut présumer
que le R D E S-2 et les versions suivantes le sont aussi.
snDES
Un groupe de chercheur koréens, mené par Kwangjo K i m , a essayé de trouver un jeu
de tables-S sûres de manière optimale à la fois contre la cryptanalyse différentielle et
la cryptanalyse linéaire. Leur première proposition, connue sous le nom de s2DES, fut
présentée dans [835] et on prouva qu’elle était pire que le DES en ce qui concerne la
cryptanalyse différentielle [857, 858], Leur proposition suivante, s3DES fut présentée
dans [838] et on prouva qu’elle était pire que le DES en ce qui concerne la cryptanalyse
linéaire [854, 1498, 1535, 858, 839]. B i h a m suggéra un changement mineur rendant le
.s3DES sûr à la fois contre la cryptanalyse linéaire et la cryptanalyse différentielle [172].
Le groupe est retourné à ses ordinateurs et a développé de meilleures techniques pour
la conception de tables-S [837, 840]. Ils ont proposé par la suite le s4DES [836] et le
s5DES [839, 955].
Le tableau 12.16 donne les tables-S du .s3DES avec les tables-S 1 et 2 inversées, qui
sont sûres à la fois face à la cryptanalyse différentielle et la cryptanalyse linéaire. Insérer
cette variante dans un DES triple irritera à coup sûr les cryptanalystes.
Table-S 1:
13 14 0 3 10 4 7 9 11 8 12 6 1 15 2 5
8 2 11 13 4 1 14 7 5 15 0 3 10 6 9 12
14 9 3 10 0 7 13 4 8 5 6 15 11 12 1 2
1 4 14 7 11 13 8 2 6 3 5 10 12 0 15 9
Table-S 2:
15 8 3 14 4 2 9 5 0 11 10 1 13 7 6 12
6 15 9 5 3 12 10 0 13 8 4 11 14 2 1 7
9 14 5 8 2 4 15 3 10 7 6 13 1 11 12 0
10 5 3 15 12 9 0 6 1 2 8 4 11 14 7 13
Table-S 3:
13 3 11 5 14 8 0 6 4 15 1 12 7 2 10 9
4 13 1 8 7 2 14 11 15 10 12 3 9 5 0 6
6 5 8 11 13 14 3 0 9 2 4 1 10 7 15 12
1 11 7 2 8 13 4 14 6 12 10 15 3 0 9 5
Table-S 4:
9 0 7 11 12 5 10 6 15 3 1 14 2 8 4 13
5 10 12 6 0 15 3 9 8 13 11 1 7 2 14 4
10 7 9 12 5 0 6 11 3 14 4 2 8 13 15 1
3 9 15 0 6 10 5 12 14 2 1 7 13 4 8 11
Table-S 5:
5 15 9 10 0 3 14 4 2 12 7 1 13 6 8 U
6 9 3 15 5 12 0 10 8 7 13 4 2 11 14 1
15 0 10 9 3 5 4 14 8 11 1 7 6 12 13 2
12 5 0 6 15 10 9 3 7 2 14 11 8 1 4 13
Table-S 6:
4 3 7 10 9 0 14 13 15 5 12 6 2 11 1 8
14 13 11 4 2 7 1 8 9 10 5 3 15 0 12 6
13 0 10 9 4 3 7 14 1 15 6 12 8 5 11 2
1 7 4 14 11 8 13 2 10 12 3 5 6 15 0 9
Table-S 7:
4 10 15 12 2 9 1 6 11 5 0 3 7 14 13 8
10 15 6 0 5 3 12 9 1 8 11 13 14 4 7 2
2 12 9 6 15 10 4 1 5 11 3 0 8 7 14 13
12 6 3 9 0 5 10 15 2 13 4 14 7 11 1 8
Table-S 8:
13 10 0 7 3 9 14 4 2 15 12 1 5 6 11 8
2 7 13 1 4 14 11 8 15 12 6 10 9 5 0 3
4 13 14 0 9 3 7 10 1 8 2 11 15 5 12 6
8 11 7 14 2 4 13 1 6 5 9 0 12 15 3 10
318 Chapitre 12 Le DES
3. Prendre les 32 bits restants. Combiner les quatre premiers par ou exclusif avec
chaque entrée de la table-S 1, les quatre suivants avec chaque entrée de la table-
S 2, et ainsi de suite.
% _ - _
12.7 A quel point le DES est-il sûr de nos
jours ?
La réponse est à la fois facile et difficile. Dans la réponse facile, on ne regarde que
la longueur de la clef (voir § 7.1). Une attaque exhaustive menée par une machine
spécialement dédiée à cela ne prend que 3,5 heures en moyenne et la machine ne coûte
que un million de dollars en 1993 [1599, 1600]. Le DES est si répendu qu’il est naïf de
croire que la NSA et ses homologues n’ont pas construit une telle machine. Et rappelez
vous que le coût sera divisé par 5 tous les dix ans. Le DES deviendra de moins en moins
sûr avec le temps qui passe.
Dans la réponses difficile, on essaye d ’estimer les techniques cryptanalytiques. La cryp
tanalyse différentielle était connue de la NSA longtemps avant le milieu des années
1970, quand le DES devint un standard pour la première fois. Il est naïf de croire que
les théoriciens de la NSA sont resté inactifs depuis lors ; ils ont certainement déve
loppé des techniques cryptographiques nouvelles qui s’appliquent au DES. Mais il n’y
a aucun fait, seulement des rumeurs.
Winn SCHWARTAU a écrit que la NSA avait construit une machine à casser le DES
massivement parallèle dès le milieu des années 1980 [1409]. Au moins une telle ma
chine a été construite par Harris C o r p avec un C r a y Y -M P comme superviseur. U
existe probablement une série d ’algorithmes permettant de réduire la complexité d’une
attaque exhaustive de plusieurs ordres de grandeur. Des algorithmes contextuels, ba
sés sur le fonctionnement interne du DES, peuvent éliminer des ensembles de clef
possibles sur la base de solutions partielles. Des algorithmes statistiques réduisent la
taille effective de la clef davantage encore. Et d’autres algorithmes essayent des clefs
probables— mots, code A SC II imprimable, etc. (voir § 8.1). La rumeur dit que la NSA
peut casser le DES en 3 à 15 minutes, selon la puissance de calcul dont ils disposent.
Et ces machines ne coûteraient que 50000 $ chacune en grosse quantité.
Une rumeur différente insinue que la N SA possède une large bibliothèque de textes en
clair et de textes chiffrés, ces experts peuvent effectuer une sorte de calcul statistique
et se diriger ensuite vers une batterie de disques optiques pour récupérer la clef.
12.7 A quel point le D E S est-il sûr de nos jours? 319
Ce ne sont que des rumeurs, mais elles ne me rassurent pas à propos du DES. Il a
juste été une cible trop importante pendant trop longtemps. Presque n’importe quelle
modification du DES sera plus ennuyeuse ; il se peut que l’algorithme résultant soit
plus facile à casser, mais la N SA n’aura peut-être pas les ressources pour se consacrer
au problème.
Ma recommandation est d ’utiliser la construction de B i h a m pour des tables -S’ dé
pendantes de la clef. Elle est facile à réaliser en logiciel et dans les puces qui ont des
tables- S chargeables, et elle présente les mêmes performances que le DES. Elle acroît
la résistance de l’algorithme contre une attaque exhaustive, rend les cryptanalysés dif
férentielle et linéaire plus difficiles, et donne à la N SA quelque chose d’aussi solide que
le DES— mais différente— pour s’occuper.
Chapitre 13
Autres algorithmes
de chiffrement pair blocs
13.1 Lucifer
À la fin des années 1960, IB M lança un programme de recherche en cryptographie,
du nom de L u c i f e r , mené p a r Horst F e i s t e l puis p a r Walt T u c h m a n . L u c i f e r est
aussi un algorithme de chiffrement par blocs né de ce projet au début des années 1970
[1489, 1491], En fait, il existe au moins deux algorithmes différents portant ce nom
[554, 1499]. Et [554] laissait quelques lacunes dans les spécifications. Tout cela a créé
pas mal de confusion.
LU CIFER est un réseau de substitution-permutation constitué de briques de base simi
laires au DES. Dans le DES, la sortie de la fonction / est combinée par ou exclusif
avec l’entrée de la ronde précédente, ce qui donne l’entrée de la ronde suivante. Les
tables- S de L u c i f e r prennent quatre bits en entrée et quatre bits en sortie ; l’entrée
des tables-S est une permutation au niveau des bits de la sortie des tables-S de la
ronde précédente ; l’entrée des tables-S de la première ronde est le texte en clair. Un bit
de la clef est utilisé pour choisir la table-S à utiliser parmi deux tables-S possibles1.
Contrairement au D ES, il n’y a pas de moyens d’échange entre les rondes, et les blocs
ne sont pas coupés en deux. L u c i f e r est doté de 16 rondes, des blocs de 128 bits, et
d’une gestion de clef plus simple que celle du DES.
En utilisant la cryptanalyse différentielle contre la première version de L u c i f e r , B i h a m
et S i i a m i r ont montré que L u c i f e r avec des blocs de 32 bits et 8 rondes pouvait
être cassé par 40 textes en clair choisis et 229 étapes; la même attaque peut casser
L u c i f e r avec des blocs de 128 bits et 8 rondes par 60 textes en clair choisis et 253
étapes. Une autre attaque cryptanalytique différentielle cassa L u c i f e r à 128 bits et
18 rondes par 24 textes en clair choisis et 221 étapes. Toutes ces attaques utilisent les
tables-S1solides du DES. En utilisant la cryptanalyse différentielle contre la deuxième
mouture, ils trouvèrent que les tables-S1 étaient nettement plus faibles que celles du
DES. Des analyses plus poussées ont montré que plus de la moitié des clefs possibles
n’étaient pas sûres [119]. L’attaque à clefs corrélées peut casser L u c i f e r à 128 bits,
1. Dans L u c ife r , cela est représenté par une seule t a b le -T avec 9 bits en entrée et 8 bits en sortie.
322 Chapitre 13 Autres algorithmes de chiffrement par blocs
avec n’importe quel nombre de rondes, par 233 clefs choisies-textes en clair choisis ou
par 265 clefs choisies-textes en clair connus [165]. La deuxième version de L u c ife r est
encore moins fiable [177, 178, 119].
Certaines personnes croient que L u c i f e r est plus sûr que le DES à cause de la longueur
de la clef et du manque de résultats publiés. Ce n’est clairement pas le cas.
Aux Etats-Unis, L u c i f e r est couvert par plusieurs brevets : [555, 557, 556, 1490]. Tous
ont expiré.
13.2 Madryga
W.E. M adryga pro po sa cet algorithm e de chiffrem ent p a r blocs en 1984 [1008]. Il
est efficace p o u r des réalisations logicielles : il n ’y a pas de perm utations gênantes, et
toutes les opérations sont effectuées sur des octets.
Ses objectifs de conception méritent d ’être cités :
1. Le texte en clair ne peut pas être obtenu à partir du texte chiffré sans l’usage de
la clef. (Cela veut seulement dire que l’algorithme est sûr.)
4. Un changement d’un bit de la clef doit produire des changements radicaux dans
le texte chiffré d ’un même texte en clair, et un changement d’un bit du texte en
clair doit produire des changements radicaux dans le texte chiffré avec une même
clef. (On appelle cela l’effet d’avalanche.)
7. Des groupes de bits redondants dans le texte en clair doivent être complètement
masqués dans le texte chiffré.
8. La longueur du texte chiffré doit être la même que celle du texte en clair.
9. Il ne doit pas y avoir la moindre relation simple entre les clefs possibles et leurs
effets sur le texte chiffré.
10. Toutes les clefs possibles doivent donner un système de chiffrement sûr. (Il ne
doit pas y avoir de clefs faibles.)
11. La longueur de la clef et celle du texte doivent être ajustables pour satisfaire les
exigences des applications et les niveaux de sécurité requis.
13.2 M adryga 323
12. L ’algorithme doit être réalisable efficacement sur les gros ordinateurs centraux,
les mini-ordinateurs, les micro-ordinateurs et sur les dispositifs logiques2.
Le DES satisfaisait déjà les objectifs 1 à 9, mais les trois derniers étaient neufs. En
faisant l’hypothèse que le meilleur moyen d ’attaquer l’algorithme est l’attaque exhaus
tive, la longueur de clef variable devait certainement faire taire les objections de ceux
qui pensaient qu’une clef de 56 bits était trop courte. Ils pouvaient réaliser l’algorithme
avec la longueur de clefs qu’ils désiraient. Et, pour tout ceux qui avaient déjà essayé
une réalisation logicielle du DES, un algorithme qui tenait compte des réalisations
logicielles était le bienvenu.
Description de Madryga
M a d r y g a a deux cycles imbriqués. Le cycle externe est répété 8 fois (bien que ce
nombre puisse être augmenté si la sécurité le justifie) et consiste en une application du
cycle interne au texte en clair. Le cycle interne est celui qui transforme le texte en clair
en texte chiffré et il est répété une fois pour chaque bloc de 8 bits (octet) du texte en
clair. Donc, cet algorithme passe 8 fois successivement sur tout le texte en clair.
Une itération du cycle interne opère sur une fenêtre de 3 octets de données, appelée le
cadre courant (voir la ligure 13.1). Cette fenêtre avance d ’un octet à chaque itéra
tion3. Les 2 premiers octets du cadre courant sont décalés circulairement ensemble d’un
nombre de positions variable, tandis que le dernier octet est combiné par ou exclusif
avec certains bits de la clef. A mesure que le cadre courant avance, tous les octets sont
successivement décalés circulairement et combinés par ou exclusif avec les éléments de
la clef. Les rotations successives se superposent avec les résultats des ou exclusif et
des rotations précédentes, et les résultats du ou exclusif sont utilisés pour influencer
la rotation. Cela rend tout le processus réversible.
Comme chaque octet influence les 2 octets à sa gauche et un octet à sa droite, après
8 passes chaque octet du texte chiffré dépend des 16 octets à sa gauche et des 8 octets
à sa droite.
Lors du chiffrement, chaque itération du cycle interne démarre le cadre courant à
l’avant-dernier octet du texte en clair et avance circulairement jusqu’au troisième oc
tet avant la fin. Tout d ’abord, la clef entière est combinée par ou exclusif avec une
constante aléatoire, puis décalée circulairement à gauche de 3 bits. Les 3 bits de poids
faible de l’octet de poids faible du cadre courant sont mémorisés ; ils contrôleront la
rotation des 2 autres octets. Après cela, l’octet de poids faible du cadre courant est
combiné par ou exclusif avec l’octet de poids faible de la clef. Ensuite, les 2 octets de
poids fort sont décalés ensemble circulairement vers la gauche d’un nombre variable de
bits (de 0 à 7). Enfin, le cadre courant est décalé vers la droite d ’un octet et tout le
processus est répété.
Le rôle de la constante aléatoire est de transformer la clef, quelle qu’elle soit, en une
suite pseudo-aléatoire. La longueur de cette constante doit être égale à la longueur de
la clef, et doit être la même pour tous ceux qui veulent communiquer entre eux. Pour
une clef de 64 bits, M a d r y g a recommande la constante : 0x0FlE2D3C4B5A6978.
Le déchiffrement est le processus inverse. Chaque itération du cycle interne démarre le
cadre courant au troisième octet avant la fin du texte chiffré, et avance circulairement
2. En fait, les fonctions utilisées dans l’algorithm e se limitent au o u e x c lu s if et aux décalages.
3. Les données sont considérées com m e circulaires quand on traite les 2 derniers octets.
324 Chapitre 13 Autres algorithmes de chiffrement par blocs
Déplacement
du cadre WF(1) WF(2) WF(3)
courant
8 bits 8 bits 8 bits
RQT
Amplitude
Transposition Mot à décaler
-du décalage
16 bits 3 bits
Translation
' 8 bits
\ ©
Clef 1 2 3 KL
® i
Empreinte 1 2 3 KL
de clef
dans la direction inverse jusqu’au deuxième octet avant la fin du texte chiffré. La clef
et les 2 octets de texte chiffré sont décalés vers la droite. Et le ou exclusif est effectué
avec les rotations.
Cryptanalyse de Madryga
Les chercheurs de la « Queensland. University of Technology » [676] ont examiné
M a d r y g a ainsi que d’autres algorithmes de chiffrement par blocs. Ils observèrent que
l’algorithme ne montrait pas de signes d ’effet d ’avalanche texte en clair-texte chiffré.
De plus, il y avait un plus haut pourcentage de 1 que de 0 dans leurs textes chiffrés de
test.
Bien que je ne connaisse pas d’analyse formelle de l’algorithme, une évaluation rapide
faite par Eli B i i i a m concluait ainsi [167] :
L’algorithme ne contient que des opérations linéaires (rotations et ou ex
clusif), qui sont légèrement modifiées en fonction des données.
Il n’y a rien qui vaille les solides tables-S du DES.
De plus, la parité de tous les bits du texte en clair et du texte chiffré est
une constante qui ne dépend que de la clef. Donc, si vous avez un texte en
clair et son texte chiffré correspondant, vous pouvez prédire la parité du
texte chiffré de n’importe quel texte en clair.
Rien de bien accablant en soi, mais cela ne me laisse pas une bonne impression de cet
algorithme. J’éviterais d ’utiliser M a d r y g a .
13.3 New DES 325
13.3 NewDES
Le N ew D E S a été conçu en 1985 par Robert S c o t t comme une alternative possible
au DES [1410, 368]. L’algorithme n’est pas une variante du DES comme son nom
pourrait le laisser entendre. Il manipule des blocs de 64 bits de texte en clair mais
il a une clef de 120 bits. Il est plus simple que le DES : il n’y a pas de permutations
initiale ni finale, et toutes les opérations sont sur des octets entiers -— à aucun moment,
l’algorithme ne lit, n’écrit ou ne permute le moindre bit individuellement. (En réalité,
NewDES n’a rien à voir avec une nouvelle version du DES, le nom est malheureux.)
Le bloc de texte en clair est divisé en sous-blocs de 8 octets: Bo, B\, ... , Be, B7.
Ensuite les blocs sont soumis à 17 rondes. Chaque ronde a 8 étapes. A chaque étape,
un des sous-blocs est combiné par ou exclusif avec une partie de la clef (il y a une
exception), remplacé par un autre octet calculé par une fonction / et ensuite combiné
par ou exclusif avec un autre sous-bloc pour devenir ce sous-bloc. La clef de 120 bits
de long est divisée en 15 sous-blocs: K 0, K i, ... , A i 3 , K\4. Le processus est plus facile
à comprendre visuellement qu’à décrire. La figure 13.2 décrit l’algorithme N ewDES.
La fonction f est obtenue à partir de la Déclaration d’indépendance américaine.
Voir [1410] pour une description plus détaillée.
S c o t t a montré que chaque bit du texte en clair affecte chaque bit du texte chiffré
après seulement 7 rondes. Il a aussi analysé la fonction f et n’a pas trouvé de défauts
évidents. Charles C o N N E L L [222] a remarqué que le N ew D E S a la même propriété
de complémentarité de clef que le DES : si E k { A4) = C alors E K>(A4') — C'. Cela
réduit le nombre d’étapes nécessaires pour une attaque exhaustive de 2 120 à 2 119.
B i h a m a remarqué que tout changement d ’un octet entier, appliqué à tous les octets
de la clef et, tous les octets de données excepté B 5, jouit d’une autre propriété de
complémentarité [167]. Ce qui réduit le nombre d’étapes nécessaires pour une attaque
exhaustive à 2 112.
Ce n’est pas bien inquiétant, mais l’attaque à clefs corrélées de B i h a m peut casser
NewDES avec 233 clefs choisies— textes en clair choisis en 24s étapes [114]. Bien que
cette attaque soit coûteuse en temps de calcul et largement théorique, elle rend le
NewDES nettement plus faible que le DES.
13.4 FEAL
FEAL a été conçu par Akihiro S h i m i z u et Shoji M i y a g u c h i , de N T T J a p o n [1442].
Il utilise une taille de blocs de 64 bits et une clef de 64 bits. L ’idée était de concevoir
un algorithme similaire au D ES mais où chaque ronde serait plus sûre que le DES.
Avec moins de rondes, l’algorithme irait plus vite. Malheureusement, la réalité est bien
en deçà des buts de conception.
Description de FEAL
La figure 13.3 donne le schéma d ’une ronde de l’algorithme. Le processus démarre avec
un bloc de 64 bits de données (soit du texte en clair, soit du texte chiffré). Au départ,
le bloc de données est combiné par ou exclusif avec les 64 bits de la clef. Ensuite le bloc
de données est coupé en deux moitiés (gauche et droite). La moitié gauche est combinée
par ou exclusif avec la moitié droite pour donner une nouvelle moitié droite, et les deux
326 Chapitre 13 Autres algorithmes de chiffrement par blocs
moitiés passent à travers n rondes (4 à l’origine). À chaque ronde la moitié droite est
combinée avec 16 bits dérivés de la clef (en utilisant la fonction / ) et combinée par ou
exclusif avec la moitié gauche pour former la nouvelle moitié droite. La moitié droite
originale (avant la ronde) forme la nouvelle moitié gauche. Après n rondes (rappelez-
vous de ne pas échanger les moitiés gauche et droite après la ne ronde) la moitié gauche
est à nouveau combinée par ou exclusif avec la moitié droite pour former une nouvelle
moitié droite et ensuite les moitiés gauche et droite sont assemblées pour former un
134 FEAL 327
tout de 64 bits. Le bloc de données est combiné par ou exclusif avec 64 bits dérivés de
la clef, et l’algorithme se termine.
L 0 { f l8 } R 0 {L&]
L 1 {/? 7}
£ K\{ K6]
Rl { L7]
f
L7{ Rl )
£ K7[ K0}
R 7 { L 1}
f
R8{ L0} ■0
L 8 {/? 0 }
64 bits (K 12, K 13, K 14, K 15)
- { ( K 8 , K 9, K 10, K 1 1 )}
{}: Déchiffrement
(^Texte chiffré {Texte en clair}^)
So «0
f (a, b) ai , a
TlX e * — ©■ a2
32 bits
Cl\, b j . 8 bits
Remarquez que a est partagé en 4 sous - chaînes de 8 bits a,, a2, a3, a4.
F i g . 13.4 - Fonction f
comme indiqué. So et Si sont définies comme ci-dessus. Les blocs de 16 bits de clef
sont alors utilisés dans l’algorithme de chiffrement/déchiffrement.
Sur un processeur 80286 cadencé à 10 MHz, une réalisation en assembleur de F E A L -
32 peut chiffrer les données à la vitesse de 220 kilo-bits par seconde. F E A L - 64 peut
chiffrer à la vitesse de 120 kilo-bits par seconde [1110].
a 32 bits
f K («’b>
50 (X, ,X2 ) = rot2((X, + X2 ) mod 256)
5 i (X ,,X 2) = rot2((X, + X2 + 1 ) mod 256)
Xj et X2 : entrées de 8 bits
SQet Si : résultats de 8 bits
r o t2 (r ) : décalage circulaire à gauche de 2 bits de T
F ig . 13.6 - Fonction fk
Cryptanalyse de FEAL
FEAL avec 4 rondes, appelé F E A L -4 , a été cryptanalysé avec succès au moyen d’une
attaque à texte en clair choisi [458] et a été démoli par la suite [1139]. Cette dernière
attaque, lancée par Sean M u r p h y , a été la première attaque par cryptanalyse dif
férentielle publiée et n’avait recours qu’à 20 textes en clair choisis. Les concepteurs
revinrent à la charge avec un F E A L à 8 rondes [1443, 1444, 1114] dont cryptanalyse
fut annoncée à la conférence SECURICOM’89 par B i h a m et S h a m i r [1419]. Une autre
attaque à texte en clair choisi utilisant 10000 chiffrements [612] obligea les concepteurs
à abandonner F E A L —8 et à concevoir F E A L -N [1109, 1110] avec un nombre variable
de rondes (plus grand que 8, bien sûr).
B i h a m et S h a m i r appliquèrent leurs techniques de cryptanalyse différentielle contre
FE A L -N et trouvèrent q u ’ils pouvaient casser F E A L -N plus rapidem ent que par
recherche exhaustive (avec m oins de 264 chiffrements de textes en clair choisis) pour
les versions de l ’algorithm e avec m oins de 32 rondes [176]. Il fallait 228 textes en clair
choisis ou 246,5 textes en cla ir connus p o u r casser F E A L -16. Il fallait 2000 textes en
clair choisis ou 237,5 textes en cla ir connus p o u r casser F E A L - 8. F E A L -4 peut être
cassé avec seulement 8 textes en cla ir choisis, sélectionnés soigneusement.
Les concepteurs de F E A L ont aussi défini F E A L —N X, une variante de FE A L, pour
accepter des clefs de 128 bits (voir la figure 13.7) [1107, 1110]. B i h a m et S h a m i r ont
montré que F E A L -N X avec une clef de 128 bits est aussi facile à casser que F E A L -N
avec une clef de 64 bits, quelle que soit la valeur de N [176]. Récemment, F E A L -N (X )S
330 Chapitre 13 Autres algorithmes de chiffrement par blocs
Il y a plus. Une autre attaque contre F E A L -4 ne nécessitant que 1000 textes en clair
connus et ne nécessitant que 20 000 textes en clair connus contre F E A L -8 fut publiées
dans [1524]. D ’autres attaques se trouvent dans [1557, 1558]. L a meilleure attaque, est
celle de Mitsuru M a t s u i et Atsuhiro Y a m a g i s h i [1028]. C ’est la première utilisation
de la cryptanalyse linéaire et elle peut casser F E A L -4 avec 5 textes en clair connus,
13.5 REDOC 331
FEAL -6 avec 100 textes en clair connus, et F E A L —8 avec 215 textes en clair connus.
Chaque fois que quelqu’un trouve une nouvelle attaque cryptanalytique, il semble qu’il
assaye toujours sur F E A L en premier.
Brevets
FEAL est breveté aux Etats-Unis [1445] et des brevets sont en attente en Angleterre,
en France et en Allemagne. Toute personne désirant une licence pour cet algorithme
doit contacter: Intellectual Property Department, NTT, 1-6 Uchisaiwai-cho,
1-chome, Chiyada-ku, 100 Japan.
13.5 REDOC
REDOC II est un autre algorithme de chiffrement par blocs, conçu par Michael W O O D
pour C r y p t e c h , I n c . [887, 234]. Il a une clef de 20 octets (160 bits) et manipule des
blocs de 80 bits.
REDOC II effectue toutes ses manipulations — permutations, substitutions, ou ex
clusif avec la clef — au niveau des octets, ce qui rend l’algorithme très efficace en
logiciel. R E D O C II utilise des tables de fonctions variables. Contrairement au DES,
qui a un ensemble fixe de tables de permutation et substitution (bien qu’optimisées
pour la sécurité), R E D O C II utilise un ensemble de tables dépendantes de la clef et
du texte en clair (des tables-S1en réalité). R E D O C II se déroule en 10 rondes ; chaque
ronde est une série compliquée de manipulations sur les blocs.
Une autre caractéristique unique de sa conception est l’utilisation de masques. Ce
sont des nombres dérivés de la table de clefs, qui sont utilisés dans le choix des tables
pour une fonction donnée d ’une ronde donnée. La valeur des données et la valeur des
masques sont toutes deux utilisées pour sélectionner les tables de fonction.
En faisant l’hypothèse que l’attaque exhaustive est la plus efficace, R E D O C II est très
sûr: 2160 opérations sont nécessaires pour retrouver la clef. Thomas C u s iC K a cryp-
tanalysé une ronde de R E D O C II, mais n’a pas été capable d’étendre cette attaque
à plusieurs rondes [404]. En utilisant la cryptanalyse différentielle, B i h a m et S h a m i r
ont réussi, à cryptanalyser une ronde de R E D O C II avec 2300 textes en clair choi
sis [177], mais cette attaque ne peut pas être étendue à plusieurs rondes. Ils parvinrent
également à obtenir la valeur de 3 masques après 4 rondes mais cette attaque ne peut
pas être étendue non plus.
REDOC III
RED O C III est une version rationalisée de R E D O C II, également conçue par Michael
W o o d [1617]. Elle manipule des blocs de 80 bits. La longueur de clef est variable et peut
atteindre 2 560 octets (20480 bits). Cet algorithme ne comporte que des ou exclusif des
octets de la clef avec des octets du message ; il n’y a ni permutations ni substitutions.
1. Créez une table de clef de 256 clefs de 10 octets en utilisant la clef secrète.
Cet algorithme est simple et rapide. Avec un processeur 80386 cadencé à 33 MHz,
l’algorithme chiffre les données à 2,75 mégabits par seconde. W o o d a estimé qu’une
conception VLSI avec pipelines, avec un chemin de données de 64 bits devrait être
capable de chiffrer les données à plus de 1,28 gigabit par seconde avec une horloge
cadencée à 20 MHz.
R E D O C III n’a pas un bon niveau de sécurité [1446], Il est vulnérable à la cryptanalyse
différentielle. Il suffit seulement de 223 textes en clair choisi environ pour reconstruire
les deux masques.
Brevets et licences
Les deux versions de R E D O C sont brevetées aux États-Unis [1616). Des brevets
à l’étranger sont en attente. Toute personne désireuse d ’obtenir une licence pour
R E D O C II ou R E D O C III doit contacter: Michael C. Wood, Delta Computec,
Inc., 6647 Old Thompson Rd., Syracuse, NY 13211.
13.6 LOKI
L O K I est australien et fut présenté en 1990 comme une alternative potentielle au
DES [278]. Il utilise des blocs de 64 bits et une clef de 64 bits. La structure générale
de l’algorithme et la gestion des clefs étaient basés sur [277, 279], et la conception des
tables-S1étaient basées sur [1257].
En utilisant la cryptanalyse différentielle, B i h a m et S h a m i r sont parvenus à casser
L O K I avec 11 rondes ou moins, plus vite que par attaque exhaustive [177]. De plus,
il existe une propriété de complémentarité par 8 bits qui réduit la complexité d’une
attaque exhaustive par un facteur 256 [177, 917, 918].
Lars K n u d se n a montré que LO K I, avec 14 rondes ou moins, est vulnérable à la cryp
tanalyse différentielle [853, 855]. De plus, si L O K I est réalisé avec d’autres tables-S', il
13.6 LO KI 333
LOKI91
En réponse à ces attaques, les concepteurs de LO K I retournèrent à la planche à dessin
et révisèrent leur algorithme. Le résultat est LOKI91 [276]4.
Pour rendre l’algorithme plus résistant à la cryptanalyse différentielle et pour supprimer
la propriété de complémentarité de la clef, les modifications suivantes ont été apportées :
1. L’algorithme de génération des sous-clefs a été changé de telle manière que les
moitiés sont échangées une ronde sur deux au heu de toutes les rondes.
2. L’algorithme de génération des sous-clefs a été changé de telle façon que le déca
lage circulaire de la sous-clef de gauche soit alternativement de 12 et 13 bits vers
la gauche.
3. Les ou exclusif initial et final du bloc avec la clef ont été supprimés.
4. Les tables-S1ont été modifiées pour mettre en ordre leurs propriétés vis à vis du
ou exclusif (pour augmenter leur résistence à la cryptanalyse différentielle), et
pour éliminer toute valeur x telle que f(x ) = 0 où f est la fonction résultant de
la combinaison des tables- E, des tables-s et des tables -P.
Description de LOKI
Le mécanisme de L O K I est similaire à celui du DES (voir la figure 13.8). Le bloc de
données est divisé en une moitié gauche et une moitié droite, puis soumis à 16 rondes,
tout comme dans le DES. A chaque ronde, la moitié droite est d’abord combinée par ou
exclusif avec un morceau de la clef, puis envoyé à travers une permutation expansive
(voir tableau 13.1).
3 2 1 32 31 20 29 28 27 26 25~
28 27 26 25 24 23 22 21 20 19 18 17
20 19 18 17 16 15 14 13 12 11 10 9
12 11 10 9 8 7 6 5 4 3 2 1
Les 48 bits de sortie sont divisés en quatre blocs de 12 bits et chaque bloc passe à
travers une table-S1de substitution. La table-S fonctionne ainsi : prenez chaque entrée
de 12 bits ; utilisez les deux bits de gauche et les deux bits de droite pour former le
nombre r, et les huits bits du centre pour former le nombre c. La sortie O de la table-S
est la suivante :
Ensuite, les quatres sorties de huit bits sont assemblées pour former un nombre d{
32 bits qui est envoyé à travers la permutation décrite dans le tableau 13.3. Enfin, Ie
moitié droite est combinée par ou exclusif avec la moitié gauche pour devenir la moitié
gauche, et la moitié gauche devient la nouvelle moitié droite. Après 16 rondes, le bloc
est à nouveau combiné par ou exclusif avec la clef pour produire le texte chiffré.
Les sous-clefs sont engendrées à partir d e la clef de manière simple. Tout d’abord, le
clef de 64 bits est divisée en une moitié gauche et une moitié droite. A chaque ronde, le
sous-clef est la moitié gauche. Cette moitié gauche est décalée circulairement de 12 or
T a b . 13 .2 - Pr
r: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Pr : 375 379 391 395 397 415 419 425 433 445 451 463 471 477 487 488
13.7 K hufu et K h a f r e 335
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Pr : 375 279 391 395 397 415 419 425 433 445 451 463 471 477 487 488
13 bits vers la gauche, et ensuite les moitiés gauche et droite sont échangées toutes les
deux rondes. Tout comme pour le DES, le même algorithme peut être à la fois utilisé
pour le chiffrement et le déchiffrement, avec quelques modifications quant à l’utilisation
des sous-clefs.
Cryptanalyse de LOKI91
Lars K n u d se n a essayé de cryptanalyser LO K I91 [856, 858]. Il ne parvint pas à
utiliser la cryptanalyse différentielle contre l’algorithme révisé. Toutefois, il a trouvé
une attaque à texte en clair choisi qui réduit la complexité d ’une attaque exhaustive
par îm facteur de presque 4. Cette attaque exploite une faiblesse du plan de génération
de clefs, qui est également une faiblesse si l’algorithme est utilisé comme fonction de
hachage à sens unique.
Une autre attaque à clef corrélée de peut casser LOKI91 avec 232 clefs choisies-textes
en clair choisis ou 248 clefs choisies-textes en clair connus [165]. Cette attaque est
indépendante du nombre de rondes de l’algorithme. (Dans le même article, B ih a m
casse LO K I89 avec 217 textes en clair choisis ou 233 textes en clair connus.) U est facile
de rendre LO K I91 résistant à cette attaque ; il suffit d ’éviter le plan de génération de
clefs simple.
Brevets et licences
LOKI n’est pas breveté. Tout le monde peut le réaliser et l’utiliser. Le code source de
la réalisation donnée dans ce livre est protégée par le copyright de l’« University of
New South Wales ». Toute personne intéressée par l’utilisation commerciale de cette
réalisation (ou une autre réalisation plus rapide de plusieurs ordres de grandeur) doit
contacter: Director CITRAD, Department of Computer Science, University
Collège, UNSW, Australian Defense Force Academy, Canberra ACT 2600,
Australia, Fax : +61-6-268-8581.
1. La taille de 56 bits de la clef DES est trop petite. Compte tenu du coût négligeable
de l’augmentation de la taille de la clef (la mémoire est bon marché et disponible
à volonté), celle-ci doit être augmentée.
2. Bien que l’utilisation intensive de permutations dans le DES convienne bien aux
réalisations matérielles, elles sont très difficiles pour les réalisations logicielles.
Les réalisations logicielles les plus rapides du DES utilisent des techniques de
336 Chapitre 13 Autres algorithmes de chiffrement par blocs
recherche dans des tables pour réaliser les permutations. De telles techniques
peuvent donner les mêmes caractéristiques de « diffusion » que les permutations
et tout en étant plus flexibles.
3. Les tables-S du DES sont petites, avec seulement 64 entrées de 4 bits par table.
Maintenant que les mémoires sont plus grandes, les tables- S' doivent grandir.
De plus, les 8 tables - S sont utilisées simultanément. Bien que cela convienne
pour une réalisation matérielle, cela semble une restriction déraisonnable en logi
ciel. Une taille de table-S plus grande et une utilisation séquentielle (plutôt que
parallèle) des tables S doivent être employées.
5. Toutes les réalisations rapides du DES précalculent les clefs de chaque ronde.
Donc, il n’y a pas de raison de ne pas rendre ce calcul plus compliqué.
Khufu
K h u f u est un chiffrement p a r blocs de 64 bits. Les 64 bits de texte en clair sont
d’abord divisés en deux moitiés de 32 bits, G et D , qui sont combinées par ou exclusif
avec des clefs dérivées. Ensuite, elles sont l’objet d’une suite de rondes similaires au
DES. A chaque ronde, l’octet de poids le plus faible de G est utilisé comme entrée
d’une table S de 256 entrées. Chaque cellule de table -S a une longueur de 32 bits. La
cellule de 32 bits sélectionnée dans la table-S est combinée par ou exclusif avec R. L
est ensuite décalé circulairement d ’un multiple de 8 bits, L et R sont échangés et la
ronde se termine. La table-S elle-même n’est pas statique, mais change toutes les 8
rondes. Finalement, après la dernière ronde, L et R sont combinés par ou exclusif avec
des clefs dérivées et recombinés pour former le texte chiffré.
Bien que des parties de la clef soient combinées par ou exclusif avec le bloc chiffré au
début et à la fin, le but principal de la clef est d’engendrer les tables-S. Ces tables-S
sont secrètes et, par essence, font partie de la clef. L’algorithme de M e r k l e a besoin
d’une clef de longueur totale de 512 bits (64 octets) et il fournit un algorithme pour
engendrer les tables-S' à partir de la clef. Le nombre de rondes de l’algorithme est libre
M e r k l e fit remarquer que le K h u f u à 8 rondes est sensible à une attaque à textes
en clair choisis et recommandait 16, 24 ou 32 rondes [1077]. (Il a limité le choix du
nombre de rondes à un multiple de 8).
Comme K h u f u a des tables S dépendantes de la clef et secrètes, il est immune à
la cryptanalyse différentielle. Il existe une attaque différentielle contre le K h u f u à
16 rondes qui trouve la clef à l’aide de 231 textes en clair choisis [613], mais elle ne
s’applique pas avec plus de rondes. Si une attaque exhaustive est le meilleur moyen
d ’attaquer K h u f u , il est incroyablement difficile à casser. Une clef de 512 bits donne
une complexité de 2512 inconcevable dans toutes les circonstances
13.8 RC2 337
Khafre
Khafre est le second des cryptosystèmes proposés par M e r k l e [1077]5. Le schéma
de conception est similaire à celui de K h u f u , excepté qu’il a été conçu pour des appli
cations où il n’y a pas de temps de précalcul. Les tables-é> ne dépendent pas de la clef.
K h a f r e utilise des tables S fixées. De plus, la clef est combinée par ou exclusif avec
le bloc chiffré non seulement avant la première ronde et après la dernière, mais aussi
toutes les 8 rondes de chiffrement.
M e r k l e postula que des clefs de 64 ou 128 bits seraient utilisées pour K h a f r e et
que plus de rondes seraient nécessaires pour K h a f r e que pour K H U F U . Ceci, combiné
avec le fait que chaque ronde de K h a f r e est plus compliquée que pour K h u f u , rend
K h a f r e plus lent. En compensation, K h a f r e ne nécessite pas de précalcul et chiffre
des petites quantités de données plus rapidement.
En 1990, B i i i a m et S h a m i r utilisèrent leurs techniques de cryptanalyse différentielle
contre K h a f r e [177]. Ils réussirent à casser K h a f r e à 16 rondes avec une attaque
à texte en clair choisi qui utilise environ 1500 chiffrements différents. Cela leur prit
environ une heure, en utilisant un ordinateur personnel. Convertir cette attaque en
une attaque à texte en clair connu nécessiterait environ 238 chiffrements. KHAFRE à 24
rondes peut être cassé par une attaque à texte en clair choisi à l’aide de 253 chiffrements
et, par une attaque à texte en clair connu à l’aide de 259 chiffrements.
Brevets
K h u f u et K h a f r e sont tous deux brevetés [1078]. Le code source des algorithmes se
trouve dans les brevets. Toute personne désirant acquérir une licence pour l’un des al
gorithmes doit contacter : D ire c to r o f L ic e n s in g , Xerox C orp oration , P.O. Box
1600, Stam ford, CT, 0 6 9 0 4-1 60 0 .
13.8 RC2
R.C2 est un algorithme de chiffrement à clef de taille variable conçu par Ron R i v e s t
pour la société R S A D a t a S e c u r i t y , I n c . (R S A D S I). Apparemment, « R C » est
l’abréviation de « Ron’s Code » (« le code de Ron ») bien qu’officiellement il s’agisse
de celle de « Rivest’s Code » (« le code de Rivest » ) 6. Il s’agit dun algorithme « privé »
et sa description n’a pas été publiée. Ne pensez pas un seul instant que cela accroisse
la sécurité. R C2 a déjà été utilisé dans des produits commerciaux; je suis sûr que
quelqu’un l’a déjà désassemblé. Pour autant que je sache, R C 2 n’est pas breveté.
RC2 est un algorithme de chiffrement par bloc à clef de taille variable conçu comme
un remplaçant du DES. D ’après la société, les réalisations logicielles de R C2 sont trois
fois plus rapides que le DES. Il chiffre les données par blocs de 64 bits. R C2 est un
algorithme de chiffrement par blocs « mélange-et- broie ». Il n ’y a pas de tables-S
[813] ; les deux opérations sont « mélange-et broie » et l’une d’entre elles est chosie à
chaque ronde. Selon leur propre littérature [1345] :
13.9 IDEA
La première version du système de chiffrement ID E A , conçu par Xuejia L a i et James
M a s s e y , a fait surface en 1990 [940]. Il s’appelait PES (« Proposed Encryption
attaque [942, 936]. Ils l’appelèrent alors IPES (« Improved Proposed Encryption
Standard »). IPES fut rebaptisé ID E A en 1992 (« International Data Encryption
Algorithm »).
IDEA est basé sur des fondations théoriques impressionnantes et bien que la cryp
tanalyse ait fait des progrès contre des variantes avec un nombre de ronde réduit,
l’algorithme a l’air solide. De mon point de vue, c ’est le meilleur et le plus sûr des
algorithmes disponibles publiquement à ce jour.
Le futur d ’ID E A n’est pas encore clair. Rien ne presse pour l’adopter en remplacement
du DES, en partie parce qu’il est breveté et nécessite une license pour être utilisé dans
les applications commerciales, et en partie parce que les gens attendent encore de voir
avec quel brio l’algorithme traversera les prochaines années de cryptanalyse.
Survol d’IDEA
IDEA est un algorithme de chiffrement par blocs ; il manipule des blocs de texte en
clair de 64 bits. La clef est longue de 128 bits. Le même algorithme est utilisé pour le
chiffrement et le déchiffrement.
Comme tous les algorithmes de chiffrement par blocs que nous avons déjà vus, ID E A
utilise à la fois la confusion et la diffusion. La philosophie de la conception de l’algo
rithme est basée sur le « mélange d’opérations de différents groupes algébriques ». Il y
a trois groupes algébriques dont les opérations sont mélangées, et toutes ces opérations
sont facilement réalisables à la fois en logiciel et en matériel :
- ou exclusif,
Toutes ces opérations (et ce sont les seules opérations de l’algorithme car il n’y a pas de
permutations) manipulent des sous-blocs de 16 bits. Cet algorithme est efficace même
sur des processeurs 16 bits.
Description d’IDEA
La figure 13.9 donne un aperçu d’ID E A . Le bloc de données de 64 bits est divisé en 4
sous-blocs de 16 bits : X L, X 2 , A 3 et A 4 . Ces 4 sous-blocs deviennent les entrées de la
première ronde de l’algorithme. Il y a 8 rondes au total. À chaque ronde, les 4 sous-blocs
sont combinés par ou exclusif, additionnés, multipliés entre eux et avec 6 sous-blocs de
16 bits dérivés de la clef. Entre chaque ronde, le deuxième et le troisième sous-bloc sont
échangés. Enfin, les quatre sous-blocs sont combinés avec les quatre sous-clefs dans une
transformation finale.
A chaque ronde, la séquence d’événements est la suivante :
F ig . 13.9 - Squelette d l D E A
Vitesse d’IDEA
Les réalisations logicielles actuelles d ’ID E A sont presque aussi rapides que le DES.
Sur un 80386 cadencé à 33 MHz, ID E A chiffre à la vitesse de 880 kilo-bits par seconde
et 2400 kilo-bits par seconde sur un 80486 cadencé à 66 MHz. Vous auriez pu croire
IDEA plus rapide, mais les multiplications coûtent cher. Multiplier deux nombres de
32 bits prend 40 cycles d’horloges sur un 80486 (et 10 sur un Pentium).
Une réalisation V LSI de P E S chiffre les données à 55 mégabits par seconde à
25 MHz [212, 402]. Une autre puce VLSI, développée à l’ETH de Zürich, conte
nant 251000 transistors sur une puce de 107,8 mm2 , chiffre les données à l’aide
d’ID EA à la vitesse de 177 mégabits par seconde avec une fréquence d’horloge de
25 MHz [935, 211, 401],
342 Chapitre 13 Autres algorithmes de chiffrement par blocs
1.-V
ÜN 00
1 : z p z ™ z P z p z p Z6 z<9)- J - z p - z p z p - z p
2: Z<2) z p z p z p z p z p z p 1 - z p - z p z p z p z p
3: z [ 3) z P z P z p z p z p z p - 1 - z p - z p z p - z p z p
4: Z [ 4) z P z P z p z p
7 (4 )
6 z p - 1 - z P - z p z P zp z p
5: z p z f 1 z f z P z p z p z p - 1 - z p - z p z p - z p z p
6: z [ 6) z P z f ] z p z p z p z p - 1 - z p - z p z p - z p z p
7: z P z P z P z p z p z p z P 1 -zp - z p z p - zp z p
8: z [ 8) z P z P z p z p z p z p - 1 - z p - z p z p - z p z p
finale: z [ 9) z f ] z P z p z p - 1 - z p - z P z p - ]
Cryptanalyse d’IDEA
La longueur de clef d’ID E A est de 128 bits — plus du double de celle du DES. En
faisant l’hypothèse que l’attaque exhaustive est la plus efficace, il faudrait 2128 (ss 1038)
chiffrements pour retrouver la clef. Concevez une puce qui peut tester un milliard de
clefs par seconde et mettez-en un milliard à la tâche, cela prendra 1013 années — c ’est
plus que l’âge de l’Univers. Une matrice de 1024 puces pourrait trouver la clef en un
jour mais il n’y a pas assez d ’atomes de silicium dans l’univers pour construire une
telle machine. Là, nous tenons du solide, mais je vais garder un œil sur le débat sur la
matière sombre, on ne sait jamais.
Peut-être, toutefois, que l’attaque exhaustive n’est pas la meilleure attaque contre
ID E A . L’algorithme est encore trop récent pour donner des résultats cryptanalytiques
définitifs. Les concepteurs ont fait de leur mieux pour rendre l’algorithme immune à la
cryptanalyse différentielle ; ils ont défini le concept de chiffre de Markov et ont montré
qu’il est possible de modéliser et de quantifier la résistence à la cryptanalyse différen
tielle [942, 937]. (La figure 13.10 montre l’algorithme PES original, à comparer avec
l’algorithme ID E A de la figure 13.9 qui a été renforcé pour résister à la cryptanalyse
différentielle. Il est étonnant de constater comment quelques changements subtils font
une grande différence.) L a i prétend (il donne des indices probants, pas une preuve)
qu’ID E A est immune à la cryptanalyse différentielle après seulement 4 de ses 8 rondes.
D ’après Eli B i h a m , son attaque à clefs corrélées ne marche pas contre ID EA [114].
Willi M e i e r a examiné les trois opérations algébriques de ID EA, et a fait remar
quer que bien qu’étant incompatibles, il arrive qu’on puisse les simplifier de manière
à faciliter la cryptanalyse de temps en temps [1058]. Son attaque est plus efficace que
l’attaque exhaustive pour l’ID E A à deux rondes (242 opérations), mais moins efficace
pour l’ID E A à trois rondes ou plus. ID E A avec ses huits rondes est sûr.
Joan D a e m e n a découvert une classe de clefs faibles pour ID E A [408, 413]. Ce ne
sont pas des clefs faibles dans le sens où certaines clefs du DES sont faibles, où la
fonction de chiffrement est sa propre inverse. Elles sont faibles dans le sens où si elles
sont utilisées, un attaquant peut facilement les identifier avec une attaque à texte en
clair choisi. Voici, par exemple, une classe de clefs faibles (en hexadécimal) :
où « X » peut être n’importe chiffre hexadécimal. Si cette clef est utilisée, la combinaison
par ou exclusif de deux textes en clair donne la combinaison par ou exclusif des deux
textes chiffrés résultants.
Dans tous les cas, la chance d’engendrer une telle clef aléatoirement est extrêmement
faible: une sur 296. Il n’y a pas de danger si vous choisissez les clefs aléatoirement et
il est facile de modifier ID E A pour qu’il n’y ait plus de clefs faibles : combiner par ou
exclusif chaque clef avec OxODAE [413]
C = E K l ( D K2( E K l ( M ) ) ) .
Avertissement
ID E A est un nouvel algorithme. Il n’y a encore aucun article publié quant à sa cryp
tanalyse. Est-ce qu’ID E A est un groupe? ( L a i pense que non [935].) Existe-t-il des
moyens non encore découverts de casser l’algorithme? ID E A a une base théorique
ferme. Toutefois, jour après jour des algorithmes qui paraissaient sûrs sont tombés
devant de nouvelles formes de cryptanalyse. Il y a pour le moment plusieurs groupes
académiques et militaires qui tentent de cryptanalyser ID E A . Aucun d’entre eux n’a
réussi jusqu’ici (et aucun n’est disposé à l’annoncer publiquement), mais qui sait, un
jour...
13.10 MMB 345
Brevets et licences
L’algorithme de chiffrement par blocs ID E A est breveté en Europe et
aux États-Unis [1018, 1019]. Le brevet est détenu par ASCOM-T e c h AG.
Il n’y a pas de droits d ’exploitation à payer pour un usage non com
mercial. Les utilisateurs commerciaux désireux d ’obtenir une licence doivent
contacter: Ascom Systech AG, Dept. CMVV, Gewerbepark, CH-5506, Mâgenwil,
S u isse, T e l: +41 64 565-983, Fax: +41 64 565-990, e -m a il: ideaascom .ch.
13.10 MMB
On reproche à ID E A d ’utiliser des blocs de chiffrement de 64 bits. Ce reproche a été
émis par Joan D a e m e n avec l’algorithme appelé M M B (pour « Modular Multiplication-
based Block cipher ») [390, 407, 408]. M M B est fondé sur la même théorie de base
qu’ID E A : mélanger des opérations de différents groupes algébriques. M M B est un
algorithme itératif qui consiste principalement en des étapes linéaires ( ou exclusif et
application de la clef) et l’utilisation en parallèle de quatre substitutions non inversibles
linéairement. Ces applications sont déterminées par une multiplication modulo 232 — 1
avec des facteurs constants. Le résultat est un algorithme comportant à la fois des blocs
de 128 bits et une clef de 128 bits.
M M B manipule des sous-blocs de 32 bits de texte ( xq,xi,x 2 ,X3) et des sous-blocs de
clef de 32 bits {ko,ki,k2 ,ks}- Cela rend l’algorithme bien adapté à la réalisation sur des
processeurs modernes de 32 bits. Une fonction non linéaire / est appliquée 6 fois en
alternance avec des o u e x c l u s i f . Voici l’algorithme (toutes les opérations sur les indices
sont effectuées modulo 4) :
Xi = X i® ki pour i = 0 à 3
f ( x 0 , X i , X 2 , X3 )
Xi = X i® ki+ 1 pour i = 0 à 3
f ( x 0 , X i, X 2 ,X3 )
Xi = X i® ki + 2 pour i = 0 à 3
f ( x o , X l , X 2 , X3 )
Xi = x ,® k i pour i = 0 à 3
f(x o ,X i,x 2,xs )
Xi = X i® kl+ 1 pour i = 0 à 3
f ( x 0 , x 1 , X 2 ,X3 )
Xi — X i ® ki+ 2 pour i — 0 à 3
f{Xc,X]_,X2,X?).
1. Xi = Ci- x ï pour i = 0 à 3.
C = 2AAAAAAA
c0 = 025F1CDB
Ci = 2c0
c2 — 23c0
c3 = 27c0.
La constante C est la constante la « plus simple » avec un poids ternaire élevé, le bit
le moins significatif égal à 0 et sans symétrie circulaire. La constante Co a été choisie
d ’après certaines caractéristiques. Les constantes Ci, c2 et c3 sont des versions décalées
de co pour éviter des attaques basées sur la symétrie. Voir [407] pour plus de détails.
Le déchiffrement est le processus inverse. Les étapes 2 et 3 sont leurs propres inverses.
L ’étape 1 utilise c~ 1 au lieu de c*. La valeur de c0 1 est 0DAD4694.
Sécurité de M M B
La conception de l’algorithme assure que chaque ronde a une diffusion considérable,
indépendamment de la clef. Avec ID E A , la diffusion dépend dans une certaine mesure
des sous-clefs en question. M M B a aussi été conçu pour ne pas avoir de clef faible à la
différence de ID E A .
M M B est mort [405]. Bien qu’aucune cryptanalyse n’ait été publiée, ceci est vrai pour
plusieurs raisons. Premièrement, il n’a pas été conçu pour résister à la cryptanalyse
linéaire. Les auteurs ont choisi ces facteurs multiplicatifs pour leur résistence à la
cryptanalyse différentielle mais ils ignoraient la cryptanalyse linéaire.
Deuxièmement, Eli B ih a m détient une attaque effective à clefs choisies [167] qui ex
ploite le fait que toutes les rondes sont identiques et que les clefs sont simplement
décalées cycliquement de 32 bits. Troisièmement, bien que M M B puisse être très effi
cace en logiciel, une réalisation matérielle de l’algorithme serait bien plus lente que le
DES.
D a e m e n conseille à toute personne intéressée dans l’amélioration de M M B de faire
une analyse de la multiplication modulaire par rapport à la cryptanalyse, de choisir des
nouveaux facteurs et de rendre la constante C différente à chaque ronde [405]. Enfin, il
conseille d’améliorer la gestion des clefs en ajoutant des constantes aux clefs de ronde
pour éliminer le biais. Il ne le fera pas lui-même, il a conçu 3 -W a y à la place (voir
§ 14.5).
13.11 C A —1.1
C A est un chiffrement par blocs construit à partir d ’un automate cellulaire, conçu par
Howard G u t o w i t z [678, 680, 679]. Il chiffre le texte en clair par blocs de 384 bits et
a une clef de 1088 bits (il s’agit en fait de deux clefs, une clef de 1024 bits et une de
64 bits). De par la nature de l’automate cellulaire, cet algorithme est le plus efficace
quand il est réalisé avec des circuits intégrés massivement parallèles.
C A 1.1 utilise des règles d’automate cellulaire à la fois réversibles et irréversibles. Par
une règle réversible, chaque état du réseau découle d ’un unique état prédécesseur, tandis
13.12 S k ip j a c k 347
que par une règle irréversible, un état peut avoir de nombreux états prédécesseurs.
Pendant le chiffrement, les règles irréversibles sont itérées en remontant le temps. Pour
aller en arrière par rapport à un état, un état est sélectionné aléatoirement parmi les
états prédécesseurs possibles. Ce processus peut être répété un grand nombre de fois.
L’itération arrière sert donc à mélanger de l’information aléatoire avec le message.
CA 1.1 utilise une catégorie particulière de règles partiellement linéaires irréversibles
qui sont telles qu’un état prédécesseur aléatoire peut être rapidement construit pour
n’importe quel état. Les règles réversibles sont aussi utilisées pour certaines étapes du
chiffrement.
Les règles réversibles (de simples permutations parallèles sur des sous-blocs de l’état)
sont totalement non linéaires. Les règles irréversibles sont entièrement déduites à partir
de la clef, tandis que les règles réversibles dépendent à la fois de la clef et des informa
tions aléatoires insérées pendant les étapes de chiffrement avec les règles irréversibles.
C A -1.1 est construit autour d ’une structure de blocs chaînés. C ’est-à-dire que la ma
nipulation des blocs de messages est partiellement découplée du flot d’informations
aléatoires insérées durant le chiffrement. Ces informations aléatoires servent à relier
les étapes de chiffrement ensemble. Elles peuvent aussi être utilisées pour chaîner le
chiffrement d ’un flot de blocs. L ’information dans le lien est engendrée dans l’appareil
de chiffrement.
C A -1.1 est un nouvel algorithme et il est trop tôt pour se prononcer quant à son
niveau de sécurité. G u t o w i t z décrit des attaques possibles, y compris la cryptanalyse
différentielle, mais il est incapable de casser l’algorithme. G u t o w i t z offre une prime
de 1000 $ à « toute personne qui développerait une méthode applicable pour casser
C A -1.1 ».
C A -l.le s t breveté [680], mais son utilisation est libre pour des utilisations non com
merciales. Toute personne intéressée par une licence pour l’algorithme ou par la prime
offerte pour sa cryptanalyse doit contacter : Howard G utow itz, ESPCI, L aboratoire
d’ É lectron iq u e, 10 rue Vauquelin, 75005 P a r is , France.
13.12 Skipjack
S k i p j a c k est l’algorithme de chiffrement développé par la NSA pour les puces C l i p p e r
et C a p s t o n e (voir § 24.16 et § 24.17). Comme cet algorithme est classé « Top Secret »,
il n’a jamais été publié. Il sera réalisé uniquement dans des puces résistantes à l’inves
tigation.
L’algorithme est classé « Top Secret » non pas parce que cela augmente la sécurité,
mais parce que la N SA ne veut pas que l’algorithme soit utilisé sans le mécanisme de
dépôt de clef C l i p p e r . Ils ne veulent pas que l’algorithme soit réalisé en logiciel et
s’étende à travers le monde.
S k i p J a c k est il sûr? Si la NSA veut produire un algorithme sûr, elle peut certainement
le faire. D ’un autre côté, si la N SA veut concevoir un algorithme avec brèche secrète,
elle peut tout aussi bien le faire.
Voici ce qui a été publié [1174, 468] :
7. R appelez vous que les perm utations ne prennent pas de tem ps en réalisation matérielle.
13.12 S k i p ja c k 349
Bien sûr les experts n’ont pas eu le temps d ’examiner l’algorithme d’assez près pour en
arriver à une conclusion par eux-mêmes. Tout ce qu’ils pouvaient faire était de regarder
les résultats que la N SA leur a montré.
Une question sans réponse est de savoir si l’espace des clefs est linéaire (voir § 8.2).
Même si S k i p j a c k n’a pas de clef faible au sens du D E S , des artéfacts du processus
de gestion des clefs pourrait rendre certaines clefs plus fortes que d’autres. SK IP JA C K
aurait beau avoir 270 clefs fortes, bien plus que le D E S , les chances d ’en choisir une au
hasard seraient seulement de 1 sur 1000. Personnellement, je pense que l’espace des clefs
de SK IP JA C K est linéaire, mais le fait que personne ne l’ait jamais dit publiquement
est inquiétant.
S k i p j a c k est breveté, mais le brevet est en train d ’être retiré de la distribution par
un accord sur la confidentialité du brevet [1128]. Le brevet ne verra le jour que si
l’algorithme S k i p j a c k est reconstitué avec succès depuis une puce. Cela fournit au
gouvernement le beurre et l’argent du beurre : la protection d ’un brevet et la confiden
tialité d’un marché secret.
Chapitre 14
14.1 GOST
GO ST est un algorithme de chiffrement par blocs provenant de l’ex-Union Soviétique
[657, 1399]. « GOST » est l’acronyme de « Gosudarstvennyi Standard », ce qui veut dire
« standard gouvernemental ». C ’est une sorte d ’analogue du FIPS américain mis à part
le fait qu’il se référé à n’importe quel type de standard1. Le numéro de ce standard est
28147-89. Le commité gouvernemental de normalisation soviétique autorisa le standard,
quel qu’il soit.
Je ne sais pas si G O S T 28147-89 a été utilisé pour des messages classés secrets ou
seulement pour des besoins civils. Une remarque préliminaire spécifie que l’algorithme
« remplit toutes les exigences cryptographiques et qu’il n’y a pas de limite sur le de
gré de confidentialité des informations à protéger ». J’ai entendu qu’il fut initialement
utilisé pour des communications à haut degré de confidentialité, y compris des com
munications militaires classées, mais sans en avoir la confirmation.
Description de GOST
GOST utilise des blocs de 64 bits et une clef de 256 bits. La clef comporte d’autre élé
ments suplémentaires qui seront présentés plus loin. L ’algorithme consiste en l’itération
sur 32 rondes d’un algorithme de chiffrement simple.
Pour chiffrer, il faut commencer par partager le texte en deux : la moitié gauche, L et
la moitié droite D. La sous-clef pour la ronde i est notée Ki. La ronde i de G O S T se
formalise ainsi :
t , — Ri—i
Ri = Li-i © f(Ri~î A )
1. En réalité, le nom com plet est « G osudarstvennyi Standard Soyuza SSR », soit « standard gou
vernemental de l’ Union des républiques socialistes soviétiques ».
S52 Chapitre 14 Encore d’autres algorithmes de chiffrement par blocs
La figure 14.1 illustre une ronde de G O S T . La fonction / est assez simple. Tout
d’abord, la moitié droite et la ie clef sont ajoutées modulo 232. Le résultat est coupé en
huit morceaux de 4 bits qui passent ensuite chacun à travers une table-S' différente. Il y
a huit tables S distinctes dans G O S T ; les quatres premiers bits vont dans la première
table-S, les quatre suivants dans la deuxième, et ainsi de suite. Chaque table-S est
une permutation des nombres de 0 à 15. Une table-S pourrait être la suivante par
exemple :
Les sorties des tables-,S' sont mises bout à bout pour former un mot de 32 bits qui
subit un décalage circulaire à gauche de 11 bits. Finalement, le résultat est combiné
par ou exclusif à la moitié gauche pour devenir la moitié droite, et la moitié droite
devient la nouvelle moitié gauche. Faites cela 32 fois et vous avez fini.
La génération des sous-clefs est simple. La clef de 256 bits est coupée en huit morceaux
de 32 bits : k\, fc2, ••-, kg. Chaque ronde utilise une des sous-clefs comme indiqué dans
le tableau 14.1. Le déchiffrement se fait avec le même algorithme en inversant l’ordre
des ki.
Le standard G O S T ne dit pas comment générer les tables S1, elles sont d ’une certaine
manière fournies [657]. Certains spéculèrent qu’une certaine organisation soviétique
pourrait fournir des tables-S solides à qui bon lui semblerait et des mauvaises à ceux
qu’elle voudrait espionner. Cela pourrait très bien être vrai mais des discussions plus
poussées avec un fabricant de puces G O S T en Russie mènent à une autre alternative.
14-1 GOST 353
Ronde : ï 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Sous-clef: 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8
Ronde: 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Sous-clef: 1 2 3 4 5 6 7 8 8 7 6 5 4 3 2 1
Cryptanalyse de GOST
Il y a des différences majeures entre G O S T et le DES.
- La génération des sous-clefs est compliquée dans le DES. Elle est simple dans
GOST.
- Le DES utilise une clef de 56 bits; G O S T utilise une clef de 256 bits. Si vous
prenez en compte les tables S, cela représente environ 610 bits d’information
secrète.
S’il n’y a pas d ’autre moyen de casser G O S T que l’attaque exhaustive, c ’est un algo
rithme très sûr. G O S T utilise une clef longue de 256 bits et même plus si on compte
les tables-S. G O S T est certainement plus résistant aux cryptanalyse différentielle et
T ab . 14.2 - Tables-S de G O S T
Table-S 1: 4 10 9 2 13 8 0 14 6 11 1 12 7 15 5 3
Table-S 2: 14 11 4 12 6 13 15 10 2 3 8 1 0 7 5 9
Table-S 3: 5 8 1 13 10 3 4 2 14 15 12 7 6 0 9 11
Table-S 4: 7 13 10 1 0 8 9 15 14 4 6 12 11 2 5 3
Table-S 5: 6 12 7 1 5 15 13 8 4 10 9 14 0 3 11 2
Table-S 6: 4 11 10 0 7 2 1 13 3 6 8 5 9 12 15 14
Table-S 7: 13 11 4 1 3 15 5 9 0 10 14 7 6 8 2 12
Table-S 8: 1 15 13 0 5 7 10 4 9 2 3 14 6 11 8 12
354 Chapitre 14 Encore d’autres algorithmes de chiffrement par blocs
linéaire que le DES. Bien que les tables -S aléatoires de G O S T soient probablement
plus faibles que celles adoptées dans le DES, le fait qu’elles soient secrètes renforce
la résistence de G O S T aux attaques différentielles et linéaires. Ces deux attaques dé
pendent aussi du nombre de rondes : plus il y a de rondes, plus l’attaque est difficile.
Le seul fait que G O S T ait deux fois plus de rondes que le DES rend probablement les
deux cryptanalysés différentielle et linéaire impratiquables.
Les autres parties de G O S T sont équivalentes ou inférieures à celles du DES. GOST
n’utilise pas de permutation expansive équivalente à celle du DES. Retirer cette per
mutation du DES l’affaiblit en réduisant l’effet d ’avalanche; il est raisonnable que
G O S T est plus faible que s’il utilisait une telle permutation. L ’emploie dans GOST
de l’addition au lieu du ou exclusif du DES n’est pas moins sûre.
La principale différence entre les deux algorithmes semble résider dans le décalage
circulaire de G O S T au lieu d ’une permutation expansive. Cette permutation augmente
dans le DES l'effet d ’avalanche. Dans G O S T , le changement d ’un bit d’entrée affecte
une table-S à la première ronde, ce qui affecte ensuite deux tables S à la deuxième
ronde, puis quatre à la troisième ronde, et ainsi de suite. Il faut huit rondes de GOST
avant que la modification d ’un bit n’affecte tous les bits de sortie, alors que cinq suffisent
avec le DES. Ceci est certainement une faiblesse. Mais n’oubliez pas que G O S T a 32
rondes et que le D ES en a 16.
Les concepteurs de G O S T ont essayé de réaliser un compromis entre l’efficacité et la
sécurité. Ils ont modifiés la conception originelle du DES pour obtenir un algorithme
mieux adapté à la réalisation par logiciel. Ils semblent avoir été moins sûrs de la sécurité
de l’algorithme et ils ont essayé de la compenser en allongeant la longueur de la clef, en
gardant les tables -S secrètes et en doublant le nombre d ’itérations. Que leurs efforts
aient abouti à un algorithme plus sûr que le DES reste encore à voir.
14.2 CAST
C A S T a été conçu au Canada par Carlisle A d a m s et Stafford T a v a r e s [14, 11]. Ils
prétendent que le nom provient de la façon dont l’algorithme a été conçu, et est sensé
évoquer l’image du hasard, mais remarquez les initiales des auteurs. Dans C A S T , les
blocs ont une taille de 64 bits, ainsi que la clef.
La structure de C A S T va vous paraître familière. L ’algorithme utilise huit tables ,?
prenant 8 bits en entrée et 32 en sortie. La construction de ces tables S est compliquée
et dépend de la réalisation, reportez-vous aux références pour les détails.
Pour chiffrer, il faut partager le texte en clair en la moitié gauche et la moitié droite.
L ’algorithme opère huit rondes. A chaque ronde, la moitié droite est combinée avec
une partie de la clef en utilisant une fonction / et avec la moitié gauche par ou exclusif
pour devenir la nouvelle moitié droite. La moitié droite originelle (avant modifications)
devient la nouvelle moitié gauche. Après la huitième ronde, il ne faut pas échanger les
deux moitiés droite et gauche ; le texte chiffré est obtenu en les mettant bout à bout.
La fonction / est simple :
4° Combiner par ou exclusif les six sorties des tables-S ensembles pour obtenir
la sortie finale de 32 bits.
Une alternative consiste à combiner par ou exclusif les 32 bits d’entrée et 32 bits de
la clef, à partager le résultat en quatre parts de 8 bits, et à combiner le tout par ou
exclusif [11]. Il se trouve que N rondes de cette version sont aussi sûres que N + 2
rondes de l’autre option.
Les sous-clefs de 16 bits sont facilement calculées d ’après la clef de 64 bits. En notant
ki,k-2 , ■■■fis les huits octets de la clef, les sous-clefs de chaque ronde sont les suivantes :
La solidité de cette algorithme réside dans ses tables -S. Les tables S de C A S T ne sont
pas fixées ; de nouvelles tables sont construites pour chaque application. Les critères de
conception sont donnés dans [14] ; les fonctions courbées sont les colonnes des tables-
5, et sont choisies selon un certain nombre de propriétés désirées des tables-5 (voir
§ 14.10). Une fois qu’un ensemble de tables S a été attribué à une réalisation donnée
de C A S T , elles restent fixes à jamais. Les tables-5 dépendent de la réalisation, mais
pas de la clef.
Il est montré dans [14] que C A S T résiste à la cryptanalyse différentielle et dans [731]
qu’il résiste à la cryptanalyse linéaire. La seule méthode connue de casser C A S T est
l’attaque exhaustive.
La société N o r t h e r n T e l e c o m utilise C A S T dans leur logiciel de sécurité « Entrust »
qui est distribué pour les Macintosh, les PC, et les stations Unix. Les tables -S qu’ils
ont choisies n’ont pas été rendues publiques. Le gouvernement canadien évalue actuel
lement C A S T comme un nouveau standard de chiffrement. C A S T est en instance de
brevetage.
14.3 Blowfish
B l o w f i s h est un algorithme de ma conception, prévu pour être réalisé par logiciel sur
les gros microprocesseurs [1394, 1393]. L ’algorithme n’est pas breveté et le code source
en C qui se trouve à la fin de cette ouvrage fait partie du domaine publique. J’ai conçu
B l o w f i s h pour répondre aux critères de conception suivants :
Description de Blowfish
B l o w f i s h est un algorithme de chiffrement par blocs de 64 bits à longueur de clef
variable. L ’algorithme se fait en deux phases : expansion de la clef et chiffrement des
données. L ’expansion de la clef convertit une clef de taille inférieure à 448 bits en
plusieurs tableaux de sous-clefs d’une taille totale de 4168 octets.
Le chiffrement est obtenu en itérant 16 fois une fonction simple (voir la figure 14.2).
Chaque ronde consiste en une permutation dépendant de la clef et une substitution
dépendant de la clef et des données. Toutes les opérations sont des additions et des ou
exclusifs sur des nombres de 32 bits. La seule opération supplémentaire est la consul
tation de quatre tableaux indéxés par ronde.
B lo w fis h utilise un grand nom bre de sous-clefs. C es sous-clefs doivent être pré
calculées avant tout chiffrement ou déchiffrement de données.
Le tableau P est constitué de 18 sous-clefs de 32 bits :
Pi,P'2 , ■■■,Pis-
Il y a quatre tables-S de 32 bits ayant 256 entrées chacune :
XL = XL © Pt
x R = F (x l ) ® Xn
Echanger x l et x r .
14-3 B lo w fis h 35 7
F ig . 14.2 - B l o w f is h
8 bits 32 bits
Table-S 1
l
8 bits 32 bits 1
Table-S 2
32 bits
8 bits 32 bits
Table-S 3
32 bits
8 bits 32 bits
Table-S 4
F ig . 14.3 - La fonction F
521 itérations sont nécessaires au total pour générer toutes les sous-clefs. L’application
peut stocker les sous-clefs, il n’est pas nécessaire d ’effectuer ce procédé de génération
plusieurs fois.
Sécurité de Blowfish
Serge V a u d e n a y a examiné B l o w f ish avec r rondes en ayant connaissance des tables-
S. Une attaque différentielle permet de retrouver le tableau-P avec 2 8 r + 1 textes en
clair choisis [1570]. Pour certaines clefs faibles qui génèrent de mauvaises tables-5 (la
144 SAFER 359
probabilité d ’en prendre une au hasard est de une chance sur 214), cette attaque n’a
besoin que de 24r 11 textes en clair choisis. Si les tables- S ne sont pas connues, cette
attaque permet de détecter si une clef faible a été utilisée, mais ne permet pas de
la trouver (ni les tables- 5 , ni le tableau-P). Cette attaque ne marche que contre les
variantes avec peu de rondes; elle est complètement impraticable contre le B l o w f i s h
à 16 rondes.
Bien sûr, la découverte de clefs faibles est significative, même si elle semble impossible
à utiliser. Une clef faible est une clef pour laquelle deux entrées d’une des table-S1sont
identiques. Il n’y a pas moyen de tester si une clef est faible avant d ’effectuer la phase
d’expansion. Si vous vous inquiétez, il vous faut faire l’expansion de la clef et vérifier
qu’aucune des tables-S n’a deux entrées identiques. Cependant, je ne pense pas que
cela soit nécessaire.
Je ne connais aucune attaque cryptanalytique contre B l o w f i s h . Par prudence, ne
réalisez pas B l o w f i s h avec un nombre réduit de rondes.
La société K e n t M a r s h L t d . a incorporé B l o w f i s h dans leur produit de protection
« FolderBolt » pour Microsoft Windows et Macintosh. Il fait aussi partie de « Nautilus »
et « PGPfone ».
14.4 SAFER
SA F E R K -64 vient de « Secure And Fast Encryption Routine » qui veut dire procédure
de chiffrement rapide et sûre [1015]. « K-64 » signifie que la clef a une longueur de 64
bits. James M a s s e y a conçu cet algorithme non déposé pour C y l i n k C o r p . et fait
partie de certains de leurs produits. Le gouvernement de Singapour prévoit d’utiliser
cet algorithme avec une clef de 128 bits [1016] pour une large variété d ’applications. Il
n’y a ni brevet, ni droits d ’exploitation, ni aucune autre restriction sur son utilisation.
La taille des blocs et de la clef sont de 64 bits. Ce n’est pas un réseau de Feistel comme
le DES (voir § 14.10), mais un algorithme de chiffrement par blocs itératif: la même
fonction est appliquée pour un certain nombre de rondes. Chaque ronde utilise deux
sous-clefs de 64 bits, et l’algorithme n’utilise que des opérations sur des octets.
Description de SAFER
Le bloc de texte en clair est divisé en huit parts d ’un octet : . . . ,BH. Les sous-
blocs subissent alors r rondes. Pour finir, une transformation de sortie est appliquée
aux sous-blocs; Chaque ronde utilise deux sous-clefs : —i et K^r-
La figure 14.4 illustre une ronde de S A F E R K-64. Les sous-blocs sont tout d’abord
combinés avec des bits de la sous-clef K<ir i par ou exclusif ou par addition. Les huits
sous-blocs subissent ensuite une des deux transformations non linéaire suivantes :
Ce sont des opérations dans le corps fini Z/257, et 45 est un générateur de ce corps.
Dans les réalisations pratiques de SA F E R , il est plus rapide de stocker ces valeurs
dans un tableau que de les recalculer à chaque fois. Les sous-blocs sont alors combi
nés avec des bits de la sous-clef K ir par ou exclusif ou par addition. Les résultats
360 Chapitre 14 Encore d’autres algorithmes de chiffrement par blocs
de cette opération passent alors à travers trois couches d’opérations linéaires dont
l'intérêt est d ’augmenter l’effet d’avalanche. Chaque opération est appelée une pseudo
transformation d’Hadamard (P T H en abrégé). Si une P T H prend en entrée ai et a2,
alors sa sortie est :
bi = (2 * ai + a2) modulo 256
62 = (ai + a2) modulo 256
Après les r rondes, on opère une transformation finale, la même que la première étape
de chaque ronde. Bi, B 4 , B 5 , et Bs sont combinés par ou exclusif avec les octets
correspondants de la dernière sous-clef, et Z?2, B 3 , Bç, et B 7 sont additionnés avec les
bits correspondants de la dernière sous-clef. Le résultat est le texte chiffré.
Le déchiffrement est le procédé inverse: la transformation de sortie (avec des sous
tractions au lieu des additions), puis r rondes inversées. La PTH inversée (P T H I) est
donnée par :
ax = (£>1 — 6 2 ) modulo 256
a 2 = {—bi + 2è2) modulo 256
La génération des sous-clefs est simple. La première sous-clef K\ est la clef elle même.
Les sous-clefs suivantes sont produites de la manière suivante :
Le symbole « < < < » est un décalage circulaire vers la gauche soit encore une rotation
vers la gauche. La rotation se fait octet par octet, et c, est une constante de la ronde.
Si Cij représente le j e bit de la constante de la ie ronde, vous pouvez calculer les
constantes de toutes les rondes grâce à la formule suivante :
SAFER K-128
Cette alternative de gestion des clefs a été développée par le ministère de l’intérieur
de Singapour, et incorporée ensuite par M a s s e y dans S A F E R [1016]. Elle repose sur
deux clefs de 64 bits K a et Kb- L’astuce consiste à générer deux séquences de sous-clefs
en parallèle et à prendre alternativement une sous-clef dans chaque séquence. Cela
signifie qu’en prenant K a — K h, la clef de 128 bits est compatible avec la clef de 64
bits K a.
14.5 3-W A Y
3-W AY est un algorithme de chiffrement par blocs conçu par Joan D A E M E N [405, 411].
Il utilise des blocs et une clef de même taille : 96 bits, et il est conçu pour être très
efficace en réalisation matérielle.
3-W AY n ’est pas un réseau de Feitel mais un algorithme de chiffrement itératif. 3-
W AY peut comprendre n rondes; D a e m e n en conseille 11.
362 Chapitre 14 Encore d’autres algorithmes de chiffrement par blocs
Description de 3-W A Y
L’algorithme est simple à décrire Pour chiffrer un bloc de texte en clair x , procédé
comme suit :
x = x © Kt
x = theta(x)
x = pi — l(x )
x = gamma(x)
x = pi — 2(x)
x = x © K n+ 1
x = theta(x)
- gamma(x) est une fonction de substitution non linéaire. C’est cette étape qui a
donné son nom à 3-W A Y ; il s’agit de l’exécution en parallèle d ’opérations de
substitution sur des blocs de 3 bits de l’entrée.
14.6 CRAB
Les auteurs de cet algorithme sont Burt KALISKI et Matt RoBSHAW des laboratoires
R SA [800]. L ’idée de C R A B est d’utiliser les techniques propres au fonctions de ha
chage à sens unique pour construire un algorithme de chiffrement rapide. Du coup,
C R A B ressemble beaucoup à M D5, et les concepts du paragraphe 18.5 seront suppo
sés connus dans ce qui suit.
C R A B s’appuie sur une grande taille de blocs : 1024 octets. Comme C R A B est plutôt
un travail de recherche qu'un algorithme réel, aucune procédure de génération de clef
n’est décrite. Les auteurs suggèrent une méthode permettant de déduire d ’une clef de
80 bit les trois sous-clef requises, bien que l’algorithme pourrait très bien accepter des
clefs de longueur variable.
C R A B utilise deux ensembles de grandes sous-clefs:
1° D i v i s e r X e n 256 s o u s -b lo c s d e 32 b i t s : X 0 , X i , . . . , X 255.
2° P e r m u t e r les s o u s -b lo c s d e X s e lo n P .
3° P o u r r v a r ia n t de 0 à 3 e t g v a r ia n t de 0 à 63, e ffe c tu e r :
^ { 4g ) < « 2r = A
A ( 4 s- | _ i ) « < 2r — B
X ( 4 g + 2) < « 2 r = C
X (4 < , i - 3 ) « < 2 r — D
4° R e m e t tr e X 0 , X i , . . . , X 255 e n s e m b le p o u r f o r m e r le t e x t e c h iffr é.
f ( B , C , D ) — ( B A C ) V ( ( - .B ) A D )
f ( B , C , D ) = ( B A D ) V ( C V (-,£>))
f(B ,C ,D ) — B 0 C ® D
f { B , C , D ) = C © ( B V (-.£>))
2° P o u r i v a r ia n t d e 10 à 255 e ffe c tu e r :
Ki = 2 © K i—g © K i - 7 © K i - 10.
3° P o u r i v a r ia n t de 0 à 255, p o s e r P i = i.
4° m = 0.
Chap re 14 Encore d’autres algorithmes de chiffrement par blocs
5° Effectuer deux fois la boucle suivante : pour i variant de 256 à 1 (par incré
mentations de —1), faire:
Le tableau S pourrait être construit d ’une manière similaire, soit à partir de la même
clef de 80 bits, soit à partir d’une autre. Les auteurs attirent l’attention sur l’importance
de ces détails : « il peut très bien exister des schémas alternatifs à la fois plus efficaces
et offrant plus de sécurité » [800].
C R A B a été présenté plus comme un nid d ’idées nouvelles que comme un algorithme
fonctionnant. Il utilise beaucoup de techniques similaires à celles de M D -5. B ih a m
prétend qu’une taille de bloc trop large rend la cryptanalyse d ’un algorithme plus
aisée [167]. D ’un autre côté, C R A B pourrait fort bien s’accomoder d’une très longue
clef. Dans ce cas, « plus aisé à cryptanalyser » risque de ne plus vouloir dire grand
chose.
14.7 SXAL8 et M B AL
Il s’agit d ’un algorithme par blocs de taille 64 bits [769]. SX A L 8 est l’algorithme de
base; M B A L est une version étendue dans laquelle la taille des blocs est variable.
Partant du fait que M B A L opère intelligemment de façon interne, les auteurs pré
tendent obtenir une sécurité suffisante avec peu de rondes seulement. Avec une taille de
bloc de 1024 bits, M B A L est environ 70 fois plus rapide que le DES. Malheuresement,
il est montré dans [1180] que M B A L est propice à la cryptanalyse différentielle et dans
[866] qu’il est propice à la cryptanalyse linéaire.
14.8 R.C5
RC5 est un algorithm e de chiffrement p a r blocs avec de nom breux param ètres : taille
des blocs, taille de la clef, et nom bre de rondes. R o n R iv e s t en estl’inventeur et il a
été analysé p a r les laboratoires R SA [1335, 1336],
Il y a trois opérations: ou exclusif, addition, et rotation. Les rotations prennent un
temps constant sur la plupart des processeurs et les rotations variables sont des fonc
tions non linéaires. Ces rotations qui dépendent à la fois de la clef et des données
constituent la partie intéressante.
La longueur des blocs est variable dans R C5, mais on se concentrera dans l’exemple
qui suit sur une taille de 64 bits. Le chiffrement nécessite 2r + 2 mots de 32 bits
dépendants de la clef, Sq,Si , . . . ,S2r+2, où r est le nombre de rondes. Nous parlerons
de leur génération plus tard. Pour chiffrer, diviser tout d’abord le bloc de texte en clair
en mots de 32 bits : A et B. Il faut alors procéder ainsi :
A = A + iSo
B = B + Si
14-8 RC5 365
Pour i décroissant de r à 1 :
B = B +Sx
A = A 4- Sq
La création du tableau de ciels est plus compliquée mais directe aussi. Commencez
par copier les bits de la clef dans un tableau L de c mots de 32 bits (en remplissant
si nécessaire le dernier mot avec des zéros). Initialisez alors le tableau en utilisant un
générateur congruentiel modulo 232 :
S0 = P
Pour i variant de 1 à 2 (r + 1) — 1, effectuer :
i= j = 0
A = B = 0
Effectuer n fois (où n est le maximum de 2(r + 1) et c) :
A = Si = (Sz + A + B) « < 3
B = Lt = { L j + A + B ) « < {A + B)
i = {i + 1) modulo 2(r + 1)
j = (j + 1) modulo c
RC5 est en fait une famille d’algorithmes. Nous avons défini R C 5 avec des mots de 32
bits de long et des blocs de 64 bits de long ; rien n’empêche l’algorithme de fonctionner
avec des mots de 64 bits de long et des blocs de 128 bits de long. R i v e s t désigne
les réalisations particulières de R C5 par R C 5 - w / r / b où w est la taille des mots, r le
nombre de rondes, et b la longueur de la clef en octets. Pour w = 64, P et Q valent
respectivement 0xB7E151628AED2A6B et 0x9E3779B97F4A7C15.
366 Chapitre 14 Encore d’autres algorithmes de chiffrement par blocs
R C5 est nouveau, mais les laboratoires R SA ont passé un temps considérable à l’ana
lyser avec une taille de bloc de 64 bits. Après 5 rondes, les statistiques paraissent très
bonnes. Après 8 rondes, chaque bit du texte en clair affecte au moins une rotation. Il
existe une attaque différentielle avec 224 textes en clair choisis- pour 5 rondes, 245 pour
10 rondes, et 268 pour 15 rondes. 11 n ’y a bien sûr que 264 textes en clair possibles,
aussi cette attaque ne marchera pas pour 15 rondes ou plus. Des estimations en crypta
nalyse linéaire indiquent que l’algorithme est sûr après 6 rondes. R i v e s t recommande
au moins 12 rondes et 16 si possible [1336]. Ce nombre pourrait changer.
R SA D SI est en train de faire breveter R C5, et le nom est déposé. La société prétend
que les frais de license seront très réduits, mais vous feriez mieux de vérifier au près
d’eux.
La confusion sert à cacher les relations entre le texte en clair, le texte chiffré, et la clef.
Vous rappelez vous comment la cryptanalyse différentielle peut exploiter la moindre
relation entre ces trois éléments? Une bonne confusion rend les relations statistiques
si compliquées que mêmes ces outils cryptanalytiques puissants ne marche pas.
La diffusion répand l’influence d ’un bit particulier du texte en clair ou de la clef aussi
loin que possible dans le texte chiffré. Cela camoufle aussi les relations statistiques et
rend la cryptanalyse plus difficile.
La confusion à elle seule suffit pour la sécurité. Un algorithme qui mettrait en corres
pondance en fonction de la clef les 264 textes en clair possibles avec les 264 textes chiffrés
possibles serait tout à fait solide. Le problème est que cela nécessiterait beaucoup de
mémoire : il faudrait stocker un tableau de 1020 octets. La conception d ’algorithmes de
chiffrement par blocs consiste à créer quelque chose qui ressemble à un tel algorithme,
mais en utilisant beaucoup moins de mémoire.
L’astuce est de mélanger répétivement la confusion (avec des tableaux beaucoup plus
petits) et la diffusion avec un seul algorithme de chiffrement dans différentes com
binaisons. Ceci s’appelle un algorithme de chiffrement produit. Un algorithme
constitué de couches de substitution et de permutations est parfois appelé un réseau
substitution-permutation ou encore un réseau SP.
Considérez la fonction / du DES. La permutation expansive et la table P servent à
la diffusion ; les tables—S servent à. la confusion. La permutation expansive et la table-
P sont linéaires ; les tables S ne sont pas linéaires. Chaque opération isolée est assez
simple ; ensembles, elles fonctionnent plutôt bien.
Le DES présente quelques principes de conception d’algorithmes de chiffrement sup
plémentaires. Le premier est l’idée d’un algorithme de chiffrement itératif. Cela
désigne tout simplement le fait de prendre une fonction de ronde simple est de la ré
péter plusieurs fois. Le DES à deux rondes n’est pas bien solide ; il faut au moins cinq
rondes avant que les bits de sortie dépendent de tous les bits d’entrée et de tous les
bits de la clef [1088, 1084]. Le DES à seize rondes est solide; le DES à trente deux
rondes l’est encore plus.
Réseaux de Feistel
La plupart des algorithmes de chiffrement par blocs sont des réseaux de Feistel.
Cette idée date du début des années 1970 [554, 555]. Prenez un bloc de longueur n et
divisez le en deux moitiés de longueur n /2 : L et R. n doit bien sûr être pair. Vous
pouvez définir un algorithme de chiffrement par blocs itératif où la sortie de la ie ronde
est déterminée d’après la sortie de la ronde précédente :
h) Ri 1
R i = L i_ i © f ( R i ~ i , K t )
Ki est la sous-clef utilisée dans la ie ronde and / est une fonction quelconque.
Vous avez pu rencontrer ce concept dans les algorithmes DES, L u c i f e r , FE A L,
K h u f u , K h a f r e , LO K I, G O S T , C A S T , B l o w f i s h , et d’autres. Pourquoi en parler
tant? Il est garanti que la fonction est inversible. Comme la moitié droite et la sortie
de la fonction de ronde sont combinées par ou exclusif, l’égalité suivant est forcément
vérifiée :
Ri © f{Ri— îjff») — I~>i—i © f(Ri-i,Ki) © / ( R ^ — ijKi) = Li -1
368 Chapitre 14 Encore d ’autres algorithmes de chiffrement par blocs
Relation simples
Le DES vérifie la propriété suivante: E k { M ) = C implique E K' { M ' ) = C' où M ' , C
et K ' sont les compléments bit à bit de A f, C et K respectivement. Cette propriété
réduit la complexité d ’une attaque exhaustive d’un facteur deux. LO K I vérifie des
propriétés de complémentation qui réduisent la complexité d ’un facteur 256.
Une relation simple peut être définie comme dans [860] :
Si E k ( M ) = C, alors E f{K)( g ( M , K ) ) = h(C,K).
où f , g et h sont des fonctions simples. Par simples, j ’entends qu’elles sont faciles à
calculer, bien plus faciles qu’une itération de l’algorithme. Dans le cas du DES, / , g
et h sont la complémentation bit à bit (de leur première variable). C ’est le résultat de
la combinaison par ou exclusif de la clef avec des parties du texte.
Les bons algorithmes de chiffrement ne vérifient aucune relation simple. Des méthodes
pour trouver de telles faiblesses sont données dans [918].
Structure de groupe
Quand on examine un algorithme, il est naturel de se demander si c ’est un groupe. Les
éléments du groupe sont les blocs de texte chiffré avec chaque clef possible, et l’opération
du groupe est la composition. Regarder la structure de groupe d ’un algorithme sert
à comprendre combien de brouillage supplémentaire on obtient en chiffrant plusieurs
fois.
Cependant, la question pertinente n’est pas de savoir si un algorithme est vraiment
un groupe, mais à quel point il est proche d’un groupe. Si cela revenait à perdre un
élément, ce ne serait pas un groupe ; mais statistiquement le double chiffrement serait
une perte de temps. Les travaux concernant le DES ont montré qu’il est loin d’être un
groupe. Il reste encore des questions intéressantes à propos du semi-groupe généré par
le chiffrement par le DES. Est-qu’il contient l’identité : c ’est à dire, engendre-t-il un
groupe? En d ’autres termes, certaines combinaisons d ’opérations de chiffrement (pas
de déchiffrement) fournissent-elles éventuellement la fonction identité? Si c ’est le cas,
quelle est la longueur de la combinaison la plus petite?
Le but est d’estimer la taille de l’espace des clefs pour une attaque exhaustive théorique
et de donner la meilleure borne inférieure de l’entropie de l’espace des clefs.
Clefs faibles
Dans un bon algorithme de chiffrement par blocs, toutes les clefs sont aussi solides les
une que les autres. Les algorithmes qui ont un petit nombre de clefs faibles ne posent
généralement pas de problème. Il y a peu de chance d ’en tirer une au hasard et il est
facile de les éviter. Cependant, on peut parfois exploiter ces clefs faibles si l’algorithme
est utilisé comme fonction de hachage à sens unique (voir § 18.11).
14-10 Théorie des algorithmes de chiffrement par blocs 369
Conception de tables—S
La solidité d’une variété de réseaux de Feistel— et plus spécifiquement leur résistence
aux cryptanalyse différentielle et linéaire— est directement reliée à leurs tables-S. Ceci
a lancé une voie de recherche sur ce qui constitue de bonnes tables S.
Une table—S est une simple substitution : une application de m bits d ’entrée vers n bits
de sortie. Une table- S avec m bits en entrée et n bits en sortie s’appelle une table—
S à m*n bits. Les tables- S constituent en général la seule étape non linéaire d’un
algorithme ; elles sont ce qui lui donne sa sécurité. En général, plus elles sont grandes,
meilleures elles sont.
Le DES a huit tables S à 6*4 bits différentes. K h u f u et K h a f r e ont une seule table-
5 à 8*32 bits, L O K I a une table S à 12*8 bits, et B l o w f i s h et C A S T ont tous les
deux des tables S à 8*32 bits. Dans ID E A la table-S1est en fait l’étape de mulitpli-
cation modulaire ; c’est une table- S à 16* 16 bits. Plus la table-S est grande, plus il
370 Chapitre 14 Encore d’autres algorithmes de chiffrement par blocs
est difficile de trouver des statistiques utiles à l'attaque par cryptanalyse linéaire ou
différentielle [655, 730, 1628]. Aussi, quand des tables S aléatoires ne protègent pas
optimalement en général contre les cryptanalysés différentielle et linéaire, il est plus
facile de trouver des tables S solides si elles sont plus grandes. La plupart des tables-S
aléatoires ne sont ni linéaires, ni dégénérées, et offrent une forte résistence à la cryp
tanalyse linéaire, et la fraction qui ne satisfait ces critères devient rapidement infime
quand le nombre de bits en entrée décroît [1190, 1191, 1192],
La grandeur de m est plus importante que celle de n. Augmenter n réduit l’efficacité de
la cryptanalyse différentielle, mais augmente largement celle de la cryptanalyse linéaire;
En fait, si n > 2m — m, il y a toujours une relation linéaire entre les bits en entrée et
en sortie de la table S'. Et si n > 2m, alors il existe une relation linéaire entre les bits
de sortie [171].
La plupart de ces travaux met enjeu les fonctions booléennes [101,1104,1273,1413].
Pour être sûres, les fonctions booléennes utilisées dans une table-S1doivent satisfaire
des conditions spécifiques. Elles ne devraient pas être linéaires ou affines, ni même s’en
approcher [13, 1184, 1183, 1193]. Il devrait y avoir un équilibre entre les un et les
zéros, et aucune corrélation entre différentes combinaisons de bits. Les bits en sortie
devraient se comporter indépendamment lorsqu’on eomplémente un bit en entrée. Ces
critères de conception sont aussi reliés à l’étude des fonctions courbées qui sont les
fonctions dont on peut prouver qu’elles sont optimalement non linéaires. Bien que leur
définition soit simple et naturelle, leur étude est très compliquée [1356, 1225, 958, 906,
1182, 1282, 299, 300, 301, 156, 353, 503, 302].
Une propriété très importante semble être l’effet d’avalanche : combien de bits changent
en sortie d’une table-S quand certains bits sont changés en entrée. Il est facile d’im
poser certaines conditions aux fonctions booléennes pour qu’elles satisfassent certains
critères d ’avalanche, mais les construire est bien plus difficile. Le critère d ’ avalanche
strict (C A S en abrégé) guarantit que la moitié des bits changent en sortie quand un
bit change en entrée [1588]. Se référer aussi à [1483, 574, 1273, 403]. Un article tente
d’examiner tous ces critères en termes de perte d’information [1642],
Il y a quelques années, les cryptographes ont proposé de choisir les tables -S de sorte
que le tableau des distributions des différences soit uniforme. Cela protégerait de la
cryptanalyse différentielle en aplatissant les différentielles de n’importe quelle ronde [10.
445, 446, 1184]. LO K I, par exemple, suit cette conception. Cependant, cette approchi
peut parfois favoriser la cryptanalyse différentielle [178]. En fait, une meilleure approcht
consiste à s’assurer que la différentielle maximale est aussi petite que possible. Kwangjc
Kim a proposé cinq critères de construction des l abiés- S [835], similaires aux critères
de conception des tables-S1du DES.
Choisir de bonnes tables S n’est pas une tâche aisée ; il y a plusieurs idées qui s’op
posent sur la façon de le faire. On peut recenser quatre approches différentes.
1. Choisir aléatoirement. Il est clair que les petites tables -S aléatoires ne sont pas
sûres, mais les grandes tables S aléatoires peuvent l’être suffisament. Les tables-
S prenant en entrée huit bits ou plus sont assez solides [1191, 1192]. Celles dr
douze bits sont meilleures. On obtient encore plus de robustesse si les tables -S
sont à la fois aléatoires et dépendantes de la clef. ID E A utilise des tables S à la
fois grandes et dépendantes de la clef.
testent alors si elles ont les propriétés requises. Voir [13, 730] pour des exemples
de cette approche.
3. Les faire à la main. Cette technique utilise peu les mathématiques : les tables
S sont produites par des méthodes plus intuitives. Bart P r e n e e l a établi que
«...les critères intéressants théoriquement ne sont pas suffisants [pour choisir des
fonctions booléennes pour les tables- 5]...» et que «...des critères de conception
ad hoc sont nécessaires » [1273].
4. Les faires grâce aux mathématiques. Il s’agit de générer des tables S selon des
principes mathématiques de sorte que l’on puisse prouver qu’elles soient résis
tantes aux cryptanalysés différentielle et linéaire, et qu’elles ont de bonnes pro
priétés de diffusion. Voir [1185] pour un excellent exemple de cette approche.
Ci = M t © H { K , C i - 1 )
M.% = Ci © H ( K, Ci —1 )
La taille des blocs est celle de la sortie de la fonction de hachage Ceci donne en fait un
algorithme en mode C FB . Une construction similaire donne un algorithme en mode
OFB:
Ci = M i ® Si ; Si = HiKiCi-i)
M i = Ci ® Si ; St = H ( K , C t- i )
Karn
Cette méthode, inventée par Phil K a r n et placée dans le domaine public, dérive un
algorithme de chiffrement réversible à partir d’une fonction de hachage à sens unique
particulière.
L’algorithme manipule le texte en clair et le texte chiffré par blocs de 32 octets.La
clef peut avoir n’importe quelle longueur, bien que certaines longueurs de clefs soient
plus efficaces pour certaines fonctions de hachage à sens unique. Pour les fonctions de
hachage à sens unique M D 4 et M D5, des clefs de 96 octets (768 bits) conviennent le
mieux.
Pour chiffrer, divisez d’abord le texte en clair en deux moitiés de 16 octets: M g et
M d ■ Ensuite, divisez la clef en deux moitiés de 48 octets: K g et Kd-
M = M g, Md
K = K g; K d
Cd = M d ® H { M g, Kg)
Cg = M g ® H { M d , K d)
C = Cgffd
14-11 Utilisation de fonction de hachage à sens unique 373
M g = C g © H(Cg, K g)
Aid — Cg © H{Cd,Kd)
A4 = A4g,A4d
La structure générale de l’algorithme est la même que la plupart des algorithmes par
blocs décrits dans cette section. Il n’y a que 2 rondes, car la complexité de l’algorithme
est cachée dans la fonction de hachage à sens unique. Et, puisque la clef n ’est utilisée
que comme entrée à la fonction de hachage à sens unique, elle ne peut pas être retrouvée
par une attaque à texte en clair choisi — en faisant, bien sûr, l’hypothèse que la fonction
de hachage à sens unique est sûre.
Luby—Rackoff
Michael L u b y et Charles R a c k o f f montrèrent que K a r n n’était pas sûr[1002].
Considérez deux messages d’un bloc : A B et A C . Si le cryptanalysteconnaît à la
fois le texte en clair et le texte chiffré du premier message, et s’il connaît la première
moitié du texte en clair du second message, alors il peut aisément calculer la deuxième
moitié du second message. Ceci est une attaque à texte en clair connu utile seulement
dans certaines circonstances mais c ’est un problème de sécurité majeur.
Un algorithme de chiffrement à trois rondes évite ce problème [1002, 1645, 1646]. Il
utilise trois fonctions de hachage à sens unique Hi, H 2 et H3. Des travaux plus poussés
ont montré que l’on peut prendre f / j = H 2 ou bien H 2 ~ Hz, mais pas les deux en
même temps [1202]. De plus, H\, H 2 et Hz ne peuvent pas se baser sur l’itération de la
même fonction de base [1645]. Dans tous les cas, en supposant que H{k,x) se comporte
comme une fonction pseudo-aléatoire, voici une version à trois rondes :
B lo c m essage C le f
F ig . 14.5 - M D C
M D C peut être utilisé avec n ’im p orte quelle fonction de hachage à sens unique : MD4,
M D5, S n e f r u , et autres. Il n ’est pas breveté. N ’im porte q u i peut l ’utiliser à tout
m om ent, com m e il le désire, sans payer de royalties [677].
Cependant, je ne fais pas confiance à cette construction. Il est possible d’attaquer la
fonction de hachage d’une manière qui échappe à ce qui est prévu dans sa conception.
Il n’est pas important que les fonctions de hachage à sens unique résistent aux attaques
à textes en clair choisis, où un cryptanalyste choisit plusieurs de ces valeurs de départ
de 160 bits, les « chiffre » par la même « clef » de 512 bits, et utilise cela pour obtenir
des informations sur la clef de 512 bits utilisée. Comme les concepteurs de la fonction
de hachage ne se sont pas préoccupés de cela, il semble que c ’est une mauvaise idée
d ’espérer voir votre algorithme de chiffrement par blocs résister à cette attaque.
14-12 Choisir un algorithme de chiffrement par blocs 375
Combinaison d’algorithmes
de chiffrement par blocs
Il existe de nombreuses façon de combiner des algorithmes de chiffrement par blocs pour
obtenir de nouveaux algorithmes. Le but de la manœuvre est d ’essayer d ’augmenter
la sécurité en évitant les turpitudes de la conception d ’un nouvel algorithme. Le DES
est un algorithme sûr ; il a été cryptanalysé pendant plus de vingt ans et le meilleur
moyen de la casser en pratique reste l’attaque exhaustive. Cependant, la clef est trop
courte. Ne serait-il pas souhaitable d ’utiliser le DES comme un élément de base d ’un
autre algorithme? Nous aurions tous les avantages: l’assurance de deux décennies de
cryptanalyse et une longue clef.
Le surchiffrement est une technique de combinaison : utiliser le même algorithme
pour chiffrer le même bloc de texte en clair plusieurs fois avec différentes clefs. Il existe
d’autres techniques.
Chiffrer un bloc de texte en clair deux fois avec la même clef, que ce soit avec le même
algorithme ou avec un autre, ne sert pas à grand chose. Pour le même algorithme,
cela n’affecte pas la complexité d ’une recherche exhaustive1. Pour des algorithmes
différents cela peut être ou ne pas être le cas. Si vous allez utiliser une des techniques
de ce chapitre, assurez vous que les différentes clefs sont différentes et indépendantes.
C = E K2(E K l(M ))
M = D K l ( D K a(C ))
1. Rappelez vous de supposer qu ’ un cryptanalyste connaît les détails de l’ algorithm e ainsi que le
nombre de chiffrements effectués.
378 Chapitre 15 Combinaison d’algorithmes de chiffrement par blocs
Si l’algorithme de chiffrement par blocs est un groupe (voir § 11.3), il existera forcément
une clef K$ telle que :
C = EK, { E Kl( M ) ) = E Ka(M)
Dans le cas contraire, le bloc de texte chiffré résultant du double chiffrement serait
beaucoup plus difficile à retrouver par recherche exhaustive. Au lieu de 2n tentatives (où
n est le nombre de bits de la clef), il faudrait 22n tentatives. Si l’algorithme manipule des
blocs de 64 bits, le texte doublement chiffré nécessiterait 2 128 tentatives pour retrouver
la clef.
Cela n’est pas vrai pour une attaque à texte en clair connu. M e r k l e et H e llm a n [1072]
ont développé un compromis temps-mémoire qui, dans le cadre d’une attaque à texte
en clair connu, permet de casser ce chiffrement double avec 2 n+1 tentatives et non pas
22" tentatives2. Cette attaque est appelée attaque par collisions et elle marche en
chiffrant à une extrémité, en déchiffrant à l’autre et en mettant en correspondance les
résultats au milieu.
L’attaque est conduite de la manière suivante: le cryptanalyste connaît A4i, Ci, A4 2
et C2 , tels que :
Ci -- E k 3 ( Ekx{ M 1 ))
C2 — E k 2 ( E k, ( M . 2 ))
Pour tous les K possibles (soit K i , soit K 2 ), calculez Ek{-M-i) et gardez le résultat en
mémoire. Quand vous les avez tous, calculez D u {Ci) pour tous les K et cherchez le
même résultat en mémoire. Si vous le trouvez, il est possible que la clef courante soit
K 2 et la clef en mémoire K j . Essayez de chiffrer M 2 avec K\ et K 2 : si cela donne C2,
vous pouvez être pratiquement sûr (avec une probabilité de succès de 2 2n~2b, où b est
la taille de bloc) que vous avez K\ et K 2. Sinon, continuez à chercher. Attendez-vous
à avoir environ (22” -26) faux résultats positifs avant de trouver le bon. Le nombre
maximal de tentatives de chiffrement que vous devrez probablement essayer est 2 x 2 ",
ou 2 n+1. Si la probabilité d’erreurs est trop grande, vous pouvez utiliser un troisième
bloc de texte chiffré pour avoir une probabilité de succès de 2 2n~ 3b. Il y a encore
d’autres optimisations [914].
Cette attaque nécessite beaucoup de mémoire, 2n blocs. Pour un algorithme à 56 bits,
cela donne 256 blocs de 64 bits, ou 259 octets. C ’est encore beaucoup de mémoire
par rapport à ce que quelqu’un peut appréhender aisément mais c ’est suffisant pour
convaincre le plus paranoïaque des cryptographes que le chiffrement double ne vaut
rien.
Pour une clef de 128 bits, la mémoire requise ateind la somme astronomique de 1039
octets. Si nous supposons qu’il existe un moyen de stocker un bit d’information sur
un seul atome d ’aluminium, le périphérique de mémoire nécessaire à cette attaque
formerait un cube d’aluminium solide de 1 km de côté. L ’attaque par collisions semble
infaisable pour des clefs de cette longueur. .
Une autre méthode de surchiffrement double, appelée parfois Davies-Price, est une
variante de C B C [435].
Ct = EKl ( M t © EK2(Ci~i))
■Mi — D k x{Ci ) © D k 2(Ci ~ 1 )
2. Ils l’ont m ontré pou r le DES, mais le résultat peu t être généralisé à n ’ im porte quel algorithme
de chiffrement par blocs.
15.2 Surchiffrement triple 379
Ils prétendent que « ce mode n’a pas de vertu spéciale », mais il semble vulnérable à
la même attaque par collisions que les autres modes de surchiffrement double.
C = E k i ( D K2 (EKi ( M )))
M = D Kl(EK2 (DKl(C)))
b = D Kl(C)
3° Regarder dans le tableau, pour chaque K 2 possible, les éléments qui donnent
une seconde valeur valeur intermédiaire b qui correspond :
b = E K2 (a)
L’attaque requiert 2rl+rn/ p étapes et p blocs de mémoire. Pour le DES, cela fait 2120/p
[1564]. Pour p supérieur à 256, cette attaque est plus rapide que la recherche exhaustive
C = E K3 {DK2 {EKl{M) ) )
•M = S>k , ( E K2 (Ük 3 (C)))
K l = E x , (D X2 (EX i (Ti)))
K 2 = E X2 (DXl ( e X2 { t 2)))
K 3 = EXl (E > x2 (EX i (T3)))
Ti, T2 et I 3 sont des constantes non nécessairement secrètes. Cette une construction
spéciale qui garantie que pour n’importe quelle paire de clefs, la meilleure attaque est
une attaque à texte en clair connu.
15.2 Surchiffrement triple 381
Cj = EK3(Si(BCi-1) ; St = Dfc2(TiQ)Si^i) ; T) =
M i — Ti^iCBDh^i'E) ; Tt — Sl-\ Q)Ek .2(Si) ; S, - C * _ i (BD^-ffCi)
Le IV est Co-
Les deux modes requièrent plus de ressources que le chiffrement simple : plus de ma
tériel ou plus de temps. Cependant, avec trois puces de chiffrement, la bande passante
382 Chapitre 15 Combinaison d’algorithmes de chiffrement par blocs
du C B C interne est aussi grande que celle du chiffrement simple. Comme les trois chif
frements C B C sont indépendants, les trois puces peuvent travailler en permanence,
chacune ayant une rétroaction sur elle-même.
Par contre, la rétroaction du C B C externe est extérieure aux trois chiffrements. Cela
veut dire que même avec trois puces, la bande passante est le tiers de celle du chiffrement
simple. Pour obtenir la même bande passante, il faut intercaler des IV (voir § 9.12) :
Ci = E k 3 {D k 3 ( E ^ i - M i 3)))
Dans ce cas, les IV sont Co, C 1 et C _ 2 . Cela ne facilite pas les réalisations logicielles,
à moins que vous ne disposiez d’une machine parallèle.
Malheureusement, le mode le plus simple est aussi le moins sûr. BIHAM a étudié plu
sieurs modes dans l’optique de la cryptanalyse différentielle à texte chiffré choisi et a
trouvé que le C B C interne est seulement légèrement plus sûr que le chiffrement simple
contre une attaque différentielle. Si vous visualisez le surchiffrement triple comme un
seul algorithme plus gros, alors la rétroaction interne autorise l’introduction d ’infor
mation connue et externe dans les rouage internes de l’algorithme ; ceci facilite la
cryptanalyse. Les attaques différentielles ont besoin d ’une quantité énorme de textes
chiffrés choisis et ne sont pas très pratiques, mais les résultats devraient inspirer la
méfiance des paranoïaques. Un autre examen vis à vis de l’attaque par colüsions et de
l’attaque exhaustive montre qu’ils sont tous les deux sûrs [807].
Il existe aussi d’autres modes. Vous pouvez chiffrer le fichier entier une fois en ECB,
puis deux fois en C B C ; ou une fois en C B C , une fois en EC B , et une fois en CBC ;
ou encore deux fois en C B C et une fois en E C B . B ih a m a montré que ces variantes ne
sont pas plus sûres que le DES vis à vis d ’une attaque par cryptanalyse différentielle à
texte en clair choisi [170]. Et il n’y a pas beaucoup d’espoir pour les autres variantes. Si
vous voulez utiliser le surchiffrement triple utilisez des modes sans rétroaction externe.
C = E K3 ( P ( DK2 (P(EKl(M)))))
Ce remplissage non seulement brouille les motifs réguliers mais aussi superpose les
blocs chiffrés comme des briques. Cela ne rajoute qu’un bloc à la longueur du message.
Une autre technique, proposée par Cari E llison consiste à utiliser de fonction de
permutation sans clef entre les trois chiffrements. La permutation pourrait opérer sur
de grands blocs— de l’ordre de 8 kilo-octets— et donnerait une taille de bloc effective
de 8 kilo-octets à cette variante. En supposant que la permutation est rapide, cette
variante n’est pas beaucoup plus lente que le surchiffrement triple classique.
C = E K3(T(DK2(T(EKl(M)))))
15.2 Surchiffrement triple 383
C = E Ks(R(T(nEK2(T(EKl( m ) ) )
Tous les chiffrement sont fait en mode C B C et les clefs sont fournies au moins pour
les n + 2 clefs de chiffrement et générateur de nombres aléatoires cryptographiquement
sûr.
Ce schéma a été proposé avec le DES, mais il fonctionne avec n’importe quel algorithme
de chiffrement par blocs. Je ne connais aucune étude de la sécurité de ce schéma.
384 Chapitre 15 Combinaison d’algorithmes de chiffrement par blocs
Cependant, je ne conseille pas ce genre de choses. Ce n’est pas plus rapide que le
surchiffrement triple conventionnel : il faut toujours six chiffrements pour chiffrer deux
blocs de données. Nous connaissons les caractéristiques du surchiffrement triple ; les
constructions telles que celle-ci ont souvent des vices cachés.
Si — E ü ïiS i-i © f i ) ; f i = / i + l
Ti — E x2(Ti-1 © I 2) ; h = I2 + 1
Ci = M z © Si © Ti
Si et Ti sont des variables internes et Ji et J2 sont des compteurs. Deux copies de l’al
gorithme fonctionnent dans une sorte de mode compteur O F B , et le texte en clair Si et
Tt sont combinés ensemble par ou exclusif. Les deux clefs K\ et K 2 sont indépendantes.
Je ne connais aucune cryptanalyse de cette variante.
xDES*
Dans [1646, 1647], le DES est utilisé comme élément de construction d’une série d’al
gorithmes de chiffrement par blocs avec à la fois une taille de clef et une taille de bloc
plus grandes. Ces constructions ne dépendent pas du tout du DES et peuvent être
reproduites avec n’importe quel algorithme par blocs.
Le premier algorithme, x D E S 1, est simplement une construction de LlJBY-RACKOFF
avec l’algorithme de chiffrement par blocs comme fonction sous-jacente (voir § 14.11).
La taille de bloc et la taille de clef sont respectivement le double de celles de l’algorithme
sous-jacent. Dans chacune des trois rondes, chiffrez la moitié droite avec l’algorithme
par blocs et l’une des clefs, combinez le résultat par ou exclusif avec la moitié de
gauche, et échangez les deux moitiés.
386 Chapitre 15 Combinaison d’algorithmes de chiffrement par blocs
C’est plus rapide que le surchiffrement triple classique car trois chiffrements permettent
de chiffrer deux fois plus que l’algorithme sous-jacent. Mais une simple attaque par
collisions permet de trouver la clef avec 2 k blocs de mémoire, où k est la taille de la clef
de l’algorithme sous-jacent. Chiffrez la moitié droite d’un bloc de texte en clair avec
toutes les valeurs possibles de K\, combinez la par ou exclusif avec la moitié gauche
du texte en clair, et stockez ces valeurs dans un tableau. Chiffrez alors la moitié droite
du texte chiffré avec toutes les valeurs possibles de K 3 et regardez si cela correspond à
une des valeurs du tableau. Si vous en trouvez une, la paire de clefs K i , K 3 forme un
candidat potentiel. Répétez l’attaque plusieurs fois et il ne restera qu’un seul candidat.
Cela montre que x D E S 1 n’est pas une solution idéale. Il y a même pire, il existe une
attaque à texte en clair choisi qui prouve que x D E S 1 n ’est pas beaucoup plus sûr que
l’algorithme de chiffrement par blocs sous-jacent [858],
xD E S2 étend cette idée à un algorithme à 5 rondes avec une taille de bloc 4 fois
supérieure et une taille de clef 10 fois supérieure à celles de l’algorithme sous-jacent.
La figure 15.4 illustre une ronde de x D E S 2 ; chacun des quatre sous-blocs ont même
taille que les blocs de l’algorithme sous-jacent et les 10 clefs sont indépendantes.
Ce schéma est lui aussi plus rapide que le surchiffrement triple : dix chiffrements per
mettent de chiffrer un bloc de taille quatre fois plus grande. Cependant, il est vulné
rable à la cryptanalyse différentielle [858] et ne devrait pas être utilisé. Le schéma est
vulnérable même si le DES est utilisé avec des clefs de rondes indépendantes.
Pour i > 3, xDES* est probablement trop imposant pour s’avérer utile en tant qu’al
gorithme par blocs. Par exemple, la taille de bloc de xD E S6 est six fois supérieure à
celle de l’algorithme sous-jacent, sa taille de clef est 21 fois supérieure, et 21 chiffre
ments sont nécessaires pour chiffrer un bloc six fois plus gros que ceux de l’algorithme
sous-jacent. Le surchiffrement triple est plus rapide.
Surchiffrement quintuple
Si le surchiffrement triple ne vous paraît pas assez sûr vous avez peut-être besoin de
chiffrer des clefs du surchiffrement triple en utilisant un algorithme encore plus sûr—
15.5 Troncature de clef (dans C D M F ) 387
alors vous pourriez utiliser des surchiffrements de plus haut degré. Le surchiffrement
quintuple est très résistant à l’attaque par collisions3.
1° Mettre à zéro les bits de parité qui sont les bits 8, 16, 24, 32, 40, 48, 56, 64.
2° Chiffrer le résultat de l’étape 1 avec le DES et la clef OxC408B0540BAlEOAE,
et combiner le résultat avec la clef obtenue à l’étape 1 par ou exclusif.
3° Mettre à zéro les bits suivants dans le résultat de l’étape 2 : 1, 2, 3, 4, 8, 16,
17, 18, 19, 20, 24, 32, 33, 34 35, 36, 40, 48, 49, 50, 51, 52, 56, 64.
4° Chiffrer le résultat de l’étape 3 avec le DES et la clef 0xEF2C041CE6382FE6.
Cette clef est alors utilisée pour chiffrer les messages.
Retenez que cette méthode racourcie la longueur des clefs, et affaiblit par conséquent
l’algorithme.
15.6 Blanchiment
B lanchim ent est le no m donné à une technique consistant à com biner p a r ou exclusif
une partie de la clef avec l ’entrée d ’un algorithm e de chiffrement p a r blocs, et à com biner
par ou exclusif une pa rtie de la clef avec la sortie de l ’algorithm e. La variante D ESX,
développée p a r RSA D I, est la prem ière à l ’avoir em ployée; viennent ensuite K h u f u
et K hafre (probablem ent indépendam m ent de celle-là)4.
L’idée est d’empêcher le cryptanalyste d’obtenir une paire texte en clair, texte chiffré
pour l’algorithme en question. La technique oblige les cryptanalystes à deviner non
seulement la clef de l’algorithme, mais aussi les valeurs de blanchiment. Comme il y a
une combinaison par ou exclusif avant et après l’algorithme, cette technique n’est pas
propice à une attaque par collisions.
C = K 3 0 E K 2( M ® A r)
M = K i © D K 2(C © K 3)
3. Des arguments similaires à ceux utilisés à propos du surchiffrement dou ble perm ettent de mon
trer que le surchiffrement quadruple n’a pporte qu’ une faible am élioration de sécurité par rapport au
surchiffrement triple.
4. RiVBST a nom m é cette technique ainsi, ce m ot n’ est pas d ’ un usage conventionnel.
388 Chapitre 15 Combinaison d’algorithmes de chiffrement par blocs
5. N otez au passage que l’ algorithm e utilisé couram m ent pou r com presser et numériser la parole à
la vitesse des m odem s est C E L P qui a été con çu par la NSA.
15.8 Combïaer plusieurs algorithmes de chiffrement par blocs 389
A puis B et Bernard qui a plus confiance en B peut utiliser B puis A. Ils pourraient
même ajouter un bon algorithme de chiffrement en continu entre les deux ; cela ne fait
pas de mal et ça peut très bien augmenter la sécurité.
Retenez que chaque clef doit être indépendante. Si A a une clef de 64 bits et B une
clef de 128 bits, le résulat après mise en cascade doit avoir une clef de 192 bits. Si vous
n’utilisez pas des clefs indépendantes, alors il y a beaucoup plus de chances que les
pessimistes aient raison.
En supposant que la chaîne de bit est réellement aléatoire, cette méthode consiste
à chiffrer A4 avec un masque jetable et à chiffrer à la fois le message chiffré et le
masque, chacun avec un des deux algorithmes. Comme les deux sont nécessaires pour
reconstruire A4, un cryptanalyste doit casser les deux algorithmes. L ’inconvénient est
que le texte chiffré est deux fois plus gros que le texte en clair.
On peut étendre cette méthode pour un plus grand nombre d’algorithmes, mais le texte
chiffré augmente avec chaque addition d ’un algorithme. C ’est une bonne idée, mais je
ne pense pas qu’elle soit très pratique.
Chapitre 16
Générateurs de suites
aléatoires et chiffrement en
continu
Dépassement pour a b m
ÿiu 106 1283 6075
221 211 1663 7875
222 421 1663 7875
223 430 2531 11979
936 1399 6655
1366 1283 6075
224 171 11213 53125
859 2531 11979
419 6173 29282
967 3041 14406
225 141 28411 134456
625 6571 31104
1541 2957 14000
1741 2731 12960
1291 4621 21870
205 29573 139968
226 421 17117 81000
1255 6173 29282
281 28411 134456
227 1093 18257 86436
421 54773 259200
1021 24631 116640
1021 25673 121500
228 1277 24749 117128
741 66037 312500
2041 25673 121500
229 2311 25367 120050
1807 45289 214326
1597 51749 244944
1861 49297 233280
2661 36979 175000
4081 25673 121500
3661 30809 145800
230 3877 29573 139968
3613 45289 214326
1366 150889 714025
23i 8121 28411 134456
4561 51349 243000
7141 54773 259200
232 9301 49297 233280
4096 150889 714025
233 2416 374441 1771875
234 17221 107839 510300
36261 66037 312500
235 84589 45989 217728
16.1 Générateurs pseudo-aléatoires de suites 393
D’autres chercheurs ont étendu les travaux de B o y a r pour casser tout générateur
œngruentiel polynomial [934, 899, 900]. Les générateurs linéaires congruentiels tron
qués ont aussi été cassés [583, 706, 582], de même que les générateurs linéaires congruen
tiels tronqués avec des paramètre inconnus [1505, 215], L ’évidence est faite que les
générateurs congruentiels ne sont pas utiles pour la cryptographie.
Toutefois, les générateurs linéaires congruentiels restent utiles pour des applications
non cryptographiques, comme les simulations. Ils sont efficaces et ont de bons com
portements statistiques par rapport aux tests empiriques les plus raisonnables. Vous
trouverez pas mal d’information sur les générateurs linéaires congruentiels et leurs
réalisations dans [953].
s t a t i c lo n g s i = 1 ; / * Un " l o n g " d o i t a v o ir 32 b i t s . */
s t a t i c lo n g s2 = 1 ;
d o u b l e com binedLCG ( v o i d )
t
lo n g q ;
lo n g z ;
if ( z < 1 )
z += 2 1 4 7 4 8 3 5 6 2 ;
r e t u r n z * 4 . 6 5 6 6 1 3 e - 10 ;
>
Ce générateur fonctionne tant que la machine peut représenter tous les entiers compris
entre —231 -f 85 et 231 — 85. Les variables s i et s2 sont globales; elles maintiennent
l’état courant du générateur. Avant le premier appel, elles doivent être initialisées. La
variable s i doit avoir une valeur initiale entre 1 et 2147483562; la variable s2 doit
avoir une valeur initiale entre 1 et 2147483398. Le générateur a une période d’environ
1018.
Si vous n’avez qu’un ordinateur 16 bits, utilisez plutôt le générateur suivant :
d o u b le com binedLCG ( v o i d )
in t q ;
in t z ;
i
si = InitSl ;
ë2 = InitS2 ;
e 3 = InitS3 ;
Ce générateur fonctionne tant que la machine peut représenter tous les entiers entre
—32 363 et 32 363. Les variables s i , s2 et s3 sont globales; elles maintiennent l’état
courant du générateur. Avant le premier appel, elles doivent être initialisées. La variable
si doit avoir une valeur initiale entre 1 et 32 362. La variable s2 doit avoir une valeur
initiale entre 1 et 31762. La variable s3 doit avoir une valeur initiale entre 1 et 31656.
Le générateur a une période de 1,6 x 1013.
Pour ces deux générateurs, le terme constant b est nul.
bn bn-l bt b3 b2 bi
r ir 1r r ir ir
-------- -— Fonction de rétroaction
Les cryptographes ont rafolé des algorithmes de chiffrement faits de registre à décalage
car ils sont faciles à réaliser en matériel. Je ne traiterai que la théorie mathématique.
Ernst S e l m e r le responsable de la cryptographie pour le gouvernement norvégien a
fondé la théorie des séquences de registre à décalge en 1965 [1416]. Solomon G o l o m b ,
un mathématicien de la NSA, a écrit un livre avec les résultats de S e l m e r et d ’autres
qui lui sont propres [645]. Voir aussi [982, 981, 1649].
La forme la plus simple de registre à décalage est le registre à décalage à rétroac-
396 Chapitre 16 Générateurs de suites aléatoires et chiffrement en continu
1 1 1 1
0 111
10 11
0 10 1
10 10
110 1
0 110
0 0 11
10 0 1
0 10 0
0 0 10
0 0 0 1
10 0 0
2. N ote du traducteur : en anglais, les registres à décalage à rétroaction linéaire sont appelés « h n ea r
feed ba ck sh ift reg isters » et sont abrégés * L F S R ».
F ig . 16.3 - R D R L à 4 bits
16.2 Registres à décalage à rétroaction linéaire 397
110 0
1 1 1 0
1 1 1 1 0 1 0 1 1 0 0 1 0 0 0 ___
Un R D R L à n bits est dans l’un de ses 2n —1 états. En théorie, il peut donc engendrer
des suites pseudo-aléatoires de 2'n — 1 bits de long avant de se répéter3. Seul les R D R L
avec certaines séquences de dérivation passeront par tous les 2" — 1 états internes ; ils
sont appelés R D R L d e p é r io d e m axim ale. La suite de bits produite alors en sortie
s’appelle une m -suite.
Pour qu’un R D R L soit de période maximale, le polynôme formé par les éléments de
la séquence de dérivation + 1 doit être un polynôme primitif modulo 2. Le d eg ré du
polynôme est la longueur du registre à décalage. Un polynôme primitif de degré n est
un polynôme irréductible qui divise x 2 _1 + 1 mais pas x d + 1 pour tout d qui divise
2n — 1 (voir § 11.3). Pour un aperçu plus mathématique consulter [645, 1651, 1650].
En général, il n’existe pas de moyen de générer des polynômes primitifs modulo 2 de
degré donné. Le moyen le plus facile consiste à choisir un polynôme aléatoirement et
à vérifier s’il est primitif. C ’est compliqué— à peu près autant que de vérifier qu’un
nombre aléatoire est premier— mais il existe de nombreux logiciels mathématiques qui
font cela. Quelques méthodes se trouvent dans [982, 981].
Le tableau 16.2 donne une liste de polynômes primitifs modulo 2 de différents degrés
[1585, 645, 1651, 1650, 1283, 692]. Par exemple, l’entrée (3 2 ,7 ,5 ,3 ,2 ,1 ,0 ) indique que
le polynôme suivant est primitif modulo 2 :
x 32 + x 7 + x 5 + x 3 + x 2 + x + 1.
3. C ’ est 2” — t et non pas 2n parce q u ’un registre à décalage rem pli de 0 donnera un R D R L qui
produit une suite infinie de 0, ce qui n ’est pas particulièrement utile.
398 Chapitre 16 Générateurs de suites aléatoires et chiffrement en continu
i n t RDRL ( ) {
s t a t i c u n s ig n e d l o n g S h i f t R e g i s t e r = 1 ; /* N’ im p o r t e q u o i s a u f 0 . * /
S h iftR e g is te r = ( (((S h ift R e g is t e r » 31)
~ (S h iftR e g is te r » 6)
(S h iftR e g is te r » 4)
“ (S h iftR e g is te r » 2)
' ( S h i f t R e g i s t e r >> 1 )
S h iftR e g is te r ))
& 0x00000001)
400 Chapitre 16 Générateurs de suites aléatoires et chiffrement en continu
« 31)
I (S h iftR e g is te r » 1 );
re tu rn S h ift R e g is t e r & 0x00000001;
>
Le code est légèrement plus compliqué quand la taille du registre à décalage est plus
grande que la taille d ’un mot de l’ordinateur.
Remarquez qu’ils ont tous un nombre impair de coefficients. J’en ai donné un si grand
nombre parce que les R D R L sont souvent utilisés pour le chiffrement en continu, et je
voulais qu’il y ait suffisamment d ’exemples différents pour que des personnes différentes
choisissent des polynômes primitifs différents. Puisque si p(x) est primitif x” p ( l /x) l’est
aussi, alors chaque entrée de la table représente en fait deux polynômes primitifs.
Par exemple, si (a, 6,0) est primitif, alors (a, a — 6,0) est aussi primitif. Si (a, 6, c, d, 0)
est primitif, alors (a, a — d, a — c, a — b, 0) est aussi primitif. Mathématiquement :
Les trinômes primitifs donnent les réalisations logicielles les plus rapides car seuls deux
bits du registre à décalage doivent être combinés par ou exclusif. En fait, les polynômes
primitifs modulo 2 donnés dans le tableau 16.2 sont clairsem és, ce qui veut dire que
la plupart de leur coefficients sont nuls. Les polynômes clairsemés sont toujours plus
faibles cryptographiquement, parfois cela suffit pour casser l’algorithme. Il vaut mieux
utiliser des polynômes primitifs modulo 2 denses (ceux qui ont beaucoup de coefficients
non nuls) pour les applications cryptographiques. Si vous utilisez des polynômes denses,
et à plus forte raison si vous les incluez dans la clef, vous pourrez manier des RDRL
beaucoup plus petits.
Il n’est pas facile de générer des polynômes primitifs modulo 2 denses. En général,
pour générer des polynômes primitif de degré k, vous devez connaître la factorisation
de 2k — 1. Trois bonnes références sur la génération de polynômes primitifs sont [653,
1296, 1297].
Les R D R L sont des générateurs de suites aléatoires par eux-mêmes mais ils ont des
propriétés non aléatoires gênantes. Les suites de bits successifs sont linéaires, ce qui les
rend tout sauf utiles pour la cryptographie. Pour un R D R L de taille n, l’état; interne
est donné par les n bits précédents de sortie du générateur. Même si le schéma de
rétroaction est inconnu, il ne faut que 2n bits consécutifs de la sortie pour le déterminer
avec l’algorithme très efficace de Berlekamp-Massey [1086, 1087] (voir § 16.3).
De grands nombres aléatoires engendrés à partir de bits successifs de telles suites
sont fortement corrélés et, pour certains types d’applications, pas du tout aléatoires.
Malgré cela, les R D R L sont souvent utilisés comme briques de base d’algorithmes de
chiffrement.
Eîitde
ortie
-----► b32 h? b6 b5 b4 b3 h2 b{ 1
/p A /p A /p A /p A
En langage C, on a :
# d e f i n e mask 0 x 8 0 0 0 0 0 5 7
s t a t i c u n s ig n e d l o n g S h i f t R e g i s t e r = l ;
v o i d seed_RDRL ( u n s i g n e d l o n g s e e d )
f
if ( s e e d == 0 ) / * pou r é v it e r l a ca ta stro p h e * /
seed = 1;
S h iftR e g is te r = seed ;
}
i n t m od ifie d _ R D R L (v o id )
f
if (S h ift R e g is t e r & 0x00000001) {
S h i f t R e g i s t e r = ( ( S h i f t R e g i s t e r ~ m ask) » 1) I 0x8000000;
retu rn 1;
> e ls e {
S h iftR e g is t e r » = 1;
retu rn 0;
>
}
L’avantage ici est que tous les ou exclusif peuvent être faits en une seule opération.
Ceci peut aussi être parallélisé et les polynômes de rétroaction peuvent différer. Cette
configuration de Galois peut aussi s’avérer plus rapide en réalisation matérielle, surtout
dans des réalisation V LSI spécialement conçues. En général, si votre matériel est bon
dans les décalages, utilisez une configuration de Fibonacci ; si vous pouvez exploiter le
parallélisme, utiliser une configuration de Galois.
40 2 Chapitre 16 Générateurs de suites aléatoires et chiffrement en continu
Complexité linéaire
Il est souvent plus facile d’analyser les algorithmes de chiffrement en continu que les
algorithmes de chiffrement par blocs. Par exemple, une des mesures importantes dans
l’analyse des générateurs à base de R D R L est la complexité linéaire. Elle est défi
nie comme la taille n du plus petit R D R L qui peut simuler la sortie du générateur
Toute suite de bits générée par une machine à nombre d’états fini sur un corps fini a une
complexité linéaire finie [1022]. La complexité linéaire est importante parce qu’un algo
rithme simple, l’algorithme de Berlekamp-Massey, permet de produire ce RDRL
après avoir examiné seulement 2n bits de la suite de bits [1021]. Une fois que vous avez
construit ce R D R L , vous avez cassé l’algorithme de chiffrement en continu qui utilise
ce générateur.
Cette idée a des extensions quand on considère des anneaux au lieu de corps [1309], et
quand le flux de codons est vu comme une suite d ’éléments d ’un corps de caractéristique
impaire [843]. Une amélioration plus poussée se trouve être la notion de profil de
complexité linéaire, qui permet de mesurer la complexité linéaire du flux de codons
au fur et à mesure qu’il augmente [1359, 1, 414, 1584]. Il existe un autre algorithme,
16.4- Chiffrement en continu à base de R D R L
permettant de calculer la complexité linéaire, qui n’est utile que dans des circonstances
très spéciales [599, 597, 598, 1347]. Une généralisation de la complexité linéaire est
donnée dans [776]. Citons aussi la notion de sphère de complexité [500] et la complexité
deux-adique [845].
Dans tous les cas, retenez qu’une complexité linéaire élevée n ’indique pas forcément
que le générateur est sûr, mais qu’une complexité linéaire faible dénote un générateur
non fiable [1359, 1259].
Autres attaques
Il existe d ’autres attaques générales contre les générateurs de codons. Le t e s t d e
c o n s is t e n c e lin é a ir e est une tentative d’identification d’une partie de la clef de chif
frement en utilisant des techniques matricielles [1640]. Il y a aussi l ’a t t a q u e d e c o n s is
te n ce p a r c o llis io n [40, 43]. L ’a lg o r it h m e d u s y n d r o m e lin é a ir e repose sur la pos
sibilité d ’écrire un fragment du flux de sortie sous forme d ’équation linéaire [1638, 1639].
Il y l ’a t t a q u e d e la m e ille u r e a p p r o x im a t i o n a ffin e [500] et l ’a t t a q u e d e la s u it e
d é r iv é e [42]. Même les techniques de la cryptanalyse différentielle ont été appliquées
aux algorithmes de chiffrement en continu [499], ainsi que celles de la cryptanalyse
linéaire [633].
longueurs différentes et avec des polynômes primitifs distincts4. La clef est l’état initial
des R D R L . Chaque fois qu’un bit est nécessaire, décalez les R D R L d ’un cran (on
parle parfois d ’im p u ls io n d ’ h o r lo g e ) . Le bit de sortie est une fonction de préférence
non linéaire de certains des bits de sortie des R D R L . Cette fonction est appelée la
f o n c t io n d e c o m b in a is o n et le générateur global est appelé un g é n é r a t e u r p a r
c o m b i n a is o n 5. La plupart des considérations théoriques sur ce type d’objets sont
l’œuvre de S e l m e r et Neal Z i e r l e r [1649].
Des complications ont pu être ajoutées. Certains générateurs ont des horloges de ca
dences différentes ; la cadence d ’un générateur dépend parfois de la sortie d’un autre.
Toutes ces idées de versions électroniques de machines à chiffrer d’avant guerre ont
pour nom g é n é r a t e u r s à h o r lo g e c o n t r ô lé e [643]. Le contrôle d’horloge se fait par
action simple si la sortie d ’un R D R L contrôle l’horloge d ’un autre, ou par rétroaction
si la sortie d ’un R D R L contrôle sa propre horloge.
Bien que ces générateurs soient au moins en théorie vulnérables aux attaques par
plongement et corrélation probabiliste [636, 634], beaucoup sont sûr à l’heure qu’il est.
On trouvera plus de théorie sur les registres à décalage à horloge contrôlée dans [97].
Ian C A S S E L L S , qui fut à la tête du département de mathématiques pures de Cambridge
et qui est un ancien cryptanalyste de Bletchy Park, a dit que « la cryptographie est un
mélange de mathématiques et de désordre, et que sans le désordre, les mathématiques
peuvent être utilisées contre vous ». Ce qu’il voulait dire est que dans les algorithmes
de chiffrement en continu, vous avez besoin d ’une structure mathématique telle que le
R D R L pour guarantir une taille maximale et d ’autres propriétés, et ensuite de désordre
compliqué et non linéaire pour empêcher autrui d ’obtenir le registre et de le résoudre.
Ce conseille vaut aussi pour les algorithmes de chiffrement par blocs.
Ce qui suit est un petit nombre de générateurs de codons à base de R D R L qui sont
apparus dans la littérature. Je ne sais pas si aucun d ’eux n’a jamais servi dans un
produit cryptographique réel. La plupart d’entre eux n ’ont d’intérêt que théorique.
Certains ont été cassés, d’autres sont peut être toujours sûrs.
Comme les algorithmes de chiffrement en continu sont généralement réalisés en maté
riel, les symbole de logique électronique seront utilisé dans les figures. Dans le texte,
© désigne le ou exclusif, A le et, V le ou, et -i la négation.
Générateur de G e f f e
Ce générateur de codons utilise trois R D R L , combinés de façon non linéaire (voir la
figure 16.6) [608]. Les sorties de deux des R D R L servent d ’entrées à un multiplexeur
et le troisième R D R L contrôle la sortie du multiplexeur. Si Oi, a2 et a3 sont les sorties
des trois R D R L , la sortie du générateur de G e f f e peut être décrite par la relation :
Si les polynômes primitifs de rétroaction des trois R D R L ont respectivement des degrés
m , n 2 et ris, alors la complexité linéaire du générateur est donnée par:
(ni + l)n 2 + n i n 3.
4. Si to u te s les lon g u eu rs son t p rem ières e n tre elles et si les p o ly n ô m e ch oisis p o u r la r étroa ction
son t to u s p rim itifs, ie g é n é ra te u r t o ta l e st d e p é rio d e m axim a le.
5. Si le b it de s o r tie n ’est fo n c t io n q u e d ’ un seu l g én éra teu r, o n p arle alors d e g énérateur par
filtre.
16.4 Chiffrement en continu à base de R D R L 405
La période de ce générateur est le plus petit commun multiple des périodes des trois
générateurs. En faisant l’hypothèse que les degrés des trois polynômes primitifs de
rétroaction sont premier entre eux, la période est égale au produit des périodes des
trois R D R L .
Multiplexeur
2 pour 1
a2(t)
RDRL-2 ------------- ► 0
Y -------- ► b(t)
a3(t)
RDRL-3 -------------- ►
1 Sélection
afft)
RDRL-1
Bien que ce générateur ait bonne allure sur le papier, il est cryptographiquement faible
et vulnérable à une attaque par corrélation [830, 1640]. Si vous passez par les pro
babilités, vous constaterez que la sortie du générateur est égale à celle du R D R L -2
dans 75 % des cas. Si les séquences de dérivation sont connues, vous pouvez essayer
de deviner la valeur initiale du R D R L -2 et générer le flux de sortie de ce générateur.
Vous pouvez alors compter le nombre de fois où la sortie du R D R L est égale à celle
du générateur. Si vous avez bien deviné les suites seront égales 75 % du temps, si vous
vous êtes trompés, elle ne seront égales que 50 % du temps.
De même qu’elle est égale à celle du R D R L -3 dans 75 % des cas. Avec de telles
corrélations, le générateur de codons peut être cassé de manière relativement aisée. Par
exemple, si les polynômes primitifs n’ont que trois termes chacun et que le polynôme
de degré le plus élevé a un degré n, il ne faut alors qu’un segment de 37 x n codons de
la suite de sortie pour reconstruire les états internes des trois R D R L [1641],
Générateur de J e n n in g s
Ce schéma utilise un multiplexeur pour combiner deux R D R L [778, 779, 780]. Pour
chaque bit de sortie, le multiplexeur, contrôlé par R D R L -1 , choisit un bit de R D R L -
2. U y aussi une fonction qui met en correspondance la sortie de R D R L -2 avec l’entrée
du multiplexeur (voir la figure 16.8).
406 Chapitre 16 Générateurs de suites aléatoires et chiffrement en continu
♦
La clef est l’état initial des deux R D R L et la tonction de correspondance. Bien que
ce générateur ait de très bonnes propriétés statistiques, il est tombé sous le coup de
l’attaque de consistence par collision de Ross A n d e r s o n [40] et l’attaque de consitence
linéaire [1640, 444]. N’utilisez pas ce générateur.
G(t+io) H » _k-
------ —► -------
(J)
ü(t+i j )
RDRL-1
Sfft) CD'
e Multiplexeur C(t)
—--------- ------------- ^ o
a(t +i h_x) =>0 1 n- 1
f + Sk- \W
Kn b(t) b{t+n-1)
RDRL-2
F ig . 16.8 - Générateur de J e n n in g s
16-4 Chiffrement en continu à base de R D R L
dans le cas général. Cependant, il est susceptible d ’une attaque par corrélation [1641].
Générateur à seuil
Ce générateur essaie de pallier les défauts de sécurité des générateurs précédents en
utilisant un nombre variable de R D R L [281]. La théorie veut que si vous utilisez un
grand nombre de R D R L , il est plus difficile de casser le chiffre.
Ce générateur est illustré par la figure 16.12. Prenez la sortie d ’un grand nombre de
R D R L (prenez-en un nombre impair). Assurez-vous que les tailles de tous ces R D R L
soient premières entre elles et que tous les polynômes de rétroaction soient primitifs
— pour maximiser la période. Si plus de la moitié des bits de sortie sont à 1, alors la
sortie du générateur est à 1. Si plus de la moitié des bits sont à 0, alors la sortie du
générateur est à 0.
Avec trois R D R L , la sortie du générateur peut être décrite par :
C ’est très sim ilaire à un générateur d e G e f f e , ex ce p té q u ’il y a une com p lexité linéaire
plus grande :
nin 2 + nl n3 + n 2 n3
Générateurs auto-cadencés
Les générateurs auto-cadencés sont des générateurs qui contrôlent leur propre horloge.
Deux propositions ont été faites, l’une par R u e p p e l (voir la figure 16.13) [1361] et
l’autre par C h a m b e r s et G o l l m a n n [313] (voir la figure 16.14). Dans le générateur
de R u e p p e l , quand la sortie du R D R L est à 0, le R D R L est cadencé d fois. Quand
la sortie du R D R L est à 1, le R D R L est cadencé k fois. Le générateur de C h a m b e r s
et G o l l m a n n est plus compliqué mais l’idée est la même. Malheureusement, ces deux
générateurs ne sont pas sûrs [1641], malgrés des modifications qui pourraient corriger
les problèmes [1364].
Bien que la complexité linéaire soit élevée et que ce générateur possède d’excellentes
propriétés statistiques, il tombe encore sous le coup d ’une attaque de consistence li
néaire [1641]. Si ni est la longueur de R D R L —1, n2 est la longueur de R D R L -2 , et
d est le quotient de vitesse entre les deux, alors l’état interne du générateur peut être
reconstruit à partir d ’une suite de bits de sortie de longueur :
n\ + n2 + log2 d.
Générateur sommatoire
Fruit des travaux Rainer R u e p p e l , ce générateur combine la sortie de deux R D R L
dans un additionneur avec retenue [1360, 1359]. Cette opération est fortement non
linéaire et, jusqu’à la fin des années 80, ce générateur était ce qui se faisait de mieux en
matière de sécurité, mais il est tombé sous le coup de l’attaque par corrélation [1061,
1062, 1097]. De plus, il a été prouvé que c ’est un cas de registre à décalage à rétroaction
avec retenue (voir § 17.4) qui peut être cassé [845].
Générateur dynamique
Le nom complet est générateur dynamique de suites aléatoires6 [1123]. L’idée est
d’avoir deux générateurs par filtre, à seuil, sommatoires, ou autres, alimentés par un
ensemble de R D R L et contrôlé par un autre R D R L .
Cascade de G o l l m a n n
La cascade de G o l l m a n n (voir la figure 16.16) décrite dans [638, 314] est une version
renforcée du générateur à signal d’arrêt. Il consiste en une série de R D R L dont l’horloge
est contrôlée par le R D R L précédent. Si la sortie de R D R L -1 est 1 à l’instant t — 1,
alors R D R L -2 change d ’état. Si la sortie de R D R L —2 est 1 à l’instant t — 1, alors
R D R L -3 change d’état, et ainsi de suite. La sortie du R D R L final est la sortie du
générateur. Si tous les R D R L ont la même taille, n, la complexité linéaire d’un système
de k R D R L est :
n(2” — l ) fc—1.
Les cascades sont une bonne idée : leur conception est très simple, et elle permettent
de générer des suites avec des périodes énormes, des complexités linéaires énormes, et
de bonnes propriétés statistiques. Elles sont vulnérables à une attaque appelée v é r -
r o u illa g e [642], C ’est une technique dans laquelle le cryptanalyste reconstruit l’entrée
du dernier registre à décalage de la cascade, puis remonte la cascade registre par re
gistre. Cela pose un problème sérieux dans certaines situations en réduisant la longueur
effective de la clef de l’algorithme, mais il possible de prendre certaines précautions pour
minimiser l’attaque.
Des analyses plus poussées ont montré que la suite se rapproche de l’aléatoire quand
k grandit [639, 640, 644, 641], Sur la base d ’attaques récentes sur les cascades de
G o l l m a n n courtes, je recommande de prendre k supérieur à 15. Vous feriez mieux
d’utiliser plus de R D R L de petite taille plutôt que peu de grande taille.
Générateur à réduction
Le générateur à réduction [382] repose sur une forme différente de contrôle d ’horloge
que celle des générateurs précédents. Prenez deux R D R L , R D R L —1 et R D R L —2.
Opérez un cycle d ’horloge sur chacun d ’eux. Si la sortie du R D R L -1 est 1, alors la
sortie du générateur est celle du R D R L -2 . Dans le cas contraire, annulez les deux bits,
opérez un cycle d ’horloge sur chacun des R D R L , et essayez à nouveau.
Cette idée est simple, raisonnablement efficace et semble sûre. Si les polynômes primitif
sont clairsemés, le générateur est vulnérable, mais aucun autre problème n’a été décelé.
412 Chapitre 16 Générateurs de suites aléatoires et chiffrement en continu
Même ainsi, c’est récent. Un problème de réalisation vient du fait que la cadence de
sortie n’est par régulière ; si le R D R L -1 sort beaucoup de zéros à la suite, le générateur
ne sort aucun bit Les auteurs suggèrent d’utiliser une mémoire tampon pour résoudre
cela [382] Une réalisation pratique du générateur à réduction est présentée dans [901].
Générateur à auto-réduction
Le générateur à réduction [1058] est une variante du générateur à réduction. Au lieu
d’utiliser deux R D R L , considérez une paire de bits provenant d ’un seul R D R L . Opérez
deux cycle d ’horloge sur un R D R L . Si le premier bit de la paire est 1, la sortie est le
second bit. Si le premier bit est 0, jetez les deux bits et recommencez. Si le généra
teur à auto-réduction utilise environ deux fois moins de mémoire que le générateur à
réduction, il est aussi deux fois moins rapide
Si le générateur à auto-réduction semble aussi sûr, il présente encore des comportements
inexpliqués et des propriétés inconnues. C ’est un générateur tout nouveau ; consacrez-y
du temps.
16.5 A5
L’algorithme de chiffrement en continu A5 sert à chiffrer les messages en téléphonie
GSM (dont le nom vient de « Group Spécial Mobile »). C ’est le standard non améri
cain pour les téléphones cellulaires numériques. L’algorithme est utilisé pour chiffrer
la communication entre le mobile et la borne reliée au réseau. Le reste de la commu
nication n’est, pas chiffrée ; la compagnie téléphonique peut facilement espionner vos
conversations.
Beaucoup d’affaires politiques étranges entourent ce projet. A l’origine, on pensait
qu’insérer de la cryptographie en téléphonie G SM nuierait à son exportation dans
certains pays. Maintenant, certains rapports offciels mettent en cause A5, impliquant
qu’il est si faible que cela peut nuire aux ventes à l’exportation. La rumeur dit que
plusieurs services de renseignements de l’OTAN se sont disputés au milieu des années
1980 pour savoir si le chiffrement de GSM devait être solide ou faible. Les allemands
voulaient un chiffrement solide commme ils se trouvaient à côté de l’Union Soviétique.
Les autres pays ont pris le dessus, et A 5 est de conception française.
Nous connaissons la plupart des détails. Une compagnie téléphonique britanique a
fournit toute la documentation à l’Université de Bradford en omettant de leur faire
signer un contrat de non divulgation. Il y eu des fuites ça et là, et l’algorithme aurait
même été posté sur In t e r n e t . Un article décrit A5 [1624], et le code source se trouve
à la fin de ce livre.
A5 est constitué de trois R D R L , de tailles de registres 19, 22 et 23 ; tous les polynômes
primitifs utilisés pour les rétroactions sont clairsemés. Chaque registre est cadencé en
fontion de son propre bit du milieu, combiné par ou exclusif avec l’inverse de la fonction
de seuil des bits du milieu des trois registres. Habituellement, deux des R D R L opèrent
un cycle d’horloge à chaque ronde.
Il existe une attaque évidente nécessitant 240 chiffrements : deviner le contenu des deux
premiers R D R L et essayez alors de déterminer le troisième R D R L d ’après le flux de
codons. (La faisabilité de cette attaque est encore sujette à débats, mais une machine
16.6 H ugues X P D / K P D 413
16.6 H u g u e s X P D /K P D
Cet algorithme vous est donné par H u g u e s A i r c r a f t C o r p . Il a été incorporé dans
des radios tactiques de l’armée et dans des équipements d’orientation vendus à des
militaires étrangers. Il fut conçu en 1986 et nommé X P D pour « Exportable Protection
Device » qui veut dire appareil de protection exportable. Plus tard, il ne fut plus classé
secret et fut rebaptisé K P D pour « Kinetic Protection Device » qui veut dire appareil
de protection dynamique [1045, 1044],
L’algorithme utilise un R D R L à 61 bits. Il y a 210 polynômes primitifs distincts qui ont
été approuvés par la NSA. La clef sélectionne un de ces polynômes (qui sont stockés
quelque part en mémoire morte), ainsi que l’état initial du R D R L .
Il a huit filtres non linéaires différents, chacun d’eux produit un bit à partir de six
dérivations provenant du R D R L . Les bits sont combinés pour générer un octet qui
sert à chiffrer ou à déchiffrer le flot de données.
Cet algorithme a l’air assez impressionnant, mais je doute qu’il le soit vraiment. La
NSA l’autorise à l’exportation, il doit donc exister une attaque avec un nombre d ’opé
rations de l’ordre de 240 ou moins. Quelle est-elle?
16.7 Nanoteq
N a n o t e q est une société sud africaine en électronique. Ceci est leur algorithme qui
a été adopté par la police sud africaine pour chiffrer leur communications par fax, et
certainement pour d’autres utilisations aussi.
L’algorithme est plus ou moins décrit dans [903, 904]. Il utilise un R D R L à 127 bits
avec un polynôme primitif de rétroaction fixé ; la clef est l’état initial du registre. Les
127 bits du registre sont réduits à un flux de codons au moyen de 25 cellules primitives.
Chaque cellule a cinq entrées et une sortie :
Chaque entrée de la fonction est combinée par ou exclusif avec certains bits de la clef. Il
y a aussi une permutation secrète qui dépend de la réalisation, et qui n’est pas détaillée
dans l’article. On ne peut se procurer cet algorithme qu’en réalisation matérielle.
Est-ce que cet algorithme est sûr? J’en doute. Durant le passage à la démocratie,
certains faxs embarassants d ’une station de police à une autre sont parfois apparus
dans les journaux libéraux. Cela pourrait très bien être le résultat des efforts des
services de rensignement américains, britaniques, ou soviétiques. Ross A n d e r s o n a
fait les premiers pas vers la cryptanalyse de cet algorithme dans [47] ; j ’espère voir
davantage de résultats arriver bientôt.
4U Chapitre 16 Générateurs de suites aléatoires et chiffrement en continu
16.8 Rambutan
R a m b u t a n est un algorithme britanique conçu par le « Communication Electronics
Si les coefficients a,b,c, . . . ,k sont bien choisis, la période de ce générateur est au moins
2n — 1. Une condition nécessaire sur les coefficients est que l’on obtienne un R D R L de
longueur maximale lorsqu’on ne considère que les bits de poids faible.
Par exemple, (55,24,0) est un polynôme primitif d’après le tableau 16.2. Cela implique
que le générateur additif suivant est de longueur maximale :
Cela fonctionne dans ce cas parce que le polynome a trois coefficients non nuls. S’il
en a plus, d ’autres conditions sont requises pour obtenir un générateur de longueur
maximale. Consulter [254] pour les détails.
Fish
F ish est un générateur a d d itif basé sur des techniques utilisées dans le générateur à
réd u ction [197]. Il p rod u it un flux d e m ots d e 32 b its qui peu t être com bin é par ou
exclusif avec un flux de texte en clair pour produire le texte chiffré, ou avec le flux
de texte chiffré pour produire le texte en clair. Lenom vient de « Fibonacci shrinking
generator » qui veut dire générateur à réduction de Fibonacci.
Commencez par prendre deux générateurs additifs. La clef est constituée des états
initiaux de ces générateurs.
A z — { A i - 55 + A i24) modulo 2 32
Bi = 52 + -B j-ig) modulo 2 32
Ces suites sont réduites, par paires, selon le bit de poids faible de Bi : s’il vaut 1 , utilisez
la paire, s’il vaut 0 ignorez la paire. Notons par Cj la suite des mots de A t utilisés et
par Dj la suite des mots de B , utilisés. Ces mots servent par couples, 6 2 , et C 2j + \,
I)2j et D 2} f 1 pour former des couples de mots de 32 bits K 2j et K 2]+i en sortie.
E 2, = C 2j © (D 2j A D 2j + i )
F2j — D 2j + i © (E2j A C 2j+ 1 )
K 2j = E2j © F2j
K 2j+ i = G2j+ i © F2j
Cet algorithme est rapide. Sur un 486 à 33 MHz, une réalisation de Fish en C permet
de chiffrer 15 megaoctets de données par seconde. Malheureusement, il n’est pas sûr ;
une attaque demande un travail de 2 40 opérations environ [46].
Pike
P lK E est une version épurée de F i s h nous venant de Ross A n d e r s o n qui est celui qui
a cassé F ish [46]. Il comprend trois générateurs additifs, ceux-ci par exemple:
Ai = ( Aj _ 5 5 + 2 4 ) modulo 232
Bi = (H ,__57 + B i - 7 ) modulo 232
C i = { C i - 58 + C i_ 19) modulo 232
Pour générer le flux de codons, considérez les bits de retenue des trois additions. S’ils
sont tous les trois égaux (tous des 0, ou tous des 1), opérez un cycle d’horloge sur
les trois générateurs. Si ce n’est pas le cas, n’opérez un cycle d’horloge que sur les
deux générateurs dont les bits de retenue sont égaux. Mémorisez le bit de retenue du
troisième générateur pour la fois suivante La sortie finale est la combinaison par ou
exclusif des sorties des trois générateurs.
PlKE est plus rapide que FlSH puisqu’il faut en moyenne 2,75 étapes par sortie au
lieu de 3. Il est beaucoup trop récent pour inspirer confiance, mais il fait bonne figure
jusqu’ à présent.
Mush
Mush est un générateur à réduction mutuelle. C ’est facile à expliquer [1592], Prenez
deux générateurs additifs A et B . Si le bit de retenue de A est à 1, opérez un cycle
d’horloge sur B . Si le bit de retenue de B est à 1, opérez un cycle d ’horloge sur A .
416 Chapitre 16 Générateurs de suites aléatoires et chiffrement en continu
Opérez un cycle d ’horloge sur A et B et retenez les bits de retenue pour la fois suivante.
La sortie finale est la combinaison par ou exclusif des sorties de A et B.
Les générateurs les plus faciles à utiliser sont ceux de F i s h :
16.10 Gifford
Dabid G i f f o r d a inventé un algorithme de chiffrement en continu et l’a utilisé pour
chiffrer des dépêches par câble dans la région de Boston de 1984 jusqu’à 1988 [610,
609, 611]. L’algorithme a un seul registre de 8 octets : B\,B 2 , ■■■,B-j. La clef est l’état
initial du registre. L ’algorithme fonction en mode O F B ; le texte en clair n ’affecte pas
du tout l’algorithme. (Voir la figure 16.17).
F ig . 16.17 - G if f o r d
Pour générer un codon c,, joignez B 0 et i?2, joignez B 4 et B7 - Multipliez les deux
ensemble pour obtenir un nombre de 32 bits. Le troisième en partant de la gauche est
c,.
Pour mettre à jour le registre, décalez les bits de B t vers la droite de 1 bit en laissant
une copie du bit le plus à gauche en place. Décalez les bits de B 7 vers la gauche de 1
16.11 A lg o r ith m e M 417
16.11 Algorithme M
Le nom est du à K n u t h [864]. Il s’agit d’une méthode pour combiner deux flux pseudo
aléatoires de manière à augmenter leur sécurité. La sortie d’un des générateurs sert à
sélectionner une sortie retardée de l’autre de générateur [1006, 1012]. Cela se traduit
en C par :
# d e f in e TAILLE_TAB (8 1 9 2 ) / * p a r e x e m p le - p l u s c ’ e s t g r a n d , m ieu x c a v a u t * /
s t a t i c u n s ig n e d c h a r d e l a y l TAILLE_TAB ] ;
u n s ig n e d c h a r p r n g A ( v o i d ) ;
lo n g p r n g B ( v o i d ) ;
v o id i n i t _ a l g M ( v o i d )
I
lon g i ;
fo r ( i= 0 ; i < TAILLE_TAB ; i+ + )
d e la y li] = prngA C ) ;
} / * in it_a lgM * /
u n s ig n e d c h a r a l g lM ( v o i d )
1
lo n g j , v ;
j = prngB O % TAILLE_TAB ; /* o b t e n t i o n l ’ in d e x d a n s d e l a y l ] */
v = d e la y lj] ; /* o b t e n t io n de l a v a l e u r a r e n v o y e r */
d e la y lj] = prngA O ; /* le r e m p la c e r * /
retu rn ( v ) ;
} / * a lg lM * /
Ceci est solide dans le sens que si prngA était vraiment aléatoire, on ne pourrait rien
apprendre de prngB (et il serait impossible de le cryptanalyser). Il serait possible de
cryptanalyser prgnA seulement si sa sortie était accessible dans le bon ordre, (c’est à
dire si prngB était d ’abord cryptanalysé), et dans le cas contraire, s’il était vraiment
aléatoire, la combinaison serait sûre.
16.12 PKZIP
Roger S C H L A F L Y a conçu l’algorithme de chiffrement intégré dans le programme de
compression P K Z IP . C ’est un algorithme de chiffrement en continu qui chiffre les
418 Chapitre 16 Générateurs de suites aléatuires et chiffrement en continu
données octet par octet. Ceci est au moins l’algorithme de la version 2.04g. Je ne peux
pas me prononcer pour les version ultérieures, mais à moins que cela ne soit annoncé,
vous pouvez supposer qu’elles l’utilisent aussi.
L’algorithme utilise des variables de 32 bit initialisées ainsi :
K 0 = 305419896
K 2 = 591751049
K 2 = 878082192
Cx = M i ~ K 3
K0 = ct c32(Ko, Mi )
K\ = Ki + (A'o&OxOOOOOOFF)
Ki = Ki * 134775813 + 1
K2 = ct c3 2 {K2, K 1 » 24)
K3 = ((K 2 12) * {{K 2 12)-1)> » 8
La fonction crc32 prend la valeur précédente et un octet, les combine par ou exclusif et
calcule la valeur suivante au moyen du polynôme C R C noté 0xEDB88320. En partique,
on peut pré-calculer un tableau T de 256 nombres et le calcul par crc32 devient :
T[i] = crc32(i,0)
Pour chiffrer un flux de texte en clair, commencez faire passez les octets de la clef
dans l’algorithme pour mettre à jour les clefs. Ignorez le texte chiffré correspondant.
Chiffrez alors le texte en clair octet par octet. Douze octets aléatoires sont acollés au
début du texte en clair, mais cela n’est pas vraiment important. Le déchiffrement se
fait de manière similaire au chiffrement, mis à part qu’il faut prendre Ci à la place de
M i à la deuxième étape de l’algorithme.
Sécurité de PKZIP
Malheureusement, elle n ’est pas extraordinaire. Une attaque a besoin de 40 à 200 octets
de texte en clair connu et prend environ 227 opérations [173]. Vous pouvez la faire en
quelques heures avec votre ordinateur personnel. Si le fichier compressé possède une
entête standard, ce n’est pas un problème d’obtenir le texte en clair. N’utilisez pas le
chiffrement intégré dans P K Z IP .
Chapitre 17
Autres algorithmes de
chiffrement en continu et
générateurs de suites vraiment
aléatoires
17.1 RC4
RC4 est un algorithme de chiffrement en continu à clef de longueur variable développé
en 1987 par Ron R i v e s t pour R S A D a t a S e c u r i t y , In c. Il a été durant sept ans
une marque déposée, et les détails de l’algorithme n’étaient dévoilés qu’après signature
d’un contrat de non divulgation.
En septembre 1994, quelqu’un a envoyé anonymement le code source aux abonnés de la
liste de courrier électronique « Cypherpunks ». Il s’est rapidement répandu tout autour
du monde via les sites ftp d ’iN T E R N E T . Des possesseurs de copies légales de RC4
ont confirmé la compatiblité. R SA D a t a S e c u r i t y , I n c . essaya d ’étouffer l’affaire
en prétendant qu’il s’agissait d’un secret de fabrication bien qu’étant devenu public ;
c’était trop tard. Il a depuis été disséqué et commenté, distribué à des conférences et
enseigné dans les cours de cryptographie.
RC4 est simple à décrire. L ’algorithme fonctionne en mode O FB : le flux de codons
ne dépend pas du texte en clair. Il a une table- S à 8*8 bits: S o , S i , . . . ,S 25 5 - Les Si
forment une permutation des nombres entre 0 et 255, et la permutation dépend de la
clef de longueur variable. Il y a deux compteurs i et j , initialisés à zéro.
Pour générer un octet aléatoire, procéder ainsi :
i = (i + 1) modulo 256
j — (j + Si) modulo 256
Echanger Si et S j .
t = (S i + S j ) modulo 256
K = St
420 Chapitre 17 Autres algorithmes de chiffrement en continu
L ’octet K est combiné par ou exclusif avec le texte en clair pour produire le texte
chiffré ou bien avec le texte chiffré pour produire le texte en clair. Le chiffrement est
rapide, environ 10 fois plus que le DES.
L’initialisation est facile aussi. Commencez avec l’identité : Sa — 0,S\ = 1 ,... ,6 2 5 5 =
255. Remplissez un autre tableau de 256 octets avec la clef, en répétant celle-ci suffi
samment de fois pour combler le tableau : Kq,K\, . . . , K 2ss- Initialisez l’index j à zéro
et effectuez ceci :
j — (j + St + K r) modulo 256
Echanger Si et S3.
17.2 SEAL
SEAL est un algorithme de chiffrement en continu efficace sous forme de logiciel conçu
chez IBM par Phyl R o g a w a y et Don C o p p e r s m i t h [1352]. L ’algorithme a été conçu
pour les processeurs 32 bits : pour bien fonctionner, il lui faut des registres de 32 bits
et une mémoire cache de quelques kilo-octets. Au moyen d ’une opération assez lente,
1. Il n’y existe aucun résultat cryptanalytique public. R C 4 peut se trouver dans environ 21700
(256! x 2562) états possibles, un nom bre incomm ensurable.
17.2 SEAL 421
Description de SEAL
La boucle interne de SEAL est illustrée par la figure 17.1. L ’algorithme repose sur trois
tableaux, R, S et T, dérivés de la clef. L’étape de pré-calcul produit ces trois tableaux
à partir de la clef k au moyen d ’une procédure basée sur SHA (voir § 18.7). Le tableau
T de 2 kilo-octets est une table-S à 9*32 bits.
SEAL utilise aussi quatre registres de 32 bits A, B, C et D dont les valeurs initiales
dépendent de n, R et T. Ces registres sont modifiés au cours de plusieurs itérations,
chacune d’elle comprenant huit rondes. A chaque ronde, 9 bits d’un premier registre
[A, B, C ou D) servent d ’index dans le tableau T. La valeur retirée de T est alors
ajoutée ou combinée par ou exclusif à un deuxième registre. Le premier registre est
décalé circulairement de neuf positions. Dans certaines rondes le second registre (après
décalage) subit des modifications suplémentaires en le combinant par ou exclusif avec
le premier registre ou en le lui ajoutant. Après huit rondes de ce type, A, B , C et D
viennent gonfler le flux de codons, après avoir masqué chacun d ’eux en le combinant
422 Chapitre 17 Autres algorithmes de chiffrement en continu
3. Utiliser un état interne maintenu par l’algorithme qui ne se manifeste pas direc
tement dans le flot de données (les valeurs des n%qui servent à modifier A et C
à la fin de chaque itération).
SEAL fait appel à environ cinq opérations élémentaires de la machine pour chiffrer un
octet de texte en clair. Il fonctionne à 58 mégaoctets par seconde sur un 486 cadencé
à 50 MHz. C ’est l’algorithme de chiffrement le plus rapide du livre.
D ’un autre côté, SEAL doit pré-calculer ses tableaux internes à partir de la clef. Ces
tableaux occupent en mémoire environ 3 kilo-octets au total et leur calcul requiert à
peu près 200 calculs de SHA. SEAL n’est donc pas adapté aux situations où vous
n’avez pas de temps pour effectuer le pré-calcul sur la clef, ou la mémoire suffisante
pour stocker les tableaux.
17.3 W AKE
Sécurité de SEAL
SEAL est un nouvel algorithme et n’est encore le sujet d’aucune cryptanalyse publiée.
Cela incite à la prudence. Il semble cependant que SEAL est bien pensé. Ses curiosité
ont un sens au bout du compte. Et Don C O P P E R S M IT H est généralement considéré
comme le cryptanalyste le plus intelligent du monde.
Brevets et licenses
SEAL est en cours de brevetage [384]. Quiconque désire se procurer une license pour
utiliser SEAL devrait contacter: Director of Licenses, IBM Corporation, 500
Columbus Ave., Thurnwood, N Y , 10594, États-Unis.
17.3 WAKE
W AK E a été inventé par David W H E E L E R [1591], Il produit un flux de mots de 32
bits qui peut être combiné par ou exclusif avec le texte en clair pour le chiffrement,
ou avec le texte chiffré pour le déchiffrement.
W AKE fonctionne en mode C FB ; le mot précédent de texte chiffré est utilisé pour
produire le codon suivant. Il utilise aussi une table-S1de 256 valeurs de 32 bits. Cette
table-S1vérifie une propriété spéciale : les octets de poids fort des 256 valeurs forment
une permutation de tous les octets possibles et les trois octets de poids faibles sont
aléatoires.
Tout d ’abord, générez les valeurs Si de la table-S1à partir de la clef. Initialisez alors
quatre registre cto, bo, Co et do avec la clef (ou avec un autre clef). Pour générer un
codon K l de 32 bits, appliquez simplement ceci :
Ki dj
Le mot de texte chiffré Ci est obtenu par combinaison par ou exclusif du mot de texte
en clair A4, avec Ki.
Mettez alors à jour les quatre registres :
Gà-j-1 — 7Vd(GEj,dj)
5-i+i — Af(6j ,g j_|_i )
ci+i = M (c i,b i+ 1 )
di+i ■ 4lL(dj,Cj-ri)
M( x, y) = (x + y) » 8 ® S^x+y)2ss
Ceci est illustré par la figure 17.2. L ’opération > > est un décalage à droite et non une
rotation. Les bits de poids faible de x + y sont les entrées de la table-S1. W H E E L E R
propose une procédure pour générer la table-S1, mais elle n’est pas vraiment complète.
N’importe quel algorithme générant des octets aléatoires et une permutation aléatoire
conviendra.
Le principal atout de W A K E est sa rapidité. Cependant il ne résiste pas à une attaque
à texte en clair choisi ou à une attaque à texte chiffré choisi. Il est utilisé dans la version
courante du programme « Dr. Solomon’s Anti-Virus ».
m Chapitre 17 Autres algorithmes de chiffrement en continu
F ig . 17.2 - W A K E
2. N ote du traducteur : en anglais, les registres à décalage à rétroaction avec retenue sont appelés
« feed ba ck w ith c a r r y shzft r e g iste r s » et sont abrégés « F C S R ».
17.J, Registres à décalage à rétroaction avec retenue
Registre à décalage
Som m e m odulo 2 h ae
b,4 b b bl
n bn-l i 2
Notez que l’état interne final (y compris le contenu du registre de retenue) est identique
au second état interne. La suite boucle à partir de ce point et sa période est 10.
Il faut préciser quelques points. Premièrement, le registre de retenue n’est pas un simple
bit ; c’est un nombre. La taille du registre de retenue doit être au moins log2 1 où t est le
nombre de dérivations. Il n’y a que deux dérivations dans l’exemple précédent, aussi le
registre de retenue ne requiert qu’un seul bit. S’il y avait quatre dérivations, le registre
de retenue aurait deux bits, et pourrait valoir 0, 1, 2, ou 3.
Ensuite, le R D R R passe initialement par une séquence transitoire avant de se répéter
périodiquement. Dans l’exemple précédent, un seul état n’est jamais répété. Pour des
R D R R plus grands et plus compliqués, il peut y en avoir plus.
Enfin, la période maximale d ’un R D R R n’est pas 2n — 1, n étant la taille du registre à
décalage. La période maximale est q — 1 où q est l ’e n t ie r d e c o n n e x io n . Ce nombre
identifie la séquence de dérivation, il est donné par :
Somme
(Les q, sont bien numérotés de gauche à droite et valent 1 lorsque le bit correspondant
du registre à décalage est dérivé, 0 sinon.) q doit être premier et admettre 2 comme
racine primitive. On supposera par la suite que q est bien de cette forme.
Dans l’exemple précédent, ç = 2 x 0 + 4 x l + 8 x l - 1 = 11. Et 11 est un nombre
premier admettant 2 comme racine primitive. La période maximale est donc 10.
Tous les états initiaux ne conduisent pas à une période maximale, considérez par
exemple le R D R R précédent avec une valeur initiale de 1 0 1 et le registre de re
tenue à 4.
Registre à décalage Registre de retenue
10 1 4
110 2
111 1
111 1
Le tableau 17.2 rassemble toutes les séquences de dérivation à quatre bit qui donnent
in R D R R de taille maximale pour un registre à décalage de 32, 64, 96 ou 128 bits.
Les quatres valeurs a,b,c,d donnent toujours un nombre premier q dont 2 est une racine
primitive.
q= 2 “ + 2b + 2 e + 2d - 1
Générateurs en cascade
Il y a deux façons de mettre des R D R R en cascade dans un générateur :
(3 2 .6 .3 .2 ) (6 4 ,2 4 ,1 9 ,2 ) (6 4 ,5 9 ,2 8 ,2 ) (9 6 ,5 5 ,5 3 ,2 )
(3 2 .7 .5 .2 ) (6 4 ,2 5 ,3 ,2 ) (6 4 ,5 9 ,3 8 ,2 ) (9 6 ,5 6 ,9 ,2 )
(3 2 .8 .3 .2 ) (6 4 ,2 5 ,4 ,2 ) (6 4 ,5 9 ,4 4 ,2 ) (9 6 ,5 6 ,5 1 ,2 )
(3 2 .1 3 .8 .2 ) (6 4 ,2 5 ,1 1 ,2 ) (6 4 ,6 0 ,4 9 ,2 ) (9 6 ,5 7 ,3 ,2 )
(3 2 .1 3 .1 2 .2 ) (6 4 ,2 5 ,1 9 ,2 ) (6 4 ,6 1 ,5 1 ,2 ) (9 6 ,5 7 ,1 7 ,2 )
(3 2 .1 5 .6 .2 ) (6 4 ,2 7 ,5 ,2 ) (6 4 ,6 3 ,8 ,2 ) (9 6 ,5 7 ,4 7 ,2 )
(3 2 .1 6 .2 .1 ) (6 4 ,2 7 ,1 6 ,2 ) (6 4 ,6 3 ,1 3 ,2 ) (9 6 ,5 8 ,3 5 ,2 )
(3 2 .1 6 .3 .2 ) (6 4 ,2 7 ,2 2 ,2 ) (6 4 ,6 3 ,6 1 ,2 ) (9 6 ,5 9 ,4 6 ,2 )
(3 2 .1 6 .5 .2 ) (6 4 ,2 8 ,1 9 ,2 ) (9 6 ,6 0 ,2 9 ,2 )
(3 2 .1 7 .5 .2 ) (6 4 ,2 8 ,2 5 ,2 ) (9 6 ,1 5 ,5 ,2 ) (9 6 ,6 0 ,4 1 ,2 )
(3 2 .1 9 .2 .1 ) (6 4 ,2 9 ,1 6 ,2 ) (9 6 ,2 1 ,1 7 ,2 ) (9 6 ,6 0 ,4 5 ,2 )
(3 2 .1 9 .5 .2 ) (6 4 ,2 9 ,2 8 ,2 ) (9 6 ,2 5 ,1 9 ,2 ) (9 6 ,6 1 ,1 7 ,2 )
(3 2 .1 9 .9 .2 ) (6 4 ,3 1 ,1 2 ,2 ) (9 6 ,2 5 ,2 0 ,2 ) (9 6 ,6 3 ,2 0 ,2 )
(3 2 .1 9 .1 2 .2 ) (6 4 ,3 2 ,2 1 ,2 ) (9 6 ,2 9 ,1 5 ,2 ) (9 6 ,6 5 ,1 2 ,2 )
(3 2 .1 9 .1 7 .2 ) (6 4 ,3 5 ,2 9 ,2 ) (9 6 ,2 9 ,1 7 ,2 ) (9 6 ,6 5 ,3 9 ,2 )
(3 2 .2 0 .1 7 .2 ) (6 4 ,3 6 ,7 ,2 ) (9 6 ,3 0 ,3 ,2 ) (9 6 ,6 5 ,5 1 ,2 )
(3 2 .2 1 .9 .2 ) (6 4 ,3 7 ,2 ,1 ) (9 6 ,3 2 ,2 1 ,2 ) (9 6 ,6 7 ,5 ,2 )
(3 2 .2 1 .1 5 .2 ) (6 4 ,3 7 ,1 1 ,2 ) (9 6 ,3 2 ,2 7 ,2 ) (9 6 ,6 7 ,2 5 ,2 )
(3 2 .2 3 .8 .2 ) (6 4 ,3 9 ,4 ,2 ) (9 6 ,3 3 ,5 ,2 ) (9 6 ,6 7 ,3 4 ,2 )
(3 2 .2 3 .2 1 .2 ) (6 4 ,3 9 ,2 5 ,2 ) (9 6 ,3 5 ,1 7 ,2 ) (9 6 ,6 8 ,5 ,2 )
(3 2 .2 5 .5 .2 ) (6 4 ,4 1 ,5 ,2 ) (9 6 ,3 5 ,3 3 ,2 ) (9 6 ,6 8 ,1 9 ,2 )
(3 2 .2 5 .1 2 .2 ) (6 4 ,4 1 ,1 1 ,2 ) (9 6 ,3 9 ,2 1 ,2 ) (9 6 ,6 9 ,1 7 ,2 )
(3 2 .2 7 .2 5 .2 ) (6 4 ,4 1 ,2 7 ,2 ) (9 6 ,4 0 ,2 5 ,2 ) (9 6 ,6 9 ,3 6 ,2 )
(3 2 .2 9 .1 9 .2 ) (6 4 ,4 3 ,2 1 ,2 ) (9 6 ,4 1 ,1 2 ,2 ) (9 6 ,7 0 ,2 3 ,2 )
(3 2 .2 9 .2 0 .2 ) (6 4 ,4 3 ,2 8 ,2 ) (9 6 ,4 1 ,2 7 ,2 ) (9 6 ,7 1 ,6 ,2 )
(3 2 .3 0 .3 .2 ) (6 4 ,4 5 ,2 8 ,2 ) (9 6 ,4 1 ,3 5 ,2 ) (9 6 ,7 1 ,4 0 ,2 )
(3 2 .3 0 .7 .2 ) (6 4 ,4 5 ,4 1 ,2 ) (9 6 ,4 2 ,3 5 ,2 ) (9 6 ,7 2 ,5 3 ,2 )
(3 2 .3 1 .5 .2 ) (6 4 ,4 7 ,5 ,2 ) (9 6 ,4 3 ,1 4 ,2 ) (9 6 ,7 3 ,3 2 ,2 )
(3 2 .3 1 .9 .2 ) (6 4 ,4 7 ,2 1 ,2 ) (9 6 ,4 4 ,2 3 ,2 ) (9 6 ,7 7 ,2 7 ,2 )
(3 2 .3 1 .3 0 .2 ) (6 4 ,4 7 ,3 0 ,2 ) (9 6 ,4 5 ,4 1 ,2 ) (9 6 ,7 7 ,3 1 ,2 )
(6 4 ,4 9 ,1 9 ,2 ) (9 6 ,4 7 ,3 6 ,2 ) (9 6 ,7 7 ,3 2 ,2 )
(6 4 .3 .2 .1 ) (6 4 ,4 9 ,2 0 ,2 ) (9 6 ,4 9 ,3 1 ,2 ) (9 6 ,7 7 ,3 3 ,2 )
(6 4 .1 4 .3 .2 ) (6 4 ,5 2 ,2 9 ,2 ) (9 6 ,5 1 ,3 0 ,2 ) (9 6 ,7 7 ,7 1 ,2 )
(6 4 .1 5 .8 .2 ) (6 4 ,5 3 ,8 ,2 ) (9 6 ,5 3 ,1 7 ,2 ) (9 6 ,7 8 ,3 9 ,2 )
(6 4 .1 7 .2 .1 ) (6 4 ,5 3 ,4 3 ,2 ) (9 6 ,5 3 ,1 9 ,2 ) (9 6 ,7 9 ,4 ,2 )
(6 4 .1 7 .9 .2 ) (6 4 ,5 6 ,3 9 ,2 ) (9 6 ,5 3 ,3 2 ,2 ) (9 6 ,8 1 ,8 0 ,2 )
(6 4 .1 7 .1 6 .2 ) (6 4 ,5 6 ,4 5 ,2 ) (9 6 ,5 3 ,4 8 ,2 ) (9 6 ,8 3 ,1 4 ,2 )
(6 4 ,1 9 ,2 ,1 ) (6 4 ,5 9 ,5 ,2 ) (9 6 ,5 4 ,1 5 ,2 ) (9 6 ,8 3 ,2 6 ,2 )
(6 4 .1 9 .1 8 .2 ) (6 4 ,5 9 ,8 ,2 ) (9 6 ,5 5 ,4 4 ,2 ) (9 6 ,8 3 ,5 4 ,2 )
(9 6 .8 3 .6 0 .2 ) (1 2 8 ,3 1 ,2 5 ,2 ) (1 2 8 ,8 1 ,5 5 ,2 ) (1 2 8 ,1 0 5 ,1 1 ,2 )
(9 6 .8 3 .6 5 .2 ) (1 2 8 ,3 3 ,2 1 ,2 ) (1 2 8 ,8 2 ,6 7 ,2 ) (1 2 8 ,1 0 5 ,3 1 ,2 )
(9 6 .8 3 .7 8 .2 ) (1 2 8 ,3 5 ,2 2 ,2 ) (1 2 8 ,8 3 ,6 0 ,2 ) (1 2 8 ,1 0 5 ,4 8 ,2 )
(9 6 .8 4 .6 5 .2 ) (1 2 8 ,3 7 ,8 ,2 ) (1 2 8 ,8 3 ,6 1 ,2 ) (1 2 8 ,1 0 7 ,4 0 ,2 )
(9 6 .8 5 .1 7 .2 ) (1 2 8 ,4 1 ,1 2 ,2 ) (1 2 8 ,8 3 ,7 7 ,2 ) (1 2 8 ,1 0 7 ,6 2 ,2 )
(9 6 .8 5 .3 1 .2 ) (1 2 8 ,4 2 ,3 5 ,2 ) (1 2 8 ,8 4 ,1 5 ,2 ) (1 2 8 ,1 0 7 ,1 0 2 ,2 )
(9 6 .8 5 .7 6 .2 ) (1 2 8 ,4 3 ,2 5 ,2 ) (1 2 8 ,8 4 ,4 3 ,2 ) (1 2 8 ,1 0 8 ,3 5 ,2 )
(9 6 .8 5 .7 9 .2 ) (1 2 8 ,4 3 ,4 2 ,2 ) (1 2 8 ,8 5 ,6 3 ,2 ) (1 2 8 ,1 0 8 ,7 3 ,2 )
(9 6 .8 6 .3 9 .2 ) (1 2 8 ,4 5 ,1 7 ,2 ) (1 2 8 ,8 7 ,5 7 ,2 ) (1 2 8 ,1 0 8 ,7 5 ,2 )
(9 6 .8 6 .7 1 .2 ) (1 2 8 ,4 5 ,2 7 ,2 ) (1 2 8 ,8 7 ,8 1 ,2 ) (1 2 8 ,1 0 8 ,8 9 ,2 )
430 Chapitre 17 Autres algorithmes de chiffrement en continu
(9 6 .8 7 .9 .2 ) (1 2 8 ,4 9 ,9 ,2 ) (1 2 8 ,8 9 ,8 1 ,2 ) (1 2 8 ,1 0 9 ,1 1 ,2 )
(9 6 .8 7 .4 4 .2 ) (1 2 8 ,5 1 ,9 ,2 ) (1 2 8 ,9 0 ,4 3 ,2 ) (1 2 8 ,1 0 9 ,1 0 8 ,2 )
(9 6 .8 7 .4 5 .2 ) (1 2 8 ,5 4 ,5 1 ,2 ) (1 2 8 ,9 1 ,9 ,2 ) (1 2 8 ,1 1 0 ,2 3 ,2 )
(9 6 .8 8 .1 9 .2 ) (1 2 8 ,5 5 ,4 5 ,2 ) (1 2 8 ,9 1 ,1 3 ,2 ) (1 2 8 ,1 1 1 ,6 1 ,2 )
(9 6 .8 8 .3 5 .2 ) (1 2 8 ,5 6 ,1 5 ,2 ) (1 2 8 ,9 1 ,4 4 ,2 ) (1 2 8 ,1 1 3 ,5 9 ,2 )
(9 6 .8 8 .4 3 .2 ) (1 2 8 ,5 6 ,1 9 ,2 ) (1 2 8 ,9 2 ,3 5 ,2 ) (1 2 8 ,1 1 4 ,8 3 ,2 )
(9 6 .8 8 .7 9 .2 ) (1 2 8 ,5 6 ,5 5 ,2 ) (1 2 8 ,9 5 ,9 4 ,2 ) (1 2 8 ,1 1 5 ,7 3 ,2 )
(9 6 .8 9 .3 5 .2 ) (1 2 8 ,5 7 ,2 1 ,2 ) (1 2 8 ,9 6 ,2 3 ,2 ) (1 2 8 ,1 1 7 ,1 0 5 ,2 )
(9 6 .8 9 .5 1 .2 ) (1 2 8 ,5 7 ,3 7 ,2 ) (1 2 8 ,9 6 ,6 1 ,2 ) (1 2 8 ,1 1 9 ,3 0 ,2 )
(9 6 .8 9 .6 9 .2 ) (1 2 8 ,5 9 ,2 9 ,2 ) (1 2 8 ,9 7 ,2 5 ,2 ) (1 2 8 ,1 1 9 ,1 0 1 ,2 )
(9 6 .8 9 .8 7 .2 ) (1 2 8 ,5 9 ,4 9 ,2 ) (1 2 8 ,9 7 ,6 8 ,2 ) (1 2 8 ,1 2 0 ,9 ,2 )
(9 6 .9 2 .5 1 .2 ) (1 2 8 ,6 0 ,5 7 ,2 ) (1 2 8 ,9 7 ,7 2 ,2 ) (1 2 8 ,1 2 0 ,2 7 ,2 )
(9 6 .9 2 .7 1 .2 ) (1 2 8 ,6 1 ,9 ,2 ) (1 2 8 ,9 7 ,7 5 ,2 ) (1 2 8 ,1 2 0 ,3 7 ,2 )
(9 6 .9 3 .3 2 .2 ) (1 2 8 ,6 1 ,2 3 ,2 ) (1 2 8 ,9 9 ,1 3 ,2 ) (1 2 8 ,1 2 0 ,4 1 ,2 )
(9 6 .9 3 .3 9 .2 ) (1 2 8 ,6 1 ,5 2 ,2 ) (1 2 8 ,9 9 ,1 4 ,2 ) (1 2 8 ,1 2 0 ,7 9 ,2 )
(9 6 .9 4 .3 5 .2 ) (1 2 8 ,6 3 ,4 0 ,2 ) (1 2 8 ,9 9 ,2 6 ,2 ) (1 2 8 ,1 2 0 ,8 1 ,2 )
(9 6 .9 5 .4 .2 ) (1 2 8 ,6 3 ,6 2 ,2 ) (1 2 8 ,9 9 ,5 4 ,2 ) (1 2 8 ,1 2 1 ,5 ,2 )
(9 6 .9 5 .1 6 .2 ) (1 2 8 ,6 7 ,4 1 ,2 ) (1 2 8 ,9 9 ,5 6 ,2 ) (1 2 8 ,1 2 1 ,6 7 ,2 )
(9 6 .9 5 .3 2 .2 ) (1 2 8 ,6 9 ,3 3 ,2 ) (1 2 8 ,9 9 ,7 8 ,2 ) (1 2 8 ,1 2 1 ,9 5 ,2 )
(9 6 .9 5 .4 4 .2 ) (1 2 8 ,7 1 ,5 3 ,2 ) (1 2 8 ,1 0 0 ,1 3 ,2 ) (1 2 8 ,1 2 1 ,9 6 ,2 )
(9 6 .9 5 .4 5 .2 ) (1 2 8 ,7 2 ,1 5 ,2 ) (1 2 8 ,1 0 0 ,3 9 ,2 ) (1 2 8 ,1 2 3 ,4 0 ,2 )
(1 2 8 ,7 2 ,4 1 ,2 ) (1 2 8 ,1 0 1 ,4 4 ,2 ) (1 2 8 ,1 2 3 ,7 8 ,2 )
(1 2 8 .5 .4 .2 ) (1 2 8 ,7 3 ,5 ,2 ) (1 2 8 ,1 0 1 ,9 7 ,2 ) (1 2 8 ,1 2 4 ,4 1 ,2 )
(1 2 8 .1 5 .4 .2 ) (1 2 8 ,7 3 ,6 5 ,2 ) (1 2 8 ,1 0 3 ,4 6 ,2 ) (1 2 8 ,1 2 4 ,6 9 ,2 )
(1 2 8 .2 1 .1 9 .2 ) (1 2 8 ,7 3 ,6 7 ,2 ) (1 2 8 ,1 0 4 ,1 3 ,2 ) (1 2 8 ,1 2 4 ,8 1 ,2 )
(1 2 8 .2 5 .5 .2 ) (1 2 8 ,7 5 ,1 3 ,2 ) (1 2 8 ,1 0 4 ,1 9 ,2 ) (1 2 8 ,1 2 5 ,3 3 ,2 )
(1 2 8 .2 6 .1 1 .2 ) (1 2 8 ,8 0 ,3 9 ,2 ) (1 2 8 ,1 0 4 ,3 5 ,2 ) (1 2 8 ,1 2 5 ,4 3 ,2 )
(1 2 8 .2 7 .2 5 .2 ) (1 2 8 ,8 0 ,5 3 ,2 ) (1 2 8 ,1 0 5 ,7 ,2 ) (1 2 8 ,1 2 7 ,1 2 1 ,2 )
Générateurs à combinaison de R D RR
Ces générateurs utilisent un nombre variable de R D R L et de R D R R , et toute une
variété de fonctions pour les combiner entre eux. L ’opération de ou exclusif détruit les
propriétés algébriques des R D R R , aussi, il est sensé de les utiliser pour combiner. Le
générateur, illustré par la ligure 17.5, utilise un nombre variable de R D R R . Sa sortie
est la combinaison par ou exclusif des sorties des R D R R .
Voici générateurs du même type :
Cascade de R D R L /R D R R sommatoire/équitable
La théorie dit que l’addition avec retenue détruit les propriétés algébriques des R D R L
et que l’opération de ou exclusif détruit celles des R D R R . Ce générateur combine ces
idées, telles qu’elles sont utilisées dans le générateur R D R L /R D R R sommatoire et le
générateur R D R L /R D R R équitable, avec la cascade de G o l l m a n n .
Le générateur est une série de tableaux de registres où l’horloge de chaque tableau est
contrôlée par la sortie du tableau précédent. La figure 17.6 illustre une couche de ce
générateur. Après avoir opéré un cycle d ’horloge sur un premier tableau de R D R L , les
résultats sont combinés par addition avec retenue. Si le résultat de cette combinaison
est 1, alors on opère un cycle d’horloge sur le tableau suivant, qui composé de R D R R ,
et les sorties de ces R D R R sont combinées par ou exclusif. Si le résultat de la première
combinaison est 0, le tableau de R D R R n’est pas actionné et le résultat est seulement
ajouté à la retenue de la ronde précédente. Si le résultat de la deuxième combinaison
est 1, alors le troisième tableau est actionné, et ainsi de suite.
Ce générateur utilise beaucoup de registres n par m où n est le nombre de couches et
m le nombre de registre par couche. Je recommande n = 10 et m ~ 5.
Générateurs à réduction
Il y a quatre types principaux de générateurs à réduction utilisant des R D R R :
- La suite de sortie risque d ’être biaisée, par exemple si elle contient plus de un
que de zéros.
- La période de la suite de sortie peut différer pour des valeurs de départ distinctes.
- La suite peut paraître aléatoire pendant un temps, puis se coincer sur la même
valeur. (Il est facile d ’éviter cela en combinant par ou exclusif la fonction non
linéaire avec le bit le plus à droite.)
Le bon côté de l’absence de théorie pour analyser la sécurité des registres à décalage
à rétroaction non linéaire est qu’il existe peu d ’outils de cryptanalyse des algorithmes
de chiffrement qui les utilisent. On peut utiliser les registres à décalage à rétroaction
non linéaire pour chiffrer en continu, mais il faut être prudent.
Dans un registre à décalage à rétroaction non linéaire, la fonction de rétroaction peut
être ce que vous voulez (voir la figure 17.8).
La figure 17.9 illustre un registre à décalage utilisant la fonction de rétroaction suivante :
le nouveau bit est à égal au produit du premier et du troisième bit. Init.ialisé avec la
valeur 110, il produira la suite d’états internes suivante:
110
0 11
10 1
434 Chapitre 17 Autres algorithmes de chiffrement en continu
0 10
0 0 1
0 0 0
0 0 0
Et ainsi de suite.
La suite de sortie est la chaîne des bits les moins significatifs :
0 1 1 0 1 0 0 0 0 0 0 0 ________
Générateur de Pless
Ce générateur est conçu autour des possibilités des bascules bistables JK [1260]. Il
consiste en huit R D R L qui commandent quatre bascules bistables JK. Chaque bascule
bistable agit comme un combinateur non linéaire pour deux des R D R L . Pour éviter le
problème hé au fait que la connaissance de la sortie d’une bascule identifie à la fois la
source et la valeur du codon suivant, à chaque impulsion d’horloge, les sorties de trois
des quatre bascules sont ignorées. Les sorties sont ensuite mélangées pour produire le
flux de codons final.
Cet algorithme a été cryptanalysé par l’attaque indépendante de chacune des quatre
bascules [1358]. De plus, combiner des bascules bistables JK est cryptographiquement
faible et les générateurs de ce type tombent sous le coup des attaques par corréla
tion [1457].
Générateur 1/p
Ce générateur fut proposé et ensuite cryptanalysé dans [200]. Si l’état interne du gé
nérateur à l’instant t est donné par x t, alors :
3. Notez que pou r b = 2, un R D R R d oté d ’un entier de connexion valant p sortira cette suite de
bits dans l’ordre inverse.
436 Chapitre 17 Autres algorithmes de chiffrement en continu
crypt(l)
L’algorithme de chiffrement original d ’U N IX, C R Y P T ( l) , est un chiffrement en continu
basé sur la même technologie que P E n i g m a . Il utilise un seul tambour de 256 éléments
et un réflecteur Le tambour et le réflecteur sont tous deux engendrés à partir de la clef.
Cet algorithme est nettement plus simple que P E n i g m a allemand de la Seconde Guerre
mondiale et, pour un cryptanalyste doué, il est très facile à casser [1578, 1310]. Un
programme U N IX du domaine public, appelé « Crypt Breakers Workbench » (CBW),
peut être utilisé pour casser des fichiers chiffrés avec C R Y P T ( l) .
Autres schémas
Il existe aussi un générateur basé sur le problème des empilements (voir § 19.2) [1365].
C R Y P T O -L E G G O n’est pas sûr. Joan D a e m e n a développé S u b S t r e a m , J a m et
S t e p R i g h t U p [405] ; ils sont trop récents pour être commentés. Beaucoup d’autres
algorithmes sont décrits dans la litérature, et davantage encore gardé secrets et incor
porés à des équipements.
- L’approche par la théorie des systèmes. Elle consiste à s’assurer que chaque
conception pose un problème difficile et inconnu au cryptanalyste, en utilisant
un ensemble de principes et de critères fondamentaux de conception
Ces approches différent par les hypothèses faites sur les capacités du cryptanalyste,
la définition d’une cryptanalyse réussie, et la notion de sécurité. La plupart des re
cherches dans ce domaine sont théoriques, mais il existe quelques bons algorithmes de
chiffrement en continu parmi ceux qui sont impraticables.
L’approche par la théorie des système est celle qui a été utilisée pour tous les al
gorithmes de chiffrement en continu décrits précédemment ; elle est à l’origine de la
17.9 Approche par la théorie de la complexité
plupart des algorithmes qui sont réalisables en pratique. Un cryptographe conçoit des
générateurs de codons dont on peut tester les propriétés de sécurité— période, distri
bution des motifs de bits, complexité linéaire, et ainsi de suite— et non des algorithmes
basés sur des théories mathématiques. Le cryptographe essaye aussi plusieurs tech
niques cryptographiques contre ces générateurs et s’assure qu’ils leur résistent.
Au fil des années, cette approche a abouti à un ensemble de critères de conception
pour les algorithmes de chiffrement en continu [1438, 106, 1359, 1259]. R u e p p e l les a
étudié dans [1364] où il a détaillé les théories sous-jacentes.
- Confusion : chaque bit des codons doit provenir d’une transformation complexe
de tous les bits de la clef ou de la plupart d ’entre eux.
- Diffusion: les redondances dans les sous-structures doivent se dissiper dans les
statistiques à grande échelle.
Cette liste ne se restreint aux algorithmes conçus avec l’approche par la théorie des
systèmes ; elle est valable pour tous les algorithmes de chiffrement en continu. Elle
est même valable pour les algorithmes de chiffrement par blocs. Le point important
avec l’approche par la théorie des systèmes est que les algorithmes sont conçus pour
directement satisfaire ces buts.
Le problème majeur avec ces cryptosystèmes est qu’on ne rien prouver à propos de leur
sécurité ; il n’a jamais été prouvé que ces critères de conception soient nécessaires ou
suffisants à la sécurité. Un générateur de codons peut satisfaire tous ces principes de
conception et s’avérer malgré tout peu sûr. Un autre peut s’avérer sûr. Il reste quelque
chose de magique dans le procédé.
D’un autre côté, casser chacun de ces générateurs de codons constitue un problème
différent pour le cryptanalyste. S’il existe assez de générateurs, le cryptanalyste n’a
peut être pas intérêt à essayer de casser chacun d’eux. Il obtiendra peut être plus de
gloire et de renommée en trouvant de meilleurs moyens de factoriser les grands nombres
ou de calculer les logarithmes discrets.
générateurs ont tendance à être plus compliqués, ils sont basés sur le même type de
problèmes que nous avons déjà vus pour la cryptographie à clef publique. Et, tout
comme la cryptographie à clef publique, ils ont tendance à être lents et peu commodes.
[1424]. Bien que S h a m i r ait montré que prédire la sortie du générateur pseudo-aléatoire
de nombres est équivalent à casser R SA , des biais potentiels dans la sortie ont été dé
crits dans [1406, 206].
Générateur de B l u m - M i c a l i
La sécurité de ce générateur dépend de la difficulté de calculer des logarithmes dis
crets [206]. Soit g un nombre premier et p un nombre premier impair. Un codon, Xo,
démarre le processus :
Xi+i — gx' mod p.
RSA
Le générateur R SA [36, 37] est une variante de [206], Les paramètres initiaux sont N , le
produit de deux grands nombres premiers p et ç, un entier e premier avec (p ~ l ) ( ç —1),
et un germe aléatoire Xo inférieur à N :
Xi+ 1 = xf modulo N.
Xo = x 2 modulo n.
Maintenant, vous pouvez commencer à calculer des bits. Le ie bit pseudo-aléatoire est
le bit le moins significatif de x, où
Xi = modulo n.
La propriété la plus étrange de ce générateur est que vous n’avez pas à calculer tous
les i — 1 bits précédents pour obtenir le 2e bit. Si vous connaissez p et q, vous pouvez
calculer le ie bit directement :
bi est le bit le moins significatif de Xi où Xi = Xq ^ m°duIo ((p i)(«/-i)) moc[
n.
Cette propriété signifie que vous pouvez utiliser ce générateur pseudo-aleatoire de bits
comme un cryptosystème de chiffrement en continu pour des fichiers à accès aléatoire.
La sécurité de ce schéma dépend de la difficulté de factoriser n. Vous pouvez rendre n
public, ainsi tout le monde peut engendrer des bits en utilisant le générateur. Toutefois,
à moins que les cryptanalystes puissent factoriser n, ils ne pourront jamais prédire la
sortie du générateur — même sous la forme d ’affirmations telles que « le bit suivant a
51 % de chances d ’être un 1 ».
Il y a mieux, le générateur BBS est imprévisible à gauche et imprévisible à droite.
Cela signifie que, étant donné une suite engendrée par le générateur, les cryptanalystes
ne peuvent pas prédire le bit suivant ou le bit précèdent de la suite. Sa sécurité n’est
pas basée sur un générateur de bits compliqué que personne ne comprend, mais sur les
mathématiques sous-jacentes à la factorisation de n.
Cet algorithme est lent, mais il existe des améliorations. 11 semble que vous puis
siez utiliser plus que le bit le moins significatif de Xi comme bit pseudo-aléatoire.
D’après [1571, 1572, 1573, 36, 37], si t est la longueur de x lt les log2 é bits les moins si
gnificatifs de x.Lpeuvent être utilisés. Le générateur BBS est relativement lent et n’est,
pas utile pour le chiffrement en continu. Toutefois, pour des applications de haute
sécurité, telles que la génération de clefs, ce générateur est le meilleur.
Chiffre de Rip v a n W in k le
Flux de bits
aléatoires Canal Retard -i
(multi-
Flux de bits___
du texte en clair ■é- Retard plexé)
Texte
en clair
0-20 ans
(Le retard est secret et dépend de la clef)
Whietfield D i f f i e est le premier a avoir présenté ce schéma [1364]. Les données sont
formées de 2" chaînes aléatoires. La clef k est une chaîne aléatoire de n bits. Pour
chiffrer un message, Alice utilise la ke chaîne aléatoire comme masque jetable. Elle
envoie le texte chiffré et les 2" chaînes aléatoires sur 2 n + 1 canaux de communication
différents.
5. Note du traducteu r: R ip VAN WlNKLE a dorm i pendant 20 ans.
17.11 Chiffrement en continu en cascade 441
Bernard qui connaît k peut facilement choisir le bon masque jetable pour déchiffrer le
message. Estelle n’ a pas d’autre choix que d’examiner toutes les chaînes aléatoires les
unes après les autres jusqu’à ce qu’elle trouve le bon masque jetable. Toute attaque
doit examiner un nombre de bits moyen de l’ordre de 2n. R u e p p e l fait remarquer
qu’en envoyant n chaînes aléatoires au lieu de 2", et en utilisant la clef pour spécifier
une combinaison linéaire de ces chaînes, la sécurité est la même.
consiste à utiliser le même flux pour tous les canaux avec d’éventuels délais. Mais ce
n’est pas sûr.
Une idée vraiment intelligente [1496], brevetée par la NSA, est illustrée par la fi
gure 17.11. Détournez la sortie de votre générateur favori vers un registre à décalage
usuel de m bits. A chaque impulsion d ’horloge, décaler le registre de un bit vers la'
droite. Pour chaque flux de sortie, combinez par et le registre avec un vecteur de
contrôle de m bits, qui identifie de manière unique ce flux, et combinez alors par ou ex
clusif les bits ensembles pour obtenir le bit de sortie de ce flux. Si vous voulez produire
plusieurs flux en parallèle, vous avez besoin d ’un vecteur de contrôle et d’un tableau
logique de et/ou exclusif par flux.
Générateur
1 1
et logique et logique et logique
bit à bit bit à bit bit à bit
v
Flux 1 Flux 2 Flux n
Il faut être vigilant sur un point. Si un seul des flux est une combinaison linéaire des
autres, alors le système peut être cassé. Mais si vous êtes intelligent, c’est, un moyen
sûr et facile de résoudre le problème.
444 Chapitre 17 Autres algorithmes de chiffrement en continu
Tables RAND
En 1955, à l ’époque où les ordinateurs faisaient seulement leur app arition, la société
R and C o r p o r a t io n a publié un livre qu i contenait u n m illio n de chiffres aléa
toires [1300]. L e u r m éthode est décrite dans le livre:
« Les chiffres aléatoires de ce livre ont été produits par mélange aléatoire
d ’une table de base engendrée par une roulette électronique. Brièvement, un
source d ’impulsions de fréquence aléatoire, fournissant en moyenne 100000
impulsions environ par seconde, était connectée environ une fois par seconde
par une impulsion de fréquence constante. Des circuits de normalisation
des impulsions passaient les impulsions à travers un compteur binaire à 5
cases En principe, la machine était une roulette à 32 cases qui effectuait, en
moyenne, 3000 révolutions environ par essai et qui produisait un nombre
par seconde. Un convertisseur binaire décimal était utilisé pour convertir
20 des 32 nombres (les 12 autres étaient ignorés) et ne retenait que le
dernier chiffre des nombres de deux chiffres ; ce chiffre final alimentait une
17.14 Générateurs de suites vraiment aléatoires
Le livre décrit ensuite les résultats de divers tests de caractère aléatoire des données.
Il suggère également comment utiliser le livre pour trouver un nombre aléatoire :
La matière principale du livre est la table de chiffres aléatoires. Elle les énumère par
groupe de 5 chiffres — « 10097 32533 76520 13586 . . . » — à raison de 50 par ligne
et de 50 lignes par page. La table continue ainsi sur 400 pages, ce qui, excepté pour
une section particulièrement osée à la page 283 qui indique « 69696 », s’avère d’une
lecture particulièrement ennuyeuse. Le livre comprend également une table des 100 000
écarts types.
Ce qui est intéressant à propos de la table R A N D n’est pas qu’elle contienne un
million de chiffres aléatoires, mais qu’elle a été créée avant la révolution informatique.
De nombreux algorithmes cryptographiques utilisent des constantes arbitraires — aussi
appelées « n o m b r e s m a g i q u e s ». Choisir les nombres magiques à partir de la table
RAND garantit qu’ils n’ont pas été choisis pour quelque raison cachée. Par exemple,
K h a f r e se sert de la table R A N D .
Cette méthode est très sensible au caractère aléatoire des interruptions système et à la
granularité de l’horloge. La sortie faisait bonne figure au cours de tests sur de réelles
machines UNIX.
Biais et corrélations
Le défaut majeur de tous ces systèmes est qu’il peut y avoir des corrélations et des biais
dans les suites engendrées. Le processus physique sous-jacent peut être aléatoire mais
il y a de nombreux instruments de mesures entre la partie numérique de l'ordinateur et
le dispositif physique. Ces instruments peuvent facilement introduire des biais et des
corrélations.
Un moyen d’éüminer ce biais est de combiner par ou exclusif plusieurs bits ensemble.
Si un bit aléatoire a un biais e en faveur de 0, alors la probabilité du résultat 0 peut
être écrite :
P ( 0) = 0,5 + e.
P ( 0) = 0,5 + 8 x e4.
- le contenu de la table d’allocation des fichiers (FA T), des tables du noyau, etc.,
- la charge du processeur,
char c h a ineAleat[16];
long comptAleat;
void genAleat(char *buf, unsigned int longbuf)
f
MD5_CTX md5;
char t m p [16];
unsigned int n;
while(longbuf != 0) {
450 Chapitre 17 Autres algorithmes de chiffrement en continu
La fonction de hachage est ici cruciale pour plusieurs raisons. Elle permet tout d ’abord
de générer facilement une quantité arbitraire de données pseudo-aléatoires sans devoir
appeler brasserAleat () à chaque fois. Dans les faits, le système se passe élégamment
de l’aléatoire parfait à l’aléatoire pratique quand la demande dépasse l’offre. Dans ce
cas, il devient théoriquement possible d ’utiliser le résultat d’un appel à genAleatO
pour déterminer le résultat de l’appel suivant ou précédent. Mais cela exige d’inverser
M D 5, ce qui n’est pas faisable en pratique.
Ceci est important car la procédure ignore ce qu’il adviendra du résultat de chaque
appel, il se peut qu’un appel serve à générer un nombre aléatoire pour un protocole
qui l’enverra en clair, par exemple en réponse à une requête d ’un attaquant. L ’appel
suivant peut servir dans une session sans rapport que l’attaquant essaye de pénétrer.
Il est clairement important qu’un attaquant ne puisse déduire le résultat d’un appel
d ’aucun autre.
Il reste un problème. chaineAleat [] doit être suffisament aléatoire avant le premier
appel à genAleatO. Si le système a fonctionné quelque temps avec un utilisateur au
clavier, il n’y a pas de problème. Mais qu’en est-il d ’un système automatique qui se
réinitialise tout seul sans qu’aucune commande au clavier ou à la souris n ’advienne?
Ce problème est difficile. Une solution partielle consiste à faire taper au clavier un
moment l’utilisateur après la toute première mise en route de la machine et d’en créer
un fichier de germes germeAleat [] à utiliser à chaque initialisation de la machine. Mais
ne sauver pas sur disque germeAleat [] directement. Un attaquant qui copierait se
fichier pourrait déterminer tous les résultats générés par genAleatO après la création
du fichier jusqu’au premier appel à brasserAleat ().
Pour résoudre ce problème, il faut appliquer la fonction de hachage à germeAleat []
juste avant de le sauver. Quand le système se réinitialise, il charge le fichier de germes,
le passe à brasserAleat ( ) et le détruit aussitôt. Malheureusement, il reste la menace
du vol du fichier de germes entre la réinitialisation et sa destruction, et son utilisation
pour deviner les résultats des futurs appels à genAleatO. Je ne vois pas d’autre
solution à ce problème que d’attendre l’arrivée d’événements aléatoires extérieurs après
17.H Générateurs de suites vraiment aléatoires 451
18.1 Introduction
Une fonction de hachage à sens unique, H (A i), opère sur un message A i de longueur
arbitraire. Elle fournit une valeur de hachage de longueur fixe h.
Il existe de nombreuses fonctions qui prennent une entrée de longueur arbitraire et qui
fournissent une sortie de longueur fixe, mais les fonctions de hachage à sens unique ont
les caractéristiques additionnelles suivantes :
Si Martin pouvait effectuer la partie difficile, cela minerait la sécurité de tout protocole
utilisant la fonction de hachage à sens unique. L ’essence même des fonctions de hachage
est de fourinir une « empreinte » de A i qui soit unique. Si Alice signait A i en utilisant
un algorithme de signature numérique sur H (A i), et si Bernard pouvait produire un
Ai' tel que H (A i) = H (Ai'), alors Bernard pourrait prétendre qu’Alice a signé A i'.
Dans certaines applications il ne suffit pas que la fonction soit à sens unique ; il faut
de plus qu’elle est ait une propriété appelée résistan ce à la collision :
Vous vous rappelez de l’attaque des anniversaires du paragraphe 7.4. Elle ne consiste
pas à trouver un autre message A i' tel que I I (A4') = II(A i), mais à trouver deux
messages aléatoires A4 et A i' tels que H (A i) — H (A i1).
Chapitre 18 Fonctions de hachage à sens unique
Le protocole suivant, décrit pour la première fois par Gideon Y u v a l [1637], montre
comment Alice peut utiliser l’attaque des anniversaires pour duper Bernard si la pro
priété supplémentaire n’était pas vérifiée.
1° Alice prépare deux versions d’un contrat, l’une favorable à Bernard, et l’autre
qui lui fait faire ce que bon lui semble.
3° Alice compare les valeurs des ensembles d’empreintes pour chacun des deux
documents, pour rechercher une paire qui concorde2. Elle reconstruit les deux
documents qui ont la même empreinte.
4° Alice fait signer par Bernard la version du contrat qui lui est favorable en
utilisant un protocole où il signe seulement l'empreinte.
5° Plus tard, Alice remplace le contrat signé par Bernard par celui qu’il n’a pas
signé. Maintenant elle peut convaincre un juge que Bernard a signé cet autre
contrat.
C’est un problème sérieux. (La morale de cette histoire est de toujours faire un petit
changement à un document que vous signez.)
Il existe des attaques similaires qui peuvent être montées en faisant l’hypothèse d’une
attaque des anniversaires réussie. Par exemple, les adversaires peuvent envoyer à un
système de contrôle automatique (d’un satellite, peut-être) des messages aléatoires
avec des signatures aléatoires. Finalement, l’un de ces messages aléatoires aura une
signature valide. Les adversaires n’auraient aucune idée de ce que la commande ferait,
mais si leur seul but consistait à fausser le satellite, cela réussirait.
1. L es c h a n g e m e n ts p e u v e n t co n s is te r à : re m p la ce r u n e s p a c e p a r la c o m b in a is o n « e sp a ce—re to u r en
a r r iè re -e sp a ce » , r a jo u te r un o u d e u x e sp a ces avan t les « aller à la lig n e », e tc . E n faisant o u n e fa isan t
p as un seul c h a n g e m e n t p arm i 3 2 lignes, A lic e p e u t fa cilem en t en g en d rer 2 32 d o cu m e n ts d ifférents.
2. Si la fo n c t io n d e h a ch ag e p r o d u it des valeurs d e 64 b it s seu lem en t, elle p o u r ra it év en tu ellem en t
tro u v e r une p a ire c o n c o r d a n te a v e c 2 32 v ersion s d e ch a q u e d o cu m e n t.
18.2 Snefru 455
Bien que cette méthode n ’ait jamais été prouvée sûre ou non sûre, plusieurs personnes
émettent de sérieuses réserves à son propos [1273, 859].
K =
M kr
Fonction de hachage
à sens unique ► hi
“ i-l '
Le message d ’entrée devrait contenir sous une certaine forme la représentation binaire
de la longueur du message en entier. Cette technique prévient un problème de sécurité
éventuel, qui résulterait de messages de longueurs différentes pouvant avoir la même
empreinte [1076, 416]. Cette technique est parfois appelée ren forcem en t-M D [941],
Différents chercheurs ont conjecturé que si une fonction à sens unique est sûre pour un
seul bloc, alors cette méthode de hachage d’une suite de longueur quelconque de blocs
est aussi sûre, mais rien n’a été prouvé [1147, 1075, 416].
On a beaucoup écrit à propos des fonctions de hachage à sens unique. Pour plus
d’indications mathématiques consultez [1033, 793, 791, 1147, 1076, 416, 98, 858, 1275].
La thèse de doctorat de Bart P R E N E E L [1273] est probablement l’exposé le plus complet
concernant les fonctions de hachage à sens unique.
18.2 Snefru
Sn e f r u 3 est une fonction de hachage à sens unique conçue par Ralph M erkle [1075].
Cryptanalyse de Snefru
En utilisant la cryptanalyse différentielle, B i h a m et S h a m i r ont prouvé que S n e f r u
à 128 bits et à deux passes n’était pas sûr [178].
Leur attaque trouve les paires de messages qui ont la même empreinte en quelques
minutes.
Pour S n e f r u à 1 2 8 bits, leur attaque est plus efficace que la recherche exhaustive
pour quatre passes ou moins. Une attaque des anniversaires contre S n e f r u requiert
264 opérations ; la cryptanalyse différentielle peut trouver une paire de messages ayant
la même empreinte en 2 28,5 opérations pour un S n e f r u à trois passes et en 2 44,5 opé
rations pour un S n e f r u à quatre passes. Trouver un message ayant une empreinte
donnée par recherche exhaustive nécessite 2128 opérations ; la cryptanalyse différen
tielle requiert 2 56 opérations pour un S n e f r u à trois passes et 2 88 opérations pour un
S n e f r u à quatre passes.
Bien que B i h a m et S h a m i r n’aient pas considéré les empreintes à 256 bits, ils éten
dirent leur analyse à des empreintes de 224 bits. Par comparaison avec l’attaque des
anniversaires, qui requiert 2112 opérations, ils peuvent trouver des messages avec la
même empreinte en 212-5 opérations pour un S n e f r u à deux passes, 233 opérations
pour un S n e f r u à trois passes et 288 opérations pour un S n e f r u à quatre passes.
Actuellement, M e r k l e recommande d’utiliser S n e f r u avec au moins huit
passes [1079]. Toutefois, avec autant de passes, l’algorithme est nettement plus lent
que M D5 et SHA.
18.3 N - H ash 457
18.3 N—Hash
N -H ashest un algorithme inventé par des chercheurs de la N i p p o n T é l é p h o n é a n d
T eleg raph, les mêmes que ceux qui ont inventé F E A L en 1990 [1111, 1112]. N - H a s h
utilise des blocs de message de 128 bits, une fonction de brouillage compliquée similaire
à celle de F E A L et produit des empreintes de 128 bits.
L’empreinte de chaque bloc de 128 bits est une fonction du bloc et de l’empreinte du
bloc précédent :
L’empreinte du message entier est l’empreinte du dernier bloc La valeur initiale quel
conque I peut être n’ importe quelle valeur choisie par l'utilisateur (même tous des
0).
La fonction g est une fonction compliquée. La figure 18.2 donne un aperçu de l’algo
rithme. Au départ, les 64 bits de gauche et les 64 bits de droite de l’empreinte de 128
bits du bloc précédent du message hi- 1 sont échangés; les deux moitiés sont ensuite
combinées par ou exclusif avec 1010___ 1010 (sur 128 bits) en binaire et ensuite com
binées par ou exclusif avec le bloc courant du message A4 j. Cette valeur passe alors
dans N étapes (N — 8 pour les figures) de traitement. L ’autre entrée d ’une étape de
traitement est la valeur de l’empreinte précédente combinée par ou exclusif avec une
constante binaire parmi huit.
Une étape de traitement est illustrée par la figure 18.3. Le bloc de message est coupé
en quatre valeurs de 32 bits. L ’empreinte précédente est coupée également en quatre
valeurs de 32 bits. La fonction f est donnée par la figure 18.4. Les fonctions So et ,S'i
sont les mêmes que pour FE A L :
Cryptanalyse de N—Hash
Bert DEN B o e r a découvert un moyen de provoquer des collisions dans la fonction de
ronde de N- H a s h [1273]. BlHAM et S h a m i r ont utilisé la cryptanalyse différentielle
pour casser N - H a s ii à 6 rondes [176, 178]. Leur attaque particulière (il y en a certai
nement d’autres) marche pour n’importe quel N qui est divisible par 3, et elle est plus
efficace que l’attaque des anniversaires pour tout N inférieur à 15.
La même attaque permet de trouver des paires de messages qui ont la même empreinte
pour N- H a SII à 12 rondes en 256 opérations au lieu des 264 opérations nécessaires pour
une attaque exhaustive. N H a s h à 15 rondes n’est pas vulnérable à la cryptanalyse
différentielle qui requiert dans ce cas 272 opérations.
Les concepteurs de l’algorithme recommandent d’utiliser N H a s h avec au moins
8 rondes [1112]. Étant donné le peu de sûreté de N - H a s h et de FE A L (et étant
donné sa lenteur avec 8 rondes), je conseille d’ utiliser un autre algorithme.
458 Chapitre 18 Fonctions de hachage à sens unique
18.4 M D4
M D 4 est une fonction de hachage à sens unique conçue par Ron R iv e s t [1329, 1330,
1331]. L ’acronyme « MD » vient de « Message Digest » et l’algorithme produit des
empreintes de 128 bits du message d’entrée.
Dans [1330], R iv e s t décrit les objectifs de conception pour l’algorithme:
Après que l’algorithme ait été présenté pour la première fois, Bert DEN BOER et Antoon
B o sselaers ont cryptanalysé avec succès les deux dernières des trois rondes de l’algo
rithme [459]. Ralph M e r k l e a attaqué avec succès les deux premières rondes [459]. Eli
B iham décrit une attaque par cryptanalyse différentielle possible contre deux tiers de
MD4 [166]. Bien que ces attaques ne puissent pas être étendues à l’algorithme complet,
R iv est a renforcé l’algorithme. Le résultat est M D5.
460 Chapitre 18 Fonctions de hachage à sens unique
fU p )
X, et X 2 : entrées de 8 bits
S0 et 5, : résultats de 8 bits
rot 2 (7 ’) : décalage circulaire à gauche de 2 bits de T
18.5 M D5
M D5 est une version améliorée de M D 4 [1391, 1332]. Bien que plus complexe, il est
similaire de conception et il produit également des empreintes de 128 bits.
Description de M D5
Après un traitement initial, M D5 manipule le texte d ’entrée par blocs de 512 bits
divisés en 16 sous-blocs de 32 bits. La sortie de l’algorithme est un ensemble de 4 blocs
de 32 bits qui, joints ensemble, forment une seule empreinte de 128 bits.
Tout d ’abord le message est complété de manière à ce que 64 bits de plus amèneraient
sa longueur à un multiple de 512. Ce remplissage se fait avec un seul 1 rajouté à la fin
du message suivi d ’autant de 0 que nécessaire. Ensuite, une représentation de 64 bits
de la longueur totale du message (avant que le remplissage ne soit effectué) est jointe
au résultat. Ces deux étapes servent à rendre la longueur du message multiple de 512
bits (ce qui est nécessaire pour la suite de l’algorithme), tout en s’assurant que des
messages différents n’auront pas l’air similaires après le remplissage.
Quatre variables de 32 bits sont initialisées :
A = 0x01234567
18.5 MD5 461
B = 0x89ABCDEF
C = 0xFEDCBA98
D = 0x76543210.
F (X ,Y ,Z ) = ( X A Y ) V (--X A Z)
G (X ,Y ,Z ) = ( X A Z) V (Y A -<Z)
H (X ,Y ,Z ) = X ® Y ® Z
I{X ,Y ,Z ) = Y ® (X V iZ ).
Ces fonctions sont conçues de telle manière que si les bits correspondants de X , Y et
Z sont indépendants et non biaisés, alors les bits du résultat sont aussiindépendants
et non biaisés. La fonction F est la conditionnelle bit à bit : si X , alorsY, sinon Z. La
fonction H est l’opérateur de parité bit à bit.
4. Signification des opérateurs logiques : A dén ote le « et logique » logique, V dénote le « ou in clu sif »,
i dénote la négation et ffi dénote le « ou exclu sif ».
462 Chapitre 18 Fonctions de hachage à sens unique
ronde 2 :
GG (D , A, B, c, M[ 6 ] , 9 , 0 x c0 4 0 b 3 4 0 )
GG (C , D, A, B, H t ll], 14, 0x265e5a51)
GG (B , c, D, A, M[ 0 ] , 2 0 , 0 x e9 b6c7aa)
GG (A , B, C, D, M[ 5 ] , 5 , 0 x d 6 2 f1 0 5 d )
GG (D , A, B, c, M [1 0 ], 9 , 0x02441453)
GG (C , D, A, B, M[1 5 ] , 1 4 , 0 x d 8 a le 6 8 1 )
GG (B , c, D, A, M[ 4 ] , 2 0 , 0 x e 7 d 3 fb c 8 )
GG (A , B, C, D, M[ 9 ] , 5, 0 x 2 1 e lc d e 6 )
GG (D , A, B, c, M [1 4 ], 9, 0 x c3 3 7 0 7 d 6 )
GG ( c , D, A, B, M[ 3 ] , 14, 0 x f4 d 5 0 d 8 7 )
GG (B , c , D, A, M[ 8 ] , 20, 0 x 4 5 5 a l4 e d )
GG (A , B, c , D, M [13] , 5 , 0xa9e3e905)
GG (D , A, B, c, M[ 2 ] , 9 , O x fc e fa 3 f8)
GG (C , D, A, B, M[ 7 ] , 1 4 , 0 x 6 7 6 f0 2 d 9 )
GG (B , c , D, A, M [1 2 ], 2 0 , 0 x 8 d 2 a 4 c 8 a );
ronde 3 :
HH (A , B, c, D, M[ 5] 4 , 0 x fffa 3 9 4 2 )
HH (D , A, B, c, M[ 8 ] u , 0x877l f 681)
HH (c , D, A, B, M [ll] 16, 0x6d9d6122)
HH (B , c, D, A, M [14] 2 3 , 0 x fd e 5 3 8 0 c )
HH (A , B, c, D, M[ 1] 4 , 0xa4beea44)
HH (D , A, B, c, M[ 4 ] u , 0 x 4 b d e c fa 9 )
HH (C , D, A, B, M[ 7] 1 6 , O x f6 b b 4 b 6 0 )
HH (B , c, D, A, M [10] 2 3 , 0 x b e b fb c 7 0 )
HH (A , B, c, D, M [13] 4 , 0x 2 8 9b7ec6)
HH (D , A, B, c , M[ 0] u , 0 x e a a l2 7 f a )
HH (c , D, A, B , M[ 3 ] 1 6 , 0 x d 4 e f3 0 8 5 )
HH (B , c, D, A, M[ 6] 2 3 , 0 x 0 4 8 8 ld 0 5 )
HH (A , B, c, D, M[ 9] 4 , 0 x d 9 d 4 d 0 39 )
HH (D , A, B, c , M [12] 11, 0xe6db99e5)
HH (C , D, A, B, M [15] 16, O x lfa 2 7 c f8)
HH (B , c, D, A, M[ 2] 2 3 , 0xc4a c5 6 65 )
ronde 4 :
1 1 (A , B , c , D, M[ 0 ] , 6, O x f4 2 9 2 2 4 4 )
II (D , A, B, c , M[ 7 ] , 1 0 , 0 x 4 3 2 a ff97)
II (c , D, A, B, M [14] , 1 5 , 0xab9423a7)
II (B , C, D, A, M[ 5 ] , 2 1 , 0 x fc 9 3 a 0 3 9 )
II (A , B, c , D, M [12] , 6, 0 x 6 5 5 b 5 9 c3 )
II (D , A, B, C, M[ 3 ] , 1 0 , 0 x 8 f0 c c c 9 2 )
II (C , D, A, B, M [10] , 1 5 , O x ffe ff4 7 d )
II (B , c , D, A, M[ 1 ] , 2 1 , 0 x 8 5 8 4 5 d d l)
II (A , B, c , D, M[ 8 ] , 6, 0 x 6 fa 8 7 e 4 f)
II (D , A, B, c , M [15] , 1 0 , 0 x fe 2 c e 6 e 0 )
464 Chapitre 18 Fonctions de hachage à sens unique.
II (C , D, A, B, M[ 6 ] , 1 5 , 0xa3014314)
II (B , C, D, A, M [13] , 2 1 , 0 x 4 e 0 8 1 1 a l)
II (A , B, c , D, M[ 4 ] , 6, 0 x f7 5 3 7 e 8 2 )
II (D , A, B, c , M [ll] , 10, 0 x b d 3 a f2 3 5 )
II ( c , D, A, B, M[ 2 ] , 1 5 , 0x2ad7d2bb)
II (B , c , D, A, M[ 9 ] , 2 1 , 0xeb86d391)
Sécurité de M D5
Ron R i v e s t décrit les améliorations de M D5 par rapport à M D 4 [1332] :
5. L’ordre d’accès des sous-blocs est changé dans les 2e et 3e rondes afin de rendre
les motifs moins similaires.
Tom BERSON a essayé d ’utiliser la cryptanalyse différentielle contre une seule ronde de
M D5 [151] mais son attaque est loin d’être efficace contre les 4 rondes. Une attaque
nettement mieux réussie de Bert DEN B o e r et Antoon BOSSELAERS peut produire des
collisions en utilisant la fonction de compression de M D5 [460, 1344, 1348]. Cela ne
donne pas des attaques pratiques contre des applications concrètes de M D5 et cela
ne remet pas en cause l’utilisation de M D5 dans les algorithmes de chiffrement à la
L u b y - R a c k o f f (voir § 14.11). Cela veut simplement dire que l’un des principes de
conception de M D 5— concevoir une fonction de compression résistante aux collisions -
a été violé. Même s’il est vrai que « la fonction de compression semble posséder une
faiblesse, mais sans conséquence sur la sécurité de la fonction de hachage en pratique »,
je reste circonspect quant à l’utilisation de M D5
18.6 MD2 465
18.6 M D2
MD2 est encore une autre fonction de hachage à sens unique conçue par Ron
R i v e s t [810,1346]. Elle est utilisée, avec M D 5, dans les protocoles PE M (voir § 24.10).
La sécurité de M D 2 dépend d’une permutation aléatoire de l’ensemble de tous les
octets. Cette permutation est fixée, et dépend des décimales de n. Elle sera noté
Sq,Si, . . . ,5255• Pour calculer l’empreinte d ’un message A4, procédez ainsi :
t= 0
Pour j variant de 0 à 17 et k variant de 0 à 47, effectuer:
t = X k® S t
Xk= t
t = (t + j ) modulo 256
Bien qu’aucune faiblesse n’ait été trouvée dans M D2 (consulter [1273]), il est plus lent
que la plupart des autres fonctions de hachage à sens unique suggérées.
E t:
« Ce standard spécifie un algorithme de hachage sûr (SH A), qui est né
cessaire pour garantir la sécurité de l’algorithme de signature numérique
(D SA ). Quand un message de n’importe quelle longueur inférieure à 264
est donné en entrée, le SHA produit une sortie de 160 bits appelée mes
sage abrégé7. Le message abrégé est alors fourni comme entrée au DSA
qui calcule la signature du message. Signer le message abrégé plutôt que
le message d’entrée améliore souvent l’efficacité du processus parce qu’ha
bituellement le message abrégé est nettement plus court que le message
d’entrée. Le même message abrégé doit être obtenu par le vérificateur de
la signature quand la version reçue du message est utilisée comme entrée
à la fonction SHA. Le SHA est qualifié de sûr parce qu’il est conçu pour
qu’il soit impossible de retrouver par le calcul un message correspondant
à un message abrégé donné, ou de trouver deux messages différents qui
produiraient le même message abrégé. Tout changement à un message en
transit produira, avec une très haute probabilité, un message abrégé diffé
rent et la vérification de la signature échouera. Le SHA est basé sur des
principes similaires à ceux utilisés par le professeur Ronald L. R i v e s t du
M IT quand il conçut l’algorithme de message abrégé M D 4 [1330] et est
étroitement calqué sur cet algorithme. »
SHA produit des empreintes de 160 bits, ce qui est plus long que ce que produit MD5.
Description du SHA
Au départ, le message est complété de manière à ce que sa longueur en bits soit un
multiple de 512. Le remplissage est exactement le même que celui de M D5 : ajoutez
d’abord un 1 suivi d’autant de 0 que nécessaire pour que 64 bits manquent par rapport
à un multiple de 512 et enfin une représentation en 64 bits de la longueur du message
avant remplissage.
Cinq variables (M D 5 avait 4 variables, mais SHA produit une empreinte de 160 bits)
sont initialisées de la façon suivante :
A = 0x67452301
B = 0xEFCDAB89
C = 0x98BADCFE
D = 0x10 3 2 5 4 7 6
E = 0xC3D2ElF0.
La boucle principale de l’algorithme commence alors. Elle traite le message 512 bits à
la fois et continue tant qu’il y a des blocs de 512 bits.
7. N ote du traducteur : le term e « m e s s a g e a b r ég é » est utilisé ici com m e traduction littérale de
l’expression anglaise « m e s s a g e d tg est ». Il s’ agit en fait de ce qui a été appelé tou t au long de cet
ouvrage une « e m p r e in te ».
18.7 Algorithme sûr de hachage S H A 467
Premièrement, les 5 variables sont copiées dans des variables différentes : A dans AA ,
B dans B B , C dans C C , D dans D D et E dans E E .
La boucle principale a 4 rondes de 20 opérations chacune (M D 5 a 4 rondes de 16
opérations chacune). Chaque opération effectue une opération non linéaire sur trois
des variables A, B , C et D , et effectue des décalages et des additions similaires à ceux
de M D5.
L’ensemble des opérations non linéaires de SHA sont données par :
T E M P = (A o 5) + ft(B ,C ,D ) + E + W t + K t
E —D
D —C
C = (B o 30)
B —A
A = TEM P.
La figure 18.7 illustre une opération Le décalage des variables a le même effet que
l’utilisation de différentes variables à différents endroits dans MD5.
Après tout cela, A, B , C, D et E sont ajoutés à AA , B B , C C , D D et E E res
pectivement et l’algorithme passe au bloc de données suivant. La sortie finale est la
juxtaposition de A A , B B , C C , D D et E E .
8. Si vous vous dem andez d ’où ces constantes viennent: 0x5A827999 — \ A j 4 . 0x6ED9EBAl = v^3/4,
0x8FlBBCDC = \Æ /4 et 0xCA62ClD6 = vT Ô /4 .
9. Une anecdote intéressante : la spécification originale de SH A ne contenait pas le décalage circu
laire à gauche. La m odification « corrige une im perfection technique qui rendait le standard moins sûr
que prévu » [545]. La N SA a refusé de révéler la nature exacte de cette im perfection.
468 Chapitre 18 Fonctions de hachage à sens unique
Sécurité de SHA
SHA est très similaire à M D4. Les changements principaux sont l’addition d’une étape
d’expansion, la sommation de la sortie de l’étape précédente à l’entrée de l’étape sui
vante pour obtenir un effet d ’avalanche. Ron R i v e s t a rendu publics les choix de
conception de M D5 mais les concepteurs de SHA ne l’ont pas fait. Voici les améliora
tions apportées par R lV E S T dans M D 5 par rapport à M D 4 et leur comparaison avec
SH A:
1. « Une quatrième ronde a été ajoutée. » SHA fait de même. Toutefois, la 4e ronde
de SHA utilise la même fonction / que la 2e ronde.
5. « L ’ordre d’accès des sous-blocs est changé dans les 2e et 3e rondes afin de rendre
les motifs moins similaires. » SHA est complètement différent, puisqu’il utilise
un code cyclique correcteur d ’erreurs.
18.8 R IP E -M D
R IP E -M D a été développé par le projet R IP E [1316] de la Communauté européenne
(voir § 25.7). Cet algorithme est une variante de M D4 conçue pour résister à toutes
les attaques cryptanalytiques connues. Les rotations et l’ordre des mots du message
sont modifiés. De plus, deux versions de l’algorithme, qui diffèrent seulement par les
constantes, sont exécutées en parallèle. Après chaque bloc, la sortie des deux versions
est ajoutée aux variables de chaînage. Il semble que cela rende l’algorithme très résistant
à la cryptanalyse.
18.9 HAVAL
H AVAL est une fonction de hachage à sens unique de longueur variable [1648]. C’est
une variante de M D 5. HAVAL manipule les messages par blocs de 1024 bits, deux fois
la taille de M D5. Il utilise des variables de chaînage de 32 bits, deux fois la longueur de
celles de M D5. Il a un nombre variable de rondes, de 3 à 5 (chaque ronde a 16 étapes),
et il peut produire des empreintes de 128, 160, 192, 224 et 256 bits.
HAVAL remplace les fonctions non linéaires simples de M D5 par des fonctions à
7 variables fortement non linéaires. Chaque ronde utilise une seule fonction mais, à
chaque étape, une permutation différente est appliquée aux entrées. Il y a un nouvel
ordre de traitement des blocs du message et chaque étape (sauf la première) utilise une
constante additive différente. Il y a aussi deux rotations.
470 Chapitre 18 Fonctions de hachage à sens unique
10. N ote du traducteu r: le lecteur intéressé trouvera la description des intervalles p ou r i e t j , ainsi
que la façon de diviser le message M et la signification de la fonction r dans l’ article original [1648].
18.11 Utilisation d’algorithmes de chiffrement par blocs 471
A, B et C sont à prendre parmi les termes A4», H i - 1 , (A4,; © H i - j), ou une constante
(supposée être 0). Le message est divisé en morceaux de la taille d’un bloc, les A-fr, qui
sont traités individuellement. Il y a de plus une sorte de renforcement MD, éventuelle
ment la même procédure de remplissage que dans M D5 et SHA.
11. C ette mesure est donnée avec la définition opposée dans [1273], mais la définition donnée ici est
plus intuitive et plus largement utilisée. C ela peut être source de confusion.
472 Chapitre 18 Fonctions de hachage à sens unique
F ig . 18.8 - D a v ie s - M eyer
Chacune des trois variables peut prendre une des quatre valeurs possibles, ce qui donne
en tout 64 schémas possibles. Bart P r e n e e l les a tous étudiés [1273].
Quinze d ’entre eux sont trivialement faibles car le résultat n’y dépend pas de l’une
des entrées. Trente sept d’entre eux ne sont pas sûrs pour des raisons plus subtiles. Le
tableau 18.1 donne la liste des douze schéma restants : les quatres premiers résistent à
toutes les attaques (voir la figure 18.9) et les huits autres résistent à toutes sauf une
attaque du point fixe, qui ne vaut pas la peine de s’inquiéter.
Clef
M,
Chiffre
H,.| p
Clef Clef
— *W“ Af, <5
Chiffre Chiffre
F ig . 18.9 - Les quatres fonctions de hachage sûre où empreintes et blocs ont même
taille
Le premier schéma a été décrit dans [1033]. Le troisième a été décrit dans [526, 1111,
1112] et proposé comme standard ISO [1142]. Le cinquième est dû à Cari M e y e r ,
mais connu sous le nom de D a v i e s - M e y e r dans la littérature [1608, 1609, 434, 1033].
Le dixième a été proposé comme un mode fonction de hachage pour LO K I [278].
Les premier, deuxième, troisième, quatrième, cinquième, et onzième schémas ont un
taux de hachage de 1 ; la longueur de la clef est égale à la longueur des blocs. Les autres
ont un taux de k /n où k est la longueur de la clef. Cela signifie que si la clef est plus
courte que les blocs de l’algorithme, alors les blocs de message ne peuvent pas être plus
long que la clef. Il n’est pas recommandé d ’utiliser des blocs de message plus longs que
la clef, même si les blocs de l’algorithme de chiffrement sont plus courts que la clef.
Si l’algorithme par blocs a comme le DES une propriété de complémentation, ou des
clefs faibles, il existe une attaque supplémentaire possible contre les douze schémas.
18.11 Utilisation d’algorithmes de chiffrement par blocs
H = Ehx_ j (Af*) © M i
H = ( M i © H i-x ) © Al* © l î i -1
H = Eh i_1(Mi) © if i-i © Al*
H = E h,.* (Al* © t fi-i) © Al*
H — E m ,(H î—i ) © H i - i
H — £?M.(Ati © -H*—i) © Al* ffi Hi—i
H — E m %(H i- 1) ffi A li
H = Em ,(Mi ffi Hi-i) © Hi-1
H = E m ,®h (Ali) © Ali
H = (# i-l) © # i-l
H, = EM x<
£ h x__x(M i) © H i-i
H = E^umh-1 (H i- 1) © M i _________
L’attaque n’est pas très dangeureuse et ne vaut pas la peine de s’inquiéter. Cependant,
vous pouvez la contrecarrer en fixant les bits 2 et 3 de la clef à « 01 » ou « 10 »
[1085, 1113]. Cela réduit bien sûr la longueur de la clef de 2 bits (à 54bits pour leDES
par exemple), et aussi le taux de hachage.
Les schémas suivants, extraits de la littérature, ne sont pas sûrs.
Ce schéma [1293] a été cassé dans [373] :
H = E Mx(H i-\)
D a v i e s et P r ic e ont proposé une variante qu i fait passer le message entier deux fols à
[432, 433]. L ’a ttaque de CO PPER SM ITH m arche sur cette variante
travers l ’algorithm e
sans dem ander beaucoup plus de calculs [373],
Un autre schéma [432, 464] n’est pas sûr non plus [1608] :
H i = E m & H i- x( H )
i-1
Il est m ontré dans [1033] que le schém a suivant n ’est pas sûr (c est une constante) :
Davies-Meyer modifié
L a i et M a s s e y ont modifié la technique de D a v i e s - M e y e r pour pouvoir l’utiliser
avec le chiffre ID E A [941, 937]. ID E A a une taille de bloc de 64 bits et une taille de
clef de 128 bits. Ce schéma est :
Chiffre
| Clef |
i
t
Airf
Preneel—Bosselaers-Govaerts—Vandewalle
Cette fonction de hachage, proposée pour la première fois dans [1277], engendre une
empreinte qui a deux fois la longueur de bloc de l’algorithme de chiffrement ; un algo
rithme à 64 bits donne une empreinte de 128 bits.
Avec un algorithme de chiffrement par blocs à 64 bits, ce schéma produit deux em
preintes de 64 bits, Gt et H t, qui sont jointes pour produire une empreinte de 128 bits.
Avec la plupart des algorithmes de chiffrement par blocs, la taille de bloc est de 64
bits. Deux blocs de messages adjacents Lt et llt ayant chacun la taille de la clef sont
hachés ensemble.
L a i a montré des attaques contre ce schéma qui, dans certains cas, rendent l’attaque
des anniversaires facilement applicable [937, 935]. P r e n e e l [1273] et C o p p e r s m i t h
[377] ont également des attaques contre ce schéma. Ne l’utilisez pas.
Quisquater—Girault
Ce schéma, proposé pour la première fois dans [1290], produit également une empreinte
qui a deux fois la taille du bloc de chiffrement. Deux blocs L, et lii, chacun de la taille
de la clef, sont hachés ensemble.
Ce schéma est apparu dans une ébauche de standard ISO de 1989 [760] mais fut
abandonné dans une version ultérieure [761]. Les problèmes de sécurité avec ce schéma
furent identifiés dans [1113, 937, 1273, 377]12. Dans certaines circonstances, l’attaque
des anniversaires est soluble avec une complexité de 232 au lieu de 264, par attaque
exhaustive. N’utilisez pas ce schéma.
12. En fait, la version publiée a été renforcée après que la version présentée à la conférence fut
attaquée.
18.11 Utilisation d’algorithmes de chiffrement par blocs 475
Une fois de plus, dans certaines circonstances, l’attaque des anniversaires est aisément
soluble [937, 935, 1273, 377, 376]. N’utilisez pas ce schéma.
Davies-Meyer parallèle
Il s’agit encore d ’une tentative d ’algorithme de taux de hachage 1 produisant une
empreinte deux fois plus longue que les blocs [738].
Malheureusement, ce schéma n’est pas sûr non plus [939, 863]. Il s’avère qu’une fonction
d’empreinte de longueur double et de taux de hachage 1 ne peut pas être plus sûre que
D a v i e s - M e y e r [863],
F ig . 1 8 .1 1 - D a v ie s - M eyer en tandem
Dans les deux schémas, les deux empreintes de 64 bits G l et IIi sont juxtaposées pour
former une unique empreinte de 128 bits.
Pour autant que l’on sache, ces algorithmes ont la sécurité idéale pour des fonctions de
hachage à 128 bits : trouver un message qui a une empreinte donnée nécessite 2128 tenta
tives, et trouver deux messages qui ont la même empreinte nécessite 264 tentatives— en
faisant l’hypothèse qu’il n’y pas de meilleur moyen d ’attaquer l’algorithme de chiffre
ment par bloc que l’attaque exhaustive, bien entendu.
M D C —2 et M D C —4
M D C -2 et M D C -4 ont été développés par IBM [1085, 1089]. M D C -2 qui est parfois
appelé IscMeyer-Schilling est pris en considération pour devenir un standard AN SI et
ISO [62, 761] ; une variante a été proposée dans [767]. M D C -4 est spécifié pour le
projet R IP E [1316] (voir § 25.7). La spécification utilise le DES comme fonction de
bloc (il faut quatre chiffrements DES pour traiter un seul bloc de message de 64 bits),
bien qu’en théorie, n’importe quel autre algorithme puisse être utilisé.
M D C -2 a un taux de hachage de 1/2 et produit une empreinte qui a deux fois la
longueur d ’un bloc de chiffrement. Il est illustré par la figure 18.13. M D C -4 produit
aussi une empreinte qui a deux fois la longueur d ’un bloc de chiffrement et a un taux
de hachage de 1/4 (voir la figure 18.14.
Ces schémas ont été analysés dans [937, 1273]. Ils sont sûr au vu de la puissance actuelle
F ig . 18.13 - M D C -2
des ordinateurs, mais ils ne sont pas aussi sûrs que ce que leurs concepteurs avaient
estimé. Si l’algorithme de chiffrement est le DES, ils ont été examinés sous l’angle de
la cryptanalyse différentielle [1273].
M DC -2 et M D C -4 sont tous les deux brevetés [226].
AR
La fonction de hachage A R a été développée par A l g o r i t h m i c R e s e a r c h , L t d . et
distribuée par ISO à dans un but informatif uniquement [1141]. Sa structure fonda-
F i g . 18.14 - M D C - 4
Chapitre 18 Fonctions de hachage à sens unique
mentale est une variante de l’algorithme par blocs (le DES en l’occurrence) en mode
C B C . Les deux derniers blocs de texte chiffré, une constante et le bloc de message
courrant sont combinés par ou exclusif puis chiffrés par l’algorithme. L ’empreinte est
constituée des deux derniers blocs de texte chiffré calculés. Le message est traité deux
fois avec deux clefs différentes, la fonction a donc un taux de hachage de 1 / 2 . La pre
mière clef est 0 x 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 , la seconde est 0 x 2 A 4 1 5 2 2 F 4 4 4 6 5 0 2 A , et c vaut
0 x 0 1 2 3 4 5 6 7 8 9 A B C D E F . Le résultat est comprimé en une seule empreinte de 1 2 8 bits.
Consulter [752] pour les détails.
Cela a l’air intéressant, mais ce n’est pas sûr. Après le traitement d ’une somme de
données considérable, il devient possible de trouver facilement des collisions pour cette
fonction de hachage [419].
GOST
Cette fonction vient de Russie, elle est spécifiée dans le standard G O S T R 34.11-94
[659]. Elle utilise l’algorithme de chiffrement par blocs G O S T (voir § 14.1), bien qu’en
théorie elle fonctionnerait avec n’importe quel algorithme par blocs de 64 bits et de
clef de 256 bits. La fonction produit une empreinte de 256 bits.
La fonction de compression / ( A i , , / / , _ i ) (dont les deux paramètres sont formés de 256
bits) est définie ainsi :
3° 77, est une combinaison complexe, bien que linéaire, de S, A4, et //, i .
L’empreinte finale de A4 n’est pas l’empreinte du dernier bloc. Il y a en fait trois variable
de chaînage : H n est l’empreinte du dernier bloc de message, Z est la combinaison par
ou exclusif de tous les blocs de message, et L est la longueur du message. Etant donné
ces variables et le dernier bloc de remplissage A4' accolé à la fin de A4, l’empreinte
finale est la suivante :
H — f ( Z © A f',/(L ,/(A 4 \ 7 7 „)))
La documentation est un peu confuse (et en russe), mais je pense que tout cela est
correct. Dans tous les cas, cette fonction de hachage est destinée au standard russe de
signature numérique (voir § 20.3).
Autres schémas
Ralph M e r k l e a proposé un schéma qui utilise le DES mais il est lent ; il ne traite que
7 bits du message par itération, et chaque itération met en jeu deux chiffrement par
le DES [1081, 1076]. Un autre schéma [1644, 1647] n’est pas sûr [1278] ; il fut proposé
un temps pour devenir un standard ISO.
18.12 Utilisation d’algorithmes à clef publique
Une solution encore plus simple serait d’utiliser un seul nombre premier fort comme
module p. Alors :
H (A4) = A4e mod p.
Casser ce problème est probablement aussi difficile que de trouver le logarithme discret
de e. Si e et p sont assez grands, la fonction de hachage à sens unique est sûre. Le
défaut de cet algorithme est qu’il est nettement plus lent que tous les autres déjà
décrits ci-dessus. Je ne le recommande pas pour cette raison.
avec un C A M et les stocker dans une table. Si l’utilisateur utilisait une fonction de
hachage à sens unique à la place, le virus pourrait calculer la nouvelle empreinte après
infection et remplacer celle de la table. Un virus ne pourrait pas faire cela avec un
C A M parce qu’il ne connaitrait pas la clef.
Un moyen facile de transformer une fonction de hachage à sens unique en un CAM
consiste à chiffrer l’empreinte avec un algorithme à clef secrète.
v = v <3 1
e= v © w
x = ((((e -f y) modulo 232) V A A C ) x (a; © A U )) modulo 232 — 1
18.14 Codes d’authentification de messages 481
Répéter cela pour chaque bloc de message M i et l’empreinte résultante est la combi
naison par ou exclusif de x et y. Les variables u et e proviennent de la clef. A, B , C
et D sont des constantes.
Cet algorithme est probablement largement utilisé, mais je ne peux pas croire qu’il soit
si sûr. Il y a fort longtemps qu’il a été conçu, et il n’est pas très compliqué.
C A M bidirectionnel
Ce C A M produit des empreintes de longueur double de celle des blocs de l’algorithme
[989]. Commencez par calculer le C A M par chiffrement par blocs en mode C B C ap
pliqué au message. Calculez alors le C A M par chiffrement par blocs en mode C B C
appliqué au message en prenant les blocs dans l’ordre inverse. L ’empreinte du C A M bi
directionnel est obtenu simplement en juxtaposant les deux valeurs. Malheureusement,
cette construction n’est pas sûre [1103].
Méthodes de J u e n e m a n
Ce C A M est aussi appelé code de détection de manipulations congruentielles quadra
tiques (C D M C Q en abrégé) [792, 790]. Divisez tout d’abord le message en blocs de m
bits, et appliquez ceci ensuite :
RIPE-M AC
R I P E M A C a été conçu par Bart P r e n e e l [1273] et adopté par le projet R IP E [1316]
(voir § 18.8). Il est basé sur l’ISO 9797 [768] et utilise le DES comme fonction de
chiffrement de bloc. Il y a deux variantes de R IP E -M A C : l’une utilisant le DES
normal, appelée R IP E —M AC1 et l’autre utilisant le DES triple pour une plus grande
482 Chapitre 18 Fonctions de hachage à sens unique
IBC-Hash
IB C -H ash est un autre C A M adopté par le projet R IP E [1316] (voir § 18.8). Il
est intéressant car on peut prouver sa sécurité ; la probabilité d’une attaque réussie
peut être quantifiée. Malheureusement, chaque message doit être haché avec une clef
différente. Le niveau de sécurité choisi impose des contraintes sur la longueur maximale
du message, quelque chose qu’aucune autre fonction de ce chapitre ne fait. Étant donné
ces considérations, le rapport R IP E recommande de n’utiliser IB C -H ash que pour des
longs messages envoyés peut fréquemment.
Le coeur de la fonction réside dans la formule suivante :
H ( K i ,H ( K 2,M))
18.14 Codes d’authentification de messages 483
H(K,H(K,M))
H{K, p, M., K) où p sert à remplir K jusqu’à obtenir un bloc de message.
La meilleure approche consiste à joindre 64 des bits de la clef avec chaque bloc du
message. Cela rend la fonction de hachage moins efficace car les blocs du message sont
plus petits, mais c ’est beaucoup plus sûr [1276].
Une alternative consiste à utiliser une fonction de hachage à sens unique et un algo
rithme de chiffrement à clef secrète. Calculez l’empreinte du fichier, et chiffrez la. Elle
est plus sûre que de chiffrer le fichier et de calculer l’empreinte du fichier chiffré, mais
elle est vulnérable aux mêmes attaques que l’approche H( Â 4 ,K) [1276].
19.1 Introduction
Le concept de cryptographie à clef publique fut inventé par Whitfield D i f f i e et Martin
H e l l m a n , et indépendamment par Ralph M e r k l e . L’idée neuve dans le domaine
était que les clefs pouvaient être des paires — une clef de chiffrement et une clef de
déchiffrement — et qu’il était impossible de générer une clef à partir de l’autre (voir
§ 2.5). D i f f i e et H e l l m a n ont présenté ce concept pour la première fois en 1976 à
la « National Computer Conférence » [493] ; quelques mois après, leur article « New
Directions in Cryptography » paraissait dans « IEEE Transactions on Information
Theory » [494]1.
Depuis 1976, de nombreux algorithmes de cryptographie à clef publique ont été propo
sés. Nombre d’entre eux ne sont pas sûrs. Parmi ceux qui sont encore considérés comme
sûrs, nombre d’entre eux ne sont pas pratiques. Soit ils ont une clef exagérément grande,
soit le texte chiffré est nettement plus long que le texte en clair.
Seuls quelques algorithmes sont à la fois sûrs et pratiques. Ces algorithmes sont en
général basés sur l’un des problèmes difficiles décrits dans le paragraphe 11.2. De ces
algorithmes à clef publique sûrs et pratiques, certains ne sont adaptés qu’à la distribu
tion de clefs. D ’autres sont adaptés au chiffrement (et, par extension, à la distribution
de clefs). D ’autres ne sont adaptés qu’aux signatures numériques. Seuls trois algo
rithmes sont adéquats à la fois pour le chiffrement et les signatures numériques : RSA ,
E l G a m a l et R a b i n . T o u s ces algorithmes sont lents. Les vitesses de chiffrement et
de déchiffrement sont nettement plus faibles que pour les algorithmes à clefs secrètes ;
habituellement c’est trop lent pour le chiffrement de données en masse.
Les systèmes hybrides (voir § 2.5) permettent d’augmenter la vitesse : un algorithme
avec une clef secrète aléatoire sert à chiffrer le message, et un algorithme à clef public
sert à chiffrer la clef.
Les valeurs des bi étant soit 0 soit 1. Un 1 indique que l’élément est dans le nouveau
tas ; un 0 indique qu’il n’y est pas.
Par exemple, les objets pourraient avoir les poids suivants: 1, 5, 6, 11, 14 et 20. II
est possible de créer un tas qui pèse 22; utilisez les objets pesant 5, 6 et 11. Il est
impossible de créer un tas qui pèse 24. En général, le temps nécessaire pour résoudre
ce problème semble croître exponentiellement avec le nombre d ’objets dans le nouveau
tas.
L ’idée de base de l ’algorithm e à em pilem ent M erkle --H E LLM A N est de coder le mes
sage com m e une solution d ’une suite de problèm es d ’em pilem ent. U n b lo c de texte en
clair de longueur égale au nom bre d ’o bjets dans le tas sélectionnerait des objets (les
bits du texte en cla ir correspondraient aux valeurs des 6, : un 1 signifierait que l ’objet
est présent et u n 0 signifierait que l ’o bjet est absent) et le texte chiffré serait la somme
résultante. L a figure 19.1 illustre u n texte en cla ir chiffré avec un exemple de problèm e
d ’empilement.
Texte en clair: 1 1 1 0 0 1 0 10 1 1 0 0 0 0 0 0 0 0 11 0 0 0
Tas: 1 5 6 11 14 20 1 5 6 11 14 20 1 5 6 11 14 20 1 5 6 11 14 20
Le truc ici est qu’il y a en fait deux problèmes d’empilement, l’un soluble en temps
linéaire, l’autre soluble en temps exponentiel seulement. L’empilement facile peut être
transformé pour créer un empilement difficile. La clef publique est l’empilement difficile,
qui peut être facilement utilisée pour chiffrer des messages mais qui ne peut pas être
utilisée pour déchiffrer des messages. La clef privée est l’empilement facile qui donne
un moyen simple de déchiffrer les messages. Les gens qui ne connaissent pas la clef
privée sont obligés d’essayer de résoudre le problème d ’empilement difficile.
Empilement super-croissant
Qu’est-ce qu’un problème d ’empilement facile? Si la liste des poids est une suite
super-croissante, alors le problème d ’empilement correspondant est facile à résoudre.
Une suite super-croissante est une suite dans laquelle tout terme est plus grand que la
somme de tous les termes qui précèdent. Par exemple, {1,3,6,13,27,52} est une suite
super-croissante tandis que {1,3,4,9,15,25} ne l’est pas.
La solution d ’un empilement super-croissant est facile à trouver. Prenez le poids
total et comparez-le avec le plus grand nombre de la suite. Si le poids total est inférieur
à ce nombre, alors il n’est, pas dans le tas. Si le poids total est supérieur ou égal au
nombre, alors il est dans le tas. Réduisez le poids du tas à créer de ce nombre et passez
au plus grand-nombre suivant de la suite. Répétez cela jusqu’à ce que ce soit terminé.
Si le poids total a été ramené à 0, alors il y a une solution. Si le poids total n’a pas été
annulé, il n’y a alors pas de solution.
488 Chapitre 19 Algorithmes à clef publique
Par exemple, considérez un tas de poids total de 70 à créer et une suite de poids
{2,3,6,27,52}. Le poids le plus élevé est 52, ce qui est inférieur à 70, donc 52 est dans
le nouveau tas. Retirer 52 à 70 laisse 18. Le poids suivant est 27 qui est plus grand
que 18 et donc 27 n ’est pas dans le nouveau tas. Le poids suivant 13 est inférieur à
18, donc 13 est dans le nouveau tas. Retirer 13 à 18 donne 5. Le poids suivant est 6.
qui est plus grand que 5, donc 6 n’est pas dans le nouveau tas. Continuer ainsi montre
que 2 et 3 se trouvent aussi dans le nouveau tas et le poids est ramené à 0, ce qui
indique qu’une solution a été trouvée. Si cela avait été un bloc chiffré par empilement
M e r k l e H e l l m a n , alors le texte en clair correspondant au texte chiffré de valeur 70
aurait été 110101.
Avec des suites qui ne sont pas super-croissantes, on ne connaît pas d ’algorithme rapide.
Le seul moyen de déterminer quels sont les objets dans le nouveau tas est de tester
méthodiquement toutes les solutions possibles jusqu’à ce que l’on tombe sur la bonne.
Les algorithmes les plus rapides, prenant en compte les heuristiques nécessaires, sont
exponentiels en fonction du nombre de poids possibles dans le tas. Ajoutez un poids
à la suite des poids et il faut deux fois plus de temps pour trouver la solution. C’est
nettement plus difficile qu’avec une suite super-croissante où, si vous ajoutez un poids
à la suite, cela ne fait qu’une opération de plus.
L ’algorithme M e r k l e H e l l m a n est basé sur cette propriété. La clef privée est une
suite de poids super-croissante pour un problème d ’empilement. La clef publique est une
suite de poids pour un problème d’empilement normal avec la même solution. M e r k l e
et H e l l m a n ont développé une technique pour convertir un problème d’empilement
super-croissant en un problème d ’empilement normal. Ils ont fait cela en utilisant
l’arithmétique modulaire.
Chiffrement
Pour chiffrer un message binaire, coupez d’abord le message en morceaux de longueur
égale au nombre d ’objets dans la suite pour empilement. Ensuite, en prenant la conven
tion qu’un 1 indique que l’objet figure dans le tas et qu’un 0 indique que l’objet est
absent, calculez le poids total des tas.
Par exemple, si le message est 011000110101101110, le chiffrement en utilisant la suite
ci-dessus se fait de la façon suivante :
174,280,333
Déchiffrement
Un destinataire légitime de ce message connaît la suite super-croissante originelle, ainsi
que les valeurs n et m utilisées pour la transformer en une suite normale. Pour déchiffrer
le message, le destinataire doit d’abord calculer n ~x tel que n x n-1 = 1 (mod m) et
ensuite multiplier chaque valeur du texte chiffré par n ' 1 mod m pour retrouver les
valeurs du texte en clair.
Pour notre exemple, la suite super-croissante est {2,3,6,13,27,52}, m vaut 105 et n vaut
31. Le message chiffré est 174,280,333. Dans ce cas, n ~ x vaut 61 et les valeurs chiffrées
doivent donc être multipliées par 61 mod 105.
Réalisations pratiques
Avec une suite pour empilement de six éléments, il n’est pas difficile de résoudre le
problème même si la suite n’est pas super-croissante. Les vrais empilements contiennent
au moins 250 éléments. La valeur de chaque terme de la suite super-croissante est longue
de 200 à 400 bits. Le module est choisi pour avoir une longueur comprise entre 100 et
200 bits. Les réalisations concrètes de l’algorithme utilisent un générateur de séquences
aléatoires pour produire ces valeurs.
Il serait vain d ’essayer de résoudre des empilements tels que ceux-là. Si un ordina
teur peut essayer un million de possibilités par seconde, essayer tous les empilements
possibles prendrait plus de 1046 années. Même un million de machines travaillant en
parallèle ne résoudraient pas le problème avant que le soleil ne se transforme en nova.
490 Chapitre 19 Algorithmes à clef publique
Brevets
L’algorithme M e r k l e H e l l m a n originel est breveté aux Etats-Unis [723] et dans le
monde entier (voir le tableau 19.1). P K P octroie des licences d ’exploitation de ce brevet
ainsi que d ’autres brevets de cryptographie à clef publique (voir § 25.5). Toute personne
intéressée par l’obtention d’une telle licence doit contacter: Robert B. Fougner,
D ir e cto r o f L ice n sin g , P u b lic Key P artn ers, 310 N Mary Avenue,
Sunnyvale, CA 94086, T e l: +1 (408) 735-5893. Le brevet américain expire le 19
août 1997.
19.3 RSA 491
19.3 RSA
Peu après l’algorithme à empilement de M e r k l e , le premier algorithme à clef publique
grandeur nature apparut. Il fonctionne pour le chiffrement aussi bien que pour les
signatures numériques: R SA [1339, 1340]. De tous les algorithmes à clef publique
proposés tout au long de ces années, c ’est de loin le plus facile à comprendre et à
réaliser3. C ’est le plus populaire. Baptisé d ’après le nom de ses inventeurs, Ron R i v e s t ,
Adi S h a m i r et Léonard A d l e m a n , il a résisté depuis à des années de cryptanalyse
intensive. Bien que la cryptanalyse n’ait jamais prouvé la sécurité ou la non-sécurité
de R SA , cela inspire un certain niveau de confiance dans l’algorithme.
Le niveau de sécurité du R S A dépend de la difficulté de factoriser des grands nombres.
Les clefs publique et privée sont des fonctions d’une paire de grands nombres premiers
(100 à 200 chiffres ou plus encore). Retrouver le texte en clair à partir d ’une des clefs et
du texte chiffré est supposé équivalent à la factorisation du produit des deux nombres
premiers.
Pour engendrer les deux clefs, choisissez deux grands nombres premiers, p et q. Calculez
le produit :
n - pq.
Choisissez ensuite une clef de chiffrement aléatoire e telle que e et (p — l ) ( ç — 1) soient
premiers entre eux. Finalement, utilisez l’algorithme d’Euclide pour calculer la clef de
déchiffrement d de telle manière que :
ed = 1 (mod (p — l ) ( ç — 1)).
En d ’autres termes :
d — e~ x mod ((p — l ) ( ç — 1)).
Remarquez que d et n sont aussi premiers entre eux. Les nombres e et n forment la
clef publique, le nombre d est la clef privée. Les deux nombres premiers p et g ne sont
plus nécessaires. Ils peuvent être écartés mais jamais révélés.
3. M artin G a r d n e r publia une première description de l’ algorithm e dans sa colonne « M a th em a tica l
G a m es » du S c ie n tific A m e r ic a n [602].
Chapitre 19 Algorithmes à clef publique
Pour chiffrer un message m, découpez celui-ci en blocs numériques tels que chaque
bloc ait une représentation unique modulo n (avec des données binaires, choisissez la
plus grande puissance de 2 inférieure à n). Ainsi, si p et q sont tous deux des nombres
premiers de 100 chiffres, alors n aura tout juste moins de 200 chiffres et chaque bloc de
message m, doit avoir juste moins de 200 chiffres. Le message chiffré c sera constitué de
manière similaire de blocs ct d ’à peu près la même longueur. La formule de chiffrement
est simplement :
Cî = ml mod n.
Pour déchiffrer un message, prenez chaque bloc ct et calculez :
m t = cf mod n.
la formule ci-dessus permet de retrouver la message. Ceci est résumé par le tableau 19.2.
T ab . 19.2 - Chiffrement R SA
C lef publique :
n produit de deux nombres premiers, p et q (p et q doivent rester secrets)
e premier par rapport à {p — l ) ( ç — 1)
C lef privée :
d = e-1 mod ((p — l ) ( ç — 1))
Chiffrement :
c = me mod n
Déchiffrement :
m = cd mod n
Le message aurait tout aussi bien pu être chiffré avec d et déchiffré avec e ; le choix est
arbitraire. Je n’inclus pas ici la théorie des nombres qui prouve que cela marche; les
textes récents sur la cryptographie couvrent cette théorie en détail.
Un petit exemple contribuera certainement à rendre tout cela plus clair. Si p = 47 et
q — 71 alors :
n = pq = 3337.
(p — l ) ( ç — 1) = 46 = 3220.
Ce nombre a été calculé en utilisant l’algorithme d ’Euclide étendu (voir § 11.3). Publiez
e et n et gardez d secret. Jetez p et q.
Pour chiffrer le message :
m = 688232687966683
19.3 RSA 493
divisons-le d’abord en petits blocs. Des blocs de trois chiffres conviendront dans ce
cas-ci. Le message est divisé en 6 blocs rrii tels que :
mi = 688
m2 = 232
m3 = 687
m4 = 966
m5 = 668
me = 3.
En effectuant la même opération pour tous les blocs, on obtient le message chiffré :
Pour déchiffrer le message, il faut effectuer les mêmes exponentiations mais en utilisant
la clef de déchiffrement 1019. Donc :
RSA en matériel
On a beaucoup écrit sur le sujet des réalisations matérielles du R S A [1325,1480,1462,
1327, 1492, 875, 1231, 94, 1415, 1414, 1355, 1342, 371, 1435, 525, 772]. De bons articles
résumés sont [262, 873]. De nombreuses puces différentes qui réalisent le R SA ont été
construites [1321, 256, 1108, 1328, 875, 74, 739, 596, 1286, 1565, 510, 1232], Une liste
partielle des puces R S A actuellement disponibles, extraite de [157, 262], est donnée
par le tableau 19.3. Elles ne sont pas toutes sur le marché.
Vitesse du RSA
A sa vitesse maximum, le R S A est environ 1000 fois plus lent que le DES. La réalisation
matérielle VLSI la plus rapide du R SA avec un module de 512 bits a un débit de 64
kilo-bits par seconde [262]. Il existe aussi des puces qui effectuent le chiffrement R SA
à 1024 bits. Actuellement, des puces qui approcheraient le million de bits par seconde
avec un module de 512 bits sont prévues, elles devraient être disponibles en 1995.
Certains fabricants ont réalisé le R S A dans les cartes à puce; ces réalisations sont plus
lentes.
En logiciel, le DES est environ 100 fois plus rapide que le R SA . Ces nombres pourraient
changer légèrement, avec les changements de technologie mais le R SA n’approchera
jamais la vitesse des algorithmes à clef secrète. Le tableau 19.4 compare les vitesses de
quelques réalisations en logiciel de R S A [929].
494 Chapitre 19 Algorithmes à clef publique
Cycles d ’
Vitesse de horloge par Bits Nombre
Vitesse transmission chiffrement par de
Société d ’horloge par 512 bits de 512 bits Technologie puce transistors
Alpha Techn. 25 MHz 13 K 0,98 M 2g 1024 180 000
A T& T 15 MHz 19 K 0,4 M l,5 p 298 100000
British Telecom 10 MHz 5,1 K 1M 2,5p 256 —
Business Sim. Ltd. 5 MHz 3,8 K 0,67 M Réseau logique 32 —
T a b . 19.4 -Vitesses de R SA pour différentes longueurs de module avec une clef pu
blique de 8 (sur une station SP A R C II,)
512 bits 768 bits 1024 bits
Chiffrement 0,03 s 0,05 s 0,08 s
Déchiffrement 0,16 s 0,48 s 0,93 s
Signature 0,16 s 0,52 s 0,97 s
Vérification 0,02 s 0,07 s 0,08 s
Optimisation en logiciel
Le chiffrement par R S A est bien plus rapide si vous choisissez bien la valeur de e. Les
choix les plus courants sont 3, 17 et 65537 (216 + 1 )4. X .509 recommande 65537 [309],
PE M recommande 3 [83], et P K C S # 1 (voir § 24.14) recommande 3 ou 65537 [919].
Aucun problème de sécurité n’interdit de prendre l’une de ces trois valeurs pour e (à
condition de combler le message par remplissage avec des valeurs aléatoires— voir le
paragraphe suivant), même si tout un groupe d ’utilisateurs utilise la même valeur.
Les opérations avec la clef privée peuvent s’exécuter plus rapidement grâce au théorème
du reste chinois si vous conservez les valeurs de p et q, ainsi que d ’autres telles que
d mod (p — 1), d mod ( q — 1) et q 1 mod p [1294, 1287]. Ces nombres supplémentaires
se calculent facilement à partir des clefs publique et privée.
Sécurité de RSA
La sécurité de R S A dépend entièrement du problème de la factorisation de grands
nombres. Techniquement, ce n’est pas vrai. Il a été conjecturé que la sécurité de RSA
dépend du problème de la factorisation de grands nombres. Il n’a jamais été prouvé
mathématiquement que vous devez factoriser n pour calculer m à partir de c et e. Il est
concevable qu’un tout autre moyen de cryptanalyser R S A soit découvert. Toutefois,
4. Les représentations binaires de ces nombres ne présentent que deux 1, aussi le calcul de leur
puissances ne requiert que 17 m ultiplications.
19.3 RSA 495
si cette nouvelle voie permettait aux cryptanalystes de retrouver d, cela pourrait aussi
être utilisé comme une nouvelle voie pour la factorisation de grands nombres. Je ne me
tracasserais pas trop à ce propos.
Il est aussi possible d’attaquer R SA en essayant de deviner la valeur de (p — 1)(q — 1).
Cette attaque n’est pas plus facile que la factorisation de n [1618].
Pour les ultra-sceptiques, il y a des variantes de R S A qui ont été prouvées aussi difficiles
que la factorisation (voir § 19.5). Voyez également [37], qui montre que même retrouver
un seul bit d’information à partir d’un texte chiffré par R SA est aussi difficile que de
déchiffrer le message en entier.
Factoriser n est l’attaque la plus évidente. Les adversaires auront la clef publique e et
le module n. Pour trouver la clef de déchiffrement, d, ils doivent factoriser n. Le para
graphe 11.4 décrit l’état de l’art de la technologie de la factorisation. Actuellement, des
nombres de 129 chiffres sont à la pointe de ce qui se fait en technologie de factorisation.
n doit donc être supérieur à cela. Lisez également le paragraphe 7.2 sur la longueur
des clefs publiques.
II est certainement possible pour un cryptanalyste d ’essayer toutes les valeurs possibles
de d jusqu’à tomber sur la bonne. Cette attaque exhaustive est encore moins efficace
que d’essayer de factoriser n.
De temps en temps des gens prétendent avoir trouvé un moyen facile de casser RSA,
mais leurs revendications ne durent pas. Par exemple, William P a y n e proposait en
1993 une méthode basée sur le petit théorème de F e r m â t [1244]. Malheureusement,
cette méthode est aussi plus lente que la factorisation du module.
Il y a une autre inquiétude. La plupart des algorithmes usuels de calcul de nombres pre
miers p et q sont, probabilistes ; que se passe-t-il si p ou g est composé? Premièrement,
vous pouvez les rendre les chances que cela arrive aussi minces que vous le désirez.
Et si cela arrive, il y a de grandes chances que le chiffrement et le déchiffrement, ne
fonctionnent pas normalement— vous le remarquerez tout de suite. U y a très peu de
nombres sur lesquels les algorithmes probabilistes de test de primalité échouent, on les
appelle les nombres de Carmichael. Us sont excessivement rares, mais ils ne sont pas
sûrs [748]. Honnêtement, je ne m ’en inquiéterais pas.
m = cd.
Pour retrouver m, elle choisit d’abord un nombre aléatoire r, tel que r soit, inférieur à
n. Elle obtient la clef publique d ’Alice, e. Ensuite elle calcule :
x = re mod n
y = xc m od n
496 Chapitre 19 Algorithmes à clef publique
t — r 1 mod n.
u = y d mod n.
S cén ario 3 : Estelle veut qu’Alice signe « 1 3 . Elle engendre deux messages m i et «2
tels que :
m 3 s m im 2 (mod n).
Si elle arrive à faire signer m 1 et m 2 par Alice, Estelle peut calculer la signature de
m3 :
md = (md mod n)(md mod n) mod n.
M o ra lité : N’utilisez jamais le R SA pour signer un document quelconque qui vous est
présenté par un inconnu. Le bloc de formatage de la norme ISO 9796 empêche cette
attaque.
ne fonctionne pas. Le défaut le plus évident est que si le même message est chiffré
avec deux clefs différentes (toutes les deux avec le même module), et que ces deux clefs
sont premières entre elles (ce qu’elles sont en général), alors le texte en clair peut être
retrouvé sans aucune des deux clefs de déchiffrement [1463].
Soit A4 le message en clair. Les deux clefs de chiffrement sont ei et 6 2 . Le module
commun est n. Les deux messages chiffrés sont :
Ci — A4 62 mod n.
Le cryptanalyste connaît n, ej, e2, Cj et C2. Voici comment il peut retrouver A4.
Comme rq et e 2 sont premiers entre eux, l’algorithme d’Euclide permet de trouver r
et s tels que :
r x ei + s x e 2 = 1 .
En faisant l’hypothèse que r est négatif (soit r soit s doit l’être), alors l’algorithme
d’Euclide peut être utilisé à nouveau pour calculer C ÿ1. Donc :
(C f1)~r x C2 = A4 mod n.
Il existe deux autres attaques, plus subtiles, contre un tel système. L ’une utilise une
méthode probabiliste de factorisation de n. L’autre utilise un algorithme déterministe
pour calculer la clef privée de quelqu’un sans factoriser le module. Les deux attaques
sont décrites en détail dans [452].
Moralité : Ne partagez jamais n parmi un groupe d’utilisateurs.
Leçons apprises
M o o r e énumère plusieurs restrictions de l’utilisation du R S A basées sur ces attaques
réussies [1 1 2 0 , 1 1 2 1 ]:
- Un module commun ne peut pas être utilisé dans un protocole qui utilise le RSA
dans un réseau de communication6.
Les messages doivent être comblés par remplissage avec des valeurs aléatoires
pour empêcher les attaques par petit exposant de chiffrement.
Rappelez-vous qu’il n’est pas suffisant d ’avoir un algorithme cryptographique sûr. Tou
le cryptosystème doit être sûr et le protocole cryptographique aussi. S’il y a la moindri
faille dans une de ces trois zones, le système entier n’est pas sûr.
Voilà comment Bernard peut prétendre qu’Alice lui a envoyé A4' et non A4. Comm
Bernard connaît la factorisation de % (c’est son module), il peut calculer les loga
rithmes discrets modulo n s- H lui suffit alors de trouver x tel que
,x = A4 mod ng.
A41
Il publie alors x e s comme étant sa nouvelle clef publique en gardant tib comme module
Il peut ainsi prétendre que Alice lui a envoyé le message A4' chiffré avec ce nouve
exposant.
Cette attaque est particulièrement pénible dans certaines circonstances. Une fonctio]
de hachage ne résoud pas le problème. Cependant, imposer à chaque utilisateur ui
exposant de chiffrement fixe le résoud.
Standards
RSA est un standard de facto pratiquement dans le monde entier. L ’Organisation
internationale de normalisation a pratiquement créé un standard R S A de signatures
numériques; le R S A figure en annexe de l’IS O /IE C 9796 [767]. La communauté
bancaire française a standardisé le R SA [514] ainsi que les australiens [1198]. Les Etats-
Unis n’ont actuellement pas de standard de cryptographie à clef publique à cause des
pressions de la N SA et de problèmes de brevets. De nombreuses sociétés américaines
utilisent PK C S (voir § 24.14) qui est un produit de R S A D a r a S e c u r i t y , In c . Une
ébauche de standard bancaire ANSI s’appuie sur RSA.
Brevets
L’algorithme R SA est breveté aux États-Unis [1341]. Il n’est breveté dans aucun autre
pays. P K P offre des licences d ’exploitation de ce brevet ainsi que pour d’autres bre
vets de cryptographie à clef publique (voir § 25.5). Le brevet américain expire le 20
septembre 2 0 0 0 .
19.4 Pohlig—Hellman
Le schéma de chiffrement P o h l i g - H e l l m a n [1263] est similaire au R SA . Ce n’est
pas un algorithme à clef secrète puisque des clefs différentes sont utilisées pour le
chiffrement et le déchiffrement. Ce n’est pas un schéma à clef publique car les clefs
se déduisent facilement l’une de l’autre, les clefs de chiffrement et de déchiffrement
doivent être toutes deux gardées secrètes.
Comme pour le R SA ,
C = A4e mod n
M . = C d mod n,
tel que :
ed = 1 (mod « un nombre compliqué »).
e = (logM C) mod n.
Brevets
^'algorithme P o h l i g H e l l m a n est breveté aux États-Unis [724] et au Canada. P K P
ictroie des licences d’exploitation de ce brevet, ainsi que d ’autres brevets de crypto
graphie à clef publique (voir § 25.5).
500 Chapitre 19 Algorithmes à clef publique
19.5 Rabin
La sécurité du schéma de R a b in [1294, 1603] dépend de la difficulté de calculer des
racines carrées modulo un nombre composite. Ce problème est équivalent à la factori
sation.
Tout d’abord, choisissez deux nombres premiers, p et q, tout deux congrus à 3 modulo 4.
Ces nombres premiers forment la clef privée ; n = pq est la clef publique.
Pour chiffrer un message, A4 (A4 doit être inférieur à n), calculez simplement
Déchiffrer un message est aussi facile, mais un peu plus embêtant. Comme les desti
nataires connaissent p et q. ils peuvent résoudre les deux congruences en utilisant le
théorème du reste chinois. Calculez :
Toi = c ( p + D / 4 m o d p
m 2 — (p ~ C ^ +l)>A) mod p
m 3 = c (9 + D /4 m o d g
7714 — (ç — C(9+1)/4) mod q.
Prenez alors des entiers a et b tels que a = q i q 1 mod p) et b = p(p~* mod q).Les
quatres solutions possibles sont les suivantes :
L’un de ces 4 résultats, A4i, A42, A43 ou A44, est égal à A4. Si le message estdu
texte en anglais, il serait facile de choisir le bon A4*. D ’autre part, si le message est
une chaîne aléatoire de bits (pour la génération de clefs, par exemple) ou une signature
numérique, il n’y a aucun moyen de savoir quel A4* est correct. Un moyen de résoudre
ce problème est d ’ajouter une entête connue au début du message.
Williams
W illia m s a redéfini les schémas de R a b in pour éliminer leurs limitations [1603]. Dans
son schéma, p et q sont sélectionnés tels que :
p= 3 (m od 8)
q= 7 (mod 8)
et
N = pq.
Il y a également un petit entier S , tel que J(S,N) = —1 dans lequel « J » dénote le
symbole de Jacobi (voir § 11.3). Les valeurs N et S sont publiques. La clef secrète est
k telle que :
k = \ x (^ x (p - i ) x (q - i ) + i)-
19.6 E lG a m a l 501
Pour chiffrer un message A l, calculez cj tel que J (A l,N ) — (—l ) Cl. Ensuite, calculez
M ' = ( S Cl x A l) mod N . Comme pour le schéma de R a b i n , C = A l '2 mod N . Et
C2 = A 1' mod 2. Le message chiffré final est le triplet :
(C,C!,C2).
A l = (S ~Cl x ( - 1 ) C1 x A i ” ) mod N.
19.6 ElGamal
Les schémas E l G a m a l [520, 521] peuvent être utilisés à la fois pour les signatures
numériques et pour le chiffrement. Il tire sa sécurité de la difficulté de calculer des
logarithmes discrets.
Pour engendrer une paire de clefs, choisissez d ’abord un nombre premier p et deux
nombres aléatoires g et x, tels que g et x soient tous deux inférieurs à p. Ensuite
calculez :
y — gx mod p.
La clef publique est faite de y, g et p. Les valeurs de g et p peuvent être toutes deux
partagées par un groupe d ’utilisateurs. La clef privée est x.
Signatures ElGamal
Pour signer un message A4, choisissez d ’abord un nombre aléatoire k, tel que k et p — 1
soient premiers entre eux. Ensuite calculez :
a = gk mod p
502 Chapitre 19 Algorithmes à clef publique
et utilisez l’algorithme d ’Euclide étendu pour trouver la valeur de b qui satisfait l’équa
tion suivante :
AA = (xa -f kb) mod (p — 1).
La signature est la paire : a et b. La valeur aléatoire k doit être tenue secrète.
Pour vérifier une signature, il faut confirmer que :
yaab mod p = gM mod p.
C l e f p u b liq u e :
p premier (peut être partagé par un groupe d ’utilisateurs)
g < p (peut être partagé par un groupe d’utilisateurs)
y — gx mod p
c l e f p r iv é e :
x < p
S ig n a tu r e :
k choisi aléatoirement et premier avec p — 1
a (signature) = gk mod p
b (signature) tel que AA = (xa + kb) mod (p - 1)
V é r if ic a t i o n :
La signature est valide si y aab mod p = gM mod p.
y — gx mod p = 28 mod 11 = 3.
Une variante de E l G a m a t , pour les signatures est décrite dans [1382]. Thomas B e t h
a inventé une variante du schéma E l G a m a l adaptée aux preuves d ’identité [153]. Il
existe des variantes pour la validation de mots de passe [317], et pour l’échange de clefs
[773]. Et il en existe bien d ’autres (voir § 20.4).
Chiffrement ElGamal
Une modification du schéma E l G a m a l permet le chiffrement. Pour chiffrer un message
A4, choisissez d ’abord un nombre aléatoire k tel que k et p — 1 soient premiers entre
eux. Ensuite calculez :
a = gk mod p
b = y kM. mod p.
La paire a et b forme le texte chiffré. Remarquez que la taille du texte chiffré est le
double de celle du texte en clair.
Pour déchiffrer a et 6, calculez :
A4 = b /a x mod p.
Puisque ax = gkx (mod p) et que b/ax = ykM / a x = gxkM / g xk = A4 (mod p), tout
est en ordre(voir le tableau 19.6). C ’est vraiment la même chose que dans l’échange
de clefs deD if f ie - H e l l m a n (voir § 22.1), ceci près que y fait partie de la clef, et que
le chiffrement est multiplié par y k.
C l e f p u b liq u e :
p premier (peut être partagé par un groupe d’utilisateurs)
g < p (peut être partagé par un groupe d’utilisateurs)
y — gx mod p
C l e f p r iv é e :
x < p
C h iff r e m e n t :
k choisi aléatoirement et premier avec p — 1
a (texte chiffré) = gk mod p
b (texte chiffré) = y kA4 mod p
D é c h iff r e m e n t :
A4 (texte en clair) = b/ax mod p
Vitesse
Le tableau 19.7 donne des exemples de vitesses de réalisations logicielles de E l G am al
[929].
504 Chapitre 19 Algorithmes à clef publique
Brevets
E l G a m a l n’est pas breveté. Mais, avant de démarrer une réalisation de cet algorithme,
tenez compte du fait que P K P considère que cet algorithme est couvert par le brevet
du système DlFFiE-HELLMAN [720]. Cependant, ce brevet expire le 29 avril 1997, ce
qui fera de E l G a m a l le premier algorithme cryptographique à clef publique adapté
au chiffrement et aux signatures numériques qui ne soit pas couvert par un brevet aux
Etats-Unis. Je suis impatient de voir cela.
19.7 McEliece
En 1978, Robert M c E l ie c e a développé un cryptosystème à clef publique basé sur la
théorie des codes algébriques [1049]. L’algorithme fait usage de l’existence d’une classe
de codes correcteurs d’erreurs, connus sous le nom de codes de G o p p a . Son idée est
de construire un code de G o p p a et de le déguiser en code linéaire général. Il existe un
algorithme rapide pour décoder un code de G o p p a , mais décoder des codes linéaires
généraux est un problème N P - c o m p l e t . Une bonne description de cet algorithme peut
être trouvée dans [1243] ; consultez aussi [1533]. Ce qui suit est un bref résumé.
Soit dff(x,y) la distance de H a m m i n g entre x et y. Les nombres n, k et t sont des
paramètres du système.
La clef privée a trois parties : G' une matrice génératrice k x n pour un code de G o p p a
qui peut corriger t erreurs, P une matrice de permutation n x n, S une matrice non
singulière k x k.
La clef publique est une matrice G, k x n telle que: G = SG ’P.
Les messages en clair sont des chaînes de k bits sous la forme de vecteurs àk éléments
de Z /2 .
Pour chiffrer un message, choisissez un vecteur aléatoire à n éléments deZ j 2, z avec
une distance de H a m m i n g inférieure ou égale à t.
c = mG + z
Pour déchiffrer le texte chiffré, calculez d ’abord c' = cP 1. Ensuite, en utilisant l’algo
rithme de décodage des codes de G o p p a , trouvez m 't e l que d //( m , G ,c, ) soit inférieure
ou égale à t. Finalem ent, calculez m = m 'S _1.
Dans son article originel, M c E l ie c e suggère d ’utiliser n = 1024, t = 50 et k = 524.
C ’est le minimum requis pour la sécurité.
Bien que cet algorithme fût l’un des premiers algorithmes à clef publique et qu’il n’y
ait pas de résultats cryptanalytiques contre cet algorithme, il n’obtint jamais une large
19.8 Cryptosystèmes à courtes elliptiques 505
avec des clefs plus petites. D e nombreux algorithmes à clef publique, tels que DlFFiE-
H e l l m a n , E l G a m a l et S c h n o r r , peuvent être réalisés à l’aide de courbes elliptiques
sur des corps finis.
Les mathématiques de ces systèmes sont complexes et dépassent le cadre de ce livre.
Ceux qui sont intéressés par le sujet sont invités à lire les deux références men
tionnées ci-dessus et l’excellent livre de Alfred M e n e z e s [1068]. Deux analogues
de R SA fonctionnent avec les courbes elliptiques [890, 457]. D ’autres articles sont
[27, 129, 1069, 871, 159, 872, 892, 30, 895, 357, 1070, 29, 915, 916, 913]. Les cryptosys
tèmes à courbes elliptiques à clefs de petite taille sont examinés dans [702]. Le « Fa s t
E l l ip t ic E n c r y p t i o n » (F E E ) de N e x t C o m p u t e r , I n c . utilise des courbes ellip
tiques [392]. Le FEE présente l’avantage de pouvoir utiliser n’importe quelle chaîne
de caractères facile à retenir comme clef privée. Il y a aussi des cryptosystèmes à clef
publique qui utilisent des courbes hyperelliptiques [870, 869, 1447, 1222].
19.9 LUC
Quelques cryptographes ont développé des généralisations de R SA qui utilisent diffé
rents polynômes à la place de l’exponentiation. Une variante appelée K r a v i t z - R e e d ,
utilisant des polynômes binaires irréductibles [897], n’est pas sûre [454, 591]. Winfried
M ü l l e r and Wilfried N ô b a u e r utilisent les polynômes de D i c k s o n [1133, 1134, 976].
Rudolf L i d l et N ô b a u e r ont inspecté sa sécurité [1178, 1179]. (La génération de
nombres premiers avec les fonction de L u c a s est commentée dans [980, 978, 979, 600].)
Malgré tous ces travaux antérieurs, un groupe de chercheurs de la Nouvelle-Zélande
ont tenté en 1993 de breveter ce schéma, lui donnant le nom de LUC [1493, 523, 1494].
Le ne nombre de L u c a s Vn(AA,\) est, défini par:
Vn( M , 1 ) = - Un _ 2 (A 4 ,l)
Tout le reste de la théorie de nombres de L u c a s est ignorée ici. Une bonne approche
mathématique des suites de L u c a s se trouve dans [1318, 1319]. Une description parti
culièrement soignée des mathématiques de LU C est donnée dans [1501, 709].
Dans tous les cas, pour générer une paire clef publique/clef privée, commencez par
choisir deux grands nombres premiers p et q. Calculez n = pq. La clef de chiffrement e
est un nombre aléatoire premier avec p — 1, q — 1 , p + 1 et q + 1.
Il y a quatre clefs de déchiffrement possibles (ppcm désigne le plus petit commun
multiple) :
C = Ve(JA,\) (mod n)
19.10 Automates finis 507
et pour déchiffrer :
M = V d(M ,l) (mod n)
Au mieux, LU C est aussi sûr que R SA . Et un résultat récent, non encore publié,
montre comment casser LU C au moins dans certaines réalisations. Je ne lui fait pas
confiance.
Algorithmes de signature
numérique à clef publique
Et:
Avant que cela ne devienne trop confus, laissez-moi revoir la nomenclature : D SA est
l’algorithme, DSS est le standard. Le standard utilise l’algorithme. L’algorithme fait
partie du standard.
Réactions à l’annonce
L’annonce du N IST a déclenché un maelstrôm de critiques et d’accusations. Mal
heureusement, toutes plus politiques qu’académiques. R S A D a t a S e c u r i t y , In c .,
pourvoyeur de l’algorithme R SA , conduisit les critiques contre le DSS, exigeant que le
R S A soit utilisé dans le standard comme algorithme, et pas un autre. R SA D SI gagne
beaucoup d ’argent en vendant des licences d’exploitation de l’algorithme R SA , et un
standard de signature numérique exempt de droits affecterait directement ses revenus
de base1.
Avant que l’algorithme ne soit annoncé, R SA D SI fit campagne contre un « module
commun », qui aurait donné la possibilité au gouvernement de falsifier des signatures.
Quand l’algorithme fut annoncé sans ce « module commun », R SA D S I l’attaqua sur
d’autres bases [161], à la fois dans des lettres adressées au N IST et dans la presse2.
De nombreuses grandes sociétés de logiciel qui avaient déjà acquis une licence pour
l’algorithme R S A s’opposèrent au DSS. En 1982, le gouvernement américain sollicita
des algorithmes à clef publique pour un standard [539]. Après cela, il n ’y eut plus le
moindre signe de vie du N IST durant neuf ans. Des sociétés telles qu’IBM , A p p l e ,
N o v e l l , L o t u s , N o r t h e r n T e l e c o m , M i c r o s o f t , D EC et S u n avaient déjà investi
des montants importants dans la réalisation de l’algorithme RSA . Ils ne voulaient pas
perdre cet investissement.
En tout, le N IST avait reçu 109 commentaires à la fin de la première période d’éva
luation, le 28 février 1992.
Parcourons une à une les critiques contre le D SA :
2. Le D SA a été développé par la N SA, et il peut y avoir une brèche secrète dans
l’algorithme.
La plupart des premiers commentaires relevaient de la paranoïa: « Le refus du
N IST de fournir l’information sans justification apparente n’inspire pas confiance
dans le DSS, mais renforce l’inquiétude quant à l’existence d’un dessein caché
telle la mise en place d’un cryptosystème à clef publique national qui puisse
être cassé par le N IST et/ou la NSA. » [161]. Il y eut une objection sérieuse
concernant la sécurité du DSS soulevée par Arjen L e n s t r a et Stuart H a b e r
des laboratoires « B e l l c o r e ». Elle sera présentée plus avant dans le texte.
Description de l’algorithme
Le DSA est une variante des algorithmes de signature S c h n o r r et E l G a m a l qui est
entièrement décrite dans [1174]. L’algorithme utilise les paramètres suivants:
•p — un nombre premier de L bits de long, où L est compris entre 512 et
1024 et est un multiple de 64.4
q = un facteur premier de p — 1, long de 160 bits.
g = /j(p-i)/<7 mod p, où h est n’importe quel nombre inférieur à p — 1 tel
que h^p~ l^'q mod p soit plus grand que 1.
x = un nombre inférieur à q.
y = gx mod p.
De plus, l’algorithme utilise une fonction de hachage à sens unique: H (x). Pour le
DSS, c ’est l’algorithme de hachage sûr (« Secure Hash Algorithm ») décrit par le
paragraphe 18.7.
Les trois premiers paramètres p, q et g sont publics et peuvent êtrecommuns à un
réseau d’utilisateurs. La clef privée est x et la clef publique est y.
Pour signer un message M. :
1° Alice engendre un nombre aléatoire k inférieur à q.
2° Alice engendre
r = ( gk mod p) mod q
s = ( k~ 1 ( H ( M ) + xr)) mod q.
w = s-1 mod q
u\ = (H (M ) x w ) mod q
u2 = rw mod q
v = ((g,“ 1 x yU2) mod p) mod q.
4. Dans le standard original, la longueur de p était fixée à 512 bits [1176]. C e fut la source de
nombreuses critiques et le N IS T du changer [1174],
514 Chapitre 20 Algorithmes de signature numérique à clef publique
Les preuves des relations mathématiques sont fournies dans [1174]. Voyez le ta
bleau 20.1 pour un résumé.
C lef publique :
p nombre premier de 512 à 1024 bits
q facteur premier de p — 1 de 160 bits
g= mod p, où h est inférieur à p — 1 et (hSp O/ç mod p) > 1
(p, q et g peuvent chacun être partagés par un groupe d ’utilisateurs)
y = gx mod p
C lef privée :
x < q (un nombre de 160 bits)
Signature :
k choisi aléatoirement et inférieur à q
r (signature) = ( gk mod p) mod q
s (signature) = (fc- 1 (i/(m ) + xr)) mod q
Vérification :
w = s ~ l mod q
Ui = ( H (m ) x w) mod q
u2 = rw mod q
v = (( gUl x y U2) mod p) mod q
Si v = r, alors la signature est vérifiée.
Vitesse et précalculs
Le tableau 20.2 donne quelques vitesses de logiciels réalisant le DSA.
Les réalisations concrètes du D SA peuvent être accélérées grâce aux précalculs. Notez
que la valeur de r ne dépend pas du message. Vous pouvez créer une chaîne de valeurs
aléatoires k et précalculer la valeur r pour chacune d’entre elles. Vous pouvez aussi
précalculer A;'1 pour chacune de ces valeurs k. Ensuite, quand un message arrive, vous
pouvez calculer s pour des r et fc-1 donnés.
Ce précalcul accélère considérablement le D SA. Le tableau 20.3 donne une comparaison
des temps de calcul pour le D S A et le R S A pour une réalisation en carte à puce [I486].
D SA RSA D SA
avec p, q
et g communs
Calculs généraux hors-carte (P) sans objet hors-carte (P)
Génération de clef 14 s hors-carte (S) 4s
Précalcul 14 s sans objet 4s
Signature 0,03 s 15 s 0,03 s
Vérification 16 s 1,5 s 10 s
1-5 s hors-carte (P) 1-3 s hors-carte (P)
Les calculs hors-carte furent effectués sur un ordinateur personnel avec un processeur
80386 cadencé à 33 MHz. « (P) » indique les paramètres publics hors-carte et « (S) »
indique les paramètres secrets hors-carte. Les deux algorithmes ont été testés avec un
module de 512 bits.
à casser que les autres [961]. Si quelqu’un utilisait l’un de ses modules « faibles »,
ses signatures pourraient être facilement falsifiées. Ce n’est pas un problème pour deux
raisons : primo, les modules pour lesquels cette propriété est vraie sont faciles à détecter.
Secundo, ces modules sont si rares que les chances d’en utiliser lors du choix aléatoire
d’un module sont négligeables — plus petites en fait que les chances d’engendrer un
nombre composé par une méthode probabiliste de génération de nombres premiers.
Dans [1174], le N IST recommande la méthode suivante de génération des deux nombres
premiers p et q tels que q divise p 1. Le nombre premier p a une longueur de 512 à
1024 bits multiple de 64. Le nombre premier g a 160 bits de long. Soit L — 1 = 160n + b
où L est la longueur de p, n et b sont deux nombres, et b est inférieur à 160.
1° Choisissez une chaîne arbitraire d’au moins 160 bits et appelez-la S. Soit g la
longueur de S en bits.
2° Calculez U = S H A (S ) © S H A ((S + 1) mod 29), où S H A est l’algorithme de
hachage sûr (voir § 18.7).
3° Formez q à partir de U en mettant le bit le plus significatif et le bit le moins
significatif tous deux à 1.
4° Vérifiez si q est un nombre premier.
et
X = W + 2 l ~ 1.
9° Calculez p = X — ((X mod 2q) — 1). Remarquez que p est congru à 1 modulo
2q.
10° Si p < 2 L Ï, alors allez à l’étape 13.
11 ° Vérifiez si p est premier.
12° Si p est premier, allez à l’étape 15.
13 ° Posez C = C + 1 et N = N + n + 1.
14° Si C = 4 096, alors allez à l’étape 1 , sinon allez à l’étape 7.
15° Sauvegardez les valeurs de S et C utilisées pour engendrer p et q.
D SA sign ( p , q , g , k , x , h , r , s ) .
D S A s ig n (p ,p ,g ,k ,0 ,0 ,r ,s ).
D S A s ig n (p ,p ,y ,k ,0 ,0 ,r , s ) .
D S A s ig n (p ,p ,m ,l,u ,0 ,r ,s ).
20.1 Algorithme de signature numérique D S A 517
D S A s ig n ( p ,p ,a ,x ,0 ,0 ,r ,s ) .
D S A s i g n ( p ,p ,l ,e ,b ,0 ,r ,s ) .
D S A s ig n (n ,n ,m ,e ,0 ,0 ,r ,s ).
D S A s ig n (n ,n ,m ,d ,0 ,0 ,r ,s ).
Sécurité du DSA
Avec 512 bits, le D S A n’était pas assez solide pour la sécurité à long terme. Avec 1024
bits, il l’est.
L’Agence nationale de sécurité américaine, dans une première interview à ce sujet, ré
pondit à Joe A b e r n a t h y du Houston Chronicle aux allégations concernant l’existence
d’une brèche secrète dans le DSS [367] :
RSA . Faire croire d ’une certaine façon que cela n’affecterait que le DSS
(un argument répandu dans la presse) est totalement trompeur. C ’est un
problème qui dépend de la réalisation et de comment on sélectionne les
nombres premiers. Nous attirons votre attention sur la récente conférence
EUROCRYPT, pendant laquelle fut organisée une tribune sur le problème
des brèches secrètes dans le DSS. L ’un des chercheurs de B e l l c o r e qui
avait initialement allégué de l’existence d ’une brèche secrète faisait partie de
la tribune et il nous a semblé que les participants à la tribune — y compris
celui de B e l l c o r e — conclurent que la présumée brèche secrète n’était
pas un problème pour le DSS. De plus, le consensus semblait général sur
le fait que le problème de la brèche secrète était insignifiant et qu’il avait
été exagéré par la presse. Toutefois, pour essayer de répondre à l’allégation
concernant la brèche secrète, à la demande du N IST, nous avons conçu
un processus de génération des nombres premiers qui garantira que l’on
puisse éviter le choix des relativement rares nombres premiers faibles qui
auraient entraîné une faiblesse dans l’utilisation du DSS. De plus, le N IST
a l’intention de permettre des tailles de module allant jusqu’à 1024, ce qui
en soi élimine la nécessité d ’utiliser le processus de génération de nombres
premiers pour éviter les nombres premiers faibles. Un point supplémentaire
très important qui passe souvent inaperçu est qu’avec le DSS les nombres
premiers sont publics et donc sujets à l’examen public. Tous les systèmes à
clef publique ne fournissent pas cette possibilité d’examen.
« L’intégrité de tout système de sécurité de l’information dépend de
l’attention apportée à une réalisation correcte. Avec la myriade de vulnéra
bilités possibles compte tenu des différences entre les utilisateurs, la NSA
a toujours insisté sur les centres de confiance centralisés comme moyen de
minimiser les risques dans le système. Bien que nous ayons apporté des mo
difications techniques au DSS pour satisfaire les requêtes du N IST pour
une approche plus décentralisée, nous insistons quand même sur la partie
de la note du « Fédéral Register » pour le DSS qui indique :
« Bien que le but de ce standard soit de spécifier les exigences
générales de sécurité pour engendrer des signatures numériques,
la conformité à ce standard ne garantit pas la sécurité d ’une réa
lisation particulière. Les autorités responsables de chaque agence
ou département doivent veiller à ce que la réalisation globale offre
un niveau de sécurité acceptable Le NIST collaborera avec les
utilisateurs gouvernementaux pour veiller à la bonne qualité des
réalisations. »
Finalement, nous avons lu tous les arguments concernant les insécurités po
tentielles avec le DSS et nous restons sceptiques sur leur validité. Le DSS
a fait l’objet d’une évaluation en profondeur par la NSA, qui a conduit
notre directeur des systèmes de sécurité de l’information à l’adopter pour
signer des données non classées traitées par certains systèmes d ’espionnage,
et même pour signer des données classées dans des systèmes choisis. Nous
pensons que cette approbation parle en faveur de l’absence de toute attaque
crédible contre l’intégrité offerte par le DSS, pour autant qu’il soit correc
tement utilisé et réalisé. En fonction des exigences techniques et de sécurité
20.1 Algorithme de signature numérique D S A 519
Je ne vais pas épiloguer sur l’honnêteté de la N SA. Prenez leurs commentaires comme
bon vous semble.
Attaques contre k
Chaque signature requiert une nouvelle valeur de k, et cette valeur doit être choisie
aléatoirement. Si jamais Estelle récupère une valeur de k que Alice a utilisé, éventuel
lement en exploitant certaines propriétés du générateur de nombres aléatoires qui a
produit k, elle peut retrouver la clef privée x d’Alice. Si jamais Estelle récupère deux
messages signés ou chiffrés avec la même valeur de k, elle peut retrouver x (même sans
connaître cette valeur de k). Et avec x, Estelle peut falsifier la signature d’Alice de
manière indétectable. Dans toute réalisation du D SA, un bon générateur de nombres
aléatoires est essentiel pour la sécurité du cryptosystème [1475].
Brevets
David K r a v i t z , qui a travaillé à la N SA, détient un brevet sur le DSS [898]. D’après
le N IST [541] :
Même ainsi, trois détenteurs de brevets prétendent que le DSA enfreint leur propre
brevet: D i f f i e H e l l m a n (voir § 22.1) [720], M e r k l e - H e l l m a n (voir § 19.2) [723]
et S c h n o r r (voir § 21.3) [1404].
Le brevet de S C H N O R R est le plus névralgique. Les deux autres expirent en 1997 ;
celui de S C H N O R R est valable jusqu’en 2008. L’algorithme de S C H N O R R n’ayant pas
été développé avec l’argent du Gouvernement américain, contrairement aux brevets
de P K P , le Gouvernement américain n’a aucun droit sur le brevet de S C H N O R R , et
celui-ci a breveté son algorithme dans le monde entier. Même si une cour de justice
tranche en faveur du D S A , il n’est pas évident que les autres cours de justice de par le
monde en feront autant. Est-ce qu’une société internationale va adopter un standard
qui pourrait être légal dans un pays mais qui enfreindrait un brevet dans un autre ? Ce
problème mettra du temps à être résolu ; au moment d’écrire ces lignes, il n’est même
pas encore résolu aux Etats-Unis.
En juin 1993, le N IST a proposé d’octroyer une licence d’exploitation exclusive du
brevet du D SA à P u b l i c K e y P a r t n e r s [544]. Cet accord a été démenti suite à un
tollé général et le standard a vu le jour sans qu’il n’y ait d ’accord. Le N IST a déclaré
[540] :
Le standard est officiel, les poursuites judiciaires sont menacées, et personne ne sait
que faire. Le N IST a déclaré qu’il viendrait en aide aux personnes poursuivies pour
infraction de brevet, si elles utilisent le D SA pour remplir un contrat gouvernemental. Il
semble que les autres doivent se débrouiller eux-mêmes. L’AN SI a ébauché un standard
bancaire utilisant le D SA [63]. Le NIST travaille à la standardisation du DSA à
l’intérieur du gouvernement. S h e l l a fait du D S A son standard international. Je ne
connais aucune autre proposition de standard utilisant le DSA.
t = kd mod q
w = t /s mod q
ui = (H(A4) x w ) mod q
u2 = rw mod q
Ui = ( H (A4 ) x s) mod q
u2 = sr mod q
1° Choisissez une chaîne aléatoire S d’au moins 160 bits. Soit g sa longueur en
bits.
2° Calculez U = SH A (S) ® S H A ((S + 1) mod 2S), où S H A est l’algorithme de
hachage sûr (voir § 18.7).
3° Formez q à partir de U en mettant le bit le plus significatif et le bit le moins
significatif tous deux à 1.
4° Vérifiez si q est un nombre premier.
5° Si q n’est pas un nombre premier, retournez à l’étape 1.
6° Mettez q, S, C et SH A (S ) bout à bout pour former p, où C est un mot de 32
zéros.
7° p = p — (p mod q) + 1.
8° p = p + q.
522 Chapitre 20 Algorithmes de signature numérique à clef publique
L’algorithme utilise aussi une fonction de hachage: H (x). Le standard spécifie l’emploi
de G O S T R 34.11-94 (voir § 18.11), une fonction basée sur l’algorithme à clef secrète
G O S T (voir § 14.1) [659].
Les trois premiers paramètres, p, q et a, sont publics et peuvent être partagés par les
utilisateurs d’un réseau. La clef privée est x ; la clef publique est y.
Pour signer un message AA,
r = ( ak mod p) mod q
s - (xr + k x H (A4)) mod q.
v = H (A 4 )q~ 2 mod q
Z\ — sv mod q
z2 = ((q — r) x u) mod q
u = ((aZl x y 22) mod p) mod q.
20-4 Schémas de signature numérique à base de logarithmes discrets 523
La différence entre ce schéma et le DSA est qu’on pose s = (&” 1 x (xr + H (A 4))) mod q
dans le DSA, ce qui conduit à une équation de vérification différente. Il est curieux de
fixer la longueur de q à 256 bits. La plupart des cryptographes occidentaux s’étalent
mis d ’accord sur les alentours de 160 bits. C ’est peut-être une manière de penser russe
qui veut un maximum de sécurité.
Le standard est en utilisation depuis 1995, et n’est pas classé « pour utilisations spé
ciales », quoi que cela puisse vouloir dire.
ak = b + e x mod q
Les coefficients a, b et c sont à prendre parmi une variété de termes. Chaque ligne du
tableau 20.4 correspond à six possibilités (selon les six permutations de a,b,c).
Tab. 20.4 Permutations possibles de a,b,c (s est la signature et on pose r' = r mod q)
±r' ±s M
± r 'M ±5 1
±r'A4 ±sM 1
±r'A4 ir 's 1
±sA4 ± r 's 1
r“ = gbyc mod p
sans tenir compte des ± . Cela fait six schémas de signature différents. En ajoutant
des signes négatifs, on arrive à un total de 20 "schémas. En utilisant les autres valeurs
possibles pour o, b et c, on obtient 120 schémas en tout.
ui - o _16 mod q
U2 = o _1c mod q
r — (gUly u2 mod p) mod q
(r mod q)a = gby c mod p.
Il existe deux possibilités dans cette veine [742, 743], que vous pouvez appliquez à
chacun des 120 schémas, ce qui nous mène à un total de 480 schémas de signature
numérique à base de logarithmes discrets.
Mais attendez— il y a plus. Des généralisations et des variations supplémentaires per
mettent de créer plus de 13000 variantes (elles ne sont pas toutes très efficaces)
[742, 743].
Un des intérêts de R SA pour les signatures numériques est ce qui s’appelle la ré
cupération de message. En vérifiant une signature R SA , vous calculez A4. Vous
comparez alors le message A4 calculé et le message reçu et vérifiez ainsi la validité
de la signature. Avec les schémas précédents, vous ne pouvez pas récupérer A4 quand
vous calculez la signature ; vous avez besoin d ’un candidat A4 que vous utilisez dans
l’équation de vérification. Il se trouve qu’il est possible de construire une variante à
récupération de message pour tous les schémas de signature précédents.
Pour signer, commencez par calculer
r — mgk mod p,
20.5 O n g - S c h n o r r - S h a m ir 525
remplacez ensuite A4 par 1 dans l’équation de signature. Vous pouvez alors construire
l’équation de vérification qui permet de calculer A4 directement.
Vous pouvez faire de même avec les schémas à la manière D SA :
Toutes les variantes sont aussi sûres les unes que les autres, il est donc sensé de choisir
un schéma qui facilite les calculs. C ’est le calcul des inverses qui ralentit le plus ces
schémas. Il se trouve que l’un des schémas permet de calculer à la fois l’équation
de signature et l’équation de vérification sans inverse et de récupérer le message. Il
s’appelle le schéma P-N EW [1189].
r = mg~k mod p
s =r k — r'x mod q
A4 = gsyT r mod p
Certaines variantes permettent de signer deux ou trois blocs de message à la fois [742] ;
d’autres variantes peuvent servir pour les signatures en aveugle [743].
Ceci est un travail de recherche rem arquable. U n m od èle cohérent p erm et d e décrire
tous les différents schém as de signature num érique à base de logarithm es discrets. A
mon avis, cela m et fin aux querelles d e brevets entre SCHNORR [1404] et DSA [898] :
DSA n ’est dérivé ni de SCHNORR, ni d e E l G a m a l . C e sont trois cas particuliers de
cette con stru ction générale, qui n ’est pas brevetée.
20.5 Ong—Schnorr—Shamir
Ce schéma de signature utilise des polynômes modulo n [1229, 1230]. Choisissez un
grand entier n (il n’est pas nécessaire de connaître la factorisation de n). Ensuite
choisissez un nombre entier aléatoire /c, tel que k e t n soient premiers entre eux. Calculez
h tel que :
h — —k ~ 2 mod n = —(A;- 1 )2 mod n.
La version du schéma décrite ici est basée sur des polynômes quadratiques. Quand il
fut proposé dans [1227], une récompense de 100 $ était offerte pour une cryptanalyse
526 Chapitre 20 Algorithmes de signature numérique à clef publique
réussie. Il a été prouvé qu’il n’est pas sûr [1265, 22] mais les auteurs ne se sont pas
découragés. Ils proposèrent une version modifiée basée sur des polynômes cubiques qui
n’est pas sûre non plus [1265]. Les auteurs proposèrent alors une version quartique qui
fut également cassée [527, 1265]. Une variante qui évite ces problèmes est décrite dans
[1143].
20.6 ESIGN
ESIGN est un schéma de signature numérique conçu par N T T J a p o n [1213, 585].
D’après ces auteurs, il est au moins aussi sûr et nettement plus rapide que le R SA et
le D SA, avec des longueurs de clef et de signature similaires.
La clef privée est une paire de grands nombres premiers p et q. La clef publique est n
tel que
n = p2 q.
H (x) est une fonction de hachage qui opère sur un message m de sorte que H (A4) soit
compris entre 0 et A4 II y a aussi un paramètre de sécurité k qui sera décrit plus loin.
Cet algorithme peut être accéléré par précalcul. Ce précalcul peut être effectué à tout
moment et n’a rien à voir avec le message à signer. Après avoir choisi x , Alice peut
scinder l’étape 2 en deux étapes partielles. La première peut être précalculée.
u — x k mod n
v = 1/(k x k~ l) mod p.
2° (b ) Alice calcule :
w — le plus petit entier qui est plus grand que ( H (m) — u)jpq
s = x + (wv mod p)pq.
Sécurité d’ESIGN
Quand cet algorithme fut originellement proposé, k valait 2 [1223]. Il fut alors rapide
ment cassé par Ernie B r i c k e l l et John D e L a ü R E N T I S [265], qui ont ensuite étendu
leur attaque au cas k = 3. Une version modifiée de l’algorithme [1211] fut cassée par
S h a m i r [1212]. La variante proposée par [1212] fut cassée dans [1560]. ESIGN est le
représentant actuel de cette famille d’algorithmes. Une autre attaque nouvelle [974] ne
marche pas contre la variante d’ESIGN.
Les auteurs recommandent actuellement les valeurs suivantes pour k : 8, 16, 32, 64,
128, 256, 512 et 1024. Ils recommandent également que p et q aient au moins 192 bits
chacun, ce qui donne une longueur d ’au moins 576 bits pour n. (Je pense que n devrait
être deux fois plus long.) Avec ces paramètres, les auteurs font l’hypothèse qu’ESlGN
est aussi sûr que R SA ou R a b i n . Leurs analyses montrent des comparaisons de vitesse
avec R S A , E l G a m a l et D SA qui leur sont favorables [584],
Brevets
ESIGN est breveté aux États-Unis [1216], au Canada (brevet n° 255 784), en Angle
terre, en France, en Allemagne et en Italie. Toute personne désireuse d’obtenir une
licence d ’exploitation pour cet algorithme doit contacter: Intellectual Property
Department, NTT, 1-6 Uchisaiwai-cho, 1-chome, Chiyada-ku, 100 Japan.
a. factoriser TV,
b . étant donné les entiers M et C , trouver d tel que M d = C (mod TV),
c. étant donné les entiers e et C, trouver M tel que M e = C (mod TV),
d. étant donné l’entier x, décider s’il existe un entier y tel que x = y 2 (mod TV).
D ’après D iffie [490, 492], le problème du logarithme discret fut suggéré par J. G ill ,
le problème de factorisation par K n u t h et le problème des em pilem ents par D iffie
lui-même.
Cette étroitesse des fondements mathématiques de la cryptographie à clef publique est
dérangeante. Une percée pour le problème de la factorisation ou celui des logarithmes
discrets peut rendre des classes entières d ’algorithmes à clef publique non sûrs. Une telle
percée a déjà eu lieu pour le problème des empilements. D i f f i e remarque [490, 492]
que ce risque est atténué par deux facteurs :
« Les opérations dont la cryptographie à clef publique dépend actuelle
ment — multiplication, exponentiation et factorisation — sont toutes des
phénomènes arithmétiques fondamentaux. Elles ont été l’objet d’analyses
mathématiques intenses pendant des siècles, et l’attention croissante qui a
résulté de leur utilisation dans les cryptosystèmes à clef publique a dans
l’ensemble renforcé plutôt que diminué notre confiance.
« Notre capacité d ’effectuer des opérations arithmétiques sur des grands
nombres a augmenté continûment et nous permet maintenant de réaliser
nos systèmes avec des nombres suffisamment grands pour n’être plus vul
nérables qu’à des percées foudroyantes en factorisation, en logarithmes ou
en extraction de racines. »
20.8 Les autres algorithmes à clef publique 529
Comme nous l’avons vu, les algorithmes à clef publique basés sur ces problèmes ne sont
pas tous sûrs. La force de tout algorithme à clef ne publique dépend pas seulement
la complexité calculatoire du problème sur lequel il est basé ; la difficulté calculatoire
d’un problème n’implique pas forcément un algorithme fort. Adi S h a m i r énumère trois
raisons pour lesquelles il en est ainsi [1422] :
Schémas d’identification
21.1 Feige—Fiat—Shamir
Le schéma d’authentification et de signature numérique d’Amos F i a t et Adi S h a m i r
est décrit dans [568, 569]. Uriel F e i g e , A. F i a t et A. S h a m i r ont transformé l’al
gorithme en un système de preuve d ’identité à divulgation nulle [546, 547]. C ’est le
système de preuve d ’identité à divulgation nulle le mieux connu.
Le 9 juillet 1986, les trois auteurs ont soumis une demande de brevet américain [1433].
À cause des applications militaires potentielles, la demande fut examinée par les mili
taires. L ’Office des brevets américain avait six mois pour répondre par une autorisation
de divulgation. Le 6 janvier 1987, trois jours avant l’expiration du délai, l’Office des
brevets et marques a interdit la divulgation à la demande de l’armée. Us affirmèrent
que « ... la divulgation ou la publication des informations à ce su jet... seraient nuisibles
à la sécurité nationale [américaine] ...» L’ordre fut donné aux auteurs de notifier à tous
les Américains auxquels les résultats de la recherche avaient été divulgués que toute
divulgation non autorisée pouvait entraîner un emprisonnement de deux ans et/ou une
amende de 10000 $. De plus, les auteurs devaient indiquer au commissaire de l’Office
des brevets et marques le nom de tous les ressortissants étrangers à qui l’information
avait été communiquée.
C’était ridicule. Pendant toute la seconde moitié de 1986, les auteurs avaient présenté
leurs travaux à des conférences en Israël, en Europe et aux Etats-Unis. Les auteurs
eux-mêmes n’étaient pas citoyens américains; tout le travail de recherche avait été
effectué au W e i z m a n n I n s t i t u t e en Israël.
Le mot s’était répandu dans la communauté académique et la presse. Dans les deux
jours l’interdiction de divulgation fut annulée; SHAMIR et d ’autres croient que la NSA
a tiré les ficelles de cette annulation bien qu’il n’y ait eu aucun commentaire officiel.
Vous trouverez plus de détails concernant cette aventure dans [947].
1° Patricia choisit un nombre aléatoire r tel que r soit inférieur à n. Elle calcule
ensuite x = r 2 mod n et envoie x à Victor.
Ce protocole est une a ccré d ita tio n simple. Patricia et Victor répètent ce protocole
t fois, jusqu’à ce que Victor soit convaincu que Patricia connaît s. Il s’agit de la tech
nique « couper-et-choisir ». Si Patricia ne connaît pas s, elle peut choisir r de manière
à tromper Victor s’il lui envoie un 0, ou elle peut choisir r de manière à tromper Victor
s’il lui envoie un 1. Mais elle ne peut pas faire les deux. Les chances de tromper Victor
une fois sont de 50 %. Les chances de le tromper t fois sont de 1 contre 2*.
Un autre moyen d ’attaquer le protocole serait pour Victor de se faire passer pour
Patricia. Il peut démarrer le protocole avec un autre vérificateur, Valérie. A l’étape 1,
au lieu de choisir un r aléatoire, il pourrait juste réutiliser un vieil r qu’il a vu Patricia
utiliser. Toutefois, les chances que Valérie choisisse le même b à l’étape 2 que celui
choisi par Victor dans le protocole avec Patricia sont de 1 contre 2. Donc, les chances
de tromper Valérie sont de 50 %. Les chances de la tromper t fois sont de 1 contre 2É.
Pour que cela marche, il est impératif que Patricia ne réutilise pas un r. Si elle le faisait,
et si Victor lui envoyait l’autre valeur de bit à l’étape 2, Victor aurait alors les deux
réponses de Patricia. Il ne lui resterait alors qu’à en collecter t pour se faire passer
pour Patricia.
1. Les ca lcu ls son t plus fa ciles si n est u n en tier d e B lu m , m ais c e n ’est p as nécessaire p o u r la
sécurité.
21.1 F e ig e - F ia t S h a m ir 533
existe. Cette chaîne Vi,V2 ,.-,Vk est la clef publique. Ensuite calculez les plus petits Si
tels que s, = yjv ^ 1 (mod n). Cette chaîne Si,S2, -isfc est la clef privée.
Et le protocole se déroule comme suit :
1° Patricia choisit un nombre aléatoire r inférieur à n. Ensuite, elle calcule x —
r 2 mod n et envoie x à Victor.
2° Victor envoie une chaîne aléatoire binaire de k bits: bi,l>2 ,...,bk à Patricia.
3° Patricia calcule y = r x (s ,1 x sî? x ••• x s*fc) mod n. Elle multiplie les valeurs
des Si entre elles sur la base de la chaîne binaire que Victor lui a envoyée. Si
le premier bit de Victor est 1, alors si fait partie du produit, si le premier bit
de Victor est 0 alors si ne participe pas au produit. Elle envoie y à Victor.
4° Victor vérifie que x = y 2 x (v*1 x v ^2 x ... x v£h) mod n. Il multiplie les valeurs
des Si entre elles sur la base de la chaîne binaire. Si le premier bit est 1, s%
participe au produit ; si le premier bit est 0, s x ne participe pas au produit.
Patricia et Victor répètent ce protocole t fois jusqu’à ce que Victor soit certain que
Patricia connaît Si,S2 ,—,Sk-
Les chances que Patricia puisse rouler Victor sont de 1 contre 2kt, où t est le nombre de
fois qu’ils répètent le protocole. Les auteurs recommandent un rapport de probabilités
de 1 contre 220 et suggèrent d ’utiliser k = 5 et t = 4. Si vous êtes plus paranoïaque,
augmentez ces nombres.
Un exemple
Voyons ce protocole en action sur des petits nombres.
Si n = 35 (les deux nombres premiers sont 5 et 7), les résidus quadratiques possibles
sont :
1 : x 2 = 1 (mod 35) a comme solutions : x = 1,6,29 ou 34.
4 : x 2 = 4 (mod 35) a comme solutions : x = 2,12,23 ou 33.
9 : x 2 = 9 (mod 35) a comme solutions : x = 3,17,18 ou 32.
11: x 2 = 11 (mod 35) a comme solutions: x = 9,16,19 ou 26.
14 : x 2 = 14 (mod 35) a comme solutions : x = 7 ou 28.
15 : x 2 = 15 (mod 35) a comme solutions : x = 15 ou 20.
16 : x 2 = 16 (mod 35) a comme solutions : x = 4,11,24 ou 31.
21 : x 2 = 21 (mod 35) a comme solutions : x = 14 ou 21.
25 : x 2 = 25 (mod 35) a comme solutions : x = 5 ou 30.
29: x 2 = 29 (mod 35) a comme solutions: x = 8,13,22 ou 27.
30 : x 2 = 30 (mod 35) a comme solutions : x = 10 ou 25.
Les inverses modulo 35 et leurs racines carrées sont :
V v~* s = \/v~l
1 1 1
4 9 3
9 4 2
11 16 4
16 11 9
29 29 8
534 Chapitre 21 Schémas d’identification
Remarquez que 14,15,21,25 et 30 n’ont pas d ’inverses modulo 35, parce qu’ils ne sont
pas premiers par rapport à 35. Cela a un sens, puisqu’il doit y avoir (5—1) x'(7—1)/4 = 6
résidus quadratiques modulo 35 (voir § 11.3).
Ainsi, Patricia reçoit la clef publique constituée de k = 4 valeurs : {4,11,16,29}. La clef
privée correspondante est {3,4,9,8}. Voici une ronde du protocole:
Patricia et Victor répètent le protocole, chaque fois avec un nombre r aléatoire différent,
jusqu’à ce que Victor soit satisfait.
Avec des petites valeurs comme celles-ci, il n’y a pas vraiment de sécurité, Mais quand
n a 512 bits ou plus de long, Victor ne peut rien apprendre de la clef secrète de Patricia,
excepté le fait qu’elle la connaît.
Améliorât ions
Il est possible de cacher des informations d ’identification dans le protocole. Faites
l’hypothèse que / est une chaîne binaire représentant l’identification de Patricia: son
nom, son adresse, son numéro de sécurité sociale, sa taille de chapeau, sa limonade
préférée, etc. Utilisez une fonction de hachage à s*3ns unique H {x) pour calculer H (I ,j )
où j est un petit nombre aléatoire joint à I. Trouvez un ensemble de plusieurs j tels
que H (I ,j) soit un résidu quadratique modulo n. Ces j deviennent Vi,V2 ,-,V k- La clef
publique de Patricia est maintenant / et la liste des j . Elle envoie / et la liste des j à
Victor avant l’étape 1 du protocole et Victor engendre Vi,V2 ,---,Vk à partir de H (I,j).
Ainsi, après que Victor ait terminé avec succès le protocole avec Patricia, il est sûr
que quelqu’un qui connaît la factorisation du module a certifié l’association entre I et
Patricia en lui donnant les racines carrées des v1 dérivés de I. (Voyez le paragraphe 5.2
concernant le contexte du protocole.)
Les auteurs, F e i g e , F i a t et S h a m i r incluent également les remarques suivantes concer
nant la réalisation concrète [546, 547] :
1° Alice choisit t nombres aléatoires plus petits que n : r\,r2 ,...,rt et calcule X\,
Elle multiplie les valeurs des Si ensemble en fonction des valeurs aléatoires hl3.
Si bu vaut 1, alors si fait partie du produit; si blt vaut 0, alors s i ne fait pas
partie du produit.
4 ° Alice envoie à Bernard m, toutes les valeurs des bits bij et toutes les valeurs
des yi. Il a déjà la clef publique d’Alice: îq,i;2 ,...,nfc.
Une fois de plus, Bernard effectue les multiplications en fonction des valeurs
des bij. Remarquez que les zt doivent être égaux aux x.t.
6° Bernard vérifie que les premiers k x t bits de H(rn,zi,z 2 ,...,zt) sont les valeurs
b^ qu’Alice lui a envoyées.
st = J v t 1 (mod n).
Dans cette version, tout le monde doit avoir un n différent. Cette modification rend la
vérification de signatures plus aisée. Cela n’affecte pas le temps requis pour engendrer
les signatures ni la sécurité de ces signatures.
Autres améliorations
Il existe également un schéma d ’identification à N participants basé sur l’algorithme
F i a t S h a m i r [268]. Deux autres améliorations du schéma F i a t S h a m i r ont été pro
posées dans [1228]. D ’autres variantes sont décrites dans [1370].
Brevets
F iA T - S h a m i r est breveté [1433]. Toute personne intéressée par une licence d’ex
ploitation de l’algorithme doit contacter: Yeda Research and Development, The
Weizmann Institute of Science, Rehovot 76100, Israël.
21.2 Guillou—Quisquater
F i a t S h a m i r fut le premier système pratique de preuve d ’identité à divulgation nulle.
Il minimisait les calculs requis pour les échanges en augmentant le nombre d ’itérations
du protocole et le nombre d ’accréditations par itération. Pour certaines réalisations,
telles que les cartes à puce, ce n’est pas l’idéal. Les échanges avec le monde extérieur
sont coûteux et la place nécessaire pour stocker chaque accréditation peut rapidement
consommer les ressources restreintes de la carte à puce.
G u i l l o u et Q u i s q u a t e r ont développé un algorithme d’identification à divulgation
nulle plus adapté à de telles situations [671, 1291]. Le nombre d’échanges entre Patricia
et Victor et le nombre d ’accréditations en parallèle pour chaque échange sont tout
deux maintenus à leur strict minimum : il n’y a qu’un échange d ’une accréditation pour
chaque preuve. La quantité de calcul nécessaire pour le schéma G u i l l o u -Q U ISQ U A T E R
est, pour le même niveau de sécurité, supérieure d ’un facteur 3 à celle requise pour le
schéma F i a t - S h a m i r .
Tout comme le F i a t - S h a m i r , cet algorithme d ’identification peut être transformé en
un algorithme de signature numérique.
21.2 G u i l l o u - Q u is q u a t e r 53 7
1° Patricia choisit un nombre entier aléatoire r tel que r soit compris entre 1 et
n — 1. Elle calcule T = rv mod n et envoie celui-ci à Victor.
1° Alice choisit un nombre entier aléatoire r, tel que r soit compris entre 1 et
n — 1. Elle calcule T — rv mod n.
2° Alice calcule d = H ( M ,T ), où M est le message à signer et H (x) est une
fonction de hachage à sens unique. La valeur d produite par la fonction de
hachage à sens unique doit être comprise entre 0 et v — 1 [1291]. Si la valeur
produite par la fonction de hachage n’est pas comprise dans cet intervalle, elle
* doit être réduite modulo v.
2. En fait, ces références peuvent constituer une chaîne plus longue et, dans ce cas, la valeur de
J sera la valeur de l’empreinte de l ’identité. C ette com plexité supplém entaire ne m odifie toutefois en
rien le protocole.
538 Chapitre 21 Schémas d’identification
Multisignatures
Que se passe-t-il si plusieurs personnes veulent signer le même document? Il y a une
solution facile — chacune d’entre elles signe séparément — mais ce schéma de signature
peut faire mieux que cela. Dans l’exemple suivant, Alice et Bernard signent le même
document et Christine vérifie les signatures, mais n’importe quel nombre de personnes
peuvent être impliquées dans le processus. Comme précédemment, Alice et Bernard
ont leurs propres valeurs uniques J et B : Ja et Jb , et B a et B b - Les valeurs n et n
sont communes à tout le monde dans le système.
1° Alice choisit un nombre entier aléatoire va tel que ta soit compris entre 1 et
n — 1. Elle calcule Ta = r\ mod n et envoie Ta à Bernard.
2° Bernard choisit un nombre entier aléatoire r s tel que ru soit compris entre 1
et n — l. Il calcule Tb = r g mod n et envoie Tb à Alice.
3° Alice et Bernard calculent T = T aT b mod n
4° Alice et Bernard calculent d = H{AA,T), où Ad est le message à signer et H(x)
une fonction de hachage à sens unique. La valeur d produite par la fonction de
hachage à sens unique doit être comprise entre 0 et v — 1 [722], Si la valeur
produite par la fonction de hachage n’est pas comprise dans cet intervalle, elle
doit être réduite modulo v.
Ce protocole peut être étendu à n’importe quel nombre de participants. Quand plu
sieurs personnes signent, ils multiplient tous les Tt individuels à l’étape 3 et leurs £)f
individuels à l’étape 7. Pour vérifier une multisignature, il faut multiplier tous les J,
des signataires à l’étape 8. Soit les signatures sont toutes valides, soit il y en a au moins
une fausse.
21.3 Schnorr
Le schéma d ’authentification e t de signature de Claus S c h n o r r [1401, 1403] tire sa
sécurité de la difficulté de calculer des logarithmes discrets. Pour engendrer une paire
21.3 S ch n orr 539
de clefs, choisissez deux nombres premiers p et q tels que q est un facteur premier de
p — 1. Ensuite, choisissez un a qui ne soit pas égal à 1 et tel que aq = 1 (mod p).
Tous ces nombres peuvent être communs à un groupe d’utilisateurs et peuvent être
librement publiés.
Pour engendrer une paire « clef publique — clef privée » particulière, choisissez un
nombre aléatoire inférieur à q. C ’est la clef privée s. Ensuite calculez v = a~s mod p.
C’est la clef pubüque.
Protocole d’authentification
1° Patricia choisit un nombre aléatoire r inférieur à q et calcule x — ar mod p.
C ’est l!éta.pe de prétraitement qui peut être réalisée bien longtemps avant que
Victor ne soit présent. Patricia envoie x à Victor.
2° Victor envoie à Patricia un nombre aléatoire e compris entre 0 et 2* — 1 (je
parlerai de t plus loin).
3° Patricia calcule y = (r + s X e) mod q et envoie y à Victor.
4° Victor vérifie que x — ayve mod p.
e = H(M,x).
e — H(M,z).
Dans son article, Sch n o rr cite les nouveautés suivantes de son algorithme :
Bien sûr les considérations pratiques amènent parfois à abaisser encore le nombre de
bits nécessaires à la sécurité de certains schémas : par exemple un schéma d ’identifica
tion où le tricheur doit effectuer une attaque en ligne en quelques secondes seulement
par rapport à un schéma de signature où le tricheur peut effectuer des années de calcul
avant de montrer sa fausse signature.
Une modification de cet algorithme, décrite dans [269] et réalisée par Emie B r i c k e l l
et Kevin McCuRLEY, améliore sa sécurité.
Brevets
Sch n o r rest breveté aux États-Unis [1404] et dans de nombreux autres pays. En 1993,
P K P a acquis les droits internationaux sur ce brevet (voir § 25.5). Le brevet américain
expire le 19 février 2008.
22.1 Diffie—Hellman
D i f f i e - H e l l m a n est le premier algorithme à clef publique qui fut inventé [494], Sa
sécurité dépend de la difficulté de calculer des logarithmes discrets sur un corps fini par
rapport à la facilité de calcul d ’exponentielles dans le même corps. D i f f i e —H e l l m a n
peut être utilisé pour la distribution de clefs mais il ne peut pas être utilisé pour
chiffrer et déchiffrer des messages. Alice et Bernard peuvent utiliser cet algorithme
pour engendrer une clef secrète.
Les mathématiques sont simples. Au départ, Alice et Bernard se mettent d’accord sur
deux grands entiers, n et g, de telle manière que g soit primitif par rapport à n. Ces
deux entiers n’ont pas à être secrets ; Alice et Bernard peuvent convenir de ces nombres
sur un canal non sûr. Ils peuvent même être communs à un groupe d’utiüsateurs. Peu
importe.
Le protocole se déroule ainsi :
1° Alice choisit un grand nombre entier aléatoire x et envoie à Bernard le résultat
du calcul:
X — gx mod n.
3° Alice calcule:
k - Y œ mod n.
4 ° Bernard calcule :
k' — X v mod n.
Les valeurs k et k' sont toutes deux égales à gxy mod n. Personne ne peut en écoutant
la communication calculer cette valeur; celui qui écoute ne connaît que n, g, X et
Y . À moins qu’il ne puisse calculer le logarithme discret et retrouver x ou y, il ne
peut résoudre le problème. Ainsi k est la clef secrète qu’Alice et Bernard ont calculée
indépendamment.
542 Chapitre 22 Algorithmes d’échange de clefs
La clef secrète, k, est égale à gxyz mod n, et quiconque d’autre écoute la communication
ne peut calculer cette valeur. Le protocole peut être aisément étendu à quatre personnes
et plus ; il suffit d’ajouter les calculs des participants supplémentaires et les rondes de
calcul additionnelles.
Extension de Diffie—Hellman
Cet algorithme marche aussi dans les anneaux commutatifs [1263]. S h m u l e y et Kevin
M cC urley ont étudié une variante de l’algorithme dans laquelle le module est un
nombre composé [1448, 1046]. V.S. M i l l e r et Neal K o b l i t z ont étendu l’algorithme
aux courbes elliptiques [1101, 868]. Taher E l G a m a l a utilisé l’idée de base pour dé
velopper un algorithme de chiffrement et de signature numérique (voir § 19.6).
Cet algorithme marche également dans le corps de Galois Z / 2 k [1448, 1046]. Certaines
réalisations suivent cette approche [884,1633,1634] parce que les calculs sont nettement
plus rapides. Toutefois, les calculs cryptanalytiques sont aussi nettement plus rapides
et il est donc important de choisir un corps assez grand pour assurer la sécurité.
Hugues
Cette variante permet à Alice de générer une clef et de l’envoyer à Bernard [747].
k = gx mod n.
Y = gv mod n.
X — Y x mod n.
4° Bernard calcule:
z ~ j/-1 mod n
k' = X z mod n.
Brevets
L’algorithme d’échange de clefs D i f f i e - H e l l m a n est breveté aux Etats-Unis [720] et
au Canada [721], Un groupe appelé « P u b l i c K e y P a r t n e r s » (P K P ) octroie des
licences d ’exploitation de ce brevet en même temps que d ’autres brevets de cryptogra
phie à clef publique (voir § 25.5). Le brevet américain expire le 29 avril 1997.
Chapitre 22 Algorithmes d’échange de clefs
y ,E k(SB {x,y)).
E k(SA (x,y)).
EA (E B( M ) ) = E b (Ea (M )).
La clef secrète d’Alice est A ; la clef secrète de Bernard est B. Alice veut envoyer un
message, A4, à Bernard. Voici le protocole :
Ci = E a ( M ) .
C2 = E b ( E a ( M ) ) .
Les masques jetables sont commutatifs et offrent la sécurité parfaite mais ils ne peuvent
pas être utilisés pour ce protocole. Avec la technique du masque jetable, les trois
messages seraient :
Cx = M® A
C2 = M e A ® B
C 3 = M 0 B.
Estelle, qui peut enregistrer ces trois messages quand ils transitent entre Alice et
Bernard, peut simplement les combiner par ou exclusif pour retrouver le message :
Ci ® C 2 0 C 3 = ( M 0 A) © ( M 0 A © B ) © ( M © B ) = AA.
C — AAe mod p.
AA = Cd mod p.
D ne semble pas y avoir de moyen pour Estelle de retrouver le message AA sans devoir
calculer le logarithme discret mais, comme tant d’autres choses en cryptographie à clef
publique, cela n’a jamais été prouvé.
Ce protocole offre quelque chose que le chiffrement à clef publique simple n’offre pas. Il
permet à Alice d’amorcer une communication avec Bernard sans connaître aucunes de
ses clefs. Si Alice voulait utiliser un algorithme à clef publique, elle devrait connaître
la clef publique de Bernard. Avec le protocole à trois passes de S H A M I R , elle lui en
voie seulement un message chiffré. La même chose avec un algorithme à clef publique
ressemble à ceci :
1° Alice engendre une clef publique aléatoire, K ' . Elle chiffre celle-ci à l’aide d’un
algorithme à clef secrète et de la clef P : E p(K' ) . Elle envoie à Bernard:
Alice, Ep(K').
E p (EK'(K)).
E k ( R a ).
4° Bernard déchiffre le message pour obtenir Ra- Il engendre une autre chaîne
aléatoire R p, chiffre les deux chaînes avec K et envoie le résultat à Alice :
E k {R a ,R b )-
E r (R b )-
22.5 Échange de clefs chiffré
À l’étape 3, Alice et Bernard connaissent tous deux K ' et K . K est la clef de session
et elle peut être utilisée pour chiffrer tous les autres messages entre Alice et Bernard.
Estelle, qui est entre Alice et Bernard, connaît seulement Ep( K' ) , E p (E k '(K)) et
quelques messages chiffrés avec K. Dans d’autres protocoles, Estelle peut essayer de
deviner P (les gens utilisent de mauvais mots de passe tout le temps et, si Estelle
est maligne, elle peut faire certains paris judicieux) et ensuite essayer ses paris. Dans
ce protocole, Estelle ne peut pas tester ses paris sans casser également l’algorithme
à clef publique. Et si K ' et K sont choisis aléatoirement, cela peut être un problème
insurmontable.
La portion « défi réponse » du protocole, de l’étape 3 à l’étape 6, valide le protocole.
Les étapes 3 à 5 prouvent à Alice que Bernard connaît K ; les étapes 4 à 6 prouvent à
Bernard qu’Alice connaît K . L’échange de datations du protocole K e r b e r o s accomplit
la même chose.
EKE peut être réalisé grâce à plusieurs algorithmes à clef publique : R SA , E l G a m a l ,
D iffie -H e l l m a n . Il y a des problèmes de sécurité dans les réalisations utilisant l’al
gorithme des empilements (mis à part les problèmes inhérents à cet algorithme) : la
distribution normale des messages de texte chiffré vient à l’encontre des bien-faits de
EKE.
Voyez le paragraphe 19.6 pour les restrictions dans le choix des variables d’ELGAMAL.
548 Chapitre 22 Algorithmes d’échange de clefs
Avec D i f f i e - H ellm an , Alice n’a, pas à chiffrer son premier message avec P.
K = grAXrB mod n.
I
3° Alice déchiffre la première moitié du message de Bernard pour obtenir gTB mod
n. Ensuite, elle calcule K et utilise K pour déchiffrer R g . Elle engendre une
autre chaîne aléatoire R a , chiffre les deux chaînes avec K et envoie le résultat
à Bernard:
E k {R a ,R b )-
E k (R a ).
EKE renforcé
B e l l o v i n et M e r r i t t suggèrent une amélioration de la portion « défi - réponse » du
protocole afin d ’éviter une attaque possible si un cryptanalyste est entré en possession
d’une vieille valeur de K .
Voyez le protocole de base EKE. A l’étape 3, Alice engendre un autre nombre aléatoire,
S a et envoie à Bernard :
E k (R a ,Sa )•
E k { R a ,R b ,Rg ) -
22.5 Échange de clefs chiffré 549
Alice et Bernard peuvent maintenant tous deux calculer la vraie clef de session S a ffi S p .
Cette nouvelle clef est utilisée pour tous les futurs messages entre Alice et Bernard ; K
n’est utilisée que comme clef d ’échange de clef.
Voyons maintenant le niveau de protection offert. Si Estelle entre en possession de S,
cela ne lui donne aucune information sur P car P n’est jamais utilisé pour chiffrer quoi
que ce soit qui conduise directement à S. Une attaque cryptanalytique contre K n’est
pas possible ; K est seulement utilisée pour chiffrer des données aléatoires et S n’est
jamais chiffré seul.
EKE augmenté
Le protocole E K E présente un sérieux défaut : les deux parties doivent posséder P. La
plupart des systèmes d’authentification à mot de passe stockent une empreinte du mot
de passe de l’utilisateur et non le mot de passe lui-même (voir § 3.2). Le protocole EKE
augmenté (A -E K E ) utilise une empreinte du mot de passe de l’utilisateur comme clef
de surchiffrement dans la variante D i f f i e - H e l l m a n de EKE. L ’utilisateur envoie alors
un message supplémentaire basé sur le mot de passe originel, qui certifie l’authenticité
de la nouvelle clef de session choisie.
Voici comment cela fonctionne. Alice et Bernard veulent s’identifier l’un l’autre et
générer une clef de session commune. Ils se mettent d ’accord sur un schéma de signature
numérique où tout nombre est susceptible de servir de clef privée, et où la clef publique
s’obtient à partir de la clef privée. E l G a m a l et R S A conviennent parfaitement. La
clef privée P ' sera le mot de passe d’Alice ou seulement une empreinte de celui-ci.
Ep'{gTA m od n ).
2° Bernard, qui ne connaît que P ' et ne peut pas en déduire P , choisit r& et
envoie :
Ep'(gTB mod n).
Bernard qui connaît à la fois K et P' peut déchiffrer et vérifier la signature. Seule
Alice a pu envoyer ce message puisqu’elle est la seule à connaître F ; un intrus qui
obtiendrait une copie du fichier de mots de passe de Bernard peut essayer de deviner
P, mais ne peut pas signer la clef de session.
Le schéma A -E K E ne fonctionne pas avec la variante à clef publique de E K E puisque
l’un des participants y choisit la clef et l’impose à l’autre. Cela permet une attaque de
l’intercepteur par un attaquant qui a intercepté P.
Applications d’EKE
B e l l o v i n et M e r r i t t suggèrent que ce protocole peut être utilisé pour des téléphones
publics sûrs [116] :
« Faisons l’hypothèse que des téléphones publics chiffrés sont installés.
550 Chapitre 22 Algorithmes d’échange de clefs
Alice et Bernard partagent un mot de passe secret P, et viennent juste d’échanger une
clef de session K avec le protocole de D i f f i e - H e l l m a n . Ils utilisent P pour vérifier
2. N ote du traducteur : PIN est l’abréviation de « P e r s o n a l Id e n tific a tio n N u m b er » pou r « n u m éro
d ’id en tific a tio n p e r s o n n e l ».
22.7 Distribution de clef de conférence et diffusion de secret 551
qu’ils ont la même clef de session (et qu’Estelle n’est pas en train de tenter une attaque
de l’intercepteur), sans dévoiler P à Estelle.
2° Bernard calcule H' (P, K) et compare son résultat avec ce qu’il a reçu. S ’ils sont
identiques, il envoie à Alice
H ' ( H ( P , K ))
3° Alice calcule H' (H( P, K) ) et compare son résultat avec ce qu’elle a reçu.
Si Estelle tente l’attaque de l’intercepteur, elle utilise une clef K i avec Alice et une clef
K 2 avec Bernard. Pour tromper Bernard à l’étape 2, il faut qu’elle devine le mot de
passe et qu’elle envoie H'(P,K-i) à Bernard. Avec une fonction de hachage classique,
elle peut essayer les mots de passe usuels pour deviner le bon et réussir à infiltrer le
protocole. Mais avec cette fonction de hachage, il existe beaucoup de mots de passe
susceptibles de produire la même valeur quand ils sont hachés avec K\. Aussi, quand
elle trouve un mot de passe qui convient, elle a de grande chances de ne pas avoir le
bon, et Bernard ne se laissera pas duper.
R = K (mod K b )
R = K (mod K c )
R = 0 (mod K d )
552 Chapitre 22 Algorithmes d’échange de clefs
R = K (mod K e )
R = 0 (mod K f )-
C ’est un problème d ’algèbre facile, qu’Alice peut certainement résoudre. Quand les
auditeurs reçoivent la transmission, ils calculent la clef reçue modulo leur clef secrète.
S’ils sont autorisés à lire le message, ils récupèrent la clef K . Sinon, ils ne récupèrent
rien du tout.
Une troisième façon d ’opérer, en utilisant un schéma à seuil (voir § 3.7) est suggérée par
Shimshon B e r k o v i t z dans [148]. Comme pour les autres, chaque auditeur potentiel
reçoit une clef secrète. Cette clef est une part dans un schéma à seuil qui n’est pas
encore mis en place. Alice garde quelques clefs secrètes pour elle-même afin de rajouter
un peu de caractère aléatoire au système. Faisons l’hypothèse qu’il y a A; personnes qui
écoutent.
Alors pour diffuser A4, Alice chiffre A4 avec la clef K et fait ce qui suit :
3° Alice émet k + j parts choisies aléatoirement, aucune d ’entre elles n’étant une
part décrite à l’étape 2 .
4° Tous les auditeurs qui reçoivent l ’émission ajoutent leur part aux k + j parts
qu’ils ont reçues. Si l ’adjonction de leur part leur permet de calculer le secret,
ils obtiennent la clef. Sinon, ils ne l’ont pas.
Une autre approche est décrite dans [8 8 6 , 885, 1203]. Pour une autre approche encore,
consultez [1009].
4° L ’utilisateur i calcule :
Tous les indices des calculs du protocole, i,i — l,i — 2 , . . . ,i + 1, sont à prendre modulo
n. A la fin du protocole, tous les utilisateurs honnêtes obtiennent le même K . Personne
d’autre n’apprend quoi que ce soit. Cependant, ce protocole est vulnérable à l’attaque
de l’intercepteur. Un autre protocole, moins beau que celui-ci, est décrit dans [759].
Tatebayashi-Matsuzaki-Newman
Ce protocole de distribution de clef convient aux réseaux [1525]. Alice veut générer une
clef de session avec Bernard grâce à Ivan, le C D C . Tous les participants connaissent la
clef publique n de Ivan. Ivan connaît les deux grands facteurs premiers de n, et peut
donc facilement calculer des racines cubiques modulo n. Une grande partie des détails
est laissée de côté, mais l’idée est là.
r\ mod n.
2 ° Ivan informe Bernard que quelqu’un veut échanger une clef avec lui.
3° Bernard choisit un nombre aléatoire r s et envoie à Ivan:
rB mod n.
ta ® r B.
5° Alice calcule
(rA <$rB) ® r A = r B.
Elle utilise rB pour communiquer en sécurité avec Bernard.
r%r% mod n.
2° Ivan informe David que quelqu ’un veut échanger une clef avec lui.
3° David choisit un nombre aléatoire ru et envoie à Ivan:
r\) mod n.
4° Ivan utilise sa clef privée pour retrouver rB et ce qu’il prend pour r c , et envoie
à Christine:
(rBrc m od n) © ru-
554 Chapitre 22 Algorithmes d’échange de clefs
Comme :
jV ffc,xfc2 x ...x k t
ceci est un schéma à clefs multiples tel que décrit dans le paragraphe 3.5.
Si, par exemple, il y a 5 clefs, un message chiffré avec kz et k^ peut être déchiffré avec
ki, k'2 et k/i i
C = M k3* ks mod n
M = c kixk2 xk4 m o d n
Cela sert pour les signatures multiples. Imaginez la situation où Alice et Bernard
doivent tous les deux signer un document pour le rendre valide. Munissez les de trois
clefs : Ki , K 2 et A 3 . Les deux premières sont destinées à Alice et Bernard, une chacun,
et la troisième est rendue publique.
A4' = M Kl mod n.
A4 — A4'K2XKs mod n.
556 Chapitre 23 Algorithmes spéciaux pour protocoles
A i = A i " Ks mod n.
où p est un nombre premier plus grand que n’importe quel coefficient. Les coefficients
a et b sont choisis aléatoirement ; ils sont tenus secrets et jetés après que les parts aient
été distribuées. A i est le message. Le nombre premier doit être rendu public.
Les parts sont obtenues en évaluant le polynôme en n points différents :
kt = F ( x t).
Six personnes peuvent calculer les six inconnues (y compris A4) ; cinq personnes ne
peuvent rien apprendre de A4.
L’aspect le plus époustouflant du partage de secret est que si les coefficients sont choisis
aléatoirement, cinq personnes disposant d’une puissance de calcul infinie ne peuvent
rien apprendre du message à part sa longueur (que, de toute façon, ils connaissent tous).
C’est aussi sûr qu’un masque jetable ; une tentative de recherche exhaustive (c’est-à-
dire, essayer toutes les combinaisons possible de six parts) révélerait que tout message
concevable pourrait être le secret. C ’est vrai pour les quatre schémas de partage de
secret présentés ici.
Schéma vectoriel
George B l a k l e y a inventé un schéma qui utilise des points dans l’espace [189]. Le
message est défini comme un point dans un espace à m dimensions. Chaque part est
l’équation d ’un hyperplan de m — 1 dimensions qui inclut ce point. L ’intersection de
n’importe quel ensemble de m de ces hyperplans détermine exactement ce point.
Par exemple, si trois parts sont nécessaires pour reconstruire le message, alors c ’est un
point dans un espace à trois dimensions. Chaque part est un plan différent. Avec une
part, vous savez que le point est quelque part sur le plan. Avec deux parts, vous savez
que le point est quelque part sur la droite d’intersection des deux plans. Avec trois
parts, vous pouvez déterminer le point exactement : c ’est l’intersection des trois plans.
Asmuth—Bloom
Ce schéma utilise des nombres premiers [70]. Pour un schéma à seuil-(m,n), choisissez
un grand nombre premier p plus grand que A4. Ensuite choisissez n nombres inférieurs
kp, dj, d2 , ..., dn tels que:
A4' = A i + r p .
Tout ensemble de m parts peut être utilisé pour reconstruire A i en utilisant le théorème
du reste chinois, mais m — 1 parts ne le permettent pas. Voyez [70] pour les détails.
Karnin—G reene—Hellman
Le schéma de K a r n in , G r e e n e et H e l l m a n utilise la multiplication matricielle [819].
Choisissez n + 1 vecteurs à m dimensions Vo, Vi, ..., Vn, tels que toute matrice m x rri
formée à partir de ces vecteurs ait un rang m. Le vecteur U est le vecteur ligne de
dimension m.
A4, est le produit matriciel U - Vo- Les parts sont données par les produits matriciels
U ■Vi, où i varie de 1 à n.
Tout ensemble de m parts peut être utilisé pour résoudre le système de m x m équations
linéaires où les inconnues sont les coefficients de U. Connaissant 17, on peut calculer
U ■Vq. Tout ensemble de m — 1 parts ne permet pas de résoudre le système d’équations
linéaires et ne permet donc pas de retrouver le secret.
linéaire, et donnez à chaque membre de la Délégation B une part qui est le résultat
d’une évaluation du polynôme quadratique.
Deux parts quelconques de la Délégation A peuvent être utilisées pour reconstruire
le polynôme linéaire mais, quel que soit le nombre de parts dont dispose le groupe,
personne ne peut obtenir la moindre information sur le secret. La même chose est vraie
pour la Délégation B : ils peuvent mettre trois parts en commun pour reconstruire le po
lynôme quadratique, mais ils ne peuvent pas obtenir la moindre information nécessaire
pour reconstruire le secret. Ce n’est que si les délégations mettent en commun leurs
polynômes que ceux-ci peuvent être multipliés entre eux pour reconstruire le secret.
En général, tout type de schéma de partage qui peut être imaginé peut être réalisé.
Tout ce que vous avez à faire, c ’est trouver un système d’équations qui correspondent
au schéma particulier choisi. D ’excellents articles concernant les schémas de partage
de secret généralisés sont dans [1468, 1469, 1470].
Cet algorithme modifie le schéma à seuil-(m,n) standard pour détecter les tri
cheurs [1537]. Cela marche avec n’importe quel schéma, mais je vais l’illustrer en
utilisant le schéma de L a g r a n g e .
Choisissez un nombre premier p plus grand que n et plus grand que :
(s — l)(ra — l ) / e + m,
où s est le secret le plus grand possible et e est la probabilité de tricher avec succès.
Vous pouvez rendre e aussi petit que vous le voulez ; cela ne fait que rendre les calculs
plus complexes. Construisez vos parts comme avant, sauf qu’au lieu d ’utiliser 1,2,3,...,n
pour les Xi, vous choisirez des nombres aléatoires entre 1 et p — 1 pour les Xi.
Maintenant si Martin s’introduit subrepticement dans la réunion de reconstruction
du secret avec sa fausse part, celle-ci a une forte probabilité de ne pas être valide.
Un secret impossible est, bien sûr, un secret contrefait. Voyez [1537] pour les détails
mathématiques.
Malheureusement, au moment où Martin est confondu comme tricheur, il apprend
quand même le secret (en faisant l’hypothèse qu’il y a m autres parts valides). Un
autre protocole, décrit dans [1537, 987], évite cela. L’idée de base est d’avoir une suite
de k secrets telle qu’aucun des participants ne sache d’avance quel est le bon secret.
Chaque secret est plus grand que le précédent, sauf pour le vrai secret. Les participants
combinent leurs parts pour engendrer les secrets les uns après les autres, jusqu’à ce
qu’ils créent un secret qui soit inférieur au secret précédent. C ’est le bon.
Ce schéma dévoilera les tricheurs tôt dans le processus, avant que le vrai secret ne soit
révélé. Il y a des complications quand les participants dévoilent leurs parts une par une ;
voyez les articles pour les détails. D ’autres articles sur la détection et les préventions
de la tricherie dans les schémas à seuil sont dans [359, 124, 274],
560 Chapitre 23 Algorithmes spéciaux pour protocoles
h = —k ~ 2 mod n.
ElGamal
Le deuxième canal subliminal de S im m o n s [1465], décrit dans [1412, 1477], est basé
sur le schéma de signature E l G a m a l (voir § 19.6).
La génération de clef est la même que pour le schéma de signature E l G a m a l de base.
Choisissez d’abord un nombre premier p et deux nombres aléatoires g et r tels que g
et r soient tous deux inférieurs à p. Ensuite calculez :
K = gr m o d p.
Pour envoyer un message subliminal A4, en utilisant un message inoffensif A4', A4’ , A4
et p doivent être premiers entre eux deux à deux, et AA et p — 1 doivent être premiers
entre eux. Alice calcule :
X = gM m od p
Si tel est le cas, il accepte alors le message comme licite (ce n’est pas un message de
Gatien).
Ensuite, pour reconstruire A4, il calcule:
Par exemple, soit p — 11 et g = 2. La, clef privée r choisie vaut 8. Cela signifie que la clef
publique, que Gatien utilise pour vérifier la signature, vaut gr mod p = 28 mod 11 = 3.
Pour envoyer le message subliminal, A4 = 9, en utilisant le message inoffensif A4' = 5,
Alice vérifie que 9 et 11 sont premiers entre eux et que 5 et 11 sont premiers entre eux.
Elle vérifie également que 9 et 11 — 1 sont premiers entre eux. Ils le sont, donc elle
calcule :
X = gM mod p = 29 mod 11 - 6.
5 = ( 8 x 6 + 9 x F ) mod 10.
ESIGN
Un canal subliminal peut être ajouté à ESIGN [1467] (voir § 20.6).
Pour ESIGN, la clef privée est une paire de grands nombres premiers, p et q, et la clef
publique est n = p 2 q. Avec un canal subliminal, la clef privée est constituée de trois
nombres premiers p, q et r, et la clef publique n est telle que :
n — p 2 qr.
La variable r est l’information supplémentaire dont Bernard a besoin pour lire le mes
sage subliminal.
Pour signer un message normal, Alice choisit d ’abord un nombre aléatoire x inférieur
à pqr et calcule :
Ensuite, elle utilise cette valeur x' comme le « nombre aléatoire » x pour signer A4'.
Cette deuxième valeur de s est envoyée comme la signature.
Gatien vérifie que s (le deuxième s) est une signature valide de AA'.
Bernard peut aussi vérifier l’authenticité du message de la même manière. Mais comme
il connaît également r, il peut calculer :
Cette réalisation d’un canal subliminal est bien meilleure que les deux précédentes.
Dans les réalisation de O n g - S c h n o r r S h a m ir et dans E l G a m a l , Bernard dispose de
la clef privée d’Alice. En dehors du fait que Bernard peut lire les messages subliminaux
d’Alice, il peut aussi se faire passer pour Alice et signer des documents à sa place. Alice
ne peut rien y faire ; sa confiance en Bernard est nécessaire pour mettre en place ce
canal subliminal.
Le schéma ESIGN ne présente pas de ce défaut. La clef privée d’Alice est l’ensemble
des trois nombres premiers p, q et r. La clef secrète de Bernard est seulement constituée
de r. Il connaît n = p2 qr, mais pour récupérer p et q, il doit factoriser ce nombre. Si
les nombres premiers sont assez grands, Bernard a autant de difficulté à se faire passer
pour Alice que Gatien, ou que toute autre personne.
23.3 Canal subliminal 563
DSA
Il y a aussi un canal subliminal dans le D SA (voir § 20.1) [1475, 1478, 1477]. En fait,
il y en a plusieurs. Le canal subliminal le plus simple comprend le choix de k, qui est
censé être un nombre aléatoire de 160 bits. Toutefois, si Alice choisit un k particulier,
alors Bernard, qui connaît également la clef privée d ’Aüce, peut reconstruire k. Alice
peut envoyer à Bernard un message subliminal de 160 bits dans chaque signature
DSA. Toute autre personne peut seulement vérifier la signature. Ce n’est pas si simple.
Puisque k doit être aléatoire, Alice et Bernard doivent partager un masque jetable et
chiffrer le message subliminal avec le masque jetable pour engendrer k.
Il existe des canaux subliminaux dans le D SA qui ne nécessitent pas que Bernard
connaisse la clef privée d’Alice. Ils impliquent également le choix de valeurs particu
lières pour k mais ils ne permettent pas de transmettre 160 bits d ’information. Le
schéma suivant, présenté dans [1475, 1478], permet à Alice et Bernard d’échanger un
bit d’information subliminale par message signé :
Il existe des moyens d’envoyer plusieurs bits par cette méthode qui implique le fait de
rendre r résidu quadratique ou non d’un ensemble de paramètres. Voyez [1475, 1478]
pour plus de détails.
Ce schéma peut être facilement étendu pour envoyer plusieurs bits subliminaux par
signature. Si Alice et Bernard se mettent d’accord sur deux nombres premiers P et
Q, Alice peut envoyer deux bits en choisissant un k aléatoire tel que r soit un résidu
quadratique ou non modulo P et tel que r soit un résidu quadratique ou non modulo
Q. Une valeur aléatoire de k a 25 % de chances de produire un r de la bonne forme.
Voici comment Martin, un réalisateur peu scrupuleux du DSS, peut arranger la fuite
de 10 bits de la clef privée d ’Alice par document qu’Alice signe :
1° Martin met sa réalisation du DSS dans une puce VLSI résistante à l’investiga
tion en sorte que personne ne puisse en examiner le fonctionnement. Il crée un
canal subliminal de 14 bits dans sa réalisation du DSS. Pour ce faire, il choisit
14 nombres premiers, et la puce choisit la valeur k telle que r soit ou ne soit
564 Chapitre 23 Algorithmes spéciaux pour protocoles
Ce qui est effrayant, c ’est que même si Alice sait que cela se produit, elle ne peut pas
le prouver. Tant que les 14 nombres premiers restent secrets, Martin est à l’abri.
u = gk mod p
Après l’étape 4, Bernard sait que r ne contient aucune information subliminale. S’il
sert de personne de confiance, il peut certifier que la signature d ’Alice ne contient pas
de message subliminal. Les autres doivent croire ce certificat; Bernard ne peut pas
prouver ce fait à une troisième personne avec une transscription du protocole.
Cela donne un résultat surprenant : si Bernard le veut, il peut utiliser ce protocole
pour créer son propre canal subliminal. Bernard peut insérer un message subliminal
dans une des signature d ’Alice en choisissant un k vérifiant certaines caractéristiques.
Quand S im m o n s a découvert cela, il l’a appelé le « canal du coucou ». Les détails du
fonctionnement du canal du coucou, et un protocole à trois passes de génération de k,
qui l’évite, sont décrits dans [1479, 1477].
Autres schémas
Il existe un autre schéma de signature dans lequel on peut cacher un canal sublimi
nal [1464, 1467,1411]. Un protocole pour cacher un canal subliminal dans les protocoles
F ia t - S h a m ir et F ia t - F e ig e - S h a m ir , ainsi que les abus possibles à l’aide de ce canal
sont décrits dans [483]
d — cx mod p.
Bien sûr, si elle avait regardé par dessus l’épaule de Bernard pendant l’exécution du
protocole, elle aurait été convaincue. Christine doit voir les étapes exécutées dans le
bon ordre, tout comme Bernard.
Il peut y avoir un problème avec ce protocole de signature, mais je ne connais aucun
détail. Je vous prie de consulter la littérature avant de l’utiliser.
Un autre protocole offre non seulement le moyen pour Alice de convaincre Bernard
de la validité de sa signature, mais il permet aussi à Alice de convaincre Bernard que
sa signature n’est pas valide si tel est le cas, et ce à l’aide d ’un protocole interactif à
divulgation nulle [335].
Tout comme pour le protocole précédent, un grand nombre premier p et un élément
primitif g sont rendus publics et utilisés par un groupe de signataires. Alice dispose
d’une clef privée x et d ’une clef publique gx mod p. Pour signer un message Alice
calcule z = m æ mod p.
Pour vérifier la signature :
1° Bernard choisit deux nombres aléatoires a et b tous deux inférieurs àp et envoie
à Alice:
c - m agb m od p.
3 ° Bernard envoie a et b à Alice afin qu ’elle puisse vérifier qu ’il n’a pas triché à
l’étape 1 .
4° Alice envoie q à Bernard, de telle manière qu’il puisse utiliser m x et recons
truire S\ et S2 - Si:
Si — ( e x gq) m od p
s2 = ((<?æ) 6 + 9 x za) mod p ,
Alice peut également désavouer sa signature z pour un message m. Voyez [335] pour
les détails.
D’autres protocoles de signatures incontestables sont décrits dans [586, 348]. Lein H a r n
et Shoubao Y a n g ont proposé un schéma de signature incontestable en groupe [701].
La clef privée est composée de deux nombres aléatoires différents x et z, tous deux
inférieurs à q. La clef publique est constituée de p, q, g, y et u, où :
y = gx mod p,
u = gz mod p.
et
m ' = T tzm mod q.
Tout d’abord, un grand nombre premier p et un élément primitif g sont rendus publics
et utilisés par un groupe d’utilisateurs. Le produit n de deux nombres premiers est aussi
rendu public. Christine possède une clef privée z et une clef publique h = gx mod p.
Dans le protocole qui suit, Alice peut signer A4 en convaincant Bernard de la validité
de celle-ci, mais sans qu’il puisse lui-même convaincre une troisième personne de ce
fait.
a = gæ mod p
b = hx mod p.
j = {H ( Ai) © H (o , 6 ) ) 1 / 3 mod n,
et envoie a, b et j à Bernard.
c = gshf mod p.
d = gq mod p
e = (cd)x mod p.
et envoie q à Bernard.
6° Bernard vérifie si
d ~ g q (mod p)
e /a 9 = asbt (mod p)
H { Ai) © H(a,b) = j 1 / 3 (mod n).
k — guav m od p.
23.6 Calcul avec données chiffrées 569
l — gw mod p
y - ( kl)z m od p.
ge = x (mod p).
Ceci est normalement un problème difficile et Alice n ’a pas la puissance de calcul né
cessaire pour trouver le résultat. Bernard dispose de la puissance de calcul nécessaire
— disons qu’il travaille pour le gouvernement, par exemple, ou dans une grande or
ganisation informatique. Voici comment Alice peut lui laisser faire les calculs sans lui
révéler x [549, 8 ] :
1° Alice choisit un nombre aléatoire r inférieur à p.
2 ° Elle calcule:
x' = xgr mod p.
e = (e1 — r) mod (p — 1 ).
Il existe des protocoles similaires pour le problème des résidus quadratiques et pour le
problème des racines primitives [7, 8 ]. (Voyez aussi § 4.8.)
570 Chapitre 23 Algorithmes spéciaux pour protocoles
et envoie z à Alice.
3° Alice calcule les quatre racines carrées de z modulo n. Elle peut le faire parce
qu’elle connaît la factorisation de n. Appelons les + x , —x , + y et —y. Appelons
x' le plus petit des deux nombres :
x mod n
—x m od n.
y mod n
—y mod n.
5° Si le pari d’Alice est correct, le résultat du lancer est « face », si son pari est
faux, le résultat du lancer est « pile ». Bernard annonce le résultat du lancer.
Sous-protocole de vérification :
Alice n’a aucun moyen de connaître r et son pari est réel. À l’étape 4, elle ne donne à
Bernard que 1 bit de son pari (un bit où x' et y' diffèrent) pour éviter qu’il n’ait à la
fois x' et y'. Si Bernard avait les deux nombres, il pourrait changer r après l’étape 4.
23.7 Pile ou face équitable 571
y = hx m od p ou y — tx mod p.
Sous-protocole de vérification :
6° Alice révèle x à Bernard qui calcule hx mod p et tx mod p à la fois pour vérifier
qu 'Alice a joué honnêtement et pour vérifier le résultat du lancer. Il vérifie aussi
que x et p — 1 sont premier entre eux.
Pour tricher, Alice doit trouver deux entiers x et x' tels que hx = tx' (mod p). Si elle
connaissait de telles valeurs, elle pourrait calculer :
Il est crucial que n soit un entier de B l u m . Sinon, Alice pourrait trouver un x'q tel
que x'o 2 mod n — xq2 mod n = aq, où x'q est également un résidu quadratique. Si Xq
était pair et x '0 impair (ou vice versa), Alice pourrait tricher librement.
A(xi,y) = z f - i mod n
x = 110101001011
y = 101010000110
IBI(a;,t/) = { 1 ,4 ,5 ,1 1 }. (Nous lisons les bits de droite à gauche avec l’indice
le plus à droite valant 0 .)
Voici maintenant le protocole. Alice est le vendeur. Bernard et Christine sont les ache
teurs. Alice dispose de k secrets de n bits : S i, S2, ..., S*. Bernard veut acheter le secret
Sb et Christine veut acheter le secret Sc.
1. A lice doit donner à Bernard les facteurs d e n ou exécuter un p rotocole à divulgation nulle pou r
le convaincre qu ’ il s’ agit bien d ’un entier de B lu m .
23.9 Divulgation tout ou rien de secrets 573
3° Bernard chiffre Cb (rappelez-vous que Sb est le secret qu’il veut acheter) avec
la clef publique d’Alice. Il calcule ZTBI de Cb et du résultat du chiffrement qu’il
vient juste d ’effectuer. Il envoie cet IBI à Christine.
Christine chiffre B c (rappelez-vous que Sc est le secret qu’elle veut acheter) avec
la clef publique d’Alice. Elle calcule /TB [ de B c et du résultat du chiffrement
qu’elle vient juste d’effectuer. Elle envoie cet IBI à Bernard.
5° Alice déchiffre tous les C'i avec sa clef privée associée à la clef publique qu’elle
a donnée à Bernard, ce qui lui donne k nombres de n bits: C " C " 2, ..., C"k-
Elle calcule Si © C "i pour i = 1 à k et envoie les résultats à Bernard.
Alice déchiffre tous les B'i avec sa clef privée associée à la clef publique qu’elle
a donnée à Christine, ce qui lui donne k nombres de n bits: B " 1 , B " 2 ,
B " k■ Elle calcule Si © B "i pour i — 1 à fc et envoie les résultats à Christine.
3° Bernard veut acheter S 7 et donc il chiffre C 7 avec la clef publique qu’Alice lui
a donnée:
22125145 m o d 7387 = 5928.
Maintenant :
2212 = OIOOOIOIOOIOO
5928 = 1011100101000.
B 2 = 111111000100 = 1988
B '2 = 011001111100 = 1660.
C 7 = OIOOOIOIOOIOO = 2212
C '7 = 1011100101000 = 5928.
5° Alice déchiffre tous les C \ avec la clef privée associée à Bernard et combine les
résultats par ou exclusif avec les S ,. Par exemple pour i = 7 :
Ci — Sf mod n.
2° Bernard choisit son secret Cb, tire un nombre aléatoire, et envoie à Alice :
C — Cbre mod n.
4° Bernard calcule:
Sb = A4V-1 inod n.
Si les participants risquent d’être malhonnêtes, Bernard peut faire une preuve à divul
gation de sa connaissance d ’un nombre r tel que C' — Cbre mod n et garder b secret
jusqu’à ce qu’Alice lui donne AA' à l’étape 3 [249].
s = (si + s2 + s3 + 54 + Sb) m od p
576 Chapitre 23 Algorithmes spéciaux pour protocoles
t, = g s* mod p pour i = 1 à 5.
Les parts publiques d’Alice sont les tt et les parts privées sont les s,.
2° Alice envoie une part privée et la part publique correspondante à chaque dépo
sitaire. Par exemple, elle envoie Si et t\ au dépositaire n° 1. Elle envoie t au
CDC.
3° Chaque dépositaire vérifie que:
U = gSx mod p.
À ce point, le C D C sait que chaque dépositaire a une part valide et qu’ils peuvent
reconstruire la clef privée si nécessaire. Toutefois, ni le C D C , ni quatre des cinq dépo
sitaires, travaillant ensemble, ne peuvent reconstruire la clef privée d ’Alice.
L ’article de M icali [1091, 1090] contient également une procédure pour rendre le R S A
équitable et pour combiner un schéma à seuil avec un cryptosystème équitable, tel que
m dépositaires parmi n peuvent reconstruire la clef privée.
t = gAgB mod p,
Ax = B (mod p)
2° Patricia calcule hi = Ar’ mod p pour toutes les valeurs de i et envoie ceux-ci
à Victor.
5 ° Pour tous les t bits, Victor vérifie l’une des deux relations:
1° Alice et Bernard se mettent d’accord sur une paire aléatoire k et m telle que:
km = e (mod n).
A i — Cd mod n.
Un protocole similaire peut être utilisé pour démontrer la capacité à casser le problème
du logarithme discret [502].
1° Alice choisit une valeur aléatoire k comprise entre 1 et n. Ensuite elle camoufle
m en calculant:
t = mke mod n.
2° Bernard signe t :
td -- (mke)d mod n.
s = td/k mod n.
4° Et le résultat est:
s = m d mod n.
Cela peut être aisément montré grâce à :
C h a u m a inventé une fam ille d ’algorithm es de signatures en aveugle plus com pliqués
dans [326, 325]. Ces signatures sont plus com pliquées à construire, m ais elles sont plus
maléables.
a = x 2 m o d n.
Ce protocole présente éventuellement une faiblesse : il se peut que Bernard puisse cal
culer un nombre a tel qu’une racine carrée de a permette de factoriser n dans tous les
cas.
I zu zv | ^ 2
et pour tout u :
0 < zu < p - 1.
Si ce n’est pas vrai, Bernard choisit un autre nombre premier et essaie à nou
veau.
4° Bernard envoie à Alice la suite de nombres dans l’ordre exact suivant:
Toutes les vérifications que Bernard doit effectuer à l’étape 3 servent à garantir qu’au
cun nombre n’apparaisse deux fois dans la suite engendrée à l’étape 4. Sinon, si za = Zb,
Alice saurait que a < j < b .
Le défaut de ce protocole est qu’Alice apprend le résultat du calcul avant que Bernard
ne l’apprenne. Rien ne l’empêche de compléter le protocole jusqu’à l’étape 5 et d’ensuite
refuser de dire le résultat à Bernard à l’étape 6. Elle peut même mentir à Bernard à
l’étape 6.
Exemple du protocole
Faites l’hypothèse que le R SA est l’algorithme à clef publique utilisé. La clef publique
de Bernard est 7 et sa clef privée est 23 ; n = 55. La valeur secrète i d ’Alice vaut 4 ; la
valeur secrète j de Bernard4 vaut 2.
1° Alice choisit x = 39et c = E B(3 9)= 19.
2° Alice calcule r — i = 19 — 4 = 15.Elle envoie 15 à Bernard.
3° Bernard calcule les 4 nombres suivants :
tn = D b { 15 + 1) = 26
jb = £>s(15 + 2) = 18
y3 = £ » s (15 + 3) = 2
y4 = D B(15 + 4) = 39.
zi = 26 mod 31 = 26
z2 = 18 mod 31 = 18
Z3 = 2 mod 31 = 2
Z4 = 39 mod 31 — 8.
Ce protocole peut servir à construire des protocoles bien plus compliqués. Un groupe
de gens peut effectuer une vente aux enchères secrète sur un réseau d’ordinateurs. Ils
instaurent un anneau logique entre eux, et déterminent grâce à des comparaisons deux
à deux celui qui offre le plus haut prix. Pour empêcher les gens de changer leur offre
au milieu des enchères, une sorte de protocole de mise en gage peut être utilisée. S’il
s’agit d’enchères au rabais, celui qui a fait la meilleure offre remporte l’objet pour ce
prix. S’il s’agit d ’enchères à l’anglaise, alors il remporte l’objet pour le deuxième prix
le plus élévé5. Des idées similaires s’appliquent aux marchandages, aux négociations
et à l’arbitrage.
4. Faites l’ hypothèse que seules les valeurs 1, 2, 3 et 4 sont possibles pou r i et j .
5. C eci peut être déterminer par une seconde ronde de com paraisons deux à deux.
582 Chapitre 23 Algorithmes spéciaux pour protocoles
Avec le chiffrement probabiliste, les cryptanalystes ne peuvent plus chiffrer des textes
en clair aléatoires pour trouver le bon. Pour illustrer, faites l’hypothèse que les crypta
nalystes ont le texte chiffré Ct = E k (AA). Même s’ils devinent A4 correctement, quand
ils calculent E k (A4), le résultat sera un C complètement différent: C3. Ils ne peuvent
pas comparer Ct et Cj donc ils ne peuvent pas savoir s’ils ont deviné correctement le
texte en clair.
C’est quelque chose d ’étonnamment séduisant. Même si les cryptanalystes ont à la fois
la clef publique de chiffrement, le texte en clair et le texte chiffré, ils ne peuvent pas
prouver que le texte chiffré est bien le chiffrement du texte en clair sans disposer de
la clef privée de déchiffrement. Même s’ils essaient une recherche exhaustive, ils ne
peuvent que prouver que tout texte en clair concevable est un texte en clair possible.
En utilisant ce type de schéma, le texte chiffré sera toujours plus long que le texte en
clair. Vous ne pouvez pas l’éviter ; c ’est le résultat du fait que plusieurs textes chiffrés
correspondent à un seul et même texte en clair. Le premier schéma de chiffrement
23.15 Chiffrement probabiliste 583
probabiliste [627] donnait un texte chiffré tellement plus long que le texte en clair qu’il
n’était pas utilisable en pratique.
Toutefois, il existe une réalisation efficace du chiffrement probabiliste due à Manuel
B l u m et Shafî G o l d w a s s e r , utilisant le générateur de bits aléatoires B l u m B l u m
S h u b (B B S) décrit dans le paragraphe 17.9 [205].
Le générateur BBS est basé sur la théorie des résidus quadratiques. En termes simples,
il y a deux nombres premiers p et q qui sont congrus à 3 modulo 4. C ’est la clef privée.
Leur produit p x q = n constitue la clef publique6.
Pour chiffrer un message A i, choisissez d’abord un x aléatoire, premier par rapport à
n. Ensuite calculez :
xo = x 2 mod n.
M = A i i ,M 2 ,A i 3 ,—, M t
C = A ii © b i,A i 2 © b2 ,A iz © 83, ...,A it ffi bt
où t est la longueur du texte en clair.
Joignez la dernière valeur calculée x< à la fin du message et vous avez fini.
Le seul moyen de déchiffrer le message est de retrouver x 0 et ensuite de mettre en
place le même générateur BBS pour le combiner par ou exclusif avec le texte chiffré.
Comme le générateur BBS est sûr à gauche, la valeur de x t n’est d ’aucune utilité pour
le cryptanalyste. Seul quelqu’un qui connaît p et q peut déchiffrer le message.
L’algorithme en C pour retrouver xo à partir de x t est donné par :
in t xO ( i n t p , in t q , in t n , in t t , in t x t)
f
in t a, b , u, v , w, z ;
/ * on s a it d é jà que p g cd (p , q) == 1 * /
(v o id )e u clid e _ e te n d u (p , q , &a, &b) ;
u = modexp ( ( p + l ) /4 , t , p - 1 ) ;
v = modexp ( ( q + l ) / 4 , t , q - 1 ) ;
w = modexp ( x t % p , u , p ) ;
z = modexp ( xt % q , v , q ) ;
retu rn (b*q*w + a*p*z) % n;
>
Une fois que vous avez Xo, le déchiffrement est facile. Mettez en place un générateur
BBS et combinez par ou exclusif sa sortie avec le texte chiffré.
Vous pouvez rendre ce schéma encore plus rapide en utilisant tous les bits sûrs de
x,, pas seulement le bit de poids faible. En utilisant cette amélioration, le chiffrement
probabiliste B l u m - G o l d w a s s e r est plus rapide que le R S A et il empêche la fuite de
toute information partielle concernant le texte en clair. Vous pouvez également prouver
que la difficulté de casser ce schéma est la même que la difficulté de factoriser n.
Cependant, ce schéma n ’est pas sûr du tout contre une attaque à texte chiffré choisi.
A partir du bit le moins significatif des bons résidus quadratiques, il est possible de
calculer la racine carrée de n’importe quel résidu quadratique. Si vous le pouvez, alors
vous pouvez factoriser. Pour les détails consultez [1572, 1573, 36, 37].
l’intuition. Vous vous attendriez à ce que tourner le filtre ne serait-ce qu’un petit peu
bloque tous les photons, puisqu’ils sont polarisés horizontalement. Ce raisonnement
serait sensé dans notre monde, mais il ne l’est pas dans celui de la mécanique quantique.
Chaque particule a une probabilité de changer brusquement sa polarisation pour être
en accord avec l’orientation du filtre. Si l’angle est un petit peu diflérent, il y a une
bonne probabilité. Si l’angle est de 90°, la probabilité est 0. Si l’angle est de 45°, la
probabilité est de 50 %.
La polarisation peut être mesurée dans n’importe quelle base : deux axes à angle droit.
Par exemple, la base rectiligne est composée des axes horizontal et vertical, la base
diagonale des deux diagonales. Si une impulsion de photon est polarisée et si vous la
mesurez dans la même base, vous apprenez quelle est la polarisation. Si vous la mesurez
dans une mauvaise base, vous obtenez un résultat aléatoire. Nous allons utiliser cette
propriété pour engendrer la clef secrète :
J J / ------- \ " t ~ /
x-l*'fxxx + x-f-f
À partir de là, quand Bernard positionne son détecteur correctement, il enre
gistre la bonne réponse. S ’il positionne son détecteur pour mesurer une pola
risation verticale ou horizontale et que l’impulsion est polarisée soit horizon
talement soit verticalement, il apprendra de quelle façon Alice a polarisé cette
impulsion. S ’il positionne mal son détecteur, il obtiendra un résultat aléatoire.
Il ne pourra pas distinguer les cas où il a le bon résultat de ceux pour lesquels il
obtient un résultat aléatoire. Dans cet exemple, il pourrait obtenir le résultat :
y 1— \ \ — 1
3° Bernard indique à Alice, par un canal de communication non sûr, quels posi
tionnements il a utilisés.
4° Alice indique à Bernard quels sont les positionnements corrects. Dans notre
exemple, le détecteur était correctement positionné pour les impulsions 2, 6, 7
et 9.
586 Chapitre 23 Algorithmes spéciaux pour protocoles
0 0 11.
Ainsi, Alice et Bernard ont engendré 4 bits. Ils peuvent en engendrer autant qu’ils
veulent en utilisant ce système. En moyenne, Bernard devinera le bon positionnement
dans 50 % des cas et Alice devra donc envoyer 2 x n photons pour engendrer n bits.
Ils peuvent utiliser ces bits comme clef secrète pour un algorithme cryptographique
conventionnel, ou bien ils peuvent se garantir une confidentialité absolue en engendrant
suffisamment de bits pour un masque jetable.
S’ils utilisent ce système, Estelle ne peut pas les espionner. Si elle essaie de détecter les
impulsions quand elles passent, Bernard le détectera. Son seul espoir est de capturer
et mesurer les impulsions et ensuite d ’essayer d’envoyer des impulsions identiques à
Bernard. Mais tout comme Bernard, elle doit deviner quel type de polarisation mesurer ;
et tout comme Bernard, elle se trompera en moyenne une fois sur deux. Elle ne peut
pas éviter d ’envoyer des impulsions erronées à Bernard.
Si Estelle fait cela, Alice et Bernard auront des chaînes de bits différentes. C’est pour
quoi ils terminent le protocole de la manière suivante :
6° Alice et Bernard comparent quelques bits de leurs chaînes. S ’il y a des dis
cordances, ils savent qu’une oreille indiscrète pollue la ligne. S ’il n’y a pas de
discordances, ils jettent les bits utilisés pour la comparaison et utilisent ceux
qui restent.
Le monde réel
Chapitre 24
Exemples de réalisation
Concevoir des protocoles et des algorithmes est une chose, mais les réaliser dans des
systèmes opérationnels en est une autre. En théorie, la théorie et la pratique sont
identiques ; en pratique, elles sont différentes. Souvent des idées intéressantes sur papier
ne marchent pas dans la pratique. Les exigences sont peut-être trop restrictives ; le
protocole est peut-être trop lent. Le chapitre 10 traite de quelques débouchés relatifs
à l’utilisation de la cryptographie ; ce chapitre donne des exemples pratiques de ce qui
se fait.
pourrait être une clef R O M ou une carte magnétique, ou bien une entrée dactylogra
phiée par l’utilisateur (probablement sous forme d’un texte qui serait ensuite « broyé »
pour obtenir une clef). K M j et K M 2 ne sont stockées nulle part dans le système,
mais elles sont calculées à partir de KM o chaque fois qu’elles sont nécessaires. Les
clefs de session, pour les communications entre serveurs, sont engendrées par un pro
cessus pseudo-aléatoire par le serveur. Les clefs utilisées pour chiffrer les fichiers pour
archivage (K N F ) sont engendrées de la même manière.
Le cœur du protocole est un module résistant à l’investigation appelé mécanisme
cryptographique. Du côté du serveur comme du côté du terminal, tous les chiffre
ments et les déchiffrements sont réalisés par ce mécanisme cryptographique. Les clefs
les plus importantes, celles qui sont utilisées pour engendrer les clefs de chiffrement,
sont stockées dans ce module. Ces clefs ne peuvent jamais être lues une fois qu’elles sont
stockées. Et elles sont liées à une utilisation : une clef affectée à une tâche ne peut pas
être accidentellement utilisée pour autre chose. Ce concept de vecteurs de contrôle
de clefs est probablement la contribution la plus significative de ce système. Donald
D a v i e s et William P r i c e décrivent en détail ce protocole de gestion de clefs [435],
Une variante
Une variante de ce schéma avec clefs maîtresses et clefs de session est décrite dans [1485].
Il est construit autour des nœuds du réseau avec des mécanismes de dépôt de clefs qui
peuvent desservir des terminaux. Il est conçu pour :
protéger les communications entre n’importe quelle paire d’utilisateurs à des ter
minaux ;
Pour les communications et les transferts de fichiers entre utilisateurs, le schéma utilise
des clefs engendrées par le mécanisme de dépôt et envoyées aux utilisateurs chiffrées
avec une clef maîtresse. L’identité des utilisateurs est incorporée à la clef pour qu’il
soit possible de prouver qu’une clef de session a été utilisée par une paire particulière
d’utilisateurs. Ce mécanisme de dépôt de clefs est central à tout le système. Bien
que ce système n’utilise pas la cryptographie à clef publique, il offre des possibilités de
signature numérique : une clef ne peut être originaire que d’une seule source et elle ne
peut être lue que par un seul destinataire donné.
24.2 M ITRENET
L’une des premières réalisations de la cryptographie à clef publique était le système ex
périmental M E M O (pour « M ITRE Encrypted Mail Office »). M IT R E est un contrac
tant du Département de la Défense américaine — un groupe de réflexion gouverne
mental et un ensemble de personnes intelligentes. M E M O était un système de courrier
24-3 R N IS 591
24.3 RNIS
R e s e a r c h a développé un prototype de téléphone terminal RNIS
B e ll-N o r th e r n
sûr (pour « Réseau numérique à intégration de services » *) [497, 1201, 491, 498]2. La
version téléphone n’a pas dépassé le stade de prototype. Le produit final était le Paquet
de sécurisation des données (« Packet Data Security Overlay »). Le terminal utilise
l’échange de clefs D i f f i e H e l l m a n , les signatures numériques R SA et le chiffrement
des données par le DES ; il peut recevoir et émettre la voix et les données à 64 kilo-bits
par seconde.
Clefs
Une paire « clef publique-clef privée » à long terme est incorporée dans le téléphone.
La clef privée est stockée dans une zone du téléphone résistante à l’investigation. La
clef publique est utilisée comme identification du téléphone. Ces clefs font partie du
téléphone et ne peuvent être altérées en aucune façon.
De plus, deux autres clefs publiques sont stockées dans le téléphone. L’une de ces clefs
est la clef publique du propriétaire, qui est utilisée pour authentifier les commandes
1. N ote du traducteu r: en anglais on parlera d ’ ISDN p ou r « In teg ra ted S e r v ic e s D ig ita l N etw o rk ».
2. N ote d u traducteur : il est com m ercialisé en France sous le n om de NUMERIS.
592 Chapitre 24 Exemples de réalisation
faites par le propriétaire et peut être changée par une commande signée par le proprié
taire. De cette façon, un propriétaire peut céder son téléphone à quelqu’un d’autre.
La clef publique du réseau est aussi stockée dans le téléphone. Cette clef est utilisée
pour authentifier les commandes envoyées par le dispositif de gestion de clefs du réseau
et pour authentifier les appels des utilisateurs sur le réseau. Cette clef peut également
être changée par une commande signée par le propriétaire. Cela permet au propriétaire
de faire passer son téléphone d’un réseau à un autre.
Ces clefs sont considérées comme des clefs à long terme : elles ne sont changées que
rarement, ou même jamais. Une paire « clef privée-clef publique » à court terme est
aussi stockée dans le téléphone. Cette paire est encapsulée dans un certificat signé par le
dispositif de gestion des clefs. Quand deux téléphones établissent une communication,
ils échangent leurs certificats. La clef publique du réseau authentifie ces certificats.
Cette procédure d’échange et vérification de certificats ne permet que l’établissement
d’une communication sûre de poste à poste. Pour établir une communication sûre de
personne à personne, le protocole a une étape supplémentaire. La clef privée du proprié
taire est stockée dans une « clef matérielle d ’amorce » qui est insérée par le propriétaire
dans le téléphone. Cette clef d’amorce contient la clef privée du propriétaire, chiffrée à
l’aide d ’un mot de passe connu de lui seul (et non par le téléphone, ni par le dispositif
de gestion des clefs du réseau, ni quiconque autre). Elle contient également un certi
ficat signé par le dispositif de gestion des clefs du réseau ; ce certificat contient la clef
publique du propriétaire et certaines informations le concernant (nom, société, profes
sion, niveau d’accès à l’information confidentielle, garniture favorite de pizzas, tendance
sexuelle, etc.). Ce certificat est également chiffré. Pour déchiffrer ces informations et
les entrer dans le téléphone, le propriétaire entre son mot de passe secret à l’aide du
clavier du téléphone. Après que le téléphone a utilisé les informations pour établir la
communication, il les efface une fois que le propriétaire a retiré sa clef d ’amorce.
Le téléphone stocke également un ensemble de certificats du dispositif de gestion des
clefs du réseau. Ces certificats autorisent des utilisateurs particuliers à utiliser certains
des particuliers.
Appel
Un appel d’Alice vers Bernard se déroule comme suit :
1° Alice insère sa clef d’amorce dans le téléphone et elle entre son mot. de passe.
2° Le téléphone interroge la clef d ’amorce pour déterminer l’identité d’Alice et lui
donne la tonalité.
3° Le téléphone vérifie son ensemble de certificats pour vérifier que cet utilisateur
particulier est autorisé à utiliser ce téléphone particulier.
4° Alice forme le numéro; le téléphone établit l’appel.
5° Les deux téléphones utilisent un protocole d ’échange de clefs par cryptographie
à clef publique pour engendrer une clef de session unique et aléatoire. Toutes
les étapes suivantes du protocole seront chiffrées à l’aide de cette clef.
6° Le téléphone d ’Alice transmet son certificat et l’authentification de l ’utilisateur.
7° Le téléphone de Bernard vérifie l ’authenticité des signatures du certificat et de
l’authentification de l ’utilisateur en utilisant la clef publique du réseau.
244 S T U -III 593
Une nouvelle clef DES est utilisée pour chaque appel. Elle n’existe que dans chacun des
deux téléphones pour la durée de l’appel et est détruite immédiatement après la fin de
la conversation. Si un adversaire capture un ou les deux téléphones impliqués dans une
communication, il ne sera pas capable de déchiffrer la moindre communication passée
entre ces deux téléphones.
24.4 ST U -III
Le STU (pour « Secure Téléphoné Unit ») est un téléphone sûr conçu par la NSA. Ce
terminal a à peu près l’allure et la taille d ’un téléphone normal et peut servir comme
tel. Les téléphones sont aussi inviolables, assez pour ne pas être classés s’ils n’ont pas
de clef. Ils ont aussi un port de données et peuvent protéger le trafic entre modems
ainsi que les communications vocales [1140].
Whitfield D i f f i e parle du STU - III dans [492] :
Les S T U -III sont fabriqués par A T & T et GE. Entre 300000 et 400000 unités ont
été mises en ligne en 1994. Une nouvelle version, l’équipement terminal sûr (ST E pour
« Secure Terminal Equipment »), fonctionnera sur les lignes ISDN.
24.5 Kerberos
K e r b e r o s est un protocole d ’authentification à tierce personne de confiance conçu
pour les réseaux T C P /I P . Un service K e r b e r o s , résidant dans le réseau, agit comme
un arbitre de confiance. K e r b e r o s offre l’authentification sûre en réseau en permettant
à une personne d’accéder à différentes machines dans le réseau. K e r b e r o s est basé
sur la cryptographie à clef secrète (le DES dans le cas de la réalisation concrète de
K e r b e r o s , mais tout autre algorithme pourrait être utilisé) ; K e r b e r o s partage une
clef secrète différente avec chaque entité du réseau et la connaissance de cette clef
secrète tient lieu de preuve d’identité.
K e r b e r o s a initialement été développé au M IT dans le cadre du projet A t h e n a .
Le modèle de K e r b e r o s est basé sur le protocole à tierce personne de confiance
de N e e d h a m et S c h r o e d e r (voir § 3.3) [1159J. La version originale de K e r b e r o s ,
V e r s i o n 4, a été spécifiée dans [1100, 1503]4. La V e r s i o n 5, construite par modi
fication à partir de la V e r s i o n 4, a été spécifiée dans [877, 1417, 878], La meilleure
vue d’ensemble de K e r b e r o s est [1163]. D ’autres articles d’études sont [1389, 1500]
et deux bons articles décrivant l’utilisation concrète de K e r b e r o s sont [781, 782].
Le modèle de Kerberos
Le protocole de base de K e r b e r o s est esquissé dans le paragraphe 3.3. Dans le modèle
de K e r b e r o s il y a des entités — des clients et des serveurs — résidant dans le réseau.
Les clients peuvent être des utilisateurs, mais peuvent également être des programmes
indépendants qui doivent faire certaines choses : télé-charger des fichiers, envoyer des
messages, accéder à des bases de données, accéder à des imprimantes, obtenir des
privilèges administratifs, etc.
K er ber o s tient une base de données des clients et de leurs clefs secrètes. Pour un
utilisateur humain, la clef secrète est un mot de passe chiffré. Les services du réseau
nécessitant une authentification, ainsi que les clients qui désirent utiliser ces services,
enregistrent leur clef secrète auprès de K e r b e r o s .
Comme K er ber o s connaît la clef secrète de tout le monde, il peut créer des messages
pour convaincre une entité de l’identité d’une autre entité. K er ber o s crée également
des clefs d e session qui sont données au client et au serveur (ou aux deux clients)
et à personne d ’autre. Une clef de session est utilisée pour chiffrer les messages entre
deux participants, ensuite elle est détruite.
K er ber o s utilise DES pour le chiffrement. La V ersio n 4 fournit un mode non-
standard pour l’authentification. Ce mode est faible : il ne détecte pas certains change
ments apportés au texte chiffré (voir § 9.10). La VERSION 5 de utilise le mode C B C .
Fonctionnement de Kerberos
Cette section décrit KERBEROS V e r sio n 5. Je soulignerai plus loin les différences entre
la V ersion 4 et la V ersio n 5. Le protocole K er b e r o s est simple (voir la figure 24.1).
Un client demande à K er b e r o s un ticket pour le serv ice d e d éliv ra n ce d e tickets
(ticket S D T ) 5. Ce ticket, appelé « ticket d’obtention de ticket » (T O T ) 6, est envoyé
au client, chiffré avec la clef secrète du client. Pour utiliser un serveur particulier, le
client demande un ticket pour ce serveur au SD T. En faisant l’hypothèse que tout
est en ordre, le S D T envoie au client le ticket demandé. Le client présente alors ce
ticket avec un authentifiant au serveur du service désiré. Si rien ne cloche avec les
accréditations du client, le serveur laisse le client accéder au service.
1. Requête pour un T O T
2. T O T
( Kerberos] ( SDT ' 3. Requête pour un ticket de service
4. Ticket de service
5. Requête pour le service
1 \ V ----- / a
5 — Serveur ]
f Client ]- h
Accréditations
K e r b e r o s utilise deux types d ’accréditations : les t ic k e t s et les a u t h e n t if ia n t s 7. Un
ticket est utilisé pour passer au serveur, de manière sûre, l’identité du client à qui le
ticket a été émis. Il contient également des informations que le serveur peut utiliser
pour s’assurer que le client qui utilise le ticket est bien celui à qui le ticket a été délivré.
Un authentifiant est une accréditation supplémentaire présentée avec le ticket.
c — client
s = serveur
a = adresse réseau du client
v = temps de début et de fin de validité d’un ticket
t = datation
Kx = clef secrète de x
K x,y = clef de session pour x et y
{m }K x = m chiffré avec la clef secrète de x
T x ,y = ticket de x pour utiliser y
A x ,y = authentifiant de x pour y
Tc.s ~ 5, { c , g , v , K CjS)./y s -
Un ticket est valable pour un seul serveur et un seul client. Il contient le nom du client
et son adresse réseau, le nom du serveur, une datation et une clef de session. Cette
information est chiffrée avec la clef secrète du serveur. Une fois que le client obtient ce
ticket, il peut l’utiliser plusieurs fois pour accéder au serveur, jusqu’à ce que le ticket
expire. Le client ne peut pas déchiffrer le ticket (il ne connaît pas la clef secrète du
serveur), mais il peut le présenter au serveur sous sa forme chiffrée. Personne ne peut
espionner le réseau pour lire ou modifier les tickets qui passent.
Un authentifiant K e r b e r o s ressemble à ceci :
Le client l’engendre chaque fois qu’il veut utiliser un service du serveur. L’authentifiant
contient le nom du client, une datation et une clef de session supplémentaire optionnelle,
tous chiffrés avec la clef de session partagés par le client et le serveur. Contrairement à
un ticket, il ne peut être utilisé qu’une fois. Toutefois, comme un client peut engendrer
les authentifiants suivant ses besoins (il connaît la clef secrète partagée), ce n’est pas
un problème.
L’authentifiant sert à deux choses. Primo, il contient du texte en clair chiffré avec la
clef de session. Cela prouve qu’il connaît également la clef. Mais, ce qui est tout aussi
important, le texte en clair scellé contient une datation. Un espion qui enregistre le
ticket et l’authentifiant ne peut pas les rejouer deux jours après.
7. Le reste ce cette section utilise les notations utilisées dans les docum ents K erberos — voir le
tableau 24.1.
24.5 K erberos 597
Kerberos Version 4
La section précédente a décrit K e r b e r o s V e r s i o n 5. K e r b e r o s V e r s i o n 4 dif
fère légèrement quant au contenu des messages et à la construction des tickets et des
9. Dans la réalité, le program m e peut faire cela autom atiquem ent et ce sera invisible à l’ utilisateur.
24-5 K erberos 599
authentifiants.
Dans K erberos V ersion 4, les cinq messages ressemblent à ceci :
1. Client vers K e r b e r o s : c , s d t .
A . Cls ~ {c,u,t}/éC)S.
Les messages 1, 3 et 5 sont identiques. Le double chiffrement des tickets pour les
messages 2 et 4 a été retiré dans la VERSION 5. Les tickets de la VERSION 5 offrent la
possibilité d’avoir des adresses multiples et ils remplacent le champs « life », 1, par un
temps de début et de fin de validité du ticket. L’authentifiant de la V ersion 5 offre la
possibilité d ’inclure une clef additionnelle.
Sécurité de Kerberos
Steve B ellovin et Michael M erritt décrivent diverses vulnérabilités potentielles de
K erberos au niveau de la sécurité [115]. Bien que cet article ait été écrit pour les
protocoles de laVERSlON 4, nombre de leurs commentaires s’appliquent également à la
V ersion 5.
Il serait possible d’engranger des anciens authentifiants et de les rejouer. Bien que les
datations soient supposées éviter cela, les messages peuvent être rejoués pendant la
durée de vie du ticket. Les serveurs sont supposés stocker les tickets valides pour éviter
que des messages soient rejoués, mais ce n’est pas toujours possible. De plus, la durée
de vie du ticket peut être longue ; huit heures est la moyenne.
Les authentifiants dépendent du fait que toutes les horloges du réseau sont plus ou
moins synchronisées. Si l’on peut tromper un ordinateur quant à l’heure réelle, alors
un ancien authentifiant peut être rejoué sans problème. La plupart des protocoles de
maintien du temps en réseau ne sont pas sûrs, ce qui peut donc être un défaut sérieux.
K erberos est aussi vulnérable aux attaques de paris de mots de passe. Un intrus
peut collectionner les tickets et ensuite essayer de les déchiffrer. Rappelez-vous que
l’utilisateur moyen ne choisit généralement pas des bons mots de passe. Si Martin
collecte suffisamment de tickets, ses chances de retrouver le mot de passe sont bonnes.
L ’attaque, la plus sérieuse peut-être, implique un logiciel malicieux. Le protocole K erb
eros repose sur le fait que le logiciel K erberos est digne de confiance. Rien n’empêche
Martin de remplacer subrepticement tous les logiciels K erberos clients par une ver
sion qui non seulement réalise les protocoles K erberos mais également enregistre les
mots de passe. C ’est un défaut commun à tous les logiciels cryptographiques qui sont
exécutés sur un ordinateur peu sûr, mais l’utilisation répandue de K erberos dans
ces environnements en fait une cible particulièrement attrayante. Des améliorations de
K erberos sont à l’étude, comprenant une réalisation de cryptographie à clef publique
et une interface à carte à puce pour la gestion de clef.
600 Chapitre 24 Exemples de réalisation
Licences
K e r b e r o s n’est pas dans le domaine public, mais le code du M IT est disponible
gratuitement . Dans les faits, utiliser ce code dans un environnement U N IX opérationnel
est une toute autre histoire. De nombreux magasins vendent des versions de K e r b e r o s ,
mais vous pouvez obtenir une bonne version gratuite auprès de Cygnus Support, 814
University Ave., Palo Alto, CA, 94301 ; (415) 322-3811 ; fax: (415) 322-3270.
24.6 KryptoKnight
K r y p t o K n i g h t (subtil, n o n ? )10 est un système d ’authentification et de distribution
de clef conçu par IBM . C ’est un protocole à clef secrète qui utilise soit le DES en
mode C B C (voir § 9.3), soit une version modifiée de M D5 (voir § 18.5).
K r y p t o K n i g h t offre quatre services de sécurité :
K rypto K n ig h t ne repose pas sur des horloges synchronisées ; il utilise des mots
créés p o u r à l ’occasion p o u r les challenges (voir § 3.3) ;
24.7 SESAME
SESAM E (pour « Secure European System for Applications in a Multivendor Environ
ment ») est un projet de sécurité de la communauté européenne, financé à 50 pourcent
par R A C E (voir paragraphe 25.7), dont l’objectif principal est la production de tech
nologie pour l’authentification des utilisateurs avec distribution du contrôle d’accès.
10. N ote du traducteur : en anglais, K ryptoK n ight se prononce com m e K ryptonite.
2f.8 Architecture cryptographique commune d T B M 601
opérations.
Le VC est vérifié dans un processeur sûr: il doit être en conformité avec les lois au
torisées par la C C A pour chaque fonction C C A . Si le VC passe le test, une variante
de la K E K ou M K est obtenue par la combinaison par ou exclusif de la K E K ou M K
avec le VC, et la clef du texte en clair est disponible pour une utilisation interne avec
la fonction C C A . Quand les nouvelles clefs sont générées, le VC précise les utilisations
possibles de la clef générée. Ces combinaisons de types de clefs qui pourraient être
utilisées pour attaquer le système ne sont pas générées ou importées dans un système
compatible C C A .
La C C A utilise une combinaison de cryptographie à clef publique et à clef secrète
pour la distribution des clefs. Le K D C partage une clef maîtresse secrète avec chaque
utilisateur et chiffre les clefs de séance avec cette clef maîtresse. Les clefs maîtresses
sont distribuées en utilisant la cryptographie à clef publique.
Les concepteurs du système ont choisi une approche hybride pour deux raisons. La
première est la performance. La cryptographie à clef publique est informatiquement
intense ; si les clefs de séance sont distribuées en utilisant la cryptographie à clef pu
blique, une erreur système peut intervenir. La seconde est la compatibilité récurrente ;
ce système peut être recouvert par des schémas à clef secrète avec une interruption
minimum.
Les systèmes C C A sont conçus pour être interopérables. Pour les systèmes non compa
tibles C C A , une fonction de traduction de vecteur de contrôle (C V X L T pour « Control
Vector Translate ») permet de passer les clefs entre les deux systèmes. L’initialisation
de la fonction C V X L T exige un double contrôle. Les deux parties doivent régler les
tables de traduction de façon indépendante. Un tel double contrôle garantit un haut
niveau d’assurance concernant l’intégrité et le pédigré de toute clef introduite dans le
système.
Une clef de type D A T A est fournie pour la compatibilité avec d’autres systèmes. Une
clef D A TA est stockée avec un VC qui l’identifie comme étant bien une clef DATA.
Les clefs D A TA sont d ’une utilisation très large et doivent donc être considérées avec
suspicion et utilisées avec prudence. Les clefs D ATA ne devraient pas être utilisées
dans les fonctions de gestion de clefs.
Le C D M F (pour « Commercial Data Maskmg Facility ») fournit une version exportable
de C C A . Elle a une caractéristique spéciale qui réduit les clefs DES à 40 bits pour
l’export (voir § 15.5) [785].
Certificats
La partie la plus importante du protocole X .509 est sa structure pour les certificats à
clefs publiques. Chaque utilisateur a un nom distinct. Une a u to rité de certifica tion
(C A pour « Certification Authority ») fiable assigne un nom unique à chaque utilisateur
et émet un certificat signé contenant le nom et la clef publique de l’utilisateur. La
figure 24.2 montre un certificat X .509 [309],
Version
Numéro de série
Identificateur de l’algorithme :
—Algorithme
—Paramètres
Délivreur
Période de validité :
—Pas avant ...
—Pas après ...
Sujet
Clef publique du sujet :
—Algorithme
—Paramètres
— Clef publique
Signature
Les certificats peuvent être stockés dans des bases de données sur le réseau. Les uti
lisateurs peuvent se les envoyer. Quand un certificat expire, il doit être retiré de tous
les répertoires publics. Toutefois, la C A émettrice doit garder une copie du certificat.
Elle sera nécessaire pour résoudre tout conflit ultérieur qui pourrait se produire.
Les certificats peuvent aussi être révoqués, soit parce que la clef de l’utilisateur a été
compromise, la clef de la C A a été compromise, soit parce que la C A ne veut plus
certifier l’utilisateur. Chaque C A doit garder une liste des certificats révoqués mais
non expirés. Quand Alice reçoit un nouveau certificat, elle devrait vérifier qu’il n’a pas
été révoqué. Elle peut consulter une base de données sur le réseau de clefs révoquées,
mais plus probablement, elle consultera plutôt une liste en mémoire cache locale de
clefs révoquées. Il y a sûrement des abus à ce système ; la révocation de clef en est la
partie la plus faible.
Les protocoles uni- et bi-directionnels utilisent tous deux des datations. Un protocole
tridirectionnel ajoute un message supplémentaire entre Alice et Bernard, qui permet
de se passer de datations (et donc d’heure authentifiée).
Le protocole unidirectionnel est donné par :
4° Bernard vérifie C a et obtient E a - Il vérifie que ces clefs n’ont pas expiré. (E a
est la clef publique d’Alice.)
5° Bernard utilise Ea pour chiffrer D a (A4). Il vérifie la signature d’Alice et l’in
tégrité des données signées.
6° Bernard vérifie l ’exactitude de I b dans A4.
7 ° Bernard vérifie Ta dans A4 et ainsi s ’assure que le message est d’actualité.
8° Optionnellement, Bernard peut chercher la partie R a de A4 dans une base de
données d’anciens nombres aléatoires pour vérifier que ce message n’est pas un
ancien message rejoué.
Documents PEM
Les spécifications du PE M proviennent de quatre documents :
- R F C 1424, P a r t IV , K e y C e r t i f i c a t i o n a n d R e l a t e d S e r v i c e s . Ce docu
ment décrit trois types de services pour le support de P E M : la certification de
clef, le stockage de la liste des certificats révoqués (C R L ) et l’accès à cette liste.
Les certificats
PEM est compatible avec l’environnement d’authentification décrit dans [309] ; voir
aussi [828].PE M est une sur-couche de X .509 ; il établit les procédures et les conven
tions pour une infrastructure de gestion de clefs à utiliser avec P E M et, dans le futur,
avec d ’autres protocoles (à la fois des suites T C P /I P et ISO).
L’infrastructure de gestion de clefs instaure une seule source pour toutes les certifi
cations sur P I n t e r n e t . L’« Internet Policy Registration Authority » (IP R A ) édicté
tous les règlements qui s’appliquent aux certifications dans la hiérarchie. A partir de
la racine IP R A on trouve les « Policy Certification Authorities » (P C A ), dont cha
cune instaure et publie ses règlements pour l’enregistrement des utilisateurs ou des
organisations. Chaque P C A est certifiée par l’IP R A . En dessous des P C A , les C A
certifient les utilisateurs et les entités subordonnées aux organisations (tels que les dé
partements, bureaux, filiales). Initialement, la majorité des utilisateurs sont supposés
être enregistrés au sein d’une organisation.
Certaines P C A sont censées offrir la certification pour les utilisateurs qui ne font pas
partie d’une organisation. Pour les utilisateurs qui veulent préserver leur anonymat tout
en ayant accès aux avantages du courrier à confidentialité renforcée de PE M , une ou
plusieurs P C A sont prévues pour établir les règlements qui permettent l’enregistrement
d’utilisateurs ne voulant pas divulguer leur identité.
Messages PEM
Le cœur d’un message P E M est son format. La figure 24.4 montre un message chiffré en
utilisant la gestion de clefs à clef secrète ; la figure 24.5 montre un message authentifié
608 Chapitre 24 Exemples de réalisation
LLrHB0eJzyhP+/fSStdW8okeEnv47jxe7SJ/iN72ohNcUk2jHEUSoHlnvNSIWL9M
8tEjmF/zxB+bATMtPjCUWbz8Lr9wloXIkjHUlBLpvXR0UrUzYbkNpk0agV2IzUpk
J6UiRRGcDSvzrsoK+oNvqu6z7Xs5Xfz5rDqUcMlKlZ6720dcBWGGsDLpTpSCnpot
dXd/H5LMDWnonNvPCwQUHt==
END PRIVACY-ENHANCED MESSAGE-----
et chiffré utilisant la gestion de clefs à clef publique et la figure 24.6 montre un message
authentifié mais non chiffré qui utilise la gestion de clefs à clef publique.
Le premier champ est « Proc-Type » qui identifie le type de traitement effectué sur le
message. Il y a trois types possibles de messages. L’identificateur « ENCRYPTED » signifie
que le message est chiffré et signé. Les identificateurs « MIC-ONLY » et « MIC-CLEAR »
indiquerait que le message est signé mais non chiffré. Les messages « MIC-CLEAR »
ne sont pas encodés et ils peuvent être lus par des logiciels non-PEM . Les messages
« MIC-ONLY » ont besoin d ’un logiciel P E M pour être transformés afin d’être lisibles par
un être humain. Un message PE M est toujours signé ; il est optionnellement chiffré.
Le champ suivant, « Content-Domain » spécifie le type de message. Il n’a rien à voir
avec la sécurité. Le champ « DEK-Info » donne ses informations sur la « Data Exchange
Key » (D E K , clef d’échange de données), l’algorithme utilisé pour chiffrer le texte et
n’importe quels paramètres associés à cet algorithme de chiffrement. Seul le DES,
ou « DES-CBC » est spécifié. Le second sous-champ spécifie l’IV. D ’autres algorithmes
pourraient à l’avenir être spécifiés pour PE M ; leur utilisation sera indiquée dans le
champ « DEK-Info » et dans d ’autres champs qui identifient les algorithmes.
Pour les messages avec gestion de clefs à clef secrète (voir figure 24.4), « O rig in a tor-
-ID-Symmetric » est le champ suivant, avec trois sous-champs. Le premier sous-champ
identifie l’expéditeur par une adresse de courrier électronique unique. Le deuxième sous-
champ est optionnel et identifie l’autorité qui a émis la clef d ’échange (l’IK décrite ci-
après). Le troisième sous-champ est un sous-champ optionnel « V e rsion /E x p ira tion ».
En continuant avec le cas de la gestion de clefs à clef secrète, à chaque destinataire sont
associés les deux champs: « R ecipient-ID -Sym m etric » et « K ey-Inf o » . Le champ
« R ecipient-ID -Sym m etric » a trois sous-champs; ils identifient le destinataire de la
même manière que le champ « O riginator-ID -Sym m etric » identifie l’expéditeur.
Le champ « K ey-Inf o » spécifie les paramètres de la gestion de clefs. Ce champ a quatre
sous-champs. Le premier sous-champ donne l’algorithme utilisé pour chiffrer la DEK.
Comme la gestion de clefs pour ce message est à clef secrète, l’expéditeur et le desti-
24-10 « Privacy-Enhanced Mail » ( P E M ) 609
qeWlj/YJ2Uf5ng9yznPbtD0mYloSwIuV9FRYx+gzY+8iXd/NQrXHfi6/MhPfPF3d
jIqCJAxvld2xgqQimUzoSla4r7kQQ5c/Iua4LqKeq3ciFzEv/MbZhA==
END PRIVACY-ENHANCED MESSAGE-----
nataire doivent partager une clef commune. C ’est ce que l’on appelle l’« Interchange
Key » (IK ) qui est utilisée pour chiffrer la D E K . La D E K peut soit être chiffrée avec le
DES en mode E CB (dénoté « DES-ECB ») ou avec le DES- triple (dénoté « DES-EDE »).
Le deuxième sous-champ spécifie l’algorithme pour le CIM (M IC). Cela peut être soit
MD2 (dénoté « RSA-MD2 ») soit M D 5 (dénoté « RSA-MD5 »). Le troisième sous-champ,
610 Chapitre 24 Exemples de réalisation
LSBBIGllc3NhZ2UgZm9yIHVzZSBpbiB0ZXN0aW5nLg0KLSBGb2xsb3dpbmcgaXMg
YSBibGFuayBsaW510g0KDQpUaGlzIGlzIHRoZSBlbmQuDQo=
END PRIVACY-ENHANCED MESSAGE-----
Sécurité de PEM
Les clefs R S A dans PE M peuvent avoir de 508 à 1024 bits. Cela devrait être assez long
pour les besoins de sécurité de n ’importe qui. Une attaque plus probable serait contre
le protocole de gestion des clefs. Martin peut voler votre clef privée ne l’écrivez
jamais nul part ou bien il peut essayer de vous duper en vous faisant accepter une
fausse clef publique. Les règles de certification des clefs de PE M rendent improbable
une telle attaque pour autant que les utilisateurs suivent scrupuleusement les bonnes
procédures, mais les gens ont une tendance naturelle à être négligents.
Une attaque plus insidieuse consisterait pour Martin à modifier la réalisation de P E M
qui tourne sur votre système. La réalisation modifiée pourrait subrepticement envoyer
à Martin tout votre courrier chiffré avec sa clef publique. Il pourrait même s’envoyer
une copie de votre clef privée. Si la réalisation modifiée fonctionne correctement, vous
ne serez pas au courant de ce qui se passe.
U n’y a pas de vrai moyen de se prémunir contre ce genre d’attaque. Vous pouvez utiliser
une fonction de hachage à sens unique pour associer une empreinte à l’exécutable de
PEM . Ainsi, chaque fois que vous l’exécutez vous pouvez vérifier l’empreinte pour
détecter une modification éventuelle. Mais Martin peut modifier le code de calcul de
l’empreinte en même temps qu’il modifie le code de PE M . Vous pourriez calculer
l’empreinte de l’empreinte, mais Martin peut modifier cela aussi. En fait, si Martin a
accès à votre machine, il peut subvertir la sécurité de PEM .
La morale de cette histoire est que vous ne pouvez jamais vraiment faire confiance
à un morceau de logiciel si vous ne pouvez pas avoir confiance dans la machine qui
l’exécutera. Pour la plupart des gens, ce type de paranoïa est injustifié. Pour d ’autres,
c’est très concret.
T IS/P E M
T r u s t e d I n f o r m a t i o n S y s t e m s , partiellement subventionnée par l’agence « Advan
T IS /P E M est actuellem ent disp on ib le p o u r tou tes les organisations et tou s les citoyens
am éricains et canadiens qui en fon t la dem ande. T IS /P E M est distribué sous form e de
co d e source. Les personnes intéressées doivent co n ta cte r : P r iv a c y -E n h a n c e d M a il,
T r u s te d I n fo r m a t io n S y s te m s , I n c . , 3060 W a sh in g ton Road (R t e . 9 7 ) ,
G len w ood , MD 2 1 7 3 8 , USA; +1 (3 0 1 ) 8 5 4 - 6 8 8 9 ; F a x: +1 (3 0 1 ) 8 5 4 - 5 3 6 3 ;
I n t e r n e t : p e m -in fo @ t is .c o m .
RIPEM
R IP E M est un programme écrit par Mark R i o r d a n qui réalise les protocoles PEM.
Bien que ce programme ne soit pas techniquement pas dans le domaine public, il est
disponible publiquement et peut être utilisé sans paiement de royalties pour les appli
cations à usage individuel non commerciales. Une licence d’exploitation accompagne
la documentation.
Le code ne peut pas être exporté hors des Etats-Unis et du Canada. Naturellement, les
lois du Gouvernement américain ne s’appliquent pas hors des Etats-Unis et les gens ont
ignoré les règles d ’exportation. Le code de R IP E M est disponible à travers le monde
entier sur des tableaux d ’affichage. Le R IP E M /S IG , qui ne fait que des signatures
digitales, est exportable.
A la parution de ce livre, R IPE M n’est pas une réalisation complète des protocoles
PE M ; il ne réalise pas les certificats pour les clefs d ’authentification.
Avant d’écrire R IP E M , R i o r d a n a écrit un programme similaire appelé R PE M . Ce
dernier devait être un programme du domaine public de courrier électronique chiffré.
Pour éviter les problèmes de brevet, R i o r d a n avait utilisé l’algorithme de R a b i n (voir
§ 19.5). Mais P u b l i c K e y P a r t n e r s prétendit que leurs brevets sont assez larges
pour couvrir toute la cryptographie à clef publique et a menacé d’attaquer en justice ;
R i o r d a n a arrêté de distribuer R PE M .
R P E M n ’est plus vraim ent utilisé. Il n ’est pas com patible avec R IPE M . Com m e
R IP E M peut être utilisé avec la bénédiction de P u b l i c K e y P a r t n e r s , il n ’y a
pas de raison de lui préférer R PE M .
11. P G P n ’est pas dans le dom aine public. Il porte un copyright de Philip ZlMMERMANN et il est
disponible librem ent suivant les termes de la « “ C o p y le ft ” G e n e r a l P u b lic L ic e n s e » de la FREE
S o f t w a r e F o u n d a tio n .
Chapitre 24 Exemples de réalisation
Deux signatures dignes de confiance peuvent être suffisantes pour certifier une clef.
Alice pense que la clef de Karine est valide car David et Etienne l’ont signée. Ce n’est
pas automatique avec P G P ; Alice peut régler son propre niveau de paranoïa.
Ce n’est pas parce qu’Alice croit qu’une clef est valide qu’elle doit lui faire confiance
pour signer les clefs d’autres personnes. Elle ne fait pas confiance à Francis pour signer
les clefs publiques d ’autres personnes, même si elle a elle-même signé sa clef. Elle ne
fait pas confiance en la signature de Jean sur la clef de Martin, ni en celle de Karine
24-13 Cartes à puce 615
1° Alice envoie à Bernard son nom à elle, A, son nom à lui, B , et un nombre
aléatoire, Ra, chiffré en utilisant le DES : d ’abord avec K 2 puis avec K\. Elle
lui envoie aussi son nom en clair.
A , E k 1 ( E k 2 ( A , B , Ra ))•
E k 2(A, B, Ra ).
E k 3(B, A, Rb )-
E Kl (E k 4(A,B,C)).
Un aspect très intéressant de ce protocole est que la clef de chiffrement pour chaque
message dépend du message précédent. Chaque message double en tant qu’authentifiant
de tous les précédents messages. Ceci implique qu’on ne peut pas rejouer un ancien
message ; le destinataire ne pourrait jamais le déchiffrer. Je suis enthousiasmé par cette
idée et espère qu’elle sera plus largement utilisée une fois qu’elle sera plus connue.
Un autre aspect très intéressant de ce protocole est qu’il oblige les applications à être
correctes. Si le concepteur de l’application n ’introduit pas correctement le protocole, il
ne marchera pas.
Les deux cartes gardent en mémoire le relevé de toutes les transactions. Quand les
cartes sont mises en ligne pour communiquer avec la banque (quand le commerçant
dépose son argent et que le client en retire), la banque charge ce relevé dans un but de
contrôle.
La puce résistante à l’investigation empêche les participants d’altérer les données;
Alice ne peut pas changer la valeur de sa carte. Des recherches intensives fournissent
les données pour identifier et tracer les transactions frauduleuses. U y a des secrets
universels dans les cartes (les clefs C A M dans les cartes-clients, les fonctions pour
convertir les noms des clients en K± et K 2 dans les cartes-commerçants) mais ils sont
supposés être difficile à découvrir.
620 Chapitre 24 Exemples de réalisation
Ce schéma n’est pas supposé être parfait, simplement plus sûr que les traditionnels
contrôles sur papier ou cartes de débit. La menace de la fraude ne vient pas de puis
sances militaires rivales, mais de clients et commerçants opportunistes. UEPS protège
contre ce type d ’abus.
L ’échange de messages est un excellent exemple de protocole robuste : chaque message
nomme les deux parties, inclut des informations uniques pour confirmer l’actualité et
dépend explicitement de tous les messages précédents.
24.16 Clipper
La puce C l i p p e r (aussi appelée M Y K -7 8 T ) a été conçue par la NSA, est du type VLSI
résistante à l’investigation et est dédié au chiffrement des conversations vocales ; c’est
une des deux puces qui applique le standard de chiffrement par clefs sous dépôt (EES
pour « Escrowed Encryption Standard ») du gouvernement américain [1173], VLSI
Technologies, Inc. fabrique la puce, et Mykotronx, Inc. la programme. Pour commencer,
la puce C l i p p e r sera intégrée dans le modèle 3600 du dispositif de sécurité du téléphone
d ’A T & T (voir § 24.18). La puce utilise l’algorithme de chiffrement S K IP J A C K (voir
§ 13.12), conçu par la NSA et classé algorithme secret de chiffrement de clefs, en mode
O F B seulement.
L’aspect le plus controversé de la puce C l i p p e r , et de tout l’EES, est le protocole de
dépôt de clef (voir § 4.14). Chaque puce a une clef spéciale, qui n’est pas nécessaire pour
les messages. Cette clef est utilisée pour chiffrer une copie de la clef utilisée par chaque
utilisateur pour chiffrer ses messages. Lors du processus de syncronisation, la puce
C l i p p e r émettrice génère et envoie un champ d’accès de respect de la loi (L E A F pour
« Law Enforcement Access Field ») à la puce C l i p p e r réceptrice. Le L E A F contient
une copie de la clef de séance courante, chiffrée avec une clef spéciale (appelée clef
d ’unité). Ceci permet au personnel du gouvernement12 de découvrir la clef de séance
et ainsi d’écouter le contenu de la conversation.
D ’après le directeur du N IST [802] :
K f est programmé dans la puce C l i p p e r au niveau de l’usine. Cette clef est alors divi
sée en deux (voir § 3.5) et est stockée dans deux bases de données de dépôt différentes,
gardées par deux agences de dépôt différentes.
Si Estelle veut obtenir K s à partir du L E A F , elle doit d’abord déchiffrer le LEAF
avec Kp et retrouver U. Puis elle doit présenter un ordre judiciaire à chaque agence
de dépôt, qui chacune lui donnera une moitié de K f pour le U donné. Estelle combine
par ou exclusif les deux moitiés pour obtenir K f , puis elle utilise K f pour obtenir
K s , et K s pour espionner la conversation.
La somme de contrôle est conçue de façon à ce que personne ne puisse contourner ce
schéma ; la puce C l i p p e r réceptrice ne déchiffrera pas si cette somme de contrôle ne
correspond pas. Néanmoins, il n’y a que 216 valeurs possibles de sommes de contrôle, et
un faux LE A F avec une somme de contrôle correcte mais avec une mauvaise clef peut
être trouvé en à peu près 42 minutes [195]. Ce qui n’est pas d’une très grande efficacité
pour les conversations vocales en mode C l i p p e r . D u fait que le protocole d’échange
de clefs n’est pas partie intégrante de la puce C l i p p e r , une attaque exaustive de 42
minutes doit être menée après l’échange de clefs ; elle ne peut pas être menée avant
l’appel téléphonique. Cette attaque peut fonctionner lors de transmissions de facsimilés
ou avec la carte Fortezza (voir § 24.17).
En principe, la puce C l i p p e r est résistante à l’investigation « contre des adversaires
très sophistiqués et très bien financés » [1174], mais des rumeurs disent que les « Sandia
National Laboratories » ont réussi. Même si ces rumeurs sont fausses, je suis persuadé
que le plus grand constructeur de puces dans le monde peut violer la puce C l i p p e r ;
c’est juste une question de temps avant que quelqu’un avec la bonne combinaison de
ressources et d’éthiques n’y arrive.
D’énormes problèmes de respect de la vie privée sont associés à ce schéma. Il y a de
nombreux groupes défenseurs de la liberté civile qui luttent activement contre tout
mécanisme de dépôt de clef qui donnerait le droit au gouvernement d’espionner les
citoyens. Mais le problème est que cette idée n’est jamais passée par le Congrès; le
NIST a publié le standard de chiffrement par clefs sous dépôt en tant que FIPS [1173],
court,-cicuitant ainsi cet irritant processus législatif. A l’heure actuelle, il semble que
l’EES meurt d’une mort lente et douce, mais les standards ont leur manière de vous
surprendre.
Le tableau 24.2 donne la liste des différentes agences participant à ce programme.
Quelqu’un veut-il porter un jugement critique sur le fait que les deux agents de dépôts
soient dans la branche exécutive, ou sur le fait qu’ils ne connaissent rien à propos des
demandes d ’écoutes et ne font que les approuver aveuglément, ou sur le fait que le
622 Chapitre 24 Exemples de réalisation
24.17 Capstone
C a p s t o n e (aussi appelée M Y K -80) est l’autre puce cryptographique VLSI développée
par la NSA qui applique le standard de chiffrement par clefs sous dépôt du gouverne
ment américain [1173]. C a p s t o n e inclut les fonctions suivantes [1170, 468] :
OFB;
génère avec Bernard à avoir la même valeur de hachage. Cette attaque ne semble peut-
être pas être probable, mais le T S D utilise une variante du protocole à cliquets pour
la déjouer.
Le T S D génère des nombres aléatoires en utilisant une source de bruits et un ampli
ficateur à rétroaction numérique. Ceci créé un flot de bits, qui est ensuite transformé
en bruit blanc par filtrage au moyen d’un processeur de signaux numériques.
Malgré tout cela, le manuel du TSD ne parle absolument pas de sécurité. En fait, il
dit [75] :
Politique
Jam es B A M FO R D a écrit un livre fascinant sur la NSA: « The Puzzle Palace » [86]
25.2 « National Computer Security Center » ( N C S C ) 627
Ce programme est toujours en vigueur, mais n’est jamais devenu populaire en dehors
du gouvernement. Tous les modules étaient inviolables, tous les algorithmes étaient
classés secrets et il fallait vous procurer vos clefs auprès de la NSA. Les sociétés n ’ont
jamais aimé l’idée d’utiliser des algorithmes classés secrets dictés par le gouvernement.
On pourrait penser que la NSA aurait appris cette leçon et ne se serait pas lancée dans
les Clipper, Skipjack et autres puces de chiffrement par clefs sous dépôt.
le livre a une couverture orange. L ’O range B ook tente de définir les exigences en
matière de sécurité, donne au x fabricants d ’o rdinateurs un m oyen o b je ctif de mesurer
le niveau de sécurité de leurs systèmes et les aide à personnaliser leurs produits de
sécurité. Il se concentre sur la sécurité inform atique et ne dit vraim ent pas grand chose
à propos de cryptographie.
L ’O r a n g e B o o k définit quatre grandes divisions de niveau de protection de sécurité.
Il définit également des classes de protection au sein de certaines de ces divisions. Elles
sont résumées dans le tableau 25.2.
D : Sécurité minimale
C : Protection discrète
C l : Protection par sécurité discrète
C2 : Protection par contrôle d ’accès
B : Protection obligatoire
B I : Protection par sécurité étiquetée
B2 : Protection structurée
B3 : Domaines de sécurité
A : Protection vérifiée
A l : Conception vérifiée
Quand les fabricants disent des choses comme « nous offrons la sécurité C2 », c’est
de cela qu’ils parlent. Pour plus d’informations à ce propos, lisez [1367]. Le modèle de
sécurité informatique utilisé dans ces critères s’appelle le modèle B e l l - L a P a d u l a [108,
107, 109, 110].
Le N CSC a publié toute une série de livres sur la sécurité informatique, parfois appelés
les livres arc-en-ciel (« Rainbow Books », les couvertures ont chacune une couleur diffé
rente). Par exemple, « Trusted Network Interprétation of the Trusted Computer System
Evaluation Criteria » [1148], parfois appelé R e d B o o k , donne une interprétation de
I’ O r a n g e B o o k pour les réseaux et les équipements de réseau. Le « Trusted Database
Management System Interprétation of the Trusted Computer System Evaluation Crite
ria » [1150] — je ne peux même pas commencer à décrire la couleur de sa couverture
— fait la même chose pour les bases de données. Il y a ainsi plus de trente de ces livres
à l’heure actuelle, certains avec une couverture de couleur hideuse.
Pour commander un jeu complet des R a i n b o w B o o k s , écrivez au Director,
National Security Agency, INFOSEC Awareness, Attention: C81, 9800
Savage Road, Fort
George G. Meade, MD 20755-6000, USA, Tél: +1 (301) 766-8729.
Ne leur dites pas que c ’est moi qui vous envoie.
2. Les inform ations classées et les données qui sont définies par le « W a r n e r A m e n d a ie n t » sont
sous la ju rid iction de la N SA .
630 Chapitre 25 Politique
individuelle.
« 3. D ’être à l’écoute des demandes du NIST en matière d ’aide pour
toutes les matières liées aux algorithmes et aux techniques cryptogra
phiques, notamment la recherche, le développement, l’évaluation ou l’ac
ceptation.
« 4. Appliquer les standards et participer à l’acceptation des produits
pour les applications informatiques de sécurité couvertes par la section 23.15
(10 USC) (l’amendement Warner).
« 5. A la requête des agences fédérales, de leur contractants et des autres
entités subventionnées par le gouvernement, d’assurer l’évaluation du risque
d’attaque par des agents hostiles des systèmes informatiques fédéraux, et
de fournir aide technique et recommandations quant aux produits acceptés
pour les applications des systèmes de sécurité visant à lutter contre ces
attaques.
« III. Le NIST et la NSA s’engagent à:
« 1. Examiner conjointement les projets pour la sécurité et la confiden
tialité des systèmes informatiques soumis au NIST et à la NSA en accord
avec la section 6(b) de l’Acte.
« 2. Echanger les standards techniques et les recommandations néces
saires pour réaliser les objectifs de l’Acte.
« 3. Collaborer pour atteindre les objectifs de ce protocole avec la plus
grande efficacité possible, en évitant les doubles emplois inutiles.
« 4. Entretenir un dialogue ouvert pour garantir que chaque organi
sation reste au courant des technologies et des thèmes naissants affectant
l’automatisation de la sécurité de l’information dans les systèmes informa
tiques.
« 5. Créer un groupe de travail technique qui examinera et analysera les
sujets d’intérêt mutuel relevant de la protection des informations sensibles
ou non classées. Le groupe devrait être composé de six employés fédéraux,
trois choisis par le NIST et trois choisis par la NSA et il serait augmenté
si nécessaire par des représentants des autres agences. Les sujets pourront
être proposés au groupe par le sous-directeur à la sécurité de l’information
de la NSA, ou pourront être soulevés et traités par le groupe lui-même avec
l’approbation du sous-directeur à la sécurité de l’information de la NSA
et du sous-directeur du NIST. Pendant la période d ’évaluation d’un sujet
soumis au groupe soit par le sous-directeur à la sécurité de l’information de
la NSA soit par le sous-directeur du NIST, le groupe fournira des rapports
sur l’état d ’avancement et des plans pour les éventuelles analyses futures.
« 6. Echanger des plans de travail sur une base annuelle pour tous les
projets de recherche et de développement relevants de la protection des sys
tèmes qui traitent des informations sensibles ou non classées, y compris les
technologies sûres, pour la préservation de l’intégrité et de la disponibilité
des données, la sécurité des télécommunications et les méthodes d’identifi
cation individuelles. Les mises à jour des projets seront échangées tous les
trimestres et les évaluations des projets seront fournies à l’autre partie sur
demande.
« 7. Garantir l’analyse par le groupe de travail technique, avant toute
632 Chapitre 25 Politique
« Ces brevets [4 200 770, 4 218 582, 4 405 829 et 4 424 414] couvrent toutes
25.5 « Public Key Partners » ( 'P K P ) 633
- Coût faible.
Une inscription d’algorithme n’est ni une garantie sur sa qualité, ni son approbation
par IS O /IE C . L ’inscription indique tout juste qu’une simple entité nationale veut
enregistrer l’algorithme, basé sur un critère considéré par cette entité.
Je ne suis pas emballé par cette idée. L ’inscription bloque le processus de standardisa
tion. Plutôt que d ’accepter quelques algorithmes, ISO autorise l’inscription de tous les
algorithmes, avec si peu de contrôle sur ce qui est inscrit, affirmant qu’un algorithme
« IS O /IE C 9979 Registered » est bien mieux qu’il ne parait être.
Dans tous les cas, le registre est tenu par le National Computer Centre Ltd., Oxford
Road, Manchester, M l 7ED, Royaume-Uni.
5.10 Groupes industriels, de défense des libertés civiles, et professionnelles 637
25.11 Sci.crypt
S c i .CRY p t est le forum Usenet pour la cryptologie. Il est lu par à peu près 100000 per
sonnes à travers le monde entier. La plupart des messages ne veulent rien dire ou sont
polémiques, voire les deux ; certains sont de nature politique et le reste consiste princi
palement en des demandes d ’informations ou des questions élémentaires. Occasionnel
lement, il y a des pépites d’informationsneuves et utiles qui sontadressées auforum.
Si vous suivez régulièrement s c i . cryp t, vous apprendrez commentutiliser ce qui s’ap
pelle le « tueur de fichiers ».
Un autre forum Usenet est le sci.scrypt.research, un forum modéré dévoué aux discus
sions sur la recherche cryptologique. Il y a moins de messages et ils sont plus intéres
sants.
25.12 Cypherpunks
Les « CYPHERPUNKS » sont un groupe informel de gens intéressés par l’enseignement
et l’apprentissage de la cryptographie. Ils expérimentent également la cryptographie et
essaient de la mettre en œuvre. De leur point de vue, toute la recherche cryptographique
au monde ne sert à rien pour la société si elle n’est pas mise en œuvre.
Dans « A Cypherpunk’s Manifesto », E r i c H u g h e s écrit [746] :
Les personnes souhaitant être incluses dans la liste courrier des C y p h e r p u n k s sur
Internet peuvent envoyer un courrier à majordomo@toad.com.. Ce listing est archivé à
ftp.csua.berkeley.edu dans /pub/cypherpunks.
25.13 Brevets 639
25.13 Brevets
La problématique des brevets3 en matière de logiciel dépasse largement le cadre de cet
ouvrage. Qu’ils soient bons ou mauvais, ils existent. Les algorithmes, algorithmes cryp
tographiques inclus, peuvent être brevetés aux Etats-Unis. IB M détenait les brevets du
DES [516]. Presque tous les algorithmes de cryptographie à clef publique sont brevetés.
Le N IST a même un brevet pour le D SA . Certains brevets cryptographiques ont été
bloqués à la demande de la NSA, dans le cadre des pouvoirs qui lui sont conférés par
l’« Invention Secrecy Act » de 1940 et le « National Security Act » de 1947. Ceci veut
dire qu’à la place d’un brevet, l’inventeur obtient un ordre de discrétion et il lui est
interdit de discuter de son invention avec qui que ce soit.
La N SA a une dispense spéciale quand il s’agit de brevets. Elle peut faire une demande
de brevet puis bloquer son homologation. Là encore, c’est un ordre de discrétion, mais
la NSA est alors à la fois l’inventeur et l’autorité donnant l’ordre. Quand, bien plus
tard, l’ordre de discrétion est levé, le « Census Office » octroie le brevet pour les 17
années réglementaires. Ceci protège clairement l’invention tout en la gardant secrète.
Si quelqu’un d ’autre invente la même chose, la NSA a déjà fait une demande de brevet.
Si personne d’autre ne fait la même invention, alors elle reste secrète.
Non seulement ce système est une entorse à tout le processus de délivrance des brevets,
qui est censé révéler et protéger les inventions, mais il permet aussi à la NSA de
conserver un brevet pendant plus de 17 ans. Le décompte des années commence en
effet après que le brevet soit délivré, et non pas quand la demande est enregistrée. Les
perspectives d’évolution de ce système, maintenant que les Etats-Unis ont ratifié le
G A T T , ne sont pas claires.
3. N ote du traducteur : les brevets don t il est question dans cette section sont tous américains.
4. N ote du traducteur : toutes les inform ations reprises dans cette section concernent principalement
les règles d ’exportation américaines. Elles ne s’ appliquent à vous que si vous devez exporter de la
cryptographie hors des Etats-Unis. T outefois ces règles vous concernent mêm e si vous ne vivez pas
aux Etats-Unis car elles conditionnent la nature des dispositifs cryptographiques mis à votre disposition
dans le reste du m onde (quand ceux-ci sont originaires des Etats-Unis bien sûr). Chaque pays a ses
propres réglem entations en m atière de cryptographie. Avant d ’ im porter ou d ’ exporter des dispositifs
cryptographiques, prenez les conseils d ’ une personne avisée et spécialisée en ces matières (il est conseillé
de consulter un b on avocat).
640 Chapitre 25 Politique
non officielle et non contractuelle, créée pour coordonner les restrictions nationales sur
l’exportation de technologies militaires sensibles vers l’Union Soviétique, vers d’autres
pays du Pacte de Varsovie et vers la République Populaire de Chine. Des exemples de
technologies contrôlées sont les ordinateurs, les machines-outils telles que les fraiseuses
et la cryptographie. Le but recherché était de ralentir le transfert de technologie vers
ces pays, et par conséquent de maintenir leurs forces armées à un niveau inférieur.
Depuis la fin de la Guerre Froide, les pays du C oC om ont réalisé que beaucoup de leurs
contrôles étaient obsolètes. Aussi, ils seraient en train de définir un « New Forum »,
une autre organisation multinationale dont le but sera de stopper le flot de technologies
militaires vers des pays que les membres n’apprécient pas particulièrement.
De toutes façons, la politique américaine d’exportation des biens stratégiques est dé
finie par l’« Export Administration Act », l’« Arms Export Control Act », l’« Atomic
Energy Act » et le « Nuclear Non-Proloferation Act » Les contrôles établis par toutes
ces législations sont effectués par de nombreuses ordonnances, aucune d’entre-elles
n’étant en coordination avec les autres. Plus d’une douzaine d’agences, y compris les
services militaires, effectuent des contrôles ; souvent, leurs programmes s’entremêlent
ou se contredisent.
Les technologies contrôlées apparaissent sur plusieurs listes. La cryptographie a tou
jours été classée comme arme de guerre et apparait sur la « U.S. Munitions List »
(U SM L), la « International Munitions List » (IM L), la « Commerce Control List »
(C C L ) et la « International Industrial List » (HL). Le Département d ’Etat est res
ponsable de la USM L ; elle est publiée dans les « International Traffic in Arms
Régulations » (IT A R ) [472, 473].
Deux agences gouvernementales contrôlent l’exportation de cryptographie. L ’une est
le « Bureau of Export Administration » (B X A ) au Département du Commerce, régie
par les « Export Administration Régulations » (E A R ). L’autre est l’ « Office of Defense
Trade Controls » (D T C ) du Département d’Etat, régie par les IT A R . A vue de nez, le
B X A du Département du Commerce est beaucoup moins exigeant, mais le D T C du
Département d ’Etat (qui prend ses conseils techniques et de sécurité nationale auprès
de la NSA et qui semble toujours suivre ces conseils) analyse toutes les exportations
de cryptographie en premier et peut refuser le transfert de la juridiction au B X A .
Les IT A R règlent ces matières5 ; ce changement de dénomination est probablement
le résultat d ’un effort de relations publiques destiné à nous faire oublier qu’il s’agit
d’armes et de bombes. Historiquement, le D T C était réticent à accorder des licences
d’exportation pour des produits de codage supérieurs à un certain niveau — bien qu’il
n’ait jamais déclaré publiquement quel était ce niveau.
Les paragraphes suivants, qui ont trait à la cryptographie, sont extraits des IT A R [472,
473]6 :
« § 120.17 Exportation
« Exporter signifie:
« (1) Envoyer ou emporter hors des Etats-Unis de quelque façon que ce
soit des documents liés à la défense, à l’exception des connaissances tech
niques personnelles qui voyagent de par le déplacement de leur détenteur ;
ou
« (2) Transférer un enregistrement, un contrôle ou un titre de propriété
à une personne étrangère d’un avion, d’un navire, ou d’un satellite repris
dans la liste des munitions américaines, que ce soit aux Etats-Unis ou à
l’étranger ; ou
« (3) Divulguer (oralement ou visuellement) ou transférer au sein des
Etats-Unis tout article de défense auprès d ’une ambassade, toute agence
ou représentation d ’un gouvernement étranger (par exemple, les représen
tations diplomatiques) ; ou
« (4) Divulguer (oralement ou visuellement) ou transférer des données
techniques à une personne étrangère, que ce soit aux Etats-Unis ou à l’étran
ger; ou
« (5) Offrir des services liés à la défense à la place de ou pour le bénéfice
d ’une personne étrangère, que ce soit aux Etats-Unis ou à l’étranger.
« (6) Une fusée de lancement ou sa charge utile ne doivent pas, de par
le lancement d ’un tel véhicule, être considérés comme une exportation dans
le sens de ce sous-chapitre. Toutefois, pour certains objectifs restreints (voir
§ 126.1 de ce sous-chapitre), le contrôle de ce sous-chapitre s’applique à la
vente et autres transferts d ’articles ou de services de défense.
« (v) Limités aux accès contrôlés, tels que les guichets automatiques,
les imprimantes automatiques de position de compte ou les terminaux de
points de vente, protégés par un mot de passe ou un code d ’identification
(Personal Identification Number - PIN) ou des données similaires pour em
pêcher l’accès non autorisé aux installations, mais qui ne permettent pas
le chiffrement de fichiers ou de textes, mis à part ce qui est directement
affecté à la protection du PIN.
« (vi) Limités aux authentifications de données qui calculent un
« Message Authentication Code » (C A M ) ou un résultat similaire pour
s’assurer qu’aucune altération de texte n’est apparue, ou pour identifier
l’utilisateur, mais ne permet pas le chiffrement de données, de textes ou
d’un autre média autre que ceux nécessaires à l’authentification.
« (vii) Limités à des techniques de compression ou de chiffrement de
données fixes.
« (viii) Limités à la réception d ’émissions radios, télévision à péage ou
tout autre émission destinée à un public restreint, sans chiffrement digital et
où le déchiffrement digital est limité à la vidéo, à l’audio ou à des fonctions
de gestion.
« (ix) Des logiciels créés ou modifiés pour se protéger de tout piratage
informatique (un virus par exemple).
« (2) Des systèmes cryptographiques (y compris ceux de gestion de clef),
des équipements, des pièces détachées, des modules, des circuits intégrés,
des composants ou logiciels capables de produire des codes correcteurs pour
des systèmes ou des équipements spectraux de diffusion.
« (3) Des systèmes cryptographiques, des équipements, des pièces dé
tachées, des modules, des circuits intégrés, des composants ou des logiciels.
C’est la règle affirmée de la NSA de ne pas restreindre l’exportation des produits d’au
thentification, seuls les produits de chiffrement étant concernés. Si vous voulez exporter
646 Chapitre 25 Politique
requiert des éditeurs une inscription auprès du gouvernement, créant ainsi une
"presse accréditée” ,
est trop vague pour que des personnes ordinaires puissent savoir quelle conduite
est autorisée et laquelle ne l’est pas,
25.15 Importation et exportation de cryptographie
- englobe trop de choses car il interdit une conduite qui est clairement protégée
(parler à des étrangers aux Etats-Unis, par exemple),
- dépasse son autorité accordée par le Congrès pour les lois de contrôle des expor
tations, ainsi que celle accordé par la Constitution.
Tout le monde pense que statuer sur ce cas prendra plusieurs années et personne ne
sait comment cela finira.
Entre-temps, le « Computer Security and Privacy Advisory Board », un comité consul
tatif officiel du N IST, a voté en mars 1992 pour recommander la révision des règles
nationales en matière de cryptographie, y compris les règles d ’exportation. Ils disent
que les règlements sont édictés exclusivement par les agences impliquées dans la sécurité
nationale, sans consultation des agences concernées par l’encouragement du commerce.
Les agences préoccupées par la sécurité nationale font tout leur possible pour s’assurer
que ces règlements ne changent pas, mais il va bien falloir qu’ils évoluent.
- Israël a des restrictions sur l’importation, mais personne ne semble les connaître.
25.16 Légalité
Est-ce que les signatures numériques sont de vraies signatures? Ont-elles une valeur
en justice? Certaines investigations légales préliminaires indiquent que les signatures
numériques pourraient satisfaire les critères de signatures liant leur signataire pour la
plupart des utilisations, notamment l’utilisation commerciale telle que définie par le
« Universal Commercial Code » (U C C ). Une décision du « Government Accounting
Office » (G A O ), prise à la requête du N IST, confirme que les signatures numériques
satisferaient les standards légaux des signatures manuscrites [366].
Le « Utah Digital Signature Act » a pris effet le 1er mai 1995, procurant un cadre légal
pour l’utilisation de signatures digitales dans le système judiciaire. La Californie en
mesure les effets, l’Orégon et Washington écrivent encore le leur. Le Texas et la Floride
suivent derrière. D ’ici à la publication de ce livre, d’autres Etats auront suivi.
L ’ « American Bar Association » (ED I et 1’ « Information Technology Division »
de la « Science and Technology Section ») propose un modèle d ’acte que les Etats
peuvent utiliser pour leur propre législation. Cet acte tente d’incorporer les signa
tures digitales dans l’infrastructure existante légale pour les signatures : le « Uniform
Commercial Code », la règlementation de la « United States Fédéral Reserve », la loi
commune des contrats et signatures, la « United Nations Convention on Contracts for
25.16 Légalité 649
Un des plus dangereux aspects de la cryptologie (et par extension, de ce livre), est que
vous pouvez presque la mesurer. La connaissance de la longueur de clef, de la méthode
de factorisation et des techniques cryptanalytiques rend possible l’estimation (en l’ab
sence d’une réelle théorie de la conception d’algorithmes de chiffrement) du « facteur
travail » nécessaire pour casser un algorithme de chiffrement particulier. Il est trop
tentant d ’abuser de ces estimations, comme si elles n’étaient en général qu’une sécurité
adaptée aux systèmes dans lesquels elles sont utilisées. Le monde réel offre à l’atta
quant, un menu bien plus riche en options qu’une simple cryptanalyse. Les protocoles
d’attaques sont souvent plus inquiétants, le cheval de Troie, les virus, la surveillance
électromagnétique, les compromis physiques, le chantage et les intimidations des dé
tenteurs de clefs, les bogues des systèmes d’exploitation, les bogues des programmes
d’application, les problèmes de matériels, les erreurs de l'utilisateur, les oreilles indis
crètes, la corruption et la fouille de poubelles, pour en nommer quelques-uns.
Les chiffres et les protocoles de bonne qualité sont des outils importants, mais sont
de pauvres substituts à une réflexion sur ce qui est véritablement protégé et sur les
différentes manières dont une défense peut s’effondrer (les pirates, après tout, se li
mitent rarement aux modèles de menaces propres et bien définis du monde acadé
mique). Ross A n d er so n nous donne des exemples de systèmes cryptographiques forts
(dans le domaine bancaire) qui ont cédé sous des attaques réelles [44, 45]. Même quand
un assaillant n’a accès qu’au texte chiffré, des brèches apparemment mineures dans
d’autres parties du système peuvent laisser fuir assez d ’information pour que de bons
systèmes cryptographiques deviennent inutiles. Les Alliés pendant la Seconde Guerre
Mondiale ont cassé le trafic par E n ig m a allemands en exploitant largement les erreurs
des opérateurs [1589].
Une connaissance employée à la N SA ironise, quand on lui demande si le gouvernement
peut casser le trafic DES, sur le fait que les vrais systèmes sont si peu sûrs qu’ils
n’ont pas besoin de s’en donner la peine. Hélas, il n’existe pas de recette facile pour
rendre un système sûr, aucun substitut à une conception soigneuse et critique, avec une
attention minutieuse. Les bons systèmes cryptographiques ont la propriété de rendre
la vie des assaillants beaucoup plus dure que celle des simples utilisateurs ; ce n’est pas
le cas dans la plupart des autres aspects concernant la sécurité des ordinateurs et des
communications. Regardez la liste suivante des dix plus grandes menaces à la sécurité
des systèmes réels ; toutes sont plus faciles à exploiter qu’à éviter.
1. L’état désastreux du logiciel. Chacun sait que personne ne sait écrire un logiciel.
Les systèmes modernes sont complexes, avec des centaines de milliers de lignes
de codes ; chacune d ’entre-elles a des chances de compromettre la sécurité. Des
652 Postface de Matt Blaze
erreurs fatales peuvent même être très éloignées de la partie dédiée à la protection
du logiciel.
3. Manque de place pour stocker les secrets. Les systèmes cryptographiques pro
tègent les secrets importants par des plus petits (clefs). Hélas, les ordinateurs
modernes ne sont pas vraiment bons pour protéger même les plus petits secrets.
Les stations de travail multi-utilisateurs en réseau peuvent être infiltrées et leurs
mémoires compromises. Les unités à utilisateur unique peuvent être volées ou
infectées par des virus qui distillent des secrets de façon asynchrone. Les serveurs
isolés, où il peut ne pas y avoir d ’utilisateur pour entrer le mot de passe (voir
menace n5), sont un problème particuüèrement délicat.
de passe est toujours opérée par l’utilisateur et par une voie sûre, telle qu’une
console locale. Ce n’est pas toujours le cas, bien sûr ; considérez le problème de
la lecture de votre courrier chiffré quand vous êtes connecté à un réseau. Ce que
l’éditeur de système pense être sûr peut ne pas répondre aux besoins et aux at
tentes des utilisateurs, tout particulièrement quand le logiciel peut être contrôlé
à distance à travers des réseaux peu sûrs.
8. Une évaluation qui n’est pas réaliste de la menace et des risques. Les experts de la
sécurité ont tendance à se concentrer sur les menaces qu’ils connaissent et dont ils
savent se protéger. Hélas, les pirates se concentrent sur ce qu’ils savent exploiter,
et les deux visions sont rarement identiques. De trop nombreux systèmes « sûrs »
sont réalisés sans considérer ce que les pirates sont vraiment susceptibles de faire.
9. Les interfaces qui rendent la sécurité chère et spéciale. Si des fonctions de sécurité
peuvent être utilisées, elles doivent être assez pratiques et transparentes pour que
les gens puissent les activer. Il est facile de réaliser des mécanismes de chiffrement
au seul prix de la performance ou de la facilité d ’emploi, et il est encore plus facile
de réaliser des mécanismes qui poussent à l’erreur. La sécurité devrait être plus
dure à désactiver qu’à activer ; seulement, peu de systèmes fonctionnent vraiment
comme cela.
10. Peu d’engoûment général pour la sécurité. C ’est un problème bien connu de
la plupart de ceux qui ont voulu faire fortune en vendant des produits et des
services de sécurité. Tant qu’il n’y aura pas une large demande pour une sécurité
transparente, les outils et l’infrastructure nécessaires pour la supporter seront
chers et maccessibles pour beaucoup d’applications. C ’est en partie un problème
de compréhension et d’explication des menaces et des risques dans les applications
réelles, mais aussi un défaut des systèmes qui n’incluent pas la sécurité comme
une fonction de base mais plutôt comme un additif.
Une liste et une discussion plus complètes sur ce type de menaces pourrait facilement
remplir un livre de cette taille sans pour autant égratigner la surface du problème. Ce
qui les rend spécialement difficiles et dangereuses est qu’il n’existe pas de techniques
magiques, mis à part une bonne organisation et une surveillance de tous les instants.
La leçon pour un aspirant cryptographe est qu’il faut respecter les limites de l’art.
M att B l a z e
New York, NY
Cinquième partie
Code source
DES
d3des.h
/* d3des.h -
*
* Headers and defines for d3des.c
* Graven Imagery, 1992.
*
* Copyright (c) 1988,1989,1990,1991,1992 by Richard Outerbridge
* (GEnie : OUTER; CIS : [71755,204])
*/
#ifdef D3_DES
#ifndef D2_DES
#define D2.DES /* D2_DES is needed for D3_DES */
#endif
#endif
typedef imion {
unsigned long b l o k [2];
unsigned short w o r d [ 4 ] ;
unsigned char byte[8];
> M68K;
typedef union -[
unsigned long d b l ok[4];
unsigned short d w o rd[8];
unsigned char dbyte[16];
> M68K2 ;
#ifdef D2_DES
* string into an eight-byte random-looking key, suitable for use with the
* deskeyO routine.
*/
#end^f /* D3_DES */
#endif / * D2.DES */
d3des.c
/* D3DES (V5.0A) -
*
#include "d3des.h"
cook = dough;
for( i = 0; i < 16; i++, rawl++ ) {
rawO = rawl++;
♦cook = (♦rawO & OxOOfcOOOOL) « 6;
♦cook 1= (♦rawO & OxOOOOOfcOL) « 10;
♦cook 1= (♦rawl & OxOOfcOOOOL) » 10;
♦cook++ 1= (♦rawl & OxOOOOOfcOL) » 6;
♦cook = (♦rawO & 0x0003f000L) « 12;
♦cook 1= (♦rawO & 0x0000003fL) « 16;
♦cook 1= (♦rawl & OxOO03fOOOL) » 4;
♦cook++ 1= (♦rawl & 0x0000003fL) 1
>
u s ekey(dough);
return;
>
void cpkey(into)
unsigned long *into;
void usekey(from)
unsigned long *from;
v o id d e s ( in b lo c k , o u tb lo c k )
u n s ig n e d c h a r * i n b l o c k , * o u tb lo c k ;
u n s ig n e d l o n g w o r k [ 2 ] ;
s c r u n c h (in b lo c k , w o rk );
d e s f u n c ( w o r k , K n L );
u n s c r u n (w o r k , o u tb lo c k );
retu rn ;
>
s t a t i c v o id s c r u n c h (o u to f, in t o )
u n s ig n e d c h a r * o u t o f ;
u n s ig n e d l o n g * i n t o ;
♦i n t o = (♦ O U to f++ ft O x f fL ) « 24;
♦i n t o 1= (♦ O U to f++ & O x ffL ) « 16;
♦ in to 1= ( ♦ o u t o f ++ & O x f fL ) « 8;
♦ in t o + + 1= C * o u t o f ++ & O x f f L ) ;
♦ in to = ( * o u t o f + + k O x f fL ) « 24;
♦ in to 1= ( * o u t o f + + & O x f fL ) « 16;
♦i n t o 1= ( * o u t o f ++ & O x f fL ) « 8;
♦ in to 1= ( * o u t o f & O x ffL );
retu rn ;
>
s t a t i c v o id u n s c r u n (o u t o f, in t o )
u n s ig n e d l o n g * o u t o f ;
u n s ig n e d c h a r * i n t o ;
s t a t i c u n s ig n e d l o n g SP1C64] = {
0 x 0 1 0 1 0 4 0 0 L , OxOOOOOOOOL, OxOOOlOOOOL, 0 x 0 1 0 1 0 4 0 4 L ,
0 x 0 1 0 1 0 0 0 4 L , 0 x 0 0 0 1 0 4 0 4 L , 0 x 0 0 0 0 0 0 0 4 L , OxOOOlOOOOL,
0x00000400L , 0x01010400L , 0x01010404L , 0x00000400L ,
0 x 0 1 0 0 0 4 0 4 L , 0 x 0 1 0 1 0 0 0 4 L , OxOlOOOOOOL, 0 x 0 0 0 0 0 0 0 4 L ,
0x00000404L , 0x01000400L , 0x01000400L , 0x00010400L ,
0 x 0 0 0 1 0 4 00 L , OxOlOlOOOOL, OxOlOlOOOOL, 0 x 0 1 0 0 0 4 0 4 L ,
0x00010004L, 0x01000004L, 0x01000004L , 0x00010004L,
OxOOOOOOOOL, 0 x 0 0 0 0 0 4 0 4 L , 0 x 0 0 0 1 0 4 0 4 L , OxOlOOOOOOL,
664 DES
s t a t i c u n s ig n e d l o n g S P 5 [6 4 ] = {
0 x00000100L, 0x02080100L , 0x02080000L , 0x42000100L,
0 x 0 0 0 8 0 0 0 0 L , OxOOOOOlOOL, 0 x 4 0 0 0 0 0 0 0 L , 0 x 0 2 0 8 0 0 0 0 L ,
0x4 0 0 8 0 100L, 0x00080000L , 0x02000100L , 0x40080100L ,
0x42000100L , 0x42080000L , 0x00080100L , 0x40000000L,
0 x 0 2 0 0 0 0 0 0 L , 0 x 4 0 0 8 0 0 0 0 L , 0 x 4 0 0 8 0 0 0 0 L , OxOOOOOOOOL,
0x40000100L , 0x42080100L , 0x42080100L , 0x02000100L ,
0 x 4 2 0 8 0 0 0 0 L , 0 x 4 0 0 0 0 1 0 0 L , OxOOOOOOOOL, 0 x 4 2 0 0 0 0 0 0 L ,
0x02080100L , 0x02000000L , 0x42000000L , 0x00080100L ,
0 x 0 0 0 8 0 0 0 0 L , 0 x 4 2 0 0 0 1 0 0 L , OxOOOOOlOOL, 0 x 0 2 0 0 0 0 0 0 L ,
0x40000000L , 0x02080000L , 0x42000100L , 0x40080100L ,
0 x 0 2 0 0 0 1 0 0 L , 0 x 4 0 0 0 0 0 0 0 L , 0 x 4 2 0 8 0 0 0 0 L , 0 x 0 2 0 8 0 100L ,
0 x 4 0 0 8 0 1 0 0 L , OxOOOOOlOOL, 0 x 0 2 0 0 0 0 0 0 L , 0 x 4 2 0 8 0 0 0 0 L ,
0x42080100L , 0x00080100L , 0x42000000L , 0x42080100L,
0 x 0 2 0 8 0 0 0 0 L , OxOOOOOOOOL, 0 x 4 0 0 8 0 0 0 0 L , 0 x 4 2 0 0 0 0 0 0 L ,
0 x 0 0 0 8 0 100L, 0 x 0 2 0 0 0 100L, 0 x40000100L , 0x00080000L ,
OxOOOOOOOOL, 0 x 4 0 0 8 0 OOOL, 0 x 0 2 0 8 0 1 0 0 L , 0 x 4 0 0 0 0 1 0 0 L > ;
s t a t i c u n s ig n e d l o n g SP6C64] = {
0 x 2 0 0 0 0 0 1 0 L , 0 x 2 0 4 0 0 0 0 0 L , 0 x 0 0 0 0 4 0 0 0 L , 0 x 2 0 4 0 4 0 10L ,
0 x 2 0 4 0 0 0 0 0 L , OxOOOOOOIOL, 0 x 2 0 4 0 4 0 1 0 L , 0 x 0 0 4 0 0 0 0 0 L ,
0x20004000L , 0x00404010L , 0x00400000L , 0x20000010L ,
0x00400010L , 0x20004000L , 0x20000000L , 0x00004010L ,
OxOOOOOOOOL, 0 x 0 0 4 0 0 0 1 0 L , 0 x 2 0 0 0 4 0 1 0 L , 0 x 0 0 0 0 4 0 0 0 L ,
0 x 0 0 4 0 4 0 0 0 L , 0 x 2 0 0 0 4 0 1 0 L , OxOOOOOOIOL, 0 x 2 0 4 0 0 0 1 0 L ,
0 x 2 0 4 0 0 0 1 0 L , OxOOOOOOOOL, 0 x 0 0 4 0 4 0 1 0 L , 0 x 2 0 4 0 4 0 0 0 L ,
0x00004010L , 0x00404000L , 0x20404000L , 0x20000000L,
0 x 2 0 0 0 4 0 0 0 L , OxOOOOOOIOL, 0 x 2 0 4 0 0 0 1 0 L , 0 x 0 0 4 0 4 0 0 0 L ,
0x20404010L , 0x00400000L , 0x00004010L , 0x20000010L ,
0x00400000L , 0x20004000L , 0x20000000L , 0x00004010L,
0x20000010L , 0 x 2 0 4 0 40 10L, 0x00404000L , 0x20400000L ,
0 x 0 0 4 0 4 0 1 0 L , 0 x 2 0 4 0 4 0 0 0 L , OxOOOOOOOOL, 0 x 2 0 4 0 0 0 1 0 L ,
OxOOOOOOIOL, 0 x 0 0 0 0 4 0 0 0 L , 0 x 2 0 4 0 0 0 0 0 L , 0 x 0 0 4 0 4 0 1 0 L ,
0 x 0 0 0 0 4 0 0 0 L , 0 x 0 0 4 0 0 0 1 0 L , 0 x 2 0 0 0 4 0 1 0 L , OxOOOOOOOOL,
0 x20404000L , 0x20000000L , 0 x00400010L , 0x20004010L > ;
s t a t i c u n s ig n e d l o n g S P 7 [6 4 ] = {
0 x 0 0 2 0 0 0 0 0 L , 0 x 0 4 2 0 0 0 0 2 L , 0 x 0 4 0 0 0 8 0 2 L , OxOOOOOOOOL,
0x00000800L , 0x04000802L , 0x00200802L , 0x04200800L ,
666 DES
0 x 0 4 2 0 0 8 0 2 L , 0 x 0 0 2 0 0 0 0 0 L , OxOOOOOOOOL, 0 x 0 4 0 0 0 0 0 2 L ,
0 x00000002L , 0x04000000L , 0 x0 4 2 0 0002L , 0x00000802L ,
0x04000800L , 0x00200802L, 0x00200002L , 0x04000800L,
0x04000002L , 0x04200000L , 0x04200800L , 0x00200002L ,
0x04200000L , 0x00000800L , 0x00000802L , 0x04200802L,
0x00200800L, 0x00000002L, 0x04000000L, 0x00200800L,
0x04000000L, 0x00200800L, 0x00200000L, 0x04000802L,
0x04000802L , 0x04200002L , 0x04200002L , 0x00000002L ,
0x00200002L , 0x04000000L, 0x04000800L , 0x00200000L ,
0x04200800L , 0x00000802L, 0x00200802L , 0x04200800L ,
0x00000802L , 0x04000002L , 0x04200802L, 0x04200000L,
0 x 0 0 2 0 0 8 0 0 L , OxOOOOOOOOL, 0 x 0 0 0 0 0 0 0 2 L , 0 x 0 4 2 0 0 8 0 2 L ,
OxOOOOOOOOL, 0 x 0 0 2 0 0 8 0 2L , 0 x 0 4 2 0 0 0 0 0 L , 0 x 0 0 0 0 0 8 0 0 L ,
0 x 0 4 0 0 0002L , 0 x 0 4 0 0 0 8 0 0 L , 0 x 0 0 0 0 0 8 0 0 L , 0 x0 0 2 0 0 0 0 2 L > ;
s t a t i c u n s ig n e d l o n g S P 8 [6 4 ] = -f
0 x l0 0 0 1 0 4 0 L , OxOOOOlOOOL, 0 x 0 0 0 4 0 0 0 0 L , 0 x l0 0 4 1 0 4 0 L ,
OxlOOOOOOOL, 0 x l0 0 0 1 0 4 0 L , 0 x 0 0 0 0 0 0 4 0 L , OxlOOOOOOOL,
0 x 0 0 0 4 0 0 4 0 L , 0 x l0 0 4 0 0 0 0 L , 0 x l0 0 4 1 0 4 0 L , 0 x 0 0 0 4 1 0 0 0 L ,
0 x l0 0 4 1 0 0 0 L , 0 x 0 0 0 4 1 0 4 0 L , OxOOOOlOOOL, 0 x 0 0 0 0 0 0 4 0 L ,
0 x l0 0 4 0 0 0 0 L , 0 x l0 0 0 0 0 4 0 L , OxlOOOlOOOL, 0 x 0 0 0 0 1 0 4 0 L ,
0 x 0 0 0 4 1 0 0 0 L , 0 x 0 0 0 4 0 0 4 0 L , 0 x l0 0 4 0 0 4 0 L , 0 x l0 0 4 1 0 0 0 L ,
0 x 0 0 0 0 1 0 4 0 L , OxOOOOOOOOL, OxOOOOOOOOL, 0 x l0 0 4 0 0 4 0 L ,
0 x l0 0 0 0 0 4 0 L , OxlOOOlOOOL, 0 x 0 0 0 4 1 0 4 0 L , 0 x 0 0 0 4 0 0 0 0 L ,
0 x 0 0 0 4 1 0 4 0 L , 0 x 0 0 0 4 0 0 0 0 L , 0 x l0 0 4 1 0 0 0 L , OxOOOOlOOOL,
0 x 0 0 0 0 0 0 4 0 L , 0 x l0 0 4 0 0 4 0 L , OxOOOOlOOOL, 0 x 0 0 0 4 1 0 4 0 L ,
OxlOOOlOOOL, 0 x 0 0 0 0 0 0 4 0 L , 0 x l0 0 0 0 0 4 0 L , 0 x l0 0 4 0 0 0 0 L ,
0 x l0 0 4 0 0 4 0 L , OxlOOOOOOOL, 0 x 0 0 0 4 0 0 0 0 L , 0 x l0 0 0 1 0 4 0 L ,
OxOOOOOOOOL, 0 x l0 0 4 1 0 4 0 L , O x0 0 0 4 00 4 0 L , 0 x l0 0 0 0 0 4 0 L ,
0 x l0 0 4 0 0 0 0 L , OxlOOOlOOOL, 0 x l0 0 0 1 0 4 0 L , OxOOOOOOOOL,
0 x l0 0 4 1 0 4 0 L , 0 x 0 0 0 4 1 0 0 0 L , 0 x 0 0 0 4 1 0 0 0 L , 0 x 0 0 0 0 1 0 4 0 L ,
0 x 0 0 0 0 1 0 4 0 L , 0 x 0 0 0 4 0 0 4 0 L , OxlOOOOOOOL, 0 x l0 0 4 1 0 0 0 L } ;
s t a t i c v o id d e s fu n e (b lo c k , k e y s)
u n s ig n e d l o n g * b l o c k , * k e y s ;
{
u n s ig n e d l o n g f v a l , w ork , r i g h t , le ftt ;
in t rou n d ;
le ftt = b lo c k C O ];
r i g h t = b l o c k [1 ] ;
w ork = ( ( l e f t t » 4) * r ig h t) & O xO fO fO fO fL ;
r i g h t ~= w o rk ;
le ftt “ = (w o rk « 4 );
w o rk = ( ( l e f t t >> 1 6 ) " r i g h t ) & O xO O O O ffffL ;
r i g h t " = w o rk ;
le ftt “ = (w o rk << 1 6 ) ;
w ork = ( ( r i g h t » 2) “ le ftt) & 0x33333333L;
le ftt “ = w o rk ;
r i g h t ~= (w o rk « 2 );
w ork = ( ( r i g h t » 8) * le f t t ) & O xO O ffO O ffL ;
DES 667
leftt ~= work ;
right ~= (work « 8);
right = ((right « 1) 1 ((right » 31) & IL)) & OxffffffffL;
work = (leftt “ right) & OxaaaaaaaaL;
leftt '= work;
right "= work;
leftt = ((leftt « 1) I ((leftt » 31) & IL)) & OxffffffffL;
■#ifdef D2_DES
scrunch(from, w o r k ) ;
desfunc(work, KnL);
desfune(work, KnR) ;
desfunc(work, K n 3 ) ;
unscrun(work, into);
return;
>
right = bufR;
11 = ftleftt [1];
scrunch(from, l e f t t ) ;
scrunch(&from[8], r i g h t ) ;
d esfune(leftt, K n L ) ;
de s f u n e(right, K n L ) ;
swap = +11;
♦11 = ♦right;
♦right = swap;
DES 669
d e sfune(leftt, K n R ) ;
d esfune(right, K n R ) ;
swap = *11 ;
*11 = *right;
♦right = swap;
d esfune(leftt, K n 3 ) ;
d esfune(right, K n 3 ) ;
unscrun(leftt, into);
unscrun(right, feinto[8]);
return;
}
cpDkey(savek);
des2key(Df_Key, ENO);
for( i = 0; i < 8; i++ ) kptrti] = Df_Key[i] ;
first = 1;
w h i l e ( (*aptr != ’\ 0 ’) Il first ) {
store = kptr;
for( i = 0; i < 8 && (*aptr != ’\ 0 ’); i++ ) {
*store++ ~= *aptr & 0x7f;
*aptr++ = ’\ 0 ’;
>
Ddes(kptr, kptr);
first = 0;
>
useDkey(savek);
return;
>
cpDkey(savek);
d es2key(Df_Key, ENO);
for( i = 0; i < 16; i++ ) kptr[i] = Df_Key[i] ;
first = 1;
w h i l e ( (*aptr != ’\ 0 ’) Il first ) ■[
store = kptr;
670 DES
void cp2key(into)
unsigned long *into; /* unsigned long[64] */
i
unsigned long *from, *endp;
cpkey(into);
into = &into[32];
from = KnR, endp = & K n R[32];
w h i l e ( from < endp ) *into++ = *from++;
return;
>
u s e k e y (from);
from = & f r o m [32];
to = KnR, endp = & K n R[32];
w h i l e ( to < endp ) *to++ = *from++;
c p k e y(Kn3); /* Kn3 = KnL */
return;
y
#else / * D3_DES too */
first = hexkey;
third = fchexkey[16];
>
else -[
revmod = ENO;
first = & h exkey[16];
third = hexkey;
}
deskey(fehexkey[8], revmod);
cpkey(KnR);
deskey(third, mode);
c pkey(Kn3);
d e s key(first, mode);
return;
}
void cp3key(into)
unsigned long *i n t o ; /* unsigned l o n g [96] */
cpkey(into);
into = ftinto[32];
from = KnR, endp = &KnR[32];
w h i l e ( from < endp ) *intc++ =*from++;
from = K n 3 , endp = & K n 3 [32];
w h i l e ( from < endp ) *into++ = *from++;
return;
}
void use3key(from)
unsigned long *from; /* unsigned long[96] */
1
unsigned long *to, *endp;
us e key(from);
from = &from[32] ;
to = KnR, endp = & K n R[32];
w h i l e ( to < endp ) *to++ - *from++;
to = Kn3, endp = &Kn3[32];
w h i l e ( to < endp ) *to++ = *from++;
return;
}
scrunch(from, l e f t t ) ;
scrunch(&from[8], m i d d l ) ;
scrunch(&from[16], right);
d e s f u n c(leftt, KnL);
desfune(middl, K n L ) ;
desfunc(right, KnL);
swap = l e f t t [1];
leftt [1] = middl [0];
m i d d l [0] = swap;
swap = m i d d l [1];
middl [1] = right [0];
right [0] = swap ;
desfunc(leftt, KnR);
de sfunc(middl, K n R ) ;
de sfunc(right, K n R ) ;
swap = leftt [1];
leftt [1] = middl [0];
m i d d l [0] = swap;
swap = m i d d l [1];
middl [1] = right [0];
r i g h t [0] = swap;
desfunc(leftt, Kn3);
d e s f u n e(middl, K n 3 ) ;
d e s f u n e(right, K n 3 ) ;
u n s c r u n d e f t t , into);
u nscrun(middl, feinto[8]);
un s c r u n(right, feinto[16]);
return;
}
cp3key(savek);
des3key(Df_Key, ENO);
for( i = 0; i < 24; i++ ) kptr[i] = Df_Key[i] ;
first = 1 ;
while( (*aptr != ’ \ 0 ’ ) Il first ) {
store = kptr;
f o r ( i = 0; i < 24 && (*aptr != ’\ 0 ’); i++ ) {
*store++ "= *aptr & 0 x 7 f ;
*aptr++ = ’\ 0 ’;
>
D3des(kptr, kptr);
first = 0;
DES 673
>
u s e 3 k e y (s a v e k );
retu rn ;
>
# e n d if /* D3_DES * /
# e n d if /* D2_DES * /
/* V a lid a t io n sets:
*
* S in g le -le n g th k ey , s in g le -le n g t h p la in te x t -
* Key : 0123 4567 89ab c d e f
* P la in : 0123 4567 89ab cd e7
* C ip h e r : c95 7 4 4 2 5 6 a 5 e d31d
*
* D o u b le -le n g th k e y , s i n g le -le n g t h p la in t e x t -
* Key : 0123 4567 89ab c d e f f e d c b a 9 8 7 654 3 2 1 0
* P la in : 0123 4567 89ab cd e7
* C ip h e r :7 fld 0 a77 8 2 6 b 8 a f f
*
* D o u b le -le n g th k e y , d o u b le -le n g t h p la in t e x t -
* Key : 0123 4567 89ab c d e f f e d c ba98 7654 3210
* P la in : 0123 4567 89ab c d e f 0123 4567 89ab c d f f
* C ip h e r : 27a0 8440 406a d f6 0 2 7 8 f 4 7 c f 4 2 d 6 15d7
*
* T r ip le -le n g th k ey, s in g le -le n g t h p la in te x t -
* Key : 0123 4567 89ab c d e f f e d c b a 9 8 7 6 5 4 3 2 1 0 8 9 a b c d e f 0 1 2 3 4 567
* P la in : 0123 4567 89ab cd e7
* C ip h e r : deOb 7 c 0 6 a e 5 e 0 ed 5
*
* T r ip le -le n g t h k e y , d o u b le -le n g t h p la in t e x t -
* K ey : 0123 4567 89ab c d e f f e d c b a 9 8 7 6 5 4 3 2 1 0 8 9 a b c d e f 0123 4 567
* P la in : 0123 4567 89ab c d e f 0123 4567 89ab c d f f
* C ip h e r : adOd lb 3 0 a c l 7 c f 0 7 O e d l l c 6 3 8 1 e 4 4 d e5
*
loki.i
/*
* loki.i - contains the fixed permutation and substitution tables
* for a 64 bit L0KI89 & LDKI91 implémentations.
*
* Modifications:
* vl.O original tables Aug 1989 lpb
* v2.0 add various speed/size versions Apr 1990 lpb
* v2.1 install into RCS system for production control 5/90 lpb
* v3.0 L0KI89 & L0KI91 now supported 10/92 lpb
*
/*
* sfn_desc - a desriptor table specifying which irreducible polynomial
* and exponent is to be used for each of the 16 S functions in
* the Loki S-box
*/
typedef struct -{
short gen; /* irreducible polynomial used in this field */
short exp; /* exponent used to generate this s function */
} sfn_desc;
676 L O K I 91
/*
* sfn - the table specifying the irreducible polys & exponents used
* in the Loki S-boxes for the Loki algorithm
*/
sfn_desc sfn[] = {
/* 101 11 0 1 1 1 * / 3 7 5 , 31}
/* 101111011 * / 3 7 9 , 31}
/* 110 00 0 1 1 1 * / 3 9 1 , 31}
/* 110001011 * / 3 9 5 , 31}
/* 110 00 1 1 0 1 * / 3 9 7 , 3 1 }
/* 1 1 0 011111 * / 4 1 5 , 3 1 }
/* 1 10 10 0 0 1 1 * / 4 1 9 , 3 1 }
/* 110101001 * / 4 2 5 , 31}
/* 1 1 0 11 0 0 0 1 * / 4 3 3 , 31}
/* 1 1 0 11 1 1 0 1 * / 4 4 5 , 31}
/* 11 1 00 0 0 1 1 * / 4 5 1 , 31}
/* 1 1 1 00 1 1 1 1 * / 4 6 3 , 31}
/* 111010111 * / 4 7 1 , 31}
/* 111011101 * / 4 7 7 , 3 1 }
/* 111100111 * / 4 8 7 , 3 1 }
/* 111110011 * / 4 9 9 , 31}
00, 00}
loki. h
/*
* loki.h - spécifiés the interface to the LOKI encryption routines.
* This library proviloki routines to expand a key, encrypt and
* decrypt 64-bit data blocks. The LOKI D ata Encryption Algorithm
* is a block cipher which ensures that its output is a complex
* function of its input and the key.
*
* Authors: Lawrie Brown <Lawrie.Brown@adfa.oz.au> Aug 1989
* Matthew Kwan <mkwan@cs.adfa.oz.au> Sep 1991
*
* Computer Science, UC UNSW, Australian Defence Force Academy,
* Canberra, ACT 2600, Australia.
*
* Version:
* vl.O - of loki64.o is current 7/89 lpb
* v2.0 - of loki64.c is current 9/91 mkwan
* v3.0 - now have loki89.c & loki91.c 10/92 lpb
*
* Copyright 1989 by Lawrie Brown and UNSW. Ail rights reserved.
* This program may not be sold or used as inducement to buy a
* product without the written permission of the author.
*
* Description:
L O K I 91 677
typedef unsigned long Long; /* type spécification for aligned LOKI blocks */
loki91.c
/*
* loki91.c - library routines for a 64 bit L0KI89 implémentation
*
* Designed b y Matthew Kwan <mkwan@crypto.cs.adfa.oz.au> and
* Lawrence Brown <lpb@cs.adfa.oz.au>
* Modifications:
* v2.0 - original set of code by mkwan 9/91
* v3.0 - support both L0KI89 & L0KI91 versions 10/92 lpb
*
* Copyright 1991 by Lawrence Brown and UNSW. Ail rights reserved.
* This prograin may not be sold or used as inducement to buy a
* product without the written permission of the author.
*
678 L O K I 91
#include <stdio.h>
#include "loki.h" /* include Interface Spécification header file */
#include "loki.i" /* include Interface Spécification header file */
/*
* string specifying version and copyright message
*/
char *loki_lib_ver =
"L0KI91 library v3.0, Copyright (C) 1991 Lawrence Brown & UNSW";
/*
* R0L12(b) - macro to rotate 32-bit block b left by 12 bits
* R0L13(b) - macro to rotate 32-bit block b left by 13 bits
*/
/*
* bswap(b) - exchanged bytes in each longword of a 64-bit data block
* on little-endian machines where byte order is reversed
*/
#ifdef LITTLE.ENDIAN
#define bswap(cb) -[ \
register char c; \
c = cb[0] ; cb [0] = cb [3] ; cb [3] = c ;
c = cb[l] ; cb[l] = cb[2]; cb [2] = c ;
c = c b [4] ; cb[4] = cb [7] ; cb[7] = c;
c = cb [5] ; cb [5] = cb [6] ; cb[6] = c;
>
#endif
L O K I 91 679
/*
* setlokikey(key) - save 64-bit key for use in encryptions & décryptions
* and compute sub-keys using the key schedule
*/
void
setlokikey(key)
char k e y[LOKIBLK]; /* Key to use, stored as an array of Longs */
i
register i;
register Long KL, KR;
#ifdef LITTLE_ENDIAN
b s w a p(key); /* swap bytes round if little-endian * /
#endif
KL = ((Long * ) key)[0];
K R = ((Long *)key) [1];
Jfifdef LITTLE_ENDIAU
bswap(key); /* swap bytes back if little-endian */
#endif
}
/*
* enloki(b) - main L0KI91 encryption routine, this routine encrypts one
* 64-bit block b using the LDKI91 algorithm with loki^subkeys
*
* nb: The 64-bit block is passed as two longwords. For the
* purposes of the L0KI89 algorithm, the bits are numbered:
* [6362 .. 33 32] [31 30 ... 1 0]
* The L (left) half is b[0], the R (right) half is b[l]
*
680 L O K I 91
*/
void
enloki (b)
char b [LOKIBLK];
{
register i;
register Long L, R; /* left & right data halves */
#ifdef LITTLE_ENDIAN
bswap(b); /* swap bytes round if little-endian */
#endif
L = ((Long * ) b ) [0];
R = ((Long *)b) [1] ;
#ifdef LITTLE_ENDIAN
bswap(b); /* swap bytes round if little-endian * /
#endif
>
/*
* deloki(b) - main L0KI91 decryption routine, this routine decrypts one
* 64-bit block b using the L0KI91 algorithm with loki_subkeys
*
* Decryption uses the same algorithm as encryption, except that
* the subkeys are used in reverse order.
*/
void
deloki(b)
char b [LOKIBLK];
L O K I 91 681
register i;
register Long L, R; /* left ft right data halves */
#ifdef LITTLE_ENDIAN
bswap(b); /* swap bytes round if little-endian */
#endif
#ifdef LITTLE.ENDXAK
b s w a p ( b ); /* swap bytes round if little-endian */
#endif
}
/*
* f(r, k) - is the complex non-linear LOKI function, whose output
* is a complex function of both input data and sub-key.
*
* The d ata is XORed with the subkey, then expanded into 4 x 12-bit
* values, which are fed into the S-boxes. The 4 x 8-bit outputs
* from the S-boxes are permuted together to form the 32-bit value
* which is returned.
*
* In this implémentation the outputs from the S-boxes have been
* pre-permuted and stored in lookup tables.
*/
static Long
f (r, k)
682 L O K I 91
/*
* s(i) - return S-box value for input i
*/
static short s(i)
register Long i; / * return S-box value for input i */
{
register short r, c, v, t;
short exp8(); / * exponentiation routine for GF(2“8) */
/*
* perm32(out, in, perm) is the général permutation of a 32-bit input
* block to a 32-bit output block, under the control of a
* permutation array perm. Each element of perm spécifiés which
* input bit is to be permuted to the output bit with the same
* index as the array ele m e n t .
L O K I 91 683
perm32(out, in perm)
Long *out; /* Output 32-bit block to be permuted */
Long *in; /* Input 32-bit block after permutation */
char perm[32]; /* Permutation array */
{
Long mask = MSB; /* mask used to set bit in output */
register int i, o, b; /* input bit no, output bit no, value */
register char *p = perm; / * ptr to permutation array */
/*
* mult8(a, b, gen) - returns the product of two binary
* strings a and b using the generator gen as the modulus
* mult = a * b mod gen
* gen generates a suitable Galois field in GF(2~8)
*/
>
/*
* exp8( b ase, exponent, gen) - returns the resuit of
* exponentiation given the base, exponent, generator of GF,
* exp = base " exp mod gen
*/
usuals.h
/ * usuals.h - The usual typedefs, etc.
*/
#ifndef USUALS /* Assures no redéfinitions of usual t y p e s . . . * /
#define USUALS
#ifndef TRUE
#define FALSE 0
#define TRUE (!FALSE)
#endif /* if TRUE not already defined */
randpool.h
#include "usuals.h"
void randPoolStir(void);
void randPoolAddBytes(byte const *buf, unsigned l e n ) ;
void randPoolGetBytesCbyte *buf, unsigned len);
byte randPoolGetByte(void);
idea.h
#ifndef IDEA_H
#define IDEA.H
/*
* idea.h - header file for idea.c
*/
#define IDEAKEYSIZE 16
#define IDEABLOCKSIZE 8
#define IDEAROUNDS 8
#define IDEAKEYLEN (6*IDEAR0UNDS+4)
/*
* iv[] is used as a circular buffer. bufleft is the number of
* bytes at the end which have to be filled in before we crank
* the block cipher again. We do the block cipher opération
* lazily: bufleft may be 0. When we need one more byte, we
* crank the block cipher and set bufleft to 7.
*
* oldcipherl] holds the previous 8 bytes of ciphertext, for use
* by i d e a C f b S y n c O and P h i l 1s, ahem, unique (not insecure, just
* unusual) way of doing CFB encryption.
*/
struct IdeaCfbContext {
byte o ldcipher[8];
byte iv[8] ;
wordl6 key[IDEAKEYLEN];
ID E A 687
int bufleft;
>;
struct IdeaRandContext {
byte o u t b u f [8];
wordl6 key[IDEAKEYLEN];
int bufleft;
byte i n ternalbuf[8];
>;
#endif /* ÎIDEA_H */
idea.c
/*
* idea.c - C source code for IDEA block cipher.
* IDEA (International Data Encryption Algorithm), formerly known as
* IPES (Improved Proposed Encryption Standard).
* Algorithm developed by Xuejia Lai and James L. Massey, of ETH Zurich.
* This implémentation modified and derived from original C code
* developed by Xuejia Lai.
* Zero-based indexing added, names changed from IPES to IDEA.
* CFB functions added. Random number routines added.
*
* Extensively optimized and restructured by Colin Plumb.
*
* The IDEA block cipher uses a 64-bit block size, and a 128-bit key
* size. It breaks the 64-bit cipher block into four 16-bit words
* because ail of the primitive inner opérations are done with 16-bit
* arithmetic. It likewise breaks the 128-bit cipher key into eight
* 16-bit words.
*
#include “idea.h"
#include “randpool.h"
#ifdef _GNUC_
/* const simply means there are no side effects for this function,
* which is useful info for the gcc optimizer
*/
#define CONST const__
#else
ID E A 689
#define CONST
#endif
/*
* Multiplication, modulo (2**16)+1
* Note that this code is structured on the assumption that
* untaken branches are cheaper than taken branches, and the
* compiler d o e s n ’t schedule branches.
*/
#ifdef SMALL_CACHE
CONST static uintl6
mul(register uintl6 a, register uintl6 b)
register word32 p;
p = (word32)a * b;
if (p) {
b = l o w l6(p);
a = p»16;
return (b - a) + (b < a) ;
} else if (a) {
return 1-b;
} else {
return 1-a;
>
)■ /* inul * /
#endif /* SMALL_CACHE */
/*
* Compute the multiplicative inverse of x, modulo 65537, using E u c l i d ’s
* algorithm. It is unrolled twice to avoid swapping the registers each
* itération, and some subtracts of t have been changed to adds.
*/
CONST static uintl6
mullnv(uintl6 x)
if (x <= 1)
return x; /* 0 and 1 are self-inverse */
tl = OxlOOOlL / x; /* Since x >= 2, this fits into 16 bits */
y = OxlOOOlL '/. x;
if (y = = 1)
return lowl6(l-tl);
tO = 1;
do {
q = x / y;
x = x 7. y;
tO += q * tl;
if (x == 1)
690 ID E A
return tO;
q = y / x;
y = y ’/. x ;
tl += q * tO;
> while (y != 1);
return lowl6(l-tl);
} / * muklnv */
/*
* Expand a 128-bit user key to a working encryption key EK
*/
static void
ideaExpandKey(byte const *userkey, wordl6 *EK)
int i , j ;
/*
* Compute IDEA decryption key DK from an expanded IDEA encryption key EK
* Note that the input and output may be the same. Thus, the key is
* inverted into an internai buffer, and then copied to the output.
*/
static void
ideaInvertKey(wordl6 const *EK, wordl6 DK[IDEAKEYLEN])
int i;
uintl6 tl, t2, t3;
wordl6 temp[IDEAKEYLEN];
wordl6 *p = temp + IDEAKEYLEN;
tl = m u lInv(*EK++);
t2 = -*EK++;
t3 = -*EK++;
*— p = mulInv(*EK++);
*— p = t3;
*— p = t2;
*— p = tl;
*— p = *EK++;
* — p = tl;
tl = mulInv(*EK++);
t2 = -*EK++;
t3 = -*EK++;
*— p = mul!nv(*EK++);
*— p = t2;
*— p = t3;
*— p = tl;
}
tl = ♦EK++;
*— p = *EK++;
*— p = tl;
tl = m u lInv(*EK++);
t2 = -*EK++;
t3 = - * E K + + ;
* P = mulInv(*EK++);
* P = t3;
*— p = t2;
* P = tl;
/* Copy and destroy temp copy */
memcpyCDK, temp, sizeof(temp));
bu r n (temp);
}■ /* idealnvertKey */
/*
* MUL(x,y) computes x = x*y, modulo 0x10001. Requires two temps,
* tl6 and t32. x is modified, and must me a side-effect-free lvalue.
* y m a y be anything, but unlike x, must be strictly 16 bits even if
* lowl6() is #defined.
* Ail of these are équivalent - see which is faster on your machine
*/
#ifdef SMALL_CACHE
#define MÜL(x,y) (x = mul(lowl6(x),y))
#else /* !SMALL_CACHE */
#ifdef AV0ID_JUMPS
#define MÜL(x,y) (x = lowl6(x-l), tl6 = lowl6((y)-l), \
t32 = Cword32)x*tl6 + x + tl6 + 1, x = lowl6(t32), \
tl6 = t 3 2 » 1 6 , x = (x-tl6) + (x<tl6) )
#else /* !AV0ID_JUMPS (default) */
#define MÜL(x,y) \
( (tl6 = (y)) ? \
(x=lowl6(x)) ? \
t32 = (word32)x*tl6, \
x = lowl6(t32), \
tl6 = t 3 2 » 1 6 , \
x = (x-tl6)+(x<tl6) \
: \
(x = l - t l 6 ) \
692 ID E A
: \
(x = 1-x))
#endif
#endif
in = (wordl6 *)inbuf;
xl = *in++; x2 = *in++;
x3 = *in++; x4 = *in;
#ifndef HIGHFIRST
xl = ( x l » 8 ) I (xl«8) ;
x2 = ( x 2 » 8 ) I (x2«8) ;
x3 = ( x 3 » 8 ) I (x3«8);
x4 = ( x 4 » 8 ) I (x4«8);
#endif
do {
MUL(xl,*key++) ;
x2 += *key++;
x3 += *key++;
MUL(x4, * key++);
s3 = x3;
x3 *= xl;
MUL(x3, *key++);
s2 = x2;
x2 "= x4;
x2 += x3;
MUL(x2, *key++);
x3 += x2;
/* */
#ifdef TEST
#include <stdio.h>
#include <time.h>
/♦
♦ This is the number of Kbytes of test data to encrypt.
♦ It defaults to 1 MByte.
♦/
#ifndef BLOCKS
#ifndef KBYTES
#define KBYTES 1024
#endif
#define BLOCKS (64+KBYTES)
#endif
int
main(void)
{ /♦ Test driver for IDEA cipher ♦/
int i, j, k;
byte userkey [16];
wordl6 EK[IDEAKEYLEN], DK[IDEAKEYLEN];
byte XX [8], YY[8] , ZZ[8];
clock_t start, end;
long 1;
#endif /* TEST */
Z * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
void
ideaCfbReinit(struct IdeaCfbContext *context, byte const *iv)
if (iv)
memcpy(context->iv, iv, 8);
else
fillO(context->iv, 8);
context->bufleft = 0;
}
void
ideaCfblnit(struct IdeaCfbContext *context, byte const (key[16]))
ideaExpandKey(key, context->key);
ideaCfbReinit(context,0);
>
void
ideaCfbDestroy(struct IdeaCfbContext *context)
burn(*context);
>
/*
* Dkay, explanation time:
* Phil invented a unique way of doing CFB t h a t ’s sensitive to semantic
* boundaries within the data being encrypted. One way to phrase
* CFB en/decryption is to say that you XOR the current 8 bytes with
* IDEA(previous 8 bytes of ciphertext). Normally, you repeat this
* at 8-byte intervais, but Phil decided to resync things on the
* boundaries between elements in the stream being encrypted.
*
* That is, the last 4 bytes of a 12-byte field are en/decrypted using
* the first 4 bytes of IDEA(previous 8 bytes of ciphertext), but then
* the last 4 bytes of that IDEA computation are thrown away, and the
* first 8 bytes of the next field are en/decrypted using
696 ID E A
if (bufleft) {
memmove(context->iv+bufleft, context->iv, 8-bufleft);
memcpy(context->iv, context->oldcipher+8-bufleft, bufleft);
context->bufleft = 0;
>
>
/*
* Encrypt a buffer of data, using IDEA in CFB mode.
* There are more compact ways of writing this, but this is
* written for speed.
*/
void
ideaCfbEncrypt(struct IdeaCfbContext *context, byte const *src,
byte *dest, int count)
{
int bufleft = context->bufleft;
byte *bufptr = context->iv + 8-bufleft;
/*
* Decrypt a buffer of data, using IDEA in CFB mode.
* There are more compact ways of writing this, but this is
* written for speed.
*/
void
ideaCfbDecrypt(struct IdeaCfbContext *context, byte const *src,
byte *dest, int count)
{
int bufleft = context->bufleft;
static byte *bufptr;
byte t;
t = *bufptr;
*dest++ = t (*bufptr++ = * src++);
}
while (count > 8) {
bufptr = context->iv;
memcpy(context->oldcipher, bufptr, 8);
ideaCipher(bufptr, bufptr, context->key);
bufleft = 8;
count -= 8;
do {
t = *bufptr;
*dest++ = t " (*bufptr++ = *src++);
} while (— bufleft) ;
>
bufptr = context->iv;
m emcpy(context->oldcipher, bufptr, 8);
ideaCipher(bufptr, bufptr, context->key);
context->bufleft = 8-count;
do {
t = *bufptr;
*dest++ = t “ (*bufptr++ = * src++);
} while (— coun t ) ;
>
/ ********************************************************************/
/*
* Cryptographically strong pseudo-random-number generator.
* The design is from Appendix C of ANSI X9.17, "Financial
* Institution Key Management (Wholesale)", with IDEA
* substituted for the DES.
*/
/*
* Initialize a cryptographie random-number generator.
* key and seed should be arbitrary.
*/
void
ideaRandlnit(struct IdeaRandContext *context, byte const (key[16]),
byte const (seed[8]))
{
int i;
ideaExpandKey(key, context->key);
context->bufleft = 0;
m emcpy(context->internalbuf, seed, 8);
>
/*
* Read out the R N G ’s state.
ID E A 699
*/
void
ideaRandState(struct IdeaRandContext *context, byte k e y [16], byte seed[8])
int i;
>
/*
* Encrypt the R N G ’s state with the given CFB encryptor.
*/
void
ideaRandWash(struct IdeaRandContext *context, struct IdeaCfbContext *cfb)
{
byte k eyseed[16+8];
int i;
memset(keyseed, 0, 16+8);
}
/*
* Cryptographie pseudo-random-number generator, used for generating
* session keys.
*/
byte
ideaRandByte(struct IdeaRandContext *c)
£
int i;
if (!c->bufleft) {
byte timestamp[8] ;
/* end of idea.c */
GOST
gost.c
/*
* The GOST 28147-89 cipher
*
/*
* If you r ead the standard, it belabors the point of copying corresponding
* bits from point A to point B quite a b i t . It helps to understand that
* the standard is uniformly little-endian, although it numbers bits from
* 1 rather than 0, so bit n has value 2~(n-l). The least significant bit
* of the 32-bit words that Eure manipulated in the algorithm is the first,
* lowest-numbered, in the bit string.
*/
#else
typedef unsigned long word32;
#endif
/*
* The standard does not specify the contents of the 8 4 bit->4 bit
* substitution boxes, saying t h e y ’re a parameter of the network
* being set up. For illustration purposes here, I have used
* the first rows of the 8 S-boxes from the DES. (Note that the
* DES S-boxes are numbered starting from 1 at the msb. In keeping
* with the rest of the GOST, I have used little-endian numbering.
* T h u s , k8 is S-box 1.
*
* Obviously, a careful look at the cryptographie properties of the cipher
* must be undertaken before "production" substitution boxes are defined.
*
* The standard also does not specify a standard bit-string représentation
* for the contents of these blocks.
*/
static unsigned char const k8[16] = {
14, 4, 13, 1, 2, 15, 11 , 8, 3, 10, 6, 12, 5, 9, 0, 7 >
static unsigned char const k7[16] = {
15, 1, 8, 14, 6, 11, 3 , 4, 9, 7, 2, 13, 12, 0, 5, 10 >
static unsigned char const k6[16] = {
10, 0, 9, 14, 6, 3, 15 5, 1, 13, 12, 7, u , 4, 2, 8 >
static unsigned char const k 5 [16] = {
7, 13, 14, 3, 0, 6, 9 10, 1, 2, 8, 5, 11, 12, 4, 15 >
static unsigned char const k4[16] = {
2, 12, 4, 1, 7, 10, 11 6, 8, 5, 3, 15, 13, 0, 14, 9 >
static unsigned char const k3[16] = {
12, 1, 10, 15, 9, 2, 6 8, 0, 13, 3, 4, 14, 7, 5, 11 >
static unsigned char const k2[16] = {
4, U , 2, 14, 15, 0, 8 13, 3, 12, 9, 7, 5, 10, 6, 1 >
static unsigned char const k l [16] = {
13, 2, 8, 4, 6, 15, U 1, 10, 9, 3, 14, 5, 0, 12, 7 >
/*
* Build byte-at-a-time subtitution tables.
* This must be called once for global setup.
*/
void
kboxinit(void)
{
int i;
for (i = 0; i < 256; i++) {
GOST 703
/*
* Do the substitution and rotation that are the core of the opération,
* like the expansion, substitution and permutation of the DES.
* It would be possible to perform DES-like optimisations and store
* the table entries as 32-bit words, already rotated, but the
* efficiency gain is questionable.
*
k 6 [ x » 2 0 k 15] « 20 1 k 5 [ x » 1 6 k 15] « 16
k 4 [ x » 1 2 & 15] « 12 1 k3 [ x » 8 k 15] « 8
k 2 [ x » 4 & 15] « 4 1 kl[x k 15];i
#else
/* This is faster */
x = k 8 7 [ x » 2 4 & 255] « 24 I k 6 5 [ x » 1 6 & 255] « 16 I
k 4 3 [ x » 8 k 255] « 8 I k21[x k 255];
#endif
/*
* The GOST standard defines the input in terms of bits 1..64, with
* bit 1 being the lsb of in[0] and bit 64 being the msb of i n [ l ] .
*
* The keys are defined similarly, with bit 256 being the msb of k e y [7].
*/
void
gostcrypt(word32 const in [ 2 ] , word32 o u t [2], word32 const k e y [8])
{
register word32 ni, n2; /* As named in the GOST */
ni = in [0] ;
704 GOST
n2 = in[l] ;
n2 “= f ( n l + k e y [0] )
ni "= f (n2+key[l])
n2 '= f ( n l + k e y [2])
ni "= f(n2+key [3])
n2 "= f ( n l + k e y [4])
ni "= f (n2+key [5] )
n2 *= f(nl+key [6])
ni f ( n 2 + k e y [7] )
n2 *= f (nl+key [0])
ni "= f (n2+key[l])
n2 '= f ( n l + k e y [2])
ni '= f( n 2 + k e y [3])
n2 “= f(nl+key [4])
ni '= f (n2+key [5] )
n2 '= f ( n l + k e y [6])
ni "= f ( n 2 + k e y [7])
n2 -= f (nl+key [7])
ni f(n2+key [6])
n2 f ( n l + k e y [5])
ni ~= f ( n 2 + k e y [4])
n2 “= f(nl+key [3] )
ni *= f ( n 2 + k e y [2])
n2 ~= f ( n l + k e y [1])
ni *= f ( n 2 + k e y [0])
/*
* The ke y schedule is somewhat différent for decryption.
* (The key table is used once forward and three times backward.)
* You could define an expanded key, or just write the code twice,
* as done here.
*/
GOST 705
void
gostdecrypt(word32 const in[2], word32 o u t [2], word32 const k e y [8])
ni = in [0] ;
n2 = in[l] ;
n2 “= f ( n l + k e y [7]);
ni "= f(n2+key [6] ) ;
n2 "= f ( n l + k e y [5]);
ni f ( n 2 + k e y [4]);
n2 “** f(nl+key [3]);
ni "= f ( n 2 + k e y (2]);
n2 '= f ( n l + k e y [1] ) ;
ni “= f ( n 2 + k e y [0]);
n2 f ( n l + k e y [7]);
ni '= f(n 2 + k e y [ 6] ) ;
n2 '= f(nl+key [5]);
ni “= f(n2+key[4]);
n2 "= f(n l + k e y [3]);
ni "= f (n2+key [2] ) ;
n2 ~= f ( n l + k e y [1]);
ni “= f(n2+key [0] ) ;
out [0] = n2 ;
out[l] = ni;
>
/*
* The GOST "Output feedback" standard. It seems d o s e r morally
* to the counter feedback mode some people have proposed for DES.
706 GOST
* The avoidance of the short cycles that are possible in OFB seems
* like a Good Thing.
*
* Calling it the stream mode makes more sense.
*
* The IV is encrypted with the key to produce the initial counter value.
* Then, for each output block, a constant is added, modulo 2*32-1
* (0 is represented as all-ones, not all-zeros), to each half of
* the counter, and the counter is encrypted to produce the value
* to XOR with the output.
*
* Le n is the number of b l o c k s . Sub-block encryption is
* left as an exercise for the user. Remember that the
* standard defines everything in a little-endian manner,
* so you want to use the low bit of g a m m a [0] first.
*
* OFB is, of course, self-inverse, so there is only one f u n ction.
*/
void
gostofb(word32 const *in, word32 *out, int len,
word32 const i v [ 2 ] , word32 const k e y [8])
{
word32 temp [2]; /* Counter */
word32 g a m m a [2]; /* Output XOR value * /
while (len— ) {
temp[0] += C2;
if (temp[0] < C2) /* Wrap modulo 2 “32? * /
temp[0]++; / * Make it modulo 2*32-1 */
temp[l] += Cl;
if (temp[l] < Cl) /* Wrap modulo 2*32? * /
temp[l]++; / * Make it modulo 2*32-1 */
/*
* The CFB mode is just what y o u ’d expect. Each block of ciphertext y[] is
* derived from the input x[] by the following pseudocode:
GOST 707
void
gostcfbencrypt(word32 const *in, word32 *ont, int len,
word32 iv [2], word32 const k e y [8])
{
while (len— ) {
gostcrypt(iv, iv, key);
iv[0] = *out++ *= iv[0];
iv[l] = *out++ *= iv[l] ;
>
}
void
gostcfbdecrypt(word32 const *in, word32 *out, int len,
word32 i v [2], word32 const k e y [8])
word32 t;
while (len— ) -{
gostcrypt(iv, iv, key);
t = *out;
*out++ “= iv[0];
iv[0] = t;
t = *out;
*out++ '= iv [1];
iv[l] = t;
>
}
/*
* The message suthetication code uses only 16 of the 32 rounds.
* There *is* a swap after the 16th round.
* The last block should be padded to 64 bits with zéros.
* len is the number of *blocks* in the input.
*/
void
gostmac(word32 const *in, int len, word32 o u t [2], word32 const k e y [8])
i
register word32 ni, n2; /* As named in the GOST * /
ni = 0;
n2 = 0;
while (len— ) {
ni ~= *in++;
708 GOST
n2 = *in++;
n2 *= f ( n l + k e y [0]);
ni ~= f (n2+key[l]);
n2 “= f ( n l + k e y [2]);
ni "= f (n2+key [3] ) ;
n2 ~= f ( n l + k e y [4]);
ni ~= f(n2+key [5]);
n 2 ~= f(n l + k e y [6]);
ni ~= f(n 2 + k e y [7]);
}
out [0] = ni ;
outül] = n2;
}
#ifdef TEST
#include <stdio.h>
#include <stdlib.h>
int
main(void)
{
word32 k e y [8];
word32 plain [2];
word32 c i p h e r [2];
int i, j;
kboxinitO ;
printf ("73d\r", i) ;
Cflush(stdout);
(fendif /* TEST */
Blowfish
blowfîsh.c
#include <jnath.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#ifdef big_endian
#include <Types.h>
#endif
typedef struct {
unsigned long S [4] [256] , P[18] ;
> blf_ctx;
#define N 16
#define noErr 0
#define DATAERROR -1
#define KEYBYTES 8
712 B l o w f is h
d = x & OxOOFF;
x »= 8;
c = x & OxOOFF;
x >>= 8;
b = x ft OxOOFF;
x » = 8;
a = x & OxOOFF;
/*// y = C (bc->S [0] [a] + bc->S[l] [b] ) ' bc->S [2] [c] ) + b c - > S [3] [d] ; */
y = bc->S[0] [a] + bc->S[l] [b] ;
y = y “ bc->S [2] [c] ;
y = y + bc->S [3] [d] ;
return y;
>
XI = *xl;
Xr = * x r ;
temp = XI;
XI = Xr;
Xr = temp;
>
temp = XI;
XI = Xr;
Xr = temp;
Xr = Xr " c->P[N] ;
XI = XI * c->P [N + 1] ;
*xl = XI;
*xr = Xr;
Bl o w f is h 713
XI = *xl;
Xr = * x r ;
for ( i = N + l ; i > l ; — i) {
XI = XI " c->P[i] ;
Xr = F(c,Xl) ' Xr;
/ * Exchange XI and X r */
temp = XI;
XI = Xr;
Xr = temp;
>
/* Exchange XI and Xr */
temp = XI;
XI = Xr;
Xr = temp;
Xr = Xr “ c->P[i];
XI = XI * c - > P [0];
*xl = XI;
*xr = Xr;
>
j = 0;
for (i = 0; i < N + 2 ; ++i) {
data = 0x00000000;
for (k = 0; k < 4; ++k) {
data = (data « 8) I key[j] ;
j = j + i;
if (j >= keybytes) {
j = 0;
>
}
c->P[i] = c->P[i] * data;
>
datai = 0x00000000;
datar = 0x00000000;
for (i = 0; i < N + 2; i += 2) C
Blowfish_encipher(c.fedatal, fcdatar);
c->P[i] = datai;
718 B lo w f is h
c->P[i + 1] = datar;
>
Blowfish_encipher(c,&datal, ftdatar);
c->S[i][j] = datai;
c->S[i] [j + 1] = datar;
}
>
d = data;
for(i = 0; i < blocks; i++){
B lowfxsh_encipher(c,d,d+l);
d += 2;
>
>
d = data;
for(i = 0; i < blocks; i++){
Blowfish_decipher(c,d,d+l);
d += 2;
>
y
void main(void){
blf_ctx c;
char key[] = "AAAAA" ;
unsigned long d a t a[10];
int i;
blf_key(&c,key,5);
blf_enc(&c,data,5);
blf_dec(&c,data,l);
B l o w f is h 719
blf_dec(&c,data+2,4);
for(i = 0; i < 10; i += 2) printf("Block XOld decrypts to:
y.081x y.081x.\n", i/2, data[i] , data[i+l]);
3-Way
3way.c
#define STRT_E OxObOb /* round constant of first encryption round */
#define STRT_D Oxblbl /* round constant of first decryption round */
#define NMBR 11 / * number of rounds is 11 */
y
y
rndcon_gen(STRT_E,rcon) ;
Cor( i=0 ; K N M B R ; i++ )
rndcon_gen(STRT_D,rcon) ;
mu(a) ;
for( i=0 ; i<NMBR ; i++ )
{
a[0] ~= ki[0] * (rcon [i] « 1 6 ) ;
a[l] ~= ki[l] ;
a [2] '= ki[2] * rcon[i] ;
rho(a) ;
>
atO] “= kifO] * (rcon[NMBR] <<16) ;
a[l] ~= ki[l] ;
a [2] ~= k i [2] * rcontNMBR] ;
theta(a) ;
mu(a) ;
>
#ifdef TEST
724 3 -W ay
#include <stdio.h>
ttinclude <stdlib-h>
#define RAND32 ((word32)rand() « 17 ' (uord32)rand() « 9 * randO)
void m a i n O
{
word32 vector[3], key [3] ,plain [3] ;
int i , j ;
printf ("7.3d\r", i) ;
fflush(stdout);
/* TEST VALUES
key : 00000000 00000000 00000000
plaintext : 00000001 00000001 00000001
3 -W ay 725
rc5.c
/* RC5REF.C — Reference implémentation of RC5-32/12/16 in C. */
/ * Copyright (C) 1995 RSA Data Security, Inc. */
#include <stdio.h>
#include <time.h>
typedef unsigned long int WORD; /* Should be 32-bit = 4 bytes */
#define w 32 /* word size in bits */
#define r 12 /* number of rounds */
#define b 16 / * number of bytes in key */
#define c 4 / * number words in key = ceil(8*b/w)*/
#define t 26 / * size of table S = 2*(r+l) words */
WORD S [ t ] ; / * expanded key table */
WORD P = 0xb7el5163, Q = 0x9e3779b9; / * magic constants */
/ * Rotation operators. x must be unsigned, to get logical right shift*/
#define ROTL(x,y) ( ( (x)«(y&(w-l))) I ((x)»(w-(y&(w-l)))))
#define ROTR(x,y) C ( ( x ) » (y&(w-1))) I ((x)«(w-(y&(w-l)))))
void m a i n O
{ WORD i, j, p t l [2] , p t 2 [2] , ct[2] = {0,0};
unsigned char key[b];
time_t tO, tl;
if (sizeof(WORD)!=4)
printf ("RC5 error: WORD has '/.d bytes.\n".sizeof (WORD)) ;
printf("RC5-32/12/16 examples:\ n ”);
for (i=l;i<6;i++)
{ /* Initialize ptl and key pseudorandomly based on previous ct */
pt 1 [0] =ct [0] ; pt 1 [1] =ct [1] ;
for (j=0; j<b; j++) key[j] = ct[0]7.(255-j) ;
/* Setup, encrypt, and decrypt */
RC5_SETUP(key);
RC5_ENCRYPT(pt1,c t ) ;
RC5_DECRYPT(ct,pt2);
/ * Print out results, checking for decryption failure */
p r i n t f ("\nJCd. key = ",i);
for (j=0; j<b; j++) p r i n t f 2 X ” ,key[j]);
printf("\n plaintext */,.81X V..81X > ciphertext X.81X X.81X \n",
ptl[0], ptl[l], ct[0], ct [1] ) ;
if (ptl [0] !=pt2 [0] Il ptl[l] !=pt2[l] )
printf("Decryption Error!");
>
time (&t0);
for (i=l;i<100000;i++)
R C5.ENCRYPT(ct,c t ) ;
time (fttl);
printf ("\n Time_t for 100000 blocks: V.ld \ n " , tl-tO) ;
A5
a5.c
static int threshold(rl, r2, r3)
unsigned int rl;
unsigned int r2;
unsigned int r3;
{
int total;
if (total > 1)
return (0);
else
return (1);
}
/*
* Primitive polynomial x**19 + x**5 + x**2 + x + 1
*/
/*
* Primitive polynomial x**22 + x**9 + x**5 + x + 1
*/
/*
* Primitive polynomial x**23 + x**5 + x**4 + x + 1
*/
for (i=0;i<22;i++)
i
clock_ctl = threshold(rl, r2, r 2 ) ;
rl = clock_rl(clock_ctl, r l ) ;
r2 = clock_r2(clock_ctl, r 2 ) ;
r3 = clock_r3(clock_ctl, r 3 ) ;
if (frame fe 1)
{
rl *= 1;
r2 *- 1;
r3 *= 1;
>
frame = frame » 1;
>
/ * Rini shift registers for 100 clock ticks to allow frame nimber to
* be diffused into ail the bits of the shift registers
*/
for (i=0;i<100;i++)
{
clock_ctl = threshold(rl, r2, r 2 ) ;
rl = clock_rl(clock_ctl, rl);
r2 = clock_r2(clock_ctl, r 2 ) ;
r3 = clock_r3(clock_ctl, r 3 ) ;
>
ptr = alice;
732 A5
bits = 0;
byte = O;
for (i=0;i<114;i++)
{
clock_ctl = thresholdCrl, r2, r 2 ) ;
rl = clock_rl(clock_ctl, rl);
r2 = clock_r2(clock_ctl, r 2 ) ;
r3 = clock_r3(clock.ctl, r 3 ) ;
bit = ((rl » 18) " (r2 » 21) * (r3 » 22)) & 0x01;
byte = (byte « 1) I bit;
bits++;
if (bits == 8)
*ptr = byte;
ptr++;
bits = 0;
byte = 0;
>
>
if (bits)
*ptr = byte;
/* Run shift registers for another 100 bits to hide relationship between
* Alice->Bob key stream and Bob->Alice key stream.
*/
for (i=0;i<100;i++)
{
clock.ctl = threshold(rl, r2, r 2 ) ;
rl = clock_rl(clock_ctl, r l ) ;
r2 = clock_r2(clock_ctl, r 2 ) ;
r3 « clock_r3(clock_ctl, r 3 ) ;
ptr = bob;
bits = 0;
byte = 0;
for (i=0;i<114;i++)
{
clock.ctl * threshold(rl, r2, r2) ;
rl =■ clock_rl(clock_ctl, rl) ;
r2 « clock_r2(clock_ctl, r 2 ) ;
r3 * clock_r3(clock_ctl, r 3 ) ;
i
*ptr = byte;
ptr++;
bits = 0;
byte = 0;
}
>
if (bits)
*ptr = byte;
return (0);
>
SEAL
seal.c
/ * SEAL */
#define ALG_OK 0
#define ALG.NOTOK 1
#define WORDS_PER_SEAL_CALL 1024
typedef struct {
unsigned long t[520]; /* 512 rounded up to a multiple of 5 + 5*/
unsigned long s [265]; / * 256 rounded up to a multiple of 5 + 5*/
unsigned long r [ 2 0 ] ; /* 16 rounded u p to multiple of 5 * /
unsigned long counter; / * 32-bit synch value. */
unsigned long ks_buf[WORDS_PER_SEAL_CALL];
int ks_pos;
}- seal_ctx;
int g(in,i,h)
unsigned chaur *in;
int i;
unsigned long *h;
{
unsigned long w [ 8 0 ] ;
kp = in;
hO = WDRD(kp); kp += 4;
hl = WOR D ( k p ) ; k p += 4;
h2 = WORD(kp); kp += 4;
h3 = WORD(kp); kp += 4;
h4 = W ORD(kp); k p += 4;
w[0] = i;
for (i=l;i<16;i++) u[i] = 0;
for(i=0;i<20;i++) {
temp = R0T27(a) + Fl(b, c, d) + e + w[i] + 0x5a827999;
e = d; d = c; c = R 0 T 2 ( b ) ; b = a; a = temp;
>
for (i=20;i<40;i++) {
temp = R0T27(a) + F2(b, c, d) + e + w[i] + 0x6ed9ebal;
e = d; d = c; c = R0T2(b); b = a; a = temp;
>
for (i=40;i<60;i++) {
temp = R0T27(a) + F3(b, c, d) + e + w[i] + 0x8flbbcdc;
e = d; d = c; c = R0T2(b); b = a; a = temp;
>
for (i=60;i<80;i++) {
temp = R0T27(a) + F4(b, c, d) + e + w[i] + 0xca62cld6;
e = d; d = c; c = R0T2(b); b = a; a = temp;
>
h[0] = hO+a; h[l] = hl+b; h[2] = h2+c; h[3] = h3+d; h[4] = h4+e;
return (ALG_0K);
}
int i;
unsigned long h [ 5 ] ;
for (i=0;i<510;i+=5)
g(key, i/5, fc(result->t[i]));
/* horrible spécial case for the end */
g(key, 510/5, h);
for(i=510;i<512;i++)
result->t[i] = h[i-510] ;
/* 0x1000 mo d 5 is +1, so have horrible spécial case for the staxt */
g(key, (-1+0x1000)/5, h);
for (i=0;i<4;i++)
result->s[i] = h[i+l] ;
for (i=4;i<254;i+=5)
g(key, (i+0xl000)/5, &(result->s[i])) ;
/* horrible spécial case for the end */
g(key, (254+0xl000)/5, h);
for (i=254;i<256;i++)
result->s[i] = h [ i - 2 5 4 ] ;
/* 0x2000 m o d 5 is +2, so have horrible spécial case at the start */
g(key, (-2+0x20005/5, h);
for(i=0;i<3;i++)
result->r[i] = h[i+2] ;
for (i=3;i<13;i+=5)
g ( k e y ,(i+0x2000)/5,fe(result->r[i]));
/* horrible spécial case for the end */
g (key, ( 1 3 + 0 x 2 0 0 0 /5, h);
for (i=13;i<16;i++)
result->r[i] = h[i-13] ;
return (ALG_0K);
}
«p = out;
for (1=0;1<4;1++) {
a = in key->r [4*1] ;
b = R0T8(in) * k e y - > r [4*1+1];
c = R0T16(in) * k e y - > r [4*1+2];
d = R0T24(in) “ k e y - > r [4*1+3];
>
for (j=0;j<2;j++) {
p= a & 0x7fc;
b += key->t [p/4] ;
a = R0T9(a) ;
738 SEAL
p = b & 0x7fc;
c += k e y ->t[p/4];
b = R0T9(b);
p = c & 0x7fc;
d += key->t[p/4];
c = R0T9(c) ;
p = d & 0x7fc;
a += key- > t [ p / 4 ];
d = R0T9(d);
p = a & 0x7fc;
b += key->t[p/4];
a = R0T9(a);
p = b & 0x7fc;
c += key->t[p/4];
b = R0T9(b);
p = c & 0x7fc;
d += key->t[p/4];
c = R0T9(c);
p = d & 0x7fc;
a += key->t [p/4];
d = R0T9(d);
p = a & 0x7fc;
b += key->t[p/4];
a = R0T9(a);
b “= a;
q = b k 0x7fc;
c “= k e y ->t[q/4];
b = R0T9(b);
c += b;
q = Cq+d) k 0x7fc;
a "= k e y - >t[q/4];
d = R0T9(d);
SEAL 739
a += d;
p = (p+c) k Ox7fc;
d “= key->t[p/4];
c = RQT9(c);
if(i&l) {
a += n3;
c += n4;
} else {
a += ni;
c += n2;
}
y
return (ALG_OK);
>
void main(void){
seal_ctx sc;
unsigned long b u f [1000],t;
int i.flag;
unsigned char key[] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 };
p r intf("l\n");
seal_key(&sc,k e y ) ;
printf("2\n");
for(i=0;i<1000;i++) buf[i]=0;
p rintf("3\n");
seal_encrypt(ftsc,buf,1000);
pr intf("4\n");
t = 0;
seal_key(&sc,key);
seal_decrypt(ftsc,buf,1);
seal_decrypt(ftsc,buf+l,999);
flag - 0;
for(i=0;i<1000;i++) if(buf[i]!=0)flag=l;
if(flag) printf("Decrypt failed.\n");
else printf ("Decrypt s u c c e e d e d A n " ) ;
}
Lexique anglais—français
accréditation : accréditation
blob : pâté
compromise : compromission
cryptanalysis : cryptanalyse
cryptanalyst : cryptanalyste
cryptographer : cryptographe
cryptography : cryptographie
cryptologist : cryptologue
cryptology: cryptologie
feedback with carry shift register : registre à décalage à rétroaction avec retenue
framing : encadrement
implémentation : réalisation
introducer : parrain
key: clef
login: accès
message: message
mix-and-mash : mélange-et-broie
obfuscation : dissimulation
padding : remplissage
receiver: destinataire
secrecy : confidentialité
seed : germe
self-recovering : auto-récupérant
superincreasing : super-croissant
tractable : soluble
uncertainty : incertitude