DSA

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 12. syyskuuta 2016 tarkistetusta versiosta . tarkastukset vaativat 76 muokkausta .
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).  

Algoritmin kuvaus

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 .

Digital Signature Scheme Options

Luodaksesi digitaalisen allekirjoitusjärjestelmän, sinun on suoritettava seuraavat vaiheet:

  1. Salauksen hajautusfunktion valinta H(x).
  2. Valitse alkuluku q , jonka dimensio N bitteinä on sama kuin hash-arvojen H(x) dimensio bitteinä.
  3. Alkuluvun p valinta siten, että (p-1) on jaollinen q :llä . Bitin pituutta p merkitään L .
  4. Valitaan luku g ( ) siten, että sen kertolaskuaste modulo p on yhtä suuri kuin q . Sen laskemiseen voit käyttää kaavaa , jossa h  on jokin mielivaltainen luku , joka . Useimmissa tapauksissa arvo h = 2 täyttää tämän vaatimuksen. [5]

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 :

  1. L = 1024, N = 160
  2. L = 2048, N = 224
  3. L = 2048, N = 256
  4. L = 3072, N = 256

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 ja yksityiset avaimet

  1. Salainen avain on numero
  2. Julkinen avain lasketaan kaavalla

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

Viestin allekirjoitus suoritetaan seuraavan algoritmin [5] mukaisesti :

  1. Satunnaisluvun valitseminen
  2. laskeminen
  3. Valitse toinen k if
  4. laskeminen
  5. Valitse toinen k if
  6. Allekirjoitus on kokonaispituinen pari

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 vahvistus

Allekirjoituksen tarkistus suoritetaan algoritmin [5] mukaisesti :

1 Laskenta 2 Laskenta 3 Laskenta 4 Laskenta 5 Allekirjoitus on oikein, jos

Kun tämä on valittuna, laskennallisesti monimutkaiset operaatiot ovat kaksi eksponentiota , hash-laskenta ja käänteisen elementin löytäminen .

Kaavion oikeellisuus

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]

Työesimerkki

Otetaan esimerkki siitä, kuinka algoritmi toimii pienille luvuille. Olkoon viestimme hash-arvo .

Parametrien luominen

  1. hashin pituus , joten voit valita
  2. valita, koska
  3. valita

Avainten luominen

  1. valita salaiseksi avaimeksi
  2. sitten julkinen avain

Viestin allekirjoitus

  1. valita
  2. sitten
  3. , jatka eteenpäin
  4. , jossa se otetaan huomioon
  5. , jatka eteenpäin
  6. allekirjoitus on numeropari

Allekirjoituksen vahvistus

  1. vastaanotettu, mikä tarkoittaa, että allekirjoitus on oikea.

Analogit

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: RivestShamir , Adleman ), perustuu suurten lukujen tekijöihin laskemisen vaikeuteen.

Kryptografinen vahvuus

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 ennustettavuus

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 :

Eksistentiaalinen väärennös

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]

Avaimen palautus

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]

Allekirjoituksen väärennös

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]

Algorithm Implementation Verification System

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:

  1. Verkkoalueen parametrien luominen
  2. Tarkistetaan verkkotunnuksen asetuksia
  3. Julkisen ja yksityisen avainparin luominen
  4. Luo allekirjoitus
  5. Allekirjoituksen vahvistus

Toteutuksen testaamiseksi kehittäjän tulee lähettää hakemus sen toteutuksen testaamiseksi CMT-laboratorioon ( Cryptographic Module Testing Laboratory ) .  [5]

Alkuluvun sukupolvi

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

Satunnaislukujen luominen

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]

Muistiinpanot

  1. 123 Patentti US 5231668 A.
  2. 123 FIPS 186-1 . _
  3. FIPS 186-2 .
  4. FIPS 186-3 .
  5. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 FIPS 186-4 .
  6. 12 FIPS 180-4 .
  7. FIPS 202 .
  8. Törmäysten etsiminen Full SHA-1:stä .
  9. Vapaakäynnistystörmäys täydelle SHA-1:lle .
  10. NIST-erikoisjulkaisu 800-57 .
  11. Elgamal, 1985 .
  12. C. P. Schnorr. Tehokas tunnistus ja allekirjoitukset älykorteille  //  Advances in Cryptology - CRYPTO' 89 Proceedings / Gilles Brassard. — New York, NY: Springer, 1990. — S. 239–252 . - ISBN 978-0-387-34805-6 . - doi : 10.1007/0-387-34805-0_22 . Arkistoitu alkuperäisestä 12. huhtikuuta 2022.
  13. GOST R 34.11-2012
  14. 1 2 Elliptisen käyrän digitaalisen allekirjoituksen algoritmi (ECDSA) .
  15. Digitaalisen allekirjoituksen algoritmin epävarmuus ja osittain tunnetut poikkeamat .
  16. ECDSA - Sovellus- ja toteutusvirheet .
  17. Elliptisen käyrän kryptografia käytännössä .
  18. Turvallisuusargumentit digitaalisille ja sokeille allekirjoituksille .
  19. Digitaalisen allekirjoituksen algoritmin validointijärjestelmä .
  20. Vahvojen alkulukujen luominen .
  21. Satunnaislukujen luominen .

Kirjallisuus

Standardit ja patentit

Artikkelit