Article de reference

Algorithme de signature numérique

L' algorithme de signature numérique ( DSA ) est un système de cryptographie à clé publique et une norme fédérale de traitement de l'information pour les signatures numériques ,...

L' algorithme de signature numérique ( DSA ) est un système de cryptographie à clé publique et une norme fédérale de traitement de l'information pour les signatures numériques , basé sur le concept mathématique d' exponentiation modulaire et le problème du logarithme discret . Dans un système de signature numérique, une paire de clés est utilisée : une clé privée et une clé publique. Dans ce système, une entité signataire ayant déclaré sa clé publique peut générer une signature à l'aide de sa clé privée, et un vérificateur peut authentifier la source s'il vérifie correctement la signature à l'aide de la clé publique déclarée. Le DSA est une variante des schémas de signature de Schnorr et d'ElGamal .

L' Institut national des normes et de la technologie (NIST) a proposé l'utilisation de DSA dans sa norme de signature numérique (DSS) en 1991 et l'a adoptée sous la référence FIPS 186 en 1994. Cinq révisions de la spécification initiale ont été publiées. La plus récente est la FIPS 186-5, datant de février 2023. DSA est brevetée, mais le NIST a mis ce brevet à disposition gratuitement dans le monde entier. La spécification FIPS 186-5 indique que DSA ne sera plus approuvée pour la génération de signatures numériques, mais pourra être utilisée pour vérifier les signatures générées avant la date d'entrée en vigueur de cette norme.

Aperçu

L'algorithme DSA fonctionne dans le cadre des systèmes de cryptographie à clé publique et repose sur les propriétés algébriques de l'exponentiation modulaire , ainsi que sur le problème du logarithme discret , considéré comme difficile à résoudre en pratique. L'algorithme utilise une paire de clés composée d'une clé publique et d'une clé privée. La clé privée sert à générer une signature numérique pour un message, et cette signature peut être vérifiée à l'aide de la clé publique correspondante du signataire. La signature numérique garantit l'authentification du message (le destinataire peut vérifier son origine), son intégrité (le destinataire peut vérifier que le message n'a pas été modifié depuis sa signature) et sa non-répudiation (l'expéditeur ne peut pas nier avoir signé le message).

Histoire

En 1982, le gouvernement américain a lancé un appel d'offres pour une norme de signature à clé publique. En août 1991, le National Institute of Standards and Technology (NIST) a proposé DSA pour sa norme de signature numérique (DSS). Cette proposition a initialement suscité de vives critiques, notamment de la part des éditeurs de logiciels qui avaient déjà investi dans le développement de logiciels de signature numérique basés sur le système de chiffrement RSA . Néanmoins, le NIST a adopté DSA comme norme fédérale (FIPS 186) en 1994. Cinq révisions de la spécification initiale ont été publiées : FIPS 186-1 en 1998, FIPS 186-2 en 2000, FIPS 186-3 en 2009, FIPS 186-4 en 2013, et FIPS 186-5 en 2023. La norme FIPS 186-5 interdit la signature avec DSA, tout en autorisant la vérification des signatures générées avant la date de mise en œuvre de la norme en tant que document. Elle doit être remplacée par des schémas de signature plus récents tels que EdDSA .

La technologie DSA est couverte par le brevet américain n° 5 231 668 , déposé le 26 juillet 1991 et désormais expiré, attribué à David W. Kravitz , ancien employé de la NSA . Ce brevet a été accordé aux « États-Unis d’Amérique, représentés par le secrétaire au Commerce , à Washington, D.C. », et le NIST l’a mis à disposition gratuitement dans le monde entier . Claus P. Schnorr affirme que son brevet américain n° 4 995 082 (également expiré) couvrait la technologie DSA ; cette affirmation est contestée

En 1993, Dave Banisar a réussi à obtenir la confirmation, via une demande FOIA , que l'algorithme DSA n'a pas été conçu par le NIST, mais par la NSA .

OpenSSH a annoncé que DSA serait supprimé en 2025. La prise en charge a été entièrement abandonnée dans la version 10.0.

Opération

L'algorithme DSA comprend quatre opérations : la génération de clés (qui crée la paire de clés), la distribution des clés, la signature et la vérification de la signature.

1. Génération de clés

La génération de clés comporte deux phases. La première phase consiste à choisir les paramètres de l'algorithme , qui peuvent être partagés entre différents utilisateurs du système, tandis que la seconde phase calcule une paire de clés unique pour chaque utilisateur.

Génération de paramètres

  • Choisissez une fonction de hachage cryptographique approuvée dont la longueur de sortie est de bits. Dans la version originale du DSS, il s'agissait toujours de SHA-1 , mais les fonctions de hachage SHA-2, plus robustes , sont approuvées pour une utilisation dans la version actuelle du DSS. Si la longueur de sortie est supérieure à la longueur du module , seuls les bits les plus à gauche du résultat du hachage sont utilisés.
  • Choisissez une longueur de clé . La norme DSS originale imposait une longueur multiple de 64, comprise entre 512 et 1024 inclus. La norme NIST 800-57 recommande des longueurs de 2048 (ou 3072) pour les clés dont la durée de vie de sécurité s'étend au-delà de 2010 (ou 2030).
  • Choisissez la longueur du module telle que et . La norme FIPS 186-4 spécifie que et doivent avoir l'une des valeurs suivantes : (1024, 160), (2048, 224), (2048, 256) ou (3072, 256).
  • Choisissez un nombre premier de bits .
  • Choisissez un nombre premier de bits tel que soit un multiple de .
  • Choisissez un entier au hasard parmi .
  • Calculer . Dans le rare cas où cela se produit, réessayer avec une valeur différente . On utilise généralement. Cette exponentiation modulaire peut être calculée efficacement même si les valeurs sont grandes.

Les paramètres de l'algorithme sont ( , , ). Ceux-ci peuvent être partagés entre différents utilisateurs du système.

Clés par utilisateur

À partir d'un ensemble de paramètres, la deuxième phase calcule la paire de clés pour un utilisateur unique :

  • Choisissez un entier au hasard parmi .
  • Calculer .

2. Répartition des clés

Le signataire doit publier la clé publique . Autrement dit, il doit transmettre la clé au destinataire par un mécanisme fiable, mais pas nécessairement secret. Le signataire doit garder sa clé privée secrète.

3. Signature

Un message est signé comme suit :

  • Choisissez un entier au hasard parmi
  • Calculer . Dans le cas improbable où , recommencer avec un nombre aléatoire différent .
  • Calculer . Dans le cas improbable où , recommencer avec un nombre aléatoire différent .

La signature est

Le calcul de et revient à créer une nouvelle clé par message. L'exponentiation modulaire, dans le calcul, est l'étape la plus coûteuse de l'opération de signature, mais elle peut être effectuée avant que le message ne soit connu. Le calcul de l'inverse modulaire est la deuxième étape la plus coûteuse et peut également être effectué avant que le message ne soit connu. Il peut être calculé à l'aide de l' algorithme d'Euclide étendu ou du petit théorème de Fermat .

4. Vérification de la signature

On peut vérifier qu'une signature est valide pour un message de la manière suivante :

  • Vérifiez cela et .
  • Calculer .
  • Calculer .
  • Calculer .
  • Calculer .
  • La signature est valide si et seulement si .

Exactitude de l'algorithme

Le schéma de signature est correct dans la mesure où le vérificateur acceptera toujours les signatures authentiques. Cela peut être démontré comme suit :

Premièrement, puisque , il s'ensuit, d' après le petit théorème de Fermat , que . Puisque et est premier, doit être d'ordre . 0 g>0{\displaystyle g>0}0

Le signataire calcule

Ainsi

Puisque nous avons l'ordre, nous avons

Enfin, la validité de DSA découle de

Sensibilité

Avec DSA, l'entropie, la confidentialité et l'unicité de la valeur de signature aléatoire sont essentielles. Leur importance est telle que la violation de l'une de ces trois conditions peut révéler la totalité de la clé privée à un attaquant. Utiliser deux fois la même valeur (même en la gardant secrète), utiliser une valeur prévisible, ou divulguer ne serait-ce que quelques bits dans plusieurs signatures, suffit à révéler la clé privée .

Ce problème affecte à la fois DSA et l'algorithme de signature numérique à courbe elliptique ( ECDSA ). En décembre 2010, le groupe fail0verflow a annoncé la récupération de la clé privée ECDSA utilisée par Sony pour signer les logiciels de la console de jeux PlayStation 3. L'attaque a été rendue possible par le fait que Sony n'a pas généré de nouvelle valeur aléatoire pour chaque signature.

Ce problème peut être évité en dérivant de manière déterministe le hachage à partir de la clé privée et du hachage du message, comme décrit dans la RFC 6979. Cela garantit que le hachage est différent pour chaque attaquant et imprévisible pour ceux qui ne connaissent pas la clé privée .

De plus, des implémentations malveillantes de DSA et d'ECDSA peuvent être créées, où le choix de la méthode permet de divulguer des informations de manière subliminale via les signatures. Par exemple, une clé privée hors ligne pourrait être divulguée à partir d'un dispositif hors ligne parfaitement sécurisé qui ne publierait que des signatures d'apparence innocente.

Mises en œuvre

Vous trouverez ci-dessous une liste non exhaustive de bibliothèques cryptographiques prenant en charge DSA :