8. Signature Scheme with Appendix (付録付き署名スキーム)
付録付き署名スキーム (Signature Scheme with Appendix) は、署名生成操作と署名検証操作で構成されます。署名生成操作は、署名者のRSA秘密鍵を使用してメッセージから署名を生成し、署名検証操作は、署名者のRSA公開鍵を使用して署名の真正性を検証します。
メッセージMに署名するために、署名者はMにメッセージエンコーディング操作を適用してエンコードされたメッセージEMを生成し、次に署名プリミティブを適用して署名Sを生成します。署名Sを検証するために、検証者はSに検証プリミティブを適用してエンコードされたメッセージEMを復元し、次に検証操作を適用して署名がメッセージに対して有効かどうかを判断します。
本文書では、2つの署名スキームが規定されています:RSASSA-PSSとRSASSA-PKCS1-v1_5。
必須ではありませんが、RSASSA-PSSは新しいアプリケーションに推奨されます。RSASSA-PKCS1-v1_5は、既存のアプリケーションとの互換性のために含まれています。
8.1. RSASSA-PSS
RSASSA-PSSは、RSASP1およびRSAVP1プリミティブ(セクション5.2)とEMSA-PSSエンコーディング方法を組み合わせています。これは、BellareとRogawayによって提案された確率的署名スキーム (Probabilistic Signature Scheme, PSS) [RSARABIN] [PSS] に基づいています。
PSSのセキュリティは、RSA問題の困難性とMGFのランダムオラクルモデルに基づいています。ランダムオラクルモデルの下で、MGFがランダムオラクルのように動作し、RSA問題が困難である場合、PSS署名スキームは選択メッセージ攻撃 (Chosen Message Attack) に対して安全であることが証明されています。
RSASSA-PSSは決定論的ではありません:与えられたメッセージに対して、複数の可能な署名を生成できます。これは、署名生成操作中にランダムなソルト値が含まれるためです。
8.1.1. 署名生成操作 (Signature Generation Operation)
RSASSA-PSS-SIGN (K, M)
入力 (Input):
- K: 署名者のRSA秘密鍵
- M: 署名するメッセージ、任意の長さのオクテット文字列
出力 (Output):
- S: 署名、長さkのオクテット文字列。ここで、kはRSA剰余nの長さ(オクテット単位)
エラー (Errors):
- "message too long" (メッセージが長すぎる)
- "encoding error" (エンコーディングエラー)
ステップ (Steps):
-
EMSA-PSSエンコーディング: メッセージMにEMSA-PSSエンコーディング操作を適用して、長さ⌈(modBits-1)/8⌉オクテットのエンコードされたメッセージEMを生成します。ここで、modBitsはRSA剰余nの長さ(ビット単位)です: EM = EMSA-PSS-ENCODE(M, modBits - 1)。エンコーディング操作が "message too long" または "encoding error" を出力した場合、対応するエラーを出力して停止します。
-
RSA署名:
- エンコードされたメッセージEMを整数メッセージ代表値mに変換します: m = OS2IP(EM)
- RSASP1署名プリミティブを適用します: s = RSASP1(K, m)
- 署名代表値sを長さkの署名Sに変換します: S = I2OSP(s, k)
-
署名Sを出力します。
8.1.2. 署名検証操作 (Signature Verification Operation)
RSASSA-PSS-VERIFY ((n, e), M, S)
入力 (Input):
- (n, e): 署名者のRSA公開鍵
- M: メッセージ、任意の長さのオクテット文字列
- S: 検証する署名、長さkのオクテット文字列
出力 (Output):
- "valid signature" (有効な署名) または "invalid signature" (無効な署名)
ステップ (Steps):
-
長さチェック: 署名Sの長さがkオクテットでない場合、"invalid signature" を出力して停止します。
-
RSA検証:
- 署名Sを整数署名代表値sに変換します: s = OS2IP(S)
- RSAVP1検証プリミティブを適用します: m = RSAVP1((n, e), s)。RSAVP1が "signature representative out of range" を出力した場合、"invalid signature" を出力して停止します。
- メッセージ代表値mを長さemLen = ⌈(modBits - 1)/8⌉のエンコードされたメッセージEMに変換します: EM = I2OSP(m, emLen)
-
EMSA-PSS検証: EMSA-PSS検証操作を適用します: Result = EMSA-PSS-VERIFY(M, EM, modBits - 1)。Result = "consistent" の場合、"valid signature" を出力します。それ以外の場合、"invalid signature" を出力します。
8.2. RSASSA-PKCS1-v1_5
RSASSA-PKCS1-v1_5は、RSASP1およびRSAVP1プリミティブ(セクション5.2)とEMSA-PKCS1-v1_5エンコーディング方法を組み合わせています。これは、IEEE 1363 [IEEE1363] のIFSSAスキームと互換性があり、DigestInfo値のハッシュ関数を使用してメッセージ代表値を生成します。
RSASSA-PKCS1-v1_5のセキュリティは、RSA問題の困難性に依存しています。このスキームを破る既知の攻撃はありませんが、PSSのようなセキュリティ証明もありません。
8.2.1. 署名生成操作 (Signature Generation Operation)
RSASSA-PKCS1-V1_5-SIGN (K, M)
ステップはRSASSA-PSSと同様ですが、EMSA-PKCS1-v1_5エンコーディング方法を使用します
8.2.2. 署名検証操作 (Signature Verification Operation)
RSASSA-PKCS1-V1_5-VERIFY ((n, e), M, S)
ステップはRSASSA-PSSと同様ですが、EMSA-PKCS1-v1_5検証方法を使用します