Обход хеш-функции? - PullRequest
       1

Обход хеш-функции?

0 голосов
/ 03 марта 2012

Мне было интересно, возможно ли следующее:

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

Но этоможно найти это хеш-значение и отправить его прямо на сервер, вместо ввода пароля, который хеш-функция зашифрует до хеш-значения и затем отправит его?

Ответы [ 5 ]

3 голосов
/ 03 марта 2012

Когда вы получаете пароль на стороне сервера, вам всегда придется применять ту же хеш-функцию, прежде чем сравнивать ее с сохраненными хеш-паролями. При этом отправка хешированного пароля на сервер не будет иметь эффекта:

hash(hash(password)) != hash(password)

Другими словами, если это ваша функция проверки пароля на стороне сервера в псевдокоде:

function check(password) {
  return hash(password) == storedPassword;
}

И storedPassword ранее был рассчитан как hash(password), затем вызывается

check(storedPassword)

всегда будет возвращать false

1 голос
/ 11 июня 2012

См. Также http://en.wikipedia.org/wiki/Pass_the_hash для техники, которая отправляет хэш-значение непосредственно на сервер.

1 голос
/ 03 марта 2012

Нет, если вы выполняете хеширование на стороне сервера, что и следует делать.

Теперь сервер хранит salt+hash(pass, salt), если вы отправляете hash(pass, salt), сервер вычисляет salt+hash(hash(pass, salt), salt), что, очевидно, не совпадает с salt+hash(pass, salt)и не удается войти в систему.

Ваша атака работает, только если вы используете схему, в которой хеширование происходит на стороне клиента.то есть вы ожидаете отправить хеш на сервер, чтобы «не отправлять пароль в открытом виде».Я видел, как многие новички предлагают такую ​​схему, но они сосут по причине, которую вы заметили.

0 голосов
/ 18 мая 2018

Моя идея для обхода хеш-функции - сохранить копию исходного файла и иметь код, который модифицирует копию. сделайте хэш оригинала, а затем найдите способ отправить этот хэш хосту, эффективно маскируя измененное сообщение как оригинал!

0 голосов
/ 01 апреля 2018

Хеш-функция на самом деле не шифрует, она хэширует.Это односторонняя функция, означающая, что, имея хеш, мы не можем определить вход, который мы использовали, чтобы создать хеш.В качестве примера, чтобы понять (это действительно не отражает реальность хеширования, это упрощено)

Представьте себе функцию, которая удаляет каждую 3-ю букву и заменяет другие буквы своим последователям (a-> b, b-> c, z-> a).

Представьте себе ввод

Hello World!

Тогда вывод будет

f('Hello World!') = IfmpXpme

Как видите, буквы 'l' '' 'r''! 'были удаленыТеперь, поскольку они были удалены, даже зная функцию, вы не можете воссоздать ввод.

Таким образом, единственный способ получить ввод - это попробовать все возможные строки ввода.быть расшифрован.Хеш-функция - это хеширование, а не шифрование.(хорошо, если мы закроем глаза, хеширование может быть частным случаем шифрования ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...