
- •Модулярная арифметика
- •Электронная подпись и хэш функция Однонаправленные хэш-функции
- •Основы построения хэш-функций
- •Однонаправленные хэш-функции на основе симметричных блочных алгоритмов
- •Гост р 34.11-2012. Информационная технология. Криптографическая защита информации. Функция хэширования
- •Гост р 34.10-2012
- •Область применения
- •История
- •Описание
- •Общие положения
- •Назначение и применение эп
- •История возникновения
- •Алгоритмы
- •Требования к электроннойой подписи
- •1. Проблема аутентификации данных и электронная цифровая подпись
- •Использование хэш-функций
- •Симметричная схема
- •Асимметричная схема
- •Виды асимметричных алгоритмов
- •Перечень алгоритмов эп
- •Цифровые подписи на основе шифрсистем с открытыми ключами
- •Цифровая подпись Фиата — Шамира
- •Подписи eiGamal
- •Подпись документа с помощью криптографии с открытыми ключами
- •Метки времени
- •Подпись документа с помощью криптографии с открытыми ключами и однонаправленных хэш-функций
- •Федеральный закон Российской Федерации от 6 апреля 2011 г. N 63-фз
- •6. Владелец квалифицированного сертификата обязан:
Электронная подпись и хэш функция Однонаправленные хэш-функции
Хэш-функция (англ. hash - мелко измельчать и перемешивать) предназначена для сжатия подписываемого документа до нескольких десятков или сотен бит.
Хэш-функция h(·) принимает в качестве аргумента сообщение (документ) М произвольной длины и возвращает хэш-значение h(М)=Н фиксированной длины.
Обычно хэшированная информация является сжатым двоичным представлением основного сообщения произвольной длины.
Следует отметить, что значение хэш-функции h(М) сложным образом зависит от документа М и не позволяет восстановить сам документ М.
Хэш-функция должна удовлетворять ряду условий:
хэш-функция должна быть чувствительна к всевозможным изменениям в тексте М, таким как вставки, выбросы, перестановки и т.п.;
хэш-функция должна обладать свойством необратимости, то есть задача подбора документа М', который обладал бы требуемым значением хэш-функции, должна быть вычислительно неразрешима;
вероятность того, что значения хэш-функций двух различных документов (вне зависимости от их длин) совпадут, должна быть ничтожно мала.
Большинство хэш-функций строится на основе однонаправленной функции f(·), которая образует выходное значение длиной n при задании двух входных значений длиной n.
Этими входами являются блок исходного текста М, и хэш-значение Нi-1 предыдущего блока текста (рис.1).
Рис.1.
Построение
однонаправленной хэш-функции Нi
= f(Мi,
Нi-1)
.
Хэш-значение, вычисляемое при вводе последнего блока текста, становится хэш-значением всего сообщения М.
В результате однонаправленная хэш-функция всегда формирует выход фиксированной длины n (независимо от длины входного текста).
Основы построения хэш-функций
Общепринятым принципом построения хэш-функций является итеративная последовательная схема.
По этой методике ядром алгоритма является преобразование k бит в n бит. Величина n - разрядность результата хэш-функции, а k - произвольное число, большее n.
Базовое преобразование должно обладать всеми свойствами хэш-функции:
необратимостью и невозможностью инвариантного изменения входных данных.
Хэширование производится с помощью промежуточной вспомогательной переменной разрядностью в n бит. В качестве ее начального значения выбирается произвольное известное всем сторонам значение, например, 0. Алгоритм хэширования
1. Входные данные разбиваются на блоки по (k-n) бит.
2. На каждой итерации хэширования со значением промежуточной величины, полученной на предыдущей итерации, объединяется очередная (k-n)-битная порция входных данных.
3.Над получившимся в п.2 k-битным блоком производится базовое преобразование.
В результате весь входной текст оказывается "перемешанным" с начальным значением вспомогательной величины (условно принятое значение – 0).
Из-за характера преобразования базовую функцию часто называют сжимающей.
4. Значение вспомогательной величины после финальной итерации поступает на выход хэш-функции (рис.2).
Иногда над получившимся значением производят дополнительные преобразования. Но в том случае, если сжимающая функция спроектирована с достаточной степенью стойкости, эти преобразования излишни.
Рис.2. Итеративная хэш-функция
При проектировании хэш-функции по итеративной схеме возникают два взаимосвязанных вопроса:
1) как поступать с данными, не кратными числу (k-n),
2) и как добавлять в хэш-сумму длину документа, если это требуется.
Есть два варианта решения этих вопросов.
В первом варианте в начало документа перед хэшированием добавляется поле фиксированной длины (например, 32 бита), в котором в двоичном виде записывается исходная длина текста. Затем объединенный блок данных дополняется нулями до ближайшего кратного (k-n) бит размера.
Во втором варианте документ дополняется справа одним битом "1", а затем до кратного (k-n) бит размера битами "0". В этом варианте необходимость в поле длины отпадает - никакие два разных документа после выравнивания по границе порций не станут одинаковыми.
Кроме более популярных однопроходных алгоритмов хэширования существуют и многопроходные алгоритмы.
В случае многопроходных алгоритмов входной блок данных на этапе расширения неоднократно повторяется, а уже затем дополняется до ближайшей границы порции.