Безопасность Java: недопустимый размер ключа или параметры по умолчанию? - PullRequest
385 голосов
/ 26 июня 2011

Я задавал вопрос по этому поводу ранее, но он не получил правильного ответа и ни к чему не привел.

Итак, я прояснил несколько деталей по проблеме, и мне очень хотелось бы услышать ваши идеи покак я могу это исправить или что я должен попробовать.

У меня Java 1.6.0.12 установлен на моем сервере Linux, и код ниже работает просто отлично.

String key = "av45k1pfb024xa3bl359vsb4esortvks74sksr5oy4s5serondry84jsrryuhsr5ys49y5seri5shrdliheuirdygliurguiy5ru";
try {
    Cipher c = Cipher.getInstance("ARCFOUR");

    SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "ARCFOUR");
    c.init(Cipher.DECRYPT_MODE, secretKeySpec);

    return new String(c.doFinal(Hex.decodeHex(data.toCharArray())), "UTF-8");

} catch (InvalidKeyException e) {
    throw new CryptoException(e);
}

Сегодня я установил Java 1.6.0.26 на моем сервере, и при попытке запустить приложение я получаю следующее исключение.Я предполагаю, что это как-то связано с установочной конфигурацией Java, потому что она работает в первой, но не работает в более поздней версии.

Caused by: java.security.InvalidKeyException: Illegal key size or default parameters
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]
    at my.package.Something.decode(RC4Decoder.java:25) ~[my.package.jar:na]
    ... 5 common frames omitted

Строка 25 is: c.init(Cipher.DECRYPT_MODE, secretKeySpec);

Примечания:
* java.security на сервере 1.6.0.12 java-каталог почти полностью совпадает с 1.6.0.26 файл java.security.В первом списке нет дополнительных провайдеров.
* Предыдущий вопрос здесь .

Ответы [ 18 ]

4 голосов
/ 15 декабря 2011

Я также получил проблему, но после замены существующей на загруженную (из JCE) одна решила проблему. Новые крипто-файлы обеспечивают неограниченную силу.

2 голосов
/ 12 января 2016

По умолчанию Java поддерживает только 128-битный (16 байт) размер ключа AES для шифрования.Если вам не нужно больше, чем поддерживается по умолчанию, вы можете обрезать ключ до нужного размера перед использованием Cipher.См. javadoc для поддерживаемых ключей по умолчанию.

Это пример генерации ключа, который будет работать с любой версией JVM без изменения файлов политики.Используйте по своему усмотрению.

Вот хорошая статья о том, имеют ли значение значения ключа от 128 до 256 в Блог AgileBits

SecretKeySpec getKey() {
    final pass = "47e7717f0f37ee72cb226278279aebef".getBytes("UTF-8");
    final sha = MessageDigest.getInstance("SHA-256");

    def key = sha.digest(pass);
    // use only first 128 bit (16 bytes). By default Java only supports AES 128 bit key sizes for encryption.
    // Updated jvm policies are required for 256 bit.
    key = Arrays.copyOf(key, 16);
    return new SecretKeySpec(key, AES);
}
2 голосов
/ 21 июля 2018

Если вы используете дистрибутив Linux с apt и добавили PPA webupd8, вы можете просто запустить команду

apt-get install oracle-java8-unlimited-jce-policy

Другие обновления:

  1. Файлы политики неограниченной юрисдикции включены в Java 9 и используются по умолчанию
  2. Начиная с Обновление Java 8 161 , Java 8 по умолчанию имеет Неограниченную силуПолитика юрисдикции.
  3. Начиная с Java 8 Update 151 , политика неограниченной юрисдикции включена в Java 8, но по умолчанию не используется.Чтобы включить его, вам нужно отредактировать файл java.security в <java_home>/jre/lib/security (для JDK) или <java_home>/lib/security (для JRE).Раскомментируйте (или включите) строку

    crypto.policy=unlimited

    Убедитесь, что вы редактировали файл с помощью редактора, запускаемого от имени администратора.Изменение политики вступает в силу только после перезапуска JVM

До Обновление Java 8 151 Остальные ответы остаются действительными.Загрузите файлы политики JCE Unlimited Strength Jurisdiction и замените их.

Более подробную информацию можно найти в моем личном блоге ниже - Как установить файлы политики неограниченной силы Java Cryptography Extension (JCE)

2 голосов
/ 16 марта 2018

Начиная с Java 9 или 8u151, вы можете использовать комментарий строки в файле:

<JAVA_HOME>/jre/lib/security/java.security

И изменить:

#crypto.policy=unlimited

до

crypto.policy=unlimited
1 голос
/ 25 июня 2018

есть два варианта решения этой проблемы

вариант № 1: использовать сертификат меньшей длины RSA 2048

вариант № 2: вы обновите две банки в jre\lib\security все, что вы используете Java http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html

или вы используете IBM websphere или любой сервер приложений, использующий его Java. основная проблема, с которой я столкнулся, я использовал сертификацию с максимальной длиной, когда я развернул уши на веб-сфере, выдается то же исключение

Java Security: Illegal key size or default parameters?

я обновил вложенную папку Java в websphere с двумя банками https://www14.software.ibm.com/webapp/iwm/web/reg/pick.do?source=jcesdk&lang=en_US

Вы можете проверить ссылку в ссылке https://www -01.ibm.com / support / docview.wss? Uid = swg21663373

1 голос
/ 15 сентября 2017

JDK по умолчанию поддерживает шифрование только через 128-битные ключи из-за американских ограничений.Таким образом, для поддержки шифрования ключа длиной 256 бит мы должны заменить local_policy.jar и US_export_policy.jars в папке $JAVA_HOME/java-8-oracle/jre/lib/security, иначе это даст:

java.security.InvalidKeyException: недопустимый размер ключа или значение по умолчанию

И банку, и детальную концепцию можно понять по ссылке:

easybook4u.com

0 голосов
/ 05 июля 2019

Убедитесь, что вы используете последнюю версию JDK / JRE .

В моем случае я поместил JCE в папку JRE, но это не помогло. Это произошло потому, что я запускал свой проект из IDE напрямую (используя JDK).

Затем я обновил JDK и JRE до последней версии (1.8.0_211), и проблема исчезла.

Подробнее: https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8170157

0 голосов
/ 11 февраля 2019

Вам нужно идти туда

/ jdk1.8.0_152 | / JRE | / Lib | /безопасность | java.security и раскомментируйте

#crypto.policy=unlimited

до

crypto.policy=unlimited
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...