Remove ads
Из Википедии, свободной энциклопедии
FSB (Fast Syndrome-Based Hash Function) — это набор криптографических хеш-функций, созданный в 2003 году и представленный в 2008 году как кандидат на конкурс SHA-3[1]. В отличие от многих хеш-функций, используемых на текущий момент, криптографическая стойкость FSB может быть доказана в определённой степени. Доказывает стойкость FSB то, что взломать FSB столь же трудно, как решить некоторую NP-полную задачу, известную как регулярное синдромное декодирование. Хоть всё же и не известно, являются ли NP-полные задачи разрешимы за полиномиальное время, как правило считается, что нет.
Fast Syndrome Based Hash | |
---|---|
Разработчики | Даниэль Огот, Мэтью Финиаш, Николя Сандрие |
Создан | 2003 |
Опубликован | 2008 |
Размер хеша | 160, 224, 256, 384, 512 |
Тип | хеш-функция |
В процессе разработки было предложено несколько версий FSB, последняя из которых была представлена на конкурсе SHA-3, но в первом туре была отклонена. Хотя все версии FSB утверждают стойкость[англ.], некоторые предварительные версии в конечном итоге взломать удалось[2]. При разработке последней версии FSB, все уязвимости были приняты во внимание, и на текущий момент алгоритм остается криптографически стойким ко всем известным в настоящее время атакам.
Но с другой стороны, стойкость сопряжена и с определёнными издержками. FSB медленнее традиционных хеш-функций, да и использует он довольно много оперативной памяти, что делает его непрактичным в средах, где она ограничена. Кроме того, функция сжатия используемая в FSB требует большой размер выходящего сообщения для гарантии криптостойкости. Эта проблема была решена в последних версиях, где выходные данные сжимались функцией Whirlpool. Тем не менее, хотя авторы утверждают, что добавление этого последнего сжатия стойкость не снижает, однако оно делает невозможным его формальное доказательство[3].
Функция сжатия обладает параметрами такими, что и . Эта функция будет работать только с сообщениями с длиной . — размер выхода. Более того, и должны быть натуральными числами, — двоичный логарифм). Причина, что в том, что мы хотим, чтобы была функцией сжатия, поэтому вход должен быть больше, чем выход. Позже мы используем конструкцию Меркла-Дамгарда для расширения входного домена для сообщений произвольной длины.
Основой этой функции состоит из (случайно выбранной) двоичной матрицы которая взаимодействует с сообщением из битов путём матричного умножения. Здесь мы кодируем -битное сообщение в качестве вектора в , -мерного векторного пространства над полем из двух элементов, так что выход будет сообщение из битов.
В целях безопасности, а также, чтобы иметь быструю скорость хеширования, используются только «регулярные слова веса » в качестве входных данных для нашей матрицы.
Сообщением называется слово веса и длины , если он состоит из битов и именно из этих битов являются ненулевыми.
Слово веса и длины называется регулярным, если в каждом интервале содержитcя ровно один ненулевой элемент для всех . Это означает, что если мы делим сообщение на w равных частей, то каждая часть содержит ровно один ненулевой элемент.
Существует точно различных регулярных слов веса и длины , таким образом, нам нужно точно бит данных для кодирования этих регулярных слов. Зафиксируем взаимно-однозначное соответствие между множеством битовых строк длины и множествому регулярных слов веса и длины , затем определим функцию сжатия FSB следующим образом:
Эта версия, как правило, называется синдромное сжатие. Это довольно медленно, и на практике делается другим, и более быстрым способом, называемым быстрым синдромным сжатием. Мы делим на подматрицы размера и фиксируем взаимно-однозначное соответствие между битовыми строками длиной и набором последовательностей чисел от 1 до . Это эквивалентно взаимно-однозначное соответствию к множеству регулярных слов длины и веса , с того момента как можно видеть то слово как последовательность чисел от 1 до . Функция сжатия выглядит следующим образом:
Теперь мы можем использовать структуру Меркла-Дамгарда для обобщения функции сжатия, чтобы входные данные могли быть произвольной длины.
Начальные условия:
Хешируем сообщение , используя матрицу
которая делится на подматрицы , , .
Алгоритм:
Структура Меркла-Дамгарда основывает свою криптостойкость только на криптостойкости используемой функции сжатия. Таким образом, мы должны лишь показать, что функция сжатия устойчива к криптоанализу.
Криптографическая хеш-функция должна быть устойчивой в трёх различных аспектах:
Стоит обратить внимание, что если можно найти второй прообраз, то можно, конечно, найти коллизию. Это означает, что если мы можем доказать, что наша система устойчива к коллизиям, она, безусловно, будет защищена от нахождения второго прообраза.
Обычно в криптографии трудно означает что-то вроде «почти наверняка за пределами досягаемости любого противника, системный взлом которого должен быть предотвращён», но определим это понятие более точно. Будем принимать: «время выполнения любого алгоритма, который находит столкновение или прообраз, экспоненциально зависит от размера хеш-значения». Это означает, что относительно небольшими добавками к размеру хеша, мы можем быстро добраться до высокого уровня криптостойкости.
Как было сказано ранее, криптостойкость 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 на устройствах с относительно небольшой памятью.
Эта проблема была решена в 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].
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.