5.2.5 Key Generation (鍵生成)
5.2.5 Key Generation (鍵生成)
秘密鍵は, 暗号的に安全な乱数からなる 57 オクテット (456 ビット, b に対応) である. 乱数性については [RFC4086] を参照のこと.
57 バイトの公開鍵は, 次の手順で生成する:
-
57 バイトの秘密鍵を SHAKE256(x, 114) でハッシュし, ダイジェストを 114 オクテットのバッファ h に格納する. 公開鍵の生成には下位 57 バイトのみを用いる.
-
バッファを剪定 (prune) する: 先頭オクテットの最下位 2 ビットをクリアし, 最終オクテットの 8 ビットすべてをクリアし, 末尾から 2 番目のオクテットの最上位ビットをセットする.
-
バッファをリトルエンディアン整数として解釈し, 秘密スカラー (secret scalar) s を形成する. 既知基点 (known-base-point) スカラー倍 [s]B を実行する.
-
公開鍵 A は点 [s]B の符号化である. まず y 座標 (0 <= y < p の範囲) を 57 オクテットのリトルエンディアン列として符号化する. 最終オクテットの最上位ビットは常にゼロである. 点 [s]B の符号化を得るには, x 座標の最下位ビットを最終オクテットの最上位ビットにコピーする. 結果が公開鍵である.