CHAPITRE 6 : Signature, identification.

Transcription

CHAPITRE 6 : Signature, identification.
CHAPITRE 6 : Signature, identi…cation.
La cryptographie ne se limite plus à l’art de chi¤rer des messages, on va considérer dans ce chapitre de
nouvelles tâches qu’il est possible de réaliser.
La signature électronique est un procédé permettant de remplir la même fonction qu’une signature
manuscrite c’est à dire d’engager la responsabilité du signataire sur le contenu du message signé. Cette
signature ne doit pas pouvoir être reniée et doit être véri…able par tout le monde.
L’identi…cation permet à quelqu’un de prouver qu’il est celui qu’il prétend être ou qu’il a le droit
d’accéder à un service. C’est la fonction réalisée (primitivement) lors d’une connexion à un ordinateur
à l’aide d’un mot de passe où lorsque l’on tape le code secret de sa carte bancaire.
I
Procédés de signature.
Tout d’abord, remarquons qu’une signature manuscrite est physiquement liée au document signé mais qu’une
signature électronique ne peut pas l’être de la même manière. Il va donc falloir trouver un moyen de "coller"
la signature au message. Pour cela on va construire une signature qui dépendra du signataire mais aussi du
contenu du message de sorte qu’une signature valide ne puisse pas être utilisée avec un autre message que le
message signé initialement.
Une autre di¤érence entre les messages conventionnels et les messages électroniques est que l’on peut
dupliquer parfaitement ces dernier (alors qu’une signature classique est facilement distinguable de sa photocopie). Il faut donc prendre garde à ce qu’un document signé ne puisse pas être réutilisé. Imaginons par
exemple que Bob signe un document électronique autorisant Alice à retirer 100 e sur son compte (un chèque
électronique en fait), il souhaite qu’Alice ne l’utilise qu’une seule fois. Donc le message lui-même doit contenir
une indication, comme la date et l’heure qui limite le problème.
La dernière grosse di¤érence est celle de la véri…cation, elle doit être facile pour tout le monde et néanmoins
ne pas donner d’éléments permettant de signer à la place de quelqu’un d’autre.
Munissons nous d’un ensemble de message : Im , d’un ensemble de signatures : Is et d’un ensemble de clé
: Ik on va maintenant dé…nir un procédé de signature.
Dé…nition I.1 Un procédé de signature est la donnée pour chaque K 2 Ik de deux fonctions calculables en
temps polynomial :
sigK : Im ! Is : fonction de signature (secrète)
verK : Im Is ! fvrai , fauxg : la fonction de véri…cation (publique)
telles que
vrai si S = sigK (M )
verK (M; S) =
faux si S 6= sigK (M )
Notons qu’un procédé de signature n’est jamais inconditionnellement sûr, Charlie désirant signer le message
M peut essayer une à une toutes les valeurs de S 2 Is et trouver une signature valide grâce à la fonction de
véri…cation.
II
La signature RSA:
On reprend les notations du paragraphe sur RSA en chi¤rement. Donc n = pq, c est l’exposant de chi¤rement
et d celui de déchi¤rement que seul Alice connaît.
Pour signer un message m 2 Z=nZ Alice peut alors calculer la fonction
sig (m) = md [n]
et la fonction de véri…cation associée est
ver (m; s) =
vrai si m = sc [n]
faux si m 6= sc [n]
1
En fait, Alice traite son message comme un message chi¤ré, et lui applique le calcul de déchi¤rage qu’elle
seule peut faire, on peut facilement véri…er que c’est bien ce qu’elle a fait en chi¤rant le résultat et en véri…ant
qu’on retrouve le message à signer.
Remarque II.1 Plus généralement si Alice dispose d’une fonction f à sens unique munie d’une trappe alors
elle peut signer son message m par f 1 (m).
Remarque II.2 Notons que contrairement au cas traditionnel, la taille de la signature d’un message est du
même ordre que la taille du message, on verra plus tard un moyen de lutter contre cet inconvénient.
Remarque II.3 En cas de cryptage, vaut-il mieux signer avant de crypter ou bien signer le message crypté
?
En fait, la première solution est plus sûre car si on envoie un message crypté ainsi que sa signature,
Charlie peut, en interceptant le message, remplacer la signature d’Alice par la sienne.
III
a)
La signature El Gamal
Description
Il date de 1985 et à servi de base au standard de signature électronique : DSS, contrairement à RSA qui
sert pour chi¤rer ou pour signer, il a été conçu spécialement pour signer.
Tout comme l’algorithme de chi¤rement El Gamal, ce procédé de signature n’est pas déterministe, pour
un message donné il existe plusieurs signatures valides. Sa sécurité repose sur le problème du logarithme
discret.
On va utiliser les notations suivantes : p est un (grand) nombre premier, g est un générateur de (Z=pZ) ,
a est un entier compris entre 0 et p 2 et A = g a . Alice publie p; g et A.
Pour un k 2 (Z= (p 1) Z) on dé…nit la fonction de signature par
sig (m) = (K; S) où
K = g k [p]
S = (m aK) k
1 [p
1]
et la fonction de véri…cation par
ver (m; K; S) = vrai () AK K S = g m [p]
Véri…ons que cette fonction de véri…cation permet bien d’authenti…er toute signature :
Dans Z=pZ on a K S = g kS = g m aK puisque g p 1 = 1 et AK = g aK donc AK K S = g m .
b)
Sécurité
Comment Charlie peut-il s’y prendre s’il veut contrefaire la signature d’Alice sur un message m sans connaitre
a ? S’il commence par choisir K alors il doit trouver S tel que K S = A K g m et donc il doit résoudre une
instance du problème du logarithme discret. Toutefois, il peut tout d’abord choisir une valeur S et chercher
une valeur de K véri…ant AK K S = g m ce problème n’est plus équivalent au calcul d’un logarithme discret et
est bien moins connu. Charlie pourrait également tenter d’obtenir simultanément K et S ...
Bref la sécurité de ce procédé de signature est mal connue mais on pense (à tort ou à raison) qu’elle est
équivalente à celle du logarithme discret.
IV
DSS et ECDSA
L’algortihme DSS est une amélioration du procéde de El Gamal, à sa création en 1991 il s’est appelé DSA
(Digital Signature Algorithm). Son nom est devenu DSS (Digital Signature Standard) lorsqu’il est devenu
une norme fédérale aux États-Unis en 1994. En Europe, le projet NESSIE est chargé de standardiser des
algorithmes de chi¤rement et de signature en ce qui concerne les procédés de signature trois candidats sont
2
toujours en lice : ECDSA : voir-ci dessous, RSA-PSS basé sur le problème RSA et SFLASH basé sur la
cryptographie multivariable.
Avec le DSS on va obtenir une signature plus courte qu’avec El Gamal pour une sécurité identique,
l’idée est de prendre un élément g d’ordre q de taille 160 bits dans (Z=pZ) où p fait 512 voire 1024 bits et de
travailler dans le sous-groupe engendré par g:
On va schématiser le DSS dans le tableau ci dessous :
Paramètres :
q premier de 160 bits
p 1 [q] premier de 512 bits
g entier d’ordre q modulo p
a 2 N; 1 a q 1
A = g a [p]
Signature :
sig (m) = (K; S)
K = g k [p] [q]
avec k un entier quelconque 1
S = (m + aK) k 1 [q]
Véri…cation :
public
public
public
secret
public
k
q
1
ver (m; K; S) = vrai
1
ssi AKS g mS
où S
1
1
[p] [q] = K
désigne l’inverse de S modulo q
EC-DSA ressemble à DSS sauf que l’on travaille dans un sous groupe cyclique d’une courbe elliptique à
coe¢ cient dans Z=pZ. Voici le schéma résumant ECDSA :
Paramètres :
q premier de 160 bits
E une courbe elliptique sur Z=pZ
G un point de E d’ordre q:
a 2 N; 1 a q 1
A = aP
Signature :
sig (m) = (K; S)
où K = xk [q] tel que kG = (xk ; yk )
avec k un entier quelconque 1 k q
et
S = (m + aK) k 1 [q]
Véri…cation :
ver (m; K; S) = vrai
ssi xP [q] = K
où P = mS 1 G + KS 1 A
où S 1 désigne l’inverse de S modulo q
3
public
public
public
secret
public
1
V
Fonctions de hachage
Les di¤érents systèmes de signature ne permettent que de signer de "petits" messages. Par exemple avec DSS
on ne peut signer que des messages de 160 bits et on obtient une signature de 320 bits. On souhaite bien
évidemment pouvoir signer des messages plus longs. Une idée naïve serait de signer un message "par blocs"
mais alors se posent plusieurs problèmes. Le premier est qu’alors on obtient une signature très grande (deux fois
plus longue que le message), le deuxième est que la plupart des procédés de signatures sont lents (ils utilisent
des calculs arithmétique compliqués comme des exponentiation modulaires). Un autre problème est qu’un
attaquant pourrait éventuellement réarranger les blocs pour changer la teneur du message, il faudrait donc
garantir l’intégrité du message en signant une information supplémentaire. La solution à tous ces problèmes
est la fonction de hachage cryptographique.
a)
principes généraux
Le principe est de calculer une "empreinte numérique" du message qui puisse jouer un rôle analogue à celui
des empreintes digitales pour les humains, c’est à dire que cela doit être une information très partielle sur le
message qui permette de l’identi…er avec une quasi-certitude.
On va donc dé…nir une fonction h : In ! I160 où n est la taille en bit du message à signer : m, et au
lieu de signer m on signera h (m). Bien sûr la fonction h doit être publique pour que chacun puisse véri…er la
validité de la signature ainsi obtenue.
Il faut prendre quelques précautions pour que l’emploi de cette fonction h n’a¤aiblisse pas la sécurité du
procédé de signature.
Première attaque : Pour signer le message m Bob calcule s = sig (h (m)), si Charlie réussit à trouver
un autre message m0 tel que h (m0 ) = h (m) alors s sera une signature valide de m0 !
Pour empêcher cette attaque, h doit être faiblement résistante aux collisions :
Dé…nition V.1 Une fonction h : In ! Im est dite faiblement résistante aux collisions si étant donné x 2 In
il est calculatoirement di¢ cile d’obtenir x0 2 In tel que h (x) = h (x0 ).
Deuxième attaque : Charlie cherche deux messages distincts m et m0 tels que h (m) = h (m0 ), il
persuade ensuite Bob de signer le message m et il obtient ainsi une signature valide de m0 . Cela motive une
dé…nition di¤érente de di¢ culté des collisions que doit véri…er h :
Dé…nition V.2 Une fonction h : In ! Im est dite fortement résistante aux collisions si x 2 In il est calculatoirement di¢ cile d’obtenir x et x0 2 In ; distincts, tel que h (x) = h (x0 ).
Notons que si une fonction est fortement résistante aux collisions alors elle l’est également faiblement.
Troisième attaque : Comme on l’a vu en TD, il est souvent possible d’obtenir des couples (M; s) où s
est la signature valide de M mais sans aucun controle sur M . Si Charlie réussit à trouver un message m tel
que h (m) = M alors il pourra signer le message m. Par conséquent, la fonction h doit être à sens unique.
En fait, on peut facilement démontrer que la propriété d’être fortement résistante aux collisions entraine
d’être à sens unique (par contraposée).
b)
Le paradoxe des anniversaires
Combien faut-il réunir de personnes au minimum pour que la probabilité que deux de ces personnes au moins
aient la même date d’anniversaire soit supérieure à 12 ?
Notons x le nombre recherché, et calculons la probabilité de l’évènement : Ax = "toutes les x personnes
ont des dates d’anniversaire di¤érentes". On a
P (Ax ) =
365
364
(365
x + 1)
365x
Q
365 i
on obtient P (A22 ) = 21
i=0 365 = 0; 5243, et P (A23 ) = 0:4927. Par conséquent la réponse à la question
est 23 personnes ! Ce nombre semble petit par rapport au nombre de dates possibles (365) et ce résultat peut
sembler paradoxal c’est pourquoi on l’appelle le paradoxe des anniversaires.
4
Pour trouver des collisions à une fonction de hachage, l’attaque des anniversaires consiste à calculer des
empreintes aléatoirement en espérant trouver deux fois la même. Le paradoxe des anniversaires semble montrer
que le nombre d’essai à faire peut-être petit par rapport aux nombres d’empreintes possibles ( 2160 ). On va
donc chercher la probabilité de réussite de l’attaque des anniversaires et donc on va considérer la modélisation
suivante :
On e¤ectue k tirages avec remise dans une urne contant un nombre N de boules, on veut savoir à partir
de quelle valeur de k la probabilité d’avoir tiré plusieurs fois la même boule dépasse 21 .
Comme ci dessus on va calculer la probabilité de l’évènement contraire : avoir tiré des boules toutes
di¤érentes.
Cette probabilité est
kY1
kY1
N i
i
P =
=
1
N
N
i=0
i=1
L’exemple des anniversaires peut nous laisser supposer que le résultat va être petit par rapport à N , et donc
que pour tout i k la valeur Ni va être proche de zéro. On va pouvoir utiliser l’approximation ex
1 x
pour x voisin de zéro. On obtient
P =
kY1
e
i
N
Pk 1
i
i=1
N
=e
=e
k(k 1)
2N
i=1
cette probabilité vaut
1
2
si
k (k 1)
= ln (2)
2N
p
p
k
2N ln (2) = 1; 18 N
p
Et donc
p on voie que le nombre de boules à tirer est de l’ordre de N . Pour les dates d’anniversaires on a
1; 18
365 = 22; 5 on retrouve bien le résultat malgré notre approximation.
Par conséquent, pour s’assurer que l’attaques des anniversaires pour trouver une collision à notre fonction
2
h demande plus de 280 opérations, on voit que le nombre d’images de f doit être 280 = 2160 et c’est pourquoi
la taille des empreintes des fonctions de hachage utilisées en pratique est de 160 bits !
c)
Une fonction de hachage basée sur le logarithme discret
Soit p un nombre premier tel que q = p 2 1 soit également premier. Soit et
p. On suppose qu’il est di¢ cile de calculer log ( ) : la valeur x telle que
On dé…nit la fonction de Chaum-Van Heist-P…tzmann par
h : f0; :::; q
x
deux éléments primitifs modulo
= .
1g2 ! Z=pZ r f0g
x1 x2
: h (x1 ; x2 ) =
[p]
Proposition V.1 Toute collision dans la fonction ci-dessus permet de calculer log ( ).
Démonstration. Suppososns que l’on a une collision, c’est à dire deux couples distincts (x; y) et (x0 ; y 0 ) tels
0
0
0
0
que x y = x y dans Z=pZ. On obtient x x = y y . Soit d = pgcd(p 1; y 0 y) comme p 1 = 2q
avec q premier et que y y 0 < q on a d = 1 ou d = 2.
Si d = 1, on calcule z : l’inverse de y
y 0 modulo p
Si d = 2, on calcule z 0 : l’inverse de y
( q )k =
car q = 1.
1 et
(x x0 )z
y 0 modulo q donc (y
log ( ) = (x x0 ) z [p 1] ou log ( ) = (x x0 ) z + q [p
véri…er pour trouver la bonne valeur de log ( ) :
5
=
donc log ( ) = (x
y 0 ) z 0 = 1 + kq on a alors
1] car
q
=
x0 ) z [p
(x x0 )z 0
1].
=
1 [p]. Il est ensuite facile de
Remarque V.1 On vient de montrer que la fonction ci dessus est fortement résistante aux collisions mais
elle est trop lente pour être performante en pratique. En pratique on utilise des fonctions de hachage très
rapide à calculer mais dont la solidité n’est pas démontrée, comme SHA-1 qui est en fait recommandée avant
d’utiliser DSS. On trouve facilement une description de cet algorithme sur le net. Notons qu’en Août 2004
une autre fonction de hachage réputée : MD5 a été brisée : des cryptanalystes ont trouvé un moyen de
générer des collisions en une heure.
VI
Procédés d’identi…cation "à clé privée"
Si Alice et Bob se rencontrent, ils peuvent convenir d’une méthode pour pouvoir se reconnaitre par la suite.
La méthode la plus simple est de choisir un mot de passe qu’ils seront seuls à connaitre. Le problème est
que cette façon de faire n’est sûre que la première fois qu’on l’utilise, en e¤et si Charlie écoute la conversation
il connaitra le mot de passe.
Pour éviter cela, Alice et Bob peuvent procéder de la façon suivante : ils se mettent d’accord sur une
clé secrète K et sur un algorithme de chi¤rement à clé secrète, par exemple AES. Par la suite, si Bob veut
s’assurer de l’identité d’Alice, il lui envoie un challenge à réussir pour le prouver. Ce challenge consiste à
déchi¤rer un message choisi aléatoirement par Bob et ainsi prouver qu’elle connait bien K sans toutefois le
révéler. On procède de la façon indiquée par le schéma suivant, où on a noté eK la fonction de chi¤rement et
dK celle de déchi¤rement.
Bob
Alice
Aléa m
m0 = eK (m)
!
m00 = dK (m0 )
m00 = m ?
L’écoute de la conversation ne permet pas à Charlie de pouvoir se faire passer pour Alice par la suite, tant
que Bob prend la précaution d’envoyer des challenges di¤érents !
Ce procédé est utilisé par les cartes bancaires pour certaines transactions. Une clé est stockée dans une
partie inaccessible de la mémoire de la puce de la carte et l’algorithme utilisé est DES.
VII
Procédés d’identi…cation "à clé publique"
On utilise un cryptosystème asymétrique ou un procédé de signature. Le secret d’Alice est sa clé privée. Elle
prouve sa connaissance de ce secret en signant ou en déchi¤rant une valeur aléatoire proposée par Bob ou le
serveur auprès duquel elle veut s’identi…er.
Identi…cation par signature :
Bob
Aléa m
Alice
m
!
s = sig (m)
ver (m; s) = vrai ?
Identi…cation par déchi¤rement :
Bob
Aléa m
Alice
m0
m00
m00 = m ?
6
= e (m)
!
= d (m0 )
VIII
Procédé d’identi…cation de Guillou-Quisquater
Jean-Jacques Quisquater
Il existe aussi des procédés d’identi…cation développés spéci…quement dans ce but, tels le procédé de
Guillou-Quisquater largement utilisé de nos jours dans les cartes à puces.
Une autorité de con…ance choisit deux nombres premiers p et q, elle publie n = pq mais garde p et q secrets.
Bien sûr, p et q sont assez grand pour que la factorisation de n soit di¢ cile. Cette autorité publie aussi un
grand nombre entier e qu’on va utiliser comme exposant RSA et donc on notera d = e 1 [' (n)] l’exposant
de déchi¤rement. Ces données peuvent être communes à plusieurs couples identi…é/identi…ant (Alice/Bob).
Une fonction de hachage h est aussi choisie.
L’autorité de con…ance forme une chaine de bits à partir de l’identité d’Alice : ID(Alice), puis elle calcule
A = h (ID (Alice)) d [n] et l’envoie à Alice.
Le protocole d’identi…cation est le suivant :
1. Alice choisit un entier k aléatoirement 0
k
n
1 et calcule K = k e [n] :
2. Alice envoie ID (Alice) et K à Bob.
3. Bob calcule B = h (ID (Alice)).
4. Bob choisit un entier r aléatoirement 0
r
n
1 et l’envoie à Alice.
5. Alice calcule x = kAr [n] et l’envoie à Bob.
6. Bob véri…e que K = B r xe [n]
En e¤et, comme on a Ae = B 1 , xe = k e Are = K B r . Par conséquent, en ce suivant ce protocole
Alice a prouvé qu’elle connaît A sans toutefois le révéler. On peut même montrer que ce protocole ne révèle
aucune information sur A, on dit que ce protocole est sans divulgation d’informations (zero-knowledge).
7