Каковы риски безопасности при использовании библиотеки упрощенного шифрования Java?

Я унаследовал код, который использует библиотеку Java упрощенного шифрования Java (Jasypt). В частности, только класс StandardPBEStringEncryptor.

import org.jasypt.encryption.pbe.StandardPBEStringEncryptor;

Есть ли какие-либо угрозы безопасности при использовании класса StandardPBEStringEncryptor? Есть ли более безопасная альтернатива?

3 ответа

Существуют ли угрозы безопасности с использованием класса StandardPBEStringEncryptor

Jasypt на самом деле не реализует какие-либо алгоритмы безопасности или шифрования, а вместо этого делегирует другим поставщикам шифрования. Таким образом, нет никаких дополнительных угроз безопасности, которых еще не было в той библиотеке, которую вы используете. Я думаю, что по умолчанию Jasypt использует JCE (Java Cryptography Extension), который поставляется с Java.

Есть ли более безопасная альтернатива?

Jasypt API может использовать других провайдеров безопасности, включая Bouncy Castle. Bouncy Castle имеет больше алгоритмов, чем то, что поставляется с JCE.

Как указано в примере с Ясыптом

StandardPBEStringEncryptor myFirstEncryptor = new StandardPBEStringEncryptor();
myFirstEncryptor.setProvider(new BouncyCastleProvider());
myFirstEncryptor.setAlgorithm("PBEWITHSHA256AND128BITAES-CBC-BC");
myFirstEncryptor.setPassword(myPassword);

String myFirstEncryptedText = myFirstEncryptor.encrypt(myText);

Цель Jasypt - инкапсулировать передовые методы обеспечения безопасности при использовании технологии шифрования, чтобы люди, не знакомые с шифрованием, могли быть достаточно безопасны при развертывании такой технологии. Он делает выбор между CBC против ECB и 68 бит против 128 бит против 256 бит и другие детали более низкого уровня для вас. Иногда неправильный выбор этих низкоуровневых данных может повлиять на безопасность вашего приложения (читай, кто-то может взломать его). Jaspyt помогает минимизировать такие возможности, предоставляя вам лучшие варианты для обеспечения безопасности. В некотором смысле это менее рискованно, чем прямое использование JCE или Bouncy Castle.

В своих часто задаваемых вопросах они обращаются к вашему вопросу напрямую:

http://www.jasypt.org/faq.html

Если статья документации Как шифровать пароли пользователей является чем-то подходящим для кода, вероятно, приемлемо, но не в курсе современных передовых методов, поскольку она рекомендует повторять SHA1 или MD5. Хотя вы можете сами изменить алгоритмы на что-то вроде PBKDF2 или bcrypt, это, по крайней мере, признак того, что другие части также могут не обновляться.

Вот мысленный эксперимент о том, почему SHA1 не является хорошим выбором. Для чего оптимизированы MD5 и SHA-X? Определенно не медлительность, а именно то, что вы хотите от алгоритма хеширования пароля. Вы не хотите, чтобы это было быстро взломано, вы хотите, чтобы это заняло время. Почему вы не должны использовать SHA1 или MD5 для хранения паролей

Тем не менее, вы действительно не хотите делать это сами. Поиск хорошей библиотеки или эксперта может спасти вас от некоторых ошибок, которые легко сделать с помощью криптографии. Вам лучше использовать эту библиотеку, чем делать это самостоятельно.

Другие вопросы по тегам