9. Encoding Methods for Signatures with Appendix (付録付き署名のエンコーディング方法)
エンコーディング方法は、メッセージをエンコードされたメッセージに変換するために使用されます。エンコードされたメッセージは、その後RSA署名プリミティブによって署名できます。本セクションでは、2つのエンコーディング方法を規定しています:EMSA-PSSとEMSA-PKCS1-v1_5。
9.1. EMSA-PSS
EMSA-PSS (Encoding Method for Signatures with Appendix - Probabilistic Signature Scheme) は、ランダム性を含む確率的エンコーディング方法であり、したがって与えられたメッセージに対して複数の異なるエンコードされたメッセージを生成できます。
9.1.1. エンコーディング操作 (Encoding Operation)
EMSA-PSS-ENCODE (M, emBits)
入力 (Input):
- M: エンコードするメッセージ、任意の長さのオクテット文字列
- emBits: エンコードされたメッセージの最大ビット長、少なくとも8hLen + 8sLen + 9
出力 (Output):
- EM: エンコードされたメッセージ、長さemLen = ⌈emBits/8⌉のオクテット文字列
ステップ (Steps):
-
Mの長さがハッシュ関数Hashの入力制限(SHA-1の場合2^61 - 1オクテット)より大きい場合、"message too long" を出力して停止します。
-
mHash = Hash(M) とします。長さhLenのオクテット文字列です。
-
emLen < hLen + sLen + 2の場合、"encoding error" を出力して停止します。
-
長さsLenのランダムオクテット文字列saltを生成します。
-
M' = (0x)00 00 00 00 00 00 00 00 || mHash || salt とします。M'は長さ8 + hLen + sLenのオクテット文字列です。
-
H = Hash(M') とします。長さhLenのオクテット文字列です。
-
emLen - sLen - hLen - 2個のゼロオクテットで構成されるオクテット文字列PSを生成します。
-
DB = PS || 0x01 || salt とします。DBは長さemLen - hLen - 1のオクテット文字列です。
-
dbMask = MGF(H, emLen - hLen - 1) とします。
-
maskedDB = DB ⊕ dbMask とします。
-
maskedDBの最も左の8emLen - emBitsビットをゼロに設定します。
-
EM = maskedDB || H || 0xbc とします。
-
EMを出力します。
9.1.2. 検証操作 (Verification Operation)
EMSA-PSS-VERIFY (M, EM, emBits)
入力 (Input):
- M: メッセージ、任意の長さのオクテット文字列
- EM: 検証するエンコードされたメッセージ、長さemLen = ⌈emBits/8⌉のオクテット文字列
- emBits: エンコードされたメッセージの最大ビット長
出力 (Output):
- "consistent" (一致) または "inconsistent" (不一致)
ステップ: (検証ステップはエンコーディングステップの逆で、すべての制約をチェックします)
9.2. EMSA-PKCS1-v1_5
EMSA-PKCS1-v1_5 (Encoding Method for Signatures with Appendix - PKCS #1 v1.5) は、決定論的エンコーディング方法であり、与えられたメッセージに対して常に同じエンコードされたメッセージを生成します。
EMSA-PKCS1-v1_5-ENCODE (M, emLen)
入力 (Input):
- M: エンコードするメッセージ、任意の長さのオクテット文字列
- emLen: エンコードされたメッセージの期待される長さ(オクテット単位)、少なくともtLen + 11。ここで、tLenはDigestInfo値のオクテット長
出力 (Output):
- EM: エンコードされたメッセージ、長さemLenのオクテット文字列
ステップ (Steps):
-
メッセージMにハッシュ関数を適用してハッシュ値Hを生成します: H = Hash(M)。ハッシュ関数が "message too long" を出力した場合、"message too long" を出力して停止します。
-
セクション9.2の注記の技術を使用して、ハッシュ関数のDigestInfo値をTとしてエンコードします。
-
emLen < tLen + 11の場合、"intended encoded message length too short" を出力して停止します。
-
emLen - tLen - 3個の値0xffのオクテットで構成されるオクテット文字列PSを生成します。
-
PSおよび他のパディングを連結してエンコードされたメッセージEMを形成します: EM = 0x00 || 0x01 || PS || 0x00 || T
-
EMを出力します。