2.4. Signature Generation (署名生成)
2.4. Signature Generation (署名生成)
署名生成は暗号学的ハッシュ関数 H と入力メッセージ m を使用します。メッセージは最初に H によって処理され, 値 H(m) が得られます。これは長さ hlen のビットのシーケンスです。通常, H はその出力長 hlen が qlen にほぼ等しくなるように選択されます。これは署名スキームの全体的なセキュリティが hlen と qlen のうち小さい方に依存するためです。ただし, 関連する標準は hlen と qlen のすべての組み合わせをサポートします。
次のステップが適用されます:
-
H(m) は bits2int 変換と追加のモジュラー削減を使用して, q を法とする整数に変換されます:
h = bits2int(H(m)) mod qbits2octets の説明で述べたように, 追加のモジュラー削減は条件付き減算以上のものではありません。
-
k と呼ばれる q を法とするランダム値が生成されます。この値は 0 であってはなりません。したがって, 範囲 [1, q-1] にあります。この文書の残りのほとんどは k を生成するために使用されるプロセスを中心に展開されます。プレーンな DSA または ECDSA では, k は q-1 個の可能な値の中から一様な確率で値を選択するランダム選択を通じて選択されるべきです。
-
値 r (q を法とする) が k と鍵パラメータから計算されます:
-
DSA の場合:
r = g^k mod p mod q(冪乗は p を法として実行され, 0 から p-1 の間の数値が得られ, それがさらに q を法として削減されます。)
-
ECDSA の場合: 点 kG が計算されます。その X 座標 (E が定義されている体のメンバー) は整数に変換され, q を法として削減され, r が得られます。
r がゼロになった場合, 新しい k を選択し, r を再度計算する必要があります (これは極めてありえない発生です)。
-
-
値 s (q を法とする) が計算されます:
s = (h+x*r)/k mod qペア (r, s) が署名です。署名をどのようにエンコードするかは DSA および ECDSA 標準自体ではカバーされていません。一般的な方法は DER エンコードされた ASN.1 構造 (r と s の2つの INTEGER の SEQUENCE, この順序で) を使用することです。