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

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

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

Процесс расшифрования и аутентификации графически представлен на рисунке. Элементы принятого сообщения также

выделены двойной рамкой.

Рисунок — Процесс зашифрования. Двойной рамкой выделены элементы зашифрованного сообщения.

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

81

алгоритма вычисления кода аутентификации сообщения. Рисунок — Процесс расшифрования и аутентификации.

6.5 Криптосистемы Меркля-Хеллмана и Чора-Ривеста

Криптосистемы Меркля-Хеллмана и Хора-Ривеста основаны на использовании односторонней функции, известной под названием "задача укладки рюкзака.

Пусть имеется п объектов, так что можно составить п- компонентный вектор f, так что z'-й компонент f представляет собой место, занимаемое i-м объектом. Имеется рюкзак общим объемом К.

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

Важно отметить, что выбор f является критическим. Например, предположим, что f выбирается в виде супервозрастающей последовательности. В этой ситуации для любого i7=1

В этом случае при данных f и К вычислить х очень просто. Мы проверим, является ли К большим, чем последний элемент f, и если да, то мы делаем последний элемент х равным 1, вычитаем это значение из К и рекурсивно решаем меньшую проблему. Этот метод работает, поскольку когда К больше последнего элемента f, даже если мы выберем х=(1 1 1 ... 1 0), то произведение fx все равно будет слишком маленьким, благодаря тому, что последовательность супервозрастающая. Таким образом, мы должны выбирать 1 в последней позиции х.

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

Пользователь А получает свой открытый ключ следующим

82

образом:

1.Выбирает супервозрастающую последовательность f примерно из 100 элементов;

2.Выбирает случайное целое т, большее суммы

элементов

3.Выбирает другое случайное целое w, взаимно простое с

т.

4.Теперь вычисляется f' умножением каждого компонента f на w по модулю т;

Г = f w (mod m)

5.И наконец, проводится случайная перестановка Р элементов f' для получения открытого ключа f.

Теперь А раскрывает ключ f и держит в секрете f, т, w и Р. Когда пользователь В хочет послать А сообщение (битовый вектор) х, он вычисляет S = fx и посылает это вычисленное S. Если данная система является стойкой, тогда для внешнего наблюдателя С вычисление х по S и публичному ключу f будет эквивалентно решению задачи рюкзака в общем случае. Допустим, что предположение о стойкости верно. В этом случае, хотя С не может расшифровать сообщение, А может это сделать, применяя секретные значения, которые она использовала при

вычислении f.

Пользователь А может вычислить 5"=f х, так что она сможет решить задачу рюкзака в случае супервозрастающей последовательности. Вычисление 5" производится следующим образом.

z г

= w^^fj-Xj- mod»? =w~lSmodm i

Таким образом, А просто умножает S на мультипликативное обратное w по модулю т, а затем решает задачу рюкзака в случае супервозрастающей последовательности Г, и теперь она сможет прочитать сообщение.

При получении ключа мы начинаем с супервозрастающей последовательности и затем скрываем имеющуюся в ней структуру. Другими словами, построенная последовательность выглядит так, что в ней нет никакой структуры. Но система может быть сделана еще более стойкой (или, по крайней мере,

83

так будет казаться) путем повторения этого процесса скрытия структуры. Если мы выберем другие т и w, тогда мы сможем построить новый открытый ключ, который не может быть построен с использованием единственной пары (т, w). Мы можем повторять это снова и снова, и система выглядит все более

иболее стойкой с каждой итерацией.

В1982 г Эди Шамир открыл атаку на криптосистему, использующую одну итерацию. Это оказалось началом падения систем, основанных на задаче рюкзака.

Допустим, что перестановка не применяется, так что f ' = f. Тогда для любого i

f, = f ,w mod т

По определению модульной конгруэнтности должен существовать вектор k, такой что для любого i

где и - это мультипликативное обратное к w по модулю т (напомним, что мы выбирали т и w взаимно простыми, так что это обратное существует). После этого в результате деления получаем:

^__kL = _fL

тff ftm

Поскольку т очень велико, выражение справа будет очень маленьким, поэтому покомпонентное частное k и f близко к и/т. Подставляя вместо i 1 и вычитая из первоначального уравнения, получим:

Поскольку обе величины справа положительны и вычитаемое очень мало, мы можем записать:

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

f, < т • Тп Далее мы можем записать: I fi f 11 fi

После несложных преобразований получаем:

Оказывается, что поскольку f открыт, всего лишь несколько этих неравенств (три или четыре) однозначно определяют k. Эти

84

неравенства относятся к области целочисленного программирования, поэтому k можно быстро найти, например, с помощью алгоритма Ленстры. А если мы знаем k, то мы можем легко раскрыть систему.

Допустим, что мы выполним перестановку f до опубликования, т.е. Р не является идентичной. Поскольку нам нужны только первые 3 или 4 элемента k, мы можем просто перебрать все варианты, количество которых определяется третьей или четвертой степенью размерности k.

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

В1986 г. Бен-Цион Чор предложил криптосистему, на сегодняшний день единственную, не использующую модульное умножение для скрытия простой задачи укладки рюкзака Это также единственная система, основанная на задаче укладки рюкзака, которая не раскрыта.

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

1962 г.

Пусть GF(p) - поле целых чисел по модулю простого числа/», и GF(ph~) — расширение степени h основного поля. Также пусть 1 -вектор, все элементы которого равны 1 .

Сформальной точки зрения мы строим последовательность

85

длины р, такую что для любого z от 0 до/» - 1

и для каждых различных х, у, таких что х*1 = у*1 = h, x*a и у*а также должны быть различны. Мы можем представлять векторы х и у как битовые (т.е. содержащие только 0 и 1).

Далее построение проводится довольно просто. Во-первых, выберем t - алгебраический элемент степени h над GF(p\ т.е. минимальный многочлен с коэффициентами из GF(p), корнем которого является t, имеет степень h. Далее выберем g - мультипликативный генератор (примитивный элемент) поля GF(ph), т.е. для каждого элемента х из GF(ph) (кроме нуля) существует некоторое i, такое, что g в степени i будет равно х.

Теперь рассмотрим аддитивный сдвиг GF(p\ т.е. множество t + GF(p) = {t + i | 0 < i <p - 1 } с GF(ph)

Пусть каждый элемент вектора а будет логарифмом по основанию g соответствующего элемента из t+GF(p):

щ = logg(t+t)

Мы должны проверить, что а, определенная подобным образом, удовлетворяет заданным свойствам. Определенно, каждый элемент в а будет лежать в заданном диапазоне, поскольку g порождает GF(p,h). Теперь пусть у нас есть различные х и у, такие что х*1 = у*1 = /г, но х*а = у*а. Тогда, возводя g в степень

х*а и у*а, получим:

Р-\

I yfli

Поэтому мы также можем записать

Р-\

Р-\

и далее

z=0

z=0

Теперь заметим, что произведение в обеих частях неравенства представляет собой приведенный многочлен от t степени h. Иными словами, если бы мы вычислили оба этих произведения и заменили значение t формальным параметром, например, z, тогда старшим членом на каждой стороне был бы х в степени h с коэффициентом 1. Мы знаем, что если мы подставим значение t вместо z, то значения этих двух полиномов будут равны. Поэтому вычтем один из другого, старшие члены сократятся, и если мы подставим t, то получим 0. Мы получили

86

полином степени h-l, корнем которого является t. Но это противоречит тому, что мы выбрали t алгебраическим элементом степени h. Таким образом, доказательство закончено и построение корректно.

Хор разработал метод использования данного построения в качестве основы криптосистемы. Кратко он заключается в следующем. Мы выбираем р и h достаточно маленькими, чтобы мы могли вычислять дискретные логарифмы в GF(ph). Хор рекомендует р около 200, a h около 25. Затем мы выбираем t и g как указано выше. Для каждого из них будет много вариантов, и мы можем просто произвести случайный выбор (В действительности, будет так много пар <t,g>, что очень большое количество пользователей могут использовать одинаковые р и /г, и вероятность того, что два пользователя выберут одинаковые ключи, будет пренебрежимо мала.). Затем мы следуем конструкции Боуза-Чоула. Мы вычисляем логарифмы по основанию g от t+l для каждого I, это даст нам а. Наконец, мы выбираем случайную перестановку а, которая и будет нашим ключом. Мы публикуем результат перестановки а вместе ср и h. Величины t, g и использованная перестановка остаются в секрете.

Чтобы послать сообщение А, В просто берет свое сообщение и вычисляет S= x*a. В действительности, это не так уж и просто, поскольку сообщение должно быть длиной/» бит и должно быть х*1 = /г, но Хор представил довольно прямолинейный метод преобразования неограниченной битовой строки в несколько блоков, каждый из которых имеет требуемую форму. А получает S. Он возводит g в степень S и выражает результат в виде полинома от t степени h с коэффициентами из GF(p). Далее он вычисляет h корней этого полинома, затем применяет обратную подстановку и получает индексы элементов в х, содержащих единицы.

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

До настоящего времени не было опубликовано ни одного эффективного метода вскрытия этой системы при знании только

87

открытого ключа.

6.6 Обмен ключами по алгоритму Диффи-Хеллмана

Данный параграф посвящен еще одному интересному алгоритму, который достаточно трудно классифицировать. Он помогает обмениваться секретным ключом для симметричных криптосистем, но использует метод, очень похожий на асимметричный алгоритм RSA. Алгоритм назван по фамилиям его создателей Диффи (Diffie) и Хеллмана (Hellman). [8]

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

Предположим, что обоим абонентам известны некоторые два числа v и n. Они, впрочем, известны и всем остальным заинтересованным лицам. Например, они могут быть просто фиксированно «зашиты» в программное обеспечение. Для того, чтобы создать неизвестный более никому секретный ключ, оба абонента генерируют случайные или псевдослучайные простые числа : первый абонент – число x, второй абонент – число y. Затем первый абонент вычисляет значение (vx) mod n и пересылает его второму, а второй вычисляет (vy) mod n и передает первому. Злоумышленник получает оба этих значения, но модифицировать их (вмешаться в процесс передачи) не может. На втором этапе первый абонент на основе имеющегося у него x и полученного по сети (vy) mod n вычисляет значение (((vy) mod n)x)mod n, а второй абонент на основе имеющегося у него y и полученного по сети (vx) mod n вычисляет значение (((vx) mod n)y)mod n. На самом деле операция возведения в степень переносима через операцию взятия модуля по простому числу (то

есть коммутативна в конечном поле), то есть у обоих абонентов получилось одно и то же число : ((vx*y) mod n. Его они и могут

использовать в качестве секретного ключа, поскольку здесь

88

злоумышленник снова встретится с проблемой RSA при попытке выяснить по перехваченным (vx) mod n и (vy) mod n сами числа x и y – это очень и очень ресурсоемкая операция, если числа v,n,x,y выбраны достаточно большими.

Необходимо еще раз отметить, что алгоритм ДиффиХеллмана работает только на линиях связи, надежно защищенных от модификации. Если бы он был применим на любых открытых каналах, то давно снял бы проблему распространения ключей и, возможно, заменил собой всю асимметричную криптографию. Однако, в тех случаях, когда в канале возможна модификация данных, появляется очевидная возможность вклинивания в процесс генерации ключей «злоумышленника-посредника» по той же самой схеме, что и для асимметричной криптографии (рисунок 12).

Исходный текст

Исходный текст

Исходный текст

 

Подпись

Исходный текст ’

 

 

подпись

передача

проверка

Закрытый ключ А

 

Открытый ключ А

Рисунок 12 — Обмен ключами по Диффи-Хеллману

6.7 Цифровая сигнатура

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

Цифровая сигнатура - это строка символов, зависящая как от идентификатора отправителя, так и содержания сообщения. [1]

Пользователь А

сообщение

сигнатура

Цифровая сигнатура

Рисунок 13 —Получение цифровой сигнатуры

89

Никто при этом кроме пользователя А не может вычислить цифровую сигнатуру А для конкретного сообщения. Никто, даже сам пользователь не может изменить посланного сообщения так, чтобы сигнатура осталась неизменной. Хотя получатель должен иметь возможность проверить является ли цифровая сигнатура сообщения подлинной. Чтобы проверить цифровую сигнатуру, пользователь В должен представить посреднику С информацию, которую он сам использовал для верификации сигнатуры.

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

Рассмотрим типичную схему цифровой сигнатуры.

Пусть Е - функция симметричного шифрования и f - функция отображения некоторого множества сообщений на подмножество мощности р из последовательности {1, ..., n}.

Например р=3 и n=9. Если m - сообщение , то в качестве f можно взять функцию f(m) = {2, 5, 7}.

Для каждого сообщения пользователь А выбирает некоторое множество ключей K=[K1, ..., Kn} и параметров V={v1, ...,vn} для использования в качестве пометок сообщения, которое будет послано В. Множества V и V’={E(v1,K1) ..., E(vn,Kn)} посылаются пользователю В и заранее выбранному посреднику С.

Пусть m - сообщение и idm - объединение идентификационных номеров отправителя, получателя и номера сообщения. Если f({idm, m}), то цифровая сигнатура m есть множество K’=[Ki, ..., Kj}. Сообщение m, идентификационный номер idm и цифровая сигнатура К’ посылаются В.

Пользователь А

 

V, V'

 

Пользователь В

 

сообщение, K'

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

V, V'

 

Посредник С

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рисунок 14 — Вычисление цифровой сигнатуры Получатель В проверяет сигнатуру следующим образом. Он

вычисляет функцию f({idm, m}) и проверяет ее равенство К’. Затем он проверяет, что подмножество {vi, ...,vj} правильно зашифровано в виде подмножества {E(vi,Ki) ..., E(vj,Kj)}

90