DSA (acrònim de Digital Signature Algorithm, en català Algorisme de Signatura digital) és un estàndard del Govern Federal dels Estats Units d'Amèrica o FIPS per a signatures digitals. Va ser un Algorisme proposat per l'Institut Nacional de Normes i Tecnologia dels Estats Units a l'agost de 1991 per a l'ús en el seu Digital Signature Standard (DSS), en català Estàndard de Signatura Digital, especificat en el FIPS 186 el 1993.[1] Hi ha hagut quatre revisions des del seu llançament: FIPS 186-1 el 1996,[2] FIPS 186-2 el 2000,[3] FIPS 186-3 el 2009,[4] i FIPS 186-4 el 2013.[5]
Aquest algorisme com el seu nom ho indica, serveix per signar i no per xifrar informació. Un desavantatge d'aquest algorisme és que requereix molt més temps de còmput que RSA.
La generació de claus té dues fases La primera fase és una opció de paràmetres de l'algorisme que poden ser compartits entre els diferents usuaris del sistema, mentre que la segona fase calcula claus públiques i privades per a un sol usuari.
- Primera fase, generació de paràmetres
- Triar un nombre primer p de L bits, on 512 ≤ L ≤ 1024 i L és divisible per 64.[5][6]
- Triar un nombre primer q de 160 bits, tal que p−1 = qz, on z és algun nombre natural.
- Triar h, on 1 < h < p − 1 tal que g = hz(mod p) > 1.
- Segona fase, generar les claus pels usuaris
- Triar x de forma aleatòria, on 1 < x < q-1.
- Calcular y = gx(mod p).
Les dades públiques són p, q, g i y. x és la clau privada.
- Triar un nombre aleatori k, on 1 < k < q.
- Calcular r = (gk mod p)mod q.
- Calcular s = k-1(H(m)+r*x) mod q, on H(m) és la funció hash SHA-1 aplicada al missatge m.
- La signatura és el parell (r, s).
Si r o s és zero, es torna a repetir el procediment.
- Calcular w = (s)-1(mod q).
- Calcular u1 = H(m)*w(mod q).
- Calcular u2 = r*w(mod q).
- Calcular v = [gu1*yu2mod p] mod q.
- La signatura és vàlida si v = r.
L'esquema de la signatura està correcte en el sentit que el verificador acceptarà sempre signatures genuïnes. Això pot ser demostrat com segueix:
De segueix
pel Petit teorema de Fermat.
Ja que g > 1 i q és primer, segueix que g té ordre q.
El signant calcula:
Llavors:
Ja que g té ordre q s'ha de
Finalment, la correctitud de DSA sorgeix de