Fast Syndrome Based Hash

Fast Syndrome Based Hash
Разработчики Даниэль Огот, Мэтью Финиаш, Николя Сандрие
Создан 2003
Опубликован 2008
Размер хеша 160, 224, 256, 384, 512
Тип хеш-функция

FSB (Fast Syndrome-Based Hash Function) — это набор криптографических хеш-функций, созданный в 2003 году и представленный в 2008 году как кандидат на конкурс SHA-3[1]. В отличие от многих хеш-функций, используемых на текущий момент, криптографическая стойкость FSB может быть доказана в определённой степени. Доказывает стойкость FSB то, что взломать FSB столь же трудно, как решить некоторую NP-полную задачу, известную как регулярное синдромное декодирование. Хоть всё же и не известно, являются ли NP-полные задачи разрешимы за полиномиальное время, как правило считается, что нет.

В процессе разработки было предложено несколько версий FSB, последняя из которых была представлена на конкурсе SHA-3, но в первом туре была отклонена. Хотя все версии FSB утверждают стойкость[англ.], некоторые предварительные версии в конечном итоге взломать удалось[2]. При разработке последней версии FSB, все уязвимости были приняты во внимание, и на текущий момент алгоритм остается криптографически стойким ко всем известным в настоящее время атакам.

Но с другой стороны, стойкость сопряжена и с определёнными издержками. FSB медленнее традиционных хеш-функций, да и использует он довольно много оперативной памяти, что делает его непрактичным в средах, где она ограничена. Кроме того, функция сжатия используемая в FSB требует большой размер выходящего сообщения для гарантии криптостойкости. Эта проблема была решена в последних версиях, где выходные данные сжимались функцией Whirlpool. Тем не менее, хотя авторы утверждают, что добавление этого последнего сжатия стойкость не снижает, однако оно делает невозможным его формальное доказательство[3].

Описание хеш-функции

[править | править код]

Функция сжатия обладает параметрами такими, что и . Эта функция будет работать только с сообщениями с длиной .  — размер выхода. Более того, и должны быть натуральными числами,  — двоичный логарифм). Причина, что в том, что мы хотим, чтобы была функцией сжатия, поэтому вход должен быть больше, чем выход. Позже мы используем конструкцию Меркла-Дамгарда для расширения входного домена для сообщений произвольной длины.

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

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

Определения

[править | править код]

Сообщением называется слово веса и длины , если он состоит из битов и именно из этих битов являются ненулевыми.

Слово веса и длины называется регулярным, если в каждом интервале содержитcя ровно один ненулевой элемент для всех . Это означает, что если мы делим сообщение на w равных частей, то каждая часть содержит ровно один ненулевой элемент.

Функция сжатия

[править | править код]

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

  1. На вход подаётся сообщение размера
  2. Преобразование его в регулярное слово веса и длины
  3. Перемножение с матрицей
  4. На выходе получаем хеш размера

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

  1. На вход подаётся сообщение размера
  2. Преобразование его в последовательность чисел от 1 до
  3. Добавляем соответствующие столбцы матриц для получения двоичной строки длины
  4. На выходе получаем хеш размера

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

Пример сжатия

[править | править код]

Начальные условия:

Хешируем сообщение , используя матрицу

которая делится на подматрицы , , .

Алгоритм:

  1. Делим входящее сообщение на части длины и получаем , , .
  2. Преобразуем каждую строку в число и получаем , , .
  3. Из первой подматрицы берём второй столбец, из второй берём первый, из третьей  — четвёртый.
  4. Добавляем выбранные столбцы и получаем результат: .

Доказательство криптостойкости FSB

[править | править код]

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

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

  1. Первая устойчивость к нахождению прообраза: имея хеш h, должно быть трудно найти сообщение m такое, что Hash(m)=h.
  2. Вторая устойчивость к нахождению прообраза: имея сообщение m1 должно быть трудно найти сообщение m2, такое что Hash(m1) = Hash(m2).
  3. Устойчивость к коллизиям: должно быть трудно найти два различных сообщения m1 и m2 такие, что Hash(m1)=Hash(m2).

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

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

Устойчивость к нахождению прообраза

[править | править код]

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

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

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

Легко видеть, что нахождение прообраза данного хеша в точности эквивалентно этой проблеме, так что задача нахождения прообразов в FSB также должна быть NP-полной.

Нам все ещё необходимо доказать устойчивость от коллизий. Для этого нам нужна другая NP-полная вариация регулярного синдромного кодирования, называемая «двурегулярное нулевое синдромной декодирование».

Устойчивость к коллизиям

[править | править код]

Даны матриц размерности и битовая строка длины . Тогда существует множество столбцов, либо два, либо ни одного в каждом , составляющих 0, где . Нужно найти такой набор столбцов. Было доказано, что этот метод NP-полон, уходом от трёхмерного паросочетания.

Так же, как регулярное синдромное декодирование, в сущности, эквивалентно нахождению регулярного слова такого, что , двурегулярное нулевое синдромное декодирование эквивалентно нахождению двурегулярного слова такого, что . Двурегулярное слово длины и веса есть битовая строка длины такая, что в каждом интервале в точности либо две записи равны 1, либо ни одной. Отметим, что 2-регулярное слово это просто сумма двух правильных слов.

Предположим, что мы нашли коллизию: Hash(m1) = Hash(m2) при . Тогда мы можем найти два регулярных слова и такие, что . Мы тогда получаем , где является суммой двух разных регулярных слов и она должна быть двурегулярным словом, хеш которого нуль, так что мы решили задачу двурегулярного нулевого синдромного декодирования. Мы пришли к выводу, что найти столкновения в FSB по крайней мере так же сложно, как решить задачу двурегулярного нулевого синдромного декодирования, и поэтому алгоритм NP-полон.

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

Решая задачу регулярного синдромного декодирования, мы находимся как бы в противоположно, относительно хеширования. Используя те же значения, что и в предыдущем примере, нам дается разделеная на подблока и строка . Нам нужно найти в каждом подблоке по одному столбцу, так что они будут представлять собой . Таким образом, ожидаемый ответ будет , , . Это, как известно, трудно вычислить для больших матриц. В двурегулярном нулевом синдромном декодировании мы хотим найти в каждом подблоке не одну колонку, а либо две, либо ни одну так, что они будут приводить к (а не к ). В примере, мы могли бы использовать второй и третий столбец (считая от 0) из , ни одного столбца из , нулевой и второй из . Ещё решения возможны, например, не используя ни один столбец из .

Линейный криптоанализ

[править | править код]

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

Результаты безопасности на практике

[править | править код]

Таблица показывает сложность наиболее известных аттак против FSB:

Размер выхода (бит) Сложность поиска коллизий Сложность инверсии
160 2100.3 2163.6
224 2135.3 2229.0
256 2190.0 2261.0
384 2215.5 2391.5
512 2285.6 2527.4

Другие свойства

[править | править код]
  • Размер входного и выходного блока хеш-функции полностью масштабируемы.
  • Скорость можно регулировать путём изменения количества битовых операций, используемых FSB на входной бит.
  • Безопасность может быть отрегулирован путём регулировки выходного размера.
  • Плохие случаи всё же существуют, и необходимо позаботиться при выборе матрицы .
  • Матрица, используемая в функции сжатия, может стать огромной в определённых случаях.

Последнее может создавать затруднения при использовании FSB на устройствах с относительно небольшой памятью.

Эта проблема была решена в 2007 году, в соответствующей хеш-функции, называемой IFSB (Improved Fast Syndrome Based Hash)[4], которая до сих пор доказуемо безопасна, но полагается на несколько более сильные предположения.

В 2010 году была представлена S-FSB, имеющая скорость, на 30 % превышающую FSB[5].

В 2011 году Дэниел Джулиус Бернштейн[англ.] и Таня Ланге представили RFSB, что 10-кратно превышало скорость FSB-256[6]. RFSB, будучи запущеным на машине Spartan 6 FPGA, достигал пропускной способности до 5 Гбит/с[7].

Примечания

[править | править код]
  1. Augot, D.; Finiasz, M.; Sendrier, N. A Fast Provably Secure Cryptographic Hash Function (2003). Дата обращения: 10 декабря 2015. Архивировано 3 марта 2016 года.
  2. Saarinen, Markku-Juhani O. Linearization Attacks Against Syndrome Based Hashes (2007). Дата обращения: 10 декабря 2015. Архивировано 4 марта 2016 года.
  3. Finiasz, M.; Gaborit, P.; Sendrier, N. Improved Fast Syndrome Based Cryptographic Hash Functions (2007). Дата обращения: 10 декабря 2015. Архивировано из оригинала 3 марта 2016 года.
  4. Finiasz, M.; Gaborit, P.; Sendrier, N. Improved Fast Syndrome Based Cryptographic Hash Functions (2007). Дата обращения: 12 декабря 2015. Архивировано 22 декабря 2015 года.
  5. Meziani M.; Dagdelen Ö.; Cayrel P.L.; El Yousfi Alaoui S.M. S-FSB: An Improved Variant of the FSB Hash Family (2010). Дата обращения: 12 декабря 2015. Архивировано из оригинала 22 декабря 2015 года.
  6. Bernstein, D. J., Lange, T.; Peters C.; Schwabe P.;. Really fast syndrome-based hashing (2011). Дата обращения: 12 декабря 2015. Архивировано 14 декабря 2014 года.
  7. Von Maurich, I.; Güneysu, T.;. Embedded Syndrome-Based Hashing (2011). Дата обращения: 12 декабря 2015. Архивировано из оригинала 2 мая 2015 года.