Techniques relatives à la cryptographie

 

1. Définitions

La cryptographie est une science dont l'objectif est de concevoir des formules mathématiques permettant de transformer des messages clairs (messages intelligibles) en des messages chiffrés (messages inintelligibles) pour tout ceux qui ne possèdent pas un certain secret (la clé).

Une des applications de la cryptographie est le chiffrement : assurer la confidentialité d'une information secrète ou sensible.

L'opération inverse du chiffrement, qui permet de retrouver un message en clair à l'aide d'un message chiffré, de l'algorithme de chiffrement et de la clé, s'appelle le déchiffrement.

Le décryptage consiste à récupérer le message original à l'aide du message chiffré sans disposer de la clé.

Les cryptanalistes consacrent leur temps à casser les algorithmes des cryptographes.

On entend par prestation de cryptologie toutes prestations visant à transformer à l'aide de conventions secrètes des informations ou signaux clairs en signaux inintelligibles pour des tiers, ou à réaliser l'opération inverse, grâce à des moyens, matériels ou logiciels conçus à cet effet (Article 28 de la loi n° 90-1170 du 29 décembre 1990 modifée).

On entend par moyen de cryptologie tout matériel ou logiciel conçu ou modifié dans le même objectif (Article 28 de la loi n° 90-1170 du 29 décembre 1990 modifiée).


2. Principaux types d'algorithmes :

On distingue les algorithmes à clé secrète et les algorithmes à clé publique.


2.1. Algorithme à clé secrète (ou symétrique) :

La même clé (le code secret) est utilisée pour encrypter et décrypter l'information. Le problème de cette méthode est qu'il faut trouver le moyen de transmettre de manière sécurisée la clé à son correspondant.

Nombre d'algorithmes reposent principalement sur 2 opérations mathématiques relativement simples.


2.1.1. La 1ère opération est la substitution :

Il s'agit d'un cryptosystème dans lequel chaque lettre du message est remplacée par un autre caractère, mais garde sa place dans le message.


2.1.1.1. La substitution monoalphabétique :

Le 1er usage révélé d'un chiffre de substitution dans un contexte militaire apparaît dans la "Guerre des Gaules", de Jules César (remplacer des lettres romaines par des lettres grecques). Une description détaillée de l'un des chiffres de substitution utilisés par César se trouve dans "les Vies des douze Césars" de Suétone.

Fonctionnement

César remplaçait simplement chaque lettre du message par la lettre venant 3 places après elle dans l'alphabet :

alphabet clair

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

alphabet chiffré

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

texte clair

v

e

n

i

 

v

i

d

i

 

v

i

c

i

                       

texte chiffré

Y

H

Q

L

 

Y

L

G

L

 

Y

L

F

L

                       

En cryptographie, la convention veut que l'on écrive l'alphabet usuel en minuscules et l'alphabet chiffré en MAJUSCULES. De même, le message original, ou texte clair, est écrit en minuscules et le message crypté, ou texte chiffré, est écrit en MAJUSCULES.

Avec la méthode du chiffre de César on peut obtenir 26 chiffres différents (le cryptage est assez faible !).

Application pratique (exercice n° 2 de [1] page 383) - il faut décaler l'alphabet de 7 crans :

Texte chiffré :
MHILY_LZA_ZBHL_XBPZXBL_MVYABUHL_HWWPBZ_JSHBKPBZ
_JHLJBZ_KPJABT_HYJHUBT_LZA_ULBAYVU

Texte clair :
faber_est_suae_quisque_fortunae_appius_claudius_caecus_dictum_arcanum_est_neutron

Programme écrit en Maple V

Complexité

Si on recrée un alphabet chiffré en disposant les lettres de toutes les manières possibles, il y a 26 ! = 403 291 461 126 605 635 584 000 000 redispositions possibles. Si une personne pouvait vérifier une clé par seconde, cela lui prendrait environ 1 278 828 834e10 années pour les essayer toutes et déchiffrer le message.

A cause de sa simplicité et de sa force, le principe de substitution monoalphabétique a dominé pendant le premier millénaire après J.-C.

Décryptage des algorithmes de substitution monoalphabétique

Les Arabes ont inventé la cryptanalyse et ont réussi à trouver le moyen de briser le chiffre de substitution monoalphabétique, resté inviolé pendant plusieurs siècles. Seule une civilisation ayant atteint un niveau élevé de connaissance dans plusieurs disciplines, dont les mathématiques, les statistiques et la linguistique pouvait inventer la cryptanalyse.

La description de la plus ancienne des techniques de cryptanalyse est rédigée au IXème siècle par le savant Abu Yusuf Ya'qub ibn Is-haq ibn as-Sabbah ibn Oomran ibn Ismaïl Al-Kindi. 2 paragraphes du "Manuscrit sur le déchiffrement des messages cryptographiques" (retrouvé en 1987 dans les archives ottomanes d'Istanbul) résument sa technique :

  " Une façon d'élucider un message crypté, si nous savons dans quelle langue il est écrit, est de nous procurer un autre texte en clair dans la même langue, de la longueur d'un feuillet environ, et de compter alors les apparitions de chaque lettre. Nous appellerons la lettre apparaissant le plus souvent la 1ère, la suivante la 2ème, la suivante la 3ème, et ainsi de suite pour chaque lettre dans le texte.

Ensuite, nous nous reporterons au texte chiffré que nous voulons éclaircir et nous relevons de même ses symboles. Nous remplaçons le symbole le plus fréquent par la lettre 1ère du texte clair, le suivant par la lettre 2ème, le suivant par la 3ème, et ainsi de suite jusqu'à ce que nous soyons venus à bout de tous les symboles du cryptogramme à résoudre. "

En français, e est la lettre la plus répandue, suivie par a, puis par i.

Le 1er outil de la cryptanalyse en substitution monoalphabétique est l'analyse de fréquences.

Plus les textes sont longs plus ils ont des chances de suivre les fréquences moyennes.

(a ... z) lettres de l'alphabet usuel français

Application pratique (exercice n° 1de [1] page 382) :

Texte chiffré :
XT_AXJ_BTRJMTJ_MQQMVUVXTJ_GXR_NCBWJR_N_UTX_LMBT N_PCLLX_XJ_BGR_XAVBDBVXTJ_XT_imaX_NU_AMTNXGMFVX_RUV GX_QGMJVX_NU_LUV_NU_QMGMBR_VCEMG_GX_VCB_DBJ_AXJJX QMVJBX_NX_LMBT_KUB_XAVBDMBJ_MGCVR_GX_VCB_APMTWXM_NX ACUGXUV_RXR_QXTRXXR_G_XIIVMEXVXTJ_GXR_SCBTJUVXR_NX RXR_VXBTR_RX_NXGBXVXTJ_XJ_RXR_WXTCUZ_RX_PXUVJXVXTJ G_UT_G_MUJVX_GX_VCB_AVBM_MDXA_ICVAX_QCUV_IMBVX_DXTBV GXR_LMWBABXTR_GXR_APMGNXXTR_XJ_GXR_MRJVCGCWUXR

L'analyse de fréquence donne : A, 13, B, 24, C, 14, D, 5, E, 2, F, 1, G, 22, H, 0, I, 0, J, 22, K, 1, L, 6, M, 25, N, 12, O, 0, P, 4, Q, 7, R, 27, S, 1, T, 22, U, 17, V, 30, W, 5, X, 62, Y, 0, Z, 1
Programme écrit en Maple V

La lettre X apparait 62 fois, on a peu de chance de se tromper en remplaçant la lettre X par e. Avec un peu de jugeote on trouve le reste.

alphabet chiffré

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

alphabet clair

c

i

o

v

y

b

l

H

f

t

q

m

a

d

O

h

p

s

j

n

u

r

g

e

Y

x

Texte clair :
en_cet_instant_apparurent_les_doigts_d_une_main d_homme_et_ils_ecrivirent_en_face_du_candelabre_sur le_platre_du_mur_du_palais_royal_le_roi_vit_cette partie_de_main_qui_ecrivait_alors_le_roi_changea_de couleur_ses_pensees_l_effrayerent_les_jointures_de ses_reins_se_delierent_et_ses_genoux_se_heurterent l_un_l_autre_le_roi_cria_avec_force_pour_faire_venir les_magiciens_les_chaldeens_et_les_astrologues

Marie Stuart a été condamnée à mort en 1587 car un certain Thomas Phelippes (meilleur cryptanalyste d'Europe, parlant le français, l'italien, l'espagnol, le latin et l'allemand) réussi à briser par l'analyse des fréquences les messages chiffrés dans lesquels elle proposait d'assassiner la reine Elisabeth.

Une tentative de déchiffrement peut aboutir à une impasse si la lettre la plus courrament utilisée d'ordinaire disparait. En 1969, George Perec a réussi à écrire un roman de 200 pages, "La Disparition", sans employer un seul mot contenant la lettre e. Plus remarquable encore est le fait que le critique et romancier anglais Gilbert Adair a réalisé une prouesse en traduisant "La Disparition" en anglais, en respectant le principe de Perec.


2.1.1.2. La substitution polyalphabétique :

Jusqu'en 1500, un chiffrage par substitution monoalphabétique ne mettait en oeuvre qu'un seul alphabet chiffré pour crypter un message. Le savant florentin Léon Battista Alberti proposa d'utiliser 2 ou plusieurs alphabets chiffrés mais il échoua à développer son concept et c'est Blaise de Vigenère, diplomate français, qui inventa le chiffre polyalphabétique en 1586 et le publia dans son "Traité des chiffres".

Fonctionnement

Le carré de Vigenère comporte 26 alphabets différents, chacun étant un alphabet décalé selon le chiffre de César. Ainsi, la ligne 1 est un alphabet ayant un décalage de César d'une unité, la ligne 2 un décalage de 2 unités, et ainsi de suite ...

 

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

1

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

2

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

3

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

4

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

5

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

6

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

7

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

8

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

9

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

10

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

11

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

12

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

13

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

14

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

15

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

16

Q

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

17

R

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

18

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

19

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

20

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

21

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

22

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

23

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

24

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

25

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

26

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

Le mot-clé est KILO (lignes 10, 8, 11 et 14)

les lignes définies par le mot de code KILO sont surlignées en jaune

Si l'expéditeur n'utilisait qu'un seul des alphabets pour chiffrer le message tout entier, ce serait l'application simple du chiffre de César. Mais le chiffre de Vigenère impose d'utiliser une ligne différente du carré de Vigenère pour crypter chaque lettre du message.

L'expéditeur encrypte chaque lettre du message en clair suivant une ligne du tableau ; la 1ère lettre selon la ligne 10, la 2ème lettre selon la ligne 8, etc. Les numéros de lignes sont choisis grâce à un mot-clé qui est connu secrètement par l'expéditeur et le destinataire.

Par exemple on crypte la phrase "thé russe thé jasmin thé" en utilisant le mot-clé KILO. Le mot-clé est répété en boucle au dessus du message de sorte que chaque lettre du message soit associée à une lettre de la clé.

Mot-clé

K

I

L

O

K

I

L

O

K

I

L

O

K

I

L

O

K

I

L

O

texte clair

t

h

é

r

u

s

s

e

t

h

é

j

a

s

m

i

n

t

h

é

texte chiffré

D

P

P

F

E

A

D

S

D

P

P

X

K

A

X

W

X

B

S

S

Un mot-clef plus long ferait intervenir un plus grand nombre de lignes.

Le grand avantage du chiffre de Vigenère est qu'il est inattaquable par l'analyse des fréquences.

En effet, les 2 s du mot "russe" sont codés d'abord A puis D.

Comme le chiffre polyalphabétique était plus difficile à employer, le simple chiffre monoalphabétique était parfaitement adapté au XVIIème siècle (il était rapide, facile et sûr face à des gens non versés dans la cryptanalyse).

Complexité

Le chiffrement de Vigenère offre également un grand choix de clefs, même si on la choisie relativement courte.

Par exemple, pour une clef de 10 lettres il y a 26 choix pour la première lettre, 26 choix pour la seconde lettre, etc... soit au total 2610 = 141 167 095 653 376 choix possibles. Si une personne pouvait vérifier une clé par seconde, cela lui prendrait environ 4 476 379 années pour les essayer toutes et déchiffrer le message.

Décryptage du chiffre de Vigenère

La figure la plus étonnante de la cryptanalyse au XIXème siècle est celle de Charles Babbage, fils d'un prospère banquier londonien. En matière de découvertes scientifiques, il fut le 1er à comprendre que dans un tronc d'arbre, la largeur d'un anneau dépend du temps qu'il a fait dans l'année. Il s'est intéressé aux statistiques (1ère tables de mortalité). Il a proposé un prix unique pour l'affranchissement d'une lettre. Après s'être rendu compte que les Ephémérides nautiques pour trouver la latitude et la longitude en mer contenaient plus de mille erreurs il a échoué faute de financement à construire une machine mécanique capable de faire des calculs avec un haut degré de précision.

Il a apporté une contribution importante à la cryptanalyse : il réussit à casser le chiffre de Vigenère, probablement en 1854 car sa découverte resta ignorée en l'absence d'écrit. Pendant ce temps, un officier prussien à la retraite, Friedrich Wilhem Kasiski, parvint au même résultat et a publié en 1863 "Die Geheimschriftren und die Dechiffrir-kunst".

Dans l'exemple ci-dessus, le mot "thé" est chiffré "DPP" 2 fois et "BSS" 1 fois. Babbage comprit que des répétitions de cette sorte lui offraient la prise dont il avait besoin pour attaquer Vigenère. Il va d'abord chercher des séquences de lettres qui apparaissent plus d'une fois dans le texte :

Le 1er cas étant le plus probable il en déduit le nombre de facteurs de la clé puis par une méthode de fréquence de distribution des lettres cryptées il en déduit les lettres du texte clair.

Application pratique (exercice n° 4 de [1] page 384) :

Texte chiffré :
KQOWEFVJPUJUUNUKGLMEKJINMWUXFQMKJBGWRLFNFGHUDWUUMBSVLPSNCMUEKQC TESWREEKOYSSIWCTUAXYOTAPXPLWPNTCGOJBGFQHTDWXIZAYGFFNSXCSEYNCTSSPNTUJNYTG GWZGRWUUNEJUUQEAPYMEKQHUIDUXFPGUYTSMTFFSHNUOCZGMRUWEYTRGKMEEDCTVRECFBD JQCUSWVBPNLGOYLSKMTEFVJJTWWMFMWPNMEMTMHRSPXFSSKFFSTNUOCZGMDOEOYEEKCPJR GPMURSKHFRSEIUEVGOYCWXIZAYGOSAANYDOEOYJLWUNHAMEBFELXYVLWNOJNSIOFRWUCCES WKVIDGMUCGOCRUWGNMAAFFVNSIUDEKQHCEUCPFCMPVSUDGAVEMNYMAMVLFMAOYFNTQCU AFVFJNXKLNEIWCWODCCULWRIFTWGMUSWOVMATNYBUHTCOCWFYTNMGYTQMKBBNLGFBTWO JFTWGNTEJKNEEDCLDHWTVBUVGFBIJGYYIDGMVRDGMPLSWGJLAGOEEKJOFEKNYNOLRIVRWVUH EIWUURWGMUTJCDBNKGMBIDGM

Il faut d'abord chercher les séquences de lettres qui apparaissent plus d'1 fois dans le texte.

    Longueurs de clef possibles
Séquence répétée Espace de répétition 2 3 5 11 13 19 53
WUU 95         x         x    
WUU 416 x             x        
EEK 200 x     x                
EEK 265       x             x
IDGM 165   x x x            
IDGM 5       x              
IDGM 55       x x        
GMU 90 x x x            
GMU 120 x x x          

Les diviseurs du nombre de caractères entre 2 séquences figurent dans le tableau (ex. 95 = 5 x 19)

Prenons la séquence IDGM, elle se répète après 165 lettres, et les nombres 3, 5 et 11 sont ses facteurs premiers parce qu'ils divisent 165 sans laisser de reste. Ces facteurs suggèrent 5 possibilités :

a) la clef est constituée de 1 lettre et se répète 165 fois entre 2 occurences

b) la clef est constituée de 3 lettres et se répète 55 fois entre 2 occurences

c) la clef est constituée de 5 lettres et se répète 33 fois entre 2 occurences

d) la clef est constituée de 11 lettres et se répète 15 fois entre 2 occurences

e) la clef est constituée de 165 lettres et se répète 1 fois entre 2 occurences

Pour établir si la clef est composée de 3, 5 ou 11 facteurs, il apparaît dans le tableau que toutes les périodes sont divisibles par 5. Tout se cale parfaitement sur un mot-clef de 5 lettres.

Il va falloir découvrir les lettres du mot clef : L1-L2-L3-L4-L5, L1 représente la 1ère lettre du mot clef et ainsi de suite ...

Commençons par L1

Nous savons que la ligne du carré de Vigenère, définie par L1, commande l'alphabet chiffré pour la 1ère, la 6ème, la 11ème ... lettres du message. En regardant la 1ère, la 6ème, la 11ème ... lettres du texte chiffré on peut utiliser la bonne vieille méthode de l'analyse de fréquences.

On trace un graphique montrant la distribution des lettres qui apparaissent à la 1ère, la 6ème, la 11ème ... dans le texte chiffré KQOWEFVJPUJUUNUKG ... , soit K, F, J, ...

(A .. Z)

La répétition ci-dessus (en rouge) présente des traits communs avec celle de l'alphabet courant (en bleu) décalée de 18 crans. Le pic le plus important se trouve sous le e ce qui ne nous surprend pas et sous le W.

L1

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

18

S

T

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

En superposant les 2 graphiques ils ont la même silhouette et nous en déduisons que la 1ère lettre du mot clef L1 est S.

On recommence la même démarche pour identifier les autres lettres du mot-clef.

On trouve pour chaque lettre L2, L3, L4 et L5 :

L2

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

2

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

B

L3

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

20

U

V

W

X

Y

Z

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

L4

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

1

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

A

L5

a

b

c

d

e

f

g

h

i

j

k

l

m

n

o

p

q

r

s

t

u

v

w

x

y

z

26

A

B

C

D

E

F

G

H

I

J

K

L

M

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

Le mot clef est : S C U B A

Programme écrit en Maple V

Texte clair :
souvent pour s'amuser les hommes d'equipage prennent des albatros vastes oiseaux des mers qui suivent indolents compagnons de voyage le navire glissant sur les gouffres amers a peine les ont ils deposes sur les planches que ces rois de l' azur maladroits et honteux laissent piteusement leurs grandes ailes blanches comme des avirons trainer a cote d'eux ce voyageur aile comme il est gauche et veule lui naguere si beau qu'il est comique et laid l'un agace son bec avec un brule gueule l'autre mime en boitant l'infirme qui volait le poete est semblable au prince des nuees qui hante la tempete et se rit de l'archer baudelaire exile sur le sol au milieu des huees le mot pour et age quatre est trajan ses ailes za


2.1.1.3. Le Data Encryption Standard (DES) :

Adopté en tant que standard du gouvernement américain (dont la National Security Agency-NSA) le 23 novembre 1976, c'est en fait la version à 56 bits du chiffre Lucifer conçu par IBM et établi par Horst Feistel, un émigré allemand arrivé en Amérique en 1934. Avec 72 057 594 037 927 936 clés différentes la NSA semblait croire qu'un tel algorithme apporterait une confidentialité suffisante pour le public.

Fonctionnement

L'algorithme comporte une permutation initale sur des blocs de 64 bits, suivie de l'application d'une même fonction f, 16 fois de suite, et une permutation finale.

La fonction f comporte un certain nombre d'opérations simples comme des permutations et substitutions. Ces opérations sont paramétrées par l'intermédiaire de matrices ou tables invariantes, décrivant pour chaque bit la position qu'il doit adopter en sortie.

Le même algorithme est utilisé pour chiffrer et déchiffrer. Le problème majeure du DES est celui de la distribution de la clef. Dans les années 1970, les banques essayèrent de faire distribuer les clefs par des coursiers sélectionnés munis de cartables cadenassés.

Décryptage du DES

Il est apparu au fil des années, que le DES est un algorithme sûr. L'attaque ayant le plus de chance de réussir est la recherche exhaustive de la clé. Aujourd'hui, avec des systèmes spécialisés (Deep crack conçu par l'Electronique Frontier Foundation) et/ou la collaboration de milliers d'internautes, il est possible de déchiffrer des clés DES de 56 bits en quelques heures.


2.1.1.4. Le futur : Advanced Encryption Standard (AES) :

Au terme d'une compétition internationale qui a duré trois ans, le National Institute of Standards and Technology (NIST) a choisi, lundi 2 octobre 2000, un algorithme de cryptage belge, baptisé Rijndael, pour succéder au système DES.

L'avancée des techniques de cryptanalyse (décryptage) et la progression de la puissance des microprocesseurs rendait le remplacement du DES nécessaire. Rijndael est l'oeuvre de deux cryptographes flamands, Joan Daemen, de la société Proton World International, spécialisée dans la carte à puce et le porte-monnaie électronique, et Vincent Rijmen, postdoctorant à l'Université catholique de Louvain.

« Aucun des autres algorithmes n'avait la flexibilité de Rijndael », estime Joan Daemen qui, avec son jeune confrère, s'était concentré sur une solution technique à la fois simple, rapide et légère - capable notamment de fonctionner sur les cartes à puce actuelles, alors que ça ne faisait pas partie des spécifications. Joan Daemen croyait donc en ses chances, mais craignait que le NIST, qui avait lancé l'appel d'offres pour le nouvel Advanced Encryption Standard (AES), ne choisisse l'un des concurrents américains pour des « motifs politiques ».

Contrairement au DES, qui avait été développé en grand secret par IBM, l'AES a été choisi au terme d'une procédure transparente particulièrement sévère. Au départ, 15 algorithmes étaient en lice. Chacun a fait l'objet d'attaques de tous ordres.

En avril 2000, seuls 5 finalistes avaient montré une résistance convenable. Outre Rijndael, on comptait 3 systèmes américains - MARS, proposé par IBM, RC6, par RSA Security, et Twofish, défendu par Counterpaneq - et Serpent, conçu par 3 chercheurs britannique, danois et israélien.

Le choix final de Rijndael a déjoué tous les pronostics. « C'est assez extraordinaire, même si cet algorithme présentait la solution la plus élégante », juge Jean-Jacques Quisquater, du groupe crypto de l'université de Louvain-la-Neuve. Même surprise pour Jacques Stern, directeur du département d'informatique à l'Ecole normale supérieure (ENS), pour qui le grand mérite de Rijndael est d'offrir un niveau de sécurité relativement indépendant de la capacité des processeurs qui le mettent en oeuvre. Son choix par les autorités américaines serait-il le signe d'un intérêt nouveau, outre-Atlantique, pour la carte à puce ? « Possible », répond Jacques Stern, pour qui le NIST peut aussi avoir voulu éviter de « donner un avantage compétitif à l'un des trois industriels américains en compétition ».

Ceux-ci se consoleront en rappelant que le choix du nouvel AES n'affectera guère leur revenus, les compétiteurs s'étant par avance engagés à ne pas breveter leur procédé. La société Proton World International risque cependant d'avoir une longueur d'avance pour proposer des solutions industrielles aux administrations américaines.

Le secteur privé sera sans doute plus long à convaincre : en France, le GIE Carte bancaire, occupé à préparer la « migration » de ses adhérents, en 2001, vers un nouveau système de sécurisation des transactions, continue à leur recommander l'utilisation du triple DES. L'adoption d'AES est synonyme d'adaptations coûteuses et prendra probablement plusieurs années.


2.1.2. La 2ème opération est la transposition :

Il s'agit d'un cryptosystème dans lequel chaque lettre du message reste inchangée, mais mise à une autre place dans le message.

Pour des messages courts, cette méthode est peu sûre car il n'y a guère de variantes pour redistribuer une poignée de lettres.

Par exemple, un mot de 3 lettres ne peut être tourné que dans 6 positions différentes, ainsi lui ne peut se transformer qu'en lui, liu, uli, uil, ilu, iul.

Lorsque le nombre de lettres croît, le nombre d'arrangements se multiplie rapidement, et il devient impossible de retrouver le texte original sans connaître le procédé de brouillage.

Une transposition des lettres au hasard semble offrir un très haut niveau de sécurité. Mais il y a un inconvénient. Pour que la transposition soit efficace, l'ordonnancement des lettres doit suivre un système rigoureux, sur lequel expéditeur et destinataire se sont préalablement entendus.

Le 1er dispositif de cryptographie militaire connu utilisant une forme de transposition remonte au Vème siècle avant J.-C, la scytale (bâton de bois autour duquel est enroulée une bande de cuir ou de parchemin).


2.2. Algorithme à clé publique (ou asymétrique) :

Ces algorithmes n'ont été découverts par la communauté scientifique qu'au début des années 1970. Ils reposent sur des fonctions mathématiques faciles à calculer dans un sens mais extrêmement difficiles dans l'autre.

Calculer le carré d'un nombre entier est particulièrement simple puisqu'il suffit de le multiplier par lui-même (ex : 99 * 99 = 9801). En revanche, l'opération inverse (racine carrée) est nettement plus complexe (ex : 9801½ = 99).

La caractéristique la plus marquante d'un algorithme à clé publique est qu'il fonctionne avec 2 clés, l'une privée, que l'on garde secrètement, l'autre publique, que l'on peut diffuser à volonté.

Ces 2 clés sont liées par une fonction mathématique.

Avec ce type de mécanisme, on utilise la clé publique d'une personne lorsqu'on veut lui envoyer un message chiffré. Seule la personne disposant de la clé privée correspondante est en mesure de déchiffrer le message ainsi transmis.

L'avantage des algorithmes asymétriques est qu'ils permettent d'effectuer du chiffrement sans nécessiter le partage d'une information secrète, à savoir la clé, comme c'est le cas des algorithmes symétriques.

2.2.1. Le RSA :

Le système RSA s'impose chaque année davantage dans le monde des communications informatiques. C'est l'algorithme de chiffrement asymétrique le plus utilisé.

L'idée d'un système de chiffrement utilisant 2 clés a été proposée en 1977 par 3 Américains, Ron Rivest, Adi Shamir et Leonard Adleman, ont présenté en 1977 une application pratique d'un système de chiffrement, appelé RSA.

C'est un algorithme à clef publique basé sur la difficulté de factoriser un nombre qui est le produit de 2 grands nombres premiers.

2.2.1.1. 1ère application : crypter des messages

Fonctionnement

L'expéditeur utilise une clef publique pour transformer A en B. Pour comprendre le message chiffré B le destinataire doit utiliser sa clef privée.

Application - courrier électronique

Alice veut envoyer le message "RSA" à Bob.

Bob construit un quadruplet (p, q, e, d), tels que :

Bob calcule le produit p * q, soit n = 3337, n est publié ouvertement (clef publique)

Bob vérifie par l'algorithme d'Euclide que e est bien premier avec 3220 = (p-1) * (q-1) :

3220 = 79 * 40 + 60

79 = 60 * 1 + 19

60 = 19 * 3 + 3

19 = 3 * 6 + 1

3 = 1 * 3 + 0 d'où PGCD(3220,79) = 1

79 d + k 3220 = 1

79 * 1019 - 25 * 3220 = 1

donc d = 1019

Bob communique publiquement et par conséquent il donne à Alice, n et e.

Alice découpe le message en 3 lettres : "R" + "S" + "A"

Elle affecte à chaque lettre son code ASCII : R (82), S (83) et A (65)

Elle crypte ensuite chaque élément en l'élevant à l'exposant e modulo n :

c1 = 8279 mod 3337 = 274

c2 = 8379 mod 3337 = 2251

c3 = 6579 mod 3337 = 541

Bob reçoit le message chiffré "0274" + "2251" + "0541"

Il déchiffre le message en élevant chaque cj à l'exposant d modulo n :

m1 = 2741019 mod 3337 = 82

m2 = 22511019 mod 3337 = 83

m3 = 5411019 mod 3337 = 65

A partir de la table des codes ASCII, Bob sait lire le message d'Alice.

2.2.1.2. 2ème application : signer des messages

Fonctionnement

Le signataire utilise sa clef privée pour transformer A en B. Le destinataire reçoit (A, B) et applique la clef publique sur B. S'il retrouve A c'est que le message a bien été crypté par le signataire.

La carte bancaire utilise un calcul cryptographique pour démontrer que la carte est authentique

Application pratique - carte bancaire (comment peut-on réaliser un clone de CB ... ?)

Outils mathématiques (tirés de [2]) :

  1. Algorithme d'Euclide pour trouver le plus grand diviseur commun de nombres entiers a et b (page 41) :

Cet algorithme consiste à réaliser une suite de divisions euclidiennes. On divise a par b ; puis b par le reste trouvé ; puis le 1er reste par le 2ème, etc. Le dernier reste non nul est appelé PGCD (a,b).

Par exemple 4 = PGCD (16, 12)

16 = 12 * 1 + 4

12 = 4 * 3 + 0

  1. Théorème de caractérisation des nombres premiers (page 48) :

Définition : Si 2 nombres a et b > 0 n'ont aucun autre facteur commun que 1, c'est à dire si PGCD (a,b) = 1, ont dit que ces 2 nombres sont premiers entre eux.

a et b Î N+* sont premiers entre eux si et seulement si $ x, y Î N tel que a * x + b * y = 1

Par exemple 3 est premier avec 5 Þ 2 * 3 - 1* 5 = 1

Application au RSA :

e premier avec (p-1) * (q-1) Þ $ d, k Î N tel que e * d + k (p-1)(q-1) = 1

ou écrit autrement

e * d = 1 mod (p-1)(q-1)

  1. Fonction indicatrice d'Euler, notée j (page 77) :

Définition : j (n) est égale au nombre d'entiers entre 0 et n-1 qui sont premiers avec n.

Par exemple j (12) = { 1, 5, 7, 11} = 4

Si p et q Î N+* sont premiers et n est leur produit alors j (n) = (p-1) (q-1)

Si a et n Î N+* sont premiers entre eux alors a j (n) = 1 mod n

 

  1. C d (mod n)

= (M e ) d mod n

= M (e * d) mod n

or e * d = 1 - k (p-1)(q-1) ou e * d = 1 - k j (n)
  = M (1 - k j (n)) mod n    
  = M (mod n) * M -k j (n) mod n    
  = M mod n    

Sécurité du système RSA

Depuis qu'un nombre de 512 bits (155 chiffres décimaux) a été factorisé le 22 août 1999 par une équipe de l'Institut national de recherche en mathématiques et en science informatique d'Amsterdam, la société RSA Data-Security recommande d'utiliser des nombres n de :

Décryptage du RSA

  1. Connaissant n, e et C, il faut résoudre C = M e (mod n), M étant l'inconnu.

Pour des grands nombres c'est un problème difficile !

  1. Factoriser n = p * q, calculer j (n) = (p-1) (q-1)

Pour des grands nombres la factorisation est un problème difficile :

En 1970, on savait factoriser des nombres entiers de 20 chiffres (64 bits)

En 1980, le record était de 50 chiffres (164 bits)

En 1990, le record était de 116 chiffres (384 bits)

En 1994, le défi RSA-129 fut remporté alors qu'en 1977 on avait évalué qu'une clef à 129 chiffres ne serait pas factorisée avant des milliards d'années !

En 1996, celui du RSA-130

En 1999, ceux du RSA-140 et RSA-155 (512 bits)

Il faut ensuite résoudre e * d = 1 mod j (n), d étant l'inconnu.

Résultat du record de factorisation du RSA-155

Un nombre de 155 chiffres a été factorisé en produit de 2 nombres premiers de 78 chiffres :

10941

73864

157505

27421

80970

73220

40357

61200

37329

45449

 

20599

09138

42131

47634

99842

88934

78471

79972

57891

26733

 

24976

25752

89978

18337

97076

53724

40271

46743

53159

33543

33897

=

102

63959

28297

41105

77205

41965

73991

67590

07165

67808

03806

68033

41933

52179

07113

07779

       

x

106

60348

83801

68454

82092

72203

60012

87867

92079

58575

98929

15222

70608

23719

30628

08643

       

Ce résultat a nécessité :


3. Aspect juridique :

3.1. En France

Jusqu'au début des années 1990, l'utilisation de moyens cryptographiques était strictement réservé aux organisations militaires et gouvernementaux.

A la suite des décrets d'application, en février et mars 1998, de la loi du 26 juillet 1996 il était possible d'utiliser des systèmes de chiffrement dont la clé ne dépassait pas 40 bits.

En janvier 1999, le 1er Ministre a annoncé une libérisation complète de l'utilisation du chiffrement en France. Cette annonce a été suivie de 2 décrets n° 99-199 et 99-200 le 17 mars 1999.

L'utilisation, l'importation et l'exportation de moyens cryptographiques strictement destinés à des fonctions d'authentification, de signature, de contrôle d'intégrité, etc. au sein d'une entreprise sont totalement libres (article 28 de la loi n° 90-1170 ), à condition que le fournisseur du produit ait fait une déclaration préalable.

Les dispositifs de chiffrement ne doivent pas dépasser 128 bits.

Au dessus de cette limite, il faut, soit utiliser les services d'un tiers de séquestre agréé, soit demander une autorisation auprès de la Direction Centrale de la Sécurité des Systèmes d'Information) dépendant du 1er Ministre.

3.2. Aux Etats Unis

L'exportation de systèmes de chiffrement symétriques utilisant une clé supérieure à 56 bits ou asymétriques avec une clé de plus de 512 bits est interdite.


BIBLIOGRAPHIE

[1] : Histoire des codes secrets de Simon Singh Editions J.C. Lattès 149,00 F TTC ISBN 2-7096-2048-0

[2] : Merveilleux nombres premiers de J.P. Delahaye Editions Belin 155,00 F TTC ISBN 2-84245-017-5

[3] : Règles et recommandations concernant le choix et le dimensionnement des mécanismes cryptographiques de niveau de robustesse standard - version 1.02 du 19/11/04 ( pdf 1 Mo)

[4] : Mon mémoire de DESS Information et Sécurité 2002 ( pdf 500 Ko)


LIENS

Site créé lors de la fête de la science 2000

La cryptographie expliquée site de Fédéric Bayart

Pour en savoir plus sur Rijndael

UCL Crypto Group (Université Catholique de Louvain) exemples ludiques

Security and Cryptography Laboratory (LASEC)


LES PROGRAMMES SOURCES

Le chiffre de César

> restart;alphabetA:='ABCDEFGHIJKLMNOPQRSTUVWXYZ';

alphabetA := ABCDEFGHIJKLMNOPQRSTUVWXYZ

> alphabeta:='abcdefghijklmnopqrstuvwxyz';

alphabeta := abcdefghijklmnopqrstuvwxyz

> decodROTl:=proc(mesc,decalage)
> local mes,i,p;
> mes:=NULL:
> for i from 1 to length(mesc) do
> if substring(mesc,i)='_' then mes:=cat(mes,'_') else
> p:=SearchText(substring(mesc,i),alphabetA);
> #SearchText : position d'un caractère dans l'expression
> #substring : isole le i-ième caractère
> if p-decalage>0 then mes:=cat(mes,substring(alphabeta,p-decalage));
> #concatène les expressions
> else
> mes:=cat(mes,substring(alphabeta,length(alphabeta)+p-decalage));
> fi;
> fi;
> od;
> mes;
> end:
> decodROTl('MHILY_LZA_ZBHL_XBPZXBL_MVYABUHL_HWWPBZ_JSHBKPBZ_ JHLJBZ_KPJABT_HYJHUBT_LZA_ULBAYVU',7);

faber_est_suae_quisque_fortunae_appius_claudius_caecus_dictum_arca\
num_est_neutron


Analyse de fréquences

> restart;
> frequence:=proc(mesc)
> local i,n;
> n:=array(1..26);
> for i from 1 to 26 do n[i]:=0; od;
> mesc;
> for i from 1 to length(mesc) do
> if substring(mesc,i)='A' then n[1]:=n[1]+1;fi;
> if substring(mesc,i)='B' then n[2]:=n[2]+1;fi;
> if substring(mesc,i)='C' then n[3]:=n[3]+1;fi;
> if substring(mesc,i)='D' then n[4]:=n[4]+1;fi;
> if substring(mesc,i)='E' then n[5]:=n[5]+1;fi;
> if substring(mesc,i)='F' then n[6]:=n[6]+1;fi;
> if substring(mesc,i)='G' then n[7]:=n[7]+1;fi;
> if substring(mesc,i)='H' then n[8]:=n[8]+1;fi;
> if substring(mesc,i)='I' then n[9]:=n[9]+1;fi;
> if substring(mesc,i)='J' then n[10]:=n[10]+1;fi;
> if substring(mesc,i)='K' then n[11]:=n[11]+1;fi;
> if substring(mesc,i)='L' then n[12]:=n[12]+1;fi;
> if substring(mesc,i)='M' then n[13]:=n[13]+1;fi;
> if substring(mesc,i)='N' then n[14]:=n[14]+1;fi;
> if substring(mesc,i)='O' then n[15]:=n[15]+1;fi;
> if substring(mesc,i)='P' then n[16]:=n[16]+1;fi;
> if substring(mesc,i)='Q' then n[17]:=n[17]+1;fi;
> if substring(mesc,i)='R' then n[18]:=n[18]+1;fi;
> if substring(mesc,i)='S' then n[19]:=n[19]+1;fi;
> if substring(mesc,i)='T' then n[20]:=n[20]+1;fi;
> if substring(mesc,i)='U' then n[21]:=n[21]+1;fi;
> if substring(mesc,i)='V' then n[22]:=n[22]+1;fi;
> if substring(mesc,i)='W' then n[23]:=n[23]+1;fi;
> if substring(mesc,i)='X' then n[24]:=n[24]+1;fi;
> if substring(mesc,i)='Y' then n[25]:=n[25]+1;fi;
> if substring(mesc,i)='Z' then n[26]:=n[26]+1;fi;
> od;
>print('A',n[1],'B',n[2],'C',n[3],'D',n[4],'E',n[5],'F',n[6],'G',n[7],'H',n[8],'I',n[9],'J',n[10],'K',n[11],'L',n[12],'M',n[13],'N',n[14] ,'O',n[15],'P',n[16],'Q',n[17],'R',n[18],'S',n[19],'T',n[20],'U',n[21],'V',n[22],'W',n[23],'X',n[24],'Y',n[25],'Z',n[26]);
> end:
> frequence('XT_AXJ_BTRJMTJ_MQQMVUVXTJ_GXR_NCBWJR_N_UTX_LMBT_N_PCLLX_XJ_BGR _XAVBDBVXTJ_XT_imaX_NU_AMTNXGMFVX_RUV_GX_QGMJVX_NU_LUV_NU_QMGMBR _VCEMG_GX_VCB_DBJ_AXJJX_QMVJBX_NX_LMBT_KUB_XAVBDMBJ_MGCVR_GX_VCB _APMTWXM_NX_ACUGXUV_RXR_QXTRXXR_G_XIIVMEXVXTJ_GXR_SCBTJUVXR_NX_RXR _VXBTR_RX_NXGBXVXTJ_XJ_RXR_WXTCUZ_RX_PXUVJXVXTJ_G_UT_G_MUJVX_GX_VCB _AVBM_MDXA_ICVAX_QCUV_IMBVX_DXTBV_GXR_LMWBABXTR_GXR_APMGNXXTR_XJ _GXR_MRJVCGCWUXR');

A, 13, B, 24, C, 14, D, 5, E, 2, F, 1, G, 22, H, 0, I, 0, J, 22, K, 1,
L, 6, M, 25, N, 12, O, 0, P, 4, Q, 7, R, 27, S, 1, T, 22, U, 17,
V, 30, W, 5, X, 62, Y, 0, Z, 1


> rempl:=proc(mesc)
> local alphabetA,alphabeta,index,pos,mes;
> mes:=NULL;
> alphabetA:='ABCDEFGHIJKLMNOPQRSTUVWXYZ_';
> alphabeta:='ciovyblHftqmadOhpsjnurgeYx_':
> for index from 1 to length(mesc) do
> if substring(mesc,index)='_' then mes:=cat(mes,'_') else
> pos:=SearchText(substring(mesc,index),alphabetA);
> #SearchText : position d'un caractère dans l'expression
> #substring : isole le index-ième caractère
> mes:=cat(mes,substring(alphabeta,pos));
> #concatène les expressions
> fi;
> od;
> mes;
> end:
> rempl('XT_AXJ_BTRJMTJ_MQQMVUVXTJ_GXR_NCBWJR_N_UTX_LMBT_N_PCLLX_XJ_BGR _XAVBDBVXTJ_XT_imaX_NU_AMTNXGMFVX_RUV_GX_QGMJVX_NU_LUV_NU_QMGMBR _VCEMG_GX_VCB_DBJ_AXJJX_QMVJBX_NX_LMBT_KUB_XAVBDMBJ_MGCVR_GX_VCB _APMTWXM_NX_ACUGXUV_RXR_QXTRXXR_G_XIIVMEXVXTJ_GXR_SCBTJUVXR_NX_RXR _VXBTR_RX_NXGBXVXTJ_XJ_RXR_WXTCUZ_RX_PXUVJXVXTJ_G_UT_G_MUJVX_GX_VCB _AVBM_MDXA_ICVAX_QCUV_IMBVX_DXTBV_GXR_LMWBABXTR_GXR_APMGNXXTR_XJ _GXR_MRJVCGCWUXR');

en_cet_instant_apparurent_les_doigts_d_une_main_d_homme_et_ils _ecrivirent_en_face_du_candelabre_sur_le_platre_du_mur_du_palais _royal_le_roi_vit_cette_partie_de_main_qui_ecrivait_alors_le_roi _changea_de_couleur_ses_pensees_l_effrayerent_les_jointures_de_ses _reins_se_delierent_et_ses_genoux_se_heurterent_l_un_l_autre_le_roi _cria_avec_force_pour_faire_venir_les_magiciens_les_chaldeens_et _les_astrologues


Le chiffre de Vigenère

> restart;
> with(plots);
[animate, animate3d, changecoords, complexplot, complexplot3d, conformal, contourplot, contourplot3d, coordplot, coordplot3d, cylinderplot, densityplot, display, display3d, fieldplot, fieldplot3d, gradplot, gradplot3d, implicitplot, implicitplot3d, inequal, listcontplot, listcontplot3d, listdensityplot, listplot, listplot3d, loglogplot, logplot, matrixplot, odeplot, pareto, pointplot, pointplot3d, polarplot, polygonplot, polygonplot3d, polyhedraplot, replot, rootlocus, semilogplot, setoptions, setoptions3d, spacecurve, sparsematrixplot, sphereplot, surfdata, textplot, textplot3d, tubeplot]
> frequence:=proc(mesc)
> local a,b,i,n,p,clef;
> n:=array(1..26);
> p:=array(0..25);
> for i from 1 to 26 do n[i]:=0; od;
> clef:=18;
> #la valeur de clef doit être introduite par itération de manière que les
> #2 courbes coïncident
> p[(0+clef) mod 26]:=9;p[(1+clef) mod 26]:=1;p[(2+clef) mod 26]:=3;p[ (3+clef) mod 26]:=3;p[(4+clef) mod 26]:=15;p[(5+clef) mod 26]:=1;p[ (6+clef) mod 26]:=1;p[(7+clef) mod 26]:=1;p[(8+clef) mod 26]:=8;p[(9+clef) mod 26]:=1;p[(10+clef) mod 26]:=0;p[(11+clef) mod 26]:=5;p[(12+clef) mod 26]:=3;p[(13+clef) mod 26]:=7;p[(14+clef) mod 26]:=5;p[(15+clef) mod 26]:=3;p[(16+clef) mod 26]:=1;p[(17+clef) mod 26]:=6;p[(18+clef) mod 26]:=8;p[(19+clef) mod 26]:=7;p[(20+clef) mod 26]:=6;p[(21+clef) mod 26]:=2;p[(22+clef) mod 26]:=0;p[(23+clef) mod 26]:=1;p[(24+clef) mod 26]:=1;p[(25+clef) mod 26]:=1;
> mesc;
> for i from 1 by 5 to length(mesc) do
> if substring(mesc,i)='A' then n[1]:=n[1]+1;fi;
> if substring(mesc,i)='B' then n[2]:=n[2]+1;fi;
> if substring(mesc,i)='C' then n[3]:=n[3]+1;fi;
> if substring(mesc,i)='D' then n[4]:=n[4]+1;fi;
> if substring(mesc,i)='E' then n[5]:=n[5]+1;fi;
> if substring(mesc,i)='F' then n[6]:=n[6]+1;fi;
> if substring(mesc,i)='G' then n[7]:=n[7]+1;fi;
> if substring(mesc,i)='H' then n[8]:=n[8]+1;fi;
> if substring(mesc,i)='I' then n[9]:=n[9]+1;fi;
> if substring(mesc,i)='J' then n[10]:=n[10]+1;fi;
> if substring(mesc,i)='K' then n[11]:=n[11]+1;fi;
> if substring(mesc,i)='L' then n[12]:=n[12]+1;fi;
> if substring(mesc,i)='M' then n[13]:=n[13]+1;fi;
> if substring(mesc,i)='N' then n[14]:=n[14]+1;fi;
> if substring(mesc,i)='O' then n[15]:=n[15]+1;fi;
> if substring(mesc,i)='P' then n[16]:=n[16]+1;fi;
> if substring(mesc,i)='Q' then n[17]:=n[17]+1;fi;
> if substring(mesc,i)='R' then n[18]:=n[18]+1;fi;
> if substring(mesc,i)='S' then n[19]:=n[19]+1;fi;
> if substring(mesc,i)='T' then n[20]:=n[20]+1;fi;
> if substring(mesc,i)='U' then n[21]:=n[21]+1;fi;
> if substring(mesc,i)='V' then n[22]:=n[22]+1;fi;
> if substring(mesc,i)='W' then n[23]:=n[23]+1;fi;
> if substring(mesc,i)='X' then n[24]:=n[24]+1;fi;
> if substring(mesc,i)='Y' then n[25]:=n[25]+1;fi;
> if substring(mesc,i)='Z' then n[26]:=n[26]+1;fi;
> od;
> print('A',n[1],'B',n[2],'C',n[3],'D',n[4],'E',n[5],'F',n[6],'G',n[7],'H',n[8],'I',n[9],'J',n[10],'K',n[11],'L',n[12],'M',n[13],'N',n[14], 'O',n[15],'P',n[16],'Q',n[17],'R',n[18],'S',n[19],'T',n[20],'U',n[21],'V',n[22],'W',n[23],'X',n[24],'Y',n[25],'Z',n[26]);
> a:=plot ([[1,n[1]],[2,n[2]],[3,n[3]],[4,n[4]],[5,n[5]],[6,n[6]],[7,n[7]],[8,n[8]],[9,n[9]],[10,n[10]],[11,n[11]],[12,n[12]],[13,n[13]], [14,n[14]],[15,n[15]],[16,n[16]],[17,n[17]],[18,n[18]],[19,n[19]],[20,n[20]],[21,n[21]],[22,n[22]],[23,n[23]],[24,n[24]], [25,n[25]],[26,n[26]]],color=blue);
> b:=plot ([[1,p[0]],[2,p[1]],[3,p[2]],[4,p[3]],[5,p[4]],[6,p[5]],[7,p[6]],[8,p[7]],[9,p[8]],[10,p[9]],[11,p[10]],[12,p[11]],[13,p[12]], [14,p[13]],[15,p[14]],[16,p[15]],[17,p[16]],[18,p[17]],[19,p[18]],[20,p[19]],[21,p[20]],[22,p[21]],[23,p[22]],[24,p[23]], [25,p[24]],[26,p[25]]],color=red);
> display(a,b);
> end:
> frequence('KQOWEFVJPUJUUNUKGLMEKJINMWUXFQMKJBGWRLFNFGHUDWUUMBSVLPSNCMUEKQC TESWREEKOYSSIWCTUAXYOTAPXPLWPNTCGOJBGFQHTDWXIZAYGFFNSXCSEYNCTSSPNTUJNYTG GWZGRWUUNEJUUQEAPYMEKQHUIDUXFPGUYTSMTFFSHNUOCZGMRUWEYTRGKMEEDCTVRECFBD JQCUSWVBPNLGOYLSKMTEFVJJTWWMFMWPNMEMTMHRSPXFSSKFFSTNUOCZGMDOEOYEEKCPJR GPMURSKHFRSEIUEVGOYCWXIZAYGOSAANYDOEOYJLWUNHAMEBFELXYVLWNOJNSIOFRWUCCES WKVIDGMUCGOCRUWGNMAAFFVNSIUDEKQHCEUCPFCMPVSUDGAVEMNYMAMVLFMAOYFNTQCU AFVFJNXKLNEIWCWODCCULWRIFTWGMUSWOVMATNYBUHTCOCWFYTNMGYTQMKBBNLGFBTWO JFTWGNTEJKNEEDCLDHWTVBUVGFBIJGYYIDGMVRDGMPLSWGJLAGOEEKJOFEKNYNOLRIVRWVUH EIWUURWGMUTJCDBNKGMBIDGM');

A, 1, B, 3, C, 11, D, 1, E, 0, F, 8, G, 1, H, 5, I, 0, J, 5, K, 1, L, 6, M, 15, N, 7, O, 8, P, 2, Q, 0, R, 1, S, 0, T, 1, U, 9, V, 3, W, 0, X, 4, Y, 17, Z, 1

> rempl:=proc(mesc)
> local alphabetA,alphabet1,alphabet2,alphabet3,alphabet4,alphabet5,index,pos1,pos2,pos3,pos4,pos5,mes;
> mes:=NULL;
> alphabetA:='ABCDEFGHIJKLMNOPQRSTUVWXYZ';
> alphabet1:='ijklmnopqrstuvwxyzabcdefgh';
> alphabet2:='yzabcdefghijklmnopqrstuvxw';
> alphabet3:='ghijklmnopqrstuvwxyzabcdef';
> alphabet4:='zabcdefghijklmnopqrstuvwxy';
> alphabet5:='abcdefghijklmnopqrstuvwxyz';
> for index from 1 by 5 to length(mesc) do
> pos1:=SearchText(substring(mesc,index),alphabetA);
> pos2:=SearchText(substring(mesc,index+1),alphabetA);
> pos3:=SearchText(substring(mesc,index+2),alphabetA);
> pos4:=SearchText(substring(mesc,index+3),alphabetA);
> pos5:=SearchText(substring(mesc,index+4),alphabetA);
> #SearchText : position d'un caractère dans l'expression
> #substring : isole le index-ième caractère
> mes:=cat(mes,substring(alphabet1,pos1));
> mes:=cat(mes,substring(alphabet2,pos2));
> mes:=cat(mes,substring(alphabet3,pos3));
> mes:=cat(mes,substring(alphabet4,pos4));
> mes:=cat(mes,substring(alphabet5,pos5));
> #concatène les expressions
> od;
> mes;
> end:
> rempl('KQOWEFVJPUJUUNUKGLMEKJINMWUXFQMKJBGWRLFNFGHUDWUUMBSVLPSNCMUEKQC TESWREEKOYSSIWCTUAXYOTAPXPLWPNTCGOJBGFQHTDWXIZAYGFFNSXCSEYNCTSSPNTUJNYTG GWZGRWUUNEJUUQEAPYMEKQHUIDUXFPGUYTSMTFFSHNUOCZGMRUWEYTRGKMEEDCTVRECFBD JQCUSWVBPNLGOYLSKMTEFVJJTWWMFMWPNMEMTMHRSPXFSSKFFSTNUOCZGMDOEOYEEKCPJR GPMURSKHFRSEIUEVGOYCWXIZAYGOSAANYDOEOYJLWUNHAMEBFELXYVLWNOJNSIOFRWUCCES WKVIDGMUCGOCRUWGNMAAFFVNSIUDEKQHCEUCPFCMPVSUDGAVEMNYMAMVLFMAOYFNTQCU AFVFJNXKLNEIWCWODCCULWRIFTWGMUSWOVMATNYBUHTCOCWFYTNMGYTQMKBBNLGFBTWO JFTWGNTEJKNEEDCLDHWTVBUVGFBIJGYYIDGMVRDGMPLSWGJLAGOEEKJOFEKNYNOLRIVRWVUH EIWUURWGMUTJCDBNKGMBIDGM');

souventpoursamuserleshommesdequipageprennentdesalbatrosvastesoiseaux desmersquisuiventindolentscompagnonsdevoyagelenavireglissantsurlesgouffres amersapeinelesentilsdeposessurlesplanchesquecesroisdelazurmaladroitsethont euxlaissentpiteusementleursgrandesailesblanchescommedesavironstraineracote deuxcevoyageurailecommeilestgaucheetveuleluinagueresibeauquilestcomiqueet laidlunagacesonbecavecunbrulegueulelautremimeenboitantlinfirmequivolaitlepoete estsemblableauprincedesnueesquihantelatempeteetseritdelarcherbaudelaireexile surlesolaumilieudeshueeslemotpouretagequatreesttrajansesailesza