1. Обзор
В этом руководстве мы узнаем, почему файлы политик неограниченной надежности Java Cryptography Extension (JCE) не всегда включены по умолчанию. Кроме того, мы объясним, как проверить криптографическую стойкость. После этого мы покажем, как включить неограниченную криптографию в разных версиях Java.
2. Файлы политики неограниченной прочности JCE
Давайте разберемся, что означает криптостойкость . Он определяется сложностью обнаружения ключа, которая зависит от используемого шифра и длины ключа. Как правило, более длинный ключ обеспечивает более надежное шифрование. Ограниченная криптографическая стойкость использует максимальный 128-битный ключ. С другой стороны, неограниченный использует ключ максимальной длины 2 147 483 647 бит.
Как мы знаем, JRE сама содержит функции шифрования. JCE использует файлы политик юрисдикции для контроля криптографической стойкости . Файлы политик состоят из двух банок: local_policy.jar
и US_export_policy.jar
. Благодаря этому платформа Java имеет встроенный контроль криптографической стойкости.
3. Почему файлы политики неограниченной прочности JCE не включены по умолчанию
Во-первых, только старые версии 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 подкаталога: limited
и limited
. Первый содержит файлы политик ограниченной силы. Второй содержит неограниченные.
6. Как включить криптографию неограниченной силы
Давайте теперь посмотрим, как мы можем обеспечить максимальную криптографическую стойкость. Существуют разные способы сделать это в зависимости от используемой версии Java.
6.1. Обработка до версии Java 8u151
До версии 8u151 JRE содержала только файлы политик ограниченной надежности . Мы должны заменить его на неограниченную версию с сайта Oracle.
Сначала скачиваем файлы для Java 8, которые доступны здесь. Далее распаковываем скачанный пакет, который содержит local_policy.jar
и US_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 .