C`est quoi l`encryptage

publicité
L'ENCRYPTAGE
L'encryptage permet de protéger un message des regards indiscrets. Pour cela, on
modifie le message de telle sorte qu'il soit illisible pour ceux qui ne savent pas comment
il a été modifié.
Cela peut servir à envoyer un message secret à quelqu'un ou à protéger des fichiers sur
votre disque dur des regards indiscrets.
Petite note:
Comme me l'a précisé un internaute, on devrait dire chiffrement et non pas encryptage, ainsi que
déchiffrement et non pas décryptage.
Le terme de décryptage ne devrait normalement s'appliquer qu'à l'opération qui consiste à s'attaquer à des
données chiffrées sans connaître la clé.
Dans cette page, je fais une petite entorse: j'utilise les termes d'encryptage et de décryptage.
Un exemple simple
Prenons un exemple. On va modifier le mot HELLO.
On peut décaler les lettres de l'alphabet (A devient B, B->C, C->D, etc.).
HELLO
IFMMP
Cela rend le texte illisible : cette opération est appelée encryptage (ou chiffrement).
Pour avoir le message en clair, on fait le décalage inverse (B->A, C->B, D->C, etc.).
IFMMP
HELLO
Cette opération pour rendre le message lisible est appelé décryptage.
C'est déjà bien, mais on peut faire mieux: on peut décaler de 1 lettre, 2 lettres ou plus.
Décalage de 1 lettre:
HELLO
IFMMP
Décalage de 2 lettres:
HELLO
JGNNQ
Décalage de 3 lettres:
HELLO
KHOOR
Pour avoir le message en clair, il faut savoir de combien de lettres on a décalé. Cela fait
25 possibilités différentes.
Essayer les 25 possibilités prend du temps, mais c'est faisable !
On pourrait faire plus compliqué: décaler différemment chaque lettre du mot HELLO. Par
exemple décaler de 5 la première lettre, de 12 la seconde, de 7 la troisième, et ainsi de
suite.
Ces nombres (5,12,7...) seuls permettent de retrouver le message original. On appelle
ceci une clé.
1
C'est exactement comme la clé d'un coffre-fort : il existe une seul combinaison qui
permet d'obtenir l'information. Sans la clé, il est très difficile d'obtenir l'information.
D'autres méthode
Il existe des centaines d'autres méthodes d'encryptage pour protéger les données. Citons
: DES, IDEA, Blowfish, CAST, GOST, RC4, RC6...
Elles sont pour la plupart basées sur des modifications simples : inversions,
transpositions, décalage, etc.
Quelle est la meilleure ? Difficile à dire.
Chacune de ses méthodes a des caractéristiques:



Le type et le nombre d'opérations qu'elle réalise pour encrypter/décrypter :
additions, multiplication, transpositions, permutations...
La solidité mathématique de ces transformations
Le nombre de clés différentes possibles pour chaque algorithme.
Pour décrypter un message sans connaître la clé, on peut utiliser plusieurs méthodes:


Essayer toutes les clés possibles avec son ordinateur, ou bien avec un ordinateur
très puissant spécialement fabriqué pour casser un algorithme précis (ce qui a été
fait pour le DES...).
Se baser sur une faiblesse mathématique de l'algorithme et trouver des moyens
de décoder le message ou trouver une partie de la clé.
Généralement, plus un algorithme a été testé par les spécialistes mondiaux
(cryptographes, matématiciens...), plus on peut le considérer comme sûr. Méfiez-vous
des algorithmes ou programmes récents que leurs auteurs présentent comme
"impossible à cracker". ('cracker' ou 'casser' c'est trouver la clé ou le message en clair à
partir d'un message encrypté).
La protection offerte par le chiffrement doit être basée sur la solidité mathématique de
l'algorithme, et non pas sur le secret de l'algorithme. Evitez comme la peste les
programmes dont les algorithmes ne sont pas connus, ou ceux utilisant des algorithmes
maison. Préférez les algorithmes connus (Blowfish, AES, TripleDES, IDEA...)
Les algorithmes les plus sûrs sont ceux qui ont été le plus largement testés et approuvés
par la communauté scientifique.
Cependant,
IL N'EXISTE AUCUN ALGORITHME OU PROGRAMME IMPOSSIBLE A CRACKER.
(enfin... ce n'est pas tout à fait vrai)
Tout est une question de patience et de puissance de calcul de l'ordinateur. Les bons
algorithmes - bien utilisés - nécessitent pour être crackés des temps de calcul plus longs
que la durée de vie de l'Univers.
2
N'importe qui ne peut pas s'improviser cryptographe. 95% des logiciels de cryptage
proposés sur Internet sont totalement bidons du point de vue sécurité, et les
grosses sociétés ne font pas exception (ex: Norton For Your Eyes Only, Microsoft, etc.).
Généralement, ne faites pas confiance à un logiciel de cryptage dont le code source n'est
pas disponible.
Pour encrypter vos fichiers et vos emails, je vous recommande PGP.
Pour encrypter vos disques, utilisez E4M ou ScramDisk.
Les algorithmes asymétriques
Les algorithmes que nous venons de voir sont dits symétriques, car on utilise la même
clé C pour encrypter et décrypter.
Il existe des algorithmes asymétriques : la clé de décryptage est différente de la clé
d'encryptage. On les appelle aussi algorithmes à clé publique.
Il est impossible de trouver D (la clé de décryptage) à partir de E (la clé d'encryptage).
A quoi ça peut bien servir ?
Imaginons qu'Alice veuille envoyer un message à Bob. Elle ne dispose d'aucun moyen de
communication sûr avec Bob (cela veut dire que n'importe qui peut écouter leurs
messages).
Le mieux que puisse faire Alice, c'est encrypter le message de telle sorte que seul Bob
puisse le décrypter.
Elle peut utiliser un algorithme symétrique (comme celui qui utilise C ci dessus). Dans ce
cas, elle encrypte le message avec la clé C et l'envoie à Bob.
3
Mais Bob doit aussi connaître la clé C si il veut décrypter le message.
Alice doit donc aussi transmettre C à Bob.
Mais comment faire puisque tout le monde peut épier leurs communications et donc
connaître aussi C ?
4
La solution serait d'utiliser un algorithme assymétrique: Bob créé ses deux clés E et D.
Il envoie sa clé E à Alice et garde sa clé D bien à l'abris.
5
Pour envoyer un message à Bob, Alice utilise la clé E que lui a donné Bob pour encrypter
les messages. De son côté, Bob utilise sa clé D pour décrypter les messages.
Bob est le seul à pouvoir décrypter les messages : il a gardé sa clé D secrète et personne
n'est capable de calculer D à partir de E.
Si un espion regarde les communications, il ne verra passer que la clé E et les messages
encryptés. E ne lui sera d'aucune utilité pour décrypter les messages.
La clé E de Bob est appelée clé publique, car elle est donnée à tout le monde. Tout le
6
monde peut ainsi encrypter des messages à destination de Bob que Bob seul pourra
décrypter.
La clé D de Bob est appelée clé privée : elle est conservée bien à l'abris par Bob qui s'en
sert pour décrypter les messages qu'il reçoit.
Authentification
Les algorithmes d'encryptage assymétriques ont d'autres utilisations: on peut par
exemple authentifier l'émetteur d'un message.
Par exemple, si Bob reçoit un message, comment peut-il être sûr qu'il provient bien
d'Alice ?
Quelqu'un pourrait très bien encrypter un message et l'envoyer à Bob en se faisant
passer pour Alice.
Avec les algorithmes assymétriques, on peut signer un message. Soit:


A:E Clé publique d'Alice (utilisée pour encrypter) donnée à tout le monde.
A:D Clé privée d'Alice (utilisée pour décrypter)


B:E Clé publique de Bob (utilisée pour encrypter) donnée à tout le monde.
B:D Clé privée de Bob (utilisée pour décrypter)
Alice possède sa clé privée (A:D) et la clé publique de Bob (B:E).
Bob possède sa clé privée (B:D) et la clé publique d'Alice (A:E).
Quand Alice veut envoyer un message à Bob, Alice décrypte avec sa clé privée (A:D)
pour signer le message puis l'encrypte avec la clé publique de Bob (B:E).
7
Quand Bob reçoit le message, il le décrypte avec sa clé privée (B:D), puis l'encrypte avec
la clé publique d'Alice (A:E).
Si il parvient à obtenir le message en clair en encryptant avec la clé publique d'Alice
(A:E), alors il est sûr que ce message vient bien d'Alice puisque Alice est la seule à
posséder la clé privée correspondante (A:D) qui permet de décrypter le message.
Cela permet de signer les message.
Si un espion envoie un message à Bob en essayant de se faire passer pour Alice, il ne
pourra pas signer le message puisqu'il ne possède pas la clé privée d'Alice (A:D). Quand
Bob encryptera avec A:E, il n'obtientdra pas le message en clair et verra qu'il y a un
problème et que ce message ne provient pas d'Alice.
Ce système d'authentification n'est pas parfait mais il est très sûr. C'est ce système qui
est utilisé entre autres pour les transactions entre banques.
(Pour être tout à fait précis, et pour permettre l'automatisation par l'ordinateur de cette
vérification, on se contente généralement de signer uniquement un digest (un hash
cryptographique) du message (SHA1 ou MD5).)
Il existe encore des tas d'applications possibles à la cryptographie. Si lire l'anglais ne
vous fait pas peur, je vous recommande l'excellent ouvrage de Bruce Schneier :
"Applied Cryptography" (éditions John Wiley & Sons, Inc. ; ISBN 0-471-12845-7). Ce
livre fait près de 750 pages.
Vous y trouverez différents algorithmes (symétriques et asymétriques) expliqués, des
tonnes d'exemples surprenants d'applications de la cryptographie et les avantages et
inconvénients des différents algorithmes.
Exemple d'algorithme asymétrique : le RSA
Il existe différents algorithmes asymétriques. L'un des plus connus est le RSA (de ses
concepteurs Rivest, Shamir et Adleman). Cet algorithme est très largement utilisé, par
exemple dans les navigateurs pour les sites sécurisés et pour chiffrer les emails. Il est
dans le domaine public.
L'algorithme est remarquable par sa simplicité. Il est basé sur les nombres premiers.
Pour encrypter un message, on fait:
c = m^e mod n
Pour décrypter:
m = c^d mod n
m = message en clair
c = message encrypté
(e,n) constitue la clé publique
(d,n) constitue la clé privée
n est le produit de 2 nombres premiers
^ est l'opération de mise à la puissance (a^b : a puissance b)
mod est l'opération de modulo (reste de la division entière)
8
Créer une paire de clés
C'est très simple, mais il ne faut pas choisir n'importe comment e,d et n. Et le calcul de
ces trois nombres est tout de même délicat.
Voici comment procéder:
1. Prendre deux nombres premiers p et q (de taille à peu près égale). Calculer n =
pq.
2. Prendre un nombre e qui n'a aucun facteur en commun avec (p-1)(q-1).
3. Calculer d tel que ed mod (p-1)(q-1) = 1
Le couple (e,n) constitue la clé publique. (d,n) est la clé privée.
Un exemple
Allons-y ! Commençons par créer notre paire de clés:
Prenons 2 nombres premiers au hasard: p = 29, q = 37
On calcul n = pq = 29 * 37 = 1073
On doit choisir e au hasard tel que e n'ai aucun facteur en commun avec (p-1)(q-1):
(p-1)(q-1) = (29-1)(37-1) = 1008
On prend e = 71
On choisit d tel que 71*d mod 1008 = 1
On trouve d = 1079
On a maintenant nos clés :


La clé publique est (e,n) = (71,1073) (=clé d'encryptage)
La clé privée est (d,n) = (1079,1073) (=clé de décryptage)
On va encrypter le message 'HELLO'. On va prendre le code ASCII de chaque caractère
et on les met bout à bout:
m = 7269767679
Ensuite, il faut découper le message en blocs qui comportent moins de chiffres que n. n
comporte 4 chiffres, on va donc découper notre message en blocs de 3 chiffres:
726 976 767 900
(on complète avec des zéros)
Ensuite on encrypte chacun de ces blocs:
9
726^71
976^71
767^71
900^71
mod
mod
mod
mod
1073
1073
1073
1073
=
=
=
=
436
822
825
552
Le message encrypté est 436 822 825 552. On peut le décrypter avec d:
436^1079
822^1079
825^1079
552^1079
mod
mod
mod
mod
1073
1073
1073
1073
=
=
=
=
726
976
767
900
C'est à dire la suite de chiffre 726976767900.
On retrouve notre message en clair 72 69 76 76 79 : 'HELLO'.
Dans la pratique
Dans la pratique, ce n'est pas si simple à programmer:



Il faut trouver de grands nombres premiers (ça peut être très long à calculer)
Il faut obtenir des nombres premiers p et q réellement aléatoires (ce qui est loin
d'être évident).
On n'utilise pas de blocs aussi petits que dans l'exemple ci-dessus: il faut être
capable de calculer des puissances et des modulos sur de très grand nombres.
En fait, on utilise jamais les algorithmes asymétriques pour chiffrer toutes les données,
car ils sont trop longs à calculer : on chiffre les données avec un simple algorithme
symétrique dont la clé est tirée au hasard, et c'est cette clé qu'on chiffre avec un
algorithme asymétrique comme le RSA.
P.G.P.
Si vous voulez encrypter vos fichiers, je vous recommande l'excellent logiciel PGP (Pretty
Good Privacy).
D'autres algorithmes, d'autres programmes...
Il existe d'autres algorithmes asymétriques, dont l'ECC (Elliptic Curve Cryptosystems,
Encryptage par Courbe Elliptique). Ce système est basé sur une courbe paramétrique qui
passe par un certain nombre de points de coordonnées entières. Ce n'est pas encore très
développé, mais il est prometteur.
Il existe également Diffie-Hellman, de plus en plus préféré à RSA. (Diffie-Hellman avait
rapidement été adopté par la communauté opensource quand RSA n'était pas encore
dans le domaine public).
L'OTP : le seul algorithme impossible à casser
10
Là vous devez vous dire que je me moque de vous. Je vous ai dit qu'il n'existait aucun
algorithme ou programme impossible à cracker.
J'aurais dû préciser "algorithme ou programme à clé".
En effet, il suffit d'essayer toutes les clés différentes possible jusqu'à trouver la bonne.
Mais il existe une méthode qui n'utilise aucune clé.
L'OTP : One-Time Pad
Aussi appelé masque jetable, c'est une technique simplissime.
Imaginons que nous ayons un message de n octets. Pour l'encrypter:
1. créer une suite S (même taille que n) d'octets aléatoires (S est appelé pad
ou masque).
2. appliquer ce masque octet par octet au message (généralement avec une
opération logique XOR)
Ainsi, si vous ne connaissez pas le masque S, le message EDRJVQUIKEGDNCTUIO peut
très bien se décrypter en:



Ma réponse est oui
Ma réponse est non
Le lavabo est bleu
Tout dépend de S !
Si vous n'avez pas S, vous pouvez toujours essayer de décrypter le message : il peut
vouloir dire n'importe quoi !
Quelle que soit votre puissance de calcul, vous ne pourrez jamais décrypter le
message.
Le piège
Vous allez me dire : facile !
Et bien non... c'est une technique très difficile à maîtriser. Pourquoi ?



Les octets du masque doivent être réellement aléatoires. Si vous les crééez à
partir d'un programme, ils ne sont pas aléatoires ! Il devient possible de deviner
la suite d'octets du masque.
Le masque ne doit jamais servir plus d'une seule fois, sinon il devient
possible de décrypter les messages suivants. Il faut sans cesse créer un nouveau
masque pour encrypter de nouvelles données.
Le masque doit être de la taille des données à encrypter. Pour 600 Megaoctets de données à encrypter, il faut un masque de 600 Mega-octets. Pas
toujours pratique à manipuler.
11

Enfin, pour que votre correspondant puisse décrypter, vous devez aussi lui
envoyer le masque ! Et vous devez le faire par un moyen parfaitement sûr.
Vous voyez, c'est une technique imparable, mais très délicate à utiliser.
Les nombres aléatoires
Il est impossible de créer des nombres aléatoires avec un programme, quel qu'il soit.
Point à la ligne.
On peut au mieux créer des nombres pseudo-aléatoires.
La plupart des générateurs de nombres aléatoires sont assez mauvais :



on retrouve rapidement les mêmes suites de valeurs au bout d'un certain temps.
certaines valeurs sortent plus que d'autres.
avec certains générateurs, on peut trouver toute la suite de nombres simplement
en connaissant deux valeurs successives !
L'OTP a donc besoin de nombres réellement aléatoires, tels que ceux créés avec des
phénomènes physiques impossibles à prévoir :




écoulement de fluides (lava-lamps, particules dans un liquide en circulation, vent
et tourbillons)
bruit blanc généré par un pont de diodes
émission de particules issues de la décomposition de matière radioactive
etc.
Bref, ce n'est pas à la portée de tout le monde. Il faut un bon dispositif physique, et non
pas seulement logiciel.
Certains ont inventé des systèmes ingénieux avec une webcam qui filme des lava-lamps
(ces lampes en forme de fusée avec des boules de parafine fondue qui montent et
descendent à l'intérieur). Comme ces écoulements de fluide et la convection les rendent
impossible à prévoir à long terme, ils font un bon générateur de nombres aléatoires.
Il suffit de filmer l'image et d'utiliser la valeur des pixels pour générer des nombres
aléatoires.
Silicon Graphics (le fabricant d'ordinateurs) possède un site Web dédié à cela. Vous
pourrez y voir comment ils ont conçu leur générateur de nombres aléatoires :
http://www.lavarnd.org.
Si la génération de nombres aléatoires vous intéresse, vous pouvez lire la RFC 1750.
12
Téléchargement