2017-01-20 8 views
0

Обычно пароль представляет собой произвольные строки, такие как «abc», «1234». Но для алгоритма шифрования, такого как DES, требуется секретный ключ фиксированной длины. Я хотел бы знать, как преобразовать пароль переменной длины в секретный ключ фиксированной длины с подтвержденным способом.Как преобразовать пароль переменной длины в секретный ключ фиксированной длины

ответ

1

Вам необходимо использовать значение соли (для предотвращения атак со словарями) и хорошую функцию отклонения ключа, такую ​​как scrypt, bcrypt или PBKDF2.

Если вы используете только хеш-функцию для генерации ключа, то есть много шансов, что сгенерированные ключи - SHA256 («abcd») или SHA256 («пароль»). То есть, этот метод очень уязвим для нападений грубой силы.

3

Получение ключей шифрования из паролей с помощью функции определения пароля на основе пароля: PBKDF2 (aka Rfc2898DeriveBytes). Используйте случайную соль и счетчик итераций, так что вывод занимает около 100 мс времени вычисления.

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

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

Суть заключается в том, чтобы злоумышленник потратил много времени на поиск паролей грубой силой.

+0

«около 100 мс времени вычисления» ... на каком оборудовании, на каком уровне параллельных вычислительных ресурсов, ...? –

+0

100 мс на производственной машине, то есть о правильном использовании человеком. Конечно, более быстрый компьютер будет работать лучше, но по сравнению с <1us для SHA512 существует большой штраф за атакующего, в 100 000 раз медленнее. См. NIST [Рекомендация для деривации ключа на основе пароля] (http://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf), вот выдержка: * Количество итераций должно быть установлено как высокое как это может быть допущено для окружающей среды, при сохранении приемлемой производительности. * – zaph