Хеш-функция на основе быстрого синдрома

редактировать
Хеш-функция на основе быстрого синдрома (FSB)
Общие
Разработчики,
Впервые опубликовано2003
На основекриптосистемы Мак-Элиса и криптосистемы Нидеррайтера
ПреемникиУлучшенная хеш-функция на основе быстрого синдрома
Относится кСиндромная хеш-функция
Детализация
Размеры дайджеста Масштабируемость

В криптографии быстрые синдромные хеш-функции (FSB) являются семейство криптографических хэш-функций, представленных в 2003 году Даниэлем Ауго, Матье Финиасом и Николя Сендриером. В отличие от большинства других криптографических хеш-функций, используемых сегодня, FSB в определенной степени может быть доказана как безопасная. Точнее, можно доказать, что взлом FSB не менее сложен, чем решение определенной NP-полной проблемы, известной как обычное синдромное декодирование, поэтому FSB доказуемо безопасна. Хотя неизвестно, разрешимы ли NP-полные задачи за полиномиальное время, часто предполагается, что это не так.

Было предложено несколько версий FSB, последняя из которых была представлена ​​на конкурс SHA-3 криптографии, но была отклонена в первом раунде. Хотя все версии ФСБ заявляют о доказуемой безопасности, некоторые предварительные версии в конечном итоге были сломаны. Однако конструкция последней версии FSB учла эту атаку и остается защищенной от всех известных в настоящее время атак.

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

Содержание
  • 1 Описание хеш-функции
    • 1.1 Определения
    • 1.2 Функция сжатия
    • 1.3 Пример сжатия
  • 2 Доказательство безопасности FSB
    • 2.1 Сопротивление прорисовке и декодирование обычного синдрома (RSD)
    • 2.2 Устойчивость к коллизиям и декодирование 2-регулярного нулевого синдрома (2-RNSD)
    • 2.3 Примеры
    • 2.4 Линейный криптоанализ
    • 2.5 Практические результаты безопасности
  • 3 Genesis
  • 4 Другие свойства
  • 5 Варианты
  • 6 Ссылки
  • 7 Внешние ссылки
Описание хеш-функции

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

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

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

Определения

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

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

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

  1. input: сообщение размера s {\ displaystyle s}s
  2. convert на обычное слово длины n {\ displaystyle n}n и веса w {\ displaystyle w}w
  3. умножить на матрицу H {\ displaystyle H}H
  4. вывод: хэш размера r {\ displaystyle r}r

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

  1. Вход: сообщение размера s {\ displaystyle s}s
  2. Преобразование s {\ displaystyle s}s в последовательность w {\ displaystyle w}w числа s 1,…, sw {\ displaystyle s_ {1}, \ dots, s_ {w}}s_1, \ dots, s_w между 1 и n / w {\ displaystyle n / w}n / w
  3. Добавьте соответствующие столбцы матриц H i {\ displaystyle H_ {i}}H_ {i} , чтобы получить двоичную строку длиной r {\ displaystyle r}r
  4. Вывод: хэш размера r {\ displaystyle r}r

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

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

Ситуация и инициализация : Хеширование сообщения s = 010011 {\ displaystyle s = 010011}s = 010011 с использованием 4 × 12 { \ displaystyle 4 \ times 12}4 \ times 12 матрица H. H = (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) {\ 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 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)}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) ., которое разделено на w143 = 3 {\ displaystyle 62>субблоки H 1 {\ displaystyle H_ {1}}H_ {1} , H 2 {\ displaystyle H_ {2}}H_ {2} , H 3 {\ displaystyle H_ {3}}H_ {3} .

Алгоритм :

  1. Мы разбиваем ввод s {\ displaystyle s}s на w = 3 {\ displaystyle w = 3}w = 3 части длины log 2 ⁡ ( 12/3) = 2 {\ displaystyle \ log _ {2} (12/3) = 2}\ log_2 (12/3) = 2 , и мы получаем s 1 = 01 {\ displaystyle s_ {1} = 01}s_1 = 01 , s 2 = 00 {\ displaystyle s_ {2} = 00}s_2 = 00 , s 3 = 11 {\ displaysty le s_ {3} = 11}s_3 = 11 .
  2. Мы конвертируем каждый si {\ displaystyle s_ {i}}s_ {i} в целое число и получаем s 1 = 1 {\ displaystyle s_ {1 } = 1}s_1 = 1 , s 2 = 0 {\ displaystyle s_ {2} = 0}s_2 = 0 , s 3 = 3 {\ displaystyle s_ {3} = 3}s_3 = 3 .
  3. Из первой подматрицы H 1 {\ displaystyle H_ {1}}H_ {1} , мы выбираем столбец 2 из второй подматрицы H 2 {\ displaystyle H_ {2}}H_ {2} столбец 1 и из третьей подматрицы столбец 4.
  4. Складываем выбранные столбцы и получаем результат r = 0111 ⊕ 0001 ⊕ 1001 = 1111 {\ displaystyle r = 0111 \ oplus 0001 \ oplus 1001 = 1111}r = 0111 \ oplus 0001 \ oplus 1001 = 1111 .
Доказательство безопасности FSB

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

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

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

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

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

Сопротивление прообразу и декодирование регулярного синдрома (RSD)

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

Определение RSD: данные w {\ displaystyle w}w матрицы ЧАС я {\ Displaystyle H_ {i}}H_ {i} измерения r × (n / w) {\ displaystyle r \ times (n / w)}r \ times (n / w) и a битовая строка S {\ displaystyle S}S длины r {\ displaystyle r}r такая, что существует набор из w {\ displaystyle w}w столбцы, по одному в каждом H i {\ displaystyle H_ {i}}H_ {i} , в сумме до S {\ displaystyle S}S . Найдите такой набор столбцов.

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

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

Нам все еще нужно доказать устойчивость к столкновениям. Для этого нам понадобится еще один NP-полный вариант RSD: декодирование 2-регулярного нулевого синдрома .

Устойчивость к столкновениям и декодирование 2-регулярного нулевого синдрома (2-RNSD)

Определение 2-RNSD: Для w {\ displaystyle w}w матриц H i {\ displaystyle H_ {i}}H_ {i} размерности r × (n / w) {\ displaystyle r \ times (n / w)}r \ times (n / w) и битовая строка S {\ displaystyle S}S длиной r {\ displaystyle r}r такой, что существует набор из w ′ {\ displaystyle w '}w'столбцов, по два или ноль в каждом H i {\ displaystyle H_ {i}}H_ {i} , суммируя до нуля. (0 < w ′ < 2 w) {\displaystyle (0(0 < w' < 2w). Найдите такой набор столбцов.

2-RNSD также оказался NP-полным путем сокращения с 3-мерного соответствие.

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

Предположим, что мы обнаружили коллизию, поэтому у нас есть Hash (m 1) = Hash (m 2) с m 1 ≠ m 2 { \ Displaystyle m_ {1} \ neq m_ {2}}m_1 \ neq m_2 . Затем мы можем найти два обычных слова w 1 {\ displaystyle w_ {1}}w_ {1} и w 2 {\ displaystyle w_ {2}}w_ {2} такие, что Час вес 1 знак равно ЧАС вес 2 {\ Displaystyle Hw_ {1} = Hw_ {2}}Hw_1 = Hw_2 . Тогда имеем H (w 1 + w 2) = H w 1 + H w 2 = 2 H w 1 = 0 {\ displaystyle H (w_ {1} + w_ {2}) = Hw_ {1} + Hw_ {2} = 2Hw_ {1} = 0}H (w_1 + w_2) = Hw_1 + Hw_2 = 2Hw_1 = 0 ; (w 1 + w 2) {\ displaystyle (w_ {1} + w_ {2})}(w_1 + w_2) - сумма двух различных регулярных слова и, следовательно, должны быть 2-регулярным словом с нулевым хешем, поэтому мы решили экземпляр 2-RNSD. Мы пришли к выводу, что обнаружение коллизий в FSB не менее сложно, чем решение 2-RNSD, и поэтому должно быть NP-полным.

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

Примеры

Решая RSD, мы находимся в ситуации, противоположной той, что и при хешировании. Используя те же значения, что и в предыдущем примере, мы получаем H {\ displaystyle H}H , разделенные на w = 3 {\ displaystyle w = 3}w = 3 sub -блоки и строка r = 1111 {\ displaystyle r = 1111}r = 1111 . Нас просят найти в каждом субблоке ровно один столбец, чтобы все они в сумме составляли r {\ displaystyle r}r . Ожидаемый ответ, таким образом, s 1 = 1 {\ displaystyle s_ {1} = 1}s_1 = 1 , s 2 = 0 {\ displaystyle s_ {2} = 0}s_2 = 0 , s 3 = 3 {\ displaystyle s_ {3} = 3}s_3 = 3 . Известно, что это сложно вычислить для больших матриц.

В 2-RNSD мы хотим найти в каждом подблоке не один столбец, а два или ноль, чтобы их сумма составляла 0000 (а не r {\ displaystyle r}r ). В этом примере мы можем использовать столбец (считая от 0) 2 и 3 из H 1 {\ displaystyle H_ {1}}H_ {1} , без столбца из H 2 {\ displaystyle H_ { 2}}H_ {2} столбец 0 и 2 из H 3 {\ displaystyle H_ {3}}H_ {3} . Возможны и другие решения, например, можно не использовать столбцы из H 3 {\ displaystyle H_ {3}}H_ {3} .

Linear cryptanalysis

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

Практические результаты защиты

В следующей таблице показана сложность наиболее известных атак на FSB.

Размер вывода (биты)Сложность поиска коллизийСложность инверсии
16022
22422
25622
38422
51222
Genesis

FSB - это ускоренная версия синдромальной хеш-функции (SB). В случае SB функция сжатия очень похожа на функцию кодирования версии Нидеррайтера из криптосистемы Мак-Элиса. Вместо использования матрицы проверки на четность переставленного кода Гоппы, SB использует случайную матрицу H {\ displaystyle H}H . С точки зрения безопасности это может только укрепить систему.

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

В 2007 году был опубликован IFSB. В 2010 году была опубликована S-FSB, которая на 30% быстрее оригинала.

В 2011 году D. J. Bernstein и Tanja Lange опубликовали RFSB, который в 10 раз быстрее, чем исходный FSB-256. Было показано, что RFSB работает очень быстро на Spartan 6 FPGA, достигая пропускной способности около 5 Гбит / с.

Ссылки
Внешние ссылки
  • Веб-сайт FSB для SHA -3 соревнование
Последняя правка сделана 2021-05-20 11:30:17
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте