2013-07-21 4 views
1

Фон: Я использую алгоритм PBEWITHSHA256AND128BITAES-CBC-BC (Bouncy Castle) с Jasypt через Grails plugin. Конфигурация проста:Создайте надежный пароль для AES

jasypt { 
    algorithm = "PBEWITHSHA256AND256BITAES-CBC-BC" 
    providerName = "BC" 
    password = "<your very secret passphrase>" 
    keyObtentionIterations = 1000 
} 

Я хотел бы знать, как выбрать безопасный пароль для вышеуказанного. Существуют ли реальные или практические ограничения на длину, ограниченные символы и т. Д.? Какой конкретный генератор я должен использовать? Я не мог найти четкую документацию по этому поводу, и все примеры используют что-то вроде выше (например, «пароль», «секрет» и т. Д.).

+3

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

+0

Спасибо, но немой вопрос, это ваше предложение, характерное для Jasypt? Потому что я не могу найти ничего в документах, которые покрывают шифрование текста без PBE. Если я пропустил это, и есть документы, касающиеся вашего предложения, можете ли вы указать мне их? – Philip

+0

Это был общий комментарий. Я не знаком с Jasypt, но похоже, что он поддерживает только PBE, что немного странно. – ntoskrnl

ответ

2

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

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

Это компромисс, который стоит того, чтобы вместо сырых ключей требовались пароли. Однако в вашем случае было бы лучше использовать необработанный ключ. К сожалению, кажется, что библиотека Jasypt, которую вы используете, поддерживает только PBE.

Чтобы содержать не менее 256 бит энтропии (столько, сколько необработанный случайный 256-битный ключ), the password has to contain at least 43 random (case-sensitive) alphanumeric characters. Если вы выберете длинный пароль, вы можете уменьшить счетчик итераций до 1.

Мне кажется странным, что вам нужно все это продумать, даже если вы используете библиотеку, в которой вы должны быть способны использовать «без необходимости иметь глубокие знания о том, как работает криптография». Почему он раскрывает все уродливые детали, если пользователи не должны знать, что они собой представляют?

+0

Спасибо, очень информативно и полезно. Кажется, Jasypt имеет некоторые значения по умолчанию, которые, вероятно, делают его достаточно хорошим для шифрования, не знающего (в основном текстовом шифровании используются MD5 и DES, а сильные использует MD5 и Triple DES, причем с 1000 итерациями). Но они не дают понять, насколько это хорошо (или нет), поэтому мне пришлось смеяться (и соглашаться) с вашей оценкой. Я буду генерировать пароль с KeePass в соответствии с вашими требованиями. – Philip

+1

DES? Triple-DES? Авторы должны быть полными любителями. DES может быть грубо принудительно на домашнем компьютере в течение нескольких дней, и DES, и Triple-DES медленнее, чем AES. MD5 также считается сломанным для криптографического использования.Кто знает, какие другие любительские ошибки содержит эта библиотека, я бы держался подальше от нее. – ntoskrnl

+0

Еще раз спасибо за информацию и прозрение. Я думаю, что я был бы в безопасности с вышеупомянутым алгоритмом/реализацией Bouncy Castle (SHA256 и AES 256, 1000 итераций), нет? Это соответствует следующему: http://www.jasypt.org/bouncy-castle.html. Чтобы быть справедливым для Jasypt, похоже, что это решение интеграции (Hibernate и т. Д.), А не шифрование (делегаты JCE, Bouncy Castle). Но, как вы рекомендуете, я уменьшу итерации и увеличу пароль до 43 символов буквенно-цифровых. – Philip

0

Для создания защищенной кодовой фразы, посмотрите на сайт Diceware. Обратите внимание, что вы должны выполнить работу вручную, а не использовать компьютер.

+0

Спасибо, но я только забочусь о максимальной силе, а не о запоминаемости. – Philip

+0

Чтобы сделать его сильнее, сделайте его длиннее. Десять слов (две фразы из пяти слов) дадут вам около 128 бит безопасности, если вы используете настоящие кости, а не PRNG. Часто задаваемые вопросы по Diceware полезны. – rossum

Смежные вопросы