Где 2x префикс используется в BCrypt?

Вопрос с тем же названием, где $2x$ используется в BCrypt?

Следующий сценарий прав?

У нас есть набор паролей, которые хэшируются $2a$ префикс уже, когда версия сервера PHP была ранее 5.3.7, Теперь мы обновили PHP до 5.3.7+, теперь мы должны сначала проверить предыдущие пароли с $2x$ алгоритм затем перефразировать пароль с $2y$ префикс. Вот так?

1 ответ

Решение

Примечание для редакторов Википедии: Содержание этого ответа находится в свободном доступе; Я знаю, потому что я написал это. Сначала я написал это для себя, а потом поместил в Stackru. Я также знаю это, потому что все на Stackru является copyleft. И даже если это не так, любой может свободно использовать его в любом месте, в любое время и по любой причине. Откуда мне знать? Потому что я написал это и просто сказал. Это включает в себя запись Bcrypt в Википедии. На языке Википедии: я жертвую это.

Поэтому прекратите заявлять о нарушениях авторских прав, когда не знаете, о чем говорите.

Варианты BCrypt

$ 2 $

BCrypt был разработан людьми OpenBSD. Он был разработан для хэширования паролей для хранения в файле паролей OpenBSD. Хешированные пароли хранятся с префиксом для идентификации используемого алгоритма. BCrypt получил префикс $2$,

Это было в отличие от других префиксов алгоритма:

  • $1$: MD5
  • $5$: SHA-256
  • $6$: SHA-512

$ 2a $

Исходная спецификация BCrypt не определяла, как обрабатывать символы, не входящие в ASCII, или как обрабатывать нулевой терминатор. Спецификация была пересмотрена, чтобы указать, что при хешировании строк:

  • строка должна быть в кодировке UTF-8
  • нулевой терминатор должен быть включен

$2x$, $2y$ (июнь 2011 г.)

Была обнаружена ошибка в crypt_blowfish, PHP-реализации BCrypt. Это было неправильное обращение с символами с установленным 8-м битом.

Они предложили системным администраторам обновить существующую базу паролей, заменив $2a$ с $2x$, чтобы указать, что эти хэши плохие (и должны использовать старый сломанный алгоритм). Они также предложили идею иметь crypt_blowfish emit $2y$ для хэшей, сгенерированных по фиксированному алгоритму. Никто другой, включая канонический OpenBSD, не принял идею 2x/2y, Этот маркер версии был ограничен crypt_blowfish.

Версии $2x$ и $2y$ не "лучше" и не "сильнее", чем $ 2a $. Они являются остатками одной конкретной ошибочной реализации BCrypt.

2 миллиарда долларов США (февраль 2014 года)

Была обнаружена ошибка в реализации BCrypt в OpenBSD. Они хранили длину своих строк в unsigned char, Если бы пароль был длиннее 255 символов, он был бы переполнен и перенесен на 255.

BCrypt был создан для OpenBSD. Когда у них есть ошибка в их библиотеке, они решили, что все в порядке, чтобы поднять версию. Это означает, что все остальные должны последовать их примеру, если вы хотите оставаться в курсе "своих" спецификаций.

Версия $2b$ не "лучше" и не "сильнее", чем $ 2a $. Это остаток одной конкретной ошибочной реализации BCrypt. Но поскольку BCrypt канонически принадлежит OpenBSD, они могут изменить маркер версии на любой другой.

Нет никакой разницы между 2a, 2x, 2y и 2b. Если вы написали свою реализацию правильно, они все выдают одинаковый результат.

И если вы с самого начала поступали правильно (сохраняя строки в utf8, а также хэшируя нулевой терминатор), то: нет никакой разницы между 2, 2a, 2x, 2y и 2b. Если вы написали свою реализацию правильно, они все выдают одинаковый результат.

Единственные люди, которым нужно заботиться о 2х и 2й, это те, кого вы, возможно, использовали crypt_blowfish. И единственные люди, которым нужно заботиться о 2b, это те, кто, возможно, работал с OpenBSD.

Все остальные правильные реализации идентичны и правильны.

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