« Digital Signature Algorithm » : différence entre les versions

De testwiki
Aller à la navigation Aller à la recherche
imported>Qbibi
DSA retiré par le NIST
 
(Aucune différence)

Dernière version du 3 février 2023 à 10:30

Modèle:Voir homonymes Modèle:À sourcer Le Digital Signature Algorithm, plus connu sous le sigle DSA, est un algorithme de signature numérique standardisé par le NIST aux États-Unis, du temps où le RSA était encore breveté. Cet algorithme faisait partie de la spécification DSS pour Modèle:Lien adoptée en 1993 avant d'être retiré en 2023 (FIPS 186). Une révision mineure a été publiée en 1996 (FIPS 186-1) et le standard a été amélioré en 2002 dans FIPS 186-2. Il est couvert par le brevet n° 5 231 668 aux USA (26 juin 1991) attribué à David Kravitz, ancien employé de la NSA, et il peut être utilisé gratuitement.

Aperçu

Le DSA est similaire à un autre type de signature développée par Modèle:Lien en 1989. Il a aussi des points communs avec la signature ElGamal. Le processus se fait en trois étapes :

  • génération des clés ;
  • signature du document ;
  • vérification du document signé.

Générations des clés

Leur sécurité repose sur la difficulté du problème du logarithme discret dans un groupe finiModèle:Sfn.

  • Choisir des longueurs L et N avec L divisible par 64. Ces longueurs définissent directement le niveau de sécurité de la clef. NIST 800-57 recommande de choisir L=3072 et N=256 pour une sécurité équivalente à 128 bit.
  • Choisir un nombre premier p de longueur L.
  • Choisir un nombre premier q de longueur N, de telle façon que p1=qz, avec z un entier.
  • Choisir h, avec 1<h<p1 de manière que g=hzmodp>1.
  • Générer aléatoirement un x, avec 0<x<q.
  • Calculer y=gxmodp.
  • La clé publique est (p,q,g,y). La clé privée est x.

Signature

  • Choisir un nombre aléatoire s tel que 1<s<q
  • Calculer s1=(gsmodp)modq
  • Si s1=0 recommencer avec un autre s
  • Calculer s2=(H(m)+s1x)s1modq, où H(m) est le résultat d'un hachage cryptographique, par exemple avec SHA-256, sur le message m
  • Si s2=0 recommencer avec un autre s
  • La signature est (s1,s2)

Vérification

  • Rejeter la signature si 0<s1<q ou 0<s2<q n'est pas vérifié
  • Calculer w=s21modq
  • Calculer u1=H(m)wmodq
  • Calculer u2=s1wmodq
  • Calculer v=(gu1yu2modp)modq
  • La signature est valide si v=s1

Validité de l'algorithme

Ce principe de signature est correct dans le sens où le vérificateur acceptera toujours des signatures authentiques. Ceci peut être démontré comme suit avec un exemple pratique :

À partir de p1=qz et g=hzmodp découle :

gqhqzhp11modp selon le petit théorème de Fermat. Puisque g>1 et q est premier, il s'ensuit que g a un ordre égal à q.

Celui qui procède à la signature obtient :

s2=s1(H(m)+xs1)modq.

Ainsi

sH(m)s21+xs1s21H(m)w+xs1w(modq).

Comme g est d'ordre q, on a :

gsgH(m)wgxs1wgH(m)wys1wgu1yu2(modp).

Finalement, on aboutit à la validité de DSA :

s1=(gsmodp)modq=(gu1yu2modp)modq=v.

Notes et références

Modèle:Traduction/Référence Modèle:Références

Annexes

Bibliographie

Articles connexes

Modèle:Portail