メインコンテンツまでスキップ

5.2.6 Sign (署名)

5.2.6 Sign (署名)

署名手続きの入力は, 秘密鍵 (57 オクテット列), フラグ F (Ed448 では 0, Ed448ph では 1), 最大 255 オクテットのコンテキスト C, 任意の長さのメッセージ M である.

  1. 57 オクテットの秘密鍵を SHAKE256(x, 114) でハッシュする. 結果のダイジェストを h とする. 前節のとおり, ダイジェストの前半から秘密スカラー s と対応する公開鍵 A を構成する. ダイジェストの後半 h[57],...,h[113] を prefix とする.

  2. SHAKE256(dom4(F, C) || prefix || PH(M), 114) を計算する. ここで M は署名対象メッセージ, F は Ed448ph では 1, Ed448 では 0, C は用いるコンテキストである. 114 オクテットのダイジェストをリトルエンディアン整数 r として解釈する.

  3. 点 [r]B を計算する. 効率のため, まず r を B の群位数 L で約化してもよい. その点の符号化を文字列 R とする.

  4. SHAKE256(dom4(F, C) || R || A || PH(M), 114) を計算し, 114 オクテットのダイジェストをリトルエンディアン整数 k として解釈する.

  5. S = (r + k * s) mod L を計算する. 効率のため, 再び k を先に L で約化してもよい.

  6. 署名は, R (57 オクテット) と S のリトルエンディアン符号化 (57 オクテット, 最終オクテットの最上位 10 ビットは常にゼロ) の連結とする.