Для произвольного входного сообщения функция генерирует хеш-значение, называемое дайджестом сообщения, которое может иметь длину 128, 160, 192, 224 или 256 бит. Количество итераций — переменное, от 3 до 5. Количество раундов на каждой итерации — 32. Является модификацией MD5.
Определим булевы функции, которые используются для выполнения побитовых операций над словами. 1-я итерация 2-я итерация 3-я итерация 4-я итерация 5-я итерация На вход алгоритма поступает входной поток данных, хеш которого необходимо найти. Этот поток делится на блоки, каждый длиной в 1024 бита. Ниже приведены 3 шага алгоритма.
Шаг 1. Расширение сообщения
Сначала сообщение расширяется так, чтобы его длина в битах стала равной 944 по модулю 1024. Для этого в конец сообщения записывается единичный бит, а затем необходимое число нулевых бит. В оставшиеся 80 бит дописывают 64-битное представление количества бит в сообщении до выравнивания(поле MSGLENG), 10-битное представление длины дайджеста сообщения(поле DGSTLENG),3-битное представление числа итераций(поле PASS) и 3-битное представление версии HAVAL(поле VERSION).
Шаг 2. Обработка сообщения блоками по 1024 бит
Запишем расширенное сообщение в виде: , где — 1024-битный блок и n — количество блоков в расширенном сообщении. Далее, для i от 0 до n-1 проводим следующее вычисление: , где H — функция сжатия, описанная ниже, и — 256-битная константа.
Функция сжатия H
Функция сжатия H
H обрабатывает блок сообщения в течение 3, 4 или 5 итераций(в зависимости от значения поля PASS). Обозначим функции сжатия, использующиеся в итерациях, через и . Пусть — некоторая 256-битная константа, а — 256-битный выход функции H. Тогда H может быть описана следующим образом(см. рисунок):
(Примечание: под операцией вида понимается операция вида: , где 32-битные слова.
Обозначим номер итерации через j (j =1,…,5). Итерации под номером j соответствует функция сжатия . На вход каждой функции подаётся и , где — это 1024-битный блок сообщения, состоящий из 32 слов , a состоит из 8 слов . Тогда может быть записана следующим образом:
1. Пусть
2. Повторяем следующие действия для i от 0 до 31:
, где — 32-битные константы
3. Пусть и является 256-битным выходом .
Обозначения: — композиция двух функций(первой выполняется ),
— сложение по модулю ,
— перестановки, описанные в Таблице 2.
Замечания: на 1-й итерации константы не используются (то есть ).
В отличие от итерации 1, во 2-й и в последующих итерациях обрабатывается не в пословном порядке, а в порядке, определённом Таблицей 1.
Таблица 1. Порядок обработки слов
()
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
()
5
14
26
18
11
28
7
16
0
23
20
22
1
10
4
8
30
3
21
9
17
24
29
6
19
12
15
13
2
25
31
27
()
19
9
4
20
28
17
8
22
29
14
25
12
24
30
16
26
31
15
7
3
1
0
18
27
13
6
21
10
23
11
5
2
()
24
4
0
14
2
7
28
23
26
6
30
20
18
25
19
3
22
11
31
21
8
27
12
9
1
29
5
15
17
10
16
13
()
27
3
21
26
17
11
20
29
19
0
12
7
13
8
31
10
5
9
14
30
18
6
28
24
2
23
16
22
4
1
25
15
Таблица 2. Перестановки
Шаг 3. Формирование дайджеста сообщения
На этом шаге используется длиной в 256 бит, полученный на шаге 2. Если требуемый размер хэша — 256 бит, то и есть дайджест сообщения. Рассмотрим остальные 4 случая.
1. Размер хеша — 128 бит
Представим и в следующем виде:
(верхний индекс указывает на длину X в битах)
Тогда дайджестом сообщения является 128-битовое , где
2. Размер хеша — 160 бит
Представим и в следующем виде:
Тогда дайджестом сообщения является 160-битовое , где
3. Размер хеша — 192 бит
Представим и в следующем виде:
Пусть
— дайджест сообщения.
4. Размер хеша — 224 бит
Представим в следующем виде:
Тогда дайджестом сообщения является 224-битовое , где
Константы, использующиеся в алгоритме
В данном алгоритме используются 136 32-битовых константы. Запишем их в следующем порядке:
Первые 8 констант представляют собой первые 256 бита дробной части числа . Константы соответствуют следующим 1024 битам дробной части и т. д.
Функции , , , и
Булевы функции , , , и , использующиеся в алгоритме, обладают рядом полезных свойств в случае предварительной перестановки их аргументов :
1) Они сбалансированы по 0 и 1. Это значит, что выходом функции при произвольном наборе входных данных с равной вероятностью(1/2) может быть либо 0, либо 1.
3) Они удовлетворяют критерию строгого лавинного эффекта (Strict Avalanche Criterion), т.е при изменении значения любой из входных переменных значение функции меняется с вероятностью 1/2.
4) Они не могут быть получены одна из другой посредством применения линейных преобразований к входным переменным.
5) Этот набор функций — взаимно некоррелирующий по выходу, то есть любая пара функций взаимно не коррелирует по выходу(функции и взаимно не коррелируют по выходу, если , и — сбалансированные по 0 и 1, нелинейные функции)
HAVAL — хеши
HAVAL-хеши обычно представляются в виде последовательности, состоящей из 32, 40, 48, 56 или 64 шестнадцатеричных чисел. Несколько примеров хеша(размер — 256 бит, число итераций — 5):
В отличие от хеш-функции MD5, у которой дайджест и число итераций имеют фиксированные размеры, HAVAL предоставляет 15 различных вариантов алгоритма за счёт комбинирования длины дайджеста и числа итераций. Это обеспечивает большую гибкость и, следовательно, делает хеш-функцию более подходящей для приложений, в которых требуется различная длина хеша сообщения и различный уровень безопасности. Эксперименты показали, что HAVAL на 60 % быстрее MD5 при 3-х итерациях, на 15 % — при 4-х итерациях и столь же быстр при пяти итерациях.
Криптоанализ
Коллизии HAVAL
Коллизия хеш-функции — это получение одинакового значения функции для разных сообщений.
В 2003 году Bart Van Rompay, Алекс Бирюков, Барт Пренель и Joos Vandewalle обнаружили коллизию для 3-итерационного HAVAL. [2] Для нахождения этой коллизии потребовалось приблизительно выполнений функции сжатия H.
В 2006 году группа китайских учёных во главе с Wang Xiaoyun и Yu Hongbo провели две атаки на 4-итерационный HAVAL, потребовавшие и операций хеширования соответственно. Они же предложили первую теоретическую атаку на 5-итерационный HAVAL с числом операций хеширования, приблизительно равным .[4]
MD4 — криптографическая хеш-функция, разработанная профессором Массачусетского университета Рональдом Ривестом в 1990 году, и впервые описанная в RFC 1186. Для произвольного входного сообщения функция генерирует 128-разрядное хеш-значение, называемое дайджестом сообщения. Этот алгоритм используется в протоколе аутентификации MS-CHAP, разработанном корпорацией Майкрософт для выполнения процедур проверки подлинности удаленных рабочих станций Windows. Является предшественником MD5.
NUSH («Наш») — блочный алгоритм симметричного шифрования, разработанный Анатолием Лебедевым и Алексеем Волчковым для российской компании LAN Crypto.
RIPEMD-160 — криптографическая хеш-функция, разработанная в Католическом университете Лувена Хансом Доббертином, Антоном Босселарсом и Бартом Пренелем. Для произвольного входного сообщения функция генерирует 160-разрядное хеш-значение, называемое сводкой сообщения. RIPEMD-160 является улучшенной версией RIPEMD, которая, в свою очередь, использовала принципы MD4 и по производительности сравнима с более распространённой SHA-1.
Шаблон:Карточка хеш функции
В криптографии, XTEA (eXtended TEA) — блочный шифроалгоритм, призванный устранить критические ошибки алгоритма TEA. Разработчиками шифра являются Дэвид Уилер и Роджер Нидхэм (факультет компьютерных наук Кэмбриджского университета). Алгоритм был представлен в неизданном техническом отчете в 1997 году. Шифр не патентован, широко используется в ряде криптографических приложений и широком спектре аппаратного обеспечения благодаря крайне низким требованиям к памяти и простоте реализации.
SEAL — симметричный поточный алгоритм шифрования данных, оптимизированный для программной реализации.
Threefish — в криптографии симметричный блочный криптоалгоритм, разработанный автором Blowfish и Twofish, американским криптографом Брюсом Шнайером в 2008-м году для использования в хэш-функции Skein и в качестве универсальной замены существующим блочным шифрам. Основными принципами разработки шифра были: минимальное использование памяти, необходимая для использования в хэш-функции устойчивость к атакам, простота реализации и оптимизация под 64-разрядные процессоры.
Шаблон:Карточка хеш функции SHA-3 — алгоритм хеширования переменной разрядности, разработанный группой авторов во главе с Йоаном Дайменом, соавтором Rijndael, автором шифров MMB, SHARK, Noekeon, SQUARE и BaseKing. 2 октября 2012 года Keccak стал победителем конкурса криптографических алгоритмов, проводимым Национальным институтом стандартов и технологий США. В программной реализации авторы заявляют о 12,5 циклах на байт при выполнении на ПК с процессором Intel Core 2. Однако в аппаратных реализациях Keccak оказался намного быстрее, чем все другие финалисты.
SHACAL — в криптографии симметричный блочный криптоалгоритм, разработанный для участия в конкурсе NESSIE группой авторов из компании Gemplus во главе с Хеленой Хандшу и Давидом Наккашем. Существует два варианта алгоритма — SHACAL-1 и SHACAL-2, который и стал одним из 17 финалистов NESSIE.
BelT — государственный стандарт симметричного шифрования и контроля целостности Республики Беларусь. Полное название стандарта — СТБ 34.101.31-2007 «Информационные технологии и безопасность. Криптографические алгоритмы шифрования и контроля целостности». Принят в качестве предварительного стандарта в 2007 году. Введен в действие в качестве окончательного стандарта в 2011 году.
Salsa20 — система поточного шифрования разработанная Daniel J. Bernstein (англ.). Алгоритм был представлен на конкурсе «eSTREAM», целью которого было создание европейских стандартов для поточных систем шифрования. Алгоритм стал победителем конкурса в первом профиле.
Шаблон:Карточка хеш функции
SIMD — итеративная криптографическая хеш-функция, разработанная Gaëtan Leurent, Charles Bouillaguet, Pierre-Alain Fouque. Была выдвинута как кандидат на конкурс стандарта SHA-3, проводимый Национальным институтом стандартов и технологий (США), где прошла во второй раунд.
SHAvite-3 — криптографическая хеш-функция, разработанная израильскими криптографами Эли Бихамом (англ. Eli Biham) и Ором Дункельманом (англ. Orr Dunkelman). Одна из четырнадцати участников второго раунда конкурса SHA-3, организованного NIST. SHAvite-3 основана на сочетании компонентов AES c фреймворком HAIFA. Данная хеш-функция использует такие криптографические примитивы, как сеть Фейстеля и конструкцию Девиса-Мейера. Семейство хеш-функций SHAvite-3 включает в себя два алгоритма — SHAvite-3256 и SHAvite-3512.
Шаблон:Карточка хеш функции Kupyna — итеративная криптографическая хеш-функция. Принята в качестве национального стандарта Украины ДСТУ 7564:2014 в качестве замены устаревшей хеш-функции ГОСТ 34.311-95. Сжимающая функция Kupyna состоит из двух фиксированных 2n-битных перестановок T⊕ и T+, структура которых заимствована у шифра Kalyna. В частности, используется четыре таких же S-блока. Результат работы хеш-функции может иметь длину от 8 до 512 бит. Вариант, возвращающий n бит, называется Kupyna-n.
Panama — криптографический примитив, который может быть использован либо в виде криптографической хеш-функции, либо как потоковый шифр. Был разработан в 1998 году Йоаном Дайменом и Крейгом Клепом для повышения эффективности в программном обеспечении для 32-битных архитектур. Является одним из прародителей алгоритма хеширования «Keccak», ставшим победителем конкурса криптографических примитивов от Национального института стандартов и технологий США. Во многом основывается на StepRightUp потоковом хеш-модуле.
Argon2 — функция формирования ключа, разработанная Алексом Бирюковым, Даниэлем Дину и Дмитрием Ховратовичем из Университета Люксембурга в 2015 году.
SOBER-t32 — cинхронный аддитивный потоковый шифр из семейства SOBER. Авторами являются Филип Хаукес и Грегори Роуз (Австралия).
Хеш-функции на основе клеточных автоматов — разновидность хеш-функций, использующая для вычисления клеточные автоматы. Использование клеточных автоматов обеспечивает высокий уровень параллелизма и, следовательно, позволяет достичь высоких скоростей, что необходимо в условиях ограниченных вычислительных мощностей и жестких требований к энергопотреблению. Хеш-функции на основе клеточных автоматов обладают хорошим лавинным эффектом. Использование клеточных автоматов позволяет добиться устойчивости к атакам временного анализа.
MASH-1 — это хеш-функция, используемая в криптографии, основанная на модульной арифметике. Главные преимущества этой функции - возможность повторного использования существующего программного или аппаратного обеспечения и масштабируемость. Из недостатков: не очень высокая скорость, обусловленная скоростью RSA-шифрования, которая на 2-3 порядка ниже скорости блочно-симметричных шифров, и история неудачных предложений функций, основанных на модульной арифметике.
Эта страница основана на статье Википедии. Текст доступен на условиях лицензии CC BY-SA 4.0; могут применяться дополнительные условия. Изображения, видео и звуки доступны по их собственным лицензиям.