DSA, Algoritmus digitálního podpisu | |
---|---|
Tvůrce | NIST |
Vytvořeno | 1991 |
zveřejněno | 1998 |
Velikost klíče | zavřeno: 160-256 bitů, otevřeno: 1024-3072 bitů |
Velikost podpisu | dvě čísla 160-256 bitů |
DSA ( Digital Signature Algorithm - digitální podpisový algoritmus ) - kryptografický algoritmus využívající soukromý klíč ( z páru klíčů: <public; private>) k vytvoření elektronického podpisu , nikoli však k šifrování (na rozdíl od RSA a schématu ElGamal ). Podpis je vytvořen tajně (soukromý klíč), ale může být veřejně ověřen (veřejný klíč). To znamená, že pouze jeden subjekt může vytvořit podpis zprávy, ale kdokoli může ověřit, že je správný. Algoritmus je založen na výpočetní složitosti logaritmů v konečných polích .
Algoritmus byl navržen National Institute of Standards and Technology ( USA ) v srpnu 1991 a je patentován [1] (autor patentu - David W. Kravitz), NIST tento patent zpřístupnil pro použití bez licenčních poplatků . DSA je součástí DSS ( Digital Signature Standard), poprvé zveřejněného 15. prosince 1998 (dokument FIPS-186 [2] ( Federal Information Processing Standards ) . Standard byl několikrát aktualizován [3] [4] , nejnovější verze je FIPS-186-4 [5] . (Červenec 2013).
DSA obsahuje dva algoritmy (S, V): pro vytvoření podpisu zprávy (S) a pro jeho ověření (V).
Oba algoritmy nejprve vypočítají hash zprávy pomocí kryptografické hashovací funkce . Algoritmus S používá k vytvoření podpisu hash a tajný klíč, algoritmus V používá k ověření podpisu hash zprávy, podpis a veřejný klíč.
Je třeba zdůraznit, že ve skutečnosti není podepsána zpráva (libovolně dlouhé), ale její hash (160 - 256 bitů), kolize jsou proto nevyhnutelné a jeden podpis obecně platí pro několik zpráv se stejným hashem. . Proto je výběr dostatečně „dobré“ hashovací funkce velmi důležitý pro celý systém jako celek. První verze standardu používala hashovací funkci SHA-1 [6] [2] ( Secure Hash Algorithm - secure hash algorithm) , v nejnovější verzi můžete použít i libovolný algoritmus rodiny SHA-2 [6] [5 ] . V srpnu 2015 byl publikován FIPS-202 [7] popisující novou hashovací funkci SHA-3 . Dnes ale není součástí standardu DSS [5] .
Systém vyžaduje korespondenci mezi skutečnými údaji o autorovi (může to být jednotlivec nebo organizace) a veřejnými klíči a také všechny potřebné parametry schématu digitálního podpisu (hashovací funkce, prvočísla ). Jako takový základ může sloužit například certifikační autorita .
Chcete-li vytvořit systém digitálního podpisu, musíte provést následující kroky:
Jak bylo zmíněno výše, primárním parametrem schématu digitálního podpisu je kryptografická hašovací funkce používaná k převodu textu zprávy na číslo , pro které je podpis vypočítán. Důležitou charakteristikou této funkce je bitová délka výstupní sekvence, níže označená N . V první verzi standardu DSS je doporučena funkce SHA-1 [2] a podle toho je bitová délka podepsaného čísla 160 bitů. Nyní SHA-1 již není dostatečně bezpečný [8] [9] . Norma specifikuje následující možné dvojice hodnot pro čísla L a N :
Podle tohoto standardu jsou doporučeny hašovací funkce rodiny SHA-2 . Vládní organizace USA musí použít jednu z prvních tří možností, CA musí použít pár, který je stejný nebo větší než pár používaný předplatiteli [5] . Návrhář systému si může vybrat jakoukoli platnou hashovací funkci. Další pozornost proto nebude zaměřena na použití konkrétní hashovací funkce.
Síla kryptosystému na bázi DSA nepřesahuje sílu použité hašovací funkce a sílu páru (L,N), jehož síla není větší než síla každého z čísel samostatně. Je také důležité zvážit, jak dlouho musí systém zůstat bezpečný. V současné době se pro systémy, které musí být perzistentní do roku 2010 ( 2030 ), doporučuje délka 2048 (3072) bitů. [5] [10]
Veřejnými parametry jsou čísla (p, q, g, y) . Existuje pouze jeden soukromý parametr – číslo x . V tomto případě mohou být čísla (p, q, g) společná pro skupinu uživatelů a čísla x a y jsou soukromé a veřejné klíče konkrétního uživatele. Při podepisování zprávy se používají tajná čísla x a k a číslo k musí být zvoleno náhodně (v praxi pseudonáhodně) při výpočtu podpisu každé další zprávy.
Protože (p, q, g) může být použito pro více uživatelů, v praxi jsou uživatelé často rozděleni podle určitých kritérií do skupin se stejným (p, q, g) . Proto se tyto parametry nazývají parametry domény. [5]
Podpis zprávy se provádí podle následujícího algoritmu [5] :
Výpočetně složité operace jsou umocňování modulo (výpočet ), pro které existují rychlé algoritmy , výpočet hash , kde složitost závisí na zvoleném hashovacím algoritmu a velikosti vstupní zprávy a nalezení inverzního prvku pomocí např. rozšířeného euklidovského algoritmus nebo Fermatův malý teorém ve formě .
Ověření podpisu se provádí podle algoritmu [5] :
1 Výpočet 2 Výpočet 3 Výpočet 4 Výpočet 5 Podpis je správný, pokudPři zaškrtnutí jsou výpočetně složité operace dvě umocnění , výpočet hash a nalezení inverzního prvku .
Toto schéma digitálního podpisu je správné do té míry, že osoba, která si přeje ověřit pravost podpisu, vždy obdrží kladný výsledek v případě pravosti. Pojďme si to ukázat:
Nejprve, jestliže , pak z Fermatovy Malé věty vyplývá, že . Protože g >1 a q je prvočíslo, pak g musí mít multiplikativní řád q modulo p .
Chcete-li podepsat zprávu, vypočítává
Proto
Protože g je řádu q , dostaneme
Nakonec z toho vyplývá správnost schématu DSA
[5]Uveďme příklad, jak funguje algoritmus pro malá čísla. Nechte hash hodnotu naší zprávy .
Algoritmus DSA je založen na obtížnosti výpočtu diskrétních logaritmů a je modifikací klasického schématu ElGamal [11] , kde je přidán hash zprávy a všechny logaritmy jsou počítány pomocí , což umožňuje, aby byl podpis kratší než u analogů. [12] . Na základě schématu ElGamal byly postaveny i další algoritmy, například ruský GOST 34.10-94 , který je nyní považován za zastaralý. Byla nahrazena normou GOST R 34.10-2012 [13] , která používá skupinu bodů eliptické křivky .
Taková úprava, tzn. přechod od multiplikativní skupiny modulo prvočíslo ke skupině bodů eliptické křivky existuje také pro DSA - ECDSA [14] ( Eliptic Curve Digital Signature Algorithm - algoritmus digitálního podpisu na eliptických křivkách) . Používá se například v kryptoměně bitcoin k potvrzování transakcí. Tento překlad umožňuje zmenšit velikost klíčů bez obětování bezpečnosti – v bitcoinovém systému je velikost soukromého klíče 256 bitů a odpovídajícího veřejného klíče 512 bitů.
Další běžný algoritmus veřejného klíče (používaný pro šifrování i digitální podpis), RSA (pojmenovaný podle autorů: Rivest , Shamir , Adleman ), je založen na obtížnosti faktorizace velkých čísel.
Jakýkoli útok na algoritmus lze popsat následovně: útočník obdrží všechny parametry veřejného podpisu a určitou sadu párů (zpráva, podpis) a pokusí se pomocí této sady vytvořit platný podpis pro novou zprávu, která není v sadě zastoupena. .
Tyto útoky lze podmíněně rozdělit do dvou skupin – za prvé se útočník může pokusit získat tajný klíč a poté okamžitě získá příležitost podepsat libovolnou zprávu a za druhé se může pokusit vytvořit platný podpis pro novou zprávu bez přímo obnovit tajný klíč.
Rovnoměrné rozložení náhodného parametru je velmi důležité pro bezpečnost systému. Pokud je známo několik po sobě jdoucích parametrových bitů pro sérii podpisů, pak může být tajný klíč s vysokou pravděpodobností obnoven. [patnáct]
Opakování parametru pro dvě zprávy vede k jednoduchému hacknutí systému. To se může stát při použití špatného generátoru pseudonáhodných čísel . Tato chyba zabezpečení v systému PlayStation 3 umožňovala podepisování jakýchkoli programů jménem společnosti Sony . V některých implementacích bitcoinového systému pro Android by útočník mohl získat přístup k peněžence. [16] [17] Oba příklady využívaly systém ECDSA [14] .
Pokud byl stejný parametr použit pro dvě zprávy , jejich podpisy budou mít stejné , ale odlišné , říkejme jim .
Z výrazu pro můžeme vyjádřit celkem :
.
A srovnejte společné pro různé zprávy:
Odtud je snadné vyjádřit tajný klíč :
Některé algoritmy digitálního podpisu mohou být napadeny existujícím padělkem (Existenční padělek) . Spočívá v tom, že pro podpis (ať už vůbec náhodný nebo vytvořený podle nějakého pravidla) je možné vytvořit korektní zprávu (která však většinou nedává smysl) pouze pomocí veřejných parametrů.
U schématu DSA je podpis v každém případě platný pro zprávu s hashem .
To je jeden z důvodů hashování vstupní zprávy. Pokud je hašovací funkce zvolena správně, je algoritmus DSA před tímto útokem chráněn, protože inverze kryptografické hašovací funkce (tj. pro daný nález takový, že ) je výpočetně náročná. [osmnáct]
podmínku správnosti podpisu lze přepsat do jiné podoby:
tato rovnice je ekvivalentní (protože multiplikativní řád g modulo p se rovná q)
takže můžeme předpokládat, že pro obnovení klíče útočník potřebuje vyřešit systém rovnic formuláře
ale v tomto systému je neznámá a to je vše , což znamená, že počet neznámých je o jednu větší než rovnic a pro všechny existují ty , které systém splňují. Protože q je velké prvočíslo, bude pro obnovu vyžadován exponenciální počet párů (zpráva, podpis). [jeden]
Můžete se pokusit zfalšovat podpis bez znalosti tajného klíče, to znamená pokusit se vyřešit rovnici
s ohledem na a . Pro každý pevný je rovnice ekvivalentní výpočtu diskrétního logaritmu. [jeden]
Licenční podmínky vám umožňují implementovat algoritmus v softwaru a hardwaru. NIST vytvořil DSAVS [19] ( Eng. The Digital Signature Algorithm Validation System - systém pro kontrolu algoritmu digitálního podpisu ). DSAVS se skládá z několika modulů pro testování shody, které testují každou komponentu systému nezávisle na ostatních. Testované implementační komponenty:
Pro otestování implementace musí vývojář odeslat žádost o testování její implementace do laboratoře CMT ( Cryptographic Module Testing Laboratory ) . [5]
Algoritmus DSA vyžaduje dvě prvočísla ( a ), takže je potřeba generátor prvočísel nebo pseudo -prvočísel .
Ke generování prvočísel se používá Shaw-Taylorův algoritmus [20] .
Pseudoprimy se generují pomocí hashovací funkce a k testování primality se používá Miller-Rabinův pravděpodobnostní test . Lze k ní přidat jediný test Lukeovy primality . [5]
Požadovaný počet iterací závisí na délce použitých čísel a na ověřovacím algoritmu [5] :
možnosti | pouze M-R test | M-R test + Luke test |
---|---|---|
p: 1024 bitů
q: 160 bitů pravděpodobnost chyby |
40 | p: 3
q:19 |
p: 2048 bitů
q: 224 bitů pravděpodobnost chyby |
56 | p: 3
q:24 |
p: 2048 bitů
q: 256 bitů pravděpodobnost chyby |
56 | p: 3
q:27 |
p: 3072 bitů
q: 256 bitů pravděpodobnost chyby |
64 | p: 2
q:27 |
Algoritmus také vyžaduje generátor náhodných nebo pseudonáhodných čísel. Tento generátor je potřebný ke generování soukromého uživatelského klíče x a také ke generování tajného náhodného parametru .
Norma nabízí různé způsoby generování pseudonáhodných čísel pomocí blokových šifer nebo hashovacích funkcí. [5] [21]