Добавил:
Да поможет вам Котельников Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Объединенный

.pdf
Скачиваний:
19
Добавлен:
23.06.2024
Размер:
5.17 Mб
Скачать

12

структурами, в которых может быть поставлена задача вычисления дискретного логарифма. В 1985 году Коблиц и Миллер независимо друг от друга предложили использовать для построения криптосистем алгебраические структуры, определенные на множестве точек на эллиптических кривых. Мы рассмотрим случай определения эллиптических кривых над простыми полями Галуа произвольной характеристики, а с заданием эллиптических кривых над полями Галуа характеристики 2 можно ознакомиться в пособии Лося.

Пусть р > 3 - простое число. Пусть а, b из GF(p) такие, что 4а2 + 27b2 не равно 0.

Эллиптической кривой Е=Ea,b над полем GF(p) называется множество решений (х, у)

уравнения

у2 = х3 + ах + b (*)

над полем GF(p) вместе с дополнительной точкой , называемой точкой в бесконечности или нулевой точкой О (поскольку эта точка выполняет роль нейтрального элемента в группе точек).

Представление эллиптической кривой в виде уравнения (*) носит название

эллиптической кривой в форме Вейерштрасса.

Обозначим количество точек на эллиптической кривой Е через #Е E . Теорема

Хассе гласит, что

Е p 1 t ,

где t 2p , #Е называется порядком кривой E, a t - следом кривой Е.

Если |Е|=р+1, то кривая Е называется суперсингулярной.

Зададим бинарную операцию на Е (в аддитивной записи) следующими правилами:

;

x, y E: x, y x, y ;

x, y E: x, y x, y ;

x1, y1 , x2, y2 E,x1 x2 : x1, y1 x2, y2 x3, y3 , где

x3 2 x1 x2 ,

y3

x1

x3

y1

,

y2 y1

;

 

 

 

 

 

 

 

x2 x1

при этом x1, y1 E, y1 0: x1, y1 x1, y1 x4, y4 , где

x4 2 2x1 ,

 

x1

 

y1

3x2

a

y4

x4

,

1

 

;

 

 

 

 

 

 

 

 

2y1

Множество точек эллиптической кривой Е с заданной таким образом операцией образует абелеву группу.

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

Для а = 0, b=7 эллиптическая кривая выглядит так:

13

Для сложения точек, + = мы проводим через точки и прямую, которая, по свойствам эллиптических кривых, пересекает кривую в некоторой третьей точке `. Затем мы находим точку на кривой, симметричную точке ` относительно оси . Именно эта точка и будет считаться суммой и .

Для того, чтобы сложить точку саму с собой, определяется операция удвоения точки,+ = . При удвоении проводим прямую, касательную к данной эллиптической кривой в точке , которая, согласно свойствам кривой, должна пересекать ее еще в одной точке`. Точка , симметричная ` относительно оси , и будет считаться точкой удвоения .

Пользуясь операцией сложения точек на кривой, можно естественным образом определить операцию умножения точки Р из E нa произвольное целое число n:

nР = Р + Р+ ... +Р,

14

где операция сложения выполняется п раз.

Теперь построим одностороннюю функцию, на основе которой можно будет создать криптографическую систему.

Пусть Е — эллиптическая кривая, Р — точка на этой кривой. Выберем целое число n меньше, чем |Е| - порядок E. Тогда в качестве прямой функции выберем произведение nР. Для его вычисления по оптимальному алгоритму, изложенному в пособии Лося, потребуется не более 2log2n операций сложения. Обратную задачу сформулируем следующим образом: по заданным эллиптической кривой Е, точке Р из Е и произведению nР найти n. В настоящее время все известные алгоритмы решения этой задачи требуют экспоненциального времени.

Теперь мы можем описать криптографический протокол, аналогичный известному протоколу Диффи-Хеллмана. Для установления защищенной связи два пользователя А и

Всовместно выбирают эллиптическую кривую Е и точку Р на ней. Затем каждый из пользователей выбирает свое секретное целое число, соответственно а и b. Пользователь А вычисляет произведение аР, а пользователь В - bР. Далее они обмениваются вычисленными значениями. При этом параметры самой кривой`, координаты точки на ней и значения произведений являются открытыми и могут передаваться по незащищенным каналам связи. Затем пользователь А умножает полученное значение на а, а пользователь

Вумножает полученное им значение на b. В силу свойств операции умножения на число abР = baР. Таким образом, оба пользователя получат общее секретное значение (координаты точки аbР), которое они могут использовать для получения ключа шифрования. Отметим, что злоумышленнику для восстановления ключа потребуется решить сложную с вычислительной точки зрения задачу определения а и b по известным Е, Р, aР и bР.

Заметим, что эллиптическая кривая E Ea,b

Ea,b GF p , может быть задана не

только через a и b, а еще и с помощью своего инварианта

j E j Ea,b 1728

 

 

4a3

 

,

 

 

4a

3

2

 

 

 

 

 

 

27b

 

 

 

 

где a 3ck

2

, b 2ck

3

 

 

 

j Ea,b

 

 

 

, c

 

 

, а k - это произвольный отличный от 0 элемент

 

 

1728 j Ea,b

поля GF p .

Отметим, что при разных k получаются разные по записи Ea,b , но группы точек будут одинаковы, т.е. получаются эквивалентные эллиптические кривые

1

КРИПТОГРАФИЧЕСКИЕ ФУНКЦИИ ХЕШИРОВАНИЯ

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

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

Взависимости от области применения криптографические функции хеширования делят на два класса:

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

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

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

Бесключевые функции хеширования

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

Определение. Пусть для некоторого натурального n задано отображение

H:V* Vn .

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

1.Отображение Н должно быть однонаправленным, то есть для любого h Vn

задача определения какого-либо значения a V* такого, что H a h , должна являться трудоемкой.

Задача определения значения a V*, удовлетворяющего равенству H a h для

заданного значения h Vn называется задачей вычисления прообраза функции

хеширования.

2. Задача построения коллизии, то есть определения двух произвольных значений a1,a2 V* таких, что H a1 H a2 , a1 a2 , должна являться трудоемкой. Пара величин a1,a2 V* , для которых выполнено это равенство, называется коллизией для

2

бесключевой функции хеширования Н.

3. Задача построения второго прообраза, то есть задача нахождения, для заданного элемента a1 V* и, соответственно, значения h H a1 , h Vn , какого-либо

элемента a2 V* , удовлетворяющего равенству

H a1 H a2 , должна являться

трудоемкой.

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

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

Методы построения функций хеширования

Общий способ построения функций хеширования был предложен Ральфом Мерклем (Ralf Merkel) и несколько позже модифицирован Айвоном Дамгардом (Ivan Damgard). Основная идея данного способа заключается в использовании итеративной процедуры, которая обрабатывает входное сообщение за несколько итераций.

Опишем алгоритм Меркля-Дамгарда. На первом этапе зафиксируем натуральное число b 1 и разобьем исходное сообщение a V* на блоки длины b:

a a1 ||a2 ||...||ar 1 ||ar ,

где ai Vb , i 1,r 1 при r 1 и длина последнего блока удовлетворяет неравенству

len ar b.

Для реализации основного этапа алгоритма Меркля-Дамгарда необходимо зафиксировать отображение

f :Vn Vb Vn

которое принято называть одношаговой сжимающей функцией, а также начальное значение h0 Vn . Далее вычислим последовательность

hi f hi 1,ai ,hi Vn ,i 1,r 1

и определим

 

H a g h

,a

,

 

где

g:V V

V

некоторое

завершающее

преобразование.

 

r 1

r

 

 

 

n

len ar

n

 

 

 

 

 

 

 

 

 

 

g заключается

 

Как правило,

завершающее

преобразование

в следующем.

Определим блок ar* равенством

 

 

 

 

 

 

 

 

ar ,if

len ar b

 

 

 

 

 

 

 

 

 

 

 

||01||

0...0 ,if

len a

 

b

 

 

 

 

 

ar* a

 

 

 

 

 

 

 

 

r

 

 

 

 

 

r

 

 

 

 

 

 

 

 

 

b len ar 2

 

 

 

 

 

 

 

 

 

Тогда отображение g задается равенством g hr 1,ar f hr 1,ar* hr

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

3

приведем примеры отображения g, имеющего более сложную структуру.

Таким образом, бесключевая функция хеширования H задается набором своих параметров:

1.п — длина кода целостности,

2.b — длина блока разбиения входных данных,

3.f — одношаговая сжимающая функция,

4.g — завершающее преобразование последнего блока,

5.h0 — начальное значение последовательности h0,h1,...hr, последний элемент

которой является значением функции хеширования, и полностью определяется равенством

H a H a1 ||a2 ||...||ar 1 ||ar g f ...f f h0,a1 ,a2 ,....,ar 1 ,ar (*)

Далее будем считать, что для каждой исследуемой функции перечисленные нами параметры n,b,f,g,h0 зафиксированны.

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

Утверждение. Если функция хеширования Н построена с помощью алгоритма Меркля-Дамгарда, то сложность построения коллизии для одношаговой функции f сравнима со сложностью построения коллизии для функции Н.

Как следует из доказательства этого утверждения, приведенного в пособии Лося, нарушения свойства однонаправленности функции fh(a) и существование эффективного алгоритма построения коллизий для одношаговой функции f приводят к возможности построения коллизии для функции хеширования Н. Таким образом, становится важным изучение свойств одношаговой сжимающей функции f.

Наиболее часто используемым способом построения одношаговой функции хеширования f является использование блочных алгоритмов шифрования. Приведем несколько примеров.

1. Микаэлем Рабиным был предложен следующий способ построения функции f. Пусть Е(k,а) — произвольный алгоритм блочного шифрования, в котором ключ

шифрования k Vm, а блок открытого текста a Vn. Тогда выберем длину блока b = т

равной длине ключа k, некоторое значение h0 Vn и определим

hi f hi 1,ai E ai ,hi 1 ,i 1,r

где блоки a1,a2,...,ar 1,ar хешируемого сообщения воспринимаются как последовательность ключей, используемая для последовательного шифрования фиксированного начального значения h0 . Длина кода целостности в алгоритме Рабина

составляет п бит и совпадает с длиной блока алгоритма блочного шифрования.

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

hi f hi 1,ai E ai ,hi 1 hi 1,i 1,r .

3. В алгоритме Матиаса-Мейера-Осеаса дополнительно используется расширяющее отображение e:Vn Vm отображающее двоичные векторы длины, совпадающей с длиной

блока п алготритма шифрования, в двоичные векторы длины m, совпадающей с длиной ключа алгоритма шифрования.

Последовательность блоков a1,a2,...,ar 1,ar рассматривается как по-

следовательность блоков для шифрования, то есть b = п и h0 Vn . Тогда hi f hi 1,ai E e hi 1 ,ai ai ,i 1,r .

4

4. В алгоритме Миягучи-Принеля, расширяющем предыдущий пример, используется отображение

hi f hi 1,ai E e hi 1 ,ai ai hi 1,i 1,r .

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

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

f :V2n Vb V2n

использующее любую из определенных выше в примерах одношаговых функций f :Vn Vb Vn следующим образом.

Пусть 1, 2, 3, 4 - произвольная, отличная от единичной, перестановка из

S4. Мы можем представить любой вектор h V2n в виде h h1 ||h2 v1 ||v2 ||v3 ||v4,h1,h2 Vn,v1,v2,v3,v4 Vn/2 .

Обозначим h v

||v

2

||v

3

||v

4

тогда отображение f

может быть определено

1

 

 

 

 

 

следующим образом:

 

 

 

 

 

 

 

 

f h,a f h1,a , f h2,a .

 

 

 

Теперь отображение

f

может

быть использовано в

качестве одношаговой

сжимающей функции с размерностью выхода равной 2n.

Далее мы приведем несколько примеров конкретных функций хеширования, построенных с использованием алгоритма МеркляДамгарда.

SHA-1

Алгоритм безопасного хеширования SHA (Secure Hash Algorithm) (или SHA-1) опубликован в качестве стандарта США в 1995 г. При вводе сообщения М алгоритм вырабатывает 160-битовое выходное сообщение, называемое сверткой (Message Digest), которая и используется при выработке ЭЦП.

Рассмотрим работу алгоритма подробнее.

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

Далее инициализируются пять 32-битовых переменных следующими шестнадцатеричными константами:

A = 0x67452301, B = 0xEFCDAB89, C = 0x98BADCFE,

D= 0x10325476,

E= 0xC3D2E1F0.

Далее эти пять переменных копируются в новые переменные а, b, c, d и e соответственно.

Определим операцию Ft и константу Kt для t-го такта работы:

 

5

 

0x5A827999,t

 

 

 

 

 

0,19

 

 

 

 

 

 

 

 

0x6ED9EBA1,t 20,39

Kt

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0x8F1BBCDC,t 40,59

 

 

 

 

 

 

 

 

0xCA62C1D6,t 60,79

 

 

 

 

 

 

 

X Y X

Z ,t 0,19

 

 

 

 

 

 

 

 

 

 

 

 

X Y Z,t 20,39,t 60,79

Ft X,Y,Z

X Y X Z Y Z ,t 40,59

где -- операция "xor".

Главный цикл итеративно обрабатывает каждый 512-битный блок. Итерация состоит из четырех этапов по двадцать операций в каждом. Блок сообщения преобразуется из 16 32-битовых слов Mi в 80 32-битовых слов Wi по следующему правилу:

 

 

Mt ,t 0,15

Wt

 

 

 

 

 

 

 

 

 

Wt 3 Wt 8 Wt 14 Wt 16 1,t 16,79

где

 

-- это циклический сдвиг влево на бит.

Для t от 0 до 79

temp a 5 Ft b,c,d e Wt Kt

e = d;

d = c;

c b 30;

b = a;

a = temp.

На рис. главный цикл представлен графически

После окончания главного цикла значения а, b, с, d и е складываются с содержимым А, В, С, D и Е соответственно и осуществляется переход к обработке следующего 512-битового блока расширенного сообщения. Выходное значение хешфункции является конкатенацией значений А, В, С, D и Е.

SHA-256

6

SHA-2 (англ. Secure Hash Algorithm Version 2 - безопасный алгоритм хеширования,

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

Хеш-функции SHA-2 разработаны Агентством национальной безопасности США и опубликованы Национальным институтом стандартов и технологий в федеральном стандарте обработки информации FIPS PUB 180-2 в августе 2002 года. В июле 2006 года появился стандарт RFC 4634 "Безопасные хеш-алгоритмы США (SHA и HMAC-SHA)", описывающий SHA-1 и семейство SHA-2. Агентство национальной безопасности от лица государства выпустило патент на SHA-2 под лицензией Royalty-free.

Хеш-функции семейства SHA-2 построены на основе структуры Меркла - Дамгарда,

Описание SHA-256 можно разбить на две части --- описание функции сжатия и алгоритма обработки сообщения. Функция сжатия представляет собой по сути алгоритм блочного шифрования с размером блока 256 бит промежуточного значения функции хеширования с использованием очередного текстового блока в качестве ключа.

Помимо обычных обозначений, при описании функции мы будем использовать следующие:

shr --- логический сдвиг слова вправо на позиций (т.е. сдвиг, при

котором уходящий бит уходит, не влияя на оставшееся биты, а на место появившегося бита записывается бит 0)

---- циклический сдвиг слова вправо на позиций.

Размер слова равен 32 битам. Сложение производится по модулю 232. Начальный

вектор хеширования

h0 H 0

представляет собой набор

из 8 32разрядных

слов,

получаемых взятием

дробной

части

квадратных корней

первых 8

простых

чисел:

H 0 H10 ,H20 ,...,H80 0x6A09E667,

0xBB67AE85, 0x3C6EF372,

0xA54FF53A,

0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19}. Это шестнадцатеричная запись В SHA-256 используются шесть логических функций, аргументы и значения

которых --- 32-битовые слова

Ch X ;Y;Z X Y X Z ;

Ma X;Y;Z X Y X Z Y Z ;

0 X X 2 X 13 X 12 ;

1 X X 6 X 11 X 25 ;

0 X X 7 X 18 X shr3 ;

1 X X 17 X 19 X shr10 .

Далее вычисление происходит по следующей схеме.

Хешируемое сообщение a вначале дополняется битовой строкой до a* так, что его длина становится кратной b 512 битам. Способ дополнения ar до ar* следующий:

добавляется 1, затем столько нулей, чтобы длина стала на 64 меньше кратной 512 и затем добавляется 64-битовое представление длины исходного сообщения.

Далее сообщение a* разбивается на блоки по 512 бит a1,a2 ,...,ar 1,ar* ..

Основной цикл выглядит следующим образом:

Для t от 1 до r, где r - количество блоков в дополненном сообщении

Инициализировать регистры A, B, C, D, E, F, G, H (t - 1)-м промежуточным значением хеш-функции: A H1t 1 ,B H2t 1 ,C H3t 1 ,D H4t 1 ,E H5t 1 ,

F H6t 1 ,G H7t 1 ,H H8t 1 ;

7

Применить функцию сжатия SHA-256 к регистрам A , B , C , D , E , F , G, H . Для этого для всех j от 0 до 63

1.Вычислить Ch E;F;G ,Ma A;B;C , 0 A , 1 E ,Wj ;

2.T1 h 1 E Ch E;F;G Kj Wj ;

3.T2 0 A Ma A;B;C ;

4.H G ,G F ,F E ,E D T1 ,D C ,C B ,B A,A T1 T2 ;

вычислить t-е промежуточное значение H t :

H1t A H1t 1 ,H2t B H2t 1 ,...,H8t H H8t 1 ,

Вектор hr H r H1r ,H2r ,...,H8r и будет искомым значением хеш-функции

сообщения a.

На следующем рисунке одна итерация алгоритма SHA-256 представлена графически

Блоки расширенного сообщения W0 , ... , W63

вычисляются из блока

at a(t) a0t ,a2t ,...,a15t

следующим образом:

 

 

 

 

 

 

 

 

 

t

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

, j 0,15

 

 

 

 

 

Wj

 

 

 

 

 

 

 

aj

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

W

 

 

W

 

0 W

 

W

 

, j 16,63

 

 

1

 

 

 

 

 

 

 

 

 

 

j 2

 

 

j 7

 

 

j 15

 

j 16

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Слова-константы K0 , ..., K63 берутся как первые 32 бита дробных частей кубических корней первых 64 простых чисел, и в 16-ричном виде представлены здесь: 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2.

Функция «Стрибог» (ГОСТ 34.11-2018)

В течение 2010-2011 годов был разработан новый алгоритм бесключевого хеширования, получивший название «Стрибог» в честь языческого божества восточных славян, бога стремительного ветра, разносящего и распределяющего блага между людьми. В 2012 году данный алгоритм был принят в качестве нового стандарта Российской