Вопрос такой же, где $ 2x $ используется в BCrypt?
Следующий сценарий прав?
У нас есть набор паролей, хэшированных с префиксом $2a$
уже, когда версия сервера PHP была более ранней. 5.3.7
. Теперь мы обновили PHP до 5.3.7+
, теперь мы должны сначала проверить предыдущие пароли с алгоритмом $2x$
, а затем перефразировать пароль с префиксом $2y$
. Это верно?
Примечание для редакторов wikipedia : Содержание в этом ответе находится в общественном достоянии; Я знаю, потому что я это написал. Я написал это сначала для себя, а потом положил его на Stackoverflow. Я также знаю это, потому что все на Stackoverflow является copyleft. И даже если это не так, любой может свободно использовать его где угодно, в любое время, по любой причине, кем угодно. Откуда мне знать? Потому что я написал это, и я просто так сказал. Это включает запись Bcrypt в Википедии. В Википедии: Я жертвую.
Поэтому прекратите требовать нарушения авторских прав, когда вы не знаете, о чем говорите.
$ 2 $
BCrypt был разработан людьми OpenBSD. Он был разработан для хэш-паролей для хранения в файле паролей OpenBSD. Хешированные пароли хранятся с префиксом для идентификации используемого алгоритма. BCrypt получил префикс $2$
.
Это было в отличие от других префиксов алгоритма:
$1$
: MD5 $5$
: SHA-256 $6$
: SHA-512 $ 2a $
Исходная спецификация BCrypt не определяла, как обрабатывать символы, отличные от ASCII, или как обрабатывать нулевой терминатор. Спецификация была пересмотрена, чтобы указать, что при хешировании строк:
$ 2x $, $ 2y $ (июнь 2011 г.)
Ошибка была обнаружена в crypt_blowfish , в PHP-реализации BCrypt. Это были неправильные символы с 8-м битом.
Они предложили, чтобы системные администраторы обновили свою существующую базу паролей, заменив $2a$
на $2x$
, чтобы указать, что эти хэши плохо (и нужно использовать старый алгоритм). Они также предположили, что crypt_blowfish испускает $2y$
для хэшей, генерируемых фиксированным алгоритмом. Никто, включая канонический OpenBSD, не принял идею 2x
/ 2y
. Этот маркер версии был ограничен crypt_blowfish .
Варианты $ 2x $ и $ 2y $ не «лучше» или «сильнее», чем $ 2a $ . Это остатки одной конкретной баггической реализации BCrypt.
$ 2b $ (февраль 2014 г.)
В реализации OpenBSD BCrypt обнаружена ошибка. Они сохраняли длину своих строк в unsigned char
. Если пароль был длиннее 255 символов, он переполняется и завершается на 255.
BCrypt был создан для OpenBSD. Когда у них есть ошибка в их библиотеке, они решили, что это нормально. Это означает, что все остальные должны последовать примеру, если вы хотите оставаться в курсе «их» спецификации.
Версия $ 2b $ не «лучше» или «сильнее», чем $ 2a $ . Это остаток одной конкретной ошибки в использовании BCrypt. Но поскольку BCrypt канонически принадлежит OpenBSD, они могут изменить маркер версии на все, что захотят.
Нет никакой разницы между 2a , 2x , 2y и 2b . Если вы правильно написали свою реализацию, все они выдают один и тот же результат.
И если вы делали правильные вещи с самого начала (сохраняя строки в utf8, а также хешируя нулевой терминатор), тогда: нет разницы между 2 , 2a , 2x , 2y и 2b . Если вы правильно написали свою реализацию, все они выдают один и тот же результат.
Единственные люди, которым нужно заботиться о 2x и 2y, – это те, которые вы, возможно, использовали crypt_blowfish . И единственные люди, которым нужно заботиться о 2b, – это те, кто, возможно, запускал OpenBSD.
Все другие правильные реализации идентичны и правильны.