DSA

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 12 september 2016; kontroller kräver 76 redigeringar .
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).  

Beskrivning av algoritmen

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 .

Alternativ för digital signaturschema

För att bygga ett digitalt signatursystem måste du utföra följande steg:

  1. Val av kryptografisk hashfunktion H(x).
  2. Att välja ett primtal q vars dimension N i bitar är samma som dimensionen i bitar av hash-värdena H(x).
  3. Att välja ett primtal p så att (p-1) är delbart med q . Bitlängden p betecknas med L .
  4. Att välja ett tal g ( ) så att dess multiplikationsordning modulo p är lika med q . För att beräkna det kan du använda formeln , där h  är ett godtyckligt tal så att . I de flesta fall uppfyller värdet h = 2 detta krav. [5]

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 :

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

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]

Offentliga och privata nycklar

  1. Den hemliga nyckeln är ett nummer
  2. Den publika nyckeln beräknas med hjälp av formeln

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]

Meddelandesignatur

Meddelandesignaturen utförs enligt följande algoritm [5] :

  1. Att välja ett slumpmässigt tal
  2. beräkning
  3. Att välja ett annat k if
  4. beräkning
  5. Att välja ett annat k if
  6. Signaturen är ett par med total längd

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

Signaturverifiering utförs enligt algoritmen [5] :

1 Beräkning 2 Beräkning 3 Beräkning 4 Beräkning 5 Signaturen är korrekt om

När det är markerat är beräkningskomplexa operationer två exponentieringar , en hashberäkning och att hitta det inversa elementet .

Schema korrekthet

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]

Arbetsexempel

Låt oss ge ett exempel på hur algoritmen fungerar för små tal. Låt hashvärdet av vårt budskap .

Parametergenerering

  1. hashlängd , så du kan välja
  2. välja eftersom
  3. välja

Skapa nycklar

  1. välj som hemlig nyckel
  2. sedan den publika nyckeln

Meddelandesignatur

  1. välja
  2. sedan
  3. , gå vidare
  4. , där det beaktas att
  5. , gå vidare
  6. signaturen är ett par siffror

Signaturverifiering

  1. mottagen, vilket betyder att signaturen är korrekt.

Analoger

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: RivestShamir , Adleman ), bygger på svårigheten att faktorisera stora siffror.

Kryptografisk styrka

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.

Förutsägbarhet för en slumpmässig parameter

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 :

Existentiell förfalskning

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]

Nyckelåterställning

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]

Signaturförfalskning

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]

Verifieringssystem för algoritmimplementering

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:

  1. Generering av domänparametrar
  2. Kontrollerar domäninställningar
  3. Generering av ett offentligt-privat nyckelpar
  4. Skapa en signatur
  5. Signaturverifiering

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]

Generering av primtal

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

Generering av slumptal

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]

Anteckningar

  1. 123 patent 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. Hitta kollisioner i den fullständiga SHA-1 .
  9. Fristartskollision för full SHA-1 .
  10. NIST specialpublikation 800-57 .
  11. Elgamal, 1985 .
  12. C. P. Schnorr. Effektiv identifiering och signaturer för smarta kort  //  Framsteg inom kryptologi - 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 . Arkiverad från originalet den 12 april 2022.
  13. GOST R 34.11-2012
  14. 1 2 Den elliptiska kurvan digital signaturalgoritm (ECDSA) .
  15. Osäkerheten i den digitala signaturalgoritmen med delvis kända nonces .
  16. ECDSA - Tillämpnings- och implementeringsfel .
  17. Elliptisk kurvkryptering i praktiken .
  18. Säkerhetsargument för digitala signaturer och blinda signaturer .
  19. Valideringssystemet för digital signaturalgoritm .
  20. Genererar starka primtal .
  21. Generering av slumpmässiga nummer .

Litteratur

Standarder och patent

Artiklar