1. 概要

このチュートリアルでは、Java暗号化拡張機能(JCE)の無制限の強度のポリシーファイルがデフォルトで常に有効になっているとは限らない理由を学習します。 さらに、暗号強度を確認する方法についても説明します。 その後、Javaのさまざまなバージョンで無制限の暗号化を有効にする方法を示します。

2. JCE無制限強度ポリシーファイル

暗号強度の意味を理解しましょう。 これは、使用される暗号とキーの長さに依存する、キーの検出の難しさによって定義されます。 一般に、キーが長いほど暗号化が強化されます。 制限された暗号強度は、最大128ビットのキーを使用します。 一方、無制限のものは、最大長2147483647ビットのキーを使用します。

ご存知のとおり、JREには暗号化機能自体が含まれています。 JCEは、管轄ポリシーファイルを使用して暗号強度を制御しますポリシーファイルは、local_policy.jarとUS_export_policy.jarの2つのjarで構成されています。 そのおかげで、Javaプラットフォームには暗号強度の制御が組み込まれています。

3. JCEUnlimitedStrengthポリシーファイルがデフォルトで含まれていない理由

まず、JREの古いバージョンのみに無制限の強度のポリシーファイルが含まれていません。 JREバージョン8u151以前では、制限されたポリシーファイルのみがバンドルされています。 対照的に、Javaバージョン8u151以降、無制限および制限付きのポリシーファイルがJREで提供されます。 理由は簡単です。一部の国では暗号強度を制限する必要があります。国の法律で無制限の暗号強度が許可されている場合、Javaのバージョンに応じてバンドルまたは有効にすることができます。

4. 暗号強度を確認する方法

暗号強度を確認する方法を見てみましょう。 許可されている最大キー長を確認することで、これを行うことができます。

int maxKeySize = javax.crypto.Cipher.getMaxAllowedKeyLength("AES");

ポリシーファイルが制限されている場合は、128を返します。 一方、2147483647を返す場合、JCEは無制限のポリシーファイルを使用します。

5. ポリシーファイルはどこにありますか

Javaバージョン8u151以前では、 JAVA_HOME / jre / lib/securityディレクトリにポリシーファイルが含まれています。

バージョン8u151以降、JREはさまざまなポリシーファイルのセットを提供します。その結果、JREディレクトリ JAVA_HOME / jre / lib / security / policy には2つのサブディレクトリがあります:[X193X ]limitedおよびunlimited。 最初のものには、制限された強度のポリシーファイルが含まれています。 2つ目は無制限のものが含まれています。

6. 無制限の強度の暗号化を有効にする方法

ここで、最大の暗号強度を有効にする方法を見てみましょう。 使用しているJavaのバージョンに応じて、さまざまな方法でそれを行うことができます。

6.1. Javaバージョン8u151より前の処理

バージョン8u151より前のバージョンでは、JREには限られた強度のポリシーファイルのみが含まれています。 Oracleサイトの無制限バージョンに置き換える必要があります。

まず、ここで入手できるJava 8のファイルをダウンロードします。次に、local_policy.jarUS_export_policy.jarを含むダウンロードしたパッケージを解凍します。

最後に、これらのファイルを JAVA_HOME / jre / lib/securityにコピーします。

6.2. Javaバージョン8u151以降の処理

Javaバージョン8u151以降では、JCEフレームワークはデフォルトで無制限の強度のポリシーファイルを使用します。 さらに、使用するバージョンを定義する場合は、セキュリティプロパティ crypto.policy:があります。

Security.setProperty("crypto.policy", "unlimited");

JCEフレームワークの初期化の前にプロパティを設定する必要があります。ポリシーファイルのJAVA_HOME/ jre / lib / security /policyの下にディレクトリを定義します。

まず、セキュリティプロパティが設定されていない場合、フレームワークはレガシーロケーション JAVA_HOME / jre / lib /securityでポリシーファイルをチェックします。 ただし、デフォルトでは、新しいバージョンのJavaでは、従来の場所にポリシーファイルはありません。 JCEは、古いバージョンと互換性がある最初のものとしてそれをチェックします。

次に、jarファイルがレガシーロケーションに存在せず、プロパティが定義されていない場合、JREはデフォルトで無制限のポリシーファイルを使用します。

7. 結論

この短い記事では、JCE無制限強度ポリシーファイルについて学びました。 最初に、古いバージョンのJavaで無制限の暗号強度がデフォルトで有効になっていない理由を調べました。 次に、最大キー長をチェックして暗号強度を決定する方法を学びました。 最後に、さまざまなバージョンのJavaでそれを有効にする方法を見ました。

いつものように、例のソースコードはGitHubから入手できます。