3.6. Variants (Varianten)
3.6. Variants (Varianten)
Viele Teile der Spezifikation von deterministischem (EC)DSA sind ziemlich willkürlich, aber die Wahl wurde aus Interoperabilitätsgründen getroffen. Dieser Abschnitt diskutiert einige mögliche Varianten.
Die verwendete Hash-Funktion H wird im Signaturerzeugungsprozess für zwei verschiedene Zwecke verwendet: erstens zur Verarbeitung der Eingabenachricht und zweitens als Basis für HMAC (das selbst auch eine Hash-Funktion ist). In diesem Dokument spezifizieren wir die Verwendung derselben Hash-Funktion für beide Zwecke. Dies ist jedoch nicht zwingend erforderlich; es ist möglich, unterschiedliche Funktionen für diese beiden Rollen zu verwenden. Der Hauptnachteil besteht darin, dass Testvektoren nicht alle Kombinationen abdecken können; die Verwendung einer einzigen Hash-Funktion vereinfacht Interoperabilitätstests.
Die Definitionen von int2octets und bits2octets führen zu einer Ausgabe von rlen Bits (d.h. qlen aufgerundet auf das nächste Vielfache von 8), und sie erzeugen bei ihrer Verwendung tatsächlich höchstens qlen Bits Entropie. Es wäre möglich, dieselben Funktionen so zu definieren, dass sie genau qlen Bits ausgeben; dies würde jedoch die Implementierung etwas komplizierter machen, da viele Programmiersprachen und Frameworks dazu neigen, mit Sequenzen von Oktetten statt mit Bit-Sequenzen zu arbeiten. Andererseits erhöht das Aufrunden von qlen höchstens 7 Bits, was im Kontext eines PRNG-Seeds vernachlässigbar ist.
In dieser Spezifikation geben wir einen Prozess an, der in Sonderfällen schleift, in denen k (erhalten aus T durch bits2int) nicht im geeigneten Bereich liegt oder zur Erzeugung eines Null-Werts für r führen würde. Beide Fälle treten jedoch praktisch nie auf. Der letztere Fall (ein berechnetes r von Null) kann nur aufgrund eines Software-Fehlers auftreten (z.B. Elliptic-Curve-Parameter werden während der Programmlaufzeit beschädigt). Implementierungen können daher wählen, solche Fälle einfach als nicht behebbare Fehler zu behandeln und die Signaturberechnung einfach abzubrechen, anstatt zu schleifen.