Я делаю шифрование файлов на основе пароля в Java; Я использую AES в качестве базового алгоритма шифрования и PBKDF2WithHmacSHA1
, чтобы получить ключ от комбинации соли и пароля, используя следующий код (который я получил от другого щедрого плаката на этом сайте).Проверка пароля с помощью PBKDF2 в Java
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 поддержку этого или нет, что было бы безопасной альтернативой?
Спасибо за ваше время.
Привет, спасибо за ваш ответ. У меня создалось впечатление, что цель PBKDF2 и его повторное объединение соли и пароля для получения ключа заключалась в том, чтобы сделать процесс вычисления ключа из обычного текстового пароля дорогостоящим и, следовательно, сделать атаки стиля словаря более сложными. Как я уже сказал, спецификация PBKDF2 включает в себя необязательное значение проверки пароля, я просто не знаю, как это получить в реализации Java. – PinkyNoBrain
Я согласен с тем, что возможность быстрой проверки после завершения процесса процесса деривации ключей упрощает атаку грубой силы, так как злоумышленнику не нужно фактически расшифровывать что-либо, чтобы проверить там ключ, но я бы подумал, что большое пространство поиска из 256-битных ключей AES в любом случае, делает атаку чистой грубой силы запрещенной? – PinkyNoBrain
@pinkynobrain: проблема с быстрой проверкой заключается в том, что он значительно сжимает ключевое пространство: у вас есть быстрый способ узнать все фразы, для которых выполняется быстрая проверка. Таким образом, у вас гораздо меньше ключей для перебора AES. –