12.2. KRA 操作の暗号化
Certificate System は、キーリカバリー認証局 (KRA) で以下の鍵操作を暗号化します。
アーカイブ:
- KRA に転送するために Certificate Request Message Format (CRMF) パッケージにアーカイブするキーの暗号化。
- KRA LDAP データベースのストレージの鍵の暗号化。
リカバリー:
- キーに転送するためにユーザーが提供したセッションキーの暗号化。
- シークレットの復号と、ユーザー提供のセッションキーを使用した再暗号化、または PKCS #12 パッケージの作成。
生成:
- ストレージの生成される鍵の暗号化。
12.2.1. クライアントによるキー操作暗号化の管理方法
Certificate System クライアントは、KRA の設定で設定された暗号化アルゴリズムを自動的に使用し、それ以上のアクションは必要ありません。
12.2.2. KRA での暗号化アルゴリズムの設定
以下の設定では、AES CBC(kra.allowEncDecrypt.archival=true
および kra.allowEncDecrypt.recovery=true
の場合) および AES Key Wrap(kra.allowEncDecrypt.archival=false
および kra.allowEncDecrypt.recovery=false
の場合) だけを使用できます。いずれかのアルゴリズムをサポートする FIPS140-2 で検証された HSM はすべて、KRA が提供する主要なアーカイブおよびリカバリー機能に使用できます。
Certificate System は、/var/lib/pki/pki-instance_name/conf/kra/CS.cfg
ファイルで鍵操作暗号化に関連する設定パラメーターのグループを定義します。以下のパラメーターのセットを推奨します (他のオプションは上記を参照)。
kra.allowEncDecrypt.archival=false kra.allowEncDecrypt.recovery=false kra.storageUnit.wrapping.1.payloadEncryptionAlgorithm=AES kra.storageUnit.wrapping.1.payloadEncryptionIVLen=16 kra.storageUnit.wrapping.1.payloadEncryptionMode=CBC kra.storageUnit.wrapping.1.payloadEncryptionPadding=PKCS5Padding kra.storageUnit.wrapping.1.payloadWrapAlgorithm=AES KeyWrap/Padding kra.storageUnit.wrapping.1.sessionKeyKeyGenAlgorithm=AES kra.storageUnit.wrapping.1.sessionKeyLength=128 kra.storageUnit.wrapping.1.sessionKeyType=AES kra.storageUnit.wrapping.1.sessionKeyWrapAlgorithm=RSA kra.storageUnit.wrapping.choice=1
kra.allowEncDecrypt.archival=false
kra.allowEncDecrypt.recovery=false
kra.storageUnit.wrapping.1.payloadEncryptionAlgorithm=AES
kra.storageUnit.wrapping.1.payloadEncryptionIVLen=16
kra.storageUnit.wrapping.1.payloadEncryptionMode=CBC
kra.storageUnit.wrapping.1.payloadEncryptionPadding=PKCS5Padding
kra.storageUnit.wrapping.1.payloadWrapAlgorithm=AES KeyWrap/Padding
kra.storageUnit.wrapping.1.sessionKeyKeyGenAlgorithm=AES
kra.storageUnit.wrapping.1.sessionKeyLength=128
kra.storageUnit.wrapping.1.sessionKeyType=AES
kra.storageUnit.wrapping.1.sessionKeyWrapAlgorithm=RSA
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 に保存されたデータを復号化できます。
12.2.2.1. パラメーターとその値の説明
各シークレット ("payload") はセッションキーで暗号化されます。この暗号化を制御するパラメーターには、payload
という接頭辞が付けられます。使用するパラメーターは、kra.allowEncDecrypt.archival
および kra.allowEncDecrypt.recovery
の値によって異なります。デフォルトでは、これらは両方とも false です。HSM におけるこの 2 つのパラメーターの効果は、「KRA で AES 暗号化を使用する場合の HSM の制約の解決」 を参照してください。
kra.allowEncDecrypt.archival
および kra.allowEncDecrypt.recovery
がいずれも false の場合:
-
payloadWrapAlgorithm
は、使用されるラッピングアルゴリズムを決定します。有効なオプションはAES KeyWrap
のみです。 -
payloadWrapAlgorithm=AES/CBC/CBC/PKCS5Padding
の場合、payloadWrapIVLength=16
を指定して IV を生成する必要がある PKI に指示する必要があります (CBC に 1 つ必要)。
kra.allowEncDecrypt.archival
および kra.allowEncDecrypt.recovery
がいずれも true の場合:
-
payloadEncryptionAlgorithm
は、使用される暗号化アルゴリズムを決定します。唯一の有効な選択肢は AES です。 -
payloadEncryptionMode
は、ブロックチェーンモードを決定します。唯一の有効な選択肢は CBC です。 -
payloadEncryptionPadding
により、パディングスキームが決まります。唯一の有効な選択肢は PKCS5Padding です。
次に、セッションキーは KRA Storage Certificate (RSA トークン) でラップされます。セッションキーおよびその暗号化を制御するパラメーターには、sessionKey
という接頭辞が付けられます。
-
sessionKeyType
は、生成するキーのタイプです。唯一の有効な選択肢は AES です。 -
sessionKeyLength
は、生成されたセッションキーの長さです。有効な選択肢は 128 と 256 で、ペイロードをそれぞれ 128 ビット AES または 256 ビット AES で暗号化します。 -
sessionKeyWrapAlgorithm
は、KRA Storage 証明書が使用するキーのタイプです。このガイドで唯一の有効な選択肢は RSA です。
12.2.2.2. KRA で AES 暗号化を使用する場合の HSM の制約の解決
KRA で AES を有効にして Certificate System を実行していても、ハードウェアセキュリティーモジュール (HSM) が AES キーラッピング機能をサポートしていない場合、キーのアーカイブは失敗します。この問題を解決するには、以下のソリューションがサポートされます。
キーラッピングの差分アルゴリズムの選択
KRA は、デフォルトのキーラッピングアルゴリズムをサポートしていない場合がありますが、他のアルゴリズムはサポートしています。たとえば、AES-128-CBC
をキーラッピングアルゴリズムとして使用するには、次のコマンドを実行します。
/var/lib/pki/pki-instance_name/conf/kra/CS.cfg
ファイルで以下のパラメーターを設定します。kra.storageUnit.wrapping.1.payloadWrapAlgorithm=AES KeyWrap/Padding kra.storageUnit.wrapping.1.payloadWrapIVLen=16 kra.storageUnit.wrapping.1.sessionKeyLength=128
kra.storageUnit.wrapping.1.payloadWrapAlgorithm=AES KeyWrap/Padding kra.storageUnit.wrapping.1.payloadWrapIVLen=16 kra.storageUnit.wrapping.1.sessionKeyLength=128
Copy to Clipboard Copied! インスタンスを再起動します。
systemctl restart pki-tomcatd@instance_name.service
# systemctl restart pki-tomcatd@instance_name.service
Copy to Clipboard Copied! Nuxwdog ウォッチドッグを使用している場合は以下を使用します。
systemctl restart pki-tomcatd-nuxwdog@instance_name.service
# systemctl restart pki-tomcatd-nuxwdog@instance_name.service
Copy to Clipboard Copied! 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 を暗号化モードに設定するには、以下を行います。
/var/lib/pki/pki-instance_name/conf/kra/CS.cfg
ファイルの以下のパラメーターをtrue
に設定します。kra.allowEncDecrypt.archival=true kra.allowEncDecrypt.recovery=true
kra.allowEncDecrypt.archival=true kra.allowEncDecrypt.recovery=true
Copy to Clipboard Copied! サービスを再起動します。
systemctl restart pki-tomcatd@instance_name.service
# systemctl restart pki-tomcatd@instance_name.service
Copy to Clipboard Copied! Nuxwdog ウォッチドッグを使用している場合は以下を使用します。
systemctl restart pki-tomcatd-nuxwdog@instance_name.service
# systemctl restart pki-tomcatd-nuxwdog@instance_name.service
Copy to Clipboard Copied! KRA が CA 以外のインスタンスで実行している場合は、両方のインスタンスを再起動する必要があります。
この設定は、kra.storageUnit.wrapping.1.payloadEncryption{Algorithm,Mode,Padding}
と kra.storageUnit.wrapping.1.payloadWrap{Algorithm,IVLen}
パラメーターを使用します。
後で、「キーラッピングの差分アルゴリズムの選択」 に従ってキーラッピングのために別のアルゴリズムに切り替える場合は、KRA を暗号化モードに設定する前に、作成されたレコードに適切なメタデータを手動で追加する必要があります。