Есть ли способ проверить хэши bcrypt, созданные PHP, с помощью Spring Security? - PullRequest
0 голосов
/ 31 октября 2018

Контекст

Я имею дело с системой PHP, использующей обновленный алгоритм bcrypt (поскольку в базовом алгоритме была известная уязвимость).

Так что функция PHP password_hash теперь генерирует хэши с префиксом $2y$, так как старые (с префиксом $2a) были уязвимы.

Spring Security BCrypt , который я использую в другой системе Java, генерирует оригинальные хэши формата $2a$ в качестве базовой реализации (jBCrypt вместо C BCrypt, как , упомянутый в этом посте SO ) не был уязвим к той же атаке.

Задача

Проверка генерирующих PHP хэшей в Spring Security не работает. Есть ли способ проверить сгенерированные PHP хэши с помощью Spring Security?

* * Пример тысяча двадцать-одина * * тысяча двадцать-дв
php > $pwd = password_hash('foo', PASSWORD_BCRYPT, ['cost' => 12]);
php > echo $pwd;
$2y$12$TRc5ZjcmDJ8oFaoR1g7LD.RCxBTUZnGXB66EN9h9rKtNWg.hd7ExK

затем с использованием Java + Spring Security:

@Test
public void decryptsPhpHash() {
    boolean result = BCrypt.checkpw("foo", "$2y$12$TRc5ZjcmDJ8oFaoR1g7LD.RCxBTUZnGXB66EN9h9rKtNWg.hd7ExK");
    assertThat(result).isTrue();
}

выдает следующую ошибку:

java.lang.IllegalArgumentException: Invalid salt revision

1 Ответ

0 голосов
/ 31 октября 2018

Насколько я знаю, PHP просто изменил символ a на y, чтобы выделить его самому. Только PHP сделал это изменение префикса. Так что, возможно, просто переключив y обратно на a, решит эту проблему.

В июне 2011 года была обнаружена ошибка в crypt_blowfish, PHP-реализации BCrypt. Это было неправильное обращение с символами с 8-м битом. Они предложили системным администраторам обновить существующую базу паролей, заменив $ 2a $ на $ 2x $, чтобы указать, что эти хэши плохие (и должны использовать старый сломанный алгоритм). Они также предложили идею иметь crypt_blowfish emit $ 2y $ для хэшей, генерируемых фиксированным алгоритмом. Никто другой, включая канонический OpenBSD, не принял идею 2x / 2y. Это изменение маркера версии было ограничено crypt_blowfish. https://en.wikipedia.org/wiki/Bcrypt

...