Snefru — Википедия
Snefru — криптографическая хеш-функция, предложенная Ральфом Мерклом. (Само название Snefru, продолжая традиции блочных шифров Khufu и Khafre, также разработанных Ральфом Мерклом, представляет собой имя египетского фараона). Функция Snefru преобразует сообщения произвольной длины в хеш длины (обычно или ).
Описание алгоритма хеширования
[править | править код]Входное сообщение разбивается на блоки длиной битов. Основой алгоритма является функция , принимающая на входе — разрядное значение и вычисляющая — разрядное значение. Каждый новый блок сообщения конкатенируется с хешем, вычисленным для предыдущего блока, и поступает на вход функции . Первый блок объединяется со строкой нулей. Хеш последнего блока конкатенируется с двоичным представлением длины сообщения (MD – усиление), и полученная конкатенация хешируется последний раз.
Функция основана на (обратимой) функции блочного шифрования , принимающей и вычисляющей — битные значения. возвращает XOR — комбинацию первых битов входа функции и последних битов выхода функции . Функция смешивает входные данные в несколько шагов. Каждый шаг состоит из 64 раундов. В ходе одного раунда берется слово сообщения и младший значащий байт этого слова подается на блок, выходом которого также является слово. Далее выполняется операция XOR полученного слова с двумя соседними словами в сообщении. Таким образом, в одном раунде, используя один байт слова, изменяются два соседних с ним слова в сообщении. В конце раунда байты используемого слова перемешиваются так, чтобы в следующий раз на вход блока попал другой байт (происходит ряд циклических сдвигов на 8, 16 или 24 разряда). Так как раундов 64, а слов 16, то каждое слово используется четыре раза, следовательно, каждый байт сообщения используется в качестве входа блока. Построение блока аналогично построению в алгоритме Khafre.
Если число шагов в функции равно ( раундов), то функция Snefru называется двухпроходной, если число шагов равно ( раунда) то Snefru трехпроходная, и так далее.
Криптоанализ Snefru
[править | править код]В марте 1990 года была назначена награда в 1000$ первому, кто сможет взломать двухпроходный вариант Snefru, найдя два сообщения с одинаковым хеш-кодом (то есть показать, что Snefru не является стойкой к коллизиям 2-го рода). Аналогичная награда была объявлена позже за взлом четырехпроходного варианта Snefru.
Используя средства дифференциального анализа, Эли Бихам и Ади Шамир показали, что двухпроходная функция Snefru (с — разрядным хешем) не является стойкой к коллизиям 1-го рода и 2-го рода.
Описание атаки
[править | править код]Стандартная атака на хеш-функции основана на парадоксе «дней рождения». Если подвергнуть хешированию (, когда ) различных сообщений, то с высокой вероятностью получится найти пару с одинаковым хешем. Такая атака применима к любой хеш-функции, вне зависимости от её реализации.
Для Snefru Бихам и Шамир разработали метод дифференциального криптоанализа, который не зависит от выбора блоков и даже может быть использован в том случае, когда блоки не известны криптоаналитику.
При длине хеша длина блоков, на которые делится входное сообщение равно . В данной атаке был применен алгоритм, отыскивающий два входных значения функции ( — разрядные значения), отличающиеся только в первых разрядах, формируемых из блоков входного сообщения, но при этом, имеющих один и тот же хеш.
Шаги алгоритма:
- Выбирается произвольный блок длиной бита. К нему приписывается строка нулей (или любой другой — битный вектор, например, хеш предыдущего блока), формируя — разрядный входной блок для функции . Вычисляется .
- Создается второй входной блок для функции путём изменения по одному байту в и словах первого блока. При этом меняется именно часть, содержащаяся в первых битах, приписанная строка не меняется. Изменяемые байты в и словах — те, которые будут использованы в качестве входных значениях блока в и раундах соответственно. Вычисляется .
- Сравниваются значения функции от входных блоков, полученных в шагах 1) и 2). С вероятностью будет найдена пара с одинаковым хешем.
Таким образом, вычисляя функцию от приблизительно пар блоков, можно найти коллизию 2-го рода для Snefru.
Пояснение алгоритма атаки
[править | править код]Так как изменения, применяемые на шаге , касаются только байтов, которые используются в и раундах, то значения блоков после раундов с номером < на шагах и будут одинаковы.
В -м раунде байт из -го слова используется для изменения -го и -го слов. Байт подается на вход блока, на выходе которого — слово. Далее выполняется операция XOR с -м и -м словами. При изменении этого байта (в шаге ), а также байта -го слова, который используется как вход блока в -м раунде, с вероятностью после выполнения операции XOR байт в -м слове окажется таким же, как этот же байт в блоке в шаге после -и раундов. Тогда, подавая этот байт в -м раунде на вход блока, на выходе получим то же значение, что и в -м раунде, осуществляемом над блоком из шага . Следовательно, -е слово будет одинаково после раунда для обоих шагов. Одинаковым окажется также и -е слово после раунда, -е слово после раунда, …, -е слово после раунда, -е слово после раунда, …, -е слово после раунда, так как вход блока для обоих шагов в этих раундах один и тот же.
-е слово разное для шагов уже после -го раунда. Поэтому на -м раунде оно станет причиной того, что станут различными для двух этапов значения -го и -го слов. То же самое произойдет и на -м раунде для слов и . И снова, с вероятностью , байт в -м слове, который будет использоваться в качестве входа блока в -м раунде, будет одинаков для шагов и . А значит, одинаковыми будут -е, …, -е, -е, …, -е слова. Изменения начнутся, когда будет использовано -е слово в -м раунде.
Таким образом, если после , , , и -го раундов байт в -м слове, который будет использоваться в качестве входа для блока в следующих за указанными раундах, будет одинаков для обоих шагов, то одинаковы после полных раундов окажутся слова , , …, . Вероятность этого события . Так как в качестве хеша блока берется значение операции XOR от первых 4-х слов входного блока функции и первых 4-х слов выходного блока функции , то хеши, вычисленные на обоих шагах окажутся одинаковыми.
Сравнение атаки с известными методами криптоанализа
[править | править код]Метод был применен также к трехпроходной и четырехпроходной функции Snefru, показав лучшие результаты по сравнению с методом «дней рождения».
Количество проходов функции Snefru | Длина хеша, | Сложность атаки | Метод «дней рождения» |
---|---|---|---|
2 | 128 — 192 | — | |
224 | |||
3 | 128 — 192 | — | |
224 | |||
4 | 128 — 192 | — | |
224 |
С помощью этой атаки можно найти множество пар, у которых одинаковый хеш, и, кроме того, разыскать несколько сообщений, хеш которых равен хешу данного сообщения (коллизия 1-го рода). Количество операций, требующееся для отыскания коллизии 1-го рода, в данной атаке меньше, чем в методе «грубой силы».
Количество проходов функции Snefru | Длина хеша, | Сложность атаки | Метод «грубой силы» |
---|---|---|---|
2 | 128 — 224 | — | |
3 | 128 — 224 | — | |
4 | 128 — 192 | — |
Примечания
[править | править код]В данное время Меркл советует применять функцию Snefru с не менее чем восемью проходами. Однако с таким количеством проходов вычисление функции Snefru в значительной степени замедляется, сравнительно с функциями MD5 или SHA.
Литература
[править | править код]- Eli Biham, Adi Shamir. Differential cryptanalysis of Snefru, Khafre, REDOC-II, LOKI and Lucifer (Extended Abstract).
- Брюс Шнайер. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си. — М.: ТРИУМФ, 2003. — 816 с. — ISBN 5-89392-055-4.