8INF854: Cryptographie Chapitre 7: Les signatures digitales Introduction • Supposons que l’on veuille signer un document électronique. Pourquoi ne pas numériser notre signature et la joindre au document ? Toutes les personnes qui ont accès au document pourraient ainsi enlever la signature et l’ajouter à un autre document. Par exemple, un gros chèque d’argent ! • Par conséquent, on exige alors qu’une signature digitale ne peut être séparée d’un message ni attachée à un autre message. C’est-àdire que la signature est non seulement attachée au signataire mais aussi au message qui est signé. • De plus, la signature digitale doit être facilement vérifiable par les autres parties. • Un schéma de signature digitale consiste en deux étapes distinctes: la signature et la vérification. Signatures RSA • Bob possède un document m qu’Alice veut signer. Ils effectuent les étapes suivantes: Alice génère deux grands nombres premiers p, q et elle calcule n = pq. Elle choisit ensuite eA tel que 1 < eA < φ(n) avec pgcd eA , φ n = 1 et elle calcule dA tel que eA dA = 1 (mod φ(n)). Alice publie (eA , n) et elle garde (dA , p, q) secrets. La signature d’Alice est y = mdA (mod n). La paire (m, y) est rendue publique. • Bob peut alors vérifier si c’est réellement Alice qui a signé le message en effectuant les étapes suivantes: Bob télécharge la paire publique (eA , n) d’Alice et calcule ensuite z = y eA (mod n). Si z = m alors Bob accepte la signature. • Il y a une variante intéressante à cette procédure qui permet à Alice de signer un document sans en connaître le contenu. Supposons que Bob a fait une découverte révolutionnaire. Il veut que celleci soit rendue publique mais il veut que personne d’autre que lui ne connaisse les détails. Bob et Alice procède comme suit: Le message qui doit être signé est m. Alice choisit un module RSA (n = pq), un exposant de chiffrement e, et l’exposant de déchiffrement. Elle publie n et e mais garde p, q et d privés. Bob choisit aléatoirement un entier k (mod n) avec pgcd k, n = 1 et il calcule t = k e ∙ m mod n et il envoie t à Alice. Alice signe t en calculant s = t d mod n . Elle renvoie s à Bob. Bob calcule s k mod n . Ceci est le message signé md . Voyons de plus près que s/k est bel et bien le message signé. s td ke ∙ m = = k k k Ce qui est le message signé. d =k ed md ∙ = md mod n . k • Problème ? Pas très sécuritaire du point de vue contenu de m. RSA est soumis à l'attaque aveuglante RSA par laquelle il est possible d'être amené à déchiffrer un message en signant aveuglément un autre message. Puisque le processus de signature équivaut à un déchiffrement avec la clé secrète du signataire, un attaquant peut fournir une version aveugle d'un message m chiffré avec la clé publique du signataire, m' pour qu'il signe. • Il existe des protocoles pour contrecarrer ce problème. Ce sont les protocoles de signature à l’aveugle. Ils ont été introduits par David Chaum. Signature ElGamal • La méthode de chiffrement d’ElGamal peut être modifiée pour fournir un schéma de signature. Une différence entre RSA et ElGamal est qu’avec ce dernier il y a plusieurs signatures qui sont possibles pour un message donné. • Supposons qu’Alice veut signer un message. Elle commence d’abord par choisir un grand nombre premier p et une racine primitive α. Ensuite, elle choisit un entier secret a tel que 1 ≤ a ≤ p − 2 et calcule β = αa mod p . Les valeurs de p, α et β sont rendues publiques. • On se rappelle que la sécurité du système repose sur la difficulté de trouver a pour un adversaire. • Alice effectue les étape suivante afin de signer le message m: Elle sélectionne aléatoirement un entier k tel que pgcd k, p − 1 = 1. Elle garde cet entier secret. Ensuite, elle calcule successivement r = αk mod p et s = k −1 ∙ m − ar (mod p − 1). Le message signé est le triplet (m, r, s). • Bob peut vérifier la signature de la façon suivante: Il télécharge la clé publique d’Alice (p, α, β). Il calcule v1 = βr ∙ r s (mod p) et v2 = αm (mod p). Il considère la signature valide si v1 = v2 (mod p). Montrons que la procédure fonctionne adéquatement. Puisque s = k −1 ∙ m − ar mod p − 1 , on a que s ∙ k = m − a ∙ r (mod p − 1) de sorte que m = s ∙ k + a ∙ r (mod p − 1). Par conséquent, on trouve v2 = αm = αsk+ar = αa r ∙ αk s = βr ∙ r s = v1 (mod p). • Point faible Alice veut signer un second document. Elle doit absolument choisir une autre valeur pour k. Supposons qu’elle utilise le même k pour deux messages, disons m1 et m2 . Ainsi Ève verra qu’Alice a utilisé deux fois le même k. Les valeurs de s seront différentes, disons s1 et s2 . Ève sait que s1 k − m1 = −ar = s2 k − m2 mod p − 1 . Par conséquent, (s1 − s2 )k = m1 − m2 mod p − 1 . Posons d = pgcd(s1 − s2 , p − 1). Il y a d solutions à cette congruence et elle peuvent être obtenues en utilisant l’algorithme d’Euclide étendu. Normalement d est petit entraînant ainsi que le nombre de choix pour k le sera aussi. Ève calcule αk pour chaque valeur de k possible jusqu’à ce qu’elle obtienne la valeur r. Maintenant qu’elle sait k, Ève résout maintenant ar = m1 − ks1 mod p − 1 . Il y a pgcd(𝑟, p − 1) solutions possibles. Ève calcule αa pour chacune jusqu’à ce qu’elle obtienne β et, à ce moment, elle aura trouvé a. Elle peut maintenant reproduire la signature d’Alice. L’algorithme DSA • Le NiST (1991 ) a proposé l’algorithme de signature digitale DSA. Cet algorithme a été adopté en tant que standard en (1994 ) . • On désire signer un message de 160 bits. • La génération de clés pour le DSA s’effectue de la façon suivante. Il y a d’abord une phase d’initialisation: 1. Alice trouve un nombre premier q de 160bits et elle choisit un nombre premier p tel que q | p 1 . Le problème du logarithme discret devrait être difficile pour ce nombre premier p. 2. Soit g une racine primitive modulo p et soit Alors q 1 (mod p). 3. Alice choisit un entier secret a tel que a (mod p) . g ( p 1) / q 1 a q 1 (mod p). et elle calcule 4. Alice publie ensuite ( p, q, , ) et garde a secret. Alice signe un message m en effectuant les étapes qui suivent: 1. Elle choisit aléatoirement un entier secret k tel que 0 k (α k (mod p)) (mod q) q 1 . 2. Elle calcule ensuite r 3. Elle calcule aussi 4. La signature d’Alice du message m est (r,s) qu’elle envoie à Bob avec m. . s k 1 (m ar) (mod q) . Bob peut vérifier en procédant ainsi: 1. Il télécharge les informations publiques d’Alice p, q, , . 2. Il calcule u1 s 1m (mod q) et u 2 s 1r (mod q) . v (α u1 β u 2 (mod p)) (mod q) . 3. Il calcule 4. Bob accepte la signature si et seulement si v=r. Montrons que cette vérification fonctionne. Par la définition de s, on a m (ar ks) (mod q). Ce qui implique s-1m (ars -1 k) (mod q). Par conséquent, on a k s 1m ars 1 (mod q) u1 au 2 (mod q). De sorte que α k α u1 au 2 (α u1 β u 2 (mod p)) (mod q).