DSA, Digital Signatur Algorithm | |
---|---|
Skapare | NIST |
Skapad | 1991 |
publiceras | 1998 |
Nyckelstorlek | stängd: 160-256 bitar, öppen: 1024-3072 bitar |
Signaturstorlek | två nummer på 160-256 bitar |
DSA ( Digital Signature Algorithm - digital signature algorithm ) - en kryptografisk algoritm som använder en privat nyckel (från ett nyckelpar: <public; private>) för att skapa en elektronisk signatur , men inte för kryptering (till skillnad från RSA och ElGamal-schemat ) . Signaturen skapas i hemlighet (privat nyckel) men kan verifieras offentligt (offentlig nyckel). Det betyder att endast ett ämne kan skapa en meddelandesignatur, men vem som helst kan verifiera att den är korrekt. Algoritmen är baserad på beräkningskomplexiteten för att ta logaritmer i ändliga fält .
Algoritmen föreslogs av National Institute of Standards and Technology ( USA ) i augusti 1991 och är patenterad [1] (patentförfattare - David W. Kravitz), NIST gjorde detta patent tillgängligt för användning utan royalties . DSA är en del av DSS ( Digital Signature Standard), först publicerad den 15 december 1998 (dokument FIPS-186 [2] ( Federal Information Processing Standards ) . Standarden har uppdaterats flera gånger [3] [4] , den senaste versionen är FIPS-186-4 [5] . (Juli 2013).
DSA inkluderar två algoritmer (S, V): för att skapa en meddelandesignatur (S) och för att verifiera den (V).
Båda algoritmerna beräknar först meddelandets hash med hjälp av en kryptografisk hashfunktion . Algoritm S använder hash och hemlig nyckel för att skapa signaturen, algoritm V använder meddelandehash, signatur och publik nyckel för att verifiera signaturen.
Det är värt att betona att det inte är meddelandet (av godtycklig längd) som faktiskt är signerat, utan dess hash (160 - 256 bitar), därför är kollisioner oundvikliga och en signatur är generellt sett giltig för flera meddelanden med samma hash . Därför är valet av en tillräckligt "bra" hashfunktion mycket viktigt för hela systemet som helhet. Den första versionen av standarden använde hashfunktionen SHA-1 [6] [2] ( Secure Hash Algorithm - säker hashalgoritm) , i den senaste versionen kan du även använda valfri algoritm i SHA-2- familjen [6] [5 ] . I augusti 2015 publicerades FIPS-202 [7] som beskriver den nya SHA-3- hashfunktionen . Men idag ingår det inte i DSS-standarden [5] .
Systemet kräver en korrespondensbas mellan författarens verkliga detaljer (det kan vara antingen en individ eller en organisation) och offentliga nycklar , såväl som alla nödvändiga parametrar för det digitala signaturschemat (hashfunktion, primtal ). Till exempel kan en certifikatutfärdare fungera som en sådan bas .
För att bygga ett digitalt signatursystem måste du utföra följande steg:
Som nämnts ovan är den primära parametern för det digitala signaturschemat den kryptografiska hashfunktionen som används för att omvandla meddelandetexten till ett tal för vilket signaturen beräknas. En viktig egenskap hos denna funktion är bitlängden för utdatasekvensen, betecknad N nedan . I den första versionen av DSS -standarden rekommenderas SHA-1- funktionen [2] och därför är bitlängden på det signerade numret 160 bitar. Nu är SHA-1 inte längre tillräckligt säker [8] [9] . Standarden specificerar följande möjliga värdepar för talen L och N :
Hash-funktioner i SHA-2- familjen rekommenderas under denna standard . Amerikanska statliga organisationer måste använda ett av de tre första alternativen, CA:er måste använda ett par som är lika med eller större än det par som används av abonnenter [5] . Systemdesignern kan välja vilken giltig hashfunktion som helst. Därför kommer ytterligare uppmärksamhet inte att fokuseras på användningen av en viss hashfunktion.
Styrkan hos ett DSA-baserat kryptosystem överstiger inte styrkan hos hashfunktionen som används och styrkan hos paret (L,N), vars styrka inte är större än styrkan för vart och ett av talen separat. Det är också viktigt att överväga hur länge systemet måste vara säkert. För närvarande rekommenderas en längd på 2048 (3072) bitar för system som måste vara beständiga fram till 2010 ( 2030 ). [5] [10]
De publika parametrarna är siffror (p, q, g, y) . Det finns bara en privat parameter - talet x . I det här fallet kan siffrorna (p, q, g) vara gemensamma för en grupp användare, och siffrorna x och y är privata respektive publika nycklar för en viss användare. Vid signering av ett meddelande används hemliga nummer x och k och numret k måste väljas slumpmässigt (i praktiken pseudoslumpmässigt) vid beräkning av signaturen för varje nästa meddelande.
Eftersom (p, q, g) kan användas för flera användare, delas i praktiken användare ofta in enligt vissa kriterier i grupper med samma (p, q, g) . Därför kallas dessa parametrar för domänparametrar. [5]
Meddelandesignaturen utförs enligt följande algoritm [5] :
Beräkningskomplexa operationer är exponentieringsmodulo (beräkning ), för vilken det finns snabba algoritmer , hashberäkning , där komplexiteten beror på den valda hashalgoritmen och storleken på inmatningsmeddelandet, och att hitta det inversa elementet med hjälp av till exempel den utökade euklidiska algoritm eller Fermats lilla sats i form .
Signaturverifiering utförs enligt algoritmen [5] :
1 Beräkning 2 Beräkning 3 Beräkning 4 Beräkning 5 Signaturen är korrekt omNär det är markerat är beräkningskomplexa operationer två exponentieringar , en hashberäkning och att hitta det inversa elementet .
Detta digitala signaturschema är korrekt i den mån att en person som vill verifiera signaturens äkthet alltid kommer att få ett positivt resultat i händelse av äkthet. Låt oss visa det:
Först, om , sedan av Fermats lilla sats följer det att . Eftersom g >1 och q är primtal måste g ha multiplikationsordningen q modulo p .
För att signera ett meddelande, räknar det ut
Därför
Eftersom g är av ordningen q får vi
Slutligen följer riktigheten av DSA-schemat av
[5]Låt oss ge ett exempel på hur algoritmen fungerar för små tal. Låt hashvärdet av vårt budskap .
DSA-algoritmen är baserad på svårigheten att beräkna diskreta logaritmer och är en modifiering av det klassiska ElGamal- schemat [11] , där meddelandehashning läggs till, och alla logaritmer beräknas av , vilket gör det möjligt att göra signaturen kortare jämfört med analoger [12] . Baserat på ElGamal-schemat byggdes också andra algoritmer, till exempel den ryska GOST 34.10-94 , som nu anses vara föråldrad. Den ersattes av standarden GOST R 34.10-2012 [13] , som använder en grupp av punkter i en elliptisk kurva .
En sådan modifiering, dvs. övergången från den multiplikativa gruppen modulo ett primtal till gruppen av elliptiska kurvpunkter finns också för DSA - ECDSA [14] ( Elliptic Curve Digital Signature Algorithm - digital signaturalgoritm på elliptiska kurvor) . Den används till exempel i bitcoin -krypteringsvalutan för att bekräfta transaktioner. Denna översättning låter dig minska storleken på nycklarna utan att offra säkerheten - i bitcoin-systemet är storleken på den privata nyckeln 256 bitar, och motsvarande publika nyckel är 512 bitar.
En annan vanlig publik nyckelalgoritm (används för både kryptering och digital signatur), RSA (uppkallad efter författarna: Rivest , Shamir , Adleman ), bygger på svårigheten att faktorisera stora siffror.
Varje attack på algoritmen kan beskrivas på följande sätt: en angripare tar emot alla publika signaturparametrar och en viss uppsättning par (meddelande, signatur) och försöker, med denna uppsättning, skapa en giltig signatur för ett nytt meddelande som inte representeras i uppsättningen .
Dessa attacker kan villkorligt delas in i två grupper - för det första kan en angripare försöka återställa den hemliga nyckeln , och sedan får han omedelbart möjlighet att signera vilket meddelande som helst, och för det andra kan han försöka skapa en giltig signatur för ett nytt meddelande utan att återställer den hemliga nyckeln direkt.
Den enhetliga fördelningen av den slumpmässiga parametern är mycket viktig för systemets säkerhet. Om flera på varandra följande parameterbitar är kända för en serie signaturer kan den hemliga nyckeln återställas med hög sannolikhet. [femton]
Att upprepa parametern för två meddelanden leder till en enkel hackning av systemet. Detta kan hända när du använder en dålig pseudo-slumptalsgenerator . Denna sårbarhet i PlayStation 3- systemet gjorde att alla program kunde signeras på uppdrag av Sony . I vissa implementeringar av bitcoin-systemet för Android kan en angripare få tillgång till plånboken. [16] [17] Båda exemplen använde ECDSA [14] -systemet .
Om samma parameter användes för två meddelanden kommer deras signaturer att ha samma men olika , låt oss kalla dem .
Från uttrycket för kan vi uttrycka summan :
.
Och likställ gemensamt för olika meddelanden:
Härifrån är det lätt att uttrycka den hemliga nyckeln :
Vissa digitala signaturalgoritmer kan attackeras av en befintlig förfalskning (Existentiell förfalskning) . Det ligger i det faktum att för en signatur (antingen slumpmässig överhuvudtaget eller skapad enligt någon regel) är det möjligt att skapa ett korrekt meddelande (vilket dock vanligtvis inte är vettigt) med enbart offentliga parametrar.
För DSA-schemat är signaturen i alla fall giltig för ett meddelande med en hash .
Detta är en av anledningarna till att hasha inmatningsmeddelandet. Om hashfunktionen väljs korrekt, skyddas DSA-algoritmen från denna attack, eftersom inversionen av den kryptografiska hashfunktionen (dvs. för ett givet fynd så att ) är beräkningsmässigt svårt. [arton]
signaturens korrekthetsvillkor kan skrivas om i en annan form:
denna ekvation är ekvivalent (eftersom multiplikationsordningen för g modulo p är lika med q)
så vi kan anta att för att återställa nyckeln måste angriparen lösa ett system av ekvationer av formen
men i detta system är okänt och det är allt , vilket betyder att antalet okända är en mer än ekvationerna, och för alla finns det de som uppfyller systemet. Eftersom q är ett stort primtal, kommer ett exponentiellt antal par (meddelande, signatur) att krävas för återställning. [ett]
Du kan försöka förfalska en signatur utan att känna till den hemliga nyckeln, det vill säga försöka lösa ekvationen
med hänsyn till och . För varje fix är ekvationen ekvivalent med att beräkna den diskreta logaritmen. [ett]
Licensvillkoren tillåter dig att implementera algoritmen i mjukvara och hårdvara. NIST skapade DSAVS [19] ( Eng. The Digital Signature Algorithm Validation System - ett system för att kontrollera den digitala signaturalgoritmen ). DSAVS består av flera efterlevnadstestmoduler som testar varje komponent i systemet oberoende av de andra. Testade implementeringskomponenter:
För att testa implementeringen måste utvecklaren skicka in en ansökan om att testa dess implementering till CMT-laboratoriet ( Cryptographic Module Testing Laboratory ) . [5]
DSA-algoritmen kräver två primtal ( och ), så en primtals- eller pseudoprimgenerator behövs .
Shaw-Taylor- algoritmen [20] används för att generera primtal .
Pseudoprimer genereras med hjälp av en hashfunktion och Miller-Rabins probabilistiska test används för att testa primalitet . Ett enda Luke -primalitetstest kan läggas till det . [5]
Det antal iterationer som krävs beror på längden på de använda siffrorna och på verifieringsalgoritmen [5] :
alternativ | endast M-R test | M-R test + Luke test |
---|---|---|
p: 1024 bitar
q: 160 bitar felsannolikhet |
40 | p: 3
q:19 |
p: 2048 bitar
q: 224 bitar felsannolikhet |
56 | p: 3
q:24 |
p: 2048 bitar
q: 256 bitar felsannolikhet |
56 | p: 3
q:27 |
p: 3072 bitar
q: 256 bitar felsannolikhet |
64 | p: 2
q:27 |
Algoritmen kräver också en slump- eller pseudoslumptalsgenerator . Denna generator behövs för att generera en privat användarnyckel x , såväl som för att generera en hemlig slumpmässig parameter .
Standarden erbjuder olika sätt att generera pseudoslumptal med hjälp av blockchiffer eller hashfunktioner. [5] [21]
Public key kryptosystem | |||||||||
---|---|---|---|---|---|---|---|---|---|
Algoritmer |
| ||||||||
Teori |
| ||||||||
Standarder |
| ||||||||
Ämnen |
|