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

5. Cryptographic Primitives (暗号プリミティブ)

暗号プリミティブ (Cryptographic Primitives) は、暗号スキームを構築できる基本的な数学演算です。これらは、ハードウェア実装またはソフトウェアモジュールとして使用されることを意図しており、スキームとは別に単独でセキュリティを提供することは意図されていません。

本文書では、4つのタイプのプリミティブをペアで構成して規定しています:暗号化と復号化 (Encryption and Decryption)、署名と検証 (Signature and Verification)。

プリミティブの仕様は、入力が特定の条件を満たすこと、特にRSA公開鍵と秘密鍵が有効であることを前提としています。

5.1. 暗号化と復号化プリミティブ (Encryption and Decryption Primitives)

暗号化プリミティブ (Encryption Primitive) は、公開鍵の制御下でメッセージ代表値から暗号文代表値を生成し、復号化プリミティブ (Decryption Primitive) は、対応する秘密鍵の制御下で暗号文代表値からメッセージ代表値を復元します。

本文書で定義されている暗号化スキームでは、1組の暗号化と復号化プリミティブが使用され、ここで規定されています:RSA暗号化プリミティブ (RSAEP, RSA Encryption Primitive) / RSA復号化プリミティブ (RSADP, RSA Decryption Primitive)。RSAEPとRSADPは同じ数学演算を含みますが、異なる鍵が入力されます。ここで定義されているプリミティブは、IEEE 1363 [IEEE1363] のRSAを使用した整数因数分解暗号化プリミティブ (IFEP-RSA) / RSAを使用した整数因数分解復号化プリミティブ (IFDP-RSA) と同じです(マルチプライムRSAのサポート追加を除く)。また、PKCS #1 v1.5と互換性があります。

各プリミティブの主要な数学演算は、べき乗演算 (Exponentiation) です。

5.1.1. RSAEP

RSAEP ((n, e), m)

入力 (Input)

(n, e)   RSA公開鍵
m メッセージ代表値、0とn - 1の間の整数

出力 (Output)

c        暗号文代表値、0とn - 1の間の整数

エラー (Error)

"message representative out of range" (メッセージ代表値が範囲外)

前提条件 (Assumption)

RSA公開鍵 (n, e) は有効である

ステップ (Steps)

ステップ1. メッセージ代表値mが0とn - 1の間にない場合、"message representative out of range" を出力して停止します。

ステップ2. c = m^e mod n とします。

ステップ3. cを出力します。

5.1.2. RSADP

RSADP (K, c)

入力 (Input)

K        RSA秘密鍵。Kは次のいずれかの形式を持ちます:
- ペア (n, d)
- 五つ組 (p, q, dP, dQ, qInv) と、空の可能性がある三つ組のシーケンス (r_i, d_i, t_i)、i = 3、...、u
c 暗号文代表値、0とn - 1の間の整数

出力 (Output)

m        メッセージ代表値、0とn - 1の間の整数

エラー (Error)

"ciphertext representative out of range" (暗号文代表値が範囲外)

前提条件 (Assumption)

RSA秘密鍵Kは有効である

ステップ (Steps)

ステップ1. 暗号文代表値cが0とn - 1の間にない場合、"ciphertext representative out of range" を出力して停止します。

ステップ2. メッセージ代表値mは次のように計算されます:

a. Kの第1の形式 (n, d) を使用する場合、m = c^d mod n とします。

b. Kの第2の形式 (p, q, dP, dQ, qInv) と (r_i, d_i, t_i) を使用する場合、次のステップを実行します:

i. m_1 = c^dP mod p かつ m_2 = c^dQ mod q とします。

ii. u > 2の場合、m_i = c^(d_i) mod r_i、i = 3、...、u とします。

iii. h = (m_1 - m_2) * qInv mod p とします。

iv. m = m_2 + q * h とします。

v. u > 2の場合、R = r_1 とし、i = 3からuまで次を実行します:

  1. R = R * r_(i-1) とします。
  2. h = (m_i - m) * t_i mod r_i とします。
  3. m = m + R * h とします。

ステップ3. mを出力します。

注意:ステップ2.bは、pとqの順序を逆にすれば、単一のループとして書き直すことができます。ただし、PKCS #1 v2.0との一貫性を保つため、最初の2つの素数pとqは追加の素数とは別に処理されます。

5.2. 署名と検証プリミティブ (Signature and Verification Primitives)

署名プリミティブ (Signature Primitive) は、秘密鍵の制御下でメッセージ代表値から署名代表値を生成し、検証プリミティブ (Verification Primitive) は、対応する公開鍵の制御下で署名代表値からメッセージ代表値を復元します。本文書で定義されている署名スキームでは、1組の署名と検証プリミティブが使用され、ここで規定されています:RSA署名プリミティブバージョン1 (RSASP1、RSA Signature Primitive、version 1) / RSA検証プリミティブバージョン1 (RSAVP1、RSA Verification Primitive、version 1)。

ここで定義されているプリミティブは、IEEE 1363 [IEEE1363] のRSAを使用した整数因数分解署名プリミティブバージョン1 (IFSP-RSA1) / RSAを使用した整数因数分解検証プリミティブバージョン1 (IFVP-RSA1) と同じです(マルチプライムRSAのサポート追加を除く)。また、PKCS #1 v1.5と互換性があります。

各プリミティブの主要な数学演算は、セクション5.1の暗号化と復号化プリミティブと同じく、べき乗演算です。RSASP1とRSAVP1は、RSADPとRSAEPと同じですが、入力パラメータと出力パラメータの名前が異なります。これらを区別する理由は、異なる目的で使用されるためです。

5.2.1. RSASP1

RSASP1 (K, m)

入力 (Input)

K        RSA秘密鍵。Kは次のいずれかの形式を持ちます:
- ペア (n, d)
- 五つ組 (p, q, dP, dQ, qInv) と、空の可能性がある三つ組のシーケンス (r_i, d_i, t_i)、i = 3、...、u
m メッセージ代表値、0とn - 1の間の整数

出力 (Output)

s        署名代表値、0とn - 1の間の整数

エラー (Error)

"message representative out of range" (メッセージ代表値が範囲外)

前提条件 (Assumption)

RSA秘密鍵Kは有効である

ステップ (Steps)

ステップ1. メッセージ代表値mが0とn - 1の間にない場合、"message representative out of range" を出力して停止します。

ステップ2. 署名代表値sは次のように計算されます:

a. Kの第1の形式 (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の順序を逆にすれば、単一のループとして書き直すことができます。ただし、PKCS #1 v2.0との一貫性を保つため、最初の2つの素数pとqは追加の素数とは別に処理されます。

5.2.2. RSAVP1

RSAVP1 ((n, e), s)

入力 (Input)

(n, e)   RSA公開鍵
s 署名代表値、0とn - 1の間の整数

出力 (Output)

m        メッセージ代表値、0とn - 1の間の整数

エラー (Error)

"signature representative out of range" (署名代表値が範囲外)

前提条件 (Assumption)

RSA公開鍵 (n, e) は有効である

ステップ (Steps)

ステップ1. 署名代表値sが0とn - 1の間にない場合、"signature representative out of range" を出力して停止します。

ステップ2. m = s^e mod n とします。

ステップ3. mを出力します。