Как именно хеш bcrypt предотвращает поиск в радужной таблице?

Я очень близок к пониманию того, как работает функция сравнения bcrypt, но в моих знаниях есть несколько недостатков.

Мое понимание до сих пор:

brcypt генерирует хешированный пароль, используя простой текстовый пароль и случайно сгенерированную соль. Хешированный пароль представляет собой комбинацию версии bcrypt, хешированной соли и сцепленного хешированного простого текстового пароля. Когда пользователь входит в систему, его пароль в виде обычного текста обрабатывается функцией сравнения. В этот момент bcrypt знает, сколько символов в хэше и с какого смещения начинать вырезать хешированную соль из полного хеша. Затем он объединяет соль с переданным паролем в виде обычного текста, прогоняя его через алгоритм хеширования, чтобы получить окончательную хешированную строку. Хешированная строка сравнивается с хешированной строкой в ​​базе данных, и если есть точное совпадение символов, пароль правильный.

2 вопроса ..

  1. Разве нельзя отменить хэши? Если да, то откуда bcrypt знает, как расшифровать хешированную соль, а затем использовать ее для хеширования входящего пароля в виде обычного текста. Для меня это не имеет никакого логического смысла.

  2. Если алгоритм brcypts написан таким образом, что он всегда может создать хешированную соль, которую он всегда знает, как расшифровать, не могут ли хакеры просто использовать этот алгоритм, чтобы захватить каждый хешированный пароль из базы данных и вырезать соли? Тогда он мог бы создать радужную таблицу для каждой соли и взломать каждый отдельный пароль? Мне это кажется логичным.

Простите, если мой вопрос не имеет смысла. Рад редактировать.

Прочтите статьи, прочтите вопросы о переполнении стека, посмотрите видео и задайте вопросы старшему инженеру.


person Zachary Springer    schedule 10.07.2019    source источник
comment
проверьте это   -  person AAA    schedule 18.07.2019
comment
Также, чтобы ответить на ваш вопрос 2, вот что делает соль: делает вычислительно очень дорогостоящим / невыполнимым создание радужной таблицы: хакеру придется создать отдельную радужную таблицу для каждой возможной соли (помните, что соляное пространство довольно большое). Радужная таблица работает путем предварительного вычисления хэшей. Это довольно сложная работа, мягко говоря, без соли. А теперь представьте, что вам нужно сделать для каждого возможного элемента соляного пространства. Могу дать полный ответ позже, если у меня будет время.   -  person AAA    schedule 18.07.2019


Ответы (1)


Радужная таблица - это предварительно составленный список всех паролей, которые вы можете найти, и их хешей.

В вашей радужной таблице есть:

  • хеш ("пароль1234")
  • хэш ("охотник2")
  • хеш ("правильный элемент питания лошади")

Но в нем нет:

  • хеш ("ȃ @ ????♽????ƅ????☸☑ + пароль1234")
  • хэш ("ȃ @ ????♽????ƅ????☸☑ + hunter2")
  • hash ("ȃ @ ????♽????ƅ????☸☑ + правильная скоба конского аккумулятора")

Вы можете пойти дальше и создать радужную таблицу, содержащую все пароли для этой соли. Но это просто называется атакой грубой силы.

И эта вторая радужная таблица не поможет вам со следующим веб-сайтом, который выберет другую соль:

  • хеш («®óó» ♠ ☘☛????Ũh + password1234 »)
  • хеш ("®óó» ♠ ☘☛????Ũh + hunter2 ")
  • hash («®óó» ♠ ☘☛????Ũh + правильная скоба для лошадиных батарей »)

И чтобы исключить все догадки и всю сложность хранения соли и определения соли: современные алгоритмы хеширования паролей генерируют различную случайную соль для каждого пароля для вас и сохраняют соль в полученной хеш-строке для вас:

  • хеш ("ȼŚ???? ¥ dĥ????®µ + пароль1234")
  • хеш ("ČɆǝ% ËȌÁpmLȫ + hunter2")
  • hash ("♼♄ș♰; ⚁f) ²ŋì????³UÍ + правильная скоба конского аккумулятора")

Что, по сути, и делает bcrypt; он генерирует различную соль для каждого пароля.

person Ian Boyd    schedule 05.04.2020