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

3.1. 署名の作成

3.1. 署名の作成

HTTP メッセージ署名の作成は, 入力として署名コンテキスト (対象メッセージを含む) とアプリケーションの要件を取り, 出力として署名値と署名パラメータの集合を与え, それらをメッセージに追加して検証者に伝えられるようにする過程である.

署名を作成するために, 署名者は次のアルゴリズムを適用しなければならない (MUST):

  1. 署名者は, 潜在的署名アルゴリズムの集合から署名に用いる HTTP 署名アルゴリズムと鍵素材を選ぶ. 潜在アルゴリズムの集合はアプリケーションにより決まり, 本文書の対象外である. 署名者は署名のアルゴリズムに適した鍵素材を選ばなければならず (MUST), 鍵長や形式などアルゴリズムが定義する要件に適合しなければならない. 署名者がアルゴリズムと鍵素材を選ぶ仕組みは本文書の対象外である.

  2. 署名者は署名の作成時刻を現在時刻に設定する.

  3. 該当する場合, 署名者は署名の有効期限プロパティを署名が失効する時刻に設定する. 有効期限は検証者へのヒントであり, 署名者が署名を保証しなくなる時刻を表す. 適切な有効期限の長さおよびこのパラメータの処理要件はアプリケーション固有である.

  4. 署名者は, 署名によって被覆するメッセージコンポーネントを表すコンポーネント識別子の順序付き集合を作成し, この集合に署名メタデータパラメータを付与する. この集合の直列化された値は後述のとおり 4.1 節の Signature-Input フィールドの値として用いられる.

    • 被覆コンポーネントの順序が一度選ばれたら, 署名の存続期間中は変更してはならない (MUST NOT).

    • 各被覆コンポーネント識別子は, (1) 署名コンテキスト内の HTTP フィールド (2.1 節) であるか, (2) 2.2 節または "HTTP Signature Derived Component Names" レジストリに列挙された派生コンポーネントでなければならない (MUST).

    • リクエストの署名者は, @method, @authority, @target-uri などメッセージ制御データの一部または全部を被覆コンポーネントに含めるべきである (SHOULD).

    • 署名者は created 署名メタデータパラメータを含め, 署名がいつ作成されたかを示すべきである (SHOULD).

    • @signature-params 派生コンポーネント識別子は被覆コンポーネント識別子のリストにあってはならない (MUST NOT). 派生コンポーネントは署名ベースの常に最終行として必須であり, 署名が常に自身のメタデータを被覆し, メタデータが置換されないことを保証する.

    • この集合に何をどの順で含めるかに関するさらなる指針は本文書の対象外である.

  5. 署名者はこれらのパラメータと署名ベース作成アルゴリズム (2.5 節) を用いて署名ベースを作成する.

  6. 署名者は選んだ署名アルゴリズムと署名者が選んだ鍵素材を用いて, HTTP_SIGN 原始関数で署名ベースに署名する. HTTP_SIGN 原始および署名アルゴリズムのいくつかの具体例は 3.3 節で定義される.

  7. 署名関数のバイト列出力は, 4.2 節で定義される Signature フィールドに含める HTTP メッセージ署名の出力値である.

例えば, 2.5 節の例の HTTP メッセージおよび署名パラメータが与えられた場合, 例の署名ベースは test-key-rsa-pss 鍵 (付録 B.1.2 参照) および 3.3.1 節で述べる RSASSA-PSS アルゴリズムで署名され, Base64 でエンコードされた次のメッセージ署名出力値となる:

NOTE: '' line wrapping per RFC 8792

HIbjHC5rS0BYaa9v4QfD4193TORw7u9edguPh0AW3dMq9WImrlFrCGUDih47vAxi4L2
YRZ3XMJc1uOKk/J0ZmZ+wcta4nKIgBkKq0rM9hs3CQyxXGxHLMCy8uqK488o+9jrptQ
+xFPHK7a9sRL1IXNaagCNN3ZxJsYapFj+JXbmaI5rtAdSfSvzPuBCh+ARHBmWuNo1Uz
VVdHXrl8ePL4cccqlazIJdC4QEjrF+Sn4IxBQzTZsL9y9TP5FsZYzHvDqbInkTNigBc
E9cKOYNFCn4D/WM7F6TNuZO9EgtzepLWcjTymlHzK7aXq6Am6sfOrpIC49yXjj3ae6H
RalVc/g==

       Figure 2: Non-normative Example Signature Value

ここで用いている RSA-PSS アルゴリズムは非決定的であるため, アルゴリズムを実行するたびに異なる署名値が生成される. ここに示した署名値は与えられた鍵に対して検証できるが, 新たに生成した署名値が例と一致することは期待されない. 7.3.5 節を参照のこと.