Digital Signature Algorithm
Algoritmul pentru semnături digitale (engleză: "Digital Signature Algorithm"), cunoscut și sub acronimul DSA, este un standard al guvernului Statelor Unite ale Americii pentru semnăturile digitale. A fost propus de National Institute of Standards and Technology (NIST) în august 1991 pentru utilizare în cadrul standardului Digital Signature Standard (DSS), adoptat în 1993. O revizie minoră a fost emisă în 1996 sub numele de FIPS 186-1 [1], iar standardul a fost extins în 2000 sub numele FIPS 186-2 [2].
Algoritmul este format din trei proceduri: generarea cheii, semnarea, verificarea semnăturii.
Generarea cheii
- Se alege q, astfel încât el este prim și are o dimensiune de 160 de biți (2159 < q < 2160).
- Se alege p, astfel încât el este prim și p = 2qz+1 (2512 < p < 21024).
- Ultimele reglementări specifică faptul că p ar trebui să fie pe fix 1024 de biți, ceea ce înseamnă că z trebuie să fie pe 864 de biți.
- Se alege , unde h este o rădăcină primitivă în .
- , unde .
- Se alege arbitrar .
- Se calculează .
- Cheia publică este .
- Cheia privată este .
Semnarea
- Se alege arbitrar .
- Se calculează x=SHA-1(mesaj), cu x pe 160 de biți; SHA-1 este funcția de hash, care realizează rezumatul mesajului (returnează un număr în funcție de conținutul mesajului).
- Se calculează .
- Se calculează .
- Dacă vreuna dintre cele două valori ( sau ) este egală cu zero, atunci se reia calculul cu generarea unui alt k.
- Cheia de semnare este .
Verificarea
- Se calculează .
- Se calculează .
- Se calculează .
- Se calculează .
- Semnătura este validă dacă și numai dacă .
Algoritmul Semnăturii Digitale este similar Schemei de semnătură ElGamal.
Corectitudine
Algoritmul este corect în sensul că destinatarul va accepta întotdeauna doar semnături originale. Acest lucru poate fi demonstrat după cum urmează:
Din rezultă din Teorema lui Fermat. Deoarece și q este prim, are ordinul q.
Expeditorul calculează
Deci
Deoarece are ordinul q
În sfârșit, corectitudinea algoritmului vine din
Securitate
Acest algoritm este considerat imposibil de spart, datorită siguranței mari asigurate de câteva puncte, cum ar fi generarea aleatoare a lui p, q, a și k. Pentru a se afla k, de exemplu, ar trebui rezolvată o problemă de tipul logaritmilor discreți, care este o problemă "dificilă", în sensul că ajungerea la o soluție poate dura câteva luni.