Digital Signature Algorithm
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 fait partie de la spécification DSS pour Digital Signature Standard adoptée en 1993 (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 Claus-Peter Schnorr (en) 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 fini.
- Choisir des longueurs et avec divisible par 64. Ces longueurs définissent directement le niveau de sécurité de la clef. NIST 800-57 recommende de choisir et pour une securité équivalente à 128 bit.
- Choisir un nombre premier de longueur .
- Choisir un nombre premier de longueur , de telle façon que , avec un entier
- Choisir , avec de manière que
- Générer aléatoirement un , avec
- Calculer
- La clé publique est . La clé privée est .
Signature
- Choisir un nombre aléatoire tel que
- Calculer
- Calculer , où est le résultat d'un hachage cryptographique, par exemple avec SHA-256, sur le message
- La signature est
Vérification
- Rejeter la signature si 0<s1<q ou 0<s2<q n'est pas vérifié
- Calculer w = (s2)-1 (mod q)
- Calculer u1 = H(m)*w (mod q)
- Calculer u2 = s1*w (mod q)
- Calculer v = [gu1*yu2 mod p] mod q
- 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 g = hz mod p découle :
gq ≡ hqz ≡ hp-1 ≡ 1 (mod p) 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 effectue par exemple ceci (avec SHA-1) :
Ainsi
Comme g a un ordre q, on a :
Finalement, on aboutit à la validité de DSA :