3.3. Alternate Description of the Generation of k (Descrizione Alternativa della Generazione di k)
3.3. Alternate Description of the Generation of k (Descrizione Alternativa della Generazione di k)
Il processo descritto nella sezione precedente è in realtà derivato dal generatore di numeri pseudocasuali "HMAC_DRBG", descritto in [SP800-90A] e nell'Appendice D di [X9.62]. Utilizzando la terminologia di [SP800-90A], la generazione di k può essere descritta come segue:
a. Istanziare HMAC_DRBG utilizzando HMAC, parametrizzato con la stessa funzione hash H utilizzata per elaborare il messaggio da firmare. I parametri di istanziazione sono:
requested_instantiation_security_strength
Impostare questo parametro su qualsiasi valore che l'implementazione HMAC_DRBG accetterà quando H è utilizzata come funzione hash di base.
prediction_resistance_flag
Impostare questo parametro su "false".
personalization_string
Impostare questo parametro su "Null" (la sequenza di bit vuota).
entropy_input
Utilizzare int2octets(x) come stringa di entropia.
nonce
Utilizzare bits2octets(H(m)) come nonce.
Si noti che gli ultimi due parametri non sono di per sé parametri della funzione di istanziazione HMAC_DRBG; piuttosto, questi valori vengono richiesti dalla funzione interna Get_entropy_input durante l'istanziazione. Per (EC)DSA deterministico, vogliamo che HMAC_DRBG funzioni con la stringa di entropia e il nonce che specifichiamo, senza accedere a una fonte di entropia reale.
b. Generare un valore candidato per k richiedendo qlen bit da HMAC_DRBG e convertendo i bit risultanti in un intero utilizzando la trasformazione bits2int. Ripetere questo passaggio fino a ottenere un valore che è diverso da zero, minore di q e appropriato per (EC)DSA (vedere Sezione 3.4).
Si noti che istanziamo una nuova istanza HMAC_DRBG per ogni processo di generazione della firma. Non c'è "stringa di personalizzazione" né "input aggiuntivo" durante la generazione di bit. La funzione di reseeding di HMAC_DRBG non viene mai chiamata, né esternamente né come conseguenza dell'elaborazione interna di HMAC_DRBG.
Come mostrato sopra, utilizziamo la codifica della chiave privata come "stringa di entropia" e il messaggio hash (troncato ed esteso da bits2octets) come "nonce". In HMAC_DRBG, la stringa di entropia e il nonce sono semplicemente concatenati nel seed iniziale; quindi, la divisione tra "entropia" e "nonce" è piuttosto arbitraria. L'uso di qlen bit per ciascuno dovrebbe essere compatibile con la maggior parte dei requisiti di input delle implementazioni HMAC_DRBG.