Difference between revisions of "Cryptographic hash functions"

From CryptoWiki
Jump to: navigation, search
(Требования)
Line 16: Line 16:
 
[[Атака «дней рождения»]] позволяет находить коллизии для хэш-функции с длиной значений <font style="font-size:130%">''n''</font> битов в среднем за примерно <font style="font-size:130%">''2<sup> n/2</sup>''</font> вычислений хэш-функции. Поэтому <font style="font-size:130%">''n''</font> – битная хэш-функция считается криптостойкой, если [[вычислительная сложность]] нахождения коллизий для неё близка к <font style="font-size:130%">''2<sup> n/2</sup>''</font>.
 
[[Атака «дней рождения»]] позволяет находить коллизии для хэш-функции с длиной значений <font style="font-size:130%">''n''</font> битов в среднем за примерно <font style="font-size:130%">''2<sup> n/2</sup>''</font> вычислений хэш-функции. Поэтому <font style="font-size:130%">''n''</font> – битная хэш-функция считается криптостойкой, если [[вычислительная сложность]] нахождения коллизий для неё близка к <font style="font-size:130%">''2<sup> n/2</sup>''</font>.
  
Для криптографических хэш-функций также важно, чтобы при малейшем изменении аргумента значение функции сильно изменялось ([[лавинный эффект]]). В частности, значение хэша не должно давать утечки информации даже об отдельных [[бит|битах]] аргумента. Это требование является залогом криптостойкости алгоритмов хэширования пользовательских паролей для получения [[Ключи в криптографии|ключей]].
+
Для криптографических хэш-функций также важно, чтобы при малейшем изменении аргумента значение функции сильно изменялось ([[лавинный эффект]]). В частности, значение хэша не должно давать утечки информации даже об отдельных [[бит|битах]] аргумента. Это требование является залогом криптостойкоси алгоритмов хэширования пользовательских паролей для получения [[Ключи в криптографии|ключей]].
  
 
== Принципы построения ==
 
== Принципы построения ==

Revision as of 22:58, 22 December 2013

A cryptographic hash function is a hash function that takes an arbitrary block of data and returns a fixed-size bit string, the cryptographic hash value, such that any (accidental or intentional) change to the data will (with very high probability) change the hash value. The data to be encoded are often called the message, and the hash value is sometimes called the message digest or simply digest.

Contents

About hash funtions

Hash function for a long time used in computer science are functions, mathematical or otherwise, which receive the input variable-length string (called a prototype ) and convert it into a fixed string, usually smaller length (called a hash value ). As a simple hash function can be considered a function that takes the inverse image and returns a byte representing the XOR of all the input bytes . The meaning of the hash function is to obtain a characteristic trait preimage values ​​on which analyzes various prototypes of the inverse problem. Since usually the hash function is the ratio of " many to one " , it is impossible to say with all ficiently that the two strings are the same , but they can be used to give a reasonable estimate of the accuracy . One-way hash function - a hash function that works only in one direction. Easy to calculate the hash value on a prototype , but it is difficult to create a prototype , the hash value is equal to a given value . Mentioned earlier hash function , generally speaking, are not unidirectional : setting a specific byte , it is not difficult to create a string of bytes , XOR which gives a predetermined value. With one-way hash function this is not possible . A hash function is open, the secrets of its calculation does not exist. Safety one-way hash function is in its pointedness . At the exit, there is no visible depending on the input . Changing single bit leads to a change in prototype (average) half bits of the hash value is known as an avalanche effect . Computationally infeasible to find the inverse image corresponding to the specified hash value.

Требования

Для того, чтобы хэш-функция H считалась криптографически стойкой, она должна удовлетворять трем основным требованиям, на которых основано большинство применений хэш-функций в криптографии:

  • Необратимость или стойкость к восстановлению прообраза: для заданного значения хэш-функции m должно быть вычислительно невозможно найти блок данных X, для которого H(X)=m.
  • Стойкость к коллизиям первого рода или восстановлению вторых прообразов: для заданного сообщения M должно быть вычислительно невозможно подобрать другое сообщение N, для которого H(N)=H(M).
  • Стойкость к коллизиям второго рода: должно быть вычислительно невозможно подобрать пару сообщений (M, M'), имеющих одинаковый хэш.

Данные требования не являются независимыми:

  • Обратимая функция нестойка к коллизиям первого и второго рода.
  • Функция, нестойкая к коллизиям первого рода, нестойка к коллизиям второго рода; обратное неверно.

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

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

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

Принципы построения

Итеративная последовательная схема.jpg

Итеративная последовательная схема

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

Входной поток разбивается на блоки по (k-n) бит. Алгоритм использует временную переменную размером в n бит, в качестве начального значения которой берется некое произвольное число. Каждый следующий блок данных объединяется с выходным значением сжимающей функции на предыдущей итерации. Значением хэш-функции являются выходные n бит последней итерации. Каждый бит выходного значения хэш-функции зависит от всего входного потока данных и начального значения. Таким образом достигается лавинный эффект.

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

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

Сжимающая функция на основе симметричного блочного алгоритма

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

A, B и C могут принимать значения Mj , Hj-1 , MjHj-1 или быть константой, где Mj — j – ый блок входного потока,  — сложение по модулю 2, Hj — результат j – ой итерации.

Обычно при построении хэш-функции используют более сложную систему. Обобщенная схема симметричного блочного алгоритма шифрования изображена на рис.2

Таким образом, мы получаем 64 варианта построения сжимающей функции. Большинство из них являются либо тривиальными, либо небезопасными. Ниже изображены четыре наиболее безопасные схемы при всех видах атак.

Схемы безопасного хэширования.jpg

Основным недостатком хэш-функций, спроектированных на основе блочных алгоритмов, является низкая скорость работы. Необходимую криптостойкость можно обеспечить и за меньшее количество операций над входными данными. Существуют более быстрые алгоритмы хэширования, спроектированных самостоятельно, с нуля, исходя из требований криптостойкости (наиболее распространенные из них — MD5, SHA-1, SHA-2 и ГОСТ Р 34.11-94).

Применения

Электронная цифровая подпись

Электронная цифровая подпись (ЭЦП) - по сути шифрование сообщения алгоритмом с открытым ключом. Текст, зашифрованный секретным ключом, объединяется с исходным сообщением. Тогда проверка подписи — расшифрование открытым ключом, если получившийся текст аналогичен исходному тексту — подпись верна.

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

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

Проверка пароля

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

Примером в данном случае могут служить ОС GNU/Linux и Microsoft Windows. В них хранятся лишь хэш-значения парольных фраз из учётных записей пользователей.

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

Пусть некий клиент, с именем name, производит аутентификацию по парольной фразе, pass, на некоем сервере. На сервере хранится значение хэш-функции H(pass,R2), где R2 — псевдослучайное, заранее выбранное, число. Клиент посылает запрос (name, R1), где R1 — псевдослучайное, каждый раз новое, число. В ответ сервер посылает значение R2. Клиент вычисляет значение хэш-функции H(R1,H(pass,R2)) и посылает его на сервер. Сервер также вычисляет значение H(R1,H(pass,R2)) и сверяет его с полученным. Если значения совпадают — аутентификация верна.

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

Случайный оракул

Напомним свойство перемешивания, которое присуще функции хэширования: при любом аргументе хэширование неотличимо с вычислительной точки зрения от строки битов, равномерно распределенных в области значений функции. Если заменить последнее выражение фразой "принадлежит генеральной совокупности равномерно распределенных величин", мы получим весьма мощную гипотетическую функцию, называемую случайный оракул (randome oracle). Он обладает тремя свойствами: детерминированность, эффективность, равномерность распределения результирующих значений. Однако,все известные вычислительные модели в той или иной степени не соответствуют модели случайного оракула. Равномерность и детерминированность величин, вычисляемых случайным оракулом, означает, что энтропия его результатов выше, чем энтропия чисел, поступающих на вход. Поскольку свойства перемешивания, которым обладает хэш-функция является лишь предположением вычислительного характера, реальная хэш-функция должна обеспечивать лишь вычислительную неразличимость, то есть результаты должны иметь некое распределение вероятностей в области значений, которое невозможно определить за полиномиальное время. Итак, реальные функции хэширования лишь имитируют поведение случайного оракула, хоть и с высокой точностью.

Атака на основе парадокса дней рождений

Предположим, что функция хэширования h действительно является случайным оракулом. В атаке по методу квадратного корня (атака на основе парадокса дней раждения) предполагается, что для обнаружения коллизий с ненулевой вероятностью достаточно выполнить 2 в степени |h|/2 случайных вычислений значения функции хэширования. Для организации атаки на основе парадокса дней рождений атакующий должен сгенерировать пары "сообщение-хэшированное значение", пока не обнаружаться два сообщения m и m`, удовлетворяющие условиям m не равно m`, h(m)=h(m`). Такая пара сообщений называется коллизией(collision) функции хэширования h. Например, для функции хэшироания SHA-1 выполняется условие |h|=160, а значит его стойкость на основе парадокса дней рождения оценивается величиной 280.

Сравнительная характеристика наиболее известных функций

Глоссарий

Литература

Составители


Комаров А.И. / Митцель А.С.

Назад к оглавлению

Komarov A.,

Mitsel A.

Back