Односторонняя функция сжатия: различия между версиями
[отпатрулированная версия] | [непроверенная версия] |
MBHbot (обсуждение | вклад) м →Структура Дэвиса — Мейера: удаление невидимых символов мягкого переноса |
Ǝlʞıɯ (обсуждение | вклад) Функция «Добавить ссылку»: добавлено 2 ссылки. Метки: через визуальный редактор с мобильного устройства из мобильной версии Задача для новичков предложение: добавить ссылки |
||
Строка 21: | Строка 21: | ||
Функция сжатия в одну сторону должна обладать следующими свойствами: |
Функция сжатия в одну сторону должна обладать следующими свойствами: |
||
* Стойкость к поиску первого прообраза — отсутствие эффективного полиномиального алгоритма вычисления обратной функции, то есть нельзя восстановить текст <math>m</math> по известной его свертке <math>H(m)</math> за реальное время (необратимость). Это свойство эквивалентно тому, что хеш-функция является односторонней функцией. |
* Стойкость к поиску первого прообраза — отсутствие эффективного полиномиального алгоритма вычисления [[Обратная функция|обратной функции]], то есть нельзя восстановить текст <math>m</math> по известной его свертке <math>H(m)</math> за реальное время (необратимость). Это свойство эквивалентно тому, что хеш-функция является односторонней функцией. |
||
* Стойкость к поиску второго прообраза (коллизиям первого рода). Зная входное сообщение <math>m_{1}</math> и его свёртку <math>H(m_{1})</math>, вычислительно невозможно найти другой вход <math>m_{2}</math>, чтобы <math>H(m_{1})=H(m_{2})</math>. |
* Стойкость к поиску второго прообраза (коллизиям первого рода). Зная входное сообщение <math>m_{1}</math> и его свёртку <math>H(m_{1})</math>, вычислительно невозможно найти другой вход <math>m_{2}</math>, чтобы <math>H(m_{1})=H(m_{2})</math>. |
||
* [[Коллизия хеш-функции|Стойкость к коллизиям]] (коллизиям второго рода). Должно быть вычислительно невозможно подобрать пару сообщений <math>m_{1}</math> и <math>m_{2}</math> , что <math>H(m_{1})=H(m_{2})</math>.{{sfn|С.В.Дубров|2012|p = 65}} |
* [[Коллизия хеш-функции|Стойкость к коллизиям]] (коллизиям второго рода). Должно быть вычислительно невозможно подобрать пару сообщений <math>m_{1}</math> и <math>m_{2}</math> , что <math>H(m_{1})=H(m_{2})</math>.{{sfn|С.В.Дубров|2012|p = 65}} |
||
Строка 48: | Строка 48: | ||
[[Файл:Davies-Meyer hash.svg|thumb|230px|right|Схема Дэвиса — Мейера]] |
[[Файл:Davies-Meyer hash.svg|thumb|230px|right|Схема Дэвиса — Мейера]] |
||
В данной схеме блок сообщения <math>m_{i}</math> и предыдущее значение хеш-функции <math>H_{i-1}</math> поступают в качестве ключа и блока открытого текста соответственно на вход блочного шифра <math>E</math>. Получившийся в результате шифрования блок закрытого текста суммируется ([[Сложение по модулю 2|операция XOR]]) с результатом предыдущей итерации хеширования (<math>H_{i-1}</math>) для получения следующего значения хеш-функции (<math>H_{i}</math>).{{sfn|Авезова|2015|p = 61}} |
В данной схеме блок сообщения <math>m_{i}</math> и предыдущее значение хеш-функции <math>H_{i-1}</math> поступают в качестве ключа и блока [[Открытый текст|открытого текста]] соответственно на вход блочного шифра <math>E</math>. Получившийся в результате шифрования блок закрытого текста суммируется ([[Сложение по модулю 2|операция XOR]]) с результатом предыдущей итерации хеширования (<math>H_{i-1}</math>) для получения следующего значения хеш-функции (<math>H_{i}</math>).{{sfn|Авезова|2015|p = 61}} |
||
В [[Математические обозначения|математических обозначениях]] схему Дэвиса — Мейера можно записать как: |
В [[Математические обозначения|математических обозначениях]] схему Дэвиса — Мейера можно записать как: |
Текущая версия от 00:36, 1 декабря 2021
Односторонняя функция сжатия в криптографии — функция, которая образует значение длиной на выходе при задании двух входных значений длиной [1]. Одностороннее преобразование означает, что легко вычислить значение хеш-функции по прообразу, но трудно создать прообраз, значение хеш-функции которого равно заданной величине[2][3].
Односторонняя функция сжатия используется, например, в структуре Меркла — Дамгора внутри криптографических хеш-функций.
Односторонние функции сжатия часто построены из блочных шифров. Для того, чтобы превратить любой стандартный блочный шифр в одностороннюю функцию сжатия существуют схемы Дэвиса — Мейера, Матиса — Мейера — Осеаса, Миагути — Пренеля (функции сжатия одноблочной длины)[4].
Функция сжатия
[править | править код]Функции сжатия представляют собой функции, которые получают на вход строку переменной длины и преобразуют её в строку фиксированной, обычно меньшей, длины.
Например, если вход А имеет длину в 128 бит, вход B в 128 бит, и они сжаты вместе в один выход в 128 бит. Это то же самое, как если бы один-единственный 256-битовый вход сжимался вместе в один выход в 128 бит.
Некоторые функции сжатия имеют различный размер двух входов, но выход, как правило, имеет такой же размер, как и один из входов. Например, вход А может быть 256 бит, вход B 128 бит, и они сжаты вместе с одним выходом в 128 бит. То есть, в общей сложности 384 входных битов сжимаются вместе до 128 выходных битов.[5]
Таким образом, смешивание выполняется за счет достижения лавинного эффекта.То есть, каждый выходной бит зависит от каждого входного бита.[6]
Односторонняя функция
[править | править код]Функция сжатия в одну сторону должна обладать следующими свойствами:
- Стойкость к поиску первого прообраза — отсутствие эффективного полиномиального алгоритма вычисления обратной функции, то есть нельзя восстановить текст по известной его свертке за реальное время (необратимость). Это свойство эквивалентно тому, что хеш-функция является односторонней функцией.
- Стойкость к поиску второго прообраза (коллизиям первого рода). Зная входное сообщение и его свёртку , вычислительно невозможно найти другой вход , чтобы .
- Стойкость к коллизиям (коллизиям второго рода). Должно быть вычислительно невозможно подобрать пару сообщений и , что .[7]
Сведём задачу криптоанализа хеш-функций к задаче поиска коллизии: сколько сообщений надо просмотреть, чтобы найти сообщения с двумя одинаковыми хешами.
Вероятность встретить одинаковые хеши для сообщений из двух разных наборов, содержащих и текстов, равна . Если , то вероятность успеха атаки , а сложность проведения атаки операций.
Чтобы найти коллизию, надо сгенерировать два псевдослучайных множества сообщений (в каждом множестве сообщений) и найти для них хеши. Тогда, согласно парадоксу дней рождения (см. также атака «дней рождения»), вероятность того, что среди них найдется пара сообщений с одинаковыми хешами, больше 0,5. Атака требует большого объёма памяти для хранения текстов и эффективных методов сортировки.[8]
Структура Меркла — Дамгора
[править | править код]Суть конструкции заключается в итеративном процессе последовательных преобразований, когда на вход каждой итерации поступает блок исходного текста и выход предыдущей итерации[9].
Наиболее широко используются хеш-функции, основанные на этой конструкции в MD5, SHA-1 и SHA-2.
Хеш-функция должна преобразовывать входное сообщение произвольной длины в выходное фиксированной длины. Это может быть достигнуто путём разбиения входного сообщения на ряд одинаковых по размеру блоков, и их последовательной обработки односторонней функцией сжатия. Функция сжатия может быть либо специально разработана для хеширования, либо представлять собой функцию блочного шифрования.
Атака нахождения второго прообраза (учитывая сообщение , злоумышленник находит ещё одно сообщение , чтобы удовлетворить ) может быть выполнена в соответствии с Килси и Шнайером, для сообщения из 2k блоков может быть выполнена за время k × 2n/2+1 + 2n-k+1. Важно отметить, если сообщения длинные, то сложность атаки находится между 2n/2 и 2n, а когда длина сообщения становится меньше, сложность приближается к 2n.[10]
Роль функции сжатия может осуществлять любой блочный шифр E. Данная идея легла в основу развития конструкции Меркла — Дамгора в схемах Дэвиса — Мейера, Матиса — Мейера — Осеаса, Миагути — Пренеля[11].
Структура Дэвиса — Мейера
[править | править код]В данной схеме блок сообщения и предыдущее значение хеш-функции поступают в качестве ключа и блока открытого текста соответственно на вход блочного шифра . Получившийся в результате шифрования блок закрытого текста суммируется (операция XOR) с результатом предыдущей итерации хеширования () для получения следующего значения хеш-функции ().[11]
В математических обозначениях схему Дэвиса — Мейера можно записать как:
Если блочный шифр использует, например, 256-битный ключ, то каждый блок сообщений () представляет собой 256-битный фрагмент сообщения. Если же блочный шифр использует размер блока в 128 бит, то входные и выходные значения хеш-функции в каждом раунде составляют 128 бит.
Важным свойством конструкции Дэвиса — Мейера является то, что даже если базовый блок шифрования является полностью безопасным, можно вычислить неподвижные точки для построения: для любого можно найти значение такое что : просто нужно установить .[12]
Безопасность структуры Дэвиса — Мейера была впервые доказана Винтерницом[13].
Структура Матиса — Мейера — Осеаса
[править | править код]Это версия схемы Девиса — Мейера: блоки сообщения применяются как ключи криптосистемы. Схема может быть использована, если блоки данных и ключ шифрования имеют один и тот же размер. Например, AES хорошо подходит для этой цели.
В данной конструкции блок сообщения и предыдущее значение хеш-функции поступают в качестве ключа и блока открытого текста соответственно на вход блочного шифра . Но уже значение подвергается предварительной обработке функцией из-за возможных различий в размерах хеш-суммы и размере ключа шифра . Эта функция реализует отображение n-битного значения хеш- функции в k-битный ключ шифра . В результате применения операции шифрования, получается блок закрытого текста, который суммируется с соответствующим ему блоком открытого текста ().[14]
В математических обозначениях схему Матиса — Мейера — Осеаса можно записать как:
Структура Миагути — Пренеля
[править | править код]Схема Миагути — Пренеля — расширенная версия схемы Матиса — Мейера — Осеаса. Отличие в том, что блок закрытого текста суммируется не только с соответствующим ему блоком открытого текста (), но и с результатом предыдущей итерации хеширования (). Чтобы сделать алгоритм более устойчивым к атаке, исходный текст, ключ шифра и зашифрованный текст складываются с помощью операции XOR и создают новый дайджест. Эта схема используется в Whirlpool для создания хеш-функции. Результат суммирования определяется уравнением[15]:
Примечания
[править | править код]- ↑ Handbook of Applied Cryptography by Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone. Fifth Printing, August 2001.
- ↑ Брюс Шнайер, 2006, pp. 37—38.
- ↑ В.В.Ященко, 1999, p. 30.
- ↑ Авезова, 2015, p. 60.
- ↑ С.Баричев, Р.Серов, 2001, pp. 106—108.
- ↑ А.В. Антонов, 2012, pp. 106—107.
- ↑ С.В.Дубров, 2012, p. 65.
- ↑ С.В.Дубров, 2012, pp. 66—67.
- ↑ Авезова, 2015, pp. 60—61.
- ↑ Kelsey, Schneier, 2005, pp. 474—490.
- ↑ 1 2 Авезова, 2015, p. 61.
- ↑ Handbook of Applied Cryptography by Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone. Fifth Printing, August 2001, p. 375.
- ↑ Winternitz, 1984, pp. 88—90.
- ↑ Авезова, 2015, pp. 61—62.
- ↑ Авезова, 2015, p. 62.
Литература
[править | править код]Книги
[править | править код]- Alfred J. Menezes, Paul C. van Oorschot, Scott A. Vanstone. Chapter 9 // Hash Functions and Data Integrity. — 5-e изд. — August 2001. — С. 328.
- Брюс Шнайер. Прикладная криптография. — 2-e изд. — 2006. — С. 37—38. — 610 с.
- В.В.Ященко. Введение в криптографию. — 1999. — С. 30. — 271 с.
- С.Баричев, Р.Серов. Основы современной криптографии. — Москва, 2001. — С. 106—108. — 122 с.
- С.В.Дубров. Основы современной криптографии. — Новосибирск, 2012. — С. 65—67. — 260 с.
- John Kelsey and Bruce Schneier. Second preimages on n-bit hash functions for much less than 2n work. — 2005. — С. 474–490.
- R. Winternitz. A secure one-way hash function built from DES. — IEEE Press, 1984. — С. 88—90.
Научные статьи
[править | править код]- Авезова Яна Эдуардовна. Современные подходы к построению хеш-функций на примере финалистов конкурса sha-3. — Москва, 2015.
- А. В. Антонов. [www.hups.mil.gov.ua/periodic-app/article/1988/soivt_2012_2_23.pdf Развитие метода построения хеш-функции]. — Харьков, 2012.