16.2. KRA 操作の暗号化

Certificate System は、キーリカバリー機関 (KRA) で以下の鍵操作を暗号化します。
  • アーカイブ:
    • KRA に転送するために Certificate Request Message Format (CRMF) パッケージにアーカイブするキーの暗号化。
    • KRA LDAP データベースのストレージの鍵の暗号化。
  • リカバリー:
    • キーに転送するためにユーザーが提供したセッションキーの暗号化。
    • シークレットの復号と、ユーザー提供のセッションキーを使用した再暗号化、または PKCS #12 パッケージの作成。
  • 生成:
    • ストレージの生成される鍵の暗号化。

16.2.1. クライアントによるキー操作暗号化の管理方法

Certificate System クライアントは、KRA の設定で設定された暗号化アルゴリズムを自動的に使用し、それ以上のアクションは必要ありません。

16.2.2. KRA での暗号化アルゴリズムの設定

注記
以下の設定では、AES CBC(kra.allowEncDecrypt.archive=true および kra.allowEncDecrypt.recovery=true の場合) および AES Key Wrap(kra.allowEncDecrypt.archive=false および kra.allowEncDecrypt.recovery=falseの場合) だけを使用できます。いずれかのアルゴリズムをサポートする FIPS140-2 で検証された HSM はすべて、KRA が提供する主要なアーカイブおよびリカバリー機能に使用できます。
Certificate System は、/var/lib/pki/pki-instance_name/conf/kra/CS.cfg ファイルで鍵操作暗号化に関連する設定パラメーターのグループを定義します。以下のパラメーターのセットを推奨します (他のオプションについては上記を参照)。
kra.allowEncDecrypt.archive=false
kra.allowEncDecrypt.recovery=false
kra.storageUnit.wrapping.1.sessionKeyLength=256
kra.storageUnit.wrapping.1.sessionKeyWrapAlgorithm=RSA
kra.storageUnit.wrapping.1.payloadEncryptionPadding=PKCS5Padding
kra.storageUnit.wrapping.1.sessionKeyKeyGenAlgorithm=AES
kra.storageUnit.wrapping.1.payloadEncryptionAlgorithm=AES
kra.storageUnit.wrapping.1.payloadEncryptionMode=CBC
kra.storageUnit.wrapping.1.payloadWrapAlgorithm=AES KeyWrap
kra.storageUnit.wrapping.1.sessionKeyType=AES
kra.storageUnit.wrapping.1.payloadWrapIVLen=16
kra.storageUnit.wrapping.choice=1
各グループ (kra.storageUnit.wrapping.0.*kra.storageUnit.wrapping.1.*) には個別の設定があり、番号はどの設定が同じ設定グループに属するかを定義します。現在の設定グループは、/var/lib/pki/pki-instance_name/conf/kra/CS.cfg ファイル内の kra.storageUnit.wrapping.choice パラメーターで設定されます。
続行する前に、設定ファイルに kra.storageUnit.wrapping.choice=1 が設定されていることを確認してください。
注記
Certificate System は、KRA データベースのレコードにデータを復号化するのに必要な情報を追加します。したがって、暗号化アルゴリズムを変更した後でも、Certificate System は、別の暗号化アルゴリズムを使用して、以前に KRA に保存されたデータを復号化できます。

16.2.2.1. パラメーターとその値の説明

各シークレット (payload) はセッションキーで暗号化されます。この暗号化を制御するパラメーターには、payload という接頭辞が付けられます。使用するパラメーターは、kra.allowEncDecrypt.archive および kra.allowEncDecrypt.recovery の値によって異なります。デフォルトでは、これらは両方とも false です。HSM におけるこの 2 つのパラメーターの効果については、「KRA で AES 暗号化を使用する場合の HSM の制約の解決」 を参照してください。
kra.allowEncDecrypt.archivekra.allowEncDecrypt.recovery がいずれも false の場合:
  • payloadWrapAlgorithm は、使用されるラッピングアルゴリズムを決定します。有効なオプションは AES KeyWrap のみです。
  • payloadWrapAlgorithm=AES/CBC/CBC/PKCS5Padding の場合、payloadWrapIVLength=16 を指定して IV を生成する必要がある PKI に指示する必要があります (CBC に 1 つ必要)。
kra.allowEncDecrypt.archivekra.allowEncDecrypt.recovery がいずれも true の場合:
  • payloadEncryptionAlgorithm は、使用される暗号化アルゴリズムを決定します。唯一の有効な選択肢は AES です。
  • payloadEncryptionMode は、ブロックチェーンモードを決定します。唯一の有効な選択肢は CBC です。
  • payloadEncryptionPadding により、パディングスキームが決まります。唯一の有効な選択肢は PKCS5Padding です。
次に、セッションキーは KRA Storage Certificate (RSA トークン) でラップされます。セッションキーおよびその暗号化を制御するパラメーターには、sessionKey という接頭辞が付けられます。
  • sessionKeyType は、生成するキーのタイプです。唯一の有効な選択肢は AES です。
  • sessionKeyLength は、生成されたセッションキーの長さです。有効な選択肢は 128256 で、ペイロードをそれぞれ 128 ビット AES または 256 ビット AES で暗号化します。
  • sessionKeyWrapAlgorithm は、KRA Storage 証明書が使用するキーのタイプです。本ガイドで唯一の有効な選択肢は RSA です。

16.2.2.2. KRA で AES 暗号化を使用する場合の HSM の制約の解決

KRA で AES を有効にして Certificate System を実行していても、ハードウェアセキュリティーモジュール (HSM) が AES キーラッピング機能をサポートしていない場合、キーのアーカイブは失敗します。この問題を解決するには、以下のソリューションがサポートされます。

キーラッピングの差分アルゴリズムの選択

KRA は、デフォルトのキーラッピングアルゴリズムをサポートしていない場合がありますが、他のアルゴリズムはサポートしています。たとえば、AES-128-CBC をキーラッピングアルゴリズムとして使用するには、次のコマンドを実行します。
  1. /var/lib/pki/pki-instance_name/conf/kra/CS.cfg ファイルで以下のパラメーターを設定します。
    kra.storageUnit.wrapping.1.payloadWrapAlgorithm=AES KeyWrap
    kra.storageUnit.wrapping.1.payloadWrapIVLen=16
    kra.storageUnit.wrapping.1.sessionKeyLength=128
  2. インスタンスを再起動します。
    # systemctl restart pki-tomcatd@instance_name.service
    または (nuxwdog watchdog を使用している場合)
    # systemctl restart pki-tomcatd-nuxwdog@instance_name.service
    KRA が異なるインスタンスで実行されている場合、CA は両方のインスタンスを再起動する必要があります。
キーラッピングに別のアルゴリズムを選択すると、HSM が後で AES キーラッピングのサポートを追加した場合に、キーレコードに関連情報が設定されているため、設定を元に戻すことができるという利点があります。
この設定は、kra.storageUnit.wrapping.1.payloadWrap{Algorithm,IVLen}kra.storageUnit.wrapping.1.payloadEncryption{Algorithm,Mode,Padding} のパラメーターを使用します。

KRA の暗号化モードへの設定

HSM が KeyWrap アルゴリズムをサポートしていない場合、場合によっては、KRA を暗号化モードにする必要があります。KRA を暗号化モードに設定すると、すべてのキーは、キーラッピングアルゴリズムではなく暗号化アルゴリズムを使用して保存されます。
KRA を暗号化モードに設定するには、以下を行います。
  1. /var/lib/pki/pki-instance_name/conf/kra/CS.cfg ファイルの以下のパラメーターを true に設定します。
    kra.allowEncDecrypt.archive=true
    kra.allowEncDecrypt.recovery=true
  2. サービスを再起動します。
    # systemctl restart pki-tomcatd@instance_name.service
    または (nuxwdog watchdog を使用している場合)
    # systemctl restart pki-tomcatd-nuxwdog@instance_name.service
    KRA が CA 以外のインスタンスで実行している場合は、両方のインスタンスを再起動する必要があります。
この設定は、kra.storageUnit.wrapping.1.payloadEncryption{Algorithm,Mode,Padding}kra.storageUnit.wrapping.1.payloadWrap{Algorithm,IVLen} パラメーターを使用します。
注記
後で、「キーラッピングの差分アルゴリズムの選択」 に従ってキーラッピングのために別のアルゴリズムに切り替える場合は、KRA を暗号化モードに設定する前に、作成されたレコードに適切なメタデータを手動で追加する必要があります。