3.3. Alternate Description of the Generation of k (Alternative Beschreibung der Erzeugung von k)
3.3. Alternate Description of the Generation of k (Alternative Beschreibung der Erzeugung von k)
Der im vorherigen Abschnitt beschriebene Prozess ist tatsächlich vom "HMAC_DRBG"-Pseudozufallszahlengenerator abgeleitet, der in [SP800-90A] und Anhang D von [X9.62] beschrieben ist. Unter Verwendung der Terminologie aus [SP800-90A] kann die Erzeugung von k wie folgt beschrieben werden:
a. Instantiiere HMAC_DRBG unter Verwendung von HMAC, parametrisiert mit derselben Hash-Funktion H wie derjenigen, die zur Verarbeitung der zu signierenden Nachricht verwendet wird. Instantiierungsparameter sind:
requested_instantiation_security_strength
Setze diesen Parameter auf einen beliebigen Wert, den die HMAC_DRBG-Implementierung akzeptiert, wenn H als Basis-Hash-Funktion verwendet wird.
prediction_resistance_flag
Setze diesen Parameter auf "false".
personalization_string
Setze diesen Parameter auf "Null" (die leere Bit-Sequenz).
entropy_input
Verwende int2octets(x) als Entropie-String.
nonce
Verwende bits2octets(H(m)) als Nonce.
Beachte, dass die letzten beiden Parameter keine Parameter für die HMAC_DRBG-Instantiierungsfunktion an sich sind. Stattdessen werden diese Werte von der internen Get_entropy_input-Funktion während der Instantiierung angefordert. Für deterministisches (EC)DSA möchten wir, dass HMAC_DRBG mit dem Entropie-String und der Nonce läuft, die wir spezifizieren, ohne auf eine tatsächliche Entropiequelle zuzugreifen.
b. Erzeuge einen Kandidatenwert für k, indem qlen Bits von HMAC_DRBG angefordert werden und die resultierenden Bits mit der bits2int-Transformation in eine Ganzzahl umgewandelt werden. Wiederhole diesen Schritt, bis ein Wert erhalten wird, der nicht null ist, kleiner als q ist und für (EC)DSA geeignet ist (siehe Abschnitt 3.4).
Beachte, dass wir für jeden Signaturerzeugungsprozess eine neue HMAC_DRBG-Instanz instantiieren. Es gibt keinen "personalization string" und keine "additional input" beim Erzeugen von Bits. Die Reseed-Funktion von HMAC_DRBG wird niemals aufgerufen, weder extern noch als Folge der internen HMAC_DRBG-Verarbeitung.
Wie oben gezeigt, verwenden wir die Kodierung des privaten Schlüssels als "entropy string" und die gehashte Nachricht (gekürzt und erweitert durch bits2octets) als "nonce". In HMAC_DRBG werden der Entropie-String und die Nonce einfach in den initialen Seed verkettet, daher ist die Aufteilung zwischen "Entropie" und "Nonce" ziemlich willkürlich. Die Verwendung von qlen Bits für jeden sollte mit den meisten Eingabeanforderungen der HMAC_DRBG-Implementierung kompatibel sein.