Ассиметричные алгоритмы шифрования
Развитие основных типов криптографических протоколов (ключевой обмен, электронно-цифровая подпись (ЭЦП), аутентификация и др) было бы невозможно без создания открытых ключей и построенных на их основе ассиметричных протоколов шифрования.
Основная идея асимметричных криптоалгоритмов состоит в том, что для шифрования сообщения используется один ключ, а при дешифровании – другой. Кроме того, процедура шифрования выбрана так, что она необратима даже по известному ключу шифрования – это второе необходимое условие асимметричной криптографии. То есть, зная ключ шифрования и зашифрованный текст, невозможно восстановить исходное сообщение – прочесть его можно только с помощью второго ключа – ключа дешифрования. А раз так, то ключ шифрования для отправки писем какому-либо лицу можно вообще не скрывать – зная его все равно невозможно прочесть зашифрованное сообщение. Поэтому, ключ шифрования называют в асимметричных системах "открытым ключом", а вот ключ дешифрования получателю сообщений необходимо держать в секрете – он называется "закрытым ключом".
Таким образом, мы избавляемся от необходимости решать сложную задачу обмена секретными ключами.
Напрашивается вопрос: "Почему, зная открытый ключ, нельзя вычислить закрытый ключ ?" – это третье необходимое условие асимметричной криптографии – алгоритмы шифрования и дешифрования создаются так, чтобы зная открытый ключ, невозможно вычислить закрытый ключ.
В целом система переписки при использовании асимметричного шифрования выглядит следующим образом. Для каждого из N абонентов, ведущих переписку, выбрана своя пара ключей: "открытый" Ej и "закрытый" Dj, где j – номер абонента. Все открытые ключи известны всем пользователям сети, каждый закрытый ключ, наоборот, хранится только у того абонента, которому он принадлежит. Если абонент, скажем под номером 7, собирается передать информацию абоненту под номером 9, он шифрует данные ключом шифрования E9 и отправляет ее абоненту 9. Несмотря на то, что все пользователи сети знают ключ E9 и, возможно, имеют доступ к каналу, по которому идет зашифрованное послание, они не могут прочесть исходный текст, так как процедура шифрования необратима по открытому ключу. И только абонент №9, получив послание, производит над ним преобразование с помощью известного только ему ключа D9 и восстанавливает текст послания. Заметьте, что если сообщение нужно отправить в противоположном направлении (от абонента 9 к абоненту 7), то нужно будет использовать уже другую пару ключей (для шифрования ключ E7, а для дешифрования – ключ D7).
Как мы видим, во-первых, в асимметричных системах количество существующих ключей связано с количеством абонентов линейно (в системе из N пользователей используются 2*N ключей), а не квадратично, как в симметричных системах. Во-вторых, при нарушении конфиденциальности k-ой рабочей станции злоумышленник узнает только ключ Dk: это позволяет ему читать все сообщения, приходящие абоненту k, но не позволяет вывадавать себя за него при отправке писем.
Стандарт ассимметричного шифрования RSA
Самым распространенным алгоритмом ассиметричного шифрования является алгоритм RSA. Он был предложен тремя исседователями-математиками Рональдом Ривестом (R.Rivest) , Ади Шамиром (A.Shamir) и Леонардом Адльманом (L.Adleman) в 1977-78 годах. Разработчикам данного алгоритма удалось эффективно воплотить идею односторонних функций с секретом. Стойкость RSA базируется на сложности факторизации больших целых чисел. В 1993 году метод RSA был обнародован и принят в качестве стандарта (PKCS #1: RSA Encryption standart). RSA можно применять как для шифрования/расшифрования, так и для генерации/проверки электронно-цифровой подписи.
Генерация ключей
Первым этапом любого асимметричного алгоритма является создание пары ключей: открытого и закрытого и распространение открытого ключа "по всему миру". Для алгоритма RSA этап создания ключей состоит из следующих операций:
Выбираются два простых (!) числа p и q
Вычисляется их произведение n(=p*q)
Выбирается произвольное число e (e<n), такое, что НОД(e,(p-1)(q-1))=1, то есть e должно быть взаимно простым с числом (p-1)(q-1).
Методом Евклида решается в целых числах (!) уравнение e*d+(p-1)(q-1)*y=1. Здесь неизвестными являются переменные d и y – метод Евклида как раз и находит множество пар (d,y), каждая из которых является решением уравнения в целых числах.
Два числа (e,n) – публикуются как открытый ключ.
Число d хранится в строжайшем секрете – это и есть закрытый ключ, который позволит читать все послания, зашифрованные с помощью пары чисел (e,n).
Шифрование/расшифрование
Как же производится собственно шифрование с помощью этих чисел:
Отправитель разбивает свое сообщение на блоки, равные k=[log2(n)] бит, где квадратные скобки обозначают взятие целой части от дробного числа.
Подобный блок, как Вы знаете, может быть интерпретирован как число из диапазона (0;2k-1). Для каждого такого числа (назовем его mi) вычисляется выражение ci=((mi)e)mod n. Блоки ci и есть зашифрованное сообщение, и
их можно спокойно передавать по открытому каналу, поскольку операция возведения в степень по модулю простого числа, является необратимой математической задачей. Обратная ей задача носит название "логарифмирование в конечном поле" и является на несколько порядков более сложной задачей. То есть даже если злоумышленник знает числа e и n, то по ci прочесть исходные сообщения mi он не может никак, кроме как полным перебором mi.
А вот на приемной стороне процесс дешифрования все же возможен, и поможет нам в этом хранимое в секрете число d. Достаточно давно была доказана теорема Эйлера, частный случай которой утвержает, что если число n представимо в виде двух простых чисел p и q, то для любого x имеет место равенство (x(p-1)(q-1))mod n = 1. Для дешифрования RSA-сообщений воспользуемся этой формулой.
Возведем обе ее части в степень (-y): (x(-y)(p-1)(q-1))mod n = 1(-y) = 1.
Теперь умножим обе ее части на x: (x(-y)(p-1)(q-1)+1)mod n = 1*x = x.
А теперь вспомним как мы создавали открытый и закрытый ключи. Мы подбирали с помощью алгоритма Евклида d такое, что e*d+(p-1)(q-1)*y=1, то есть e*d=(-y)(p-1)(q-1)+1. А следовательно в последнем выражении предыдущего абзаца мы можем заменить показатель степени на число (e*d). Получаем (xe*d)mod n = x. То есть для того чтобы прочесть сообщение ci=((mi)e)mod n достаточно возвести его в степень d по модулю m:
((ci)d)mod n = ((mi)e*d)mod n = mi.
На самом деле операции возведения в степень больших чисел достаточно трудоемки для современных процессоров, даже если они производятся по оптимизированным по времени алгоритмам. Поэтому обычно весь текст сообщения кодируется обычным блочным шифром (намного более быстрым), но с использованием ключа сеанса, а вот сам ключ сеанса шифруется как раз асимметричным алгоритмом с помощью открытого ключа получателя и помещается в начало файла.
Алгоритм ЭльГамаля
Общие сведения
Криптографы со своей стороны вели поиски более
эффективных систем открытого шифрования и в 1985 году Т.Эль-Гамаль (США)
предложил следующую схему на основе возведения в степень по модулю большого
простого числа P.
Задается большое простое число P и целое число A, 1<A<P. Сообщения представляются целыми числами M из интервала 1<M<P.
Шифрование сообщений
Протокол передачи сообщения M выглядит следующим образом.
абоненты знают числа A и P;
абоненты генерируют независимо друг от друга случайные числа:
Ka,Kb
удовлетворяющих условию:
1<K<P
получатель вычисляет и передаёт отправителю число B, определяемое последовательностью:
В=AKbmоd(P)
отправитель шифрует сообщение M и отправляет полученную последовательность получателю
C=M*BKamоd(P)
получатель расшифровывает полученное сообщение
D=(AKa)-Kbmоd(P)
M=C*Dmоd(P)
В этой системе открытого шифрования та же степень защиты, что для алгоритма RSA с модулем N из 200 знаков, достигается уже при модуле P из 150 знаков. Это позволяет в 5-7 раз увеличить скорость обработки информации. Однако, в таком варианте открытого шифрования нет подтверждения подлинности сообщений.
Подтверждение подлинности отправителя
Для того, чтобы обеспечить при открытом шифровании по модулю простого числа P также и процедуру подтверждения подлинности отправителя Т.ЭльГамаль предложил следующий протокол передачи подписанного сообщения M:
абоненты знают числа A и P;
отправитель генерирует случайное число и хранит его в секрете:
Ka
удовлетворяющее условию:
1<Ka<P
вычисляет и передаёт получателю число B, определяемое последователньостью:
В=AKamоd(P)
Для сообщения M (1<M<P):
выбирает случайное число L (1<L<P), удовлетворяющее условию
(L,P-1)=1
вычисляет число
R=ALmоd(P)
решает относительно S
M=Ka*R+L*Smоd(P)
передаёт подписанное сообщение
[M,R,S]
получатель проверяет правильность подписи
AM=(BR)*(RS)mоd(P)
В этой системе секретным ключом для подписывания сообщений является число X, а открытым ключом для проверки достоверности подписи число B. Процедура проверки подписи служит также и для проверки правильности расшифрования, если сообщения шифруются.
Алгоритм Шамира
Общее описание
Еще один интересный пример использования возведения в степень по модулю большого простого числа P для открытого шифрования предложил А.Shamir (один из авторов RSA). Как и в системе ЭльГамаля сообщения M представляются целыми числами из интервала 1<M<P.
Передача сообщений
Передача сообщения происходит следующим образом:
абоненты знают числа P;
абоненты генерируют независимо друг от друга случайные числа:
Ka,Kb
удовлетворяющих условию:
1<K<P
отправитель вычисляет значение и передаёт получателю:
C=MKamоd(P)
получатель вычисляет и передаёт отправителю число B, определяемое последовательностью:
D=CKbmоd(P)
отправитель аннулирует свой шифр и отправляет полученную последовательность получателю
E=D(X-1) mоd(P)E=DFamоd(P)
где:
Fa=Ka-1
получатель расшифровывает полученное сообщение
M=EFbmоd(P)
где:
Fb=Kb–1
Пример использования
Эта процедура ОШ может быть использована,
например, для таких "экзотических" целей как игра в карты по
телефону.
Действительно, если игрок A желает "сдать" игроку B, скажем, 5 карт из 52
как при игре в покер, он зашифровывает обозначения всех карт и передает их
игроку B:
Ca=MaKamоd(P)
где
I=1,2,..,52
Игрок B выбирает из них 5, зашифровывает своим ключом 22 и возвращает игроку А:
Da=CaKbmоd(P)
где
I=1,2...,5
Игрок A снимает с этих 5 карт свой шифр и выдает их
игроку B.
Игрок B
расшифровывает полученные карты:
Ma=EaFbmоd (P)
При этом оставшаяся часть колоды C(6)...C(52) теперь находится у игрока B, но он не может раскрыть эти карты, т.к. они зашифрованы на ключе его партнера A. Остальные процедуры игры проделываются аналогично.
К pиптосистемы на основе эллиптических уpавнений
Эллиптические кpивые - математический объект, котоpый может опpеделен над любым полем (конечным, действительным, pациональным или комплексным). В кpиптогpафии обычно используются конечные поля. Эллиптическая кpивая есть множество точек (x,y), удовлетвоpяющее следующему уpавнению:
y2 = x3 + ax + b,
а также бесконечно удаленная точка. Для точек на кpивой довольно легко вводится опеpация сложения, котоpая игpает ту же pоль, что и опеpация умножения в кpиптосистемах RSA и Эль-Гамаля.
В pеальных кpиптосистемах на базе эллиптических уpавнений используется уpавнение
y2 = x3 + ax + b mod p,
где p - пpостое.
Пpоблема дискpетного логаpифма на эллиптической кpивой состоит в следующем: дана точка G на эллиптической кpивой поpядка r (количество точек на кpивой) и дpугая точка Y на этой же кpивой. Нужно найти единственную точку x такую, что Y = xG, то есть Y есть х-я степень G.
Электронно-цифровая подпись
Общие положения
При ведении деловой переписки, при заключении контрактов подпись ответственного лица является непременным аттрибутом документа, преследующим несколько целей:
Гарантирование истинности письма путем сличения подписи с имеющимся образцом;
Гарантирование авторства документа ( с юридической точки зрения)
Выполнение данных требовани основывается на следующих свойствах подписи:
подпись аутентична, то есть с ее помощью получателю документа можно доказать, что она принадлежит подписывающему;
подпись неподделываема; то есть служит доказательством, что только тот человек, чей автограф стоит на документе, мог подписать данный документ, и никто иной.
Подпись непереносима, то есть является частью документа и поэтому перенести ее на другой документ невозможно.
Документ с подписью является неизменяемым.
Подпись неоспорима.
Любое лицо, владеющее образцом подписи может удостоверится, что документ подписан вледельцем подписи.
Развитие современных средств безбумажного документооборота, средств электронных платежей немыслимо без развития средств доказательства подлинности и целостности документа. Таким средством является электронно-цифровая подпись (ЭЦП), которая сохранила основные свойства обычной подписи.
Существует несколько методов посторения ЭЦП, а именно:
шифрование электронного документа (ЭД) на основе симметричных алгоритмов. Данная схема предусматривает наличие в системе третьего лица – арбитра, пользующегося доверием обеих сторон. Авторизацией документа в даной схеме является сам факт зашифрования ЭД секретным ключем и передача его арбитру.
Использование ассиметричных алгоритмов шифрования. Фактом подписания документа является зашифрование его на секретном ключе отправителя.
Развитием предыдущей идеи стала наиболее распространенныя схема ЭЦП – зашифрование окончательного результата обработки ЭД хеш-функцией при помощи ассиметричного алгоритма.
Кроме перечисленных, существуют и другие методы построения схем ЭЦП
- групповая подпись, неоспариваемая подпись, доверенная подпись и др. Появление этих разновидностей обусловлено разнообразием задач, решаемых с помощью электронных технологий передачи и обработки электронных документов.
Алгоритм DSA
В 1991 г. в США был опубликован проект федерального стандарта цифровой подписи - DSS (Digital Signature Standard, [DSS91], описывающий систему цифровой подписи DSA (Digital Signature Algorithm). Одним из основных критериев при создании проекта была его патентная чистота.
Предлагаемый алгоритм DSA, имеет, как и RSA, теоретико-числовой характер, и основан на криптографической системе Эль-Гамаля в варианте Шнорра . Его надежность основана на практической неразрешимости определенного частного случая задачи вычисления дискретного логарифма. Современные методы решения этой задачи имеют приблизительно ту же эффективность, что и методы решения задачи факторизации; в связи с этим предлагается использовать ключи длиной от 512 до 1024 бит с теми же характеристиками надежности, что и в системе RSA. Длина подписи в системе DSA меньше, чем в RSA, и составляет 320 бит.
С момента опубликования проект получил много критических отзывов, многие из которых были учтены при его доработке. Одним из главных аргументов против DSA является то, что, в отличие от общей задачи вычисления дискретного логарифма, ее частный случай, использованный в данной схеме, мало изучен и, возможно, имеет существенно меньшую сложность вскрытия. Кроме того, стандарт не специфицирует способ получения псевдослучайных чисел, используемых при формировании цифровой подписи, и не указывает на то, что этот элемент алгоритма является одним из самых критичных по криптографической стойкости.
Функции DSA ограничены только цифровой подписью, система принципиально не предназначена для шифрования данных. По быстродействию система DSA сравнима с RSA при формировании подписи, но существенно (в 10-40 раз) уступает ей при проверке подписи.
Вместе с проектом DSS опубликован проект стандарта SHS (Secure Hash Standard), описывающий однонаправленную хэш-функцию SHA (Secure Hash Algorithm), рекомендованную для использования вместе с DSA. Хэш-функция SHA является модификацией алгоритма MD4, хорошо известного в криптографической литературе.
Генерация ЭЦП
При генерации ЭЦП используются параметры трех групп:
общие параметры
секретный ключ
открытый ключ
Общие параметры необходимы для функционирования системы в целом. Секретный ключ используется для формирования ЭЦП, а открытый – для проверки ЭЦП. Общими параметрами системы являются простые целые числа p,q,g, удовлетворяющие следующим условиям:
p: 2^511<p<2^512
q: простой делитель числа (p-1), который удовлетворяет условию
2^159<q<2^160
g: так называемый генератор,удовлетворяющий
равенству g=h^((p-1)/q)mod p >1.
Парараметры p,q,g публикуются для всех участников обмена ЭД с ЭЦП.
Секретный ключ x случайно выбирается из диапазона [1,q] и держится в секрете.
Открытый ключ вычисляется: y=g^x mod p.
Также при описании данной схемы будут использоваться следующие обозначения и доролнительные параметры: m – входное сообщение пользователя для схемы с ЭЦП; k - случайное число, удовлетворяющее условию 0<k<q, хранящееся в секрете и меняющееся от одной подписи к другой; H – хэш-функция, h – хэш-код сообщения.
Процесс генерации ЭЦП состоит из нескольких этапов:
1.Вычисляется хэш-код сообщения m h=H(m)
2.Из диапазона [1,q] случайным образом выбирается значение k и вычисляется r= (g^k mod p) mod q
3. Вычисляется S= (k^-1(h+xr)) mod q, где k^-1 удовлетворяет условию
(k^-1*k) mod q =1
Значения r,s являются ЭЦП сообщения m и передаются вместе с ним по каналам связи.
Проверка ЭЦП
Пусть принято сообщение m1 и его подпись s1,r1.
Проверка ЭЦП происходит следующим образом:
проверяется выполнений условий 0<r1<q, 0<s1<q, и если хотя бы одно из них нарушено, подпись отвергается.
Вычисляются значения:
w= s1^-1 mod q
u1 = (H(m1)w) mod q
u2 = ((r1/w) mod q
v = (( g^u1y^u2) mod p ) mod q
проверяется равенство v = r1
Если последнее равенство выполняется, то подпись принимается. В данном стандарте специфицируется также процедура генерации основных параметров системы и проводится доказательство того, что если v=r1, то m1=m, r1=r, s1=s.
Стандарт на процедуры ЭЦП ГОСТ Р 34.10-94
Отечественным стандартом на процедуры выработки и проверки ЭЦП является ГОСТ Р 34.10-94. Схема ЭЦП, предложенная в данном стандарте, во многом напоминает подпись в DSA.
Цифровая подпись представляет собой два больших целых простых числа. Общедоступные параметры схемы ЭЦП (p,q,a) должны удовлетворять следующим условиям:
p: 2^501<p<2^512 или 2^1020<p<2^1020
q: простой делитель числа (p-1), который удовлетворяет
условию 2^254<q<2^256
a: 1<a<p-1, a^q(mod p) =1
Секретный ключ x случайно выбирается из диапазона [1,q] и держится в секрете.
Открытый ключ вычисляется: y=a^x mod p.
Генерация ЭЦП
Процесс генерации ЭЦП состоит из нескольких этапов:
1.Вычисляется хэш-код сообщения m h=H(m)
(хэш-функция, используемая в данном стандарте в соответствии с
ГОСТ Р 34.10-94), если h(m)(mod p) = 0, то h(m) присваевается значение 0…02551
2.Из диапазона [1,q] случайным образом выбирается значение k
3. вычисляется r= (a^k mod p) , r1=r(mod p); если r1=0, следует вернуться к предыдущему этапу и выработать другое значение k.
3. Вычисляется s= (xr1+kh(m))(mod p); если s=0, то необходимо выработать другое значение k.
Значения r1,s1 являются ЭЦП сообщения m и передаются вместе с ним по каналам связи.
Проверка ЭЦП
Проверка ЭЦП происходит следующим образом:
проверяется выполнений условий 0<r<q, 0<s<q, и если хотя бы одно из них нарушено, подпись отвергается.
Вычисляется хэш-код данного сообщения h=H(m); Если h(m)(mod p) = 0, то битовое представление h(m): 0…02551
Вычисляется значение v=(h(m))^q-2(mod p).
Вычисляется значения z1=sv(mod p); z2=(q-r1)v(mod p).
Вычисляется значение u=(a^z1y^z2(mod p))(mod q)
проверяется равенство u = r1
Если последнее раенство выполняется, то подпись принимается.
Цифровые подписи, основанные на симметричных криптосистемах
На первый взгляд, сама эта идея может показаться абсурдом. Действительно, общеизвестно, что так называемая «современная», она же двухключевая криптография возникла и стала быстро развиваться в последние десятилетия именно потому, что ряд новых криптографических протоколов типа протокола цифровой подписи не удалось эффективно реализовать на базе традиционных криптографических алгоритмов, широко известных и хорошо изученных к тому времени. Тем не менее, это возможно. И первыми, кто обратил на это внимание, были родоначальники криптографии с открытым ключом У. Диффи и М. Хеллман, опубликовавшие описание подхода, позволяющего выполнять процедуру цифровой подписи одного бита с помощью блочного шифра. Прежде чем изложить эту идею, сделаем несколько замечаний о сути и реализациях цифровой подписи.
Стойкость какой-либо схемы подписи доказывается обычно установлением равносильности соответствующей задачи вскрытия схемы какой-либо другой, о которой известно, что она вычислительно неразрешима. Практически все современные алгоритмы ЭЦП основаны на так называемых «сложных математических задачах» типа факторизации больших чисел или логарифмирования в дискретных полях.
Однако, доказательство невозможности эффективного вычислительного решения этих задач отсутствует, и нет никаких гарантий, что они не будут решены в ближайшем будущем, а соответствующие схемы взломаны – как это произошло с «ранцевой» схемой цифровой подписи. Более того, с бурным прогрессом средств вычислительных техники «границы надежности» методов отодвигаются в область все больших размеров блока.
Всего пару десятилетий назад, на заре криптографии с открытым ключом считалось, что для реализации схемы подписи RSA достаточно даже 128-битовых чисел. Сейчас эта граница отодвинута до 1024-битовых чисел – практически на порядок, – и это далеко еще не предел. Это приводит к необходимости переписывать реализующие схему программы, и зачастую перепроектировать аппаратуру.
Ничего подобного не наблюдается в области классических блочных шифров, если не считать изначально ущербного и непонятного решения комитета по стандартам США ограничить размер ключа алгоритма DES 56-ю битами, тогда как еще во время обсуждения алгоритма предлагалось использовать ключ большего размера. Схемы подписи, основанные на классических блочных шифрах, свободны от указанных недостатков:
во-первых, их стойкость к попыткам взлома вытекает из стойкости использованного блочного шифра, поскольку классические методы шифрования изучены гораздо больше, а их надежность обоснована намного лучше, чем надежность асимметричных криптографических систем;
во-вторых, даже если стойкость использованного в схеме подписи шифра окажется недостаточной в свете прогресса вычислительной техники, его легко можно будет заменить на другой, более устойчивый, с тем же размером блока данных и ключа, без необходимости менять основные характеристики всей схемы – это потребует только минимальной модификации программного обеспечения;
Итак, вернемся к схеме Диффи и Хеллмана подписи одного бита сообщения с помощью алгоритма, базирующегося на любом классическом блочном шифре. Предположим, в нашем распоряжении есть алгоритм зашифрования EK, оперирующий блоками данных X размера n и использующий ключ размером nK: |X|=n, |K|=nK. Структура ключевой информации в схеме следующая: секретный ключ подписи kS выбирается как произвольная (случайная) пара ключей k0, k1 используемого блочного шифра:
kS=(k0,k1);
Таким образом, размер ключа подписи равен удвоенному размеру ключа использованного блочного шифра:
|KS|=2|K|=2nK.
Ключ проверки представляет собой результат шифрования двух блоков текста X0 и X1 с ключами k0 и k1 соответственно:
kV=(C0, C1)
=
где являющиеся параметром схемы блоки данных несекретны и известны проверяющей подпись стороне. Таким образом, размер ключа проверки подписи равен удвоенному размеру блока использованного блочного шифра:
|kV|=2|X|=2n.
Алгоритм Sig выработки цифровой подписи для бита t (t О{0,1}) заключается просто в выборе соответствующей половины из пары, составляющей секретный ключ подписи:
s = S(t) = kt.
Алгоритм Ver проверки подписи состоит в проверке уравнения Ekt(Xt)=Ct, которое, очевидно, должно выполняться для нашего t. Получателю известны все используемые при этом величины.
Таким образом, функция проверки подписи будет следующей:
.
Покажем, что данная схема работоспособна, для чего проверим выполнение необходимых свойств схемы цифровой подписи:
Невозможность подписать бит t, если неизвестен ключ подписи. Действительно, для выполнения этого злоумышленнику потребовалось бы решить уравнение Es(Xt)=Ct относительно s, что эквивалентно определению ключа для известных блоков шифрованного и соответствующего ему открытого текста, что вычислительно невозможно в силу использования стойкого шифра.
Невозможность подобрать другое значение бита t, которое подходило бы под заданную подпись, очевидна: число возможных значений бита всего два и вероятность выполнения двух следующих условий одновременно пренебрежимо мала в просто в силу использования криптостойкого алгоритма:
Es(X0)=C0,
Es(X1)=C1.
Таким образом, предложенная Диффи и Хеллманом схема цифровой подписи на основе классического блочного шифра обладает такой же стойкостью, что и лежащий в ее основе блочный шифр, и при этом весьма проста. Однако, у нее есть два существенных недостатка.
Первый недостаток заключается в том, что данная схема позволяет подписать лишь один бит информации. В блоке большего размера придется отдельно подписывать каждый бит, поэтому даже с учетом хэширования сообщения все компоненты подписи – секретный ключ, проверочная комбинация и собственно подпись получаются довольно большими по размеру и более чем на два порядка превосходят размер подписываемого блока. Предположим, что в схеме используется криптографический алгоритм EK с размером блока и ключа, соответственно n и nK. Предположим также, что используется функция хэширования с размером выходного блока nH. Тогда размеры основных рабочих блоков будут следующими:
размер ключа подписи: nkS=2nHЧnK.
размер ключа проверки подписи: nС=2nHn.
размер подписи: nS =nHЧnK.
Если, например, в качестве основы в данной схеме будет использован шифр ГОСТ28147–89 с размером блока n=64 бита и размером ключа nK=256 бит, и для выработки хэш–блоков будет использован тот же самый шифр в режиме выработки имитовставки, что даст размер хэш–блока nH=64 то размеры рабочих блоков будут следующими:
размер ключа подписи: nkS=2nHЧnK =2Ч64Ч256бит=4096 байт;
размер ключа проверки подписи: nС=2nHn = 2Ч64Ч64 бит = 1024 байта.
размер подписи: nS =nHЧnK = 64Ч256 бит = 2048 байт.
Второй недостаток данной схемы, быть может, менее заметен, но столь же серьезен. Дело в том, что пара ключей выработки подписи и проверки подписи могут быть использованы только один раз. Действительно, выполнение процедуры подписи бита сообщения приводит к раскрытию половины секретного ключа, после чего он уже не является полностью секретным и не может быть использован повторно. Поэтому для каждого подписываемого сообщения необходим свой комплект ключей подписи и проверки. Это практически исключает возможность использования рассмотренной схемы Диффи–Хеллмана в первоначально предложенном варианте в реальных системах ЭЦП.
Однако, несколько лет назад Березин и Дорошкевич предложили модификацию схемы Диффи–Хеллмана, фактически устраняющую ее недостатки.
Центральным в этом подходе является алгоритм «односторонней криптографической прокрутки», который в некотором роде может служить аналогом операции возведения в степень. Как обычно, предположим, что в нашем распоряжении имеется криптографический алгоритм EK с размером блока данных и ключа соответственно n и nK бит, причем nЈnK.
Пусть в нашем распоряжении также имеется некоторая функция отображения n–битовых блоков данных в nK–битовые Y=Pn®nK(X), |X|=n, |Y|=nK. Определим рекурсивную функцию Rk «односторонней прокрутки» блока данных T размером n бит k раз (k і 0) при помощи следующей формулы:
где X – произвольный несекретный n-битовый блок данных, являющийся параметром процедуры прокрутки.
По своей идее функция односторонней прокрутки чрезвычайно проста, надо всего лишь нужное количество раз (k) выполнить следующие действия: расширить n-битовый блок данных T до размера ключа использованного алгоритма шифрования (nK), на полученном расширенном блоке как на ключе зашифровать блок данных X, результат зашифрования занести на место исходного блока данных (T). По определению операция Rk(T) обладает двумя важными для нас свойствами:
Аддитивность и коммутативность по числу прокручиваний:
Rk+k'(T)=Rk'(Rk(T)) = Rk(Rk'(T)).
Односторонность или необратимость прокрутки: если известно только некоторое значение функции Rk(T), то вычислительно невозможно найти значение Rk'(T) для любого k'<k – если бы это было возможно, в нашем распоряжении был бы способ определить ключ шифрования по известному входному и выходному блоку алгоритма EK. что противоречит предположению о стойкости шифра.
Теперь покажем, как указанную операцию можно использовать для подписи блока T, состоящего из nT битов.
Секретный ключ подписи kS выбирается как произвольная пара блоков k0, k1, имеющих размер блока данных используемого блочного шифра, т.е. размер ключа выработки подписи равен удвоенному размеру блока данных использованного блочного шифра: |kS|=2n;
Ключ проверки подписи вычисляется как пара блоков, имеющих размер блоков данных использованного алгоритма по следующим формулам:
kC=(C0,C1) = (R2nT–1(K0), R2nT–1(K1)).
В этих вычислениях также используются несекретные блоки данных X0 и X1, являющиеся параметрами функции «односторонней прокрутки», они обязательно должны быть различными. Таким образом, размер ключа проверки подписи также равен удвоенному размеру блока данных использованного блочного шифра: |kC|=2n.
Вычисление и проверка ЭЦП будут выглядеть следующим образом:
Алгоритм SignT выработки цифровой подписи для nT-битового блока T заключается в выполнении «односторонней прокрутки» обеих половин ключа подписи T и 2nT–1–T раз соответственно:
s=SignT(T)=(s0,s1)=.
Алгоритм VernT
проверки подписи состоит в проверке истинности соотношений , которые,
очевидно, должны выполняться для подлинного блока данных T:
R2nT–1–T(s0)=R2nT–1–T(RT(k0))=R2nT–1–T+T(k0)=R2nT–1(k0)=C0,
RT(s1)=RT(R2nT–1–T(k1))=RT+2nT–1–T(k1)=R2nT–1(k1)=C1.
Таким образом, функция проверки подписи будет следующей:
Покажем, что для данной схемы выполняются необходимые условия работоспособности схемы подписи:
Предположим, что в распоряжении злоумышленника есть nT-битовый блок T, его подпись s=(s0,s1), и ключ проверки kC=(C0,C1). Пользуясь этой информацией, злоумышленник пытается найти правильную подпись s'=(s'0,s'1) для другого nT-битового блока T'. Для этого ему надо решить следующие уравнения относительно s'0 и s'1:
R2nT–1–T'(s'0)=C0,
RT'(s'1)=C1.
В распоряжении злоумышленника есть блок данных T с подписью s=(s0,s1), что позволяет ему вычислить одно из значений s'0,s'1, даже не владея ключом подписи:
если T<T', то s'0=RT'(k0)=RT'–T(RT(k0))=RT'–T(s0),
если T>T', то s'1=R2nT–1–T'(k1)=RT–T'(R2nT–1–T(k1))=RT–T'(s1).
Однако для нахождения второй половины подписи (s'1 и s'0 в случаях (a) и (b) соответственно) ему необходимо выполнить прокрутку в обратную сторону, т.е. найти Rk(X), располагая только значением для большего k, что является вычислительно невозможным. Таким образом, злоумышленник не может подделать подпись под сообщением, если не располагает секретным ключом подписи.
Второе требование также выполняется: вероятность подобрать блок данных T', отличный от блока T, но обладающий такой же цифровой подписью, чрезвычайно мала и может не приниматься во внимание. Действительно, пусть цифровая подпись блоков T и T' совпадает. Тогда подписи обоих блоков будут равны соответственно:
s=SnT(T)=(s0,s1)=(RT(k0), R2nT–1–T(k1)),
s'=SnT(T')=(s'0,s'1)=(RT'(k0), R2nT–1–T'(k1)),
но s=s', следовательно:
RT(k0)=RT'(k0) и R2nT–1–T(k1)=R2nT–1–T'(k1).
Положим для определенности TЈT', тогда справедливо следующее:
RT'–T(k0*)=k0*,RT'–T(k1*)=k1*,где k0*=RT(k0), k1*=R2nT–1–T'(k1)
Последнее условие означает, что прокручивание двух различных блоков данных одно и то же число раз оставляет их значения неизменными. Вероятность такого события чрезвычайно мала и может не приниматься во внимание.
Таким образом рассмотренная модификация схемы Диффи–Хеллмана делает возможным подпись не одного бита, а целой битовой группы. Это позволяет в несколько раз уменьшить размер подписи и ключей подписи/проверки данной схемы. Однако надо понимать, что увеличение размера подписываемых битовых групп приводит к экспоненциальному росту объема необходимых вычислений и начиная с некоторого значения делает работу схемы также неэффективной. Граница «разумного размера» подписываемой группы находится где-то около десяти бит, и блоки большего размера все равно необходимо подписывать «по частям».
Теперь найдем размеры ключей и подписи, а также объем необходимых для реализации схемы вычислений. Пусть размер хэш–блока и блока используемого шифра одинаковы и равны n, а размер подписываемых битовых групп равен nT. Предположим также, что если последняя группа содержит меньшее число битов, обрабатывается она все равно как полная nT-битовая группа. Тогда размеры ключей подписи/проверки и самой подписи совпадают и равны следующей величине:
бит,
где йxщ обозначает округление числа x до ближайшего целого в сторону возрастания. Число операций шифрования EK(X), требуемое для реализации процедур схемы, определяются нижеследующими соотношениями:
при выработке ключевой информации оно равно:
,
при выработке и проверке подписи оно вдвое меньше:
.
Размер ключа подписи и проверки подписи можно дополнительно уменьшить следующими приемами:
Нет необходимости хранить ключи подписи отдельных битовых групп, их можно динамически вырабатывать в нужный момент времени с помощью генератора криптостойкой гаммы. Ключом подписи в этом случае будет являться обычный ключ использованного в схеме подписи блочного шифра. Например, если схема подписи будет построена на алгоритме ГОСТ 28147-89, то размер ключа подписи будет равен 256 битам.
Аналогично, нет необходимости хранить массив ключей проверки подписи отдельных битовых групп блока, достаточно хранить его значение хэш-функции этого массива. При этом алгоритм выработки ключа подписи и алгоритм проверки подписи будут дополнены еще одним шагом – вычислением хэш-функции массива проверочных комбинаций отдельных битовых групп.
Таким образом, проблема размера ключей и подписи решена, однако, второй недостаток схемы – одноразовость ключей – не преодолен, поскольку это невозможно в рамках подхода Диффи–Хеллмана.
Для практического использования такой схемы, рассчитанной на подпись N сообщений, отправителю необходимо хранить N ключей подписи, а получателю – N ключей проверки, что достаточно неудобно. Эта проблема может быть решена в точности так же, как была решена проблема ключей для множественных битовых групп – генерацией ключей подписи для всех N сообщений из одного мастер-ключа и свертывание всех проверочных комбинаций в одну контрольную комбинацию с помощью алгоритма вычисления хэш-функции.
Такой подход решил бы проблему размера хранимых ключей, но привел бы к необходимости вместе подписью каждого сообщения высылать недостающие N–1 проверочных комбинаций, необходимых для вычисления хэш-функции массива всех контрольных комбинаций отдельных сообщений. Ясно, что такой вариант не обладает преимуществами по сравнению с исходным.
Упомянутыми выше авторами был предложен механизм, позволяющий значительно снизить остроту проблемы. Его основная идея – вычислять контрольную комбинацию (ключ проверки подписи) не как хэш-функцию от линейного массива проверочных комбинаций всех сообщений, а попарно – с помощью бинарного дерева. На каждом уровне проверочная комбинация вычисляется как хэш-функция от конкатенации двух проверочных комбинаций младшего уровня. Чем выше уровень комбинации, тем больше отдельных ключей проверки "учитывается" в ней.
Предположим, что наша схема рассчитана на 2L сообщений.
Обозначим через i-тую комбинацию l-того уровня. Если нумерацию комбинаций и уровней
начинать с нуля, то справедливо следующее условие: 0 Ј i < 2L–l, а i-ая проверочная комбинация l-того уровня
рассчитана на 2l сообщений с номерами от iЧ2l до (i+1)Ч2l–1 включительно. Число комбинаций нижнего,
нулевого уровня равно 2L, а самого верхнего, L-того уровня – одна, она и является контрольной
комбинацией всех 2L сообщений, на которые рассчитана схема.
На каждом уровне, начиная с первого, проверочные комбинации рассчитываются по следующей формуле:
,
где через A||B обозначен результат конкатенации двух блоков данных A и B, а через H(X) – процедура вычисления хэш-функции блока данных X.
При использовании указанного подхода вместе с подписью сообщения необходимо передать не N–1, как в исходном варианте, а только log2N контрольных комбинаций. Передаваться должны комбинации, соответствующие смежным ветвям дерева на пути от конечной вершины, соответствующей номеру использованной подписи, к корню.
Пример организации проверочных комбинаций в виде двоичного дерева в схеме на восемь сообщений приведена на рисунке 4.1. Так, при передаче сообщения № 5 (контрольная комбинация выделена рамкой) вместе с его подписью должны быть переданы контрольная комбинация сообщения № 4 (C4(0)), общая для сообщений №№ 6–7 (C3(1)) и общая для сообщений №№ 0–3 (C0(2)), все они выделены на рисунке другим фоном.
При проверке подписи
значение C5(0) будет вычислено из сообщения и его подписи, а итоговая контрольная
комбинация, подлежащая сравнению с эталонной, по следующей формуле:
C=C0(3)=H(C0(2)||H(H(C4(0)||C5(0))||C3(1))).
Необходимость отправлять вместе с подписью сообщения дополнительную информацию, нужную для проверки подписи, на самом деле не очень обременительна. Действительно, в системе на 1024=210 подписей вместе с сообщением и его подписью необходимо дополнительно передавать 10 контрольных комбинаций, а в системе на 1048576=220 подписей – всего 20 комбинаций. Однако, при большом числе подписей, на которые рассчитана система, возникает другая проблема – хранение дополнительных комбинаций, если они рассчитаны предварительно, или их выработка в момент формирования подписи.
Дополнительные контрольные комбинации, которые передаются вместе с подписью и используются при ее проверке, вырабатываются при формировании ключа проверки по ключу подписи и могут храниться в системе и использоваться в момент формирования подписи, либо вычисляться заново в этот момент.
Первый подход предполагает затраты дисковой памяти, так как необходимо хранить 2L+1–2 значений хэш-функции всех уровней, а второй требует большого объема вычислений в момент формирования подписи. Можно использовать и компромиссный подход – хранить все хэш-комбинации начиная с некоторого уровня l*, а комбинации меньшего уровня вычислять при формировании подписи.
В рассмотренной выше схеме подписи на 8 сообщений можно хранить все 14 контрольных комбинаций, используемых при проверки (всего их 15, но самая верхняя не используется), тогда при проверке подписи их не надо будет вычислять заново. Можно хранить 6 комбинаций начиная с уровня 1 (C0(1), C1(1), C2(1), C3(1), C0(2), C1(2)), тогда при проверке подписи сообщения № 5 необходимо будет заново вычислить комбинацию C4(0), а остальные (C0(2),C3(1)) взять из таблицы, и т.д.. Указанный подход позволяет достичь компромисса между быстродействием и требованиям к занимаемому количеству дискового пространства.
Отметим, что отказ от хранения комбинаций одного уровня приводит к экономии памяти и росту вычислительных затрат примерно вдвое, то есть зависимость носит экспоненциальный характер.
Атаки на ЭЦП
Стойкость большинства схем ЭЦП зависит от стойкости ассиметричных алгоритмов шифрования и хэш-функций.
Существует следующая классификация атак на схемы ЭЦП:
атака с известыи открытым ключем.
Атака и известными подписанными сообщениями – противник, кроме открытого кюча имеет и набор подписанных сообщений.
Простая атака с выбором подписанных сообщений – противник имеет возможность выбирать сообщения, при этом открытый ключ он получает после выбора сообщения.
Направленная атака с выбором сообщения
Адаптивная атака с выбором сообщения.
Каждая атака преследует определенную цель, которые можно разделить на несколько классов:
полное раскрытие. Противник находит секретный ключ пользователя
универсальная подделка. Противник находит алгоритм, функционально аналогичный алгоритму генерации ЭЦП
селективная подделка. Подделка подписи под выбранным сообщением.
Экзистенциальная подделка. Подделка подписи хотя бы для одного случайно выбранного сообщения.
На практике применение ЭЦП позволяет выявить или предотвратить следующие действия нарушителя:
отказ одного из участников авторства документа.
Модификация принятого электронного документа.
Подделка документа.
Навязывание сообщений в процессе передачи – противник перехватывает обмен сообщениями и модифицирует их.
Имитация передачи сообщения.
Так же существуют нарушения, от которых невозможно оградить систему обмена сообщениями – это повтор передачи сообщения и фальсификация времени отправления сообщения.Противодействие данным нарушениям может остовываться на использовании временных вставок и строгом учете входящих сообщений.
Некоторые средства работы с ЭЦП
В настоящее время существует большое кодичество комплексов для работы с электронной подписью, или использующие ее.
Приведем некоторые из них:
PGP
Наиболее известный - это пакет PGP (Pretty Good Privacy) – (www.pgpi.org ), без сомнений являетющийся на сегодня самым распространенным программным продуктом, позволяющим использовать современные надежные криптографические алгоритмы для защиты информации в персональных компьютерах.
К основным преимуществам данного пакета, выделяющим его среди других аналогичных продуктов следует отнести следующие:
1. Открытость. Исходный код всех версий программ PGP доступен в открытом виде. Любой эксперт может убедиться в том, что в программе эффективно реализованы криптоалгоритмы. Так как сам способ реализации известных алгоритмов был доступен специалистам, то открытость повлекла за собой и другое преимущество - эффективность программного кода.
2. Стойкость. Для реализации основных функций использованы лучшие (по крайней мере на начало 90-х) из известных алгоритмов, при этом допуская использование достаточно большой длины ключа для надежной защиты данных
Бесплатность. Готовые базовые продукты PGP (равно как и исходные тексты программ) доступны в Интернете в частности на официальном сайте PGP Inc.
( www.pgpi.org ).
4. Поддержка как централизованной (через серверы ключей) так и децентрализованной (через «сеть доверия») модели распределения открытых ключей.
5.Удобство программного интерфейса. PGP изначально создавалась как продукт для широкого круга пользователей, поэтому освоение основных приемов работы отнимает всего несколько часов
Текущая версия – 7.0.3 для платформ Windows 9x/NT/2000, MacOS.
GNU Privacy Guard (GnuPG)
GnuPG (www.gnupg.org ) - полная и свободно распространяемая замена для пакета PGP. Этот пакет не использует патентованый алгоритм IDEA, и поэтому может быть использован без каких-нибудь ограничений. GnuPG соответсвует стандарту RFC2440 (OpenPGP).
Текущая версия – 1.0.4, платформы – Unices, Windows 9x/NT
Криптон
Пакет программ КРИПТОН®Подпись
(http://www.ancud.ru/crypto/crpodpis.htm )предназначен для использования электронной цифровой подписи (ЭЦП) электронных документов.
Программы пакета КРИПТОН®Подпись функционируют на компьютере, удовлетворяющем следующим требованиям:
наличие операционной системы Windows-95/98 или Windows NT 4.0;
наличие УКЗД серии КРИПТОН с соответствующим драйвером для Windows-95/98/NT или его программного драйвера-эмулятора для Windows - Crypton Emulator версии 1.3 или выше.
наличие Crypton API для Windows версии 2.2 или выше (входит в поставку УКЗД серии КРИПТОН и содержит также драйвер поставляемого УКЗД);
наличие манипулятора "мышь".
В стандартной поставке для хранения файлов открытых ключей используются дискеты. Помимо дискет, пакет КРИПТОН®Подпись дает возможность использования всех типов ключевых носителей (смарт-карт, электронных таблеток Touch Memory и др.), поддерживаемых текущей версией интерфейса SCApi, входящего в поставку Crypton API v2.2 и выше.
ВербаО ( http://www.ntc.spb.ru/def/verbao.htm )
Система криптографической защиты информации "Верба - О"
Система криптографической защиты информации (СКЗИ) "Верба - О" разработана Московским отделением Пензенского научно - исследовательского электротехнического института (МО ПНИЭИ), полномочным представителем которого в регионе является наш филиал.
СКЗИ "Верба-О" представляет собой программный комплекс, предназначенный для защиты информации при ее хранении на дисках и (или) передаче по каналам связи. СКЗИ "Верба - О" решает следующие задачи:
шифрование/расшифрование информации на уровне файлов;
генерацию электронной цифровой подписи (ЭЦП);
проверку ЭЦП;
обнаружение искажений, вносимых злоумышленниками или вирусами в защищаемую информацию.
СКЗИ "Верба - О" может поставляться в следующих вариантах:
в виде автономного рабочего места;
в виде модулей, встраиваемых в ПО заказчика.
СКЗИ "Верба - О" в различных модификациях функционирует под управлением операционных систем MS DOS v5.0 и выше, Windows95, Windows NT, UNIX (HP UX) на персональных ЭВМ, совместимых с IBM PC/ AT. Требуемый объем оперативной памяти не более 155 Кбайт. Кроме того, необходим накопитель на гибком магнитном диске (НГМД).
Алгоритм шифрования выполнен в соответствии с требованиями ГОСТ 28147-89 "СИСТЕМЫ ОБРАБОТКИ ИНФОРМАЦИИ. ЗАЩИТА КРИПТОГРАФИЧЕСКАЯ". Цифровая подпись выполнена в соответствии с требованиями ГОСТ Р34.10-94 "ИНФОРМАЦИОННАЯ ТЕХНОЛОГИЯ. КРИПТОГРАФИЧЕСКАЯ ЗАЩИТА ИНФОРМАЦИИ. ПРОЦЕДУРЫ ВЫРАБОТКИ И ПРОВЕРКИ ЭЛЕКТРОННОЙ ЦИФРОВОЙ ПОДПИСИ НА БАЗЕ АССИМЕТРИЧНОГО КРИПТОГРАФИЧЕСКОГО АЛГОРИТМА." Функция хэширования выполнена в соответствии с требованиями ГОСТ Р 34.11-94 "ИНФОРМАЦИОННАЯ ТЕХНОЛОГИЯ. КРИПТОГРАФИЧЕСКАЯ ЗАЩИТА ИНФОРМАЦИИ. ФУНКЦИЯ ХЭШИРОВАНИЯ".
Ключи шифрования симметричные. Ключи для подписи асимметричные.
При обработке информации на ПЭВМ СКЗИ "Верба - О" обеспечивает следующие показатели:
Операции PC/AT 486/33, ISA PC/AT 486/100 VESA
Шифрование 200 Кб/с 520 Кб/с
Вычисление хэш-функции 120 Кб/с 330 Кб/с
Формирование ЭЦП 0.3с 0.04 с
Проверка ЭЦП 0.7 с 0.2 с
СКЗИ "Верба - О" имеет сертификат ФАПСИ № 124-0264 от 10.04.99г.
Список литературы
1. Петров А.А Компьютерная безопасность. Криптографические методы защиты. ДМК Москва, 2000 г.
2. "Методы и средства защиты информации" (курс лекций) Авторские права: Беляев А.В. (http://www.citforum.ru/internet/infsecure/index.shtml)
3. Криптография (http://www.citforum.ru/internet/securities/crypto.shtml)
4. http://www.e-sign.ru
5. Александр Володин «Кто заверит ЭЦП» - журнал «Банковские системы» - ноябрь 2000 (http://www.bizcom.ru/system/2000-11/04.html)
6. Теоретические основы - Безопасность информационных систем –Криптографические системы (http://argosoft.webservis.ru/Base/Crypt.html#Механизмы шифрования )
7. Криптографические алгоритмы с открытым ключом (http://argosoft.webservis.ru/Base/RSAintro.html#Криптографические алгоритмы с открытым ключом)
8. Совpеменные кpиптогpафические методы защиты инфоpмации – Системы с откpытым ключом ( http://ppt.newmail.ru/crypto04.htm#Heading20 )
9. Криптография с открытым ключом: от теории к стандарту А.Н.Терехов, А.В.Тискин "Программирование РАН", N 5 (сентябрь-октябрь), 1994, стр. 17--22
(http://www1.tepkom.ru/users/ant/Articles/Pkcstand.html)
10. Баричев С.Г., Гончаров В.В., Серов Р.Е. Основы современной криптографии – Москва, Горячая линия – Телеком, 2001
Для подготовки данной работы были использованы материалы с сайта http://www.ed.vseved.ru/