Рейтинг:2

Обладает ли SHA-256 (128-временное + 128-пространственное = 256-общее) сопротивление коллизиям?

флаг vu

Во-первых, мы рассматриваем те хэш-функции, которые реально могут обеспечить 256-битную безопасность до образа, а не что-то вроде SHAKE128<l=256 бит> где параметры губки обеспечивают только разрядность 128 бит.

Мы знаем, что криптоанализ имеет не только временное измерение, но и пространственное измерение, то есть объем рабочей памяти, необходимый для выполнения алгоритма криптоанализа. Таким образом, если мы ожидаем найти коллизию SHA-256 примерно через $2^{128}$ попытки, это в теории также означает, что ему нужно $2^{128}$ пространство для хранения входных данных-кандидатов на столкновение.

Так это правда? Означает ли это, что SHA-256 имеет общую 256-битную устойчивость к коллизиям? с учетом места?

флаг vn
Помимо того факта, что вам не нужно пространство $2^{128}$ для проведения атаки столкновений, как следует из принятого ответа, есть также тот факт, что $2^{128} + 2^{128} = 2^{ 129}$, так что даже если бы не было атаки с нехваткой памяти, и мы (неправильно) подсчитали использование ресурсов таким образом, это все равно было бы далеко от $2^{256}$.
Рейтинг:4
флаг ng

Нет, нарушение свойства коллизии SHA-256 не требует каких-либо близких к $2^{128}$ пространство. Мы знаем, как показать столкновение в любом $n$-битный хэш $Ч$ с $\mathcal O(2^{n/2})$ хеш-оценки и $\mathcal O(n)$ пространство.

Самый простой подходящий способ Нахождение цикла Флойда, который будет демонстрировать с ненулевой вероятностью два различных $n$битовые строки $г$ и $s$ с $Ч(г)=Ч(с)$, на орбите заданная начальная точка $t$ при повторении $Ч$

  • $m\gets\lceil\,2^{n/2+1}\,\rceil$ (увеличение $+1$ уменьшает количество неудач).
  • $и\получает Н(т)$ .
  • $ г \ получает ты $; $s\получает H(u)$ .
  • пока $r\ne s$ :Â (найти цикл)
    • если $м=0$ затем остановка в отказе (длинная орбита, редко).
    • $m\получает m-1$ .
    • $r\получает H(r)$; $s\получает H(H(s))$ .
  • если $т=с$ то останавливаться в неудаче($t$ в цикле, исчезающе редко).
  • $s\получает H(s)$ .
  • пока $r\ne s$ :Â (смещение $u$ за один цикл)
    • $s=H(s)$; $и=Н(и)$ .
  • пока $t\ne u$:Â (найти столкновение)
    • $ г \ получает т $; $s\получает тебя$ .
    • $т\получает Н(т)$; $и\получает Н(и)$ .
  • вывод $(р,с)$ и остановиться на успехе.

Попробуйте онлайн! за коллизию 24-битного хеша (первый $к=3$ байт SHA-256). Пожалуйста, будьте любезны запустить этот код Python на вашем компьютере, если вы увеличиваете $к$.

В методе используется то, что орбита $t$, определяемый как $u$ достигается повторением $и\получает Н(и)$ начиная с $и=т$, имеет тенденцию циклироваться в пределах $\mathcal\Тета(2^{n/2})$ шаги. Алгоритм обнаруживает, что цикл достигнут, находит $u$ через столько же шагов от $t$ в качестве длины цикла, то где вводится цикл, что приводит к столкновению. Можно показать, что для случайной функции $H:\{0,1\}^*\mapsto\{0,1\}^n$ и кроме очень мелких $n$, вероятность успеха этого алгоритма из любой начальной точки $t$ по крайней мере $3/4$ (отказы из-за слишком длинной орбиты $t$, или когда $t$ принадлежит циклу).

В случае сбоя часто бывает достаточно перезапуститься с другой случайной точки.Это обычно хорошо работает для обычных криптографических хэшей. $Ч$, но даже для них может случиться так, что большинство начальных точек приводят к слишком большому циклу, который невозможно найти. В общем случае мы хотим перейти к использованию алгоритма с $H'$ определяется $Н'(х)=Н(F(х))$ для подходящей случайной эффективно вычислимой и обратимой инъекции $F$ выбирается в начале алгоритма. Это так демонстрирует столкновение для $H'$ использование алгоритма демонстрирует коллизию для $Ч$, но $H'$ может иметь различную структуру цикла. Для большинства $n$-битный хэш $Ч$ подходит для криптографического использования, $F$ может быть XOR с фиксированным $n$битовая строка или добавление фиксированного префикса и/или суффикса. Это не показано в приведенном выше псевдокоде и связанном коде Python.

Можно распределить работу на множество машин, работающих параллельно, каждая с небольшим объемом памяти, умеренным обменом данными и умеренной дополнительной работой. См. Пола С. ван Оршота и Майкла Дж. Винера, Параллельный поиск столкновений с помощью криптоаналитических приложений, в Журнал криптологии, 1999 г..

gnasher729 avatar
флаг kz
За пределами криптографии статью, на которую вы ссылаетесь, кажется очень трудно применить к самому алгоритму факторинга Полларда-ро, потому что там мы ищем не x = y, а gcd (xy, N)> 1.
DannyNiu avatar
флаг vu
Я думаю, если бы добавить результаты экспериментов алгоритма Флойда над меньшими преобразованиями (например, 24 или 32 бита), это было бы более чем убедительно.
fgrieu avatar
флаг ng
@DannyNiu: исходный алгоритм был неправильным. Этот поставляется с рабочей демонстрацией.
gnasher729 avatar
флаг kz
Алгоритм Полларда может легко найти множители 128-битного числа за несколько секунд. Что включает в себя поиск коллизий между 64-битными числами. Обычно занимает около 2^32 шагов.
Рейтинг:0
флаг kz

Нет, коллизии SHA-256 можно найти практически без места.

Хитрость заключается в том, что вы не вычисляете, например, H(1), H(2), H(3) и т. д., что потребовало бы сохранения всех результатов в таблице. Вместо этого пусть x0 = некоторое значение, x1 = H(x0), x2 = H(x1) и так далее. Затем мы сравниваем x1 и x2, x2 и x4, x3 и x6, xk и x2k, и это находит столкновение примерно за 2 ^ 128 шагов без хранения.

Ответить или комментировать

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