Проверка пароля с помощью PBKDF2 в Java - PullRequest
18 голосов
/ 04 марта 2010

Я делаю парольное шифрование файлов в 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 ]

5 голосов
/ 04 марта 2010

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

4 голосов
/ 06 марта 2010

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

2 голосов
/ 04 марта 2010

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

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

...