cerca
DSS/DSA
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Return to DSS/DSA  (Edit)

Uni.CrittoDSA History

Hide minor edits - Show changes to output

Changed line 7 from:
DSS sta per '''digital signature standard''', ed è uno standard per la firma digitale. DSA invece è l'algoritmo usato da DSS per realizzare la firma digitale. Si basa sull'intrattabilità dei [[logaritmi discreti -> CrittoElGamal]] e sulla [[funzione hash SHA -> CrittoHah]].
to:
DSS sta per '''digital signature standard''', ed è uno standard per la firma digitale. DSA invece è l'algoritmo usato da DSS per realizzare la firma digitale. Si basa sull'intrattabilità dei [[logaritmi discreti -> CrittoElGamal]] e sulla [[funzione hash SHA -> CrittoHash]].
Added lines 1-50:
(:title DSS/DSA:)
%titolo%''':: DSS/DSA ::'''

[[Torna alla pagina di Crittografia -> Crittografia]]

!!Che cos'è
DSS sta per '''digital signature standard''', ed è uno standard per la firma digitale. DSA invece è l'algoritmo usato da DSS per realizzare la firma digitale. Si basa sull'intrattabilità dei [[logaritmi discreti -> CrittoElGamal]] e sulla [[funzione hash SHA -> CrittoHah]].

!!Le firme digitali
Le firme digitali devono comportarsi esattamente come le firme normali. Hanno le seguenti caratteristiche:
* devono poter essere prodotte facilmente dal legittimo firmatario
* nessuno deve essere in grado di falsificarle
* chiunque invece può verificarle

!!Generazione parametri
Devo scegliere:
* '''p''' = un numero primo
* '''q''' = un numero primo, tale che '''q | (p-1)''', ovvero '''q''' deve essere divisore di p-1
* '''α''' = il numero di ordine '''q''' in '''Z'_p_''^*^'''' (sotto vediamo che cos'è)
* '''s''' = un numero casuale, '''s''' < '''q'''
* '''&#946;''' = '''&#945;'^s^' mod p'''

Chiave privata: p, q, &#945;, s\\
Chiave pubblica: p, q, &#945;, &#946;

!!!Ordine q modulo p
Qui sopra abbiamo detto che &#945; è di ordine q modulo p. Vuol dire "semplicemente" che '''&#945;'^q^' = 1 mod p'''.

!!Firma
Per firmare il messaggio M, Alice, che possiede la chiave privata, deve eseguire i seguenti passi:
* genera un numero '''r''' casuale, con '''r''' in '''[1, q - 1]'''
* '''&#947;''' = (&#945;'^r^' mod p) mod q
* '''&#948;''' = (SHA(M) + s*&#947;) * r'^-1^' mod q
* invia il messaggio '''M''' assieme a '''&#947;''' e '''&#948;'''

Notiamo che '''r'^-1^'''' esiste, in mod q, perché q è primo e quindi il MCD(r, q) = 1.

!!Verifica
Quando Bob riceve il messaggio con &#947; e &#948;, deve eseguire i seguenti passi per verificare:
* '''e'''' = (SHA(M) * &#948;'^-1^) mod q
* '''e''''' = (&#947; * &#948;'^-1) mod q

Poi, deve verificare la seguente uguaglianza:
&#945;'^e'^' * &#946;'^e''^' = &#947;

Se l'uguaglianza è verificata, la firma è autentica. Altrimenti, la firma è falsa.

Come esercizio, potete provare che ciò funziona effettivamente:)

[[Torna alla pagina di Crittografia -> Crittografia]]