Эта статья является кандидатом в добротные статьи

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

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
Номинирование статьи в добротные с помощью гаджета QA (v. 1j5hqu9)
→‎Примечания: Исправлены примечания
Строка 11: Строка 11:


== Название ==
== Название ==
Название функции SHAvite-3 произносится как «шавайт шалош» (иврит «шавайт три»). Авторы заявляют, что назвали ее так по следующим причинам<ref name=":0">{{Cite web|url=http://www.cs.technion.ac.il/~orrd/SHAvite-3/Spec.23.11.09.pdf|title=The SHAvite-3 Hash Function. Tweaked Version|author=Eli Biham, Orr Dunkelman|work=|date=23.11.2009|publisher=}}</ref>:
Название функции SHAvite-3 произносится как «шавайт шалош» (иврит «шавайт три»). Авторы заявляют, что назвали ее так по следующим причинам<ref name=":0">{{Cite web|url=http://www.cs.technion.ac.il/~orrd/SHAvite-3/Spec.23.11.09.pdf|title=The SHAvite-3 Hash Function. Tweaked Version|author=Eli Biham, Orr Dunkelman|work=cs.technion.ac.il|date=23.11.2009|publisher=Computer Science Department, Technion}}</ref>:
* SHAvite-3 названа так за свою скорость и безопасность, так как является защищенной и быстрой({{lang-fr|vite}}) хеш-функцией.
* SHAvite-3 названа так за свою скорость и безопасность, так как является защищенной и быстрой({{lang-fr|vite}}) хеш-функцией.
* Shavit переводится с иврита как комета.
* Shavit переводится с иврита как комета.
Строка 18: Строка 18:


== История ==
== История ==
Алгоритм SHAvite-3 был специально разработан для участия в [[SHA-3 (конкурс)|конкурсе SHA-3]]. По результатам первого раунда была обнаружена уязвимость лежащего в основе блочного шифра, которая, однако, не привела к компрометации хеш-функции<ref>{{Cite web|url=http://ehash.iaik.tugraz.at/uploads/e/ea/Peyrin-SHAvite-3.txt|title=Сообщение в рассылке NIST о найденной уязвимости|author=Thomas Peyrin|work=|date=|publisher=}}</ref><ref>{{Cite web|url=http://csrc.nist.gov/groups/ST/hash/sha-3/Round1/documents/SHAvite3_Comments.pdf|title=Сообщение в рассылке NIST о найденной уязвимости|author=Paul Souradyuti|work=|date=|publisher=}}</ref>. Авторами было предложена модификация к первоначально заявленной на конкурс версией, чтобы повысить защищенность алгоритма. Изменение было названо улучшенной (tweaked) версией и касалось обоих алгоритмов SHAvite-3<sub>256</sub> и SHAvite-3<sub>512</sub><ref name=":0" />. После этого последовало исправление ошибки в реализации раундовой функции AES и улучшена криптостойкость SHAvite-3<sub>512</sub> путем увеличения количества раундов с 14 до 16<ref name=":2">{{Cite web|url=http://www.cs.technion.ac.il/~orrd/SHAvite-3/Update-2010-08-23.pdf|title=Updates on SHAvite-3|author=Eli Biham, Orr Dunkelman|work=|date=23.08.2010|publisher=}}</ref>. Функция дошла до второго раунда конкурса криптографический функций, но до финального раунда не была допущена за недостаточную защищённость инициализации [[S-блоки|S-блоков]], лежащих в основе блочного шифра, что приводило к относительно низкому уровню безопасности 512-разрядной версии хеш-функции<ref>{{Cite web|url=http://ehash.iaik.tugraz.at/uploads/5/5c/NandiP-SHAvite-3.txt|title=Сообщение в рассылке NIST о найденной уязвимости|author=Mridul Nandi, Souradyuti Paul|work=|date=18.06.2009|publisher=}}</ref><ref>{{Cite web|url=https://who.rocq.inria.fr/Gaetan.Leurent/files/SHAVITE_AFC10.pdf|title=Cryptanalysis of the 10-Round Hash and Full Compression Function of SHAvite-3-512|author=Praveen Gauravaram et al|work=|date=|publisher=}}</ref><ref>{{Cite web|url=http://eprint.iacr.org/2009/634.pdf|title=Attacks on Hash Functions based on Generalized Feistel Application to Reduced-Round Lesamnta and SHAvite-3 512|author=Charles Bouillaguet et al.|work=|date=|publisher=}}</ref>. В то же время, хеш-функция имела относительно низкие показатели пропускной способности<ref>{{Cite web|url=http://csrc.nist.gov/publications/nistir/ir7764/nistir-7764.pdf|title=Status Report on the Second Round of the SHA-3 Cryptographic Hash Algorithm Competition|author=Meltem Sönmez Turan et al|work=|date=|publisher=}}</ref>.
Алгоритм SHAvite-3 был специально разработан для участия в [[SHA-3 (конкурс)|конкурсе SHA-3]]. По результатам первого раунда была обнаружена уязвимость лежащего в основе блочного шифра, которая, однако, не привела к компрометации хеш-функции<ref>{{Cite web|url=http://ehash.iaik.tugraz.at/uploads/e/ea/Peyrin-SHAvite-3.txt|title=Сообщение в рассылке NIST о найденной уязвимости|author=Thomas Peyrin|work=NIST mailing list|date=19.01.09|publisher=NIST Computer Security Resource Center}}</ref><ref>{{Cite web|url=http://csrc.nist.gov/groups/ST/hash/sha-3/Round1/documents/SHAvite3_Comments.pdf|title=OFFICIAL COMMENT: SHAvite-3|author=Paul Souradyuti|work=NIST mailing list|date=16.06.09|publisher=NIST Computer Security Resource Center}}</ref>. Авторами было предложена модификация к первоначально заявленной на конкурс версией, чтобы повысить защищенность алгоритма. Изменение было названо улучшенной (tweaked) версией и касалось обоих алгоритмов SHAvite-3<sub>256</sub> и SHAvite-3<sub>512</sub><ref name=":0" />. После этого последовало исправление ошибки в реализации раундовой функции AES и улучшена криптостойкость SHAvite-3<sub>512</sub> путем увеличения количества раундов с 14 до 16<ref name=":2">{{Cite web|url=http://www.cs.technion.ac.il/~orrd/SHAvite-3/Update-2010-08-23.pdf|title=Updates on SHAvite-3|author=Eli Biham, Orr Dunkelman|work=cs.technion.ac.il|date=23.08.2010|publisher=Computer Science Department, Technion}}</ref>. Функция дошла до второго раунда конкурса криптографический функций, но до финального раунда не была допущена за недостаточную защищённость инициализации [[S-блоки|S-блоков]], лежащих в основе блочного шифра, что приводило к относительно низкому уровню безопасности 512-разрядной версии хеш-функции<ref>{{Cite web|url=http://ehash.iaik.tugraz.at/uploads/5/5c/NandiP-SHAvite-3.txt|title=Сообщение в рассылке NIST о найденной уязвимости|author=Mridul Nandi, Souradyuti Paul|work=NIST mailing list|date=18.06.2009|publisher=NIST}}</ref><ref>{{Статья|автор=Praveen Gauravaram, Gaëtan Leurent, Florian Mendel, María Naya-Plasencia, Thomas Peyrin|заглавие=Cryptanalysis of the 10-Round Hash and Full Compression Function of SHAvite-3-512|ссылка=http://link.springer.com/chapter/10.1007/978-3-642-12678-9_25|язык=en|ответственный=Daniel J. Bernstein, Tanja Lange|издание=Progress in Cryptology – AFRICACRYPT 2010|издательство=Springer Berlin Heidelberg|год=2010-05-03|страницы=419–436|isbn=9783642126772, 9783642126789|doi=10.1007/978-3-642-12678-9_25}}</ref><ref>{{Статья|автор=Charles Bouillaguet, Orr Dunkelman, Gaëan Leurent, Pierre-Alain Fouque|заглавие=Attacks on Hash Functions Based on Generalized Feistel: Application to Reduced-Round Lesamnta and SHAvite-3 512|ссылка=http://link.springer.com/chapter/10.1007/978-3-642-19574-7_2|язык=en|ответственный=Alex Biryukov, Guang Gong, Douglas R. Stinson|издание=Selected Areas in Cryptography|издательство=Springer Berlin Heidelberg|год=2010-08-12|страницы=18–35|isbn=9783642195730, 9783642195747|doi=10.1007/978-3-642-19574-7_2}}</ref>. В то же время, хеш-функция имела относительно низкие показатели пропускной способности<ref>{{Cite web|url=http://csrc.nist.gov/publications/nistir/ir7764/nistir-7764.pdf|title=Status Report on the Second Round of the SHA-3 Cryptographic Hash Algorithm Competition|author=Meltem Sönmez Turan et al|work=csrc.nist.gov|date=2011|publisher=NIST Computer Security Resource Center}}</ref>.


== Особенности дизайна ==
== Особенности дизайна ==
К особенностям хеш-функции SHAvite-3 относятся следующие факты<ref name=":1">{{Cite web|url=http://www.cs.technion.ac.il/~orrd/SHAvite-3/Spec.31.10.08.pdf|title=The SHAvite-3 Hash Function|author=Eli Biham, Orr Dunkelman|work=|date=31.10.08|publisher=}}</ref>:
К особенностям хеш-функции SHAvite-3 относятся следующие факты<ref name=":1">{{Cite web|url=http://www.cs.technion.ac.il/~orrd/SHAvite-3/Spec.31.10.08.pdf|title=The SHAvite-3 Hash Function|author=Eli Biham, Orr Dunkelman|work=cs.technion.ac.il|date=31.10.2008|publisher=Computer Science Department, Technion}}</ref>:
* Итерации функций сжатия для получения хеш-функции производятся с помощью [[HAIFA]].
* Итерации функций сжатия для получения хеш-функции производятся с помощью [[HAIFA]].
* SHAvite-3 может иметь результаты переменной длины до 512 бит.
* SHAvite-3 может иметь результаты переменной длины до 512 бит.
* SHAvite-3 поддерживает [[Соль (криптография)|соли.]]
* SHAvite-3 поддерживает [[Соль (криптография)|соли.]]
* Функции сжатия разработаны с использованием известных и хорошо изученных компонент: [[Сеть Фейстеля|сети Фейстеля]], раундовых функций [[Advanced Encryption Standard|AES]] и [[Регистр сдвига с линейной обратной связью|регистров сдвига с линейной обратной связью]].
* Функции сжатия разработаны с использованием известных и хорошо изученных компонент: [[Сеть Фейстеля|сети Фейстеля]], раундовых функций [[Advanced Encryption Standard|AES]] и [[Регистр сдвига с линейной обратной связью|регистров сдвига с линейной обратной связью]].
* В числе требований к хеш-функции была возможность получения дайджеста длиной 224, 256, 384 и 512 бит для замены семейства криптографических алгоритмов [[SHA-2]]<ref>{{Cite web|url=http://csrc.nist.gov/groups/ST/hash/documents/FR_Notice_Nov07.pdf|title=Announcing Request for Candidate Algorithm Nominations for a New Cryptographic Hash Algorithm (SHA–3) Family|author=Richard F. Kayser|work=|date=29.10.2007|publisher=}}</ref>. Авторы SHAvite-3 разработали две функции: SHAvite-3<sub>256</sub> для генерации дайджеста длиной 224, 256 бит и SHAvite-3<sub>512</sub> для генерации дайджеста длиной 384 и 512 бит.
* В числе требований к хеш-функции была возможность получения дайджеста длиной 224, 256, 384 и 512 бит для замены семейства криптографических алгоритмов [[SHA-2]]<ref>{{Статья|автор=Richard F. Kayser|заглавие=Announcing request for candidate algorithm nominations for a new cryptographic hash algorithm (SHA-3) family|ссылка=http://csrc.nist.gov/groups/ST/hash/documents/FR_Notice_Nov07.pdf|язык=en|издание=Federal Register|год=2007|месяц=11|число=2|том=72|номер=212|страницы=62212—62220|issn=0097-6326}}</ref>. Авторы SHAvite-3 разработали две функции: SHAvite-3<sub>256</sub> для генерации дайджеста длиной 224, 256 бит и SHAvite-3<sub>512</sub> для генерации дайджеста длиной 384 и 512 бит.


== Алгоритм ==
== Алгоритм ==

Версия от 06:55, 9 декабря 2016

Шаблон:Карточка хеш функции SHAvite-3 — криптографическая хеш-функция, разработанная израильскими криптографами Эли Бихамом (англ. Eli Biham) и Ором Дункельманом (англ. Orr Dunkelman). Одна из четырнадцати участников второго раунда конкурса SHA-3, организованного NIST. SHAvite-3 основана на сочетании компонентов AES c фреймворком HAIFA. Данная хеш-функция использует такие криптографические примитивы, как сеть Фейстеля и конструкция Девиса-Мейера.Семейство хеш-функций SHAvite-3 включает в себя два алгоритма SHAvite-3256 и SHAvite-3512[1].

Название

Название функции SHAvite-3 произносится как «шавайт шалош» (иврит «шавайт три»). Авторы заявляют, что назвали ее так по следующим причинам[2]:

  • SHAvite-3 названа так за свою скорость и безопасность, так как является защищенной и быстрой(фр. vite) хеш-функцией.
  • Shavit переводится с иврита как комета.
  • Shavite — последователь Шивы(англ. Shiva), индусского божества.
  • Цифра 3 в названии возникла из-за того, что существовали две предыдущие версии, которые не были опубликованы.

История

Алгоритм SHAvite-3 был специально разработан для участия в конкурсе SHA-3. По результатам первого раунда была обнаружена уязвимость лежащего в основе блочного шифра, которая, однако, не привела к компрометации хеш-функции[3][4]. Авторами было предложена модификация к первоначально заявленной на конкурс версией, чтобы повысить защищенность алгоритма. Изменение было названо улучшенной (tweaked) версией и касалось обоих алгоритмов SHAvite-3256 и SHAvite-3512[2]. После этого последовало исправление ошибки в реализации раундовой функции AES и улучшена криптостойкость SHAvite-3512 путем увеличения количества раундов с 14 до 16[5]. Функция дошла до второго раунда конкурса криптографический функций, но до финального раунда не была допущена за недостаточную защищённость инициализации S-блоков, лежащих в основе блочного шифра, что приводило к относительно низкому уровню безопасности 512-разрядной версии хеш-функции[6][7][8]. В то же время, хеш-функция имела относительно низкие показатели пропускной способности[9].

Особенности дизайна

К особенностям хеш-функции SHAvite-3 относятся следующие факты[1]:

  • Итерации функций сжатия для получения хеш-функции производятся с помощью HAIFA.
  • SHAvite-3 может иметь результаты переменной длины до 512 бит.
  • SHAvite-3 поддерживает соли.
  • Функции сжатия разработаны с использованием известных и хорошо изученных компонент: сети Фейстеля, раундовых функций AES и регистров сдвига с линейной обратной связью.
  • В числе требований к хеш-функции была возможность получения дайджеста длиной 224, 256, 384 и 512 бит для замены семейства криптографических алгоритмов SHA-2[10]. Авторы SHAvite-3 разработали две функции: SHAvite-3256 для генерации дайджеста длиной 224, 256 бит и SHAvite-3512 для генерации дайджеста длиной 384 и 512 бит.

Алгоритм

Раунд AES

В своей основе SHAvite-3 использует раунд AES[1]. Раунд определяет операции над текстом размером 128 бит. 128 бит текста представляются в виде матрицы размера 4×4. Каждый элемент матрицы имеет размер 8 бит и представляет значение в поле GF(28). Раунд состоит из последовательного применения операций SubBytes (), ShiftRows (), MixColumns () и сложения по модулю 2 с раундовым ключом .

HAIFA

SHAvite-3 построен на режиме итераций для хеш-функций HAIFA[1]. HAIFA задает правила, по которым выполняется дополнение сообщения до нужной длины, его сжатие со специальной функцией и сокращение полученного на выходе значения до требуемой длины. Таким образом, вычисление хеш-функции по алгоритму SHAvite-3 заключается в выполнении последовательно нескольких шагов.

  1. Дополнить сообщение до некоторой длины, чтобы его можно было разбить на блоки равного размера. Обозначим дополненное сообщение .
  2. Разбить дополненное сообщение на равных по размеру блоков: .
  3. Взять некоторое начальное значение , где — главное начальное значение, — желаемый размер дайджеста.
  4. Вычислить последующие значения согласно формуле , где — число захешированных к моменту вычисления бит сообщения, включая текущий блок. Иначе говоря — длина . Параметр соль. В приложениях, где использование соли не требуется, авторы SHAvite-3 предлагают использовать , допуская при этом снижение безопасности и увеличение скорости вычислений[1].
  5. Сократить конечное значение до требуемой длины , это и будет результатом вычисления хеш-функции.

Дополнение сообщения

Пусть размер исходного сообщения — , желаемый размер значения хеш-функции — . Если размер блока, с которым работает функция сжатия , равен , то дополнение сообщения , которое имеет длину , до длины кратной выполняется в следующем порядке:

  1. К сообщению приписывается в конец один бит со значением 1, получаем .
  2. Дополняем значением , которое кодируется битами:
  3. Дополняем значением , которое кодируется битами:
  4. После бита 1 вставляем минимальное количество нулей, которое необходимо для того, чтобы длина полученного сообщения стала кратна : . Количество нулей можно вычислить по формуле: .

Разновидности алгоритма

Алгоритм SHAvite-3 имеет две разновидности, различающиеся используемой функцией сжатия и длиной дайджеста[1].

  • SHAvite-3256 использует функцию сжатия и позволяет получить хеш длиной до 256 бит
  • SHAvite-3512 использует функцию сжатия и позволяет получить хеш длиной от 257 до 512 бит

Генерация дайджеста

Пусть нам требуется сгенерировать хеш сообщения так, чтобы размер дайджеста был равен . Назовем первым случаем , а вторым — . В первом случае , во втором — .

  1. Найдем , где .
  2. Дополним сообщение до размера, кратного =512 в первом случае или до =1024 — во втором. Для этого воспользуемся процедурой, описанной ранее, считая =64 в первом случае и =128 — во втором. При этом в обоих случаях =16.
  3. Разобьем дополненное сообщение на блоки по бит и вычислим все , за исключением последних двух. Если длина исходного сообщения такова, что в результате дополнения сообщения, в конце образовался блок, который не содержит ни одного бита исходного сообщения, то ,. В противном случае, вычисляется по тем же формулам, что и предыдущие , а .
  4. Первые бит и есть требуемое значение хеш-функции.

Функции и

Принимают на вход 4 битовых вектора:

  • Цепное значение (chaining value) с размером =256 бит для ( бит для ).
  • Блок сообщения с размером =512 бит для (=1024 бита для ).
  • Соль с размером =256 бит для (=512 бит для ).
  • Битовый счетчик с размером =64 бита для (=128 бит для ).

На выходе получаем вектор с размером 256 бит для (512 бит для ).

Для реализации и используется конструкция Дэвиса-Мейера[1]. Это значит, что цепное значение пересчитывается по формулам и соответственно.

Функция

 — 12-раундовый блочный шифр. Данный блочный шифр является сетью Фейстеля, которая состоит из 12 ячеек Фейстеля. принимает на вход 256-битный открытый текст . Его можно разделить на две части и по 128 бит. . Пересчет значений на каждом раунде производится по формуле: .

Здесь  — вектор из трех ключей, различный для каждого раунда, а  — некая функция. В результате может быть вычислено возвращаемое значение: .

Функция

Функция принимает на вход 128-битный текст и 384-битный ключ , который получается объединением трех 128-битных ключей . Она заключается в троекратном применении раунда AES: . Входной вектор складывается по модулю 2 с ключом , к результату применяются три раунда AES с разными ключами в следующем порядке: раунд AES с ключом , еще один раунд AES с ключом , последний раунд с ключом 0 (128 бит).

Генерация ключей для

Для вычисления функции требуется по три 128-битных ключа в каждом из 12 раундов. Для этого используется алгоритм генерации ключей из одного ключа. В качестве единственного ключа, из которого впоследствии будут созданы 36, используется совокупность блока сообщения (512 бит), соли (256 бит) и битового счетчика (64 бита). В алгоритме все операции производятся над 4-байтными значениями. Введем следующие обозначения:

  •  — блок сообщения
  •  — битовый счетчик
  •  — соль

В результате работы алгоритма мы должны будем получить 144 значения (также 4-байтных):

// Алгоритм генерации ключей для E^256 на языках C/C++

// Первые 16 значений результирующего массива 
// проинициализировать исходным сообщением
for (int i = 0; i < 16; i++) rk[i] = msg[i];
int i = 16;
for (int k = 0; k < 4; k++) {
    uint32_t t[4];
    // Нелинейный шаг
    for (int r = 0; r < 2; r++) {
        // Выполнить раунд AES с ключем 0 над 128-битным значением,
        // которое является суммой по модулю 2 ранее вычисленных элеменов 
        // массива rk и соли (0-127 биты).
        // 128-битный результат записать в массив t
        AESRound0(
            rk[i-15]^salt[0], rg[i-14]^salt[1], rk[i-13]^salt[2], rk[i-16]^salt[3], 
            &t[0], &t[1], &t[2], &t[3]
        );
        for (int j = 0; j < 4; j++) rk[i+j] = t[j] ^ rk[i+j-4];
        if (i == 16) { rk[16] ^= cnt[0]; rk[17] ^= ~cnt[1]; }
        if (i == 56) { rk[16] ^= cnt[1]; rk[17] ^= ~cnt[0]; }
        i += 4;
        // Такой же раунд AES, как и ранее, 
        // но с оставшейся частью соли (128-255 биты)
        AESRound0(
            rk[i-15]^salt[4], rg[i-14]^salt[5], rk[i-13]^salt[6], rk[i-16]^salt[7], 
            &t[0], &t[1], &t[2], &t[3]
        );
        for (int j = 0; j < 4; j++) rk[i+j] = t[j] ^ rk[i+j-4];
        if (i == 84) { rk[86] ^= cnt[1]; rk[87] ^= ~cnt[0]; }
        if (i == 124) { rk[124] ^= cnt[0]; rk[127] ^= ~cnt[1]; }
        i += 4;
    }
    // Линейный шаг
    for (int r = 0; r != 16; ++r) {
        rk[i] = rk[i-16] ^ rk[i-3];
        i += 1;
    }
}

Стоит отметить, что представленный выше алгоритм — модифицированная авторами версия. Единственное отличие от изначально отправленного на конкурс SHA-3 варианта — наличие операций побитового отрицания «~» счетчика. Отрицание было добавлено, чтобы увеличить криптографическую стойкость хеш-функции. Наличие таких операций дает гарантию, что по крайней мере 4 из 8 байт счетчика будут ненулевыми[2].

Ключи для вычисления функции получаются из следующим образом:, где , .

Функция

Данная функция реализована по аналогии с , но принимает на вход 512-битный открытый текст , который представляется в виде 4 частей по

128 бит: . Пересчет выполняется по формуле за 14 раундов (в обновленной версии авторы предложили использовать 16 раундов[5]). .

Функция

Принимает на вход 128 бит текста и 512-битный ключ . Вычисляется как 4 раунда AES. .

Генерация ключей для

Для вычисления функции требуется по восемь 128-битных ключей в каждом из 14 раундов. Всего — 112 ключей. Они составляются на основе блока сообщения (1024 бита), соли (512 бит) и битового счетчика (128 бита). Все операции производятся над 4-байтными значениями. Введем следующие обозначения:

  •  — блок сообщения
  •  — битовый счетчик
  •  — соль

В результате работы алгоритма мы должны будем получить 448 значений (4-байтных):

// Алгоритм генерации ключей для E^512 на языках C/C++

// Первые 32 значений результирующего массива 
// проинициализировать исходным сообщением
for (int i = 0; i < 32; i++) rk[i] = msg[i];
int i = 32;
for (int k = 0; k < 7; k++) {
    uint32_t t[4];
    // Нелинейный шаг (7 раз)
    for (int r = 0; r < 2; r++) {
        AESRound0(
            rk[i-31]^salt[0], rg[i-30]^salt[1], rk[i-29]^salt[2], rk[i-32]^salt[3], 
            &t[0], &t[1], &t[2], &t[3]); // Раунд AES с ключем 0, соль 0-3
        for (int j = 0; j < 4; j++) rk[i+j] = t[j] ^ rk[i+j-4];
        if (i == 32) { rk[32] ^= cnt[0]; rk[33] ^= cnt[1]; 
                       rk[34]^= cnt[2]; rk[35] ^= ~cnt[3]; }
        i += 4;
        AESRound0(
            rk[i-31]^salt[4], rg[i-30]^salt[5], rk[i-29]^salt[6], rk[i-32]^salt[7], 
            &t[0], &t[1], &t[2], &t[3]); // Раунд AES с ключем 0, соль 4-7
        for (int j = 0; j < 4; j++) rk[i+j] = t[j] ^ rk[i+j-4];
        if (i == 164) { rk[164] ^= cnt[3]; rk[165] ^= cnt[2];
                        rk[166] ^= cnt[1]; rk[167] ^= ~cnt[0]; }
        i += 4;
        AESRound0(
            rk[i-31]^salt[8], rg[i-30]^salt[9], rk[i-29]^salt[10], rk[i-32]^salt[11], 
            &t[0], &t[1], &t[2], &t[3]); // Раунд AES с ключем 0, соль 8-11
        for (int j = 0; j < 4; j++) rk[i+j] = t[j] ^ rk[i+j-4];
        if (i == 440) { rk[440] ^= cnt[1]; rk[441] ^= cnt[0]; 
                        rk[442]^= cnt[3]; rk[443] ^= ~cnt[2]; }
        i += 4;
        AESRound0(
            rk[i-31]^salt[12], rg[i-30]^salt[13], rk[i-29]^salt[14], rk[i-32]^salt[15], 
            &t[0], &t[1], &t[2], &t[3]); // Раунд AES с ключем 0, соль 12-15
        for (int j = 0; j < 4; j++) rk[i+j] = t[j] ^ rk[i+j-4];
        if (i == 316) { rk[316] ^= cnt[2]; rk[317] ^= cnt[3];
                        rk[318] ^= cnt[0]; rk[319] ^= ~cnt[1]; }
        i += 4;
    }
    if (k == 6) break; // не совершать 7 линейный шаг
    // Линейный шаг (6 раз)
    for (int r = 0; r != 32; ++r) {
        rk[i] = rk[i-32] ^ rk[i-7];
        i += 1;
    }
}

Здесь, как и в 256-битной версии, единственное отличие улучшенной (tweaked) версии от первоначально отправленной на конкурс SHA-3 — наличие операций побитового НЕ "~" перед значениями счетчика. Наличие таких операций дает гарантию, что по крайней мере 4 из 16 байт счетчика будут ненулевыми[2].

Далее ключи для вычисления функции получаются из следующим образом:, где , .

Быстродействие

В таблице представлены сравнительные данные скорости действия алгоритмов[1].

Алгоритм Скорость (тактов/байт)
32 бит 64 бит
MD5 7.4 8.8
SHA-1 9.8 9.5
SHA-256 28.8 25.3
SHA-512 77.8 16.9
SHAvite-3256 (изм.) 35.3 26.7
SHAvite-3256 (приб.) 26.6 18.6
SHAvite-3256 (c инстр. AES) < 8 < 8
SHAvite-3512 (изм.) 55.0 38.2
SHAvite-3512 (приб.) 35.3 28.4
SHAvite-3512 (c инстр. AES) < 12 < 12

Функция также может быть реализована аппаратно.

Длина Технология Размер Пропускная способность
256 ASIC 10.3 Kgates 7.6 Mbps
55.0 Kgates 604.4 Mbps
FPGA 510 Slices 1.7 Mbps
3585 Slice 872.3 Mbps
512 ASIC 18.5 Kgates 4.7 Mbps
81 Kgates 907.7 Mbps
FPGA 895 Slices 1.0 Mbps
7170 Slices 1.12 Gbps

В таблице приведены данные, основанные на аппаратной реализации AES 2005 года, быстродействие на настоящий момент может оказаться лучше[1].

Примечания

  1. 1 2 3 4 5 6 7 8 9 Eli Biham, Orr Dunkelman. The SHAvite-3 Hash Function. cs.technion.ac.il. Computer Science Department, Technion (31 октября 2008).
  2. 1 2 3 4 Eli Biham, Orr Dunkelman. The SHAvite-3 Hash Function. Tweaked Version. cs.technion.ac.il. Computer Science Department, Technion (23 ноября 2009).
  3. Thomas Peyrin. Сообщение в рассылке NIST о найденной уязвимости. NIST mailing list. NIST Computer Security Resource Center (19.01.09).
  4. Paul Souradyuti. OFFICIAL COMMENT: SHAvite-3. NIST mailing list. NIST Computer Security Resource Center (16.06.09).
  5. 1 2 Eli Biham, Orr Dunkelman. Updates on SHAvite-3. cs.technion.ac.il. Computer Science Department, Technion (23 августа 2010).
  6. Mridul Nandi, Souradyuti Paul. Сообщение в рассылке NIST о найденной уязвимости. NIST mailing list. NIST (18 июня 2009).
  7. Praveen Gauravaram, Gaëtan Leurent, Florian Mendel, María Naya-Plasencia, Thomas Peyrin. Cryptanalysis of the 10-Round Hash and Full Compression Function of SHAvite-3-512 (англ.) // Progress in Cryptology – AFRICACRYPT 2010 / Daniel J. Bernstein, Tanja Lange. — Springer Berlin Heidelberg, 2010-05-03. — P. 419–436. — ISBN 9783642126772, 9783642126789. — doi:10.1007/978-3-642-12678-9_25.
  8. Charles Bouillaguet, Orr Dunkelman, Gaëan Leurent, Pierre-Alain Fouque. Attacks on Hash Functions Based on Generalized Feistel: Application to Reduced-Round Lesamnta and SHAvite-3 512 (англ.) // Selected Areas in Cryptography / Alex Biryukov, Guang Gong, Douglas R. Stinson. — Springer Berlin Heidelberg, 2010-08-12. — P. 18–35. — ISBN 9783642195730, 9783642195747. — doi:10.1007/978-3-642-19574-7_2.
  9. Meltem Sönmez Turan et al. Status Report on the Second Round of the SHA-3 Cryptographic Hash Algorithm Competition. csrc.nist.gov. NIST Computer Security Resource Center (2011).
  10. Richard F. Kayser. Announcing request for candidate algorithm nominations for a new cryptographic hash algorithm (SHA-3) family (англ.) // Federal Register. — 2007. — 2 November (vol. 72, no. 212). — P. 62212—62220. — ISSN 0097-6326.

Ссылки