Безопасные алгоритмы хэширования | |
---|---|
Концепции | |
хэш-функции , SHA , DSA | |
Основные стандарты | |
SHA-0 , SHA-1 , SHA-2 , SHA-3 | |
Общий | |
---|---|
Дизайнеры | Гвидо Бертони, Джоан Демен , Микаэль Питерс и Жиль ван Аш . |
Впервые опубликовано | 2016 ( 2016 ) |
Ряд | ( ША-0 ), ША-1 , ША-2 , ША-3 |
Сертификация | ФИПС ПУБ 202 |
Деталь | |
Размеры дайджеста | произвольный |
Структура | губчатая конструкция |
Скорость | 12,6 cpb на типичной машине на базе x86-64 для Keccak-f[1600] плюс XOR 1024 бит, [1] что примерно соответствует SHA2-256. |
Лучший публичный криптоанализ | |
Атака прообраза на Keccak-512 сокращена до 8 раундов, требуя 2 511,5 времени и 2 508 памяти. [2] Существуют различители с нулевой суммой для полного 24-раундового Keccak-f[1600], хотя их нельзя использовать для атаки на саму хэш-функцию [3] |
SHA-3 ( Secure Hash Algorithm 3 ) — новейший [4] член семейства стандартов Secure Hash Algorithm , выпущенный NIST 5 августа 2015 года. [5] [6] [7] Несмотря на то, что SHA-3 является частью той же серии стандартов, он внутренне отличается от MD5 -подобной структуры SHA -1 и SHA-2 .
SHA-3 является подмножеством более широкого семейства криптографических примитивов Keccak ( / ˈ k ɛ tʃ æ k / или / ˈ k ɛ tʃ ɑː k / ), [8] [9] разработанного Гвидо Бертони, Джоан Дэменом , Михаэлем Петерсом и Жилем Ван Асше на основе RadioGatún . Авторы Keccak предложили дополнительные варианты использования функции, (еще) не стандартизированные NIST, включая потоковый шифр , аутентифицированную систему шифрования , схему хеширования «дерево» для более быстрого хеширования на определенных архитектурах, [10] [11] и шифры AEAD Keyak и Ketje. [12] [13]
Keccak основан на новом подходе, называемом конструкцией губки . [14] Конструкция губки основана на широкой случайной функции или случайной перестановке и позволяет вводить («поглощать» в терминологии губки) любой объем данных и выводить («сжимать») любой объем данных, действуя при этом как псевдослучайная функция по отношению ко всем предыдущим входам. Это приводит к большой гибкости.
По состоянию на 2022 год NIST не планирует отзывать SHA-2 или удалять его из пересмотренного стандарта Secure Hash. [15] Цель SHA-3 заключается в том, что он может быть напрямую заменен на SHA-2 в текущих приложениях при необходимости, а также в значительном повышении надежности общего инструментария алгоритма хэширования NIST. [16]
Для небольших размеров сообщений создатели алгоритмов Keccak и функций SHA-3 предлагают использовать более быструю функцию KangarooTwelve с настроенными параметрами и новым режимом древовидного хеширования без дополнительных накладных расходов.
Алгоритм Keccak — это работа Гвидо Бертони, Джоан Даемен (который также совместно с Винсентом Рейменом разработал шифр Rijndael ), Михаэля Петерса и Жиля Ван Аша . Он основан на более ранних разработках хэш-функций PANAMA и RadioGatún . PANAMA была разработана Дейменом и Крейгом Клэппом в 1998 году. RadioGatún, преемник PANAMA, был разработан Дейменом, Петерсом и Ван Ашем и представлен на семинаре NIST Hash в 2006 году. [17] Исходный код эталонной реализации был передан в общественное достояние через CC0 waiver . [18]
В 2006 году NIST начал организовывать конкурс хэш-функций NIST для создания нового стандарта хэширования, SHA-3. SHA-3 не предназначен для замены SHA-2 , поскольку не было публично продемонстрировано ни одной значительной атаки на SHA-2 [ нужно обновление ] . Из-за успешных атак на MD5 , SHA-0 и SHA-1 , [19] [20] NIST осознал необходимость в альтернативном, отличающемся криптографическом хэше, которым стал SHA-3.
После подготовительного периода, заявки на участие должны были быть поданы до конца 2008 года. Keccak был принят в качестве одного из 51 кандидатов. В июле 2009 года 14 алгоритмов были отобраны для второго тура. Keccak продвинулся до последнего тура в декабре 2010 года. [21]
Во время конкурса участникам разрешалось «подправлять» свои алгоритмы для решения обнаруженных проблем. Изменения, внесенные в Keccak: [22] [23]
2 октября 2012 года Keccak был выбран победителем конкурса. [8]
В 2014 году NIST опубликовал проект FIPS 202 «Стандарт SHA-3: хэш на основе перестановок и расширяемые выходные функции». [24] FIPS 202 был одобрен 5 августа 2015 года. [25]
5 августа 2015 года NIST объявил, что SHA-3 стал стандартом хеширования. [26]
В начале 2013 года NIST объявил, что они выберут другие значения для «емкости», параметра общей прочности по сравнению со скоростью, для стандарта SHA-3, по сравнению с представленными. [27] [28] Изменения вызвали некоторую суматоху.
Конкурс хэш-функций требовал хэш-функций, по крайней мере, таких же безопасных, как экземпляры SHA-2. Это означает, что d -битный выход должен иметь d /2-битную устойчивость к атакам коллизий и d -битную устойчивость к атакам прообразов , максимально достижимую для d бит выходных данных. Доказательство безопасности Keccak допускает регулируемый уровень безопасности на основе «емкости» c , обеспечивая c /2-битную устойчивость как к атакам коллизий, так и к атакам прообразов. Чтобы соответствовать первоначальным правилам конкурса, авторы Keccak предложили c = 2 d . Объявленное изменение заключалось в принятии той же d /2-битной безопасности для всех форм атак и стандартизации c = d . Это ускорило бы Keccak, позволив хэшировать дополнительные d бит входных данных на каждой итерации. Однако хэш-функции больше не были бы заменами с той же устойчивостью прообразов, что и SHA-2; он был бы разрезан пополам, что сделало бы его уязвимым для достижений в области квантовых вычислений, которые фактически разрезали бы его еще раз пополам. [29]
В сентябре 2013 года Дэниел Дж. Бернстайн предложил в списке рассылки NIST hash-forum [30] усилить безопасность до 576-битной емкости, которая изначально предлагалась как Keccak по умолчанию, в дополнение к спецификациям SHA-3, не включенным в них. [31] Это обеспечило бы по крайней мере SHA3-224 и SHA3-256 такую же устойчивость к прообразу, как и их предшественники SHA-2, но SHA3-384 и SHA3-512 имели бы значительно меньшую устойчивость к прообразу, чем их предшественники SHA-2. В конце сентября команда Keccak ответила, заявив, что они предложили 128-битную безопасность, установив c = 256 в качестве опции уже в своем предложении SHA-3. [32] Хотя, по их мнению, уменьшенная емкость была оправдана, в свете отрицательного ответа они предложили увеличить емкость до c = 512 бит для всех случаев. Это было бы так же, как и любой предыдущий стандарт до уровня безопасности 256 бит, обеспечивая при этом разумную эффективность, [33] но не стойкость к 384-/512-битному прообразу, предлагаемую SHA2-384 и SHA2-512. Авторы заявили, что «заявлять или полагаться на уровни безопасности выше 256 бит бессмысленно».
В начале октября 2013 года Брюс Шнайер раскритиковал решение NIST на основании его возможных пагубных последствий для принятия алгоритма, заявив:
В воздухе витает слишком много недоверия. NIST рискует опубликовать алгоритм, которому никто не будет доверять и который никто (кроме вынужденных) не будет использовать. [34]
Позднее он отказался от своего предыдущего заявления, заявив:
Я оговорился, когда написал, что NIST внес «внутренние изменения» в алгоритм. Это было неряшливо с моей стороны. Перестановка Keccak осталась неизменной. NIST предложил уменьшить емкость хэш-функции во имя производительности. Одной из приятных особенностей Keccak является то, что он легко настраивается. [34]
Пол Кроули, криптограф и старший разработчик в независимой компании по разработке программного обеспечения, выразил свою поддержку решению, заявив, что Keccak должен быть настраиваемым и нет причин для разных уровней безопасности в пределах одного примитива. Он также добавил:
Да, немного обидно за конкурс, что они потребовали определенного уровня безопасности для участников, а затем пошли публиковать стандарт с другим уровнем. Но сейчас ничего нельзя сделать, чтобы исправить это, кроме как снова открыть конкурс. Требование, чтобы они придерживались своей ошибки, не улучшает положение дел ни для кого. [35]
Возникла некоторая путаница относительно того, что в Keccak могли быть внесены внутренние изменения, которые были прояснены первоначальной командой, заявив, что предложение NIST для SHA-3 является подмножеством семейства Keccak, для которого можно генерировать тестовые векторы, используя их справочный код, представленный на конкурс, и что это предложение стало результатом серии обсуждений между ними и командой хэширования NIST. [36]
В ответ на разногласия в ноябре 2013 года Джон Келси из NIST предложил вернуться к первоначальному предложению c = 2 d для всех случаев замены SHA-2. [37] Возврат был подтвержден в последующих черновиках [38] и в окончательном выпуске. [5]
SHA-3 использует конструкцию губки [14] , в которой данные «впитываются» в губку, затем результат «выдавливается». В фазе поглощения блоки сообщений подвергаются операции XOR в подмножество состояния, которое затем преобразуется как целое с помощью функции перестановки (или преобразования ) . В фазе «выдавливания» выходные блоки считываются из того же подмножества состояния, чередуясь с функцией преобразования состояния . Размер части состояния, которая записывается и считывается, называется «скоростью» (обозначается ), а размер части, которая не затронута вводом/выводом, называется «емкостью» (обозначается ). Емкость определяет безопасность схемы. Максимальный уровень безопасности составляет половину емкости.
При наличии входной битовой строки , функции заполнения , функции перестановки , которая работает с битовыми блоками ширины , скорости и выходной длины , мы имеем емкость и конструкцию губки , дающую битовую строку длины , которая работает следующим образом: [6] : 18
Тот факт, что внутреннее состояние 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 также определен для меньших размеров слов степени 2 w до 1 бита (общее состояние 25 бит). Малые размеры состояний могут использоваться для тестирования криптоаналитических атак, а промежуточные размеры состояний (от w = 8 200 бит до w = 32 800 бит) могут использоваться в практических, легких приложениях. [12] [13]
Для экземпляров SHA3-224, SHA3-256, SHA3-384 и SHA3-512 r больше d , поэтому нет необходимости в дополнительных перестановках блоков в фазе сжатия; ведущие d биты состояния являются желаемым хешем. Однако SHAKE128 и SHAKE256 допускают произвольную длину выходных данных, что полезно в таких приложениях, как оптимальное асимметричное шифрование padding .
Чтобы гарантировать, что сообщение можно равномерно разделить на r -битные блоки, требуется заполнение. SHA-3 использует шаблон 10...01 в своей функции заполнения: бит 1, за которым следует ноль или более битов 0 (максимум r − 1 ) и последний бит 1.
Максимум r − 1 нулевых битов достигается, когда последний блок сообщения имеет длину r − 1 бит. Затем после начального 1 бита добавляется еще один блок, содержащий r − 1 нулевых битов перед последним 1 битом.
Два бита 1 будут добавлены, даже если длина сообщения уже делится на r . [6] : 5.1 В этом случае к сообщению добавляется еще один блок, содержащий бит 1, за которым следует блок из r − 2 нулевых битов и еще один бит 1. Это необходимо для того, чтобы сообщение с длиной, делящейся на r, заканчивающееся чем-то, что выглядит как заполнение, не создавало тот же хэш, что и сообщение с удаленными этими битами.
Начальный бит 1 необходим, чтобы сообщения, отличающиеся только несколькими дополнительными битами 0 в конце, не создавали одинаковый хэш.
Положение последнего бита 1 указывает, какая скорость r использовалась (многоскоростное заполнение), что требуется для того, чтобы доказательство безопасности работало для разных вариантов хеша. Без него разные варианты хеша одного и того же короткого сообщения были бы одинаковыми вплоть до усечения.
Блочное преобразование f , которое для SHA-3 равно Keccak-f[1600], представляет собой перестановку, использующую операции XOR , AND и NOT , и разработано для простой реализации как в программном обеспечении, так и в оборудовании.
Он определен для любого размера слова степени двойки , w = 2 ℓ бит. Основная подача SHA-3 использует 64-битные слова, ℓ = 6 .
Состояние можно рассматривать как массив битов 5 × 5 × w . Пусть a [ i ][ j ][ k ] будет битом (5 i + j ) × w + k входа, используя соглашение о нумерации битов little-endian и индексацию по строкам . То есть i выбирает строку, j — столбец, а k — бит.
Индексная арифметика выполняется по модулю 5 для первых двух измерений и по модулю w для третьего.
Базовая функция перестановки блоков состоит из 12 + 2 ℓ раундов по пять шагов:
Скорость хеширования 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] плюс XOR 1024 бит, [1] что примерно соответствует SHA3-256:
Для точного SHA3-256 на x86-64 Бернстайн измеряет 11,7–12,25 cpb в зависимости от ЦП. [40] : 7 SHA-3 критиковали за то, что он медленный на архитектурах наборов инструкций (ЦП), которые не имеют инструкций, специально предназначенных для вычисления функций Keccak быстрее – SHA2-512 более чем в два раза быстрее, чем SHA3-512, а SHA-1 более чем в три раза быстрее на процессоре Intel Skylake с тактовой частотой 3,2 ГГц. [41] Авторы отреагировали на эту критику, предложив использовать SHAKE128 и SHAKE256 вместо SHA3-256 и SHA3-512, за счет снижения сопротивления прообразу вдвое (но при сохранении сопротивления коллизии). При этом производительность находится на одном уровне с SHA2-256 и SHA2-512.
Однако в аппаратных реализациях SHA-3 заметно быстрее всех остальных финалистов, [42] а также быстрее, чем SHA-2 и SHA-1. [41]
По состоянию на 2018 год архитектура ARMv8 [43] от ARM включает специальные инструкции, которые позволяют алгоритмам Keccak выполняться быстрее, а архитектура z/Architecture [44] от IBM включает полную реализацию SHA-3 и SHAKE в одной инструкции. Также были предложения по расширению для RISC-V для добавления инструкций, специфичных для Keccak. [45]
Стандарт NIST определяет следующие случаи для сообщения M и длины вывода d : [6] : 20, 23
Пример | Размер выходного файла d | Скорость r = размер блока | Емкость с | Определение | Сила безопасности в битах сопротивления против | ||
---|---|---|---|---|---|---|---|
Столкновение | Прообраз | 2-й прообраз | |||||
SHA3-224( М ) | 224 | 1152 | 448 | Кеччак[448]( М || 01, 224) | 112 | 224 | 224 |
SHA3-256( М ) | 256 | 1088 | 512 | Кеччак[512]( М || 01, 256) | 128 | 256 | 256 |
SHA3-384( М ) | 384 | 832 | 768 | Кеччак[768]( М || 01, 384) | 192 | 384 | 384 |
SHA3-512( М ) | 512 | 576 | 1024 | Кеччак[1024]( М || 01, 512) | 256 | 512 | 512 |
SHAKE128( М , д ) | г | 1344 | 256 | Кеччак[256]( М || 1111, д ) | мин( д /2,128) | ≥min( д ,128) | мин( д ,128) |
SHAKE256( М , д ) | г | 1088 | 512 | Кеччак[512]( М || 1111, д ) | мин( д /2,256) | ≥min( д ,256) | мин( д ,256) |
Со следующими определениями
Экземпляры SHA-3 являются полностью готовыми заменами SHA-2 и призваны иметь идентичные свойства безопасности.
SHAKE будет генерировать столько битов из своей губки, сколько запрошено, таким образом, являясь расширяемыми выходными функциями (XOF). Например, SHAKE128(M, 256) может использоваться как хэш-функция с 256-символьным битовым потоком с 128-битной степенью безопасности. Произвольно большие длины могут использоваться как генераторы псевдослучайных чисел. В качестве альтернативы, SHAKE256(M, 128) может использоваться как хэш-функция с 128-битной длиной и 128-битной устойчивостью. [6]
Все экземпляры добавляют несколько битов к сообщению, самый правый из которых представляет суффикс разделения доменов . Цель этого — гарантировать невозможность создания сообщений, которые производят одинаковый хэш-вывод для различных приложений хэш-функции Keccak. Существуют следующие суффиксы разделения доменов: [6] [46]
Суффикс | Значение |
---|---|
...0 | зарезервировано для будущего использования |
01 | ША-3 |
...11 | RawSHAKE |
1111 | ВСТРЯХНУТЬ |
В декабре 2016 года NIST опубликовал новый документ NIST SP.800-185 [47] , описывающий дополнительные функции, полученные из SHA-3:
Пример | Описание |
---|---|
cSHAKE128( X , L , N , S ) | Версия SHAKE, поддерживающая явное разделение доменов с помощью параметров настройки. |
cSHAKE256( X , L , N , S ) | |
KMAC128( К , Х , Л , С ) | Ключевая хэш-функция на основе Keccak. Может также использоваться без ключа как обычная хэш-функция. |
KMAC256( К , Х , Л , С ) | |
KMACXOF128( К , Х , Л , С ) | |
KMACXOF256( К , Х , Л , С ) | |
TupleHash128( X , L , S ) | Функция хеширования кортежей строк. Выход этой функции зависит как от содержимого, так и от последовательности входных строк. |
TupleHash256( X , L , S ) | |
TupleHashXOF128( X , L , S ) | |
TupleHashXOF256( X , L , S ) | |
Параллельный хэш128( X , B , L , S ) | Функция, разработанная для использования параллелизма в современных процессорах для более быстрого хеширования. В отличие от KangarooTwelve, не использует сокращенный раунд Keccak. |
ParallelHash256( X , B , L , S ) | |
ПараллельныйХэшXOF128( X , B , L , S ) | |
ParallelHashXOF256( X , B , L , S ) |
• X — основная входная битовая строка. Может быть любой длины, включая нулевую.
• L — целое число, представляющее запрошенную длину выходных данных в битах.
• N — это строка битов имени функции, используемая NIST для определения функций на основе cSHAKE. Когда не требуется никакой другой функции, кроме cSHAKE, N устанавливается в пустую строку.
• S — это строка бита настройки. Пользователь выбирает эту строку, чтобы определить вариант функции. Если настройка не требуется, S устанавливается в пустую строку.
• K — строка битов ключа любой длины, включая ноль.
• B — размер блока в байтах для параллельного хеширования. Это может быть любое целое число, такое, что 0 < B < 2 2040 .
Общий | |
---|---|
Дизайнеры | Гвидо Бертони, Жоан Дэмен , Михаэль Питерс, Жиль Ван Аш , Ронни Ван Кир, Бенуа Вигье |
Впервые опубликовано | 10 августа 2016 г. ( 2016-08-10 ) |
Получено из | Кеччак |
Деталь | |
Размеры дайджеста | произвольный |
Структура | строительство губки и перемешивание дерева с прыжками кенгуру |
Раунды | 12 |
Скорость | 0,51 cpb на SkylakeX с AVX-512 [48] |
Лучший публичный криптоанализ | |
То же, что и у Кечкака |
В 2016 году та же команда, которая создала функции SHA-3 и алгоритм Keccak, представила более быстрые альтернативы с сокращенными раундами (сокращенными до 12 и 14 раундов с 24 в SHA-3), которые могут использовать доступность параллельного выполнения благодаря использованию древовидного хеширования : KangarooTwelve и MarsupilamiFourteen. [49]
Эти функции отличаются от ParallelHash, параллелизуемой хэш-функции на основе Keccak, стандартизированной FIPS, с точки зрения параллелизма тем, что они быстрее ParallelHash для небольших размеров сообщений.
Сокращенное количество раундов оправдано огромными криптоаналитическими усилиями, сосредоточенными на Keccak, которые не дали практических атак на что-либо близкое к двенадцати раундовому Keccak. Эти более скоростные алгоритмы не являются частью SHA-3 (так как они являются более поздней разработкой), и, таким образом, не соответствуют FIPS; но поскольку они используют ту же перестановку Keccak, они безопасны до тех пор, пока нет атак на SHA-3, сокращенный до 12 раундов. [49]
KangarooTwelve — это более производительная версия Keccak с сокращенным числом раундов (с 24 до 12), которая, как утверждается, имеет 128 бит безопасности [50] при производительности до 0,55 циклов на байт на процессоре Skylake . [51] Этот алгоритм является проектом IETF RFC . [52]
MarsupilamiFourteen, небольшая вариация KangarooTwelve, использует 14 раундов перестановки Keccak и заявляет о 256 битах безопасности. Обратите внимание, что 256-битная безопасность не более полезна на практике, чем 128-битная безопасность, но может быть необходима по некоторым стандартам. [50] 128 бит уже достаточно для отражения атак методом подбора на текущем оборудовании, поэтому наличие 256-битной безопасности не добавляет практической ценности, если только пользователь не беспокоится о значительном улучшении скорости классических компьютеров. О сопротивлении квантовым компьютерам см. ниже.
KangarooTwelve и MarsupilamiFourteen являются функциями Extendable-Output, похожими на SHAKE, поэтому они генерируют тесно связанный вывод для общего сообщения с разной длиной вывода (более длинный вывод является расширением более короткого вывода). Такое свойство не проявляется в хэш-функциях, таких как SHA-3 или ParallelHash (за исключением вариантов XOF). [6]
В 2016 году команда Keccak выпустила другую конструкцию, названную конструкцией Farfalle, и Kravatte, экземпляр Farfalle, использующий перестановку Keccak-p, [53], а также два аутентифицированных алгоритма шифрования Kravatte-SANE и Kravatte-SANSE [54].
RawSHAKE является основой для кодирования Sakura для хеширования деревьев, которое пока не стандартизировано. Sakura использует суффикс 1111 для отдельных узлов, эквивалентный SHAKE, и другие сгенерированные суффиксы в зависимости от формы дерева. [46] : 16
Существует общий результат ( алгоритм Гровера ), что квантовые компьютеры могут выполнить структурированную атаку прообраза за , в то время как классическая атака методом грубой силы требует 2 d . Структурированная атака прообраза подразумевает вторую атаку прообраза [29] и, таким образом, атаку коллизии . Квантовый компьютер также может выполнить атаку дня рождения , тем самым сломав устойчивость к коллизиям, в [55] (хотя это оспаривается). [56] Отмечая, что максимальная прочность может быть , это дает следующие верхние [57] границы квантовой безопасности SHA-3:
Пример | Сила безопасности в битах сопротивления против | |||
---|---|---|---|---|
Столкновение (Брассар и др.) | Столкновение (Бернштейн) | Прообраз | 2-й прообраз | |
SHA3-224( М ) | 74+2 ⁄ 3 | 112 | 112 | 112 |
SHA3-256( М ) | 85+1 ⁄ 3 | 128 | 128 | 128 |
SHA3-384( М ) | 128 | 192 | 192 | 192 |
SHA3-512( М ) | 170+2 ⁄ 3 | 256 | 256 | 256 |
SHAKE128( М , д ) | мин( д /3,128) | мин( д /2,128) | ≥min( д /2,128) | мин( д /2,128) |
SHAKE256( М , д ) | мин( д /3,256) | мин( д /2,256) | ≥min( д /2,256) | мин( д /2,256) |
Было показано, что конструкция Меркла–Дамгарда , используемая SHA-2, является коллапсирующей и, как следствие, устойчивой к квантовым столкновениям [58], но для конструкции губки, используемой SHA-3, авторы приводят доказательства только для случая, когда блочная функция f не является эффективно обратимой; однако Keccak-f[1600] эффективно обратима, и поэтому их доказательство неприменимо. [59] [ оригинальное исследование ]
Следующие значения хеша взяты из NIST.gov: [60]
SHA3-224("")6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7SHA3-256("")a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434aSHA3-384("")0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004SHA3-512("")a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a6 15b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26SHAKE128("", 256)7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26SHAKE256("", 512)46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762f d75dc4ddd8c0f200cb05019d67b592f6fc821c49479ab48640292eacb3b7c4be
Изменение одного бита приводит к изменению каждого бита на выходе с вероятностью 50%, демонстрируя лавинный эффект :
SHAKE128("Быстрая коричневая лиса перепрыгивает через ленивую собаку", 256)f4202e3c5852f9182a0430fd8144f0a74b95e7417ecae17db0f8cfeed0e3e66eSHAKE128("Быстрая коричневая лиса прыгает через ленивую до ф ", 256)853f4538be0db9621a6cea659a06c1107b1f83f02b13d18297bd39d7411cf10c
В таблице ниже внутреннее состояние означает количество бит, которые переносятся в следующий блок.
Алгоритм и вариант | Размер выходных данных (бит) | Размер внутреннего состояния (бит) | Размер блока (бит) | Раунды | Операции | Защита от атак столкновений (бит) | Защита от атак с удлинением длины (бит) | Производительность на Skylake (медианная cpb ) [61] | Впервые опубликовано | ||
---|---|---|---|---|---|---|---|---|---|---|---|
Длинные сообщения | 8 байт | ||||||||||
MD5 (в качестве справочного материала) | 128 | 128 (4 × 32) | 512 | 4 (16 операций в каждом раунде) | И, Исключающее или, Или, Вращение, Сложение (mod 2 32 ) | ≤ 18 (найдены столкновения) [62] | 0 | 4.99 | 55.00 | 1992 | |
ША-0 | 160 | 160 (5 × 32) | 512 | 80 | И, Исключающее или, Или, Вращение, Сложение (mod 2 32 ) | < 34 (найдены столкновения) | 0 | ≈ ША-1 | ≈ ША-1 | 1993 | |
ША-1 | < 63 (найдены столкновения) [63] | 3.47 | 52.00 | 1995 | |||||||
ША-2 | ША-224 ША-256 | 224 256 | 256 (8 × 32) | 512 | 64 | И, Исключающее, Или, Рот, Шр, Добавить (мод 2 32 ) | 112 128 | 32 0 | 7.62 7.63 | 84,50 85,25 | 2004 2001 |
ША-384 | 384 | 512 (8 × 64) | 1024 | 80 | И, Исключающее, Или, Вращение, Шр, Сложение (мод 2 64 ) | 192 | 128 | 5.12 | 135,75 | 2001 | |
ША-512 | 512 | 256 | 0 [64] | 5.06 | 135.50 | 2001 | |||||
ША-512/224 ША-512/256 | 224 256 | 112 128 | 288 256 | ≈ SHA-384 | ≈ SHA-384 | 2012 | |||||
ША-3 | SHA3-224 SHA3-256 SHA3-384 SHA3-512 | 224 256 384 512 | 1600 (5 × 5 × 64) | 1152 1088 832 576 | 24 [65] | И, 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 |
ВСТРЯХНУТЬ128 ВСТРЯХНУТЬ256 | 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 циклов на байт для больших сообщений, [66] и около 7,8 циклов на байт при использовании AVX2 на процессорах Skylake . [67] Производительность на других процессорах x86, Power и ARM в зависимости от используемых инструкций и конкретной модели процессора варьируется от около 8 до 15 циклов на байт, [68] [69] [70] с некоторыми старыми процессорами x86 до 25–40 циклов на байт. [71]
Ниже приведен список криптографических библиотек, поддерживающих SHA-3:
Шестиядерные ядра процессора SoC Apple A13 ARMv8 поддерживают [72] ускорение SHA-3 (и SHA-512) с использованием специализированных инструкций (EOR3, RAX1, XAR, BCAX) из набора крипторасширений ARMv8.2-SHA. [73]
Некоторые библиотеки программного обеспечения используют возможности векторизации ЦП для ускорения использования SHA-3. Например, Crypto++ может использовать SSE2 на x86 для ускорения SHA3, [74] а OpenSSL может использовать MMX , AVX-512 или AVX-512VL на многих системах x86. [75] Также ЦП POWER8 реализуют 2x64-битный поворот вектора, определенный в PowerISA 2.07, что может ускорить реализации SHA-3. [76] Большинство реализаций для ARM не используют векторные инструкции Neon , поскольку скалярный код быстрее. Однако реализации ARM можно ускорить с помощью векторных инструкций SVE и SVE2; они доступны , например, в ЦП Fujitsu A64FX . [77]
IBM z/Architecture поддерживает SHA-3 с 2017 года как часть расширения Message-Security-Assist Extension 6. [78] Процессоры поддерживают полную реализацию всех алгоритмов SHA-3 и SHAKE с помощью инструкций KIMD и KLMD, используя аппаратный вспомогательный механизм, встроенный в каждое ядро.
Ethereum использует хэш-функцию Keccak-256 (согласно версии 3 победившей заявки на конкурс SHA-3 Бертони и др., которая отличается от окончательной спецификации SHA-3). [79]