DSA, Digital Signature Algorithm | |
---|---|
Luoja | NIST |
Luotu | 1991 |
julkaistu | 1998 |
Avaimen koko | suljettu: 160-256 bittiä, avoin: 1024-3072 bittiä |
Allekirjoituksen koko | kaksi 160-256 bitin lukua |
DSA ( Digital Signature Algorithm - digitaalinen allekirjoitusalgoritmi ) - salausalgoritmi , joka käyttää yksityistä avainta (avainparista: <julkinen; yksityinen>) sähköisen allekirjoituksen luomiseen , mutta ei salaukseen (toisin kuin RSA ja ElGamal-järjestelmä ). Allekirjoitus luodaan salaa (yksityinen avain), mutta se voidaan vahvistaa julkisesti (julkinen avain). Tämä tarkoittaa, että vain yksi aihe voi luoda viestin allekirjoituksen, mutta kuka tahansa voi varmistaa, että se on oikein. Algoritmi perustuu logaritmien ottamisen laskennalliseen monimutkaisuuteen äärellisissä kentissä .
Algoritmia ehdotti National Institute of Standards and Technology ( USA ) elokuussa 1991, ja se on patentoitu [1] (patentin tekijä - David W. Kravitz), NIST teki tämän patentin käytettäväksi ilman rojalteja . DSA on osa DSS -standardia ( Digital Signature Standard), joka julkaistiin ensimmäisen kerran 15. joulukuuta 1998 (asiakirja FIPS-186 [2] ( Federal Information Processing Standards ) . Standardia on päivitetty useita kertoja [3] [4] , uusin versio on FIPS-186-4 [5] . (Heinäkuu 2013).
DSA sisältää kaksi algoritmia (S, V): luoda viestin allekirjoitus (S) ja varmistaa sen (V).
Molemmat algoritmit laskevat ensin viestin tiivisteen käyttämällä kryptografista hajautusfunktiota . Algoritmi S käyttää tiivistettä ja salaista avainta allekirjoituksen luomiseen, algoritmi V käyttää viestin tiivistettä, allekirjoitusta ja julkista avainta allekirjoituksen tarkistamiseen.
On syytä korostaa, että varsinaisesti allekirjoitettu ei ole viesti (mitunnaisen pituinen), vaan sen hash (160 - 256 bittiä), joten törmäykset ovat väistämättömiä ja yksi allekirjoitus on yleisesti ottaen voimassa useille viesteille, joilla on sama tiiviste. . Siksi riittävän "hyvän" hash-funktion valinta on erittäin tärkeää koko järjestelmälle kokonaisuutena. Standardin ensimmäisessä versiossa käytettiin SHA-1 [6] [2] hash-toimintoa ( Secure Hash Algorithm - suojattu hajautusalgoritmi) , uusimmassa versiossa voit myös käyttää mitä tahansa SHA-2- perheen algoritmia [6] [5 ] . Elokuussa 2015 julkaistiin FIPS-202 [7] , joka kuvaa uutta SHA-3- tiivistetoimintoa . Mutta nykyään se ei sisälly DSS-standardiin [5] .
Järjestelmä vaatii vastaavuuspohjan kirjoittajan todellisten tietojen (se voi olla joko henkilö tai organisaatio) ja julkisten avainten välillä sekä kaikki tarvittavat digitaalisen allekirjoituksen parametrit (hash-funktio, alkuluvut ). Esimerkiksi varmenneviranomainen voi toimia tällaisena perustana .
Luodaksesi digitaalisen allekirjoitusjärjestelmän, sinun on suoritettava seuraavat vaiheet:
Kuten edellä mainittiin, digitaalisen allekirjoituksen menetelmän ensisijainen parametri on kryptografinen hajautusfunktio, jota käytetään muuttamaan viestin teksti numeroksi , jolle allekirjoitus lasketaan. Tämän toiminnon tärkeä ominaisuus on ulostulosekvenssin bittipituus, joka on merkitty N :llä alla . DSS -standardin ensimmäisessä versiossa suositellaan SHA-1- funktiota [2] ja sen mukaisesti etumerkityn luvun bittipituus on 160 bittiä. Nyt SHA-1 ei ole enää tarpeeksi turvallinen [8] [9] . Standardi määrittelee seuraavat mahdolliset arvoparit numeroille L ja N :
Tämän standardin mukaan suositellaan SHA-2- perheen hajautusfunktioita . Yhdysvaltain hallituksen organisaatioiden on käytettävä yhtä kolmesta ensimmäisestä vaihtoehdosta, varmentajan on käytettävä paria, joka on yhtä suuri tai suurempi kuin tilaajien käyttämä pari [5] . Järjestelmän suunnittelija voi valita minkä tahansa kelvollisen hash-funktion. Tämän vuoksi lisähuomiota ei kiinnitetä tietyn hash-funktion käyttöön.
DSA-pohjaisen kryptojärjestelmän vahvuus ei ylitä käytetyn hash-funktion vahvuutta ja parin (L,N) vahvuutta, jonka vahvuus ei ole suurempi kuin kunkin luvun vahvuus erikseen. On myös tärkeää ottaa huomioon, kuinka kauan järjestelmän on oltava suojattu. Tällä hetkellä järjestelmille, joiden on oltava pysyviä vuoteen 2010 ( 2030 ), suositellaan 2048 (3072) bitin pituutta. [5] [10]
Julkiset parametrit ovat numeroita (p, q, g, y) . On vain yksi yksityinen parametri - numero x . Tässä tapauksessa numerot (p, q, g) voivat olla yhteisiä käyttäjäryhmälle, ja numerot x ja y ovat vastaavasti tietyn käyttäjän yksityisiä ja julkisia avaimia. Viestiä allekirjoitettaessa käytetään salaisia numeroita x ja k , ja numero k on valittava satunnaisesti (käytännössä näennäissatunnaisesti) laskettaessa jokaisen seuraavan viestin allekirjoitusta.
Koska (p, q, g) voidaan käyttää useille käyttäjille, käytännössä käyttäjät jaetaan usein joidenkin kriteerien mukaan ryhmiin, joilla on sama (p, q, g) . Siksi näitä parametreja kutsutaan toimialueen parametreiksi. [5]
Viestin allekirjoitus suoritetaan seuraavan algoritmin [5] mukaisesti :
Laskennallisesti monimutkaisia operaatioita ovat eksponentiomodulo (laskenta ), joille on olemassa nopeat algoritmit , hash laskenta , jossa monimutkaisuus riippuu valitusta hajautusalgoritmista ja syötetyn viestin koosta sekä käänteiselementin löytäminen käyttämällä esimerkiksi laajennettua euklidista. algoritmi tai Fermatin pieni lause muodossa .
Allekirjoituksen tarkistus suoritetaan algoritmin [5] mukaisesti :
1 Laskenta 2 Laskenta 3 Laskenta 4 Laskenta 5 Allekirjoitus on oikein, josKun tämä on valittuna, laskennallisesti monimutkaiset operaatiot ovat kaksi eksponentiota , hash-laskenta ja käänteisen elementin löytäminen .
Tämä digitaalinen allekirjoitusmalli on oikea siinä määrin, että allekirjoituksen aitouden varmentamiseen haluava saa aina positiivisen tuloksen aitouden tapauksessa. Näytetään se:
Ensinnäkin, jos , niin Fermatin pienestä lauseesta seuraa, että . Koska g >1 ja q on alkuluku, niin g :n on oltava kertovassa järjestyksessä q modulo p .
Allekirjoittaaksesi viestin, se laskee
Siksi
Koska g on kertalukua q , saamme
Lopuksi DSA-skeeman oikeellisuus seuraa
[5]Otetaan esimerkki siitä, kuinka algoritmi toimii pienille luvuille. Olkoon viestimme hash-arvo .
DSA-algoritmi perustuu diskreettien logaritmien laskemisen vaikeuteen ja on muunnos klassisesta ElGamal-skeemasta [ 11] , jossa viestien hajautus on lisätty ja kaikki logaritmit lasketaan , mikä mahdollistaa allekirjoituksen lyhentämisen analogeihin verrattuna. [12] . ElGamal-kaavion perusteella rakennettiin myös muita algoritmeja, esimerkiksi venäläinen GOST 34.10-94 , jota pidetään nyt vanhentuneena. Se korvattiin standardilla GOST R 34.10-2012 [13] , joka käyttää elliptisen käyrän pisteryhmää .
Tällainen muunnos, ts. siirtyminen multiplikatiivisesta ryhmästä modulo a alkuluvusta elliptisten käyrien pisteiden ryhmään on olemassa myös DSA- ECDSA :lle [14] ( Elliptic Curve Digital Signature Algorithm - digitaalinen allekirjoitusalgoritmi elliptisille käyräille) . Sitä käytetään esimerkiksi bitcoin - kryptovaluutoissa tapahtumien vahvistamiseen. Tämän käännöksen avulla voit pienentää avainten kokoa turvallisuudesta tinkimättä - bitcoin-järjestelmässä yksityisen avaimen koko on 256 bittiä ja vastaavan julkisen avaimen koko on 512 bittiä.
Toinen yleinen julkisen avaimen algoritmi (käytetään sekä salaukseen että digitaaliseen allekirjoitukseen), RSA (nimetty tekijöiden mukaan: Rivest , Shamir , Adleman ), perustuu suurten lukujen tekijöihin laskemisen vaikeuteen.
Mikä tahansa hyökkäys algoritmia vastaan voidaan kuvata seuraavasti: hyökkääjä vastaanottaa kaikki julkiset allekirjoitusparametrit ja tietyn joukon pareja (viesti, allekirjoitus) ja yrittää tätä joukkoa käyttämällä luoda kelvollisen allekirjoituksen uudelle viestille, jota ei ole joukossa. .
Nämä hyökkäykset voidaan jakaa ehdollisesti kahteen ryhmään - ensinnäkin hyökkääjä voi yrittää palauttaa salaisen avaimen , ja sitten hän saa heti mahdollisuuden allekirjoittaa minkä tahansa viestin, ja toiseksi hän voi yrittää luoda kelvollisen allekirjoituksen uudelle viestille ilman palauttaa salaisen avaimen suoraan.
Satunnaisparametrin tasainen jakautuminen on erittäin tärkeää järjestelmän turvallisuuden kannalta. Jos allekirjoitusten sarjalle tunnetaan useita peräkkäisiä parametribittejä , niin salainen avain voidaan palauttaa suurella todennäköisyydellä. [viisitoista]
Parametrin toistaminen kahdelle viestille johtaa yksinkertaiseen järjestelmän hakkerointiin. Tämä voi tapahtua käytettäessä huonoa pseudosatunnaislukugeneraattoria . Tämä PlayStation 3 -järjestelmän haavoittuvuus mahdollisti kaikkien ohjelmien allekirjoittamisen Sonyn puolesta. Joissakin Androidin bitcoin-järjestelmän toteutuksissa hyökkääjä voi päästä käsiksi lompakkoon. [16] [17] Molemmissa esimerkeissä käytettiin ECDSA [14] -järjestelmää .
Jos samaa parametria käytettiin kahdelle viestille , niin niiden allekirjoitukset ovat samat , mutta erilaiset , kutsutaan niitä .
Lausekkeesta for voimme ilmaista kokonaismäärän :
.
Ja sama eri viesteille:
Täältä on helppo ilmaista salainen avain :
Olemassa oleva väärennös voi hyökätä joihinkin digitaalisen allekirjoituksen algoritmeihin (Existential forgery) . Se johtuu siitä, että allekirjoitukselle (joko ollenkaan satunnaiselle tai jonkin säännön mukaan luotulle) on mahdollista luoda oikea viesti (missä ei kuitenkaan yleensä ole järkeä) käyttämällä vain julkisia parametreja.
DSA-skeemassa allekirjoitus on joka tapauksessa voimassa tiivistetyn viestin kohdalla .
Tämä on yksi syistä syöttöviestin hajauttamiseen. Jos hash-funktio valitaan oikein, DSA-algoritmi on suojattu tältä hyökkäykseltä, koska kryptografisen hajautusfunktion kääntäminen (eli tietylle löydökselle , joka on ) on laskennallisesti vaikeaa. [kahdeksantoista]
allekirjoituksen oikeellisuusehto voidaan kirjoittaa uudelleen eri muotoon:
tämä yhtälö on ekvivalentti (koska g :n modulo p : n kertova järjestys on yhtä suuri kuin q)
joten voimme olettaa, että avaimen palauttamiseksi hyökkääjän on ratkaistava muotoinen yhtälöjärjestelmä
mutta tässä järjestelmässä on tuntematon ja siinä kaikki , mikä tarkoittaa, että tuntemattomien määrä on yksi enemmän kuin yhtälöt, ja jokaiselle on niitä , jotka täyttävät järjestelmän. Koska q on suuri alkuluku, palautumiseen tarvitaan eksponentiaalinen määrä pareja (viesti, allekirjoitus). [yksi]
Voit yrittää väärentää allekirjoituksen tietämättä salaista avainta, eli yrittää ratkaista yhtälö
suhteessa ja . Jokaiselle kiinteälle yhtälö vastaa diskreetin logaritmin laskemista. [yksi]
Lisenssiehdot sallivat algoritmin toteuttamisen ohjelmistoissa ja laitteistoissa. NIST loi DSAVS:n [19] ( eng. The Digital Signature Algorithm Validation System - järjestelmä digitaalisen allekirjoituksen algoritmin tarkistamiseen ). DSAVS koostuu useista vaatimustenmukaisuustestimoduuleista, jotka testaavat järjestelmän jokaista komponenttia muista riippumatta. Testatut toteutuskomponentit:
Toteutuksen testaamiseksi kehittäjän tulee lähettää hakemus sen toteutuksen testaamiseksi CMT-laboratorioon ( Cryptographic Module Testing Laboratory ) . [5]
DSA-algoritmi vaatii kaksi alkulukua ( ja ), joten alkuluku- tai pseudoalkulukugeneraattori tarvitaan .
Shaw-Taylor- algoritmia [20] käytetään alkulukujen luomiseen .
Pseudoalkuluvut luodaan käyttämällä hash-funktiota ja Miller-Rabinin todennäköisyystestiä käytetään primaalisuuden testaamiseen . Siihen voidaan lisätä yksi Luukkaan primaalisuustesti . [5]
Tarvittava iteraatioiden määrä riippuu käytettyjen numeroiden pituudesta ja varmennusalgoritmista [5] :
vaihtoehtoja | vain M-R testi | M-R testi + Luken testi |
---|---|---|
p: 1024 bittiä
q: 160 bittiä virheen todennäköisyys |
40 | p: 3
q:19 |
p: 2048 bittiä
q: 224 bittiä virheen todennäköisyys |
56 | p: 3
q:24 |
p: 2048 bittiä
q: 256 bittiä virheen todennäköisyys |
56 | p: 3
q:27 |
p: 3072 bittiä
q: 256 bittiä virheen todennäköisyys |
64 | p: 2
q:27 |
Algoritmi vaatii myös satunnais- tai pseudosatunnaislukugeneraattorin . Tätä generaattoria tarvitaan yksityisen käyttäjäavaimen x sekä salaisen satunnaisparametrin luomiseen .
Standardi tarjoaa useita tapoja luoda näennäissatunnaisia lukuja käyttämällä lohkosalauksia tai hash-funktioita. [5] [21]