тема 9. хэш-функции: назначение и практическое использование

advertisement
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
ТЕМА 9. ХЭШ-ФУНКЦИИ: НАЗНАЧЕНИЕ И ПРАКТИЧЕСКОЕ
ИСПОЛЬЗОВАНИЕ. ГОСТ Р34.11–94 «КРИПТОГРАФИЧЕСКАЯ
ЗАЩИТА ИНФОРМАЦИИ. ФУНКЦИЯ ХЭШИРОВАНИЯ»
Цели и задачи изучения темы:
 сформировать представление о хэш-функции и ее основных
свойствах, назначении и применении;
 ознакомить с основными требованиями, предъявляемыми к хэшфункциям;
 познакомить с архитектурой аппаратно-программного комплекса
криптографической защиты данных и ограничения доступа к ним
КРИПТОН – 4/PCI, а также с входящими в его состав модулями
программного обеспечения;
 приобрести знания по алгоритмам работы и структурам важнейших
используемых на практике хэш-функций (ГОСТР 34.11–94; SHA1).
Оглавление:
9.1 Хэш-функции на основе блочных шифров ...........................................................................1
9.2. Важнейшие практически используемые стойкие хэш-функции .......................................4
9.1. Хэш-функции на основе блочных шифров
Хэш-функции
являются
необходимым
элементом
ряда
криптографических схем. Под этим термином понимаются функции,
отображающие сообщения произвольной длины (иногда длина
сообщения ограничена, но достаточно большим числом) в значения
фиксированной длины. Последние часто называют хэш-кодами. Таким
образом, у всякой хэш-функции имеется большое количество коллизий,
т. е. пар значений
таких, что
. Основное требование,
предъявляемое криптографическими приложениями к хэш-функциям,
состоит в отсутствии эффективных алгоритмов поиска коллизий.
Схемы электронной подписи – основная сфера применения хэшфункций в криптографии. Поскольку используемые на практике схемы
электронной подписи не приспособлены для подписания сообщений
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
произвольной длины, а процедура, состоящая в разбиении сообщения на
блоки и в генерации подписи для каждого блока по отдельности, крайне
неэффективна, единственным разумным решением представляется
применение схемы подписи к хэш-коду сообщения. Нетрудно понять, что
наличие эффективных методов поиска коллизий для хэш-функции
подрывает стойкость протокола электронной подписи. Хэш-функции
используются также в некоторых протоколах аутентификации для
снижения их коммуникационной сложности, т. е. для уменьшения длин
пересылаемых сообщений, и в некоторых других криптографических
протоколах.
Хэш-функция – это преобразование, получающее из данных
произвольной длины некое значение (свертку) фиксированной длины.
Простейшими примерами являются контрольные суммы (например,
crc32).
Бывают
криптографические
и
программистские
хэши.
Криптографический хэш отличается от программистского следующими
двумя свойствами: необратимостью и свободностью от коллизий.
Обозначим m – исходные данные, h(m) – хэш от них. Необратимость
означает, что если известно число h0, то трудно подобрать m такое, что
h(m) = h0. Свободность от коллизий означает, что трудно подобрать
такие m1 и m2, что m1 не равно m2, но h(m1) = h(m2).
Криптографические хэш-функции разделяются на два класса:
 хэш-функции без ключа (MDC (Modification (Manipulation) Detect Code)
- коды),
 хэш-функции c ключом (MАC (Message Authentication Code) - коды).
Хэш-функции без ключа разделяются на два подкласса:
 слабые хэш-функции,
 сильные хэш-функции.
Слабой хэш-функцией называется односторонняя функция H(x),
удовлетворяющая следующим условиям:
1.
2.
3.
4.
аргумент х может быть строкой бит произвольной длины;
значение H(x) должно быть строкой бит фиксированной длины;
значение H(x) легко вычислить;
для любого фиксированного x вычислительно невозможно найти
другой x' ! = x, такой что H(x') =H(x). Пара x' ! = x, когда H(x') = H(x)
называется коллизией хэш-функции.
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Сильной хэш-функцией называется односторонняя функция H(x),
удовлетворяющая условиям 1–3 для слабой хэш-функции и свойству 4':
4') вычислительно невозможно найти любую пару x'! = x, такой что H(x') =
H(x).
Поскольку из свойств 1–2 следует, что множество определения хэшфункции значительно шире множества значений, то коллизии должны
существовать. Свойство 4 требует, чтобы найти их для заданного
значения х было практически невозможно. Требование 4' говорит о том,
что у сильной хэш-функции вычислительно невозможно вообще найти
какую-либо коллизию.
Хэш-функцией с ключом
удовлетворяющая свойствам:
(MAC)
называется
функция
H(k,x),
1. аргумент х функции H(k,x) может быть строкой бит произвольной
длины;
2. значение H(k,x) должно быть строкой бит фиксированной длины;
3. при любых k и x легко вычислить H(k,x);
4. для любого х должно быть трудно вычислить H(k,x), не зная k;
5. должно быть трудно определить k даже при большом числе
неизвестных пар {x, H(k,x)} при выбранном наборе х или вычислить
по этой информации H(k,x') для x' ! = x.
Зачем нужна хэш-функция? Дело в том, что многие криптографические
преобразования (в частности, вычисление и проверка электронной
цифровой подписи, ЭЦП) выполняются над данными фиксированного
размера. Поэтому перед просталением электронной подписи под
многомегабайтным файлом обычно рассчитывают значение хэш-функции
от него, а уже от этого значения считают ЭЦП. Кроме того, удобно,
например, пароли в базе хранить не в открытом виде, а в хэшированном
(так сделано во всех юниксах).
Некоторые алгоритмы хэш-функций:
 MD2. Message Digest. Алгоритм криптографической сверки.
Порождает 128-bit блок от сообщения произвольной длины.
 MD4. Другой алгоритм свертки. Порождает 128-bit блок.
 MD5. Существенно переделанный MD4. Автор тот же – Риверст.
 SHA. Результирующий хэш равен 160-bit.
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
 ГОСТ Р34.11–94. Российский алгоритм. Длина свертки – 256 бит
(очень удобно для формирования по паролю ключа для ГОСТ 28147–
89).
Основная идея применения криптографических функций состоит в том,
чтобы хэш-величины служили в качестве компактного репрезентативного
образа входной двоичной строки, и их можно использовать как если бы
они однозначно отождествлялись с этой строкой, хотя для области
определения D и области значений R с
(имеются в виду мощности
множеств), функция типа «множество – один» подразумевает, что
существование столкновений (пары входов с одинаковым выходом)
неизбежно. Область применения хэш-функции четко не оговорена: она
используется «для реализации процедур электронной цифровой подписи
(ЭЦП), при передаче, обработке и хранении информации в
автоматизированных системах».
– множество двоичных строк длиной n бит;
– двоичная строка, состоящая из n нулей;
– сложение двоичных слов A и B по
.
Сообщения с произвольной длины можно сжать используя хэшфункцию с фиксированным размером входа, при помощи двух методов:
 последовательного (итерационного),
 параллельного.
9.2. Важнейшие практически используемые стойкие хэш-функции
Создатели ГОСТ Р34.11–94 пошли по первому пути и использовали
метод последовательного хэширования использующий хэш-функцию с
фиксированным размером входа (см. рис. 1.), т. е. функцию сжатия с
коэффициентом 2.
Рис. 1. Метод последовательного хэширования
Если необходимо хэшировать сообщение
хэширование выполняется следующим образом:
Здесь
– функция сжатия, а
– переменная сцепления.
,
то
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Если последний блок содержит меньше чем n бит, то он «набивается»
до достижения длины n. В отличие от стандартных предпосылок,
предполагающих, что сообщение предварительно уже было разбито на
блоки и произведена «набивка» последнего блока (это соответствует
форматированию входного сообщения априори) до начала хэширования, в
ГОСТ Р34.11–94 процедура хэширования ожидает конца сообщения
(форматирование входного сообщения апостериори). «Набивка»
производится следующим образом: последний блок сдвигается вправо, а
затем освободившиеся разряды заполняются нулями до достижения
длины в 256 бит. Алгоритм хэширования по ГОСТ Р34.11–94 можно
классифицировать как устойчивый к столкновениям (n = 256,
следовательно атака по парадоксу дней рождения потребует
приблизительно 2 256 / 2 операций хэширования) код, а также выявляющий
модификации (Collision Resistant Hash Function, CRHF). Хэш-функцию по
ГОСТ Р34.11 – 94 можно легко преобразовать в код аутентификации
сообщения любым известным методом (например, HMAC, методом
секретного префикса, суффикса, оболочки и т. д.).
Однако разработчики предусмотрели дополнительные меры защиты,
для чего параллельно рассчитываются:
 контрольная сумма, представляющая собой сумму всех блоков
сообщения (последний блок суммируется уже «набитым») по правилу
где
битовые длины слов A и B (далее на
рисунках и в тексте эту операцию будем обозначать значком );
 длина хэшируемого сообщения в битах, приводимая по модулю 256
(
).
Рассчитанные значения в финальной функции сжатия используются для
вычисления итогового хэша (см. рис. 2).
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 2. Общая схема функции хэширования по ГОСТ Р34.11– 94
Замечание 1 («набивка»). Указывать в передаваемом сообщении,
сколько было добавлено нулей к последнему блоку, не требуется, т. к.
длина сообщения участвует в хэшировании.
Рис. 3. «Набивка» сообщения
Замечание 2. Согласно ГОСТ Р34.11–94, начальный вектор IV –
произвольное фиксированное слово длиной 256 бит
). В таком
случае, если он априорно не известен верифицирующему целостность
сообщения, то он должен передаваться вместе с сообщением с гарантией
целостности. Для сообщений небольших объемов задачу противнику
можно усложнить, если вектор IV выбирать из небольшого множества
допустимых величин (но при этом увеличивается вероятность угадывания
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
хэш-величины противником). Также он может задаваться в рамках
организации, домена как константа (обычно, как в тестовом примере).
Безопасный хэш-алгоритм SHA-1 (Secure Hash Algorithm – 1) был
разработан национальным институтом стандартов и технологии (NIST) и
опубликован в качестве федерального информационного стандарта
(FIPS PUB 180) в 1993 г.
Алгоритм получает на входе сообщение максимальной длины 2 64 бит и
создает в качестве выхода дайджест сообщения длиной 160 бит.
Алгоритм содержит ряд шагов.
Шаг 1: добавление недостающих битов. Сообщение добавляется таким
образом, чтобы его длина была кратна 448 по модулю 512 (длина
448mod512). Добавление осуществляется всегда, даже если сообщение
уже имеет нужную длину. Таким образом, число добавляемых битов
находится в диапазоне от 1 до 512. Добавление состоит из единицы, за
которой следует необходимое количество нулей.
Шаг 2: добавление длины. К сообщению добавляется блок из 64 битов.
Этот блок трактуется как беззнаковое 64-битное целое число и содержит
длину исходного сообщения до добавления. Результатом первых двух
шагов является сообщение, длина которого кратна 512 битам.
Расширенное
сообщение
может
быть
представлено
как
последовательность 512-битных блоков Y0, Y1, . . . , YL-1. Таким образом,
общая длина расширенного сообщения есть L * 512 бит (результат кратен
шестнадцати 32-битным словам).
Шаг 3: инициализация SHA-1 буфера. Используется 160-битный буфер
для хранения промежуточных и окончательных результатов расчета хэшфункции. Буфер может быть представлен как пять 32-битных регистров
для хранения чисел A, B, C, D и E. Эти регистры инициализируются
следующими шестнадцатеричными числами: A = 67452301; B =
EFCDAB89; C = 98BADCFE; D = 10325476; E = C3D2E1F0.
Шаг 4: обработка сообщения в 512-битных (16-словных) блоках.
Основой алгоритма является модуль, состоящий из 80 циклических
обработок, обозначенный как HSHA. Все 80 циклов обработки каждого
блока имеют одинаковую структуру.
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Рис. 4. Обработка очередного 512-битного блока
Каждый цикл получает на входе текущий 512-битный обрабатываемый
блок Yq и 160-битное значение буфера ABCDE и изменяет содержимое
этого буфера. В каждом цикле используется дополнительная константа
K t , которая принимает только четыре различных значения:
0
20
40
60
t 19
t 39
t 59
t 79
K t = 5A827999 (целая часть числа [ 2 30  21/2 ]);
K t = 6ED9EBA1 (целая часть числа [ 2 30  31/2 ]);
K t = 8F1BBCDC (целая часть числа [ 2 30  51/2 ]);
K t = CA62C1D6 (целая часть числа [ 2 30  101/2 ]).
Для получения SHAq 1 выход 80-го цикла складывается со значением
SHAq . Сложение по модулю 2 32 выполняется независимо для каждого из
пяти слов в буфере с каждым из соответствующих слов в SHA q .
Шаг 5: выход. После обработки всех 512-битных блоков сообщения
выходом L-й стадии алгоритма является 160-битный дайджест сообщения.
Рассмотрим более детально логику работы в каждом из 80-и циклов
обработки для одного 512-битного блока. Новые (рассчитанные) значения
для переменных A, B, C, D, E на выходе каждого цикла обработки можно
представить так:
A  (CLS5 ( A)  f t ( B, C, D)  E  Wt  K t ); B  A; C  CLS30 ( B); D  C; E  D.
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Здесь: A, B, C, D, E – пять 32-битных слов из буфера; t – номер цикла
0
t
79; f t - элементарная логическая функция; CLS s – циклический
левый сдвиг 32-битного аргумента на s битов; Wt – 32-битное слово,
полученное из текущего входного 512-битного блока;
–
Kt
32
дополнительная константа; знак «+» – сложение по модулю 2 .
Рис. 5. Логика выполнения отдельного цикла
Каждая элементарная функция получает на входе три 32-битных слова
и создает на выходе одно 32-битное слово. Элементарная функция
выполняет набор побитных логических операций, т. е. n-й бит выхода
является функцией от n-х битов трех входов. Функции ft (B, C, D)
следующие:
Номер
цикла
(0 t 19)
(20 t 39)
(40 t 59)
(60 t 79)
ft (B, C, D)
( B  C )  ( B  D )
B C  D
( B  C )  ( B  D)  (C  D)
B C  D
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
На практике используются только три различные функции. Для 0 t
19 функция является условной: if B then C else D. Для 20 t 39 и
60 t 79 функция создает бит четности. Для 40 t 59 функция
является истинной, если два или три аргумента истинны. 32-битные
слова Wt получаются из очередного 512-битного блока сообщения
следующим образом.
Рис. 6. Получение входных значений переменной Wt для каждого цикла из
очередного (текущего) 512-битного обрабатываемого блока Yq
Первые 16 значений Wt берутся непосредственно из 16 слов текущего
Yq .
блока
Оставшиеся
значения
определяются
следующим
образом: Wt  Wt 16  Wt 14  Wt 8  Wt 3 В первых 16 циклах обработки вход
состоит из 32-битного слова данного блока Yq . Для оставшихся 64 циклов
вход состоит из XOR нескольких слов из блока сообщения Yq .
Алгоритм SHA-1 можно суммировать следующим образом:
SHA0  IV ; SHAq1   32(SHAq , ABCDE q ); SHA  SHAL1 ,
где IV - начальное значение буфера переменных A, B, C, D, E;
ABCDE q – результат обработки q-го блока сообщения;
L – число блоков в сообщении, включая поля добавления и длины;
 32
– сумма по модулю 2 32 , выполняемая отдельно для каждого слова
буфера;
SHA – значение дайджеста сообщения.
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
Хеширование паролей - метод, позволяющий пользователям
запоминать не 128 байт, т. е. 256 шестнадцатеричных цифр ключа, а
некоторое осмысленное выражение, слово или последовательность
символов, называющееся паролем. Действительно, при разработке
любого криптоалгоритма следует учитывать, что в половине случаев
конечным
пользователем
системы
является
человек,
а
не
автоматическая система. Это ставит вопрос о том, удобно и вообще
реально
ли
человеку
запомнить
128-битный
ключ
(32
шестнадцатиричные цифры). Предел запоминаемости лежит на границе
8–12 подобных символов, а следовательно, если мы будем заставлять
пользователя оперировать именно ключом, то мы практически вынудим
его к записи ключа на каком-либо листке бумаги или электронном
носителе, например в текстовом файле. Это, естественно, резко снижает
защищенность системы.
Для решения этой проблемы были разработаны методы,
преобразующие произносимую осмысленную строку произвольной длины
– пароль, в указанный ключ заранее заданной длины. В подавляющем
большинстве случаев для этой операции используются так называемые
хеш-функции (от англ. hashing – мелкая нарезка и перемешивание).
Хеш-функцией
называется
такое
математическое
или
алгоритмическое преобразование заданного блока данных, которое
обладает следующими свойствами:
1.
2.
3.
4.
хеш-функция имеет бесконечную область определения;
хеш-функция имеет конечную область значений;
она необратима;
изменение входного потока информации на 1 бит изменяет
около половины всех бит выходного потока, т. е. результата
хеш-функции.
Эти свойства позволяют подавать на вход хеш-функции пароли, т. е.
текстовые строки произвольной длины на любом национальном языке и,
ограничив область значений функции диапазоном 0...2 N  1 , где N – длина
ключа в битах, получать на выходе достаточно равномерно
распределенные по области значения блоки информации – ключи.
Нетрудно заметить, что требования, подобные 3 и 4 пунктам
требований к хеш-функции, выполняют блочные шифры. Это указывает
на один из возможных путей реализации стойких хеш-функций проведение блочных криптопреобразований над материалом строки-
МЕЖДУНАРОДНЫЙ БАНКОВСКИЙ ИНСТИТУТ
INTERNATIONAL BANKING INSTITUTE
пароля. Этот метод и используется в различных вариациях практически
во всех современных криптосистемах. Материал строки-пароля
многократно последовательно используется в качестве ключа для
шифрования некоторого заранее известного блока данных – на выходе
получается зашифрованный блок информации, однозначно зависящий
только от пароля и при этом имеющий достаточно хорошие
статистические характеристики. Такой блок или несколько таких блоков и
используются в качестве ключа для дальнейших криптопреобразований.
Характер
применения
блочного
шифра
для
хеширования
определяется
отношением
размера
блока
используемого
криптоалгоритма и разрядности требующегося хеш-результата.
Если указанные выше величины совпадают, то используется схема
одноцепочечного блочного шифрования:
1. первоначальное значение хеш-результата H 0 устанавливается
равным 0;
2. вся строка-пароль разбивается на блоки байт, равные по длине
ключу используемого для хеширования блочного шифра;
3. производятся преобразования по реккурентной формуле: H i  H i 1
XOR EnCrypt ( H j 1 , PSW j ) , где EnCrypt(X,Key) – используемый блочный
шифр (рис.1). Последнее значение H k используется в качестве
искомого результата.
Download