7.2.1. X9.82 Pseudo-Random Number Generation (X9.82 Pseudo-Zufallszahlengenerierung)
7.2.1. X9.82 Pseudo-Random Number Generation (X9.82 Pseudo-Zufallszahlengenerierung)
Das ANSI X9F1-Komitee befindet sich in den Endstadien der Erstellung eines Standards für die Zufallszahlengenerierung, der sowohl echte Zufallsgeneratoren als auch Pseudo-Zufallszahlengeneratoren abdeckt. Er umfasst eine Reihe von Pseudo-Zufallszahlengeneratoren, die auf Hash-Funktionen basieren, von denen einer wahrscheinlich auf HMAC SHA-Hash-Konstrukten basieren wird [RFC2104]. Die Entwurfsversion dieses Generators wird unten beschrieben, wobei eine Reihe optionaler Features weggelassen werden [X9.82].
In den folgenden Unterabschnitten wird das HMAC-Hash-Konstrukt einfach als HMAC bezeichnet, aber natürlich muss eine bestimmte Standard-SHA-Funktion in einer bestimmten Verwendung ausgewählt werden. Allgemein gesprochen, wenn die Stärke der zu generierenden Pseudo-Zufallswerte N Bits betragen soll, muss die gewählte SHA-Funktion N oder mehr Bits Ausgabe generieren, und eine Quelle von mindestens N Bits Eingabe-Entropie wird erforderlich sein. Die gleiche Hash-Funktion muss während einer Instanziierung dieses Generators verwendet werden.
7.2.1.1. Notation
In den folgenden Abschnitten wird die unten angegebene Notation verwendet:
hash_lengthist die Ausgabegröße der verwendeten zugrunde liegenden Hash-Funktion.input_entropyist die Eingabe-Bitzeichenkette, die dem Generator Entropie bereitstellt.Kist eine Bitzeichenkette der Größe hash_length, die Teil des Zustands des Generators ist und mindestens einmal jedes Mal aktualisiert wird, wenn zufällige Bits generiert werden.Vist eine Bitzeichenkette der Größe hash_length und ist Teil des Zustands des Generators. Sie wird jedes Mal aktualisiert, wenn hash_length Bits Ausgabe generiert werden.- "|" repräsentiert Verkettung.
7.2.1.2. Initialisierung des Generators
Setzen Sie V auf alle Null-Bytes, außer dass das niederwertige Bit jedes Bytes auf eins gesetzt wird.
Setzen Sie K auf alle Null-Bytes, dann setzen Sie:
K = HMAC ( K, V | 0x00 | input_entropy )
V = HMAC ( K, V )
K = HMAC ( K, V | 0x01 | input_entropy )
V = HMAC ( K, V )
Hinweis: Alle SHA-Algorithmen produzieren eine ganzzahlige Anzahl von Bytes, sodass die Längen von K und V ganzzahlige Anzahlen von Bytes sein werden.
7.2.1.3. Generierung zufälliger Bits
Wenn Ausgabe angefordert wird, setzen Sie einfach:
V = HMAC ( K, V )
und verwenden Sie die führenden Bits von V. Wenn mehr Bits benötigt werden als die Länge von V, setzen Sie "temp" auf eine Null-Bitzeichenkette und führen Sie dann wiederholt aus:
V = HMAC ( K, V )
temp = temp | V
und stoppen Sie, sobald temp gleich oder länger ist als die Anzahl der angeforderten Zufallsbits. Verwenden Sie die angeforderte Anzahl führender Bits von temp. Die Definition des Algorithmus verbietet das Anfordern von mehr als 2^35 Bits.
Nach dem Extrahieren und Speichern der Pseudo-Zufalls-Ausgabebits wie oben beschrieben, müssen Sie vor der Rückkehr auch zwei weitere HMACs wie folgt durchführen:
K = HMAC ( K, V | 0x00 )
V = HMAC ( K, V )