2.4. Signature Generation (Generazione della Firma)
2.4. Signature Generation (Generazione della Firma)
La generazione della firma utilizza una funzione hash crittografica H e un messaggio di input m. Il messaggio viene prima elaborato da H, producendo il valore H(m), che è una sequenza di bit di lunghezza hlen. Normalmente, H viene scelta in modo tale che la sua lunghezza di output hlen sia approssimativamente uguale a qlen, poiché la sicurezza complessiva dello schema di firma dipenderà dal più piccolo tra hlen e qlen; tuttavia, gli standard pertinenti supportano tutte le combinazioni di hlen e qlen.
Vengono quindi applicati i seguenti passaggi:
-
H(m) viene trasformato in un intero modulo q utilizzando la trasformazione bits2int e una riduzione modulare aggiuntiva:
h = bits2int(H(m)) mod qCome è stato notato nella descrizione di bits2octets, la riduzione modulare aggiuntiva non è più di una sottrazione condizionale.
-
Viene generato un valore casuale modulo q, denominato k. Quel valore NON DOVRÀ essere 0; quindi, si trova nell'intervallo [1, q-1]. La maggior parte del resto di questo documento ruoterà intorno al processo utilizzato per generare k. In DSA o ECDSA standard, k DOVREBBE essere selezionato attraverso una selezione casuale che sceglie un valore tra i q-1 valori possibili con probabilità uniforme.
-
Un valore r (modulo q) viene calcolato da k e dai parametri della chiave:
-
Per DSA:
r = g^k mod p mod q(L'esponenziazione viene eseguita modulo p, producendo un numero tra 0 e p-1, che viene quindi ulteriormente ridotto modulo q.)
-
Per ECDSA: viene calcolato il punto kG; la sua coordinata X (un membro del campo su cui E è definito) viene convertita in un intero, che viene ridotto modulo q, producendo r.
Se r risulta essere zero, DOVREBBE essere selezionato un nuovo k e r calcolato nuovamente (questo è un evento assolutamente improbabile).
-
-
Il valore s (modulo q) viene calcolato:
s = (h+x*r)/k mod qLa coppia (r, s) è la firma. Come una firma debba essere codificata non è coperto dagli standard DSA ed ECDSA stessi; un modo comune è utilizzare una struttura ASN.1 codificata in DER (una SEQUENCE di due INTEGER, per r e s, in quell'ordine).