Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
9_Романова.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
815.1 Кб
Скачать

Вопрос 8Однонаправленные хэш-функции. Криптографические хэш-функции

hash function - применяются в криптографии в алгоритмах шифрования, а также для формирования ЭЦП

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

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

Хэш-код создается функцией Н:

H (O) = h

Где O является сообщением произвольной длины и h является хэш-кодом фиксированной длины, меньшей или равной длине О.

Таким образом, хэш-код сложным образом зависит от сообщения O и является его сжатым представлением, но не позволяет восстановить исходное сообщение.

Понятие односторонней функции было введено в теоретическом исследовании о защите входа в вычислительные системы. Функция f(x) называется односторонней (one-way function), если для всех x из ее области определения легко вычислить y=f(x), но нахождение по заданному y такого x, для которого f--1(y)=x, вычислительно неосуществимо, то есть требуется настолько огромный объем вычислений, что за них просто и не стоит браться.

Однако существование односторонних функций не доказано. В качестве приближения была предложена Гиллом Дж. целочисленная показательная функция

f(x)=ax mod n,

где основание a и показатель степени x принадлежат интервалу (1,n-1), а умножение ведется по модулю n. Функция вычисляется достаточно эффективно по следующей схеме. Если представление числа x в двоичной форме имеет вид

x02k-1 + x12k-2 + ...+ xk-121 + xk20,

то

y = f(x) = ax mod n = ((...(axk-1)2*axk-2)2*...*ax1)2*ax0 mod n

Операция, обратная к этой, известна как операция вычисления дискретного логарифма: по заданным y, a и n найти такое целое x, что aх  mod n  =  y. До настоящего времени не найдено достаточно эффективных алгоритмов решения этой задачи.

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

Одним из простейших примеров хэш-функции является поразрядный XOR каждого блока:

Hi = bi1 ⊕ bi2 ⊕ . . . ⊕ bik

Где

Hi - i-ый бит хэш-кода, 1 ≤ i ≤ n. k - число n-битовых блоков входа. bij - i-ый бит в j-ом блоке. ⊕ - операция XOR.

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

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

  • Установить n-битовый хэш-код в ноль.

  • Для каждого n-битового блока данных выполнить следующие операции:

    • сдвинуть циклически текущий хэш-код влево на один бит;

    • выполнить операцию XOR для очередного блока и хэш-кода.

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

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

  1. Хэш-функция Н должна применяться к блоку данных любой длины.

  2. Хэш-функция Н создает выход фиксированной длины.

  3. Н (O) относительно легко (за полиномиальное время) вычисляется для любого значения O.

  4. Для любого данного значения хэш-кода h вычислительно невозможно найти O такое, что Н (O) = h – свойство необратимости.

  5. Для любого данного х вычислительно невозможно найти y ≠ x, что H (y) = H (x) – защита от подделки.

  6. Вычислительно невозможно найти произвольную пару (х, y) такую, что H (y) = H (x) – стойкость к коллизиям.

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

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

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

При атаке на h-функцию основное внимание уделяется размеру выходных данных. Одной из универсальных является атака, в основе которой лежит парадокс задачи о днях рождения.

Так называемый "парадокс дня рождения" состоит в следующем. Предположим, количество выходных значений хэш-функции Н равно n. Каким должно быть число k, чтобы для конкретного значения X и значений Y1, …, Yk c вероятностью 0,5 хотя бы для одного Yi выполнялось равенство H(X)=H(Y)?

Если хэш-код имеет длину m бит, т.е. принимает 2m значений, то k = 2m

Каким должно быть число k, чтобы для случайной пары (X,Y) c вероятностью 0,5 выполнялось равенство H(X)=H(Y)?

k = 2m = 2m/2

Парадокс дня рождения является стандартной статистической задачей (основанной на том факте, что в группе из 23 и более человек вероятность совпадения дня рождения хотя бы у двоих из них превышает 50%, а в группе из 57 человек достигает уже 99%):

сколько человек должно собраться в одном помещении, чтобы с вероятностью 0,5 хотя бы у кого-нибудь из них был общий с вами день рождения? Ответ – 183. А сколько должно собраться людей, чтобы с вероятностью 0,5 хотя бы у двоих из них (случайной пары) был бы общий день рождения? Ответ удивителен – всего 23. 23 человека образуют 253 различные пары  ( (23-1)*(23) )/ 2.

Найти кого-нибудь с тем же днем рождения – это аналогия с попыткой атаки на требование 5, в этом случае пространство значений составит 2m. Найти случайную пару с одинаковым h – это атака на требование 6  2m/2.

Вернемся к рассмотрению свойств хэш-функций. Предположим, что используется 64-битовый хэш-код. Можно считать, что это вполне достаточная и, следовательно, безопасная длина для хэш-кода. Например, если зашифрованный хэш-код h передается с соответствующим незашифрованным сообщением O, то противнику необходимо будет найти O' такое, что

Н (O') = Н (O)

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

Тем не менее, возможны различного рода атаки, основанные на "парадоксе дня рождения". Возможна следующая стратегия:

  1. Противник создает 2m/2 вариантов сообщения, каждое из которых имеет некоторый определенный смысл. Противник подготавливает такое же количество сообщений, каждое из которых является поддельным и предназначено для замены настоящего сообщения.

  2. Два набора сообщений сравниваются в поисках пары сообщений, имеющих одинаковый хэш-код. Вероятность успеха в соответствии с "парадоксом дня рождения" больше, чем 0,5. Если соответствующая пара не найдена, то создаются дополнительные исходные и поддельные сообщения до тех пор, пока не будет найдена пара.

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

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

Очевидно, что длина хэш-кода должна быть достаточно большой. Длина, равная 64 битам, в настоящее время не считается безопасной. Предпочтительнее, чтобы длина составляла порядка 128 битНапример, количество арифметических операций, необходимых для того, чтобы найти другой блок данных, имеющий такой же хэш, как и исходный, для хэш-функции MD5, составляет приблизительно 264; для MD5 предполагаемое количество операций, необходимых для вычисления исходного сообщения по известному результату хэширования, равно 2128

Практически все современные функции хэширования являются итеративными. Итеративные хэш-функции разбивают входное значение на последовательность блоков фиксированного размера b1, b2……, bk, используя некоторое правило дополнения для заполнения последнего блока. Затем блоки сообщения обрабатываются по порядкус помощью функции сжатия h’ и промежуточных состояний фиксированного размера. Этот процесс начинается с фиксированного значения H0 и определяется как Hi=h’(Hi-1, bi). Последнее значение Hk и будет результатом функции хэширования.

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

Примеры хэш-функций:

MD5 (128 битовое значение), MD4 (Ron Rivest), SHA (Secure Hash Algorithm)

ГОСТ Р34.11-94/256 , ГОСТ Р34.10-94

Хэш-функция MD5

MD5 (MD2, MD4 - Message Digest)– автор Ron Rivest – 128-битовая функция, исходное сообщение разбивается на блоки 512 бит. Последний блок дополняется до нужной длины (см. шаг1), после чего к нему дописывается длина исходного сообщения в битах. В алгоритме используется 128-битное промежуточное состояние, которое разбивается на 4 32-разрядных слова. Функция сжатия h состоит из 4 раундов, в каждом из которых выполняется перемешивание блока сообщения и промежуточного состояния. Перемешивание представляет собой комбинацию операций XOR, AND, OR и операций циклического сдвига битов над 32-битными словами. В каждом раунде целый блок сообщения перемешивается с промежуточным состоянием, поэтому каждое слово сообщения фактически используется 4 раза. После 4 раундов результат и входное промежуточное состояние складываются и получается выходное значение функции h. Этот алгоритм особенно эффективен в системах с 32-разрядной архитектурой.

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

Хэш-функция ГОСТ 3411

Алгоритм ГОСТ 3411 является отечественным стандартом для хэш-функций. Его структура довольно сильно отличается от структуры алгоритмов SHA-1,2 или MD5, в основе которых лежит алгоритм MD4.

Длина хэш-кода, создаваемого алгоритмом ГОСТ 3411, равна 256 битам. Алгоритм разбивает сообщение на блоки, длина которых также равна 256 битам. Кроме того, параметром алгоритма является стартовый вектор хэширования Н - произвольное фиксированное значение длиной также 256 бит.

ПРИМЕНЕНИЕ ХЭШ-функций

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

Еще одно важное приложение - верификация правильности пароля доступа.    Пароли обычно не хранят в открытом виде. Вместо этого в базе (например, SAM для Windows или etc/shadow для Linux) хранятся хэши паролей. Тогда система аутентификации, чтобы проверить подлинность    пользователя, хэширует представленный им пароль и сравнивает результат    со значением, хранящимся в базе дайджестов паролей.

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

  Хеш-функции стали одним из важнейших элементов    современной криптографии. Они обеспечивают безопасность в повсеместно    применяемом протоколе защищенных Internet-соединений SSL. Они помогают организовывать эффективное управление ключами в защищенной электронной почте и в программах шифрования телефонии, начиная от самых известных,  PGP или Skype. Что касается сетевой безопасности, то хэш-функции используются и в виртуальных частных сетях, и в защите системы доменных имен DNS, и для    подтверждения того, что автоматические обновления программ являются    подлинными. Внутри операционной системы хэш-функции, так или иначе,    задействованы практически во всех структурах, обеспечивающих безопасность. Иными словами, каждый раз, когда в компьютере или сети    происходит что-то, подразумевающее защиту информации, рано или поздно в действие непременно вступает хэш-функция.

Новый стандарт для хэш-функции

В документе NIST (National Institute of Standards and Technology - Национальный институт стандартов и технологий - правительственная организация США, отвечающая за установление стандартов, в частности стандартов шифрования и электронной подписи для данных, не составляющих государственную тайну), объявляющем о начале конкурса на новый стандарт   хеш-функции, приведено предварительное расписание мероприятий,    составляющих процесс разработки и выбора.

В самом кратком виде  намеченная программа выглядит так. Год первый (2007). Опубликовать для ознакомления и комментариев общественности базовые требования к кандидатам, правила оформления    заявок и общие критерии отбора. В третьем квартале завершить этот    этап, сформулировать окончательные требования и критерии для    кандидатов, к концу года объявить о начале приема заявок. Год второй (2008). Третий квартал - окончание приема заявок-кандидатов    на новую хеш-функцию. В четвертом квартале отобрать кандидатов,    отвечающих базовым требованиям, и провести Первую конференцию для    объявления функций, участвующих в первом круге конкурса. Представлять кандидатов будут их авторы. Одновременно объявляется прием    комментариев (результатов криптоанализа) по всем кандидатам.    Год третий (2009). К четвертому кварталу закончить этап комментариев    по кандидатам. (В зависимости от числа отобранных кандидатов, NIST оставляет за собой право либо продлить этот этап, либо добавить число    этапов для сокращения общего количества кандидатов перед отбором финалистов. Для этого могут понадобиться дополнительные семинары.) В    конце года устроить Вторую конференцию для обсуждения результатов    анализа, где разработчикам будет предоставлено право внести улучшения    в свои алгоритмы.    Год четвертый (2010). В первом квартале выбрать и объявить финалистов,    победивших в первом круге. Подготовить отчет с объяснением выбора. Во    втором квартале дать старт очередному кругу, перед началом которого    финалистам позволено внести любые улучшения в схему.    Год пятый (2011). Во втором квартале закончить этап комментариев    общественности, в третьем квартале устроить Финальную конференцию, где    будут подведены общие итоги анализа и обсуждений. В четвертом квартале    выбрать победителя и до конца года объявить хеш-функцию (или,    возможно, хеш-функции) для нового стандарта.

Hа этом конкурс будет закончен, а в течение 2012 года NIST подготовит новую версию федерального стандарта США на хеш-функцию,    который, скорее всего, как и AES, фактически станет общемировым.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]