SHA-3
SHA-3, Keccak | |
---|---|
Разработчики | Гвидо Бертони, Йоан Даймен, Микаел Питерс, Жиль Ван Аше |
Создан | 2008 |
Опубликован | 2008 |
Размер хеша | 224, 256, 384, 512 (переменный, 0<d≤264-1) |
Число раундов | 24 (по умолчанию) |
Тип | хеш-функция |
SHA-3 (Keccak — произносится как «кечак») — алгоритм хеширования переменной разрядности, разработанный группой авторов во главе с Йоаном Дайменом, соавтором Rijndael, автором шифров MMB, SHARK, Noekeon, SQUARE и BaseKing. 2 октября 2012 года Keccak стал победителем конкурса криптографических алгоритмов, проводимого Национальным институтом стандартов и технологий США[1]. 5 августа 2015 года алгоритм утверждён и опубликован в качестве стандарта FIPS 202[2][3]. В программной реализации авторы заявляют о 12,5 циклах на байт при выполнении на ПК с процессором Intel Core 2. Однако в аппаратных реализациях Keccak оказался намного быстрее, чем все другие финалисты.[4]
Алгоритм SHA-3 построен по принципу криптографической губки (данная структура криптографических алгоритмов была предложена авторами алгоритма Keccak ранее)[5].
История
В 2004—2005 годах несколько алгоритмов хеширования были атакованы, в том числе были опубликованы серьезные атаки против алгоритма SHA-1, утвержденного Национальным институтом стандартов и технологий (NIST). В ответ NIST провел открытые семинары и 2 ноября 2007 года анонсировал конкурс на разработку нового алгоритма хеширования. 2 октября 2012 года победителем конкурса стал алгоритм Keccak и был стандартизован как новый алгоритм SHA-3[6]. 5 августа 2015 года алгоритм утвержден и опубликован в качестве стандарта FIPS 202[2][3].
Алгоритм был разработан Гвидо Бертони[англ.], Йоаном Дайменом, Жилем Ван Аше[англ.] из STMicroelectronics и Микаэлем Питерсом[англ.] из NXP[7].
Алгоритм основан на более ранних хеш-функциях Panama и RadioGatún[8]. Panama был разработан Дайменом и Крейгом Клэппом в 1998 году, RadioGatún был реализован на основе Panama Дайменом, Питерсом и Ван Аше в 2006 году[8].
В ходе конкурса конкурсантам разрешалось вносить изменения в свой алгоритм для исправления обнаруживающихся проблем. Изменения, внесенные в алгоритм Keccak[9][10]:
- Количество раундов было увеличено с 12 + [math]\displaystyle{ l }[/math] до 12 + 2[math]\displaystyle{ l }[/math]
- Padding был изменён со сложной формы на более простую, описанную ниже
- Скорость (rate) r была увеличена до предела безопасности (ранее округлялась вниз до ближайшей степени 2)
Алгоритм
Хеш-функции семейства SHA-3 построены на основе конструкции криптографической губки[5], в которой данные сначала «впитываются» в губку, при котором исходное сообщение [math]\displaystyle{ M }[/math] подвергается многораундовым перестановкам [math]\displaystyle{ f }[/math], затем результат [math]\displaystyle{ Z }[/math] «отжимается» из губки. На этапе «впитывания» блоки сообщения суммируются по модулю 2 с подмножеством состояния, после чего всё состояние преобразуется с помощью функции перестановки [math]\displaystyle{ f }[/math]. На этапе «отжимания» выходные блоки считываются из одного и того же подмножества состояния, изменённого функцией перестановок [math]\displaystyle{ f }[/math]. Размер части состояния, который записывается и считывается, называется «скоростью» (англ. rate) и обозначается [math]\displaystyle{ r }[/math], а размер части, которая нетронута вводом / выводом, называется «ёмкостью» (англ. capacity) и обозначается [math]\displaystyle{ c }[/math].
Алгоритм получения значения хеш-функции можно разделить на несколько этапов[11]:
- Исходное сообщение [math]\displaystyle{ M }[/math] дополняется до строки [math]\displaystyle{ P }[/math] длины, кратной [math]\displaystyle{ r }[/math], с помощью функции дополнения (pad-функции);
- Строка [math]\displaystyle{ P }[/math] делится на [math]\displaystyle{ n }[/math] блоков длины [math]\displaystyle{ r }[/math]: [math]\displaystyle{ P_0, P_1, ... , P_{n-1} }[/math];
- «Впитывание»: каждый блок [math]\displaystyle{ P_i }[/math] дополняется нулями до строки длины [math]\displaystyle{ b }[/math] бит и суммируется по модулю 2 со строкой состояния [math]\displaystyle{ S }[/math], где [math]\displaystyle{ S }[/math] — строка длины [math]\displaystyle{ b }[/math] бит ([math]\displaystyle{ b }[/math] = [math]\displaystyle{ r }[/math] + [math]\displaystyle{ c }[/math]). Перед началом работы функции все элементы [math]\displaystyle{ S }[/math] равны нулю. Для каждого следующего блока состояние — строка, полученная применением функции перестановок [math]\displaystyle{ f }[/math] к результату предыдущего шага;
- «Отжимание»: пока длина [math]\displaystyle{ Z }[/math] меньше [math]\displaystyle{ d }[/math] ([math]\displaystyle{ d }[/math] — количество бит в результате хеш-функции), к [math]\displaystyle{ Z }[/math] добавляется [math]\displaystyle{ r }[/math] первых бит состояния [math]\displaystyle{ S }[/math], после каждого прибавления к [math]\displaystyle{ S }[/math] применяется функция перестановок [math]\displaystyle{ f }[/math]. Затем [math]\displaystyle{ Z }[/math] обрезается до длины [math]\displaystyle{ d }[/math] бит;
- Строка [math]\displaystyle{ Z }[/math] длины [math]\displaystyle{ d }[/math] бит возвращается в качестве результата.
Благодаря тому, что состояние содержит [math]\displaystyle{ c }[/math] дополнительных бит, алгоритм устойчив к атаке удлинением сообщения, к которой восприимчивы алгоритмы SHA-1 и SHA-2.
В SHA-3 состояние [math]\displaystyle{ S }[/math] — это массив 5 × 5 слов длиной [math]\displaystyle{ w }[/math] = 64 бита, всего 5 × 5 × 64 = 1600 бит. Также в Keccak могут использоваться длины [math]\displaystyle{ w }[/math], равные меньшим степеням 2 (от [math]\displaystyle{ w }[/math] = 1 до [math]\displaystyle{ w }[/math] = 32).
Дополнение
Для того, чтобы исходное сообщение M можно было разделить на блоки длины r, необходимо дополнение. В SHA-3 используется паттерн pad10*1[11]: к сообщению добавляется 1, после него — 0 или больше нулевых битов (до r-1), в конце — 1.
r-1 нулевых битов может быть добавлено, когда последний блок сообщения имеет длину r-1 бит. Этот блок дополняется единицей, следующий блок будет состоять из r-1 нулей и единицы.
Два единичных бита добавляются и в том случае, если длина исходного сообщения M делится на r[11]. В этом случае к сообщению добавляется блок, начинающийся и оканчивающийся единицами, между которыми r-2 нулевых битов. Это необходимо для того, чтобы для сообщения, оканчивающегося последовательностью битов как в функции дополнения, и для сообщения без этих битов значения хеш-функции были различны.
Первый единичный бит необходим для того, чтобы результаты хеш-функции от сообщений, различающихся несколькими нулевыми битами в конце, были различны[11].
Функция перестановок
Функция перестановок, используемая в SHA-3, включает в себя исключающее «ИЛИ» (XOR), побитовое «И» (AND) и побитовое отрицание (NOT). Функция определена для строк длины-степени 2 [math]\displaystyle{ w = 2^l }[/math]. В основной реализации SHA-3 [math]\displaystyle{ w = 64 }[/math] ([math]\displaystyle{ l = 6 }[/math]).
Состояние [math]\displaystyle{ S }[/math] можно представить в виде трёхмерного массива [math]\displaystyle{ A }[/math] размером 5 × 5 × [math]\displaystyle{ w }[/math]. Тогда элемент массива [math]\displaystyle{ A[i][j][k] }[/math] - это [math]\displaystyle{ (5i + j) \times w + k }[/math] бит строки состояния [math]\displaystyle{ S }[/math].
Функция содержит несколько шагов: [math]\displaystyle{ \theta }[/math], [math]\displaystyle{ \rho }[/math], [math]\displaystyle{ \pi }[/math], [math]\displaystyle{ \chi }[/math], [math]\displaystyle{ \iota }[/math], которые выполняются несколько раундов[11]. На каждом шаге обозначим входной массив A, выходной массив A'.
Шаг [math]\displaystyle{ \theta }[/math]
Для всех [math]\displaystyle{ i }[/math] и [math]\displaystyle{ k }[/math], таких, что [math]\displaystyle{ 0 \leqslant i \lt 5 }[/math], [math]\displaystyle{ 0 \leqslant k \lt w }[/math], положим
[math]\displaystyle{ C(i, k) = A[i, 0, k] \oplus A[i, 1, k] \oplus A[i, 2, k] \oplus A[i, 3, k] \oplus A[i, 4, k] }[/math]
[math]\displaystyle{ D(i, k) = C[(i-1) \bmod 5, k] \oplus C[(i+1) \bmod 5, (k-1) \bmod w] }[/math]
Для всех [math]\displaystyle{ (i, j, k) }[/math], таких, что [math]\displaystyle{ 0 \leqslant i \lt 5 }[/math], [math]\displaystyle{ 0 \leqslant j \lt 5 }[/math], [math]\displaystyle{ 0 \leqslant k \lt w }[/math],
[math]\displaystyle{ A'[i, j,k] = A[i, j, k] \oplus D[i, k] }[/math]
Шаг [math]\displaystyle{ \rho }[/math]
Для всех [math]\displaystyle{ k }[/math], таких, что [math]\displaystyle{ 0 \leqslant k \lt w }[/math], [math]\displaystyle{ A'[0,0,k] = A[0,0,k] }[/math]
Пусть в начале [math]\displaystyle{ (i, j) = (1, 0) }[/math]. Для [math]\displaystyle{ t }[/math] от 0 до 23:
- Для всех [math]\displaystyle{ k }[/math], таких, что [math]\displaystyle{ 0 \leqslant k \lt w }[/math], [math]\displaystyle{ A'[i,j, k] = A[i, j, (k-(t+1)(t+2)/2) \bmod w] }[/math]
- [math]\displaystyle{ (i, j) = (j, (2i + 3j) \bmod 5) }[/math]
Шаг [math]\displaystyle{ \pi }[/math]
Для всех [math]\displaystyle{ (i, j, k) }[/math], таких, что [math]\displaystyle{ 0 \leqslant i \lt 5 }[/math], [math]\displaystyle{ 0 \leqslant j \lt 5 }[/math], [math]\displaystyle{ 0 \leqslant k \lt w }[/math]
[math]\displaystyle{ A'[i,j,k] = A[(i + 3j) \bmod 5, i, k] }[/math]
Шаг [math]\displaystyle{ \chi }[/math]
Для всех [math]\displaystyle{ (i, j, k) }[/math], таких, что [math]\displaystyle{ 0 \leqslant i \lt 5 }[/math], [math]\displaystyle{ 0 \leqslant j \lt 5 }[/math],
[math]\displaystyle{ A'[i,j,k] = A[i,j,k] \oplus ((A[(i+1) \bmod 5, j, k] \oplus 1) \cdot A[(i+2) \bmod 5, j, k]) }[/math]
Шаг [math]\displaystyle{ \iota }[/math]
Введем дополнительную функцию [math]\displaystyle{ rc(t) }[/math], где вход — целое число [math]\displaystyle{ t }[/math], а на выходе — бит.
Алгоритм [math]\displaystyle{ rc(t) }[/math]
- Если [math]\displaystyle{ t \bmod 255 = 0 }[/math], то возвращается 1
- Пусть [math]\displaystyle{ R = [1 0 0 0 0 0 0 0] }[/math]
- Для i от 1 до t mod 255:
- R = 0 || R
- [math]\displaystyle{ R[0] = R[0] \oplus R[8] }[/math]
- [math]\displaystyle{ R[4] = R[4] \oplus R[8] }[/math]
- [math]\displaystyle{ R[5] = R[5] \oplus R[8] }[/math]
- [math]\displaystyle{ R[6] = R[6] \oplus R[8] }[/math]
- [math]\displaystyle{ R = Trunc_8[R] }[/math]
- Возвращается [math]\displaystyle{ R[0] }[/math][math]\displaystyle{ . }[/math]
Алгоритм [math]\displaystyle{ \iota(A, i_r) }[/math]
[math]\displaystyle{ i_r }[/math] — номер раунда.
- Для всех [math]\displaystyle{ (i, j, k) }[/math], таких, что [math]\displaystyle{ 0 \leqslant i \lt 5 }[/math], [math]\displaystyle{ 0 \leqslant j \lt 5 }[/math], [math]\displaystyle{ 0 \leqslant k \lt w }[/math] [math]\displaystyle{ A'[i,j,k] = A[i,j,k] }[/math]
- Пусть [math]\displaystyle{ RC }[/math] — массив длины [math]\displaystyle{ w }[/math], заполненный нулями.
- Для [math]\displaystyle{ i }[/math] от 0 до [math]\displaystyle{ l }[/math]: [math]\displaystyle{ RC[2^i - 1] = rc(i + 7i_r) }[/math]
- Для всех [math]\displaystyle{ k }[/math], таких, что [math]\displaystyle{ 0 \leqslant k \lt w }[/math], [math]\displaystyle{ A'[0,0,k] = A'[0,0,k] \oplus RC[k] }[/math]
Алгоритм перестановок
- Перевод строки [math]\displaystyle{ S }[/math] в массив [math]\displaystyle{ A }[/math]
- Для [math]\displaystyle{ i_r }[/math] от [math]\displaystyle{ 12 + 2l - n_r }[/math] до [math]\displaystyle{ 12 + 2l - 1 }[/math] [math]\displaystyle{ A' = \iota(\chi(\pi(\rho(\theta(A)))), i_r) }[/math]
- Перевод массива [math]\displaystyle{ A' }[/math] в строку [math]\displaystyle{ S' }[/math] длины [math]\displaystyle{ b }[/math]
Хеширование сообщений произвольной длины
Основой функции сжатия алгоритма является функция f, выполняющая перемешивание внутреннего состояния алгоритма. Состояние (обозначим его A) представляется в виде массива 5×5, элементами которого являются 64-битные слова, инициализированные нулевыми битами (то есть, размер состояния составляет 1600 битов). Функция f выполняет 24 раунда, в каждом из которых производятся следующие действия:
C[x] = A[x, 0] [math]\displaystyle{ \oplus }[/math] A[x, 1] [math]\displaystyle{ \oplus }[/math] A[x, 2] [math]\displaystyle{ \oplus }[/math] A[x, 3] [math]\displaystyle{ \oplus }[/math] A[x, 4], x = 0…4; D[x] = C[x — 1] [math]\displaystyle{ \oplus }[/math] (С[x + 1] >>> 1), x = 0…4; A[x, y] = A[x, y] [math]\displaystyle{ \oplus }[/math] D[x], x = 0…4, y = 0…4; B[y, 2x + 3y] = A[x, y] >>> r[x, y], x = 0…4, y = 0…4; A[x, y] = B[x, y] [math]\displaystyle{ \oplus }[/math] (~B[x + 1, y] & B[x + 2, y]), x = 0…4, y = 0…4,
Где:
- B — временный массив, аналогичный по структуре массиву состояния;
- C и D — временные массивы, содержащие по пять 64-битных слов;
- r — массив, определяющий величину циклического сдвига для каждого слова состояния;
- ~x — поразрядное дополнение к x;
- и операции с индексами массива выполняются по модулю 5.
Кроме приведенных выше операций, в каждом раунде также выполняется наложение операцией XOR раундовой константы на слово A[0, 0].
Перед выполнением функции сжимания накладывается операция XOR фрагментов исходного сообщения с фрагментами исходного состояния. Результат обрабатывается функцией f. Данное наложение в совокупности с функцией сжимания, выполняемые для каждого блока входных данных, представляют собой «впитывающую» (absorbing) фазу криптографической губки.
Стоит отметить, что функция f использует только операции, стойкие к атакам, использующим утечки данных по побочным каналам.
Результирующее хеш-значение вычисляется в процессе выполнения «выжимающей» (squeezing) фазы криптографической губки, основу которой также составляет описанная выше функция f. Возможные размеры хеш-значений — 224, 256, 384 и 512 бит.
Настройки
Оригинальный алгоритм Keccak имеет множество настраиваемых параметров[11] с целью обеспечения оптимального соотношения криптостойкости и быстродействия для определённого применения алгоритма на определённой платформе. Настраиваемыми величинами являются: размер блока данных, размер состояния алгоритма, количество раундов в функции f() и другие.
На протяжения конкурса хеширования Национального института стандартов и технологий участники имели право настраивать свои алгоритмы для решения возникших проблем. Так, были внесены некоторые изменения в Keccak: количество раундов было увеличено с 18 до 24 с целью увеличения запаса безопасности.
Авторы Keccak учредили ряд призов за достижения в криптоанализе данного алгоритма.
Версия алгоритма, принятая в качестве окончательного стандарта SHA-3, имеет несколько незначительных отличий от оригинального предложения Keccak на конкурс. В частности, были ограничены некоторые параметры (отброшены медленные режимы c=768 и c=1024), в том числе для увеличения производительности[12][13][14][15]. Также в стандарте были введены «функции с удлиняемым результатом» (XOF, Extendable Output Functions) SHAKE128 и SHAKE256, для чего хешируемое сообщение стало необходимо дополнять «суффиксом» из 2 или 4 бит, в зависимости от типа функции.
Функция | Формула |
---|---|
SHA3-224(M) | Keccak[448](M||01, 224) |
SHA3-256(M) | Keccak[512](M||01, 256) |
SHA3-384(M) | Keccak[768](M||01, 384) |
SHA3-512(M) | Keccak[1024](M||01, 512) |
SHAKE128(M, d) | Keccak[256](M||1111, d) |
SHAKE256(M, d) | Keccak[512](M||1111, d) |
Дополнительные функции
В декабре 2016 года Национальный институт стандартов и технологий США опубликовал новый документ, NIST SP.800-185[16], описывающий дополнительные функции на основе 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) | Параллелизуемая хеш-функция на основе Keccak |
ParallelHash256(X, B, L, S) | |
ParallelHashXOF128(X, B, L, S) | |
ParallelHashXOF256(X, B, L, S) |
Тестовые векторы
Значения разных вариантов хеша от пустой строки.
SHA3-224("") 6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7 SHA3-256("") a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a SHA3-384("") 0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004 SHA3-512("") a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26 SHAKE128("", 256) 7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26 SHAKE256("", 512) 46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f6fc821c49479ab48640292eacb3b7c4be
Малое изменение сообщения приводит к значительным изменениям в значении хеш-функции благодаря лавинному эффекту, как показано в следующих примерах:
SHA3-224("The quick brown fox jumps over the lazy dog") d15dadceaa4d5d7bb3b48f446421d542e08ad8887305e28d58335795 SHA3-224("The quick brown fox jumps over the lazy dog.") 2d0708903833afabdd232a20201176e8b58c5be8a6fe74265ac54db0
SHA3-256("The quick brown fox jumps over the lazy dog") 69070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04 SHA3-256("The quick brown fox jumps over the lazy dog.") a80f839cd4f83f6c3dafc87feae470045e4eb0d366397d5c6ce34ba1739f734d
SHA3-384("The quick brown fox jumps over the lazy dog") 7063465e08a93bce31cd89d2e3ca8f602498696e253592ed26f07bf7e703cf328581e1471a7ba7ab119b1a9ebdf8be41 SHA3-384("The quick brown fox jumps over the lazy dog.") 1a34d81695b622df178bc74df7124fe12fac0f64ba5250b78b99c1273d4b080168e10652894ecad5f1f4d5b965437fb9
SHA3-512("The quick brown fox jumps over the lazy dog") 01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee54fcb24023a08d9403f9b4bf0d450 SHA3-512("The quick brown fox jumps over the lazy dog.") 18f4f4bd419603f95538837003d9d254c26c23765565162247483f65c50303597bc9ce4d289f21d1c2f1f458828e33dc442100331b35e7eb031b5d38ba6460f8
SHAKE128("The quick brown fox jumps over the lazy dog", 256) f4202e3c5852f9182a0430fd8144f0a74b95e7417ecae17db0f8cfeed0e3e66e SHAKE128("The quick brown fox jumps over the lazy dof", 256) 853f4538be0db9621a6cea659a06c1107b1f83f02b13d18297bd39d7411cf10c
Криптоанализ
Цель | Тип атаки | Выход | Вариант | CF Call | Память |
---|---|---|---|---|---|
Хеш-функция | Коллизия | 160 | r = {240, 640, 1440},
c = 160, 1, 2 раунда |
||
Хеш-функция | Нахождение прообраза | 80 | r = {240, 640, 1440},
c = 160, 1, 2 раунда |
||
Перестановки | Атака-различитель | Все | 24 раунда | [math]\displaystyle{ 2^{1579} }[/math] | |
Перестановки | Дифференциальное свойство | Все | 8 раундов | [math]\displaystyle{ 2^{491.47} }[/math] | |
Хеш-функция | Атака-различитель | 224, 256 | 4 раунда | [math]\displaystyle{ 2^{25} }[/math] | |
Хеш-функция | Коллизия | 224, 256 | 2 раунда | [math]\displaystyle{ 2^{33} }[/math] | |
Хеш-функция | Нахождение второго прообраза | 224, 256 | 2 раунда | [math]\displaystyle{ 2^{33} }[/math] | [math]\displaystyle{ 2^{29} }[/math] |
Хеш-функция | Нахождение второго прообраза | 512 | 6 раундов | [math]\displaystyle{ 2^{506} }[/math] | [math]\displaystyle{ 2^{176} }[/math] |
Хеш-функция | Нахождение второго прообраза | 512 | 7 раундов | [math]\displaystyle{ 2^{507} }[/math] | [math]\displaystyle{ 2^{320} }[/math] |
Хеш-функция | Нахождение второго прообраза | 512 | 8 раундов | [math]\displaystyle{ 2^{511.5} }[/math] | [math]\displaystyle{ 2^{508} }[/math] |
Хеш-функция | Коллизия | 224, 256 | 4 раунда |
Примечания
- ↑ NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition . Дата обращения: 3 октября 2012. Архивировано 5 октября 2012 года.
- ↑ 2,0 2,1 NIST Releases SHA-3 Cryptographic Hash Standard . Дата обращения: 21 января 2016. Архивировано 17 августа 2015 года.
- ↑ 3,0 3,1 NIST Manuscript Publication Search . Дата обращения: 21 января 2016. Архивировано 12 августа 2015 года.
- ↑ 4,0 4,1 Shu-jen Chang, Ray Perlner, William E. Burr, Meltem Sonmez Turan, John M. Kelsey. Third-Round Report of the SHA-3 Cryptographic Hash Algorithm Competition. — doi:10.6028/nist.ir.7896.
- ↑ 5,0 5,1 Keccak Team (англ.). keccak.team. Дата обращения: 15 декабря 2017. Архивировано 16 декабря 2017 года.
- ↑ SHA-3 Project - Hash Functions | CSRC . csrc.nist.gov. Дата обращения: 7 ноября 2017. Архивировано 20 ноября 2017 года.
- ↑ NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition . NIST (2 октября 2012). Дата обращения: 2 октября 2012. Архивировано 30 апреля 2017 года.
- ↑ 8,0 8,1 Guido Bertoni, Joan Daemen, Michaël Peeters, Gilles Van Assche. The Road from Panama to Keccak via RadioGatún // Symmetric Cryptography / Helena Handschuh, Stefan Lucks, Bart Preneel, Phillip Rogaway. — Dagstuhl, Germany: Schloss Dagstuhl - Leibniz-Zentrum fuer Informatik, Germany, 2009. Архивировано 22 декабря 2017 года.
- ↑ Keccak Team (англ.). keccak.team. Дата обращения: 12 ноября 2017. Архивировано 13 ноября 2017 года.
- ↑ Keccak Team (англ.). keccak.team. Дата обращения: 12 ноября 2017. Архивировано 13 ноября 2017 года.
- ↑ 11,0 11,1 11,2 11,3 11,4 11,5 Morris J. Dworkin. SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions. — doi:10.6028/nist.fips.202.
- ↑ Will Keccak = SHA-3? (1 октября 2013). Дата обращения: 20 декабря 2013. Архивировано 30 января 2014 года.
- ↑ What the heck is going on with NIST’s cryptographic standard, SHA-3? (англ.) (24 September 2013). Архивировано 25 января 2014 года. Дата обращения 20 декабря 2013.
- ↑ Yes, this is Keccak! (4 октября 2013). Дата обращения: 20 декабря 2013. Архивировано 8 декабря 2013 года. — ответное заявление от авторов Keccak
- ↑ The Keccak sponge function family (17 января 2011). Дата обращения: 30 сентября 2015. Архивировано 12 сентября 2015 года. — изменение алгоритма заполнения в 3-м раунде конкурса
- ↑ SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash and ParallelHash . Дата обращения: 31 октября 2017. Архивировано 31 октября 2017 года.
Ссылки
- NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition Архивная копия от 5 октября 2012 на Wayback Machine / NIST, October 2012 (англ.)
- The Keccak sponge function family Архивная копия от 12 октября 2016 на Wayback Machine / Сайт Noekeon, 2015-10-15 — Официальная страница хеш-функции Keccak (англ.)
- Хеш-функция Keccak и конструкция Sponge как универсальный криптопримитив Архивная копия от 23 июня 2013 на Wayback Machine, pgpru.com, 2010—2013 (перевод материала с noekon.org)
- SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions | NIST Архивная копия от 17 сентября 2017 на Wayback Machine (англ.)
Реализации:
- Software resources (англ.). https://keccak.team/. The Keccak team. Дата обращения: 6 декабря 2017. Архивировано 7 декабря 2017 года.
- Java implementation, Pitaya