Passa al contenuto principale

3.6. Variants (Varianti)

3.6. Variants (Varianti)

Molte parti della specifica di (EC)DSA deterministico sono piuttosto arbitrarie, ma la scelta è stata fatta per ragioni di interoperabilità. Questa sezione discute alcune possibili varianti.

La funzione hash H utilizzata viene impiegata nel processo di generazione della firma per due scopi diversi: in primo luogo per elaborare il messaggio di input, e in secondo luogo come base per HMAC (che è esso stesso anche una funzione hash). In questo documento, specifichiamo l'uso della stessa funzione hash per entrambi gli scopi. Tuttavia, questo non è obbligatorio; è possibile utilizzare funzioni diverse per questi due ruoli. Lo svantaggio principale è che i vettori di test non possono coprire tutte le combinazioni; l'uso di una singola funzione hash semplifica i test di interoperabilità.

Le definizioni di int2octets e bits2octets portano a un output di rlen bit (cioè qlen arrotondato al multiplo successivo di 8), e producono effettivamente al massimo qlen bit di entropia quando utilizzate. Sarebbe possibile definire le stesse funzioni in modo che producano esattamente qlen bit; tuttavia, ciò renderebbe l'implementazione leggermente più complessa, poiché molti linguaggi di programmazione e framework tendono a lavorare con sequenze di ottetti piuttosto che sequenze di bit. D'altra parte, l'arrotondamento di qlen aggiunge al massimo 7 bit, il che è trascurabile nel contesto di un seed PRNG.

In questa specifica, stipuliamo un processo che cicla in casi speciali in cui k (ottenuto da T tramite bits2int) non è nell'intervallo appropriato, o porterebbe a generare un valore zero per r. Tuttavia, entrambi i casi non si verificano praticamente mai. L'ultimo caso (un r calcolato di zero) può verificarsi solo a causa di un bug software (ad esempio, i parametri della curva ellittica vengono corrotti durante l'esecuzione del programma). Le implementazioni possono quindi scegliere di trattare semplicemente tali casi come errori irrecuperabili e semplicemente interrompere il calcolo della firma, piuttosto che ciclare.