DSA, digital signaturalgoritme | |
---|---|
Skaber | NIST |
Oprettet | 1991 |
offentliggjort | 1998 |
Nøglestørrelse | lukket: 160-256 bit, åben: 1024-3072 bit |
Signaturstørrelse | to tal på 160-256 bit |
DSA ( Digital Signature Algorithm - digital signature algorithm ) - en kryptografisk algoritme , der bruger en privat nøgle (fra et nøglepar: <offentlig; privat>) til at skabe en elektronisk signatur , men ikke til kryptering (i modsætning til RSA og ElGamal-ordningen ). Signaturen oprettes hemmeligt (privat nøgle), men kan verificeres offentligt (offentlig nøgle). Det betyder, at kun ét emne kan oprette en meddelelsessignatur, men enhver kan bekræfte, at den er korrekt. Algoritmen er baseret på den beregningsmæssige kompleksitet ved at tage logaritmer i endelige felter .
Algoritmen blev foreslået af National Institute of Standards and Technology ( USA ) i august 1991 og er patenteret [1] (patentforfatter - David W. Kravitz), NIST gjorde dette patent tilgængeligt til brug uden royalties . DSA er en del af DSS ( Digital Signature Standard), som først blev offentliggjort den 15. december 1998 (dokument FIPS-186 [2] ( Federal Information Processing Standards ) . Standarden er blevet opdateret flere gange [3] [4] , den seneste version er FIPS-186-4 [5] . (juli 2013).
DSA omfatter to algoritmer (S, V): at oprette en meddelelsessignatur (S) og at verificere den (V).
Begge algoritmer beregner først meddelelsens hash ved hjælp af en kryptografisk hashfunktion . Algoritme S bruger hash og hemmelig nøgle til at skabe signaturen, algoritme V bruger meddelelseshash, signatur og offentlige nøgle til at bekræfte signaturen.
Det er værd at understrege, at det ikke er meddelelsen (af vilkårlig længde), der faktisk er signeret, men dens hash (160 - 256 bit), derfor er kollisioner uundgåelige , og en signatur er generelt gyldig for flere meddelelser med samme hash . Derfor er valget af en tilstrækkelig "god" hashfunktion meget vigtig for hele systemet som helhed. Den første version af standarden brugte SHA-1 [6] [2] hash-funktionen ( Secure Hash Algorithm - sikker hashing-algoritme) , i den seneste version kan du også bruge enhver algoritme i SHA-2- familien [6] [5 ] . I august 2015 blev FIPS-202 [7] offentliggjort, der beskriver den nye SHA-3 hash-funktion . Men i dag er det ikke inkluderet i DSS-standarden [5] .
Systemet kræver en korrespondancebase mellem forfatterens reelle detaljer (det kan enten være en enkeltperson eller en organisation) og offentlige nøgler , samt alle de nødvendige parametre i den digitale signaturordning (hash-funktion, primtal ). For eksempel kan en certifikatmyndighed fungere som en sådan base .
For at bygge et digitalt signatursystem skal du udføre følgende trin:
Som nævnt ovenfor er den primære parameter i det digitale signaturskema den kryptografiske hashfunktion, der bruges til at konvertere meddelelsesteksten til et tal , som signaturen beregnes for. En vigtig egenskab ved denne funktion er bitlængden af outputsekvensen, angivet N nedenfor . I den første version af DSS -standarden anbefales SHA-1- funktionen [2] og derfor er bitlængden af det signerede nummer 160 bit. Nu er SHA-1 ikke længere sikker nok [8] [9] . Standarden specificerer følgende mulige værdipar for tallene L og N :
Hash-funktioner i SHA-2- familien anbefales under denne standard . Amerikanske regeringsorganisationer skal bruge en af de første tre muligheder, CA'er skal bruge et par, der er lig med eller større end det par, der bruges af abonnenter [5] . Systemdesigneren kan vælge enhver gyldig hashfunktion. Der vil derfor ikke blive fokuseret yderligere på brugen af en bestemt hashfunktion.
Styrken af et DSA-baseret kryptosystem overstiger ikke styrken af den anvendte hashfunktion og styrken af parret (L,N), hvis styrke ikke er større end styrken af hvert af tallene separat. Det er også vigtigt at overveje, hvor længe systemet skal forblive sikkert. I øjeblikket anbefales en længde på 2048 (3072) bit for systemer, der skal være vedvarende indtil 2010 ( 2030 ). [5] [10]
De offentlige parametre er tal (p, q, g, y) . Der er kun én privat parameter - tallet x . I dette tilfælde kan tallene (p, q, g) være fælles for en gruppe brugere, og tallene x og y er henholdsvis en bestemt brugers private og offentlige nøgler. Ved underskrift af en meddelelse anvendes hemmelige numre x og k , og tallet k skal vælges tilfældigt (i praksis pseudo-tilfældigt) ved beregning af signaturen for hver næste meddelelse.
Da (p, q, g) kan bruges til flere brugere, opdeles brugerne i praksis ofte efter nogle kriterier i grupper med det samme (p, q, g) . Derfor kaldes disse parametre for domæneparametre. [5]
Meddelelsessignaturen udføres i henhold til følgende algoritme [5] :
Beregningsmæssigt komplekse operationer er eksponentieringsmodulo (beregning ), hvortil der er hurtige algoritmer , hash-beregning , hvor kompleksiteten afhænger af den valgte hashing-algoritme og størrelsen af inputmeddelelsen, og at finde det inverse element ved hjælp af f.eks. den udvidede euklidiske algoritme eller Fermats lille sætning i form .
Signaturverifikation udføres i henhold til algoritmen [5] :
1 Beregning 2 Beregning 3 Beregning 4 Beregning 5 Signaturen er korrekt, hvisNår det er markeret, er beregningsmæssigt komplekse operationer to eksponentieringer , en hash-beregning og at finde det inverse element .
Denne digitale signaturordning er korrekt i det omfang, en person, der ønsker at verificere signaturens ægthed, altid vil få et positivt resultat i tilfælde af ægthed. Lad os vise det:
For det første, hvis , så af Fermats lille sætning følger det, at . Da g >1 og q er primtal, så skal g have den multiplikative orden q modulo p .
For at underskrive en besked, beregner den
Derfor
Da g er af orden q , får vi
Endelig følger rigtigheden af DSA-skemaet af
[5]Lad os give et eksempel på, hvordan algoritmen fungerer for små tal. Lad hashværdien af vores budskab .
DSA-algoritmen er baseret på vanskeligheden ved at beregne diskrete logaritmer og er en modifikation af det klassiske ElGamal- skema [11] , hvor meddelelseshashing tilføjes, og alle logaritmer beregnes af , hvilket gør det muligt at gøre signaturen kortere i forhold til analoger. [12] . Baseret på ElGamal-ordningen blev der også bygget andre algoritmer, for eksempel den russiske GOST 34.10-94 , som nu anses for at være forældet. Den blev erstattet af standarden GOST R 34.10-2012 [13] , som bruger en gruppe af punkter i en elliptisk kurve .
En sådan modifikation, dvs. overgangen fra den multiplikative gruppe modulo et primtal til gruppen af elliptiske kurvepunkter findes også for DSA - ECDSA [14] ( Elliptic Curve Digital Signature Algorithm - digital signaturalgoritme på elliptiske kurver) . Det bruges for eksempel i bitcoin-kryptovalutaen til at bekræfte transaktioner. Denne oversættelse giver dig mulighed for at reducere størrelsen på nøglerne uden at ofre sikkerheden - i bitcoin-systemet er størrelsen på den private nøgle 256 bit, og den tilsvarende offentlige nøgle er 512 bit.
En anden almindelig offentlig nøglealgoritme (brugt til både kryptering og digital signatur), RSA (opkaldt efter forfatterne: Rivest , Shamir , Adleman ), er baseret på vanskeligheden ved at faktorisere store tal.
Ethvert angreb på algoritmen kan beskrives som følger: en angriber modtager alle offentlige signaturparametre og et bestemt sæt par (meddelelse, signatur) og forsøger ved hjælp af dette sæt at oprette en gyldig signatur for en ny besked, der ikke er repræsenteret i sættet .
Disse angreb kan betinget opdeles i to grupper - for det første kan en angriber forsøge at gendanne den hemmelige nøgle , og så får han straks mulighed for at underskrive enhver besked, og for det andet kan han forsøge at oprette en gyldig signatur til en ny besked uden at direkte gendannelse af den hemmelige nøgle.
Den ensartede fordeling af den tilfældige parameter er meget vigtig for systemets sikkerhed. Hvis flere på hinanden følgende parameterbit er kendt for en række signaturer, kan den hemmelige nøgle gendannes med stor sandsynlighed. [femten]
Gentagelse af parameteren for to meddelelser fører til en simpel hacking af systemet. Dette kan ske, når du bruger en dårlig pseudo-tilfældig talgenerator . Denne sårbarhed i PlayStation 3 -systemet gjorde det muligt at signere alle programmer på vegne af Sony . I nogle implementeringer af bitcoin-systemet til Android kan en angriber få adgang til tegnebogen. [16] [17] Begge eksempler brugte ECDSA [14] -systemet .
Hvis den samme parameter blev brugt til to beskeder , så vil deres signaturer have den samme , men forskellige , lad os kalde dem .
Fra udtrykket for kan vi udtrykke totalen :
.
Og lig med fælles for forskellige beskeder:
Herfra er det nemt at udtrykke den hemmelige nøgle :
Nogle digitale signaturalgoritmer kan angribes af en eksisterende forfalskning (Eksistentiel forfalskning) . Det ligger i, at det for en signatur (enten overhovedet tilfældig eller oprettet efter en eller anden regel) er muligt at oprette en korrekt besked (som dog normalt ikke giver mening) kun ved brug af offentlige parametre.
For DSA-skemaet er signaturen under alle omstændigheder gyldig for en meddelelse med en hash .
Dette er en af grundene til hash af inputmeddelelsen. Hvis hash-funktionen er valgt korrekt, er DSA-algoritmen beskyttet mod dette angreb, fordi inversionen af den kryptografiske hash-funktion (dvs. for en given konstatering således at ) er beregningsmæssigt vanskelig. [atten]
signaturkorrekthedsbetingelsen kan omskrives i en anden form:
denne ligning er ækvivalent (fordi den multiplikative rækkefølge af g modulo p er lig med q)
så vi kan antage, at for at gendanne nøglen skal angriberen løse et system af ligninger af formen
men i dette system er ukendt , og det er alt , hvilket betyder, at antallet af ukendte er én mere end ligningerne, og for enhver er der dem , der opfylder systemet. Da q er et stort primtal, vil et eksponentielt antal par (meddelelse, signatur) være påkrævet til gendannelse. [en]
Du kan prøve at forfalske en signatur uden at kende den hemmelige nøgle, det vil sige prøve at løse ligningen
med hensyn til og . For hver fast , svarer ligningen til at beregne den diskrete logaritme. [en]
Licensvilkårene giver dig mulighed for at implementere algoritmen i software og hardware. NIST skabte DSAVS [19] ( Eng. The Digital Signature Algorithm Validation System - et system til kontrol af den digitale signaturalgoritme ). DSAVS består af flere compliance test moduler, der tester hver komponent i systemet uafhængigt af de andre. Testede implementeringskomponenter:
For at teste implementeringen skal udvikleren indsende en ansøgning om test af implementeringen til CMT-laboratoriet ( Cryptographic Module Testing Laboratory ) . [5]
DSA-algoritmen kræver to primtal ( og ), så en prime- eller pseudo -prime-generator er nødvendig .
Shaw-Taylor- algoritmen [20] bruges til at generere primtal .
Pseudoprimer genereres ved hjælp af en hash-funktion, og Miller-Rabins probabilistiske test bruges til at teste for primalitet . En enkelt Luke -primalitetstest kan føjes til den . [5]
Det nødvendige antal iterationer afhænger af længden af de anvendte numre og af verifikationsalgoritmen [5] :
muligheder | kun M-R test | M-R test + Luke test |
---|---|---|
p: 1024 bit
q: 160 bit fejlsandsynlighed |
40 | p: 3
q:19 |
p: 2048 bit
q: 224 bit fejlsandsynlighed |
56 | p: 3
q:24 |
p: 2048 bit
q: 256 bit fejlsandsynlighed |
56 | p: 3
q:27 |
p: 3072 bit
q: 256 bit fejlsandsynlighed |
64 | p: 2
q:27 |
Algoritmen kræver også en tilfældig eller pseudo-tilfældig talgenerator. Denne generator er nødvendig for at generere en privat brugernøgle x , samt til at generere en hemmelig tilfældig parameter .
Standarden tilbyder forskellige måder at generere pseudo-tilfældige tal ved hjælp af blokcifre eller hash-funktioner. [5] [21]