SHAvite-3
| SHAvite-3 | |
|---|---|
| Разработчики | Эли Бихам, Ор Дункельман |
| Создан | 2008 |
| Опубликован | 2009 |
| Размер хеша | переменный, до 512 бит |
| Число раундов | 12 или 16 |
| Тип | хеш-функция |
SHAvite-3 — криптографическая хеш-функция, разработанная израильскими криптографами Эли Бихамом (англ. Eli Biham) и Ором Дункельманом (англ. Orr Dunkelman). Одна из четырнадцати участников второго раунда конкурса SHA-3, организованного NIST. SHAvite-3 основана на сочетании компонентов AES c фреймворком HAIFA. Данная хеш-функция использует такие криптографические примитивы, как сеть Фейстеля и конструкцию Девиса-Мейера. Семейство хеш-функций SHAvite-3 включает в себя два алгоритма — SHAvite-3256 и SHAvite-3512[1].
Название
Название функции SHAvite-3 произносится как «шавайт шалош» (ивр. шавайт три). Авторы назвали её так по следующим причинам[2]:
- Shavit переводится с иврита как комета — разработанная хеш-функция является защищённой и быстрой (фр. vite);
- Shavite — последователь Шивы — индусского божества;
- цифра 3 в названии — существовали две предыдущие версии, которые не были опубликованы.
История
Алгоритм SHAvite-3 был специально разработан для участия в конкурсе SHA-3. В числе требований, предъявляемых к хеш-функции, была возможность получения дайджестов длиной 224, 256, 384 и 512 бит для замены семейства криптографических алгоритмов SHA-2[3]. Авторы SHAvite-3 разработали две функции: SHAvite-3256 для генерации дайджеста длиной 224, 256 бит и SHAvite-3512 для генерации дайджеста длиной 384 и 512 бит. По результатам первого раунда конкурса была обнаружена уязвимость лежащего в основе алгоритма блочного шифра, которая, однако, не привела к компрометации хеш-функции[4][5].
Авторами была предложена модификация к первоначально заявленной на конкурс версии, чтобы повысить защищенность алгоритма. Изменение было названо улучшенной (tweaked) версией и касалось обоих алгоритмов SHAvite-3256 и SHAvite-3512[2]. После этого последовало исправление ошибки в реализации раундовой функции AES и улучшена криптостойкость SHAvite-3512 путём увеличения количества раундов с 14 до 16[6]. Функция дошла до второго раунда конкурса криптографических функций, но до финала не была допущена за недостаточную защищённость инициализации S-блоков, лежащих в основе блочного шифра, что приводило к относительно низкому уровню безопасности 512-разрядной версии[7][8][9]. В то же время, хеш-функция имела относительно низкие показатели пропускной способности[10].
Особенности дизайна
Особенностями хеш-функции SHAvite-3 являются[1]:
- итерации функций сжатия для получения хеш-функции производятся с помощью алгоритма HAIFA;
- алгоритм позволяет получить хеш произвольной длины, не превышающий 512 бит;
- поддерживает соли;
- функция сжатия разработана с использованием известных и хорошо изученных компонент: сети Фейстеля, раундовых функций AES и регистров сдвига с линейной обратной связью.
Алгоритм
Раунд AES
В своей основе SHAvite-3 использует раунд AES[1]. Раунд определяет операции над 128 битным числом [math]\displaystyle{ x }[/math]. Данные 128 бит разбиваются на 16 блоков по 8 бит, после чего блоки записываются в виде матрицы размера 4×4. Каждый элемент матрицы представляет значение в поле GF(28). Раунд состоит из последовательного применения операций SubBytes ([math]\displaystyle{ SB }[/math]), ShiftRows ([math]\displaystyle{ SR }[/math]), MixColumns ([math]\displaystyle{ MC }[/math]) и сложения по модулю 2 с раундовым ключом [math]\displaystyle{ subkey }[/math].
[math]\displaystyle{ AESRound_{subkey}(x) = MC(SR(SB(x))) \oplus subkey }[/math]
HAIFA
SHAvite-3 построен на режиме итераций для хеш-функций HAIFA[1]. HAIFA задает правила, по которым выполняется дополнение сообщения до нужной длины, его сжатие со специальной функцией [math]\displaystyle{ C }[/math] и сокращение полученного на выходе значения до требуемой длины. Таким образом, вычисление хеш-функции по алгоритму SHAvite-3 заключается в выполнении последовательно нескольких шагов:
- Дополнения сообщения [math]\displaystyle{ M }[/math] до некоторой длины, чтобы его можно было разбить на блоки равного размера. Обозначим дополненное сообщение [math]\displaystyle{ PM }[/math];
- Разбиения дополненного сообщение на [math]\displaystyle{ l }[/math] равных по размеру блоков: [math]\displaystyle{ PM = (M_1, M_2, ..., M_l) }[/math];
- Взятия некоторого начальное значения [math]\displaystyle{ h_0 = C(MIV, m, 0, 0) }[/math], где [math]\displaystyle{ MIV }[/math] — главное начальное значение, [math]\displaystyle{ m }[/math] — желаемый размер дайджеста;
- Вычисления последующего значения согласно формуле [math]\displaystyle{ h_i = C(h_{i-1}, M_i, numBits, salt) }[/math], где [math]\displaystyle{ numBits }[/math] — число захешированных к моменту вычисления [math]\displaystyle{ h_i }[/math] бит сообщения, включая текущий блок. Иначе говоря [math]\displaystyle{ numBits }[/math] — длина [math]\displaystyle{ (M_1, M_2, ..., M_i) }[/math]. Параметр [math]\displaystyle{ salt }[/math] — соль. В приложениях, где использование соли не требуется, авторы SHAvite-3 предлагают использовать [math]\displaystyle{ salt = 0 }[/math], допуская при этом снижение безопасности и увеличение скорости вычислений[1];
- Сокращения конечного значения [math]\displaystyle{ h_l }[/math] до требуемой длины [math]\displaystyle{ m }[/math], это и будет результатом вычисления хеш-функции.
Дополнение сообщения
Если размер исходного сообщения — [math]\displaystyle{ A }[/math], желаемый размер значения хеш-функции — [math]\displaystyle{ B }[/math], а размер блока, с которым работает функция сжатия [math]\displaystyle{ C }[/math], равен [math]\displaystyle{ n }[/math], то дополнение сообщения [math]\displaystyle{ M }[/math], которое имеет длину [math]\displaystyle{ len(M) }[/math], до длины кратной [math]\displaystyle{ n }[/math] выполняется в следующем порядке:
- К сообщению [math]\displaystyle{ M }[/math] приписывается в конец один бит со значением 1, получаем [math]\displaystyle{ (M, 1) }[/math];
- Приписывается значение [math]\displaystyle{ A }[/math], которое кодируется [math]\displaystyle{ a }[/math] битами: [math]\displaystyle{ (M, 1, A) }[/math];
- Приписывается значение [math]\displaystyle{ B }[/math], которое кодируется [math]\displaystyle{ b }[/math] битами: [math]\displaystyle{ (M, 1, A, B) }[/math];
- После бита 1 вставляется минимальное количество нулей, которое необходимо для того, чтобы длина полученного сообщения [math]\displaystyle{ PM }[/math] стала кратна [math]\displaystyle{ n }[/math]: [math]\displaystyle{ PM = (M, 1, 0, ..., 0, A, B) }[/math]. Количество нулей можно вычислить по формуле: [math]\displaystyle{ z = n - (len(M) + 1 + a + b)\ mod\ n }[/math].
Разновидности алгоритма
Алгоритм SHAvite-3 имеет две разновидности, различающиеся используемой функцией сжатия [math]\displaystyle{ C }[/math] и длиной дайджеста[1]:
- SHAvite-3256 использует функцию сжатия [math]\displaystyle{ C_{256} }[/math] и позволяет получить хеш длиной до 256 бит;
- SHAvite-3512 использует функцию сжатия [math]\displaystyle{ C_{512} }[/math] и позволяет получить хеш длиной от 257 до 512 бит.
Генерация дайджеста
Если исходное сообщение — [math]\displaystyle{ M }[/math], и требуется получить дайджест длиной [math]\displaystyle{ 1 \le m \le 512 }[/math], выполним следующую последовательность действий:
- Определим [math]\displaystyle{ w }[/math]. Назовем первым случаем [math]\displaystyle{ 1 \le m \le 256 }[/math], а вторым — [math]\displaystyle{ 256 \lt m \le 512 }[/math]. В первом случае [math]\displaystyle{ w = 256 }[/math], во втором — [math]\displaystyle{ w = 512 }[/math].
- Найдём [math]\displaystyle{ h_0 = C_{w}(MIV_{w}, m, 0, 0) }[/math], где [math]\displaystyle{ MIV_{w} = C_{w}(0,0,0,0) }[/math];
- Дополним сообщение до размера, кратного [math]\displaystyle{ n }[/math]=512 в первом случае или до [math]\displaystyle{ n }[/math]=1024 — во втором. Для этого воспользуемся процедурой, описанной ранее, считая [math]\displaystyle{ a }[/math]=64 в первом случае и [math]\displaystyle{ a }[/math]=128 — во втором. При этом в обоих случаях [math]\displaystyle{ b }[/math]=16;
- Разобьём дополненное сообщение [math]\displaystyle{ MP }[/math] на блоки по [math]\displaystyle{ n }[/math] бит и вычислим все [math]\displaystyle{ h_i }[/math], за исключением последних двух. Если длина исходного сообщения такова, что в результате дополнения сообщения в конце образовался блок, который не содержит ни одного бита исходного сообщения, то [math]\displaystyle{ h_{l-1} = C_{w}(h_{l-2}, M_{l-1}, len(M), salt) }[/math],[math]\displaystyle{ h_l = C_{w}(h_{l-1}, M_l, 0, salt) }[/math]. В противном случае, [math]\displaystyle{ h_{l-1} }[/math] вычисляется по тем же формулам, что и предыдущие [math]\displaystyle{ h_i }[/math], а [math]\displaystyle{ h_l = C_{w}(h_{l-1}, M_l, 0, salt) }[/math];
- Возьмём первые [math]\displaystyle{ m }[/math] бит [math]\displaystyle{ h_l }[/math]. Это и есть требуемое значение хеш-функции.
Функции [math]\displaystyle{ C_{256} }[/math] и [math]\displaystyle{ C_{512} }[/math]
Принимают на вход четыре битовых вектора:
- Цепное значение (chaining value) с размером [math]\displaystyle{ m_c }[/math]=256 бит для [math]\displaystyle{ C_{256} }[/math] ([math]\displaystyle{ m_c = 512 }[/math] бит для [math]\displaystyle{ C_{512} }[/math]);
- Блок сообщения с размером [math]\displaystyle{ n }[/math]=512 бит для [math]\displaystyle{ C_{256} }[/math] ([math]\displaystyle{ n }[/math]=1024 бита для [math]\displaystyle{ C_{512} }[/math]);
- Соль с размером [math]\displaystyle{ s }[/math]=256 бит для [math]\displaystyle{ C_{256} }[/math] ([math]\displaystyle{ s }[/math]=512 бит для [math]\displaystyle{ C_{512} }[/math]);
- Битовый счетчик с размером [math]\displaystyle{ b }[/math]=64 бита для [math]\displaystyle{ C_{256} }[/math] ([math]\displaystyle{ b }[/math]=128 бит для [math]\displaystyle{ C_{512} }[/math]).
На выходе получается вектор с размером 256 бит для [math]\displaystyle{ C_{256} }[/math] (512 бит для [math]\displaystyle{ C_{512} }[/math]).
Для реализации [math]\displaystyle{ C_{256} }[/math] и [math]\displaystyle{ C_{512} }[/math] используется конструкция Дэвиса-Мейера. Это значит, что цепное значение пересчитывается по формулам [math]\displaystyle{ h_i = E^{256}{(h_{i-1})} \oplus {h_{i-1}} }[/math] и [math]\displaystyle{ h_i = E^{512}{(h_{i-1})} \oplus {h_{i-1}} }[/math] соответственно[1].
Функция [math]\displaystyle{ E^{256} }[/math]
[math]\displaystyle{ E^{256} }[/math] — 12-раундовый блочный шифр. Данный блочный шифр является сетью Фейстеля, которая состоит из 12 ячеек Фейстеля. [math]\displaystyle{ E^{256} }[/math] принимает на вход 256-битный открытый текст [math]\displaystyle{ P }[/math]. Его можно разделить на две части [math]\displaystyle{ L_0 }[/math] и [math]\displaystyle{ R_0 }[/math] по 128 бит. [math]\displaystyle{ P = (L_0, R_0) }[/math]. Пересчёт значений на каждом раунде производится по формуле: [math]\displaystyle{ (L_{i+1}, R_{i+1}) = (R_i, L_i \oplus F^{3}_{RK_i}(R_i)) }[/math].
Здесь [math]\displaystyle{ RK_i = (k^0_i, k^1_i, k^2_i) }[/math] — вектор из трех ключей, различный для каждого раунда, а [math]\displaystyle{ F^3 }[/math] — некая функция. В результате может быть вычислено возвращаемое значение: [math]\displaystyle{ E^{256} = (L_{12}, R_{12}) }[/math].
Функция [math]\displaystyle{ F^{3}_k }[/math]
Функция [math]\displaystyle{ F^{3}_{k}(x) }[/math] принимает на вход 128-битный текст [math]\displaystyle{ x }[/math] и 384-битный ключ [math]\displaystyle{ k }[/math], который получается объединением трех 128-битных ключей [math]\displaystyle{ k = (k^0, k^1, k^2) }[/math]. Она заключается в троекратном применении раунда AES: [math]\displaystyle{ F^{3}_{(k^0_i, k^1_i, k^2_i)}(x) = AESRound_{0}(AESRound_{k^2_i}(AESRound_{k^1_i}(x \oplus k^0_i))) }[/math]. Входной вектор [math]\displaystyle{ x }[/math] складывается по модулю 2 с ключом [math]\displaystyle{ k^0_i }[/math], к результату применяются три раунда AES с разными ключами в следующем порядке: раунд AES с ключом [math]\displaystyle{ k^1_i }[/math], ещё один раунд AES с ключом [math]\displaystyle{ k^2_i }[/math], последний раунд с ключом 0 (128 бит).
Генерация ключей для [math]\displaystyle{ E^{256} }[/math]
Для вычисления функции [math]\displaystyle{ E^{256} }[/math] требуется по три 128-битных ключа в каждом из 12 раундов. Для этого используется алгоритм генерации ключей из одного ключа. В качестве единственного ключа, из которого впоследствии будут созданы 36, используется совокупность блока сообщения (512 бит), соли (256 бит) и битового счетчика (64 бита). В алгоритме все операции производятся над 4-байтными значениями. Введем следующие обозначения:
- [math]\displaystyle{ msg[0], ..., msg[15] }[/math] — блок сообщения;
- [math]\displaystyle{ cnt[0], cnt[1] }[/math] — битовый счетчик;
- [math]\displaystyle{ salt[0], ..., salt[7] }[/math] — соль.
В результате работы алгоритма получаем 144 значения (также 4-байтных):
- [math]\displaystyle{ rk[0], ...,rk[143] }[/math]
// Алгоритм генерации ключей для 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 варианта — наличие операций побитового отрицания «~» счетчика[math]\displaystyle{ (cnt[0], cnt[1]) }[/math]. Отрицание было добавлено, чтобы увеличить криптографическую стойкость хеш-функции. Наличие таких операций дает гарантию, что по крайней мере 4 из 8 байт счетчика будут ненулевыми[2].
Ключи [math]\displaystyle{ RK_i = (k^0_i, k^1_i, k^2_i) }[/math] для вычисления функции [math]\displaystyle{ E^{256} }[/math] получаются из [math]\displaystyle{ rk[0], ...,rk[143] }[/math] следующим образом:[math]\displaystyle{ k^j_i = (rk[y_i^j], rk[y_i^j + 1], rk[y_i^j + 2], rk[y_i^j + 3]) }[/math], где [math]\displaystyle{ y_i^j = 12*i + 4*j }[/math], [math]\displaystyle{ i \in [0,12), j \in [0,2) }[/math].
Функция [math]\displaystyle{ E^{512} }[/math]
Данная функция реализована по аналогии с [math]\displaystyle{ E^{256} }[/math], но принимает на вход 512-битный открытый текст [math]\displaystyle{ P }[/math], который представляется в виде 4 частей по
128 бит: [math]\displaystyle{ P = (L_0, A_0, B_0, R_0) }[/math]. Пересчет выполняется по формуле [math]\displaystyle{ (L_{i+1}, A_{i+1}, B_{i+1}, R_{i+1}) = (R_{i}, L_{i} \oplus F^4_{RK_{0,i}}(A_i), A_i, B_i \oplus F^4_{RK_{1,i}}(R_i)) }[/math] за 14 раундов (в обновленной версии авторы предложили использовать 16 раундов[6]). [math]\displaystyle{ E^{512} = (L_{14}, A_{14}, B_{14}, R_{14}) }[/math].
Функция [math]\displaystyle{ F^{4}_k }[/math]
Принимает на вход 128 бит текста [math]\displaystyle{ x }[/math] и 512-битный ключ [math]\displaystyle{ k = (k^0, k^1, k^2, k^3) }[/math]. Вычисляется как 4 раунда AES. [math]\displaystyle{ F^{4}_{(k^0_i, k^1_i, k^2_i, k^3_i)}(x) = AESRound_{0}(AESRound_{k^3_i}(AESRound_{k^2_i}(AESRound_{k^1_i}(x \oplus k^0_i)))) }[/math].
Генерация ключей для [math]\displaystyle{ E^{512} }[/math]
Для вычисления функции [math]\displaystyle{ E^{512} }[/math] требуется по восемь 128-битных ключей в каждом из 14 раундов. Всего — 112 ключей. Они составляются на основе блока сообщения (1024 бита), соли (512 бит) и битового счетчика (128 бита). Все операции производятся над 4-байтными значениями. Введем следующие обозначения:
- [math]\displaystyle{ msg[0], ..., msg[31] }[/math] — блок сообщения
- [math]\displaystyle{ cnt[0], ..., cnt[3] }[/math] — битовый счетчик
- [math]\displaystyle{ salt[0], ..., salt[15] }[/math] — соль
В результате работы алгоритма получаем 448 значений (4-байтных):
- [math]\displaystyle{ rk[0], ...,rk[447] }[/math]
// Алгоритм генерации ключей для 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-битной версии, единственное отличие улучшенной версии от первоначально отправленной на конкурс SHA-3 — наличие операций побитового НЕ «~» перед значениями счетчика. Наличие таких операций дает гарантию, что по крайней мере 4 из 16 байт счетчика [math]\displaystyle{ (cnt[0], cnt[1], cnt[2], cnt[3]) }[/math] будут ненулевыми[2].
Далее ключи [math]\displaystyle{ RK_{p,i} = (k_{p,i}^0, k_{p,i}^1, k_{p,i}^2, k_{p,i}^3) }[/math] для вычисления функции [math]\displaystyle{ E^{512} }[/math] получаются из [math]\displaystyle{ rk[0], ...,rk[447] }[/math] следующим образом:[math]\displaystyle{ k^j_{p,i} = (rk[y_{p,i}^j], rk[y_{p,i}^j + 1], rk[y_{p,i}^j + 2], rk[y_{p,i}^j + 3]) }[/math], где [math]\displaystyle{ y_{p,i}^j = 32*i + 16*p + 4*j }[/math], [math]\displaystyle{ i \in [0,14), p \in [0,2), j \in [0,4) }[/math].
Быстродействие
В таблице представлены сравнительные данные скорости действия алгоритмов[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,0 1,1 1,2 1,3 1,4 1,5 1,6 1,7 1,8 Eli Biham, Orr Dunkelman. The SHAvite-3 Hash Function. cs.technion.ac.il. Computer Science Department, Technion (31 октября 2008). Дата обращения: 2 ноября 2016. Архивировано 19 августа 2019 года.
- ↑ 2,0 2,1 2,2 2,3 Eli Biham, Orr Dunkelman. The SHAvite-3 Hash Function. Tweaked Version. cs.technion.ac.il. Computer Science Department, Technion (23 ноября 2009). Дата обращения: 21 декабря 2013. Архивировано 23 сентября 2015 года.
- ↑ 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. Архивировано 31 марта 2011 года.
- ↑ Thomas Peyrin. Сообщение в рассылке NIST о найденной уязвимости. NIST mailing list. NIST Computer Security Resource Center (19 января 2009). Дата обращения: 2 ноября 2016. Архивировано 25 декабря 2016 года.
- ↑ Paul Souradyuti. OFFICIAL COMMENT: SHAvite-3. NIST mailing list. NIST Computer Security Resource Center (16 июня 2009). Дата обращения: 2 ноября 2016. Архивировано 19 декабря 2016 года.
- ↑ 6,0 6,1 Eli Biham, Orr Dunkelman. Updates on SHAvite-3. cs.technion.ac.il. Computer Science Department, Technion (23 августа 2010). Дата обращения: 21 декабря 2013. Архивировано 23 сентября 2015 года.
- ↑ Mridul Nandi, Souradyuti Paul. Сообщение в рассылке NIST о найденной уязвимости. NIST mailing list. NIST Computer Security Resource Center (18 июня 2009). Дата обращения: 2 ноября 2016. Архивировано 25 декабря 2016 года.
- ↑ Шаблон:Source
- ↑ Шаблон:Source
- ↑ 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). Дата обращения: 21 декабря 2013. Архивировано 15 февраля 2013 года.
Ссылки
- Eli Biham, Orr Dunkelman. Официальная страница SHAvite-3. Архивная копия от 12 ноября 2013 на Wayback Machine (англ.) cs.technion.ac.il. Computer Science Department, Technion (проверено 09.12.2016)
- Eli Biham, Orr Dunkelman. Спецификация SHAvite-3 (Первоначальная версия) Архивная копия от 27 ноября 2020 на Wayback Machine (англ.) cs.technion.ac.il. Computer Science Department, Technion (опубликовано 01.02.2009, проверено 09.12.2016)
- Eli Biham, Orr Dunkelman. Спецификация SHAvite-3 (Улучшенная версия) Архивная копия от 23 сентября 2015 на Wayback Machine (англ.) cs.technion.ac.il. Computer Science Department, Technion (опубликовано 23.11.09, проверено 09.12.2016)
- Eli Biham, Orr Dunkelman. Обновления SHAvite-3 Архивная копия от 23 сентября 2015 на Wayback Machine (англ.) cs.technion.ac.il. Computer Science Department, Technion (опубликовано 23.08.2010, проверено 09.12.2016)
- Сайт NIST. Конкурс на алгоритм SHA-3 Архивная копия от 5 мая 2010 на Wayback Machine (англ.) csrc.nist.gov. NIST Computer Security Resource Center. (обновлено 14.09.2016, проверено 09.12.2016)
- Regenscheid A. et al. Результат первого раунда конкурса на алгоритм SHA-3 Архивная копия от 29 декабря 2009 на Wayback Machine (англ.) csrc.nist.gov. NIST Computer Security Resource Center. (опубликовано 2009, проверено 09.12.2016)
- Turan M. S. et al. Результат второго раунда конкурса на алгоритм SHA-3 Архивная копия от 15 февраля 2013 на Wayback Machine (англ.) csrc.nist.gov. NIST Computer Security Resource Center. (опубликовано 2011, проверено 09.12.2016)