SWIFFT

SWIFFT
Разработчики Вадим Любашевский, Даниель Мичьянчио, Крис Пейкерт, Алон Розен
Создан 2008
Опубликован 2008
Тип хеш-функция

SWIFFT — набор криптографических хеш-функций с доказанной стойкостью[1][2][3]. Они основываются на быстром преобразовании Фурье (БПФ, англ. Fast Fourier Transform, FFT) и используют алгоритм LLL-редуцированных базисов[англ.]. Криптографическая стойкость функций SWIFFT (в асимптотическом смысле)[4] математически доказана при использовании рекомендуемых параметров[5]. Поиск коллизий в SWIFFT в худшем случае требует не меньше временных затрат, чем нахождение коротких векторов в циклических/идеальных решётках. Практическое применение SWIFFT будет ценно именно в тех случаях, когда стойкость к коллизиям особенно важна. Например, цифровые подписи, которые должны оставаться надёжными длительное время.

Данный алгоритм обеспечивает пропускную способность порядка 40 Мб/с на процессоре Intel Pentium 4 с тактовой частотой 3,2 ГГц[6][1]. Было проведено исследование, направленное на ускорение БПФ, которое используется в SWIFFT[7]. Как результат, скорость работы алгоритма удалось увеличить более чем в 13 раз[6]. Данная реализация SWIFFT оказалась быстрее, чем реализации широко распространенных хеш-функций[8].

На конкурсе Национального института стандартов и технологий США[2] 2012 года был предложен SWIFFTX (модификация SWIFFT) в качестве SHA-3 (на замену более старых SHA-2 и особенно SHA-1[9]), но был отклонён в первом раунде[10].

Описание работы

Функции SWIFFT могут быть описаны как простое алгебраическое выражение над некоторым кольцом многочленов R {\displaystyle R} [1][11]. Семейство функций зависит от трёх основных параметров[см. «Выбор параметров»]: пусть n {\displaystyle n} будет степенью числа 2, m > 0 {\displaystyle m>0} — небольшое целое число, и p > 0 {\displaystyle p>0} — не обязательно простое число, но лучше выбрать его простым. Определим R {\displaystyle R} как кольцо вида R = Z p [ α ] / ( α n + 1 ) {\displaystyle R=\mathbb {Z} _{p}[\alpha ]/(\alpha ^{n}+1)} . Например, кольцо многочленов в α {\displaystyle \alpha } , у которых коэффициенты — целые числа, p {\displaystyle p} — число, на которое выполняем деление по модулю, и α n + 1 {\displaystyle \alpha ^{n}+1} . Элемент из R {\displaystyle R} может быть многочленом степени меньшей n {\displaystyle n} с коэффициентами из Z p {\displaystyle Z_{p}} .

Определённая функция в семействе SWIFFT задаётся как m {\displaystyle m} фиксированных элементов a 1 , , a m R {\displaystyle a_{1},\ldots ,a_{m}\in R} кольца R {\displaystyle R} , называемых мультипликаторами. Данную функцию над кольцом R {\displaystyle R} можно записать в следующем виде:

i = 1 m ( a i x i ) {\displaystyle \sum _{i=1}^{m}(a_{i}\cdot x_{i})} ,

где x 1 , , x m R {\displaystyle x_{1},\ldots ,x_{m}\in R} — многочлены с двоичными коэффициентами, соответствующие двоичному входному сообщению длины m n {\displaystyle mn} .

Алгоритм работы следующий:[1][12][11]

  1. Берётся α {\displaystyle \alpha } неприводимый многочлен над Z [ α ] {\displaystyle \mathbb {Z} [\alpha ]}
  2. На вход подаётся сообщение M {\displaystyle M} длины m n {\displaystyle mn}
  3. M {\displaystyle M} преобразуется в набор из m {\displaystyle m} полиномов p i {\displaystyle p_{i}} в определённом кольце многочленов R {\displaystyle R} с двоичными коэффициентами
  4. Рассчитываются коэффициенты Фурье для каждого p i {\displaystyle p_{i}}
  5. Задаются фиксированные коэффициенты Фурье a i {\displaystyle a_{i}} в зависимости от семейства SWIFFT
  6. Попарно перемножаются коэффициенты Фурье p i {\displaystyle p_{i}} с a i {\displaystyle a_{i}} для каждого i {\displaystyle i}
  7. Используется обратное преобразование Фурье для того, чтобы получить m {\displaystyle m} многочленов f i {\displaystyle f_{i}} степени не более 2 n {\displaystyle 2n}
  8. Рассчитается f = i = 1 m ( f i ) {\displaystyle f=\sum _{i=1}^{m}(f_{i})} по модулю p {\displaystyle p} и α n + 1 {\displaystyle \alpha ^{n}+1} .
  9. f {\displaystyle f} преобразуется в n log ( p ) {\displaystyle n\log(p)} битов и отправляются их на выход

Пример

Конкретные значения для параметров n, m и p выбраны следующим образом: n = 64, m= 16, p= 257[13]. Для данных параметров любая фиксированная сжимающая функция семейства примет на вход сообщение длины mn = 1024 бит(128 байт). Выходные данные лежат в диапазоне Z p n {\displaystyle \mathbb {Z} _{p}^{n}} , который имеет размер p n = 257 64 {\displaystyle p^{n}=257^{64}} . Выходные данные в Z p n {\displaystyle \mathbb {Z} _{p}^{n}} могут быть представлены, используя 528 бит (66 байт).

Вычисление результата перемножения многочленов

Самое сложное в вычислении приведённого выше выражения — вычислить результат перемножения a i x i {\displaystyle a_{i}\cdot x_{i}} [1][14]. Быстрый способ вычислить данное произведение — это использовать теорему о свёртке, которая утверждает, что при определённых условиях выполнено:

F { f g } = F { f } F { g } {\displaystyle {\mathcal {F}}\{f*g\}={\mathcal {F}}\{f\}\cdot {\mathcal {F}}\{g\}}

Здесь F {\displaystyle {\mathcal {F}}} обозначает преобразование Фурье, а операция {\displaystyle \cdot } означает перемножение коэффициентов с одинаковым индексом. В общем случае теоремы о свёртке {\displaystyle *} имеет значение свёртки, а не перемножения. Однако, можно показать, что перемножение многочленов является свёрткой.

Быстрое преобразование Фурье

Для нахождения преобразования Фурье мы используем Быстрое преобразование Фурье (БПФ), которое выполняется за O ( n log ( n ) ) {\displaystyle O(n\log(n))} [1]. Алгоритм перемножения следующий[14]: мы рассчитываем все коэффициенты Фурье для всех многочленов сразу с помощью БПФ. Затем мы попарно перемножаем соответствующие коэффициенты Фурье двух многочленов. После мы используем обратное БПФ, после чего получим многочлен степени не выше 2 n {\displaystyle 2n} .

Дискретное преобразование Фурье

Вместо обычного преобразования Фурье в SWIFFT используется дискретное преобразование Фурье (ДПФ)[1][14]. Оно использует корни из единицы в Z p {\displaystyle \mathbb {Z} _{p}} вместо комплексных корней из единицы. Это будет справедливо, если Z p {\displaystyle \mathbb {Z} _{p}} конечное поле, и его 2nth простых корня из единицы существуют в данном поле. Данные условия будут выполнены, если взять такое простое число p {\displaystyle p} , что p 1 {\displaystyle p-1} делится на 2 n {\displaystyle 2n} .

Выбор параметров

Параметры m,p,n должны удовлетворят следующим требованиям[15]:

  • n должен быть степенью двойки
  • p должен быть простым числом
  • p-1 должно делиться на 2n
  • log ( p ) < {\displaystyle \log(p)<} m

Можно взять, например, такие параметры: n=64, m=16, p=257. Мы берём пропускную способность на уровне 40Мб/с[6], защищённость от поиска коллизий — 2 106 {\displaystyle 2^{106}} операций.

Статистические свойства

  • Универсальное хеширование. Семейство функций SWIFFT является универсальным[1]. Иными словами, для любых различных фиксированных x , x {\displaystyle x,x*} и случайно выбранной функции f {\displaystyle f} из семейства вероятность, что выполнится равенство f ( x ) = f ( x ) {\displaystyle f(x)=f(x*)} , обратно пропорциональна величине выбранного диапазона.
  • Регулярность. Функции из семейства сжимающих функций SWIFFT — регулярные[1].
  • Генератор энтропии. SWIFFT является генератором энтропии[англ.][1]. Для хеш-таблиц и приложений, связанных с ними, желательно, чтобы ключи для значений, поданных в функцию, были распределены равномерно (или близко к равномерному распределению), даже если входные значения распределены неравномерно. Хеш-функции, которые ведут себя подобным образом, называются генераторами энтропии, потому как они могут представить неравномерно распределённые параметры (почти) равномерными на выходе. Формально, данным свойством обычно обладает семейство функций, из которого была выбрана одна функция случайным образом.

Криптографический свойства и безопасность

  • SWIFFT не является псевдослучайной функцией[англ.] из-за линейности[1]. Для произвольной функции f {\displaystyle f} из семейства SWIFFT справедливо следующее: для двух входных параметров x 1 {\displaystyle x_{1}} , x 2 {\displaystyle x_{2}} таких, что x 1 + x 2 {\displaystyle x_{1}+x_{2}} тоже может быть входным параметром, выполнено f ( x 1 ) + f ( x 2 ) = f ( x 1 + x 2 ) {\displaystyle f(x_{1})+f(x_{2})=f(x_{1}+x_{2})} . Выполнение данного соотношения не подходит к случайной функции, и злоумышленник сможет легко отличить нашу функцию от случайной.
  • Для семейства функций SWIFFT доказана криптографическая стойкость к коллизиям (в асимптотическом смысле) при относительно умеренном предположении о сложности задачи нахождения коротких векторов в циклических/идеальных решётках в худшем случае. Это значит, что семейство функций SWIFFT также устойчиво к атаке нахождения второго прообраза[4][16].

Теоретическая стойкость

SWIFFT — криптографические функции с доказанной стойкостью[англ.][1][3]. Как и в большинстве случаев, доказательство стойкости функций основывается на том, что математическую задачу, используемую в функциях, нельзя решить за полиномиальное время. Это значит, что стойкость SWIFFT заключается только в том, что в основе лежит сложная математическая задача.

В случае SWIFFT доказанная стойкость заключается в задаче поиска коротких векторов в циклических/идеальных решётках[17]. Можно доказать, что справедливо следующее утверждение: предположим, у нас есть алгоритм, который может найти коллизии функции f {\displaystyle f} для случайной версии SWIFFT, полученной от f {\displaystyle f} , за некоторое возможное время T {\displaystyle T} с вероятностью p {\displaystyle p} . Значит, алгоритм, работает только на небольшой, но заметной доле функций семейства. Тогда мы можем также найти алгоритм f 2 {\displaystyle f_{2}} , который сможет всегда находить короткий вектор на любой идеальной решётке над кольцом Z p [ α ] / ( α n + 1 ) {\displaystyle \mathbb {Z} _{p}[\alpha ]/(\alpha ^{n}+1)} за некоторое возможное время T 2 {\displaystyle T_{2}} , зависящее от T {\displaystyle T} и p {\displaystyle p} . Это значит, что нахождение коллизий в SWIFFT не менее сложное, задача нахождения коротких векторов в решётке над Z p [ α ] / ( α n + 1 ) {\displaystyle \mathbb {Z} _{p}[\alpha ]/(\alpha ^{n}+1)} , для решения которой существуют только экспоненциальные алгоритмы.

Практическая стойкость

Авторы данной хеш-функции исследовали её на уязвимости для различных атак и установили, что атака «дней рождения» требует меньше всего операций подсчёта хэша (2106) для поиска коллизий.[18][1]. Атаки с перестановками требуют 2448 операций подсчёта для стандартных параметров. Полный перебор возможных значений потребует 2528 операций подсчёта хэша. Этого, как правило, достаточно для того, чтобы сделать нападение противника невозможным.

См. также

Примечания

  1. 1 2 3 4 5 6 7 8 9 10 11 12 13 Lyubashevsky et al., 2008.
  2. 1 2 Arbitman et al., 2008.
  3. 1 2 Györfi et al., 2012, с. 2.
  4. 1 2 Arbitman et al., 2008, с. 1.
  5. Buchmann, Lindner, 2009, с. 1-2.
  6. 1 2 3 Györfi et al., 2012, с. 15.
  7. Györfi et al., 2012, с. 15-16.
  8. Györfi et al., 2012, с. 16.
  9. PRE- SHA-3 COMPETITION  (неопр.). National Institute of Standards and Technology (15 апреля 2005). Архивировано 9 августа 2017 года.
  10. Second Round Candidates  (неопр.). National Institute of Standards and Technology (19 января 2010). Дата обращения: 14 февраля 2010. Архивировано 10 апреля 2012 года.
  11. 1 2 Györfi et al., 2012, с. 3.
  12. Arbitman et al., 2008, с. 4-5.
  13. Györfi et al., 2012.
  14. 1 2 3 Györfi et al., 2012, с. 4.
  15. Buchmann, Lindner, 2009.
  16. Šarinay, 2010, с. 9.
  17. Arbitman et al., 2008, с. 10-11.
  18. Buchmann, Lindner, 2009, с. 2.

Литература

Книги

  • Шнайер Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си = Applied Cryptography. Protocols, Algorithms and Source Code in C. — М.: Триумф, 2002. — 816 с. — 3000 экз. — ISBN 5-89392-055-4.

Статьи

  • Lyubashevsky V., Micciancio D., Peikert C., Rosen A. SWIFFT: A Modest Proposal for FFT Hashing (англ.) // (unknown type) — 2008. — Vol. 5086. — P. 54—72. — doi:10.1007/978-3-540-71039-4_4
  • Arbitman Y., Dogon G., Lyubashevsky V., Micciancio D., Peikert C., Rosen A. SWIFFTX: A Proposal for the SHA-3 Standard (англ.) — 2008.
  • Buchmann J., Lindner R. Secure Parameters for SWIFFT (англ.) // Progress in Cryptology — INDOCRYPT 2009: 10th International Conference on Cryptology in India, New Delhi, India, December 13-16, 2009. Proceedings / B. Roy, N. Sendrier — Springer Berlin Heidelberg, 2009. — P. 1—17. — ISBN 978-3-642-10627-9 — doi:10.1007/978-3-642-10628-6_1
  • Šarinay J. Interpreting Hash Function Security Proofs (англ.) // Provable Security: 4th International Conference, ProvSec 2010, Malacca, Malaysia, October 13-15, 2010. Proceedings / S. Heng, K. Kurosawa — Springer Berlin Heidelberg, 2010. — P. 119—132. — ISBN 978-3-642-16279-4 — doi:10.1007/978-3-642-16280-0_8
  • Győrfi T., Cret O., Hanrot G., Brisebarre N. High-Throughput Hardware Architecture for the SWIFFT / SWIFFTX Hash Functions (англ.) // Cryptology ePrint ArchiveInternational Association for Cryptologic Research, 2012.
Перейти к шаблону «Хеш-алгоритмы»
Общего назначения
Криптографические
Функции формирования ключа
Контрольное число (сравнение)
Применение хешей