Безопасные алгоритмы хеширования | |
---|---|
Концепции | |
хэш-функции · SHA · DSA | |
Основные стандарты | |
SHA-0 · SHA-1 · SHA-2 · SHA-3 | |
Общий | |
---|---|
Дизайнеров | Гвидо Бертони, Джоан Дэемен , Микаэль Петерс и Жиль ван Аше . |
Впервые опубликовано | 2015 г. |
Серии | ( SHA-0 ), SHA-1 , SHA-2 , SHA-3 |
Сертификация | FIPS PUB 202 |
Деталь | |
Размеры дайджеста | произвольный |
Состав | конструкция из губки |
Скорость | 12,6 cpb на типичной машине на базе x86-64 для Keccak-f [1600] плюс XORing 1024 бит [1], что примерно соответствует SHA2-256. |
Лучший публичный криптоанализ | |
Атака прообраза на Keccak-512 уменьшена до 8 раундов, требующих 2 511,5 раз и 2 508 единиц памяти. [2] Различители с нулевой суммой существуют для полного 24-раундового Keccak-f [1600], хотя их нельзя использовать для атаки на саму хеш-функцию [3] |
SHA-3 ( Secure Hash Algorithm 3 ) - последний член семейства стандартов Secure Hash Algorithm , выпущенный NIST 5 августа 2015 года. [4] [5] [6] Несмотря на то, что он является частью той же серии стандартов, SHA -3 внутренне отличается от MD5 -подобной структуры из SHA-1 и SHA-2 .
SHA-3 представляет собой подмножество более широкой криптографической примитивного семейства Keccak ( / к ɛ tʃ æ к / или / K ɛ tʃ ɑː к / ), [7] [8] разработан Guido Bertoni , Joan Daemen , Майкл Петерс, и Жиль Ван Аше , основанный на RadioGatún . Авторы Кеккака предложили дополнительные варианты использования этой функции, (пока) не стандартизированные NIST, в том числе потоковый шифр , аутентифицированное шифрование.система, «древовидная» схема хеширования для более быстрого хеширования на определенных архитектурах, [9] [10] и шифры AEAD Keyak и Ketje. [11] [12]
Keccak основан на новом подходе, который называется « строительство губки» . [13] Конструкция губки основана на широкой случайной функции или случайной перестановке и позволяет вводить («поглощать» в терминологии губки) любое количество данных и выводить («сжимать») любое количество данных, действуя как псевдослучайная функция. что касается всех предыдущих входов. Это приводит к большой гибкости.
NIST в настоящее время не планирует отменять SHA-2 или удалять его из пересмотренного стандарта Secure Hash Standard. Назначение SHA-3 состоит в том, что он может быть напрямую заменен на SHA-2 в текущих приложениях, если это необходимо, и значительно повысить надежность общего набора инструментов алгоритмов хеширования NIST. [14]
Создатели алгоритмов Keccak и функций SHA-3 предлагают использовать более быструю функцию KangarooTwelve с настроенными параметрами и новый режим хеширования дерева без дополнительных накладных расходов для сообщений небольшого размера.
История [ править ]
Алгоритм Keccak работа Гвидо Бертони, Джоан Daemen (который также совместно спроектировал Rijndael шифра с Винсентом Rijmen ), Майкл Питерс, и Жиль Ван Аше . Он основан на ранее хэш - функции конструкции ПАНАМА и RadioGatún . ПАНАМА был разработан Daemen и Крейг Клапп в 1998 году RadioGatún, преемник ПАНАМА, был разработан Daemen, Петерс и Ван Аше, и был представлен на NIST Hash семинара в 2006 году [15] эталонная реализация исходный код был посвящен в общественное достояние через отказ от CC0 . [16]
В 2006 году NIST начал организовывать конкурс хэш-функций NIST для создания нового стандарта хеширования SHA-3. SHA-3 не предназначен для замены SHA-2 , поскольку не было продемонстрировано никаких серьезных атак на SHA-2. Из-за успешных атак на MD5 , SHA-0 и SHA-1 , [17] [18] NIST почувствовал потребность в альтернативном, непохожем криптографическом хэше, который стал SHA-3.
По истечении подготовительного периода заявки должны были быть поданы до конца 2008 года. Кечак был принят в качестве одного из 51 кандидата. В июле 2009 года для второго тура было отобрано 14 алгоритмов. Кечак прошел в последний раунд в декабре 2010 года. [19]
Во время конкурса участникам разрешалось «настраивать» свои алгоритмы для решения обнаруженных проблем. В Keccak были внесены следующие изменения: [20] [21]
- Количество раундов было увеличено с 12 + ℓ до 12 + 2ℓ из соображений безопасности.
- Заполнение сообщений было изменено с более сложной схемы на простой шаблон 10 * 1, описанный ниже.
- Скорость r была увеличена до предела безопасности, а не округлялась до ближайшей степени 2.
2 октября 2012 года Кечак был выбран победителем конкурса. [7]
В 2014 году NIST опубликовал проект FIPS 202 «Стандарт SHA-3: хеширование на основе перестановок и функции расширяемого вывода». [22] FIPS 202 был утвержден 5 августа 2015 г. [23]
5 августа 2015 года NIST объявил, что SHA-3 стал стандартом хеширования. [24]
Ослабление противоречий [ править ]
В начале 2013 года NIST объявил, что выберет разные значения для «емкости», параметра общей силы и скорости для стандарта SHA-3, по сравнению с представленным. [25] [26] Изменения вызвали некоторую суматоху.
Соревнование хэш-функций потребовало, чтобы хеш-функции были не менее безопасными, чем экземпляры SHA-2. Это означает , что д выход -битный должен иметь д / 2-битное сопротивление столкновения атак и д сопротивление битового к прообразу атак , максимально достижимого для д бит выхода. Доказательство безопасности Keccak позволяет настраивать уровень безопасности на основе «емкости» c , обеспечивая c / 2-битную устойчивость как к столкновениям, так и к атакам с использованием прообраза. Чтобы соответствовать первоначальным правилам конкурса, авторы Кеккака предложили c = 2 d . Объявленное изменение заключалось в том, чтобы принять тот же d/ 2-битная безопасность для всех форм атак и стандартизация c = d . Это ускорило бы Keccak, позволив хешировать дополнительные d битов ввода на каждой итерации. Однако хеш-функции больше не были бы заменой с таким же сопротивлением прообразу, как SHA-2; он был бы сокращен вдвое, что сделало бы его уязвимым для достижений квантовых вычислений, которые фактически сократили бы его вдвое еще раз. [27]
В сентябре 2013 года Дэниел Дж. Бернстайн предложил в списке рассылки хэш-форума NIST [28] усилить безопасность до 576-битной емкости, которая первоначально была предложена в качестве Keccak по умолчанию в дополнение к SHA-3 и не включена в нее. технические характеристики. [29] Это обеспечило бы как минимум SHA3-224 и SHA3-256 такое же сопротивление прообразу, что и их предшественники SHA-2, но SHA3-384 и SHA3-512 имели бы значительно меньшее сопротивление прообразу, чем их предшественники SHA-2. . В конце сентября команда Keccak ответила, заявив, что они предложили 128-битную безопасность, установив c = 256 в качестве опции уже в своем предложении SHA-3. [30]Хотя, по их мнению, уменьшение емкости было оправданным, в свете отрицательного ответа они предложили увеличить емкость до c = 512 бит для всех экземпляров. Он будет таким же, как любой предыдущий стандарт, вплоть до уровня безопасности 256 бит, при этом обеспечивая разумную эффективность [31], но не сопротивление 384/512 битам прообраза, предлагаемое SHA2-384 и SHA2-512. Авторы заявили, что «утверждать или полагаться на уровни безопасности выше 256 бит бессмысленно».
В начале октября 2013 года Брюс Шнайер раскритиковал решение NIST на основании его возможных пагубных последствий для принятия алгоритма, заявив:
В воздухе витает слишком много недоверия. NIST рискует опубликовать алгоритм, которому никто не будет доверять и который никто (кроме тех, кто вынужден) не будет использовать. [32]
Позже он отказался от своего более раннего заявления, сказав:
Я оговорился, когда написал, что NIST внес «внутренние изменения» в алгоритм. Это было неаккуратно с моей стороны. Перестановка Keccak остается неизменной. NIST предложил уменьшить емкость хэш-функции во имя производительности. Одной из приятных особенностей Keccak является то, что он легко настраивается. [32]
Пол Кроули, криптограф и старший разработчик в независимой компании по разработке программного обеспечения, выразил поддержку этому решению, заявив, что Keccak должен быть настраиваемым, и нет причин для разных уровней безопасности в одном примитиве. Он также добавил:
Да, это немного обидно для конкурентов, что они потребовали определенный уровень безопасности для участников, а затем пошли опубликовать стандарт с другим. Но сейчас ничего нельзя сделать, чтобы исправить это, кроме как возобновить соревнование. Требование, чтобы они придерживались своей ошибки, никому ничего не улучшает. [33]
Была некоторая путаница в том, что в Keccak могли быть внесены внутренние изменения, которые были прояснены исходной командой, заявив, что предложение NIST для SHA-3 является подмножеством семейства Keccak, для которого можно генерировать тестовые векторы, используя их эталонный код. представили на конкурс, и что это предложение было результатом серии обсуждений между ними и хэш-командой NIST. [34]
В ответ на разногласия в ноябре 2013 года Джон Келси из NIST предложил вернуться к исходному предложению c = 2 d для всех экземпляров оперативной замены SHA-2. [35] Возврат был подтвержден последующими проектами [36] и окончательной версией. [4]
Дизайн [ править ]
SHA-3 использует губки строительные , [13] , в котором данные «всасывается» в губку, затем результат «выдавливается» аут. В фазе поглощения блоки сообщений подвергаются операции XOR в подмножестве состояния, которое затем преобразуется как единое целое с использованием функции перестановки . В фазе «сжатия» выходные блоки считываются из одного и того же подмножества состояния, чередующегося с функцией преобразования состояния . Размер части состояния, которая записывается и читается, называется «скоростью» (обозначается ), а размер части, которая не затрагивается вводом / выводом, называется «емкостью» (обозначается ). Емкость определяет безопасность схемы.Максимальный уровень безопасности составляет половину емкости.
Учитывая входную битовую строку , функцию заполнения, функцию перестановки, которая работает с битовыми блоками ширины , скорости и выходной длины , у нас есть емкость, а конструкция губки , дающая битовую строку длины , работает следующим образом: [5] : 18
- заполните вход N с помощью функции заполнения, в результате чего будет получена заполненная битовая строка P с длиной, делимой на (например, целое число)
- разбить P на n последовательных r -битных частей P 0 , ..., P n −1
- инициализировать состояние S строкой из b нулевых битов
- поглощают ввод в состояние: для каждого блока P i :
- расширить P i в конце строкой из c нулевых битов, получив в результате один длиной b
- XOR, что с S
- применить к результату блочную перестановку f , получив новое состояние S
- инициализировать Z как пустую строку
- а длина Z меньше d :
- добавить первые r битов S к Z
- если длина Z все еще меньше d битов, примените f к S , получив новое состояние S
- усечь Z до d бит
Тот факт, что внутреннее состояние S содержит c дополнительных битов информации в дополнение к тому, что выводится в Z, предотвращает атаки на расширение длины, которым подвержены SHA-2, SHA-1, MD5 и другие хэши, основанные на конструкции Меркла – Дамгарда .
В SHA-3 состояние S состоит из массива 5 × 5 w -битных слов (с w = 64), b = 5 × 5 × w = 5 × 5 × 64 = всего 1600 бит. Keccak также определен для меньших размеров слова w, равного степени 2, вплоть до 1 бита (общее состояние 25 бит). Небольшие размеры состояний могут использоваться для тестирования криптоаналитических атак, а размеры промежуточных состояний (от w = 8 , 200 бит до w = 32 , 800 бит) могут использоваться в практических, легких приложениях. [11] [12]
Для экземпляров SHA-3-224, SHA-3-256, SHA-3-384 и SHA-3-512 r больше d , поэтому нет необходимости в дополнительных перестановках блоков в фазе сжатия; ведущие d бит состояния - это желаемый хэш. Однако SHAKE-128 и SHAKE-256 допускают произвольную длину вывода, что полезно в таких приложениях, как оптимальное заполнение асимметричного шифрования .
Заполнение [ править ]
Чтобы гарантировать, что сообщение может быть равномерно разделено на r- битовые блоки, требуется заполнение. SHA-3 использует шаблон 10 * 1 в своей функции заполнения: 1 бит, за которым следует ноль или более 0 бит (максимум r - 1 ) и последний 1 бит.
Максимум r - 1 нулевых битов возникает, когда длина последнего блока сообщения составляет r - 1 бит. Затем после начального 1 бита добавляется еще один блок, содержащий r - 1 нулевых битов перед последним 1 битом.
Два бита 1 будут добавлены, даже если длина сообщения уже делится на r . [5] : 5.1 В этом случае к сообщению добавляется еще один блок, содержащий 1 бит, за которым следует блок из r - 2 нулевых бита и еще 1 бит. Это необходимо для того, чтобы сообщение с длиной, кратной r, заканчивающейся чем-то похожим на заполнение, не создавало такой же хэш, как сообщение с удаленными битами.
Требуется начальный 1 бит, поэтому сообщения, различающиеся лишь несколькими дополнительными 0 битами в конце, не создают одинаковый хэш.
Положение последнего бита 1 указывает, какая скорость r была использована (многоскоростное заполнение), что требуется для работы доказательства безопасности для различных вариантов хеширования. Без него разные варианты хеширования одного и того же короткого сообщения были бы одинаковыми до усечения.
Перестановка блоков [ править ]
Блочное преобразование f , которое представляет собой Keccak-f [1600] для SHA-3, представляет собой перестановку, которая использует операции XOR , AND и NOT , и предназначена для простой реализации как в программном, так и в аппаратном обеспечении.
Она определяется для любой мощности из-двух слов размера, W = 2 л битов. В основном представлении SHA-3 используются 64-битные слова, ℓ = 6 .
Состояние можно рассматривать как массив бит 5 × 5 × w . Пусть a [ i ] [ j ] [ k ] будет битом (5 i + j ) × w + k ввода, используя соглашение о нумерации битов с прямым порядком байтов и индексирование по старшим строкам . Т.е. я выбирает строку, j - столбец, а k - бит.
Индексная арифметика выполняется по модулю 5 для первых двух измерений и по модулю w для третьего.
Базовая функция перестановки блоков состоит из 12 + 2 ℓ раундов по пять шагов:
- θ (тета)
- Вычислите четность каждого из 5 w (320, когда w = 64 ) 5-битных столбцов, а также четность двух соседних столбцов в обычном шаблоне. Чтобы быть точным, a [ i ] [ j ] [ k ] ← a [ i ] [ j ] [ k ] четность (a [0 ... 4] [ j −1] [ k ]] »четность (a [ 0 ... 4] [ j +1] [ k −1])
- ρ (ро)
- Побитовое вращение каждого из 25 слов на другое треугольное число 0, 1, 3, 6, 10, 15, .... Чтобы быть точным, a [0] [0] не вращается, и для всех 0 ≤ t < 24 , a [ i ] [ j ] [ k ] ← a [ i ] [ j ] [ k - ( t +1) ( t +2) / 2] » , где .
- π (пи)
- Переставьте 25 слов по фиксированному шаблону. a [3 i +2 j ] [ i ] ← a [ i ] [ j ] .
- χ (чи)
- Побитовое объединение по строкам, используя x ← x ⊕ (¬ y & z ) . Чтобы быть точным, a [ i ] [ j ] [ k ] ← a [ i ] [ j ] [ k ] ⊕ (¬ a [ i ] [ j + 1 ] [ k ] & a [ i ] [ j + 2 ] » [ k ]) . Это единственная нелинейная операция в SHA-3.
- ι (йота)
- Эксклюзивная или округленная константа в одно слово состояния. Чтобы быть точными, в круглом п , для 0 ≤ т ≤ л , [0] [0] [2 м -1] является операция XOR с битом м + 7 п градуса 8- LFSR последовательности. Это нарушает симметрию, сохраняемую на других этапах.
Скорость [ править ]
Скорость хеширования длинных сообщений SHA-3 определяется вычислением f = Keccak-f [1600] и XORing S с расширенным P i , операцией над b = 1600 битами. Однако, поскольку последние c бит расширенного P i в любом случае равны 0, а XOR с 0 является NOP, достаточно выполнить операции XOR только для r бит ( r = 1600 - 2 × 224 = 1152 бит для SHA3-224 , 1088 бит для SHA3-256, 832 бит для SHA3-384 и 576 бит для SHA3-512). Чем меньше r (и, наоборот, чем больше c = b - r = 1600 - r), тем менее эффективным, но более безопасным становится хеширование, поскольку меньшее количество битов сообщения может быть преобразовано в состояние XOR (быстрая операция) перед каждым применением дорогостоящего в вычислительном отношении f . Авторы сообщают о следующих скоростях программных реализаций Keccak-f [1600] плюс XORing 1024 бит [1], что примерно соответствует SHA3-256:
- 57,4 ц / бит на IA-32, Intel Pentium 3 [37]
- 41 cpb на IA-32 + MMX, Intel Pentium 3
- 20 cpb на IA-32 + SSE, Intel Core 2 Duo или AMD Athlon 64
- 12,6 cpb на типичной машине на базе x86-64
- 6–7 cpb на IA-64 [38]
Для точного SHA3-256 на x86-64 Бернштейн измеряет 11,7–12,25 cpb в зависимости от процессора. [39] : 7 SHA-3 подвергался критике за то, что он медленный на архитектурах с набором команд (ЦП), которые не имеют инструкций, специально предназначенных для более быстрого вычисления функций Keccak - SHA2-512 более чем в два раза быстрее, чем SHA3-512, а SHA -1 более чем в три раза быстрее процессора Intel Skylake с тактовой частотой 3,2 ГГц. [40] Авторы отреагировали на эту критику, предложив использовать SHAKE128 и SHAKE256 вместо SHA3-256 и SHA3-512 за счет сокращения вдвое сопротивления прообраза (но при сохранении сопротивления столкновению). При этом производительность находится на уровне SHA2-256 и SHA2-512.
Однако в аппаратных реализациях SHA-3 заметно быстрее, чем все другие финалисты [41], а также быстрее, чем SHA-2 и SHA-1. [40]
Архитектуры ARMv8 [42] и IBM s390x уже (по состоянию на 2018 год) включают специальные инструкции, которые позволяют алгоритмам Keccak выполняться быстрее.
Экземпляры [ править ]
Стандарт NIST определяет следующие экземпляры для сообщения M и выходной длины d : [5] : 20,23
Пример | Выходной размер d | Скорость r = размер блока | Емкость c | Определение | Сильные стороны безопасности в битах | ||
---|---|---|---|---|---|---|---|
Столкновение | Прообраз | 2-й прообраз | |||||
SHA3-224 ( M ) | 224 | 1152 | 448 | Кечак [448] ( M || 01, 224) | 112 | 224 | 224 |
SHA3-256 ( M ) | 256 | 1088 | 512 | Кечак [512] ( M || 01, 256) | 128 | 256 | 256 |
SHA3-384 ( M ) | 384 | 832 | 768 | Кечак [768] ( M || 01, 384) | 192 | 384 | 384 |
SHA3-512 ( M ) | 512 | 576 | 1024 | Кечак [1024] ( M || 01, 512) | 256 | 512 | 512 |
SHAKE128 ( M , d ) | d | 1344 | 256 | Кечак [256] ( M || 1111, d ) | мин ( д / 2,128) | ≥мин ( д , 128) | мин ( д , 128) |
SHAKE256 ( M , d ) | d | 1088 | 512 | Кечак [512] ( M || 1111, d ) | мин ( d / 2,256) | ≥мин ( д , 256) | мин ( д , 256) |
Со следующими определениями
- Keccak [ c ] ( N , d ) = губка [Keccak-f [1600], pad10 * 1, r ] ( N , d ) [5] : 20
- Keccak-f [1600] = Keccak-p [1600, 24] [5] : 17
- c - емкость
- r - ставка = 1600 - c
- N - входная битовая строка
Экземпляры SHA-3 являются заменой SHA-2 и имеют идентичные свойства безопасности.
SHAKE будет генерировать столько битов из своей губки, сколько требуется, называемых XOF (расширяемые функции вывода). Например, SHAKE128 (M, 256) может использоваться как хэш-функция с потоком битов 256 символов с уровнем безопасности 128 бит. В качестве генераторов псевдослучайных чисел можно использовать произвольно большие длины. В качестве альтернативы SHAKE256 (M, 128) может использоваться как хэш-функция с длиной 128 бит и сопротивлением 128 бит, но в отличие от усеченного вывода функций семейств MD и SHA, включая SHA-3, сохранит свои свойства безопасности в любой момент. данный размер. Функции SHAKE требуют, чтобы каждый выходной бит был таким же сильным, как и последний, тогда как для других хешей требуется только, чтобы весь хеш был сильным, в то время как подмножество могло быть слабым. [5]
Все экземпляры добавляют к сообщению некоторые биты, крайний правый из которых представляет суффикс разделения домена. Это делается для того, чтобы гарантировать невозможность создания сообщений, которые производят один и тот же хеш-вывод для разных приложений хеш-функции Keccak. Существуют следующие суффиксы разделения домена: [5] [43]
Суффикс | Смысл |
---|---|
... 0 | зарезервировано для использования в будущем |
01 | SHA-3 |
... 11 | RawSHAKE |
1111 | Встряхнуть |
Дополнительные экземпляры [ править ]
В декабре 2016 года NIST опубликовал новый документ, NIST SP.800-185, [44], описывающий дополнительные производные от SHA-3 функции:
Пример | Описание |
---|---|
cSHAKE128 ( X , L , N , S ) | Версия SHAKE, поддерживающая явное разделение доменов с помощью параметров настройки. |
cSHAKE256 ( X , L , N , S ) | |
KMAC128 ( K , X , L , S ) | Шпонкой хэш - функции на основе Keccak. Также может использоваться без ключа как обычная хеш-функция. |
KMAC256 ( K , X , L , S ) | |
KMACXOF128 ( K , X , L , S ) | |
KMACXOF256 ( K , X , L , S ) | |
TupleHash128 ( X , L , S ) | Функция для хеширования кортежей строк. Вывод этой функции зависит как от содержимого, так и от последовательности входных строк. |
TupleHash256 ( X , L , S ) | |
TupleHashXOF128 ( X , L , S ) | |
TupleHashXOF256 ( X , L , S ) | |
ParallelHash128 ( X , B , L , S ) | Функция, разработанная для использования параллелизма в современных процессорах для более быстрого хеширования. В отличие от KangarooTwelve, не использует Keccak с уменьшенным количеством раундов. |
ParallelHash256 ( X , B , L , S ) | |
ParallelHashXOF128 ( X , B , L , S ) | |
ParallelHashXOF256 ( X , B , L , S ) |
• X - основная входная битовая строка. Он может быть любой длины, в том числе нулевой.
• L - целое число, представляющее запрашиваемую длину вывода в битах.
• N - битовая строка имени функции, используемая NIST для определения функций на основе cSHAKE. Когда не требуется никакой другой функции, кроме cSHAKE, N устанавливается на пустую строку.
• S - строка битов настройки. Пользователь выбирает эту строку, чтобы определить вариант функции. Если настройка не требуется, S устанавливается в пустую строку.
• K - строка ключей любой длины, включая ноль.
• B - размер блока в байтах для параллельного хеширования. Это может быть любое целое число, такое что 0 <B <2 2040 .
Более поздние разработки [ править ]
KangarooTwelve [ править ]
Общий | |
---|---|
Дизайнеров | Гвидо Бертони, Джоан Дэмен , Микаэль Петерс, Жиль Ван Аше , Ронни Ван Кир, Бенуа Вигье |
Впервые опубликовано | 10 августа 2016 г . |
Происходит от | Кечак |
Деталь | |
Размеры дайджеста | произвольный |
Состав | строительство губки и перемешивание деревьев с прыжком кенгуру |
Раундов | 12 |
Скорость | 0.51 CPB на SkylakeX с AVX-512 [45] |
Лучший публичный криптоанализ | |
То же, что и у Кечака |
В 2016 году та же команда, которая разработала функции SHA-3 и алгоритм Keccak, представила альтернативы более быстрых сокращенных раундов (уменьшенных до 12 и 14 раундов по сравнению с 24 в SHA-3), которые могут использовать доступность параллельного выполнения из-за использования дерева хеширование: KangarooTwelve и MarsupilamiFourteen. [46]
В отношении параллелизма эти функции отличаются от ParallelHash, стандартизированной параллелизируемой хеш-функции на основе FIPS на основе Keccak, тем, что они быстрее, чем ParallelHash, для сообщений небольшого размера.
Уменьшение количества раундов оправдано огромными криптоаналитическими усилиями, сосредоточенными на Keccak, которые не привели к практическим атакам на что-либо близкое к Keccak с двенадцатью раундами. Эти высокоскоростные алгоритмы не являются частью SHA-3 (поскольку они являются более поздней разработкой) и, следовательно, не совместимы с FIPS; но поскольку они используют ту же перестановку Keccak, они безопасны до тех пор, пока нет атак на SHA-3, сокращенных до 12 раундов. [46]
KangarooTwelve - это высокопроизводительная версия Keccak с сокращенным циклом (от 24 до 12 раундов), которая утверждает, что имеет 128 бит безопасности [47], а производительность составляет 0,55 цикла на байт на процессоре Skylake . [48] Этот алгоритм является черновиком IETF RFC . [49]
MarsupilamiFourteen, небольшая вариация на KangarooTwelve, использует 14 раундов перестановки Keccak и требует 256 бит безопасности. Обратите внимание, что 256-битная безопасность не более полезна на практике, чем 128-битная безопасность, но может потребоваться по некоторым стандартам. [47] 128 бит уже достаточно, чтобы отразить атаки грубой силы на текущее оборудование, поэтому наличие 256-битной защиты не добавляет практической ценности, если пользователь не беспокоится о значительном улучшении скорости классических компьютеров. Информацию о сопротивлении квантовым компьютерам см. Ниже.
KangarooTwelve и MarsupilamiFourteen - это функции расширяемого вывода, аналогичные SHAKE, поэтому они генерируют тесно связанный вывод для общего сообщения с разной длиной вывода (более длинный вывод является расширением более короткого вывода). Такое свойство не проявляется в хэш-функциях, таких как SHA-3 или ParallelHash (кроме вариантов XOF). [5]
Строительство Фарфалле [ править ]
В 2016 году команда Keccak выпустила другую конструкцию, названную конструкцией Farfalle, и Kravatte, экземпляр Farfalle, использующий перестановку Keccak-p [50], а также два аутентифицированных алгоритма шифрования Kravatte-SANE и Kravatte-SANSE [51]
Хеширование дерева сакуры [ править ]
RawSHAKE - это основа кода Sakura для хеширования дерева, которая еще не стандартизирована. Сакура использует суффикс 1111 для отдельных узлов, что эквивалентно SHAKE, и другие сгенерированные суффиксы в зависимости от формы дерева. [43] : 16
Защита от квантовых атак [ править ]
Существует общий результат ( алгоритм Гровера ), в котором квантовые компьютеры могут выполнять атаку структурированного прообраза, в то время как классическая атака грубой силы требует 2 d . Атака структурированного прообраза подразумевает атаку второго прообраза [27] и, следовательно, атаку столкновения . Квантовый компьютер также может выполнять атаку по случаю дня рождения , таким образом нарушая сопротивление столкновениям в [52] (хотя это оспаривается [53] ). Учитывая, что максимальная сила может быть , это дает следующие верхние [54] границы квантовой безопасности SHA-3:
Пример | Сильные стороны безопасности в битах | |||
---|---|---|---|---|
Столкновение (Брассард и др.) | Столкновение (Бернштейн) | Прообраз | 2-й прообраз | |
SHA3-224 ( M ) | 74⅔ | 112 | 112 | 112 |
SHA3-256 ( M ) | 85⅓ | 128 | 128 | 128 |
SHA3-384 ( M ) | 128 | 192 | 192 | 192 |
SHA3-512 ( M ) | 170⅔ | 256 | 256 | 256 |
SHAKE128 ( M , d ) | мин ( д / 3,128) | мин ( д / 2,128) | ≥мин ( d / 2,128) | мин ( д / 2,128) |
SHAKE256 ( M , d ) | мин ( d / 3,256) | мин ( d / 2,256) | ≥мин ( d / 2,256) | мин ( d / 2,256) |
Было показано, что конструкция Меркла-Дамгарда, используемая в SHA-2, разрушается и, как следствие, устойчива к квантовым столкновениям [55], но для конструкции губки, используемой в SHA-3, авторы предоставляют доказательства только для случай, когда блочная функция f не является эффективно обратимой; Keccak-f [1600], однако, эффективно обратим, и поэтому их доказательство неприменимо. [56]
Примеры вариантов SHA-3 [ править ]
Следующие хеш-значения взяты с сайта NIST.gov: [57]
SHA3-224 ("")6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7SHA3-256 ("")a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434aSHA3-384 ("")0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004SHA3-512 ("")a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26SHAKE128 ("", 256)7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26SHAKE256 ("", 512)46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f6fc821c49479ab48640292eacb3b7c4be
Изменение одного бита приводит к тому, что каждый бит на выходе изменяется с вероятностью 50%, демонстрируя лавинный эффект :
SHAKE128 («Быстрая коричневая лисица перепрыгивает через ленивого пса», 256)f4202e3c5852f9182a0430fd8144f0a74b95e7417ecae17db0f8cfeed0e3e66eSHAKE128 («Быстрая коричневая лиса перепрыгивает через ленивого до ф », 256)853f4538be0db9621a6cea659a06c1107b1f83f02b13d18297bd39d7411cf10c
Сравнение функций SHA [ править ]
В таблице ниже внутреннее состояние означает количество битов, которые переносятся в следующий блок.
Алгоритм и вариант | Размер вывода (бит) | Размер внутреннего состояния (биты) | Размер блока (бит) | Раундов | Операции | Защита от коллизионных атак (биты) | Защита от атак с увеличением длины (биты) | Производительность на Skylake (средняя цена за клик ) [58] | Впервые опубликовано | ||
---|---|---|---|---|---|---|---|---|---|---|---|
Длинные сообщения | 8 байт | ||||||||||
MD5 (как ссылка) | 128 | 128 (4 × 32) | 512 | 64 | And, Xor, Rot, Add (mod 2 32 ), Или | ≤ 18 (обнаружены коллизии) [59] | 0 | 4,99 | 55.00 | 1992 г. | |
SHA-0 | 160 | 160 (5 × 32) | 512 | 80 | And, Xor, Rot, Add (mod 2 32 ), Или | <34 (обнаружены коллизии) | 0 | ≈ SHA-1 | ≈ SHA-1 | 1993 г. | |
SHA-1 | <63 (обнаружены коллизии) [60] | 3,47 | 52,00 | 1995 г. | |||||||
SHA-2 | SHA-224 SHA-256 | 224 256 | 256 (8 × 32) | 512 | 64 | And, Xor, Rot, Add (mod 2 32 ), Or, Shr | 112 128 | 32 0 | 7,62 7,63 | 84,50 85,25 | 2004 2001 |
SHA-384 SHA-512 | 384 512 | 512 (8 × 64) | 1024 | 80 | And, Xor, Rot, Add (mod 2 64 ), Or, Shr | 192 256 | 128 (≤ 384) 0 [61] | 5,12 5,06 | 135,75 135,50 | 2001 г. | |
SHA-512/224 SHA-512/256 | 224 256 | 112 128 | 288 256 | ≈ SHA-384 | ≈ SHA-384 | 2012 г. | |||||
SHA-3 | SHA3-224 SHA3-256 SHA3-384 SHA3-512 | 224 256 384 512 | 1600 (5 × 5 × 64) | 1152 1088 832 576 | 24 [62] | И, Xor, Rot, Not | 112 128 192 256 | 448 512 768 1024 | 8,12 8,59 11,06 15,88 | 154,25 155,50 164,00 164,00 | 2015 г. |
SHAKE128 SHAKE256 | d (произвольно) d (произвольно) | 1344 1088 | мин ( д / 2, 128) мин ( д / 2, 256) | 256 512 | 7,08 8,59 | 155,25 155,50 |
Оптимизированная реализация с использованием AVX-512VL (то есть из OpenSSL , работающего на процессорах Skylake-X ) SHA3-256 действительно достигает примерно 6,4 цикла на байт для больших сообщений [63] и около 7,8 цикла на байт при использовании AVX2 на процессорах Skylake . [64] Производительность на других процессорах x86, Power и ARM в зависимости от используемых инструкций, а точная модель процессора варьируется от 8 до 15 циклов на байт [65] , [66] [67] с некоторыми более старыми процессорами x86 до 25-40 циклов на байт. [68]
Реализации [ править ]
Ниже приведен список библиотек криптографии, поддерживающих SHA-3:
- Русте SHA-3
- Ботан
- Надувной Замок
- Крипто ++
- Libgcrypt
- Крапива
- OpenSSL
- wolfSSL
- MIRACL Cryptographic SDK
- Golang's x / crypto / sha3
Аппаратное ускорение [ править ]
Шестиядерные процессорные ядра SoC Apple A13 ARMv8 поддерживают [69] ускорение SHA-3 (и SHA-512) с использованием специализированных инструкций (EOR3, RAX1, XAR, BCAX) из набора криптографических расширений ARMv8.2-SHA. [70]
Некоторые программные библиотеки используют средства векторизации ЦП для ускорения использования SHA-3. Например, Crypto ++ может использовать SSE2 на x86 для ускорения SHA3 [71], а OpenSSL может также использовать MMX , AVX-512 или AVX-512VL на многих системах x86. [72] Также процессоры POWER8 реализуют 2x64-битное вращение вектора, определенное в PowerISA 2.07, что может каким-то образом ускорить реализацию SHA-3. [73] В большинстве реализаций для ARM не используются векторные инструкции Neon, поскольку они медленнее, чем скалярный код , однако его можно ускорить с помощью SVE.и векторные инструкции SVE2 (например, на процессоре Fujitsu A64FX ). [74]
Использование в протоколах [ править ]
- Эфириум § Эфир
См. Также [ править ]
- Ethash - еще один хеш на основе Keccak
Ссылки [ править ]
- ^ a b Обзор реализации Keccak Версия 3.2 , раздел 3.1
- ^ Моравецкий, Павел; Пиепшик, Йозеф; Сребрный, Мариан (2013). Мориаи, С. (ред.). «Вращательный криптоанализ округлённо сокращенного Keccak» (PDF) . Конспект лекций по быстрому программному шифрованию по информатике . Конспект лекций по информатике. 8424 : 241–262. DOI : 10.1007 / 978-3-662-43933-3_13 . ISBN 978-3-662-43932-6. Архивировано 8 января 2013 года (PDF) . Проверено 8 февраля 2019 года .
- ^ Бертони, Гвидо; Дэмен, Джоан; Петерс, Микаэль; ван Аше, Джайлс (14 января 2011 г.). «Представление Keccak SHA-3» (PDF) . keccak.noekeon.org . Архивировано 19 августа 2011 года (PDF) . Проверено 9 февраля 2014 года .
- ^ a b «Хеш-функции» . NIST . 22 июня 2020 . Проверено 17 февраля 2021 года .
- ^ a b c d e f g h i NIST (август 2015 г.). «Стандарт SHA-3: хеширование на основе перестановок и функции расширяемого вывода» (PDF) . DOI : 10,6028 / NIST.FIPS.202 . Проверено 29 февраля 2020 года . Cite journal requires
|journal=
(help) - ^ Дворкин, Моррис J. (4 августа 2015). «Стандарт SHA-3: хеширование на основе перестановок и функции расширяемого вывода» . Федеральный Инф. Процесс. STDS. (NIST FIPS) - 202 .
- ^ a b «NIST выбирает победителя конкурса алгоритмов безопасного хеширования (SHA-3)» . NIST . 2 октября 2012 . Проверено 2 октября 2012 года .
- Перейти ↑ Cruz, José RC (7 мая 2013 г.). «Keccak: новый стандарт шифрования SHA-3» . Доктор Доббс .
- ^ Гвидо Бертони; Джоан Дэмен; Михаэль Петерс; Жиль Ван Аше. «Семейство функций губки Keccak: Обзор технических характеристик» . Проверено 11 мая 2011 года .
- ^ Чанг, Шу-джен; Перлнер, Рэй; Берр, Уильям Э .; Сонмез Туран, Мельтем; Келси, Джон М .; Пол, Сурадьюти; Бэшем, Лоуренс Э. (ноябрь 2012 г.). «Отчет третьего раунда конкурса алгоритмов хеширования шифрования SHA-3» (PDF) . DOI : 10,6028 / NIST.IR.7896 . Проверено 29 февраля 2020 года . Cite journal requires
|journal=
(help) Разделы 5.1.2.1 (упоминание «древовидного режима»), 6.2 («другие функции», упоминание аутентифицированного шифрования) и 7 (упоминание «дополнительных» может быть стандартизировано в будущем). - ^ a b Бертони, Гвидо; Дэмен, Джоан; Петерс, Микаэль; Ван Аше, Жиль; Ван Кир, Ронни (13 марта 2014 г.). «Представление CAESAR: Ketje v1» (PDF) . Проверено 29 февраля 2020 года .
- ^ a b Бертони, Гвидо; Дэмен, Джоан; Петерс, Микаэль; Ван Аше, Жиль; Ван Кир, Ронни (13 марта 2014 г.). «Представление CAESAR: Keyak v1» (PDF) . Проверено 29 февраля 2020 года .
- ^ a b Гвидо Бертони, Джоан Дэмен, Микаэль Петерс и Жиль Ван Аше. «Функции губки» . Ecrypt Hash Workshop 2007.CS1 maint: uses authors parameter (link)
- ^ «Объявление запроса на выдвижение кандидатур алгоритмов для нового семейства криптографических алгоритмов хеширования (SHA-3) [Федеральный регистр США Том 72 № 212]]» (PDF) . 2 ноября 2007 г. Архивировано 31 марта 2011 г. (PDF) из оригинала . Проверено 18 июля 2017 года .
- ^ Бертони, Гвидо; Дэмен, Джоан; Петерс, Микаэль; Ван Аше, Жиль. «Дорога из Панамы в Кеччак через RadioGatún» (PDF) . Проверено 29 февраля 2020 года .
- ^ KeccakReferenceAndOptimized-3.2.zip mainReference.c «Функция губки Keccak, разработанная Гвидо Бертони, Джоан Дэемен, Микаэль Петерс и Жиль Ван Аше. Для получения дополнительной информации, отзывов или вопросов посетите наш веб-сайт: http: // keccak. noekeon.org/Implementation [ постоянная мертвая ссылка ] , разработанная дизайнерами, далее обозначается как «исполнитель». В той степени, в которой это возможно в соответствии с законом, исполнитель отказался от всех авторских и смежных или смежных прав на исходный код в этом файле. https: //creativecommons.org/publicdomain/zero/1.0/ "
- ^ Стивенс, Марк; Бурштейн, Эли; Карпман, Пьер; Альбертини, Анж; Марков, Ярик. «Первая коллизия для полного SHA-1» (PDF) . Проверено 23 февраля 2017 года .
- ^ Леурент, Гаэтан; Пейрин, Томас. «SHA-1 - это бойня» . Проверено 8 января 2020 года .
- ^ «Отдел компьютерной безопасности NIST - Конкурс алгоритмов шифрования SHA-3, ноябрь 2007 г. - октябрь 2012 г.» . 4 января 2017 г.
- ^ "Параметр Keccak изменяется во втором раунде" . Команда Keccak . 22 сентября 2009 года. Архивировано 13 ноября 2017 года . Проверено 29 февраля 2020 года .
- ^ «Упрощение правила заполнения Keccak для раунда 3» . Команда Keccak . 17 января 2011 . Проверено 29 февраля 2020 года .
- ^ "Стандартизация SHA-3" . NIST . Проверено 16 апреля 2015 года .
- ↑ Национальный институт стандартов и технологий (5 августа 2015 г.). «Федеральные стандарты обработки информации: хеширование на основе перестановок, функции расширяемого вывода и т . Д.» . Проверено 5 августа 2015 года .
- ^ «Объявление об утверждении Федерального стандарта обработки информации (FIPS) 202, стандарта SHA-3: хеширование на основе перестановок и функции расширяемого вывода, а также пересмотр пункта о применимости FIPS 180-4, стандарта безопасного хеширования» . 5 августа 2015 года.
- ^ Джон Келси. «SHA3, где мы были, куда мы идем» (PDF) . Конференция RSA 2013.
- ^ Джон Келси. «SHA3, прошлое, настоящее и будущее» . ЧЕС 2013.
- ^ a b "Аннотация" (PDF) . cr.yp.to .
- ^ "Список рассылки хэш-форума NIST" . 4 января 2017 г.
- ^ "Представление Keccak SHA-3" (PDF) . 14 января 2011 . Проверено 8 февраля 2014 года .
- ^ «О 128-битной безопасности» .
- ^ "Конкретное предложение" . 2 октября 2013 г.
- ^ a b «Шнайер о безопасности: будет ли Keccak = SHA-3?» .
- ^ "LShift: Почему я поддерживаю правительство США, ослабляющее стандарт криптографии" .
- ^ "Да, это Кечак!" .
- ^ "Движение вперед с SHA-3" (PDF) .
- ^ Подразделение компьютерной безопасности NIST (CSD). «Стандарт SHA-3: хеширование на основе перестановок и функции расширяемого вывода» (PDF) . NIST.
- ^ «примерно 41 цикл / байт [...] представляет 40% ускорение по сравнению с реализацией, использующей только 32-битные инструкции». По формулеполучаем
- ↑ Бертони, Гвидо (29 мая 2012 г.). Обзор реализации Keccak (PDF) . п. 25 . Проверено 3 ноября 2018 года .
- ↑ Бернштейн, Дэниел Дж. (4 января 2012 г.). «Ошибки оптимизации в программном обеспечении SHA-3» (PDF) . cr.yp.to . Проверено 29 февраля 2020 года .
- ^ a b «Команда Кечак» . keccak.noekeon.org .
- ^ Го, Сюй; Хуанг, Синан; Нажандали, Лейла; Шаумонт, Патрик (август 2010 г.), «Справедливая и всесторонняя оценка производительности 14 реализаций ASIC SHA-3 второго раунда» (PDF) , NIST 2nd SHA-3 Candidate Conference : 12 , получено 18 февраля 2011 г. Кечак уступает только Луффе, который не прошел в финальный раунд.
- ^ Корпорация ARM, справочное руководство по архитектуре ARM ARMv8, для профиля архитектуры ARMv8-A, документ ARM DDI 0487C.a (ID121917), https://www.arm.com
- ^ a b «Сакура: гибкое кодирование для хеширования деревьев» (PDF) . Команда Keccak . 2014 . Проверено 29 февраля 2020 года .
- ^ SHA-3 Производные функции: cSHAKE, KMAC, TupleHash и ParallelHash Эта статья включает текст из этого источника, который находится в общественном достоянии .
- ^ «Показатели производительности программного обеспечения» .
- ^ a b «Команда Keccak: KangarooTwelve» . Команда Keccak.
- ^ a b «KangarooTwelve: быстрое хеширование на основе Keccak-p» (PDF) . Международная ассоциация криптологических исследований . 2016 г.
- ^ «KangarooTwelve слайдов, представленных на ACNS 2018» (PDF) . Команда Keccak.
- ^ "draft-irtf-cfrg-kangarootwelve-00 - KangarooTwelve" . datatracker.ietf.org . IETF . Проверено 17 января 2020 года .
- ^ Guido Bertoni, Джоан Daemen, Сет Hoffert, Микаэль Питерс, Жиль Ван Аш, Ronny Van Кир (29 декабря 2016). «Фарфалле: криптография на основе параллельных перестановок» .CS1 maint: uses authors parameter (link)
- ^ Guido Bertoni, Джоан Daemen, Сет Hoffert, Микаэль Питерс, Жиль Ван Аш, Ronny Van Кир (12 октября 2018). «Аутентифицированные схемы шифрования Kravatte-SANE и Kravatte-SANSE» .CS1 maint: uses authors parameter (link)
- ^ Брассар, Жиль; Хойер, Питер; Тэпп, Ален (1998). «Квантовый криптоанализ хеш-функций и функций без когтей». Аннотация . Конспект лекций по информатике. 1380 . С. 163–169. arXiv : квант-ph / 9705002 . DOI : 10.1007 / BFb0054319 . ISBN 978-3-540-64275-6. S2CID 118940551 .
- ^ «Анализ затрат» (PDF) . cr.yp.to .
- ^ "Проблема столкновения" (PDF) . scottaaronson.com .
- ^ «Бумага» (PDF) . eprint.iacr.org . 2016 г.
- ^ "Аннотация" (PDF) . eprint.iacr.org . 2017 г.
- ^ "NIST.gov - Отдел компьютерной безопасности - Центр ресурсов компьютерной безопасности" . 29 декабря 2016 г.
- ^ «Таблица измерений» . bench.cr.yp.to .
- ^ Тао, Се; Лю, Фаньбао; Фэн, Дэнго (2013). Fast Collision Attack на MD5 (PDF) . Cryptology ePrint Archive (Технический отчет). МАКР .
- ^ Стивенс, Марк ; Бурштейн, Эли ; Карпман, Пьер; Альбертини, Анж; Марков, Ярик. Первая коллизия для полного SHA-1 (PDF) (Технический отчет). Google Research . Краткое содержание - Блог по безопасности Google (23 февраля 2017 г.).
- ^ Без усечения известно полное внутреннее состояние хеш-функции, независимо от сопротивления столкновениям. Если вывод усечен, удаленная часть состояния должна быть отыскана и найдена до того, как хеш-функция может быть возобновлена, что позволит продолжить атаку.
- ^ "Семейство функций губки Keccak" . Проверено 27 января, 2016 .
- ^ "openssl / openssl- kecak1600-avx512vl.pl" . GitHub . Проверено 25 июня 2020 года .
- ^ "openssl / openssl - keccak1600-avx2.pl" . GitHub .
- ^ "openssl / openssl - keccak1600-x86_64.pl" . GitHub . Проверено 25 июня 2020 года .
- ^ "openssl / openssl - keccak1600-armv8.pl" . GitHub .
- ^ "openssl / openssl - keccak1600-ppc64.pl" . GitHub . Проверено 25 июня 2020 года .
- ^ "openssl / openssl - kccak1600-mmx.pl" . GitHub . Проверено 25 июня 2020 года .
- ^ "llvm / llvm-project - AArch64.td" . GitHub . Проверено 24 июня 2020 года .
- ^ "ARMv8 - ARM - WikiChip" . en.wikichip.org . Проверено 24 июня 2020 года .
- ^ "weidai11 / cryptopp" . GitHub . Проверено 25 июня 2020 года .
- ^ "openssl / openssl" . GitHub . Проверено 25 июня 2020 года .
- ^ "openssl / openssl" . GitHub .
- ^ "apple / llvm-project - lib / Target / AArch64 / AArch64SVEInstrInfo.td" . GitHub . Проверено 25 июня 2020 года .
Внешние ссылки [ править ]
- Веб-сайт Keccak