Проверка пароля с помощью 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 это или нет, что может быть безопасной альтернативой?

Спасибо за ваше время.

3 ответа

Решение

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

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

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

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

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