RSASP1
Section 5 の署名用
逆
ハッシュ機能は別なので長文未対応。
RSAのみでは脆弱性等があるので RSASSA系のスキーム系を使うのが一般的。 RFC 8017
5.2. 署名および検証プリミティブ
署名プリミティブは、秘密鍵の制御下でメッセージ表現から署名表現を生成し、検証プリミティブは、対応する公開鍵の制御下で署名表現からメッセージ表現を復元します。本文書で定義される署名方式では、署名プリミティブと検証プリミティブのペアが用いられており、ここではRSA署名プリミティブ バージョン1 (RSASP1) / RSA検証プリミティブ バージョン1 (RSAVP1) と定義します。
ここで定義されるプリミティブは、IEEE 1363 IEEE1363 の整数因数分解署名プリミティブ バージョン1 (IFSP-RSA1) / 整数因数分解検証プリミティブ バージョン1 (IFVP-RSA1) と同一です(ただし、マルチプライムRSAのサポートが追加されています)。また、PKCS #1 v1.5と互換性があります。 各プリミティブの主な数学演算は、セクション 5.1 の暗号化プリミティブと復号化プリミティブと同様に、指数演算です。RSASP1 と RSAVP1 は、入力引数と出力引数の名前を除いて RSADP と RSAEP と同じですが、目的が異なるため区別されます。 5.2.1. RSASP1
RSASP1 (K, m)
入力:
K RSA 秘密鍵。Kは次のいずれかの形式をとります。
ペア(n, d)
5組(p, q, dP, dQ, qInv)と(空の場合もある)3組(r_i, d_i, t_i)のシーケンス(i = 3, ..., u)
m メッセージ代表値(message representative)。0からn - 1までの間の整数
出力:
s 署名代表値(signature representative)、0からn-1までの間の整数
エラー: 「メッセージ代表値が範囲外です」
仮定: RSA秘密鍵Kは有効である
手順:
1. メッセージ代表 m が 0 から n - 1 の範囲外の場合、「メッセージ代表が範囲外です」と出力して停止します。
2. 署名代表 s は以下のように計算されます。
a. K の最初の形式 (n, d) を使用する場合、s = m^d mod n とします。
b. K の 2 番目の形式 (p, q, dP, dQ, qInv) と (r_i, d_i, t_i) を使用する場合、以下のように処理されます。
1. s_1 = m^dP mod p、s_2 = m^dQ mod q とします。
2. u > 2 の場合、s_i = m^(d_i) mod r_i, i = 3, ..., u とします。
3. h = (s_1 - s_2) * qInv mod p とします。
4. s = s_2 + q * h とします。
5. u > 2 の場合、R = r_1 とし、i = 3 から u までを実行します。
a. R = R * r_(i-1) とします。
b. h = (s_i - s) * t_i mod r_i とします。
c. s = s + R * h とします。
3. s を出力します。
注: ステップ 2.b は、p と q の順序を逆にすれば、1 回のループとして書き直すことができます。ただし、PKCS #1 v2.0 との整合性を保つため、最初の 2 つの素数 p と q は、その他の素数とは別個に扱われます。