Проверка пароля с PBKDF2 в Java

Я делаю основанное на пароле шифрование файлов в Java; я использую AES в качестве базового алгоритма шифрования и PBKDF2WithHmacSHA1 получить ключ из соли и комбинации пароля с помощью следующего кода (который я получил из другого щедрого плаката на этом сайте).

SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec ks = new PBEKeySpec(password,salt,1024,128);
SecretKey s = f.generateSecret(ks);
Key k = new SecretKeySpec(s.getEncoded(),"AES");

Я совместно использую соль, пользователь вводит их пароль в каждом конце, и шифрование и дешифрование хорошо работают :-) Моя проблема состоит в том, что я хотел бы смочь проверить, что пароль, который вводит пользователь, является правильным перед осуществлением (потенциально долгого) процесса дешифрования. Я знаю, что спецификация PBKD включает дополнительное 2-байтовое значение проверки, но я не уверен, как сгенерировать это значение с помощью вышеупомянутого подхода. Java оказывает поддержку для этого или если не, какова была бы безопасная альтернатива?

Спасибо за внимание.

18
задан Andrew 26 March 2014 в 18:16
поделиться

3 ответа

Эй, спасибо сумасшедшему Скоту и Крису за помощь. Покопавшись, я решил использовать методы, описанные на странице шифрования файлов Dr Gladmans , как для проверки пароля, так и для аутентификации сообщений. Я считаю, что этот метод, основанный на PBKDF2 и MAC, делает получение значения верификации для пароля достаточно дорогостоящим, чтобы сделать его безопасным. Еще раз спасибо, и я надеюсь, что это решение поможет другим.

4
ответ дан 30 November 2019 в 09:30
поделиться

Не существует механизма "быстрой проверки", который был бы безопасен по определению. Весь смысл использования PBKDF2 или связанных с ним техник в том, чтобы сделать проверку пароля медленной, чтобы помешать программам взлома паролей. Если бы вы добавили систему быстрой проверки, взломщики паролей смогли бы угадывать пароли в массовом порядке очень быстро.

5
ответ дан 30 November 2019 в 09:30
поделиться

Вычислите некую метку проверки пароля и храните ее рядом с данными зашифрованного файла, чтобы вы могли сначала проверить ее. Это может быть что-то вроде PBMAC фиксированной (короткой) строки. Конечно, это должна быть необратимая функция, чтобы взломщик не смог определить пароль, и не слишком быстрое вычисление, чтобы сбить с толку атаку грубой силы.

Вы подумали о том, сможете ли (и как) вы определить, правильно ли расшифрован весь файл? Возможно, вам следует рассмотреть какую-то комбинацию PBES2 и PBMAC, а не использовать AES напрямую.

2
ответ дан 30 November 2019 в 09:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: