Cryptography Module 2.0 のアップグレードおよび移行

Cryptography Module をバージョン 2.x.x にアップグレードします。

サポートされているアップグレードパス

開始バージョン 終了バージョン

1.3.x

2.0.0

このリリースでの変更

このリリースには、次の変更が含まれています。

  • コネクタ操作のデフォルト値の変更

  • FIPS モードで操作する場合に PGP キーリングを AES 暗号化キーに移行

  • Sign、Encrypt、および Decrypt 操作で異なるキーペアを使用したセキュリティの強化

  • パスワードベースの暗号化の使用

  • 必須のキーストアとトラストストア種別として BCFKS の使用

  • アルゴリズムの動的な指定

  • XMLDSig セキュリティプロバイダーの登録

  • KDF パラメーターなしで Decrypt または Validate 操作の互換性の有効化

このガイドでは Federal Information Processing Standards (FIPS) への参照はすべて FIPS バージョン 140-2 または 140-3 に関連します。

Cryptography Module 2.0.0 を使用するためのサポートされる最小 Mule Runtime Engine バージョンは 4.4.x です。FIPS コンプライアンスおよびサポートされるランタイム環境との互換性を確認してください。 古いバージョンを使用している場合は、Mule Runtime をアップグレードしてください。

アップグレード手順

以下の手順でアップグレードを実行します。

  1. Anypoint Studio で、Mule プロジェクトを作成します。

  2. [Mule Palette (Mule パレット)]​ で、​[Search in Exchange (Exchange 内を検索)]​ をクリックします。

  3. [Add Dependencies to Project (連動関係をプロジェクトに追加)]​ で、検索項目に「​cryptography module​」と入力します。

  4. [Available modules (使用可能なモジュール)]​ で、​[Cryptography Module]​ を選択して ​[Add (追加)]​ をクリックします。

  5. [Finish (完了)]​ をクリックします。

  6. Mule プロジェクトの pom.xml ファイルで mule-cryptography-module ​連動関係のバージョンが 2.0.0​ であることを確認します。

Studio はコネクタを自動的にアップグレードします。

アップグレード後の手順

Cryptography Module をアップグレードしたら、モジュールはセキュリティプロバイダーをバンドルしなくなります。 環境にすでにセキュリティプロバイダー (MuleSoft Government Cloud 環境内のセキュリティプロバイダーなど) がある場合、追加の設定を行わないでください。既存の環境でセキュリティプロバイダーが提供されます。 それ以外の場合、Bouncy Castle (BC) または Bouncy Castle FIPS (BCFIPS) のいずれかの連動関係を ​additionalPluginDependencies​ または共有ライブラリとして Mule アプリケーションの ​pom.xml​ ファイルに含めることで Mule アプリケーションプロジェクト設定に追加します。これにより、モジュールはその操作に必要なセキュリティプロバイダーにアクセスできるようになります。 BCFIPS の連動関係

<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bc-fips</artifactId>
    <version>${bc-fips.version}</version>
</dependency>
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcpg-fips</artifactId>
    <version>${bcpg-fips.version}</version>
</dependency>

BC の連動関係

<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcpg-jdk18on</artifactId>
    <version>${bcpg.version}</version>
</dependency>
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk18on</artifactId>
    <version>${bcprov.version}</version>
</dependency>

Bouncy Castle JDK18on 連動関係バージョン 1.80 の使用

Bouncy Castle バージョン 1.80 以降、プロジェクトバージョンは内部的に大幅に再編成されました。これは、​bcprov-jdk18on​ や ​bcpg-jdk18on​ などの JDK18on アーティファクトを使用する場合にどのようにライブラリを含める必要があるかに影響します。

バージョン 1.80 より前のバージョン (1.79 以前など) では、PGP 操作のすべての機能とパスワードベースの暗号化 (PBE) 機能を有効にするには、​bcprov-jdk18on​ または ​bcpg-jdk18on​ ライブラリのみを追加すれば十分でした。

次の追加ライブラリは必須です。その理由を次に示します。

  • bcpkix-jdk18on​ には、PGP 操作で使用する ASN.1 構造など、不可欠な暗号化プロトコルクラスが含まれます。

  • bcutil-jdk18on​ には、その他のモジュールの低レベル操作によって参照されるようになったユーティリティクラスが含まれます。

これらの連動関係を追加しない場合、次のようなランタイムエラーが発生する可能性があります。

  • java.lang.ClassNotFoundException: org.bouncycastle.bcpg.ArmoredOutputStream

  • java.lang.NoClassDefFoundError: org.bouncycastle.asn1.cryptlib.CryptlibObjectIdentifiers

  • java.lang.IllegalArgumentException: Attempt to override lookup strategy ParentFirstLookupStrategy for package: org.bouncycastle.asn1.nist

このため、非 FIPS モードで BC バージョン 1.80 以上を Cryptography Module 2.0.0 で使用する場合、次のライブラリを Mule アプリケーションに含めていることを確認してください。

  • bcprov-jdk18on

  • bcpg-jdk18on

  • bcpkix-jdk18on

  • Bcutil-jdk18on

FIPS 準拠の環境を使用する場合は、​bc-fips​ および ​bcpg-fips​ ライブラリを使用します。

アップグレードを確認する

モジュールの最新バージョンをインストールしたら、アップグレードを確認します。

  1. Studio の ​[Problems (問題)]​ または ​[Console (コンソール)]​ ビューでエラーがないことを確認します。

  2. プロジェクトの ​pom.xml​ ファイルに問題がないことを確認します。

  3. 接続をテストして、操作が機能することを確認します。

アップグレードの取り消し

前のバージョンの Cryptography Module に戻す必要がある場合は、Anypoint Studio に移動して以下を実行します。

  1. プロジェクトの ​pom.xml ファイル​で ​mule-cryptography-module​ 連動関係バージョン 2.0.0 を以前のバージョンに変更し、使用している連動関係を <dependencies> セクションから削除します。

  2. [Execute]​ タブに戻り、​[Engine (エンジン)]​ セクションでいずれかのデフォルトエンジンを選択します。

  3. [Configuration XML (設定 XML)]​ タブで、選択済みのエンジン名も変更されていることを確認します。

コネクタ操作のデフォルト値の変更

Cryptography Module のセキュリティ態勢を向上するため、バージョン 2.0.0 では操作と設定パラメーターの多くのデフォルト値が更新されました。これらの変更は、よりセキュアなアルゴリズムスタックと最新の暗号化手法の採用を反映するものです。

以前のバージョンから移行する場合は、バージョン 1.x で使用していたデフォルト値を宣言します。これにより、互換性が確保され、新しいバージョンでのデフォルト値の変更による予期しない結果が回避されます。

次の表で、バージョン 2.0.0 で変更されたデフォルト値を示します。

Table 1. デフォルト値の概要表
コンポーネント バージョン 1.x のデフォルト バージョン 2.0.0 のデフォルト

XML Signature Digest Algorithm (XML 署名ダイジェストアルゴリズム)

SHA1

SHA512

JCE PBE Signature Algorithm (JCE PBE 署名アルゴリズム)

PBEWithHmacSHA256

PBKDF2withHmacSHA512

JCE PBE Encryption/Decryption Algorithm (JCE PBE 暗号化/復号化アルゴリズム)

PBEWithHmacSHA256AndAES_128

PBKDF2withHmacSHA512​AES256​CBC__PKCS5Padding

Checksum Algorithm (チェックサムアルゴリズム)

SHA_256

SHA_512

Keystore Type (キーストア種別)

JKS

なし。明示的に指定する必要があります。FIPS では BCFKS が必要です。

FIPS 用に PGP キーリングを AES 暗号化キーに移行

PGP 操作を実行する場合に Mule アプリケーションが FIPS に準拠するようにするには、Advanced Encryption Standard (AES) 暗号化を使用するように PGP キーリングを移行する必要があります。

デフォルトの PGP キー生成では、FIPS 準拠ではない CAST5 暗号化が使用されます。非準拠の暗号化を使用すると、​org.mule.runtime.api.exception.MuleRuntimeException​ などのランタイム例外が発生する可能性があります。これは、署名されたコンテンツ形式に問題があり、署名操作に失敗したことを示しています。この例外は、PGP 操作によって返された ​InputStream​ が空または破損している場合に発生する可能性があります。

PGP 署名に関する FIPS コンプライアンスを達成するには、次のプロセスを実行します。

  1. キーリングとキーを作成する

  2. AES にキーを移行する

  3. 秘密鍵と公開鍵をエクスポートする

  4. キーリングを使用するように Cryptography Module を設定する

キーリングとキーの作成

ロールバックを実行する必要がある場合に備えて、キーリングとキーのバックアップを作成します。

キーリングを最初から作成するには、GNU GPG を使用して次の手順を実行します。

  1. 次のコマンドを実行して、新しいキーリングを作成します。

gpg --no-default-keyring --keyring example.kbx --fingerprint
gpg: keybox '/Users/youruser/.gnupg/example.kbx' created
  1. 後で使用する新しいキーボックスの場所を保存します。

  2. 次のコマンドを実行し、返された手順に従って、署名または検証用の PGP キーを作成します (DSA が FIPS 準拠ではないため、RSA を暗号化として選択します)。

gpg --no-default-keyring --keyring example.kbx --full-generate-key
gpg (GnuPG/MacGPG2) 2.2.41; Copyright (C) 2022 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
  (14) Existing key from card
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) 4096
Requested keysize is 4096 bits
Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 0
Key does not expire at all
Is this correct? (y/N) y
GnuPG needs to construct a user ID to identify your key.
Real name: Test
Name must be at least 5 characters long
Real name: TestName
Email address: test@example.com
Comment:
You selected this USER-ID:
    "TestName <test@example.com>"
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
gpg: revocation certificate stored as '/Users/youruser/.gnupg/openpgp-revocs.d/991F7216B03C0B2B088AB20D5F46261934B56AF2.rev'
public and secret key created and signed.
pub   rsa4096 2024-12-26 [SC]
      991F7216B03C0B2B088AB20D5F46261934B56AF2
uid                      TestName <test@example.com>
sub   rsa4096 2024-12-26 [E]
  1. キーを AES に移行する前に、次のコマンドを実行して、キーをリストし、そのフィンガープリントを見つけます。

gpg --no-default-keyring --keyring /Users/youruser/.gnupg/example.kbx --list-secret-keys --keyid-format=long --fingerprint
/Users/youruser/.gnupg/example.kbx
-----------------------------------
sec   rsa4096/5F46261934B56AF2 2024-12-26 [SC]
      Key fingerprint = 991F 7216 B03C 0B2B 088A  B20D 5F46 2619 34B5 6AF2
uid                 [ultimate] TestName <test@example.com>
ssb   rsa4096/E7C647D222B1F1C1 2024-12-26 [E]

AES へのキーの移行

SHA256 を使用して各キーを AES に移行して FIPS 準拠にします。

  1. フィンガープリントを移行するキーをコピーします。

  2. キーをこのコマンドにスペースなしで貼り付けます。このコマンドを実行すると、コマンドラインが有効になります。

gpg --no-default-keyring --keyring /Users/youruser/.gnupg/example.kbx --s2k-cipher-algo AES256 --s2k-digest-algo SHA256 --s2k-mode 3 --s2k-count 65000000 --edit-key [KEYID]
  1. キーのパスワードを変更するには、passwd コマンドを入力します。同じパスワードを使用できます。プロンプトでは最初に現在のパスワードが要求され、次に新しいパスワードが要求されます。

passwd
  1. Comand+C (macOS) または Ctrl+C (その他のオペレーティングシステム) を押して、gpg プロンプトを終了します。

  2. キーボックスにリストされたキーごとにこの手順を繰り返します。

キー保護の検証

キーを作成または移行したら、想定される保護アルゴリズム (AES-256 と SHA-256) が正しく適用されていることを検証します。

次のコマンドを実行して、秘密鍵に適用されている実際の保護を調べます。

gpg --export-secret-keys [KEYID] | gpg --list-packets
  1. 出力で次のような行を探します。

iter+salt S2K, algo: 9, SHA256 protection, hash: 8

この参照を使用して値を解釈します。

アルゴリズム ハッシュ関数
  • algo: 9​ → AES256

  • algo: 7​ → AES128

  • hash: 8​ → SHA256

  • hash: 2​ → SHA1

出力に AES128 または SHA1 が示されている場合、保護が正しく適用されておらず、キーが FIPS 準拠ではないことを意味します。この場合、移行プロセスを繰り返すか、次の代替方法の使用を検討してください。

秘密鍵と公開鍵のエクスポート

キーを AES に移行したら、秘密鍵と公開鍵をエクスポートします。

  1. 次のコマンドを実行し、​mule-cryptography-module​ モジュールで使用する秘密キーリングに秘密鍵をエクスポートします。各秘密鍵のパスワードをキーボックスに入力するように要求されます。

gpg --no-default-keyring --keyring /Users/youruser/.gnupg/example.kbx --export-secret-keys > secring_example_aes.gpg
  1. 必要に応じて公開鍵をエクスポートします。

gpg --no-default-keyring --keyring /Users/youruser/.gnupg/example.kbx --export > pubring_example_aes.gpg

キー保護の問題のトラブルシューティング

場合によって、次のコマンドを実行しても以下のようになる場合があります。

gpg --s2k-cipher-algo AES256 --s2k-digest-algo SHA256 --s2k-mode 3 --s2k-count 65000000 --edit-key [KEYID]

キーが引き続き AES128 と SHA1 で保護されているように見える場合があります。これは、GPG 2.1 以降に導入された変更によるものです。つまり、秘密鍵保護は ​gpg​ で直接管理されなくなり、​gpg-agent​ で管理されるようになったためです。

GPG 2.1 以降では、​gpg​ は保存時の秘密鍵の暗号化を直接行いません。また、​--s2k-cipher-algo​ などのオプションに効果はありません。代わりに、​gpg-agent​ が単独で行います。これは、使用中の暗号化またはダイジェストアルゴリズムを変更するためのインターフェースを提供しません。 詳細は、 「Allow s2k options for gpg --export-secret-key (gpg の s2k オプション --export-secret-key の許可)」​および 「S2K don’t work HELP (S2K が動作しない HELP)」​ を参照してください。

実際の状況:

  • GPG 2.1+ でキーを生成または編集するときに、コマンドラインで渡された S2K パラメーターまたは ​gpg.conf​ に保存された S2K パラメーターは適用されません。

  • gpg-agent​ では内部的なデフォルト (通常は AES128 と SHA1) が使用されます。これらを変更するための設定インターフェースはありません。

代替策: Bouncy Castle を使用してキーをプログラムで生成

秘密鍵を AES256 や SHA256 などの特定のアルゴリズムで保護する場合、Java と Bouncy Castle を使用して秘密鍵を直接作成します。

この方法では、次を完全に制御できます。

  • 暗号化アルゴリズム: AES-256

  • ハッシュダイジェスト: SHA-256

  • S2K モード: 反復およびソルト (モード 3)

  • 反復回数: 65,000,000 など

例:

new JcePBESecretKeyEncryptorBuilder(PGPEncryptedData.AES_256, sha256Calc)
  .setProvider("BC")
  .build(password.toCharArray());

この方法では FIPS 準拠の保護が保証されるため、自動化または制御された環境に適しています。

キーリングを使用するように Cryptography Module を設定

署名および検証用に生成されたキーリングを使用するように Cryptography Module を設定します。

  1. secring_example.aes.gpg​ と ​pubring_example_aes.gpg​ を Mule プロジェクトの ​src/main/resources​ フォルダーまたはオンプレミスサーバー内の場所にコピーします。

  2. Cryptography Module の PGP 操作で使用する次のような pop 設定を作成します。

<crypto:pgp-config name="pgpConfig-aes" publicKeyring="pubring_example_aes.gpg" privateKeyring="secring_example_aes.gpg">
        <crypto:pgp-key-infos>
            <crypto:pgp-asymmetric-key-info keyId="validation" fingerprint="5F46261934B56AF2" passphrase="mule1234"/>
            <crypto:pgp-asymmetric-key-info keyId="signature"
                                            principal="TestName &lt;test@example.com&gt;"/>
        </crypto:pgp-key-infos>
    </crypto:pgp-config>

Cryptography Module の PGP 操作に関する注意事項:

  • 検証に使用するフィンガープリントは、前の例で示されているように、完全な値または末尾の 16 文字とすることができます。

  • 署名操作で、署名されたコンテンツの生成に失敗した場合、FIPS 環境では実行時に org.mule.runtime.api.exception.MuleRuntimeException がスローされることがあります。これは、InputStream が空または破損している場合や、キーリングまたは生成された PGP キーで非準拠の暗号化が設定されている場合に発生する可能性があります。キーリングとキーがこの移行ガイドのガイドラインに従っていることを確認してください。

  • DSA は FIPS 準拠の暗号化ではないため、DSA 暗号化は許可されません。

  • FIPS 環境の暗号化で ECDSA または RSA PKCS v1.5 アルゴリズムは許可されなくなりました。これらのアルゴリズムで PGP Encrypt 操作を使用した場合、次のエラーが表示されます。

    • 「RSA PKCS#1 v1.5 encryption disallowed (RSA PKCS#1 v1.5 暗号化は許可されません)」

    • 「Can’t use ECDSA for encryption (暗号化で ECDSA は使用できません)」

    • 「ElGamal KeyFactory not available (ElGamal KeyFactory は使用できません)」

  • PKCS#1 v1.5 を使用する RSA 暗号化も FIPS モードでは無効です。​-Dorg.bouncycastle.rsa.allow_pkcs15_enc=true​ を使用してこれを再度有効化できますが、有効化しないで厳格な FIPS 準拠を維持できるようにしてください。これが必要であり、セキュリティの影響を理解している場合のみ、有効化してください。

Sign、Encrypt、および Decrypt 操作で異なるキーペアを使用

特に Bouncy Castle FIPS をセキュリティプロバイダーとして使用している場合や、Mule アプリケーションを MuleSoft Government Cloud で実行している場合、同じキーペアを使用すると、次のエラーが表示される可能性があります。

org.mule.runtime.api.component.execution.ComponentExecutionException:
org.bouncycastle.crypto.IllegalKeyException: Attempt to sign/verify with RSA modulus already used for encrypt/decrypt

このため、Sign、Encrypt、および Decrypt 操作で異なるキーペアを使用します。

パスワードベースの暗号化の使用

FIPS 対応の環境を使用する場合、PBEWith で始まるパスワードベースの暗号化 (PBE) アルゴリズムはセキュリティ制限のためサポートされなくなりました。例:

  • PBEWithSHA1AndRC2_40

  • PBEWithSHA1AndRC2_128

  • PBEWithSHA1AndRC4_128

  • PBEWithSHA1AndRC4_40

  • PBEWithMD5AndDES

  • PBEWithMD5AndTripleDES

  • PBEWithSHA1AndDESede

コンプライアンスを確保するには、FIPS モードのすべてのパスワードベースの暗号化実装が次のルールに従う必要があります。

  • パスワードは 16 文字以上にする必要があります。

  • すべての PBE 操作でパスワード SALT は必須です。このパスワードは 16 文字以上にする必要があります。さらに、セキュリティを強化するには、設定した操作ごとにパスワード SALT を変更する必要があります。

  • 署名および検証の場合、デフォルトのアルゴリズムは PBKDF2withHmacSHA512 です。

  • 暗号化または復号化の場合、デフォルトのアルゴリズムは PBKDF2withHmacSHA512​AES256​CBC__PKCS5Padding です。

  • FIPS 環境の JCE PBE 操作には、パスワード SALT と反復回数の両方が必要です。すべての PBE 操作でこれらの値を提供するようにモジュール設定を更新する必要があります。SALT と反復回数なしで暗号化されたデータがある場合は、次のオプションがあります。

    • FIPS モード外で復号化します。

    • com.mulesoft.crypto.allow-default-kdf-params​ システムプロパティを一時的に有効にして FIPS 内で復号化してから、新しい設定を使用して再度暗号化します。また、FIPS 環境で ​com.mulesoft.crypto.allow-sun-pbe-in-fips`​ システムプロパティを有効にして、SUN アルゴリズムの使用を許可する必要があります。

アルゴリズムの動的な指定

Cryptography Module バージョン 2.0.0 では、動的アルゴリズム定義がサポートされ、値プロバイダーに表示されている使用可能な値の定義済みリストの連動関係が削除されることで、柔軟性が向上します。

動的アルゴリズム定義は次の 2 つの方法で指定できます。

  • 使用している環境の登録済みセキュリティプロバイダーで使用できる完全な変換文字列 (​PBEWithHmacSHA256AndAES_128​、​PBEwithSHA1and3-KeyDESede​ など) として指定します。

  • バージョン 2.0.0 で導入されたカスタムアルゴリズム形式 (詳細は次のセクションを参照) として指定します。

Mule Runtime の ​Security.getProviders()​ リストに含まれないアルゴリズムでは、ランタイムエラーになります。必要に応じて、必要な暗号化プロバイダー (BouncyCastle FIPS、BC non-FIPS など) を Mule アプリケーションのクラスパスまたはセキュリティ設定に含めていることを確認してください。

カスタムアルゴリズム形式の使用

特に FIPS 環境で、最新の暗号化設定の強化されたサポートを有効にするため、Cryptography Module 2.0.0 では、キー導出と暗号化コンポーネントを分離するカスタムアルゴリズム形式が導入されます。

形式: PBKDF2withHmac<digest>​AES<keyLength>​<mode>__<padding>

例: PBKDF2withHmacSHA512​AES256​CBC__PKCS5Padding

この形式の機能:

  • FIPS で承認された暗号化プロファイルとの完全な互換性が確保されます。

  • キーの長さ、ブロックモード、パディングの明示的な定義が提供されます。

  • コネクタコードや Studio 設定を変更することなく将来の拡張に対応します。

4 つすべてのコンポーネントを定義する必要があります。デフォルトは想定されません。コンポーネントがないか無効な場合、検証は失敗します。

コンポーネント 説明

PBKDF2withHmac<digest>

HMAC + SHA512 を使用するキー導出関数 (KDF)

AES<keyLength>

キーサイズ (128、192、256) を使用する暗号化アルゴリズム

mode

暗号化ブロックモード (CBC、GCM など)

padding

パディングスキーム (PKCS5Padding、NoPadding など)

さらに、暗号化保証を強化するようにデフォルトのアルゴリズム値が更新されています。

操作 デフォルト値、Cryptography Module バージョン 1.x デフォルト値、Cryptography Module バージョン 2.x

Encrypt​ または ​Decrypt

PBEWithHmacSHA256AndAES_128

PBKDF2withHmacSHA512​AES256​CBC__PKCS5Padding

Sign​ または ​Validate

PBEWithHmacSHA256

`PBKDF2withHmacSHA512

XMLDSig セキュリティプロバイダーの登録

XML 署名を含む暗号化操作 (XML Sign、XML Encrypt、XML Decrypt、XML Validate など) には、XMLDSig セキュリティプロバイダー (org.jcp.xml.dsig.internal.dom.XMLDSigRI) が必要です。これは、通常は Apache Santuario により提供されます。

FIPS 準拠の環境では、より厳格なセキュリティポリシーのため、このプロバイダーはデフォルトでは使用できないまたは登録されていない場合があります。

これらの XML 関連暗号化操作を有効にするには、次のシステムプロパティを明示的に設定している場合、モジュールでプロバイダーを登録することができます。

-Dcom.mulesoft.connectors.allow-registration-of-xmldsig-provider-in-fips`

このアクションによりプロバイダーが JVM レベルで登録され、同じ JVM で実行されているすべての Mule アプリケーションでプロバイダーをグローバルに使用できるようになります。Mule アプリケーションで XML 署名または暗号化サポートを明示的に要求しており、プロバイダーがまだ存在しない場合のみ、この設定を使用します。

KDF パラメーターなしで Decrypt または Validate 操作の互換性の有効化

Cryptography Module バージョン 2.0 では、パスワードベースの暗号化操作で SALT パラメーターと ​iterationCount​ パラメーターの両方の設定が適用されるようになり、セキュリティが強化されます。

SALT と ​iterationCount​ が必須ではなかった Cryptography Module バージョン 1.x を使用して暗号化または署名されたデータが Mule アプリケーションで引き続き暗号化または検証されるようにするには、次のシステムプロパティをアクティブ化します。

com.mulesoft.crypto.allow-default-kdf-params=true
com.mulesoft.crypto.allow-sun-pbe-in-fips=true  (only necessary when running in a FIPS-enabled environment)

これらのシステムプロパティをアクティブ化すると、次の条件下で互換モードが有効になります。

  • 操作が Decrypt または Validate のいずれかである。

  • 暗号化アルゴリズムが Sun の PBE スキーム (​PBEWithHmacSHA1AndAES_128​ など) に基づいている。

  • SALT または ​iterationCount​ のいずれのパラメーターも明示的に指定されていない (null または空)。

SALT または ​iterationCount​ のいずれかのパラメーターを指定した場合、モジュールはバージョン 2.x 互換を対象とし、操作を意図的に失敗させて整合性のない動作を回避します。

この互換モードは、既存のデータを処理するための一時的なソリューションとして意図されています。新規データのために、Cryptography Module バージョン 2.x で必要とされる SALT と ​iterationCount​ の両方を必ず設定して、最適なセキュリティと動作を実現してください。

必須のキーストアとトラストストア種別として BCFKS の使用

セキュリティコンプライアンスを強化するには、FIPS モードで実行するすべての Mule アプリケーションで Bouncy Castle FIPS キーストア (BCFKS) 種別が必須です。既存の Java KeyStore (JKS) または Public-Key Cryptography Standards #12 (PKCS12) のキーストアとトラストストアを BCFKS に移行して、これらの新しいファイルを参照するように mule-cryptography-module 設定を更新する必要があります。

  1. Bouncy Castle FIPS プロバイダーをダウンロードします。

curl -o $JAVA_HOME/jre/lib/ext/bc-fips-1.0.2.5.jar https://repo1.maven.org/maven2/org/bouncycastle/bc-fips/1.0.2.5/bc-fips-1.0.2.5.jar
  1. JKS キーストアでは、次の keytool コマンドを実行します (​<keystore_password>​ を現在のキーストアパスワードに置き換えて、必要に応じてファイルパスを調整します)。

sudo /absolute/path/to/keytool_command/keytool -importkeystore -srckeystore /absolut/path/to/your/keystore/keystore.jks -srcstoretype JKS -srcstorepass changeit -destkeystore /absolute/path/to/new/keystore/keystore.bcfks -storepass <keystore_password> -deststoretype BCFKS -providerclass org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider -providerpath /absolut/path/to/bcfips-1.0.2.5.jar

PKCS12 キーストアでは、現在のキーストアの形式が PKCS12 の場合、単に前のコマンドの -srcstoretype JKS を -srcstoretype PKCS12 に置き換えます。

FIPS 環境では、JKS は証明書のみを保存でき、非公開鍵または秘密鍵を保持することはできません。Bouncy Castle FIPS では、JKS はデフォルトでは有効になっていません。JKS を使用するには、システムプロパティを設定して JKS を有効にします。

org.bouncycastle.jca.enable_jks=true`

JKS はデフォルトのキーストア種別ではなくなりました。このキーストア種別を明示的に選択する必要があります。FIPS 環境では、BCFKS が必要です。