Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Итог / Раздел VI. Криптографические методы защиты.doc
Скачиваний:
85
Добавлен:
23.03.2015
Размер:
373.25 Кб
Скачать
  1. Хэш функции

а) стандарт Хэш-функции SHS - Secure Hash Standard;

Хэш-функция h принимает в качестве аргумента сообщение М произвольной длины и возвращает хэш-значение h(М)=Н фиксированной длины. Следует отметить, что значение хэш-функции h(М) сложным образом зависит от документа М и не позволяет восстановить сам документ М.

Хэш-функция должна удовлетворять следующим условиям:

  • хэш-функция должна быть чувствительна к всевозможным изменениям в тексте М, таким как вставки, перестановки и т.п.;

  • хэш-функция должна обладать свойством необратимости, то есть задача подбора документа М', который обладал бы требуемым значением хэш-функции, должна быть вычислительно неразрешима;

  • вероятность того, что значения хэш-функций двух различных документов (вне зависимости от их длин) совпадут, должна быть ничтожно мала.

На примере рассмотрим алгоритм безопасного хэширования SНА (входит в стандарт SHS).

Алгоритм безопасного хэширования SНА (Secure Hash Algorithm) разработан НИСТ и АНБ США в рамках стандарта безопасного хэширования SHS (Secure Hash Standard) в 1992 г.

Для входного сообщения произвольной длины (максимум 264 − 1 бит) алгоритм генерирует 160-битное хэш-значение.

Исходное сообщение разбивается на блоки по 512 бит в каждом. Последний блок дополняется до длины, кратной 512 бит. Сообщение добавляется таким образом, чтобы его длина была кратна 448 по модулю 512 (длина ≡ 448 mod 512). Добавление осуществляется всегда, даже если сообщение уже имеет нужную длину. Добавление состоит из единицы, за которой следует необходимое количество нулей. В оставшиеся 64 бита записывается длина исходного сообщения в битах. Таким образом, число добавляемых битов находится в диапазоне от 1 до 512.

Инициализируются пять 32-битовых переменных.

A = a = 0x67452301 B = b = 0xEFCDAB89 C = c = 0x98BADCFE

D = d = 0x10325476 E = e = 0xС3D2E1F0

Основой алгоритма является итерация, состоящая из 80 циклических обработок, которые производятся для каждого 512-битного блока. Каждый из 80 циклов получает на входе текущий 512-битный обрабатываемый блок и 160-битное значение буфера ABCDE, и изменяет содержимое этого буфера. В каждом цикле используется дополнительная константа Кt и элементарная логическая функция Ft.

Функция

константа

№ цикла

Kt = 0x5A827999

0≤t≤19

Kt = 0x6ED9EBA1

20≤t≤39

Kt = 0x8F1BBCDC

40≤t≤59

Kt = 0xCA62C1D6

60≤t≤79

512-битный блок сообщения преобразуется из 16 32-битных слов Mi в 80 32-битовых слов Wj по следующему правилу:

т. е. в первых 16 циклах вход состоит из 32-битного слова данного блока. Для оставшихся 64 циклов вход состоит из XOR нескольких слов из блока сообщения.

Итерация алгоритма для t от 0 до 79 temp = (a<<5) + Ft(b,c,d) + e + Wt + Kt e = d d = c c = b<<30 b = a a = temp

После этого a, b, c, d, e прибавляются к A, B, C , D , E соответственно. Начинается следующая итерация. Итоговым значением будет объединение пяти 32-битовых слов в одно 160-битное хеш-значение.

б) стойкость хэш-функций, коллизии хэш-функций

  • Стойкость к коллизиям первого рода: для заданного сообщения должно быть практически невозможно подобрать другое сообщение, имеющее такой же хэш. Это свойство также называется необратимостью хеш-функции.

  • Стойкость к коллизиям второго рода: должно быть практически невозможно подобрать пару сообщений , имеющих одинаковый хэш.

Согласно парадоксу о днях рождения, нахождение коллизии для хеш-функции с длиной значений n бит требует в среднем перебора около 2n / 2 операций. Поэтому n-битная хеш-функция считается криптостойкой, если вычислительная сложность нахождения коллизий для нее близка к 2n / 2.

Простейшим (хотя и не всегда приемлемым) способом усложнения поиска коллизий является увеличение разрядности хэша, например, путем параллельного использования двух или более различных хэш-функций.

Для криптографических хэш-функций также важно, чтобы при малейшем изменении аргумента значение функции сильно изменялось. В частности, значение хэша не должно давать утечки информации даже об отдельных битах аргумента. Это требование является залогом криптостойкости алгоритмов шифрования, хэширующих пользовательский пароль для получения ключа.

Также ключевым свойством хэш-функций является их необратимость:

Под необратимостью понимается вычислительная невозможность нахождения исходного блока данных X по известному значению хеш-функции от этого блока H(X).