7.2.1. X9.82 Pseudo-Random Number Generation (Generazione di Numeri Pseudo-casuali X9.82)
7.2.1. X9.82 Pseudo-Random Number Generation (Generazione di Numeri Pseudo-casuali X9.82)
Il comitato ANSI X9F1 è nelle fasi finali di creazione di uno standard per la generazione di numeri casuali che copre sia generatori di casualità vera che generatori di numeri pseudo-casuali. Include un numero di generatori di numeri pseudo-casuali basati su funzioni hash, uno dei quali sarà probabilmente basato su costrutti hash HMAC SHA [RFC2104]. La versione bozza di questo generatore è descritta sotto, omettendo un numero di caratteristiche opzionali [X9.82].
Nelle sottosezioni sotto, il costrutto hash HMAC è semplicemente chiamato HMAC ma, naturalmente, DEVE essere selezionata una particolare funzione SHA standard in un uso particolare. In generale, se la robustezza dei valori pseudo-casuali da generare DEVE essere di N bit, la funzione SHA scelta DEVE generare N o più bit di output, e sarà richiesta una sorgente di almeno N bit di entropia di input. La stessa funzione hash DEVE essere usata in tutta un'istanziazione di questo generatore.
7.2.1.1. Notation (Notazione)
Nelle sezioni seguenti, viene usata la notazione data sotto:
-
hash_lengthè la dimensione di output della funzione hash sottostante in uso. -
input_entropyè la stringa di bit di input che fornisce entropia al generatore. -
Kè una stringa di bit di dimensione hash_length che fa parte dello stato del generatore ed è aggiornata almeno una volta ogni volta che vengono generati bit casuali. -
Vè una stringa di bit di dimensione hash_length e fa parte dello stato del generatore. Viene aggiornata ogni volta che vengono generati bit hash_length di output. -
"|"rappresenta concatenazione.
7.2.1.2. Initializing the Generator (Inizializzazione del Generatore)
Impostare V a tutti byte zero, eccetto il bit di ordine più basso di ogni byte che è impostato a uno.
Impostare K a tutti byte zero, poi impostare:
K = HMAC ( K, V | 0x00 | input_entropy )
V = HMAC ( K, V )
K = HMAC ( K, V | 0x01 | input_entropy )
V = HMAC ( K, V )
Nota: Tutti gli algoritmi SHA producono un numero integrale di byte, quindi le lunghezze di K e V saranno numeri integrali di byte.
7.2.1.3. Generating Random Bits (Generazione di Bit Casuali)
Quando viene richiesto output, semplicemente impostare:
V = HMAC ( K, V )
e usare i bit iniziali da V. Se sono necessari più bit della lunghezza di V, impostare "temp" a una stringa di bit nulla e poi eseguire ripetutamente:
V = HMAC ( K, V )
temp = temp | V
fermandosi non appena temp è uguale o più lungo del numero di bit casuali richiesti. Usare il numero richiesto di bit iniziali da temp. La definizione dell'algoritmo proibisce di richiedere più di 2^35 bit.
Dopo aver estratto e salvato i bit di output pseudo-casuali come descritto sopra, prima di ritornare si DEVONO anche eseguire due HMAC aggiuntivi come segue:
K = HMAC ( K, V | 0x00 )
V = HMAC ( K, V )