PKCS#11を使用して、FIPS 140-3レベル3認定の暗号トークン)で以下を実行したいと思います。
トークンにRSAキーペアを生成する
複数のコンポーネントからAESキーをインポートする
RSA秘密鍵とAES鍵(PKCS#8)をラップしてファイルにエクスポート
いくつかのFIPS 140-2レベル3暗号化トークンを使用して成功させようとしています。CKR_DEVICE_ERRORを取得しています。
それでそれが可能かどうか尋ねていますか? FIPS 140-2レベル3の準拠は、トークンから秘密鍵をラップしてエクスポートすることを許可しますか?それともPKCS#11の実装の問題だけですか?
FIPS 140-2 は、鍵のエクスポートを明示的に禁止していません。それが言っていることは、モジュールが不正な開示;を防止するということです;さらに、秘密鍵がモジュールからエクスポートされる場合、暗号化を使用して行われる必要があると述べています。重要な言葉は「無許可」です。AESキーで暗号化するだけでは十分ではありません。そのキーは、「承認された」システムまたは人だけが知っているようなキーである必要があります。これは、FIPS 140-2の他の多くの部分に依存します。基本的に、プライベートキーは、「一般的に」、単に暗号化を採用したおかげで、FIPS 140-2で定義されている役割と制約に準拠し、一部として評価されている文書化された手順の一部である必要があります。モジュールの認定を許可したプロセスのFIPS 140-2 level 3 "。
話を短くするには:
認定済みのFIPS 140-2レベル3モジュールは、制限なしの秘密鍵のエクスポートを許可し、外部から提供されたAES鍵でのみ保護され、現在もFIPS = 140-2レベル3。
使用しているモジュールがFIPS 140-2検証済みの場合は、公開されているセキュリティポリシーをお読みになることをお勧めします。これと製品ドキュメントには、プライベートをエクスポートできるかどうかが記載されています。キー。セキュリティポリシーは次の場所にあります: http://csrc.nist.gov/groups/STM/cmvp/validation.html モジュールが承認モードでのAESキーラッピングをサポートしていない可能性があります。また、使用しているAESキーのサイズが、RSAキーの同等の強度と一致するのに十分な大きさであることを確認する必要があります。たとえば、128ビットのAESキーは、4096ビットのRSAキーよりも強度が低いと推定されます。 !これはFIPS主要な出力要件に反しています。
Thales nShield HSMでは、秘密鍵をラップできます。任意のキーでラップできるようにキーACLを設定することが可能です。その場合、「承認」は秘密キーをロードできることのみで構成されます。
Thales PKCS#11ライブラリを使用する場合、キーをCKA_EXTRACTABLE = trueに設定してC_WrapKeyを許可できます。その場合、CKA_WRAPアクセス許可を持つすべてのキーでラップが許可されます。 (実際には、秘密鍵はFIPS 140-2 level 3を使用している場合でもCKA_SENSITIVE = falseに設定でき、PKCS#11ライブラリはそれらをラップしてFIPS境界を設定してから、それらを復号化します。)