Share to: share facebook share twitter share wa share telegram print page

Digital Signature Algorithm

Digital Signature Algorithm (zkráceně DSA, doslovně přeloženo z angličtiny algoritmus digitálního podpisu) je standard americké vlády pro digitální podpis. DSA byl navržen americkou agenturou NSA,[1] přestože původně byl připisován americkému institutu NIST, který jej v srpnu 1991 určil pro použití v Digital Signature Standard (DSS), specifikovaném ve FIPS 186, jenž byl přijat v roce 1993. Malá úprava standardu byla vydána v roce 1996 jako FIPS 186-1, standard byl dále rozšířen v roce 2000 jako FIPS 186-2, v roce 2009 jako FIPS 186-3[2] a nakonec v roce 2013 jako FIPS 186-4.[3] V roce 2024 projekt OpenSSH podporu slabého DSA implicitně vypnul[4] a definitivně bylo DSA odstraněno z kódu v roce 2025.[5]

Charakteristika

DSA je patentováno pod číslem 5231668[6] a připsáno Davidovi W. Kravitzovi, bývalému zaměstnanci Národní bezpečnostní agentury Spojených států amerických. Národní institut standardů a technologie tento patent dal celosvětové veřejnosti k volnému užívaní bez poplatků.[7] Německý matematik Claus P. Schnorr v té době prohlašoval, že jeho patent na Schnorrův podpis pokrývá i DSA.[8]

Algoritmus samotný je založen na problému výpočtu diskrétního logaritmu, je podobný algoritmu ElGamal.

Vytváření klíčů

Vytváření klíčů má dvě fáze. Ve fázi první se vyberou parametry algoritmu, které mohou být sdíleny více různými uživateli systému.

  • Především se provede výběr kryptografické hašovací funkce. V původní DSS byla jako hašovací funkce povinně SHA-1, ale v současných verzích je povolena též SHA-2.
  • Dále se rozhodne o parametrech L a N, které určují délku klíče. V původní verzi DSS byla volba L omezena na násobky 64 v rozsahu 512 až 1024 včetně. Doporučení Národního institutu standardů a technologií číslo 800-57[9] doporučuje délku 2048 (respektive 3072) pro klíče, u kterých se předpokládá používání po roce 2010 (respektive 2030), při použití adekvátně velkého N. Federální standard pro práci s informacemi číslo 186-3[2] doporučuje dvojice L a N (1024,160), (2048,224), (2048,256) a (3072,256). Znamená to tedy, že ve standardu NIST je původní grupa (například 1024 bitů) omezena na podgrupu (síly 160 bitů).
  • Dále se vybere N-bitové prvočíslo q. Délka N musí být alespoň taková, jako délka výstupu použité hašovací funkce.
  • Dále se vybere L-bitové prvočíslo p takové, že p-1 je násobek q.
  • Nakonec se vybere g jako takové číslo, jehož multiplikativní řád modulo p je právě q. Toho lze dosáhnout dosazováním do vzorce g=h(p-1)/q mod p pro náhodná h (kde 1< h < p-1), dokud výsledek není různý od jedné. Většina náhodných voleb h uspěje, nejčastěji se používá h=2.

Parametry (p,q,g) mohou být sdíleny více uživateli a nejsou tajné. Následuje vytvoření samotných klíčů.

  • Nejdříve se náhodně vybere soukromý klíč x v rozsahu 0<x<q.
  • Pak se spočítá veřejný klíč y - y=gx mod p.

Podepisování

Při označení hašovací funkce písmenem H a zprávy písmenem z probíhá podepisování takto:

  • pro danou zprávu se vybere náhodná hodnota k v rozsahu 0<k<q
  • spočítá se r=(gk mod p) mod q
  • spočítá se s=(k−1(H(z)+xr)) mod q
  • v nepříliš pravděpodobném případě, že je r=0 nebo s=0 se výpočet opakuje od začátku
  • jinak je podpisem dvojice (r,s)

Ověřování podpisu

  • pokud neplatí 0< r <q a 0< s <q pak je podpis automaticky zamítnut.
  • jinak se spočítá w = (s)−1 mod q
  • dále se spočítá u1 = (H(z)*w) mod q
  • dále se spočítá u2 = (r*w) mod q
  • nakonec se spočítá v = ((gu1*yu2) mod p) mod q
  • Podpis platí, pokud platí v = r

Správnost algoritmu

Ukázat, že správně vytvořený podpis bude jako takový rozeznán, je možné následovně:

Především z g = h(p–1)/q mod p plyne gqhp-1 ≡ 1 (mod p) podle Malé Fermatovy věty. Protože platí g>1 a q je prvočíslo, musí mít g řád q.

Z výpočtu

učiněného během podepisování plyne

A protože g má řád q, platí také

Dohromady tedy

Užití

Digital Signature algorithm je široce využíván, mimo jiné v OpenSSL, v OpenSSH a v GnuPG.

Reference

V tomto článku byl použit překlad textu z článku Digital Signature Algorithm na anglické Wikipedii.

  1. NEUMANN, Peter G. The RISKS Digest Volume 14 Issue 59 [online]. 2020-02-29 [cit. 2023-10-03]. Dostupné v archivu pořízeném z originálu dne 2020-02-29. 
  2. a b (anglicky) FIPS 186-3
  3. (anglicky) FIPS 186-4
  4. OpenSSH announces DSA-removal timeline [LWN.net] [online]. [cit. 2024-01-11]. Dostupné online. 
  5. KRČMÁŘ, Petr. OpenSSH 10.0 končí s podporou podpisů DSA a zavádí postkvantovou výměnu klíčů. Root.cz [online]. 2025-04-09 [cit. 2025-04-10]. Dostupné online. 
  6. (anglicky) patent 5231668 na google.com
  7. (anglicky) zpráva v emailové konferenci GnuPG
  8. (anglicky) patent 4995082 na google.com
  9. (anglicky) NIST Special publication 800-57: Recommendation for Key Management
Prefix: a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9

Portal di Ensiklopedia Dunia

Kembali kehalaman sebelumnya