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

H=hash(someplaintext)
n=0
while 1:
    if hash(str(n))==H:
        print n
    n+=1

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

2
Lelouch Lamperouge 13 Апр 2011 в 05:56

2 ответа

Лучший ответ

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

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

  • Устойчивость к прообразам: для x должно быть невозможно найти m такое, что h (m) = x .
  • Устойчивость ко вторым прообразам: с учетом m должно быть невозможно найти m ' отличным от m , так что ч (м) = ч (м ') .
  • Устойчивость к столкновениям: должно быть невозможно найти m и m ', отличные друг от друга, такие, что h (m) = ч (м ') .

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

Без использования каких-либо слабых мест в самой хэш-функции общие методы поиска прообразов, вторых прообразов и коллизий для хеш-функции с n -битным выходом стоят примерно 2 n (для прообразов и вторых прообразов) и 2 n / 2 (для коллизий). Таким образом, обнаруживать столкновения намного проще. В качестве прообразов вы просто пробуете вводить данные, пока вам не повезет (это то, что вы называете «грубой силой»); каждая попытка имеет вероятность успеха 2 -n . В случае коллизий это относится к атаке дня рождения: в основном, когда вы накопили около sqrt (2 n ) пар вход / выход, вероятность того, что две из этих пар имеют одинаковый выход, довольно быстро растет.

Что касается дней рождения, это означает, что если вы возьмете 20 человек наугад, высока вероятность, что у двоих из них будет один и тот же день рождения, но вы не можете выбрать, в какой день или каких людей. С другой стороны, если вы хотите найти кого-то с тем же днем ​​рождения, что и вы , вам придется в среднем отбирать 365 человек.

7
Thomas Pornin 13 Апр 2011 в 22:14
Я полностью согласен с тем, что вы сказали, но я думаю, что вы неправильно поняли мой вопрос, я спрашивал, есть ли какая-то разница в обнаружении столкновения и взломе в одну сторону с помощью грубой силы . Судя по всем прочитанным мною статьям и вашим комментариям, не похоже, что
 – 
Lelouch Lamperouge
14 Апр 2011 в 01:03
«Грубая сила» - это применение грубой силы без использования каких-либо знаний о внутренней структуре функции. Атака по случаю дня рождения - это атака «грубой силы», поскольку она обрабатывает функцию как черный ящик (на самом деле предпочтительным термином является «общая атака»). И существует огромная разница в стоимости между брутфорсом столкновения и брутфорсом прообраза.
 – 
Thomas Pornin
14 Апр 2011 в 01:08

Возможно, я неправильно понимаю ваш вопрос, но вот мое мнение:

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

\epsilon < \frac{1}{p(n)}

Где p(n) обозначает многочлен в терминах n (простите за синтаксис латекса)

В вашем случае вы просто обнаружили столкновение, это не доказывает, что хеш-функция не является односторонней, потому что вы перебираете все возможности, что означает, что вы не нарушили условие 1 / p (n).

0
Cambium 13 Апр 2011 в 06:04
Я согласен с вашим утверждением, но мой вопрос касается разницы , в частности, между «односторонним свойством, нарушающим грубую силу» и «обнаружением столкновений».
 – 
Lelouch Lamperouge
14 Апр 2011 в 01:07