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].

Содержание

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

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

Функция сжатияϕ{\displaystyle \phi } обладает параметрамиn,r,w{\displaystyle {n,r,w}} такими, чтоn>w{\displaystyle n>w} иwlog(n/w)>r{\displaystyle w\log(n/w)>r}. Эта функция будет работать только ссообщениями с длинойs=wlog(n/w){\displaystyle s=w\log(n/w)}.r{\displaystyle r} — размер выхода. Более того,n,r,w,s{\displaystyle n,r,w,s} иlog(n/w){\displaystyle \log(n/w)} должны быть натуральными числами,log{\displaystyle \log } — двоичный логарифм). Причина, чтоwlog(n/w)>r{\displaystyle w\cdot \log(n/w)>r} в том, что мы хотим, чтобыϕ{\displaystyle \phi } была функцией сжатия, поэтому вход должен быть больше, чем выход. Позже мы используем конструкциюМеркла-Дамгарда для расширения входного домена для сообщений произвольной длины.

Основой этой функции состоит из (случайно выбранной)r×n{\displaystyle r\times n} двоичной матрицыH{\displaystyle H} которая взаимодействует с сообщением изn{\displaystyle n} битов путёмматричного умножения. Здесь мыкодируемwlog(n/w){\displaystyle w\log(n/w)}-битное сообщение в качествевектора в(F2)n{\displaystyle (\mathbf {F} _{2})^{n}},n{\displaystyle n}-мерного векторного пространства над полем из двух элементов, так что выход будет сообщение изr{\displaystyle r} битов.

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

Определения

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

Сообщением называется слово весаw{\displaystyle w} и длиныn{\displaystyle n}, если он состоит изn{\displaystyle n} битов и именноw{\displaystyle w} из этих битов являются ненулевыми.

Слово весаw{\displaystyle w} и длиныn{\displaystyle n} называется регулярным, если в каждом интервале[(i1)w,iw){\displaystyle [(i-1)w,iw)} содержится ровно один ненулевой элемент для всех0<i<n/w+1{\displaystyle 0<i<n/w+1}. Это означает, что если мы делим сообщение наw равных частей, то каждая часть содержит ровно один ненулевой элемент.

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

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

Существует точно(n/w)w{\displaystyle (n/w)^{w}} различных регулярных слов весаw{\displaystyle w} и длиныn{\displaystyle n}, таким образом, нам нужно точноlog((n/w)w)=wlog(n/w)=s{\displaystyle \log((n/w)^{w})=w\log(n/w)=s} бит данных для кодирования этих регулярных слов. Зафиксируем взаимно-однозначное соответствие между множеством битовых строк длиныs{\displaystyle s} и множествому регулярных слов весаw{\displaystyle w} и длиныn{\displaystyle n}, затем определим функцию сжатия FSB следующим образом:

  1. На вход подаётся сообщение размераs{\displaystyle s}
  2. Преобразование его в регулярное слово весаw{\displaystyle w} и длиныn{\displaystyle n}
  3. Перемножение с матрицейH{\displaystyle H}
  4. На выходе получаем хеш размераr{\displaystyle r}

Эта версия, как правило, называется синдромное сжатие. Это довольно медленно, и на практике делается другим, и более быстрым способом, называемым быстрым синдромным сжатием. Мы делимH{\displaystyle H} на подматрицыHi{\displaystyle H_{i}} размераr×n/w{\displaystyle r\times n/w} и фиксируем взаимно-однозначное соответствие между битовыми строками длинойwlog(n/w){\displaystyle w\log(n/w)} и набором последовательностейw{\displaystyle w} чисел от 1 доn/w{\displaystyle n/w}. Это эквивалентно взаимно-однозначное соответствию к множеству регулярных слов длиныn{\displaystyle n} и весаw{\displaystyle w}, с того момента как можно видеть то слово как последовательность чисел от 1 доn/w{\displaystyle n/w}. Функция сжатия выглядит следующим образом:

  1. На вход подаётся сообщение размераs{\displaystyle s}
  2. Преобразование его в последовательностьw{\displaystyle w} чиселs1,,sw{\displaystyle s_{1},\dots ,s_{w}} от 1 доn/w{\displaystyle n/w}
  3. Добавляем соответствующие столбцы матрицHi{\displaystyle H_{i}} для получения двоичной строки длиныr{\displaystyle r}
  4. На выходе получаем хеш размераr{\displaystyle r}

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

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

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

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

Хешируем сообщениеs=010011{\displaystyle s=010011}, используя4×12{\displaystyle 4\times 12} матрицуH{\displaystyle H}
H=(1011 0100 10110100 0111 01000111 0100 10101100 1011 0001){\displaystyle H=\left({\begin{array}{llllcllllcllll}1&0&1&1&~&0&1&0&0&~&1&0&1&1\\0&1&0&0&~&0&1&1&1&~&0&1&0&0\\0&1&1&1&~&0&1&0&0&~&1&0&1&0\\1&1&0&0&~&1&0&1&1&~&0&0&0&1\end{array}}\right)}
которая делится наw=3{\displaystyle w=3} подматрицыH1{\displaystyle H_{1}},H2{\displaystyle H_{2}},H3{\displaystyle H_{3}}.

Алгоритм:

  1. Делим входящее сообщениеs{\displaystyle s} наw=3{\displaystyle w=3} части длиныlog2(12/3)=2{\displaystyle \log _{2}(12/3)=2} и получаемs1=01{\displaystyle s_{1}=01},s2=00{\displaystyle s_{2}=00},s3=11{\displaystyle s_{3}=11}.
  2. Преобразуем каждую строкуsi{\displaystyle s_{i}} в число и получаемs1=1{\displaystyle s_{1}=1},s2=0{\displaystyle s_{2}=0},s3=3{\displaystyle s_{3}=3}.
  3. Из первой подматрицыH1{\displaystyle H_{1}} берём второй столбец, из второйH2{\displaystyle H_{2}} берём первый, из третьейH3{\displaystyle H_{3}} — четвёртый.
  4. Добавляем выбранные столбцы и получаем результат:r=011100011001=1111{\displaystyle r=0111\oplus 0001\oplus 1001=1111}.

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

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

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

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

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

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

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

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

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

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

Даныw{\displaystyle w} матрицHi{\displaystyle H_{i}} размерностиr×(n/w){\displaystyle r\times (n/w)} и битовая строкаS{\displaystyle S} длиныr{\displaystyle r} такие, что существует наборw{\displaystyle w} столбцов, по одному в каждойHi{\displaystyle H_{i}}, составляющихS{\displaystyle S}. Нужно найти такой набор столбцов.

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

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

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

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

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

Даныw{\displaystyle w} матрицHi{\displaystyle H_{i}} размерностиr×(n/w){\displaystyle r\times (n/w)} и битовая строкаS{\displaystyle S} длиныr{\displaystyle r}. Тогда существует множествоw{\displaystyle w'} столбцов, либо два, либо ни одного в каждомHi{\displaystyle H_{i}}, составляющих 0, где(0<w<2w){\displaystyle (0<w'<2w)}. Нужно найти такой набор столбцов.Было доказано, что этот метод NP-полон, уходом от трёхмерного паросочетания.

Так же, как регулярное синдромное декодирование, в сущности, эквивалентно нахождению регулярного словаw{\displaystyle w} такого, чтоHw=S{\displaystyle Hw=S}, двурегулярное нулевое синдромное декодирование эквивалентно нахождению двурегулярного словаw{\displaystyle w'} такого, чтоHw=0{\displaystyle Hw'=0}. Двурегулярное слово длиныn{\displaystyle n} и весаw{\displaystyle w} есть битовая строка длиныn{\displaystyle n} такая, что в каждом интервале[(i1)w,iw){\displaystyle [(i-1)w,iw)} в точности либо две записи равны 1, либо ни одной. Отметим, что 2-регулярное слово это просто сумма двух правильных слов.

Предположим, что мы нашли коллизию: Hash(m1) = Hash(m2) приm1m2{\displaystyle m_{1}\neq m_{2}}. Тогда мы можем найти два регулярных словаw1{\displaystyle w_{1}} иw2{\displaystyle w_{2}} такие, чтоHw1=Hw2{\displaystyle Hw_{1}=Hw_{2}}. Мы тогда получаемH(w1+w2)=Hw1+Hw2=2Hw1=0{\displaystyle H(w_{1}+w_{2})=Hw_{1}+Hw_{2}=2Hw_{1}=0}, где(w1+w2){\displaystyle (w_{1}+w_{2})} является суммой двух разных регулярных слов и она должна быть двурегулярным словом, хеш которого нуль, так что мы решили задачу двурегулярного нулевого синдромного декодирования. Мы пришли к выводу, что найти столкновения в FSB по крайней мере так же сложно, как решить задачу двурегулярного нулевого синдромного декодирования, и поэтому алгоритм NP-полон.

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

Примеры

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

Решая задачу регулярного синдромного декодирования, мы находимся как бы в противоположно, относительно хеширования. Используя те же значения, что и в предыдущем примере, нам даетсяH{\displaystyle H} разделеная наw=3{\displaystyle w=3} подблока и строкаr=1111{\displaystyle r=1111}. Нам нужно найти в каждом подблоке по одному столбцу, так что они будут представлять собойr{\displaystyle r}. Таким образом, ожидаемый ответ будетs1=1{\displaystyle s_{1}=1},s2=0{\displaystyle s_{2}=0},s3=3{\displaystyle s_{3}=3}. Это, как известно, трудно вычислить для больших матриц. В двурегулярном нулевом синдромном декодировании мы хотим найти в каждом подблоке не одну колонку, а либо две, либо ни одну так, что они будут приводить к0000{\displaystyle 0000} (а не кr{\displaystyle r}). В примере, мы могли бы использовать второй и третий столбец (считая от 0) изH1{\displaystyle H_{1}}, ни одного столбца изH2{\displaystyle H_{2}}, нулевой и второй изH3{\displaystyle H_{3}}. Ещё решения возможны, например, не используя ни один столбец изH3{\displaystyle H_{3}}.

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

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

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

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

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

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

Размер выхода (бит)Сложность поиска коллизийСложность инверсии
1602100.32163.6
2242135.32229.0
2562190.02261.0
3842215.52391.5
5122285.62527.4

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

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

Варианты

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

Последнее может создавать затруднения при использовании 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 года.
Перейти к шаблону «Хеш-алгоритмы»
Общего назначения
Криптографические
Функции формирования ключа
Контрольное число (сравнение)
Применение хешей
Источник —https://ru.wikipedia.org/w/index.php?title=Fast_Syndrome_Based_Hash&oldid=150828027
Категории:
Скрытые категории: