Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 26 - КРИПТОГРАФИЧЕСКИЕ И СТЕГАНОГРАФИЧЕС....doc
Скачиваний:
93
Добавлен:
23.12.2018
Размер:
802.82 Кб
Скачать

2.2. Криптосистемы с открытым ключом

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

1976 год открыл современный этап в криптографии. Он связан с именами молодых американских математиков Вайтфилда Диффи и Мартина Гелмана, а также Ральфа Меркля, которые выдвинули идею открытого ключа1. Структура модели криптосистемы с открытым ключом приведена на рис. 2.6.

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

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

Криптосистемы с открытым ключом еще называют асимметричными, а классические - симметричными.

Понятие криптосистем с открытым ключом включает следующие объекты:

  • Алфавит А, в котором записывается сообщение (открытый текст), и алфавит В, в котором записывается криптограмма.

  • Пространство ключей К (множество слов в некотором алфавите).

  • Алгоритм генерирования ключей - полиномиальный вероятностный алгоритм, выдающий случайную пару (К,К)К: К - открытый ключ, используемый в шифровании, а К - секретный ключ, используемый для дешифрования.

  • Полиномиальный детерминированный алгоритм шифрования Е, который получает на входе сообщение М и открытый ключ К, а выдает криптограмму С=ЕК(М).

  • П олиномиальный детерминированный алгоритм дешифрования D, получающий на входе криптотекст С и секретный ключ К, и выдающий открытый текст М: М=DК(С).

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

  1. если пара ключей (К,К) порождена алгоритмом генерирования ключей, то из С=ЕК(М) вытекает М=DК(С) для любого открытого текста М;

  2. нет (или, по крайней мере, неизвестно) ни одного эффективного алгоритма, который по известным С=ЕК(М) и К мог бы найти М.

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

Центральным понятием «новой криптографии» является понятие односторонней функции.

Односторонняя функция F: XY – это функция, обладающая двумя свойствами:

  1. существует полиномиальный алгоритм вычисления значений y = F(x);

  2. не существует полиномиального алгоритма обратного вычисления значения x = F-1(y).

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

Существование полиномиального алгоритма вычисления односторонней функции означает следующее. Пусть шифруемое (дешифруемое) сообщение включает n букв. Если время на шифрование (дешифрование) этого сообщения удовлетворяет неравенству t(n)  cnc для некоторой константы с>0, то говорят, что алгоритм решает задачу шифрования (дешифрования) за полиномиальное время. Такие алгоритмы относятся к классу эффективных, так как реализуют решаемые задачи за реальное время.

Алгоритм, время реализации которого для некоторой константы с>0, называется экспоненциальным. Такой алгоритм является неэффективным, так как он не может быть реализован за разумное время. Примером такого алгоритма является полный перебор возможных ключей в задаче криптоанализа («лобовая атака»).

Еще одним новым понятием является понятие функции с «лазейкой» (иногда еще говорят «функции с секретом» или «функции с ловушкой»).

Функция с «лазейкой» FК: XY – это функция, зависящая от некоторого параметра К и обладающая свойствами:

  1. при любом К существует полиномиальный алгоритм вычисления значений y = FК(x);

  2. при неизвестном К не существует полиномиального алгоритма обратного вычисления значения x = FК-1(y);

  3. при известном К существует полиномиальный алгоритм обратного вычисления значения x = FК-1(y).

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

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

1) функция умножения: MULT(x, y) = xy, определенная на парах натуральных чисел x и y с одинаковым количеством значащих цифр;

2) RSA функция: RSA(x, e, m) = xe mod m, e, m, определенная для произведения m = pq двух разных простых чисел и такого е, что НОД(е,(m)) = 1, xZm.

3) функция Рабина (квадратичная функция): SQUARE(x,m) = x2 mod m, m, определенная для произведения m = pq двух разных простых чисел и xZm.

4) экспоненциальная функция: EXP(x, g, p) = gx mod p, g, p, определенная для произвольного простого р, первичного корня g по модулю р и xZp*.

В чем же заключаются преимущества новой криптографической схемы над классической? Рассмотрим коммуникационную сеть, которой пользуются n абонентов. Каждый из них хочет установить конфиденциальную связь с каждым. Если использовать классическую криптосистему, то потребуется n(n1)/2 ключей, которые должны быть переданы по такому же количеству закрытых каналов связи. В случае применения криптосистемы с открытым ключом каждый из абонентов самостоятельно генерирует свою пару ключей (Ki,Ki), i = 1, 2, ... n, причем только n ключей (Ki) поступают в общее пользование и при этом из них не делают секрета.

Применение функций с «лазейкой» в криптографии позволяет:

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

  2. включить в задачу криптоанализа («взлома» шифра) трудную математическую задачу и тем самым повысить обоснованность стойкости шифра;

  3. решать новые криптографические задачи, отличные от шифрования (цифровая подпись, распределение ключей и др.).

Рассмотрим некоторые алгоритмы криптосистем с открытым ключом, предложенные в последние годы. Так как идеи, заложенные в них, основываются на знании некоторых математических понятий, то последние вынесены в приложение.

    1. Система RSA. Одной из наиболее популярных криптосистем с открытым ключом является система RSA, предложенная в 1977 г. Рональдом Райвеста, Ади Шамиром и Леонардом Адлеманом (название системы состоит из первых букв фамилий ее авторов)2.

  1. Генерирование ключей:

  • выбираются два достаточно больших простых числа p и q, и находится их произведение n=pq;

  • находится функция Эйлера (n)=(p1)(q1)=npq+1;

  • случайным образом выбирается число е, не превышающее (n) и являющееся взаимно простым с ним;

  • с помощью алгоритма Эвклида для е находится число d, обратное к нему и такое, что d<(n) и ed  1 (mod (n));

  • как результат полагают:

открытый ключ: e, n;

секретный ключ: d.

  1. Шифрование осуществляется блоками. Для этого исходное сообщение кодируется в цифровом коде (обычно двоичном) и разбивается на блоки таким образом, чтобы каждый блок обозначал целое число, не превышающее n. Например, если блок записан в двоичном коде длины m, то должно выполняться неравенство 2m<n.

Блок М шифруется путем возведения его в степень е:

C = Ee,n(M) = Me mod n.

В результате получается блок криптотекста С той же длины, что и блок открытого текста М.

  1. Дешифрование осуществляется также поблочно возведением криптотекста С в степень d (секретный ключ):

М = Dd(C) = Cd mod n.

  1. Корректность. Возможность дешифрования криптотекста Dd(Ee,n(M)) = М вытекает из следующего доказанного утверждения: если n = pq является произведением двух простых числе и ed  1 (mod (n)), то для всех xZn выполняется:

xedx (mod n).

  1. Эффективность. Алгоритм генерирования ключей использует процедуру нахождения простых чисел и расширенный алгоритм Эвклида для вычисления НОД(е,(n)) и d = e-1 mod (n), которые являются полиномиальными, т.е. эффективными. В алгоритмах шифрования и дешифрования возведение в степень осуществляется с помощью бинарного метода, который также является эффективным.

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

Задано: e, n, y (перехваченный криптотекст), где n = pq и НОД(е,(n))=1.

Найти: х (открытый текст) такое, что хеy (mod n).

Таким образом, задача вскрытия RSA является задачей получения из заданного целого числа y корня е-ой степени по модулю n=pq. На сегодняшний день для этой задачи неизвестно ни одного эффективного алгоритма.

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

Задано: e, n (открытый ключ), где n=pq и НОД(е,(n))=1.

Найти: d (секретный ключ) такой, что хеdx (mod n) для всех х.

Эта задача сводится к вычислению значения функции Эйлера (n), которая, в свою очередь, эквивалентна задаче нахождения сомножителей p и q числа n (так называемая задача факторизации). На сегодняшний день решить подобную задачу – безнадежное дело для n порядка 10200. Поэтому при генерировании ключей p и q рекомендуется выбирать приблизительно с сотней десятичных цифр каждое.

  1. Пример построения криптосистемы RSA:

  • Выберем p=3 и q=11.

  • Вычислим n=pq=311=33.

  • Находим (n)=(33)=(p1)(q1)=20.

  • Случайным образом выберем е, взаимно простое с 20, например е=7. Используя расширенный алгоритм Эвклида, легко проверить, что НОД(7,20)=1.

  • Вычислим число d, удовлетворяющее условию 7d  1 (mod 20). Таким числом является d=3.

  • Публикуем открытый ключ (е,n)=(7,33), а расшифровку поступающих сообщений будем осуществлять секретным ключом d=3.

  • Представим шифруемое сообщение как последовательность целых чисел с помощью соответствия: A=1, B=2, ..., Z=26. Такая криптосистема в состоянии зашифровать буквы латинского алфавита, рассматриваемые как блоки.

  • Пусть передается сообщение САВ, которое кодируется в виде (3,1,2). Абонент, передающий это сообщение, шифрует его открытым ключом:

RSA(C) = RSA(3) = 37 = 2187 = 9 (mod 33);

RSA(A) = RSA(1) = 17 = 1 (mod 33);

RSA(B) = RSA(2) = 27 = 128 = 29 (mod 33).

Таким образом, криптотекст представляет собой (9,1,29).

  • Попытаемся расшифровать его, используя секретный ключ d=3:

93 = 729 = 3 (mod 33);

13 = 1 (mod 33);

293 = 24389 = 2 (mod 33).

Таким образом, получен открытый текст (3,1,2).

Этот пример носит чисто иллюстративный характер, поэтому в нем достаточно легко найти секретный ключ путем перебора. На практике это осуществить невозможно, так как рекомендуются следующие длины шифруемых блоков: 512–768 бит – для частных лиц; 1024 бит – для коммерческой информации; 2048 бит – для секретной информации.

    1. Система Рабина. Сообщение об этой криптосистеме появилось в 1979 г.3

  1. Генерирование ключей:

  • выбираются два достаточно больших простых числа p и q, и находится их произведение n=pq;

  • полагают:

открытый ключ: n;

секретный ключ: p, q.

  1. Шифрование осуществляется блоками подобно системе RSA. Блок М шифруется путем возведения его в квадрат:

C = En(M) = M2 mod n.

В результате получается блок криптотекста С той же длины, что и блок открытого текста М.

  1. Дешифрование осуществляется поблочно извлечением квадратного корня из криптотекста С. При условии НОД(С,n)=1 таких корней существует ровно четыре. При известных сомножителях p и q (а это и есть секретный ключ!) существует эффективный алгоритм вычисления:

М = Dp,q(C) = C1/2 mod n,

основанный на Китайской теореме об остатках.

После нахождения всех четырех корней из них выбирается тот, который является числовым эквивалентом осмысленного текста.

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

  2. Надежность. Задача вскрытия системы Рабина является ничем иным, как задачей получения квадратного корня по модулю n=pq. При неизвестных сомножителях p и q для этой задачи не найдено ни одного эффективного алгоритма решения.

    1. Вероятностная криптография. Шафи Гольдвассер и Сильвио Микели предложили вероятностную модификацию криптосистемы с открытым ключом: их идея заключается в том, чтобы сделать алгоритм шифрования Е вероятностным4.

Вероятностный алгоритм шифрования ставит в соответствие сообщению М не один криптотекст С, а некоторое семейство криптотекстов СМ, причем каждый криптотекст ССМ этого семейства выбирается с определенной вероятностью, т.е. случайно. Чтобы обеспечить возможность дешифрования, для любой пары разных сообщений М1 и М2 соответствующие им множества криптотекстов СМ1 и СМ2 не должны пересекаться. Такую криптосистему считают стойкой, если для любой пары сообщений М1 и М2 одинаковой длины l, случайные величины Е(М1) и Е(М2) невозможно отличить друг от друга никаким вероятностным алгоритмом с вероятностью, большей чем 1/l. Другими словами, лишь с незначительной вероятностью по двум криптотекстам можно определить, соответствуют они одному и тому же сообщению или разным. Такой уровень стойкости в принципе недостижим для детерминированных систем, в которых разным криптотекстам С1 и С2 всегда соответствуют разные открытые тексты М1 и М2.

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

В качестве примера рассмотрим реализацию вероятностной криптосистемы на основе RSA функции.

  1. Генерирование ключей осуществляется аналогично системе RSA:

  • открытый ключ: e, n, где n=pq, НОД(е,(n))=1;

  • секретный ключ: d такое, что ed  1 (mod (n)).

  1. Шифрование. Двоичное сообщение M = m1m2...ml, где mi{0,1} преобразуется в криптотекст вида C = c1c2...cl, где ciZn. Для i = 1, 2, ..., l элемент ci генерируется с помощью следующей вероятностной процедуры:

  • если mi=0, то в Zn выбирают случайное четное число xi; если mi=1, то в Zn выбирают случайное нечетное число xi;

  • вычисляют ci = xie mod n.

  1. Дешифрование. По криптотексту C = c1c2...cl открытый текст M = m1m2...ml определяется по следующему правилу: для i = 1, 2, ..., l принимается mi = 0, если сid mod n четное, и mi = 1, если сid mod n нечетное.

    1. Система ЭльГамаля. Эта вероятностная криптосистема была предложена в 1984 г.5

  1. Генерирование ключей. Выбирается большое простое число р, а также число g, 1<g<p1, имеющее в мультипликативной группе Zp* большой порядок. В идеальном случае g является первичным корнем по модулю р.

Каждый абонент выбирает себе случайное число в промежутке от 1 до p1, и вычисляет h = g mod p.

  • Открытый ключ: р, g, h.

  • Секретный ключ: .

  1. Шифрование осуществляется блоками. Каждый блок открытого текста М преобразуется в криптотекст С следующим образом:

  • выбирается случайное число r такое, что 1rp1;

  • вычисляется С = (с1,с2), где с1 = gr mod p и с2 = Mhr mod p.

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

  1. Дешифрование. Имея секретный ключ и криптотекст С=(с1,с2), вычисляют:

D(C) = с2(с1)-1 mod p.

  1. Корректность. Проверка равенства D(C) = М выполняется непосредственно путем подстановки формул шифрования. Идея криптосистемы достаточно прозрачна: сообщение М маскируется в виде с2, а вместе с ней посылается подсказка с1, которая позволяет получить М из с2.

  2. Эффективность. Возведение в степень выполняется с помощью эффективного бинарного метода.

  3. Надежность. Сформулируем задачу раскрытия системы ЭльГамаля:

Задано: p, g, h, c1, c2, где 1<g<p1, h = g mod p, c1 = gr mod p, c2 = Mhr mod p для некоторых , r, MZp*.

Вычислить: М.

Для вскрытия открытого текста М необходимо определить секретный ключ , который можно найти дискретным логарифмированием выражения h = g mod p. Но эффективных алгоритмов решения этой задачи до сих пор не найдено.

  1. Пример использования системы ЭльГамаля:

  • Выберем p=23, g=5, =6.

  • Вычислим h = 56 mod 23 = 8.

  • Открытый ключ (23,5,8), закрытый ключ 6.

  • Допустим, что шифруется числовая информация М=7.

  • Пусть выбрано r=10.

  • Вычислим c1 = 510 mod 23 = 9 и c2 = 7810 mod 23 = 21. Таким образом, криптотекст имеет вид С = (9,21).

  • Осуществим дешифрование: D(9,21) = 21(96) -1 mod 23 = 7.

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

На первых порах, когда появились криптосистемы с открытым ключом, была выдвинута идея о закате классических криптосистем. Но оказалось, что «хоронить» симметричные системы рановато. Дело в том, что они работают на несколько порядков быстрее, чем асимметричные системы. Фактор скорости шифрования/дешифрования становится определяющим при передаче больших объемов информации. В связи с этим обстоятельством возникла идея объединить достоинства обоих криптосистем: секретный ключ передается по открытому каналу с помощью криптосистемы с открытым ключом, а основная масса передаваемых сообщений шифруется классическими методами.

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

Протокол – это последовательность установленных правил, в соответствии с которой осуществляется обмен сообщениями между участниками протокола для достижения определенной цели

Рассмотрим один из возможных вариантов обмена секретным ключом между абонентами по открытому каналу, предложенный Диффи и Хеллманом:

  1. Абонент А выбирает большое простое число р и некоторый примитивный элемент g по модулю р, которые пересылает абоненту В по открытому каналу.

  2. Затем абонент А выбирает целое случайное число в границах от 1 до р1, а абонент В выбирает целое случайное число в тех же границах.

  3. Абонент А вычисляет значение g mod p и посылает его абоненту В. В свою очередь, абонент В вычисляет значение g mod p и посылает его абоненту А.

  4. Принятое сообщение абонент А возводит в степень по модулю р, а абонент В возводит принятое сообщение в степень по тому же модулю. Так как каждый из абонентов вычисляет одно и то же число (g) mod p = (g) mod p = g mod p, то оно и принимается в качестве секретного ключа в симметричной криптосистеме.

В качестве примера рассмотрим следующий случай:

  • Абонент А выбрал p=97, g=5 и открыто переслал их абоненту В.

  • Затем А выбрал =12, а В выбрал =63.

  • Абонент А вычисляет 512 mod 97 = 42 и посылает его В.

  • Абонент В вычисляет 563 mod 97 = 75 и посылает его А.

  • Оба абонента вычисляют 7512 mod 97 = 4263 mod 97 = 21. Это и есть секретный ключ.

Подобная идея реализована в программе PGP (Pretty Good Privacy), разработанной американским программистом Филом Зиммерманом в 1992 г. и свободно распространяемой в сети Интернет (ее адрес http://www.pgpi.com). Сила PGP заключается не в том, что никто не знает как ее взломать иначе, как используя «лобовую атаку», а в хорошо продуманном механизме обработки ключей, быстроте, удобстве и широте распространения.

О бмен секретным ключом между абонентами осуществляется с помощью алгоритма RSA по открытому каналу (рис. 2.7). Само же сообщение подвергается симметричным процедурам шифрования/дешифрования.

В программу включены три симметричных блочных шифра: CAST, тройной DES и IDEA, разработанных командами криптографов с выдающейся репутацией. Все три шифра оперируют с 64-битными блоками открытого и шифрованного текста. CAST и IDEA работают с 128-битовым ключом, а тройной DES – с 168-битовым ключом.

Алгоритм CAST (название состоит из инициалов разработчиков - Карлиса Адамса и Стаффорда Тавареса из компании Nortel) основан на формальном подходе с использованием ряда математически доказуемых положений. Это позволяет предположить, что для взлома его 128-битового ключа требуется исчерпывающий перебор вариантов.

Блочный шифр IDEA (Международный алгоритм шифрования данных) основан на понятии «смешения операций, принадлежащих различным алгебраическим группам», был разработан в ЕТН в Цюрихе Джеймсом Л. Мэссли и Ксуэйджа Лайем и опубликован в 1990 г. До сих пор этот алгоритм оказывается устойчивым к криптоатакам в большей степени, чем другие подобные шифры.

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

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

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

Программа PGP может работать как под управлением DOS, так и под управлением Windows 95/98/NT. В сети Интернет можно найти огромное количество связанной с PGP информации. Вот только некоторые источники:

  • PGP, Inc http://www.pgp.com;

  • PGP.net http://www.pgp.net;

  • международный сервер PGP http://www.pgpi.com;

  • конференция пользователей PGP http://pgp.rivertown.net;

  • “Русский Альбом PGP” http://www.geocities.com/SoHo/Studios/1059/.

    1. Цифровая подпись. Еще одним интересным применением криптосистем с открытым ключом является цифровая подпись.

Цифровая подпись – это сообщение, которое формируется из открытого текста М по определенному алгоритму, затем шифруется и вместе с зашифрованным или открытым текстом передается адресату

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

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

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

  • получатель сообщения должен иметь возможность удостовериться, что полученная в составе сообщения подпись есть правильная подпись отправителя;

  • получение правильной подписи отправителя возможно только при использовании закрытой информации, которой обладает отправитель;

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

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

  1. Вероятностный алгоритм генерирования ключей. Каждый абонент А сети генерирует случайную пару ключей (КА,КА), где КА – открытый ключ, а КА – секретный ключ.

  2. Алгоритм подписи SIGN. Получив на входе произвольное сообщение М и секретный ключ КА, этот алгоритм формирует шифрованное слово S = SIGN(M,КА), которое называется подписью абонента А на сообщении М. Когда А хочет послать кому-то сообщение М и при этом убедить получателя в том, что оно действительно принадлежит А, то он передает пару (S,M).

  3. Алгоритм подтверждения подписи CHECK. Получатель сообщения М, желая убедиться в том, что оно действительно отправлено абонентом А, включает этот алгоритм, используя общедоступный ключ КА. Проверка считается успешной, если CHECK(КА,M,S) = 1.

Для любого сообщения М и для каждой пары ключей (К,К) должно выполняться соотношение:

CHECK(К,M,SIGN(M, К)) = 1.

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

Стойкость такой системы подписи означает, что лишь законный собственник секретного ключа К может для сообщения М выработать такую подпись S, которая прошла бы проверку CHECK(К,M,S) = 1. Если такую же подпись S находит противник, то говорят, что он подделывает (фальсифицирует) подпись легального абонента на сообщении М.

Любую асимметричную криптосистему можно преобразовать в систему цифровой подписи следующим образом: пусть Е и D – соответственно алгоритмы шифрования и дешифрования, К и К – открытый и секретный ключи, а М – произвольное сообщение. Тогда:

SIGN(M,К) = DK(M) и

 1, если EK(S) = M;

CHECK(К,M,S) = 

 0, в противном случае.

В качестве примера рассмотрим систему цифровой подписи ЭльГамаля:

  1. Генерирование ключей. Выбирается большое простое число р, а также число g, 1<g<p1, имеющее в мультипликативной группе Zp* большой порядок. Каждый абонент выбирает себе случайное число в промежутке от 1 до p1, и вычисляет h = g mod p.

  • Открытый ключ: р, g, h.

  • Секретный ключ: .

  1. Подписывание. Абонент А вырабатывает свою подпись S под сообщением М следующим образом:

  • выбирает случайное простое число r такое, что 1rp1;

  • вычисляет s1 = gr mod p;

  • вычисляет r = r1 mod (p1);

  • вычисляет s2 = (Мs1)r mod (p1);

  • формирует подпись S = (s1,s2) и передает ее вместе с открытым текстом М.

3. Подтверждение подписи. Абонент В проверяет подпись:

gMhs1 s1s2 (mod p).

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

Естественным способом устранения этого недостатка является использование так называемой хэш-функции h(M), которая из исходного текста М произвольной длины формирует дайджест сообщения фиксированной длины W = h(M) (например, в программе PGP дайджест сообщения имеет длину 160 или 128 бит).

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

Хэш-функция h(M), формирующая дайджест, должна удовлетворять следующим требованиям:

  1. быть быстро вычислимой для любого сообщения М;

  2. не должна приводить к коллизиям, т.е. для разных сообщений М1 и М2 не должно выполняться равенство h(М1) = h(М2);

  3. по заданному образу W = h(M) невозможно эффективно найти такое М, что h(М) = h(М). Это не что иное, как свойство односторонности хэш-функции.

В качестве хэш-функции можно взять функцию h, сконструированную на основе RSA-функции:

h(М) = RSA(h(M1...Ml1)h(Ml)),

где длинное сообщение М разбивается на блоки фиксированной длины, соответствующей выбранной длине дайджеста: M=M1...Ml1Ml.

В настоящее время наибольшее распространение получили следующие алгоритмы получения дайджеста:

SHA (Алгоритм защищенного хэширования) – 160-битовый алгоритм хэширования, разработанный Агенством национальной безопасности США по заказу Национального института стандартов и технологий (NIST).

MD5, представленный в общее пользование RSA Data Security, Inc., является 128-битовым хэш-алгоритмом. Он был практически взломан в 1996 г. немецким криптографом Хансом Доббертином. В нем обнаружены настолько серьезные слабые места, что его использование на практике является весьма рискованным.

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

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

В 1991 г. NIST предложил в качестве стандарта цифровой подписи систему DSA (Digital Signature Algorithm), названный стандартом DSS (Digital Signature Standard). Суть его заключается в следующем.

1. Генерирование ключей:

  • Выбирается большое простое число р такое, что р1 имеет достаточно большой простой делитель q. Стандарт требует, чтобы 2512<p<21024 и q>2160.

  • Выбирается в группе Zp* произвольное h число порядка q.

  • Параметры р, q, h не составляют секрета и являются общими для всех абонентов сети.

  • Абонент А выбирает целое случайное число в диапазоне от 0 до q1, и вычисляет b = h mod p. Его ключи формируются следующим образом:

открытый ключ: b такое, что b = h mod p;

секретный ключ: .

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

  • выбирает случайное простое число r такое, что 0rq1;

  • вычисляет r = r1 mod q;

  • вычисляет s1 = (hr mod p) mod q;

  • вычисляет s2 = ((h(М)+s1)r) mod q;

  • формирует подпись S = (s1,s2) и передает ее вместе с открытым текстом М.

3. Подтверждение подписи. Абонент В, получив сообщение М с подписью S = (s1,s2), выполняет следующее:

  • вычисляет s = s21 mod q;

  • вычисляет u1 = (h(М)s) mod q;

  • вычисляет u2 = (s1s) mod q;

  • вычисляет t = (hu1bu2 mod p) mod q;

  • п роверяет равенство t = s1.

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

    1. Этот класс криптосистем характеризуется отсутствием закрытого канала связи для передачи секретного ключа, что является характерным для симметричных криптосистем. И в этом заключается их основное преимущество.

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

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

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

    5. Перспективным направлением использования криптосистем с открытым ключом является их применение в протоколах распределения ключей и цифровой подписи.