SHA-3: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Начал писать историю
История, алгоритм
Строка 14: Строка 14:
== История ==
== История ==
В 2004-2005 годах несколько алгоритмов хеширования были атакованы, в том числе были опубликованы серьезные атаки против алгоритма SHA-1, утвержденного [[Национальный институт стандартов и технологий|Национальным институтом стандартов и технологий (NIST)]]. В ответ NIST провел открытые семинары и 2 ноября [[2007 год|2007]] года анонсировал конкурс на разработку нового алгоритма хеширования. 2 октября [[2012 год|2012]] года победителем конкурса стал алгоритм Keccak и был стандартизован как новый алгоритм SHA-3.<ref>{{Cite web|url=https://csrc.nist.gov/projects/hash-functions/sha-3-project|title=SHA-3 Project - Hash Functions {{!}} CSRC|publisher=csrc.nist.gov|accessdate=2017-11-07}}</ref> 5 августа [[2015 год|2015]] года алгоритм утвержден и опубликован в качестве стандарта [[FIPS]] 202.<ref name="nist.gov">[http://www.nist.gov/itl/csd/201508_sha3.cfm NIST Releases SHA-3 Cryptographic Hash Standard<!-- Заголовок добавлен ботом -->]</ref><ref>[http://www.nist.gov/manuscript-publication-search.cfm?pub_id=919061 NIST Manuscript Publication Search<!-- Заголовок добавлен ботом -->]</ref> Алгоритм был разработан Гвидо Бертони, Йоаном Дайменом, Жилем Ван Аше из STMicroelectronics и Микаэлем Питерсом из NXP Semiconductors. Алгоритм основан на более ранних хеш-функциях [[Хеш-функция Panama|PANAMA]] и RadioGatún. Panama был разработан Дайменом и Крейгом Клэппом в 1998 году. RadioGatún был реализован на основе Panama Дайменом, Питерсом и Ван Аше в 2006 году.
В 2004-2005 годах несколько алгоритмов хеширования были атакованы, в том числе были опубликованы серьезные атаки против алгоритма SHA-1, утвержденного [[Национальный институт стандартов и технологий|Национальным институтом стандартов и технологий (NIST)]]. В ответ NIST провел открытые семинары и 2 ноября [[2007 год|2007]] года анонсировал конкурс на разработку нового алгоритма хеширования. 2 октября [[2012 год|2012]] года победителем конкурса стал алгоритм Keccak и был стандартизован как новый алгоритм SHA-3.<ref>{{Cite web|url=https://csrc.nist.gov/projects/hash-functions/sha-3-project|title=SHA-3 Project - Hash Functions {{!}} CSRC|publisher=csrc.nist.gov|accessdate=2017-11-07}}</ref> 5 августа [[2015 год|2015]] года алгоритм утвержден и опубликован в качестве стандарта [[FIPS]] 202.<ref name="nist.gov">[http://www.nist.gov/itl/csd/201508_sha3.cfm NIST Releases SHA-3 Cryptographic Hash Standard<!-- Заголовок добавлен ботом -->]</ref><ref>[http://www.nist.gov/manuscript-publication-search.cfm?pub_id=919061 NIST Manuscript Publication Search<!-- Заголовок добавлен ботом -->]</ref> Алгоритм был разработан Гвидо Бертони, Йоаном Дайменом, Жилем Ван Аше из STMicroelectronics и Микаэлем Питерсом из NXP Semiconductors. Алгоритм основан на более ранних хеш-функциях [[Хеш-функция Panama|PANAMA]] и RadioGatún. Panama был разработан Дайменом и Крейгом Клэппом в 1998 году. RadioGatún был реализован на основе Panama Дайменом, Питерсом и Ван Аше в 2006 году.

В ходе конкурса конкурсантам разрешалось вносить изменения в свой алгоритм для исправления обнаруживающихся проблем. Изменения, внесенные в алгоритм Keccak:<ref>{{Cite web|url=https://keccak.team/2009/version_2.0.html|title=Keccak Team|publisher=keccak.team|lang=en|accessdate=2017-11-12}}</ref><ref>{{Cite web|url=https://keccak.team/2011/version_3.0.html|title=Keccak Team|publisher=keccak.team|lang=en|accessdate=2017-11-12}}</ref>
* Количество раундов было увеличено с 12 + <math>l</math> до 12 + 2<math>l</math>
* Padding был изменен со сложной формы на более простую, описанную ниже
* Скорость (rate) r была увеличена до предела безопасности (ранее округлялась вниз до ближайшей степени 2)

== Алгоритм ==
Хеш-функции семейства ''SHA-2'' построены на основе [[Функция губки|криптографической губки]].


== Хеширование сообщений произвольной длины ==
== Хеширование сообщений произвольной длины ==

Версия от 16:28, 12 ноября 2017

Шаблон:Карточка хеш функции 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 оказался намного быстрее, чем все другие финалисты.

Конструкция Губка, использованная в хеш-функции. pi — входные блоки, zj — выход алгоритма. Неиспользуемый для вывода набор битов c («capacity») должен иметь значительный размер для достижения устойчивости к атакам

Алгоритм SHA-3 построен по принципу криптографической губки (данная структура криптографических алгоритмов была предложена авторами алгоритма Keccak ранее).

История

В 2004-2005 годах несколько алгоритмов хеширования были атакованы, в том числе были опубликованы серьезные атаки против алгоритма SHA-1, утвержденного Национальным институтом стандартов и технологий (NIST). В ответ NIST провел открытые семинары и 2 ноября 2007 года анонсировал конкурс на разработку нового алгоритма хеширования. 2 октября 2012 года победителем конкурса стал алгоритм Keccak и был стандартизован как новый алгоритм SHA-3.[4] 5 августа 2015 года алгоритм утвержден и опубликован в качестве стандарта FIPS 202.[2][5] Алгоритм был разработан Гвидо Бертони, Йоаном Дайменом, Жилем Ван Аше из STMicroelectronics и Микаэлем Питерсом из NXP Semiconductors. Алгоритм основан на более ранних хеш-функциях PANAMA и RadioGatún. Panama был разработан Дайменом и Крейгом Клэппом в 1998 году. RadioGatún был реализован на основе Panama Дайменом, Питерсом и Ван Аше в 2006 году.

В ходе конкурса конкурсантам разрешалось вносить изменения в свой алгоритм для исправления обнаруживающихся проблем. Изменения, внесенные в алгоритм Keccak:[6][7]

  • Количество раундов было увеличено с 12 + до 12 + 2
  • Padding был изменен со сложной формы на более простую, описанную ниже
  • Скорость (rate) r была увеличена до предела безопасности (ранее округлялась вниз до ближайшей степени 2)

Алгоритм

Хеш-функции семейства SHA-2 построены на основе криптографической губки.

Хеширование сообщений произвольной длины

Основой функции сжатия алгоритма является функция f, выполняющая перемешивание внутреннего состояния алгоритма. Состояние (обозначим его A) представляется в виде массива 5×5, элементами которого являются 64-битные слова, инициализированные нулевыми битами (то есть, размер состояния составляет 1600 битов). Функция f выполняет 24 раунда, в каждом из которых производятся следующие действия:

 C[x] = A[x, 0]  A[x, 1]  A[x, 2]  A[x, 3]  A[x, 4], x = 0…4;
 D[x] = C[x — 1]  (С[x + 1] >>> 1), x = 0…4;
 A[x, y] = A[x, y]  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]  (~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 имеет множество настраиваемых параметров с целью обеспечения оптимального соотношения криптостойкости и быстродействия для определенного применения алгоритма на определенной платформе. Настраиваемыми величинами являются: размер блока данных, размер состояния алгоритма, количество раундов в функции f() и другие.

На протяжения конкурса хеширования Национального института стандартов и технологий участники имели право настраивать свои алгоритмы для решения возникших проблем. Так, были внесены некоторые изменения в Keccak: количество раундов было увеличено с 18 до 24 с целью увеличения запаса безопасности.

Авторы Keccak учредили ряд призов за достижения в криптоанализе данного алгоритма.

Версия алгоритма, принятая в качестве окончательного стандарта SHA-3, имеет несколько незначительных отличий от оригинального предложения Keccak на конкурс. В частности, были ограничены некоторые параметры (отброшены медленные режимы c=768 и c=1024), в том числе для увеличения производительности, а также изменён алгоритм заполнения (padding) на более простой.[8][9][10][11] Также в стандарте были введены «функции с удлиняемым результатом» (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[12], описывающий дополнительные функции на основе 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

Примечания

  1. NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition
  2. 1 2 NIST Releases SHA-3 Cryptographic Hash Standard
  3. NIST Manuscript Publication Search
  4. SHA-3 Project - Hash Functions | CSRC. csrc.nist.gov. Дата обращения: 7 ноября 2017.
  5. NIST Manuscript Publication Search
  6. Keccak Team (англ.). keccak.team. Дата обращения: 12 ноября 2017.
  7. Keccak Team (англ.). keccak.team. Дата обращения: 12 ноября 2017.
  8. Will Keccak = SHA-3? (1 октября 2013). Дата обращения: 20 декабря 2013.
  9. "What the heck is going on with NIST's cryptographic standard, SHA-3?" (англ.). September 24, 2013. Дата обращения: 20 декабря 2013.
  10. Yes, this is Keccak! (4 октября 2013). Дата обращения: 20 декабря 2013. — ответное заявление от авторов Keccak
  11. The Keccak sponge function family (17 января 2011). Дата обращения: 30 сентября 2015. — изменение алгоритма заполнения в 3-м раунде конкурса
  12. [http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-185.pdf SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash and ParallelHash

Ссылки

Реализации: