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

Инф. безопасность

.pdf
Скачиваний:
40
Добавлен:
18.03.2015
Размер:
2.7 Mб
Скачать

II(c, d, a, b, M2, 15, Ox2ad7d2bb) 11(6, c, rf, a, M9, 21, Oxeb86d391)

Эти константы, ti, выбирались следующим образом:

На i-ом этапе ti является целой частью 232*abs(sin(i)), где i измеряется в радианах.

После всего этого а, b, с и d добавляются к А, В, С и D, соответственно, и алгоритм продолжается для следующего блока данных. Окончательным результатом служит объединение А, В, С

и D.

6.2.4MD2

MD2 - это другая 128-битовая однонаправленная хэшфункция, разработанная Роном Ривестом. Безопасность MD2 опирается на случайную перестановку байтов. Эта перестановка

фиксирована и зависит от разрядов π. S0, S1, S2 ,… , S255 и являются перестановкой. Чтобы выполнить хэширование

сообщения М:

(1)Дополните сообщение i байтами, значение i должно быть таким, чтобы длина полученного сообщения была кратна 16 байтам.

(2)Добавьте к сообщению 16 байтов контрольной суммы.

(3)Проинициализируйте 48-байтовый блок: X0, X1 ,X2 ,• • • , X47. Заполните первые 16 байтов X нулями, во вторые 16 байтов X скопируйте первые 16 байтов сообщения, а третьи 16 байтов X должны быть равны XOR первых и вторых 16 байтов X.

(4)Вот как выглядит функция сжатия :

t=0

For j = 0 to 17 For k = 0 to 47

t=Xt XOR St Xk=t

t = (t +j) mod 256

(5)Скопируйте во вторые 16 байтов Х вторые 16 байтов сообщения, а третьи 16 байтов X должны быть равны XOR первых и вторых 16 байтов X. Выполните этап (4). Повторяйте этапы (5) и (4) по очереди для каждых 16 байтов сообщения.

(6)Выходом являются первые 16 байтов X.

Хотя в MD2 пока не было найдено слабых мест, она

71

работает медленнее большинства других предлагаемых хэшфункций.

6.2.5Алгоритм безопасного хэширования (Secure Hash Algorithm, SHA)

NIST, вместе с NSA, для Стандарта цифровой подписи (Digital Signature Standard) разработал Алгоритм безопасного хэширования (Secure Hash Algorithm, SHA). (Сам стандарт называется Стандарт безопасного хэширования ( Secure Hash Standard, SHS), a SHA - это алгоритм, используемый в стандарте.)

В соответствии с Federal Register:

Описание SHA

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

Инициализируются пять 32-битовых переменных (в MD5 используется четыре переменных, но рассматриваемый алгоритм должен выдавать 160-битовое хэш-значение ):

А =0x67452301 В = Oxefcdab89 С = Ox98badcfe D = 0x10325476 E = 0xc3d2elfO

Затем начинается главный цикл алгоритма. Он обрабатывает сообщение 512-битовыми блоками и продолжается, пока не исчерпаются все блоки сообщения.

Сначала пять переменных копируются в другие переменные : А в а, В в b, С в с, D в d и Е в е.

Главный цикл состоит из четырех этапов по 20 операций в каждом (в MD5 четыре этапа по 16 операций в каждом). Каждая операция представляет собой нелинейную функцию над тремя из а ,b, с, d и е, а затем выполняет сдвиг и сложение аналогично MD5. В SHA используется следующий набор нелинейных функций :

ft(X,Y,Z) = (Х Y) ((¬X) Z) , для t=0 до 19

72

ft(X,Y,Z) = Х Y Z , для t=20 до 39

ft(X,Y,Z) = (Х Y) (Х Z) (Y Z) , для t=40 до 59 ft(X,Y,Z) = Х Y Z , для t=60 до 79

в алгоритме используются следующие четыре константы:

Кt = 0х5а827999, для t=0 до 19 Кt = 0x6ed9ebal , для t=20 до 39 Кt = 0xSflbbcdc, для t=40 до 59 Кt = 0xca62cld6, для t=60 до 79

(Если интересно, как получены эти числа, то :0х5а827999 =

21/2/4, Ox6ed9ebal = 31/2/4, OxSflbbcdc = 51/2/4, Oxca62cld6 = 101/2/4.)

Блок сообщения превращается из 16 32-битовых слов (М0 по М15) в 80 32-битовых слов (Wo no W79) с помощью следующего алгоритма :

Wt = Mt, для t = 0 по 15

Wt = Wt-3 Wt-8. Wt.14 Wt.16) <<< 1, для t = 16 no 79

Если t - это номер операции (от 1 до 80), Wt, представляет собой t-ый подблок расширенного сообщения, а <<< s - это циклический сдвиг влево на s битов, то главный цикл выглядит следующим образом :

FOR t = 0 to 79

TEMP = (а <<< 5) +ft(b,c,d) + e + Wt + Kt e = d

d=c

c = b<<<30 a = TEMP

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

73

Рисунок 22 — Одна операция SHA.

После всего этого а, b, с, d и е добавляются к А, В, С, D и Е, соответственно, и алгоритм продолжается для следующего блока данных. Окончательным результатом служит объединение А, В, C, D и Е.

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

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

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

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

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

74

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

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

Схемы, в которых длина хэш-значения равна длине блока

Вот общая схема:

H0 = IH, , где IH - случайное начальное значение

Hi = ЕА(В) С

где А, В и С могут быть либо Мi, Hi-1, (Мi Hi-1), либо константы (возможно равные 0). Но - это некоторое случайное

начальное число IH. Сообщение разбивается на части в соответствии с размером блока, Мi обрабатываемые отдельно. Кроме того, используется вариант MD-усиления, возможно та же процедура дополнения, что и в MD5 и SHA.

Рисунок 23 — Обобщенная хэш-функция, у которой длина хэш-значения равна длине блока

Три различные переменные могут принимать одно из четырех возможных значений, поэтому всего существует 64 варианта схем этого типа.

75

Рисунок 24 — Четыре безопасных хэш-функции, у которых длина хэш-значения равна длине блока

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

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

Эта хэш-функция появилась в России и определена в стандарте ГОСТ Р 34.11.94. В ней используется блочный алгоритм ГОСТ, хотя теоретически может использоваться любой блочный алгоритм с 64-битовым блоком и 256-битовым ключом. Функция выдает 256-битовое хэш-значение.

Функция сжатия, Hi = f(Mi, Hi-1) (оба операнда - 256-битовые величины) определяется следующим образом :

(1)При помощи линейного смешивания Mi, Hi-1 и некоторых констант генерируется четыре ключа шифрования ГОСТ.

(2)Каждый ключ используется для шифрования отличных

64 битов Hi-1 в режиме ЕСВ. Полученные 256 битов сохраняются во временной переменной S.

(3)Hi является сложной, хотя и линейной функцией Si, Мi, и

Hi-1.

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

76

переменные сцепления : Hn - это хэш-значение последнего блока, Z - это XOR всех блоков сообщения, a L - длина сообщения. С использованием этих переменных и дополненного последнего блока М', окончательное хэш-значение равно :

H= f(Z M',f(L,f(M', Hn)))

6.3Криптосистема Эль-Гамаля

Система Эль-Гамаля - это криптосистема с открытым ключом, основанная на проблеме логарифма. Система включает как алгоритм шифрования, так и алгоритм цифровой подписи.

Множество параметров системы включает простое число p и целое число g, степени которого по модулю р порождают большое число элементов Zp. У пользователя А есть секретный ключ а и открытый ключ у, где

у = ga (mod p). Предположим, что пользователь В желает послать сообщение т пользователю А. Сначала В выбирает случайное число k, меньшее p. Затем он вычисляет

y = g k (mod p)

и

y

2

= m (yk

(mod p)),

1

 

 

 

«исключающее ИЛИ». В

где обозначает

 

побитовое

посылает А пару (y1, y2).

После получения шифрованного текста пользователь А вычисляет

m = (y1a mod p) y2

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

m = y2 y2k mod p .

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

Зашифрование осуществляется следующим образом. Автор сообщения выбирает случайные k, s Zq. Далее он вычисляет gk

77

mod p, myk mod p,

с = h(gs, gk, myk) и z = s + ck mod q. Шифрованный текст представляет собой четверку (gk, myk, с, z).

Получив сообщение (h, f, c, z), приемная сторона вначале верифицирует его, проверяя выполнение равенства h(gzh-c, h, f) = с . В случае успешной верификации открытый текст получается

по формуле

т = f / hx mod p. Расшифрование корректно,

поскольку

h = gk, f = myk mod p, так что f / hx = mgkx g-kx

mod p = т.

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

Указанными авторами было предложено обобщение данной схемы на случай, когда пространство сообщений М представляет собой произвольную аддитивную группу, например М = Zqn. Используются две статистически независимые хэш-функции Н : G2xM —> Zq и HM : G —> М. В базовой схеме шифрования myk mod р заменяется на т + HM(yk) М. Верификация шифрованного текста (h, f, с, z) остается без изменений, а расшифрование будет проводиться по формуле f - Нм (h x).

6.4Криптосистема, основанная на проблеме ДиффиХеллмана

Данная система шифрования была представлена Мишелем Абдаллой, Михиром Беллэром и Филлипом Рогэвэем в рамках европейского проекта NESSIE (New European Schemes for Signatures, Integrity and Encryption), Эта система столь же эффективна, что и система Эль-Гамаля, но обладает дополнительными свойствами безопасности. Более того, стойкость системы может быть доказана в предположении о стойкости лежащих в ее основе криптографических примитивов.

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

Опишем криптографические примитивы, входящие в схему. Циклическая группа G= {g}. Мы будем использовать

78

мультипликативную запись групповой операции. Алгоритмы, реализующие эту операцию, будут работать с представлениями элементов группы в виде битовых строк фиксированной длины gLen N. Способ кодирования G—>{0, 1}gLen не фиксируется и может выбираться, например, из соображений эффективности.

Код аутентификации сообщения позволяет пользователям,

обладающим общим секретным ключом, выработать битовую

строку для аутентификации и проверки целостности данных. Пусть Msg= {0 1}* - пространство сообщений, mKеу={0, 1}mLen -

пространство ключей для вычисления MAC для некоторого mLenN, Tag= {0, 1}tLen - включающее множество всех возможных

значений MAC для некоторого tLen N. В этих обозначениях код аутентификации сообщений представляет собой пару алгоритмов

MAC = {MAC.gen, MAC.ver}. Алгоритм генерации MAC

определяется как отображение

MAC.gen(k, x): mKey x Msg —> Tag

и может быть вероятностным.

Алгоритм верификации MAC является отображением

MAC.ver(k, x, τ): mKey x Msg x Tag —> {0, 1} со свойством MAC.ver(k, x, MAC.gen(k,x)) = 1.

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

Симметричный шифр позволяет пользователям, обладающим общим секретным ключом, обеспечить секретность. Пусть Msg, как и ранее, пространство сообщений, еКеу = {0, 1}eLen - пространство ключей для некоторого eLen N, Ctext = {0, 1} -включающее множество всех возможных значений шифрованного текста и Coins = {0, 1}°° - множество строк бесконечной длины. В этих обозначениях шифр представляет собой пару алгоритмов SYM = {SYM.enc, SYM.dec}. Алгоритм зашифрования определяется как отображение

SYM.enc(k, х, r): еКеу х Msg x Coins —> Ctext

Алгоритм расшифрования является отображением

SYM.dec(k, y): еКеу х Ctext —> Msg {BAD},

где значение BAD выдается, если шифртекст у не является

79

результатом зашифрования никакого открытого текста

Асимметричный шифр. Пусть Msg, Ctext, Coins определены как и ранее, РК {0, 1}*, SK {О, 1}* - множества открытых и секретных ключей. Асимметричный шифр определяется как тройка алгоритмов ASYM = {ASYM.enc, ASYM.dec, ASYM.key}.

Алгоритм зашифрования является отображением

ASYM.enc(pk, х, r): РК х Msg x Coins -> Ctext

а расшифрования:

ASYM.enc(sk, y): SK x Ctext Msg {BAD}

Алгоритм выработки ключа в качестве аргумента берет строку

r Coins и выдает пару ключей (pk, sk) PKxSK. При этом должно выполняться следующее свойство:

(pk, sk): r' Coins: (pk, sk) = ASYM.key(r'), r Coinsx Msg ASYM.dec(sk , ASYM.enc(pk, x, r)) = x.

Функция хэширования является отображением следующего

вида:

Н: {0,1}2gLen{0, 1)mLen+eLen

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

Все ключевые пары в данном алгоритме выбираются так же, как и в криптосистеме Эль-Гамаля, т.е. пара (pk, sK) (gv, v) для некоторого случайного v. При отсылке сообщения выбирается некоторое случайное значение и и получателю отсылается gu, что обеспечивает неявный обмен ключами по семе Диффи-Хеллмана. Таким образом, зашифрованное сообщение состоит из одноразового открытого ключа, текста, зашифрованного симметричным шифром, и кода аутентификации сообщения, выработанного с помощью алгоритма MAC.gen.

80