Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 сентября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Возможности языков семейства Си по истине безграничны, однако, в этой свободе кроются и недостатки: всегда нужно программисту держать ухо востро и контроллировать "переполнение буфера", чтобы потом программа не вылетала в "синий экран" на массе разнообразных версий Windows и железа у пользователей. Те же крэкеры и реверсеры специально ищут в коде программ на Си уязвимости, куда можно подсадить любой вирусный код, об этом более подробно автор рассказывал в своём видеокурсе здесь. Я там многое узнал и теперь мой код стал значительно более безопасный.

СПЕЦИАЛЬНАЯ ТЕХНИКА СРЕДСТВ СВЯЗИ

--------------------------------------------------------------------------------------------------------

Выпуск 1                                         Серия                                            1996 г.

Системы, сети и технические средства

конфиденциальной связи

 

УДК 621.391.7

 

Л.Н. САПЕГИН

 

ТИПИЧНЫЕ ДЕФЕКТЫ В КРИПТОГРАФИЧЕСКИХ ПРОТОКОЛАХ

 

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

 

1. Классификация криптографических протоколов

 

1.1. Протоколы шифрования / расшифрования.

 

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

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

 

1.2. Протоколы электронной цифровой подписи (ЭЦП).

 

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

 

1.3. Протоколы идентификации / аутентификации.

 

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

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

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

 

1.4. Протоколы аутентифицированного распределения ключей.

 

Протоколы этого класса совмещают аутентификацию пользователей с протоколом генерации и распределения ключей по каналу связи. Протокол имеет двух или трех участников; третьим участником является центр генерации и распределения ключей (ЦГРК), называемый для краткости сервером S.

Протокол состоит из трех этапов, имеющих названия: генерация, регистрация и коммуникация.

На этапе генерации сервер S генерирует числовые значения параметров системы, в том числе, свой секретный и открытый ключ.

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

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

 

2. Дефекты в криптографических протоколах

 

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

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

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

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

- протоколы с криптосистемой DH (Диффи, Хэллман);

- протоколы с криптосистемой RSA (Райвест, Шамир, Адлеман);

- протоколы с коммутативным шифрованием (Шамир);

- протоколы аутентифицированного распределения ключей;

- протоколы, основанные на тождествах.

 

3. Протоколы с криптосистемой DH

 

Исторически криптосистема DH является первой криптосистемой с открытыми ключами (КСОК), основанной на экспоненциальной однонаправленной функции. Сначала эта криптосистема использовалась как схема распределения ключей для классической симметричной криптосистемы с секретными общими ключами [ 2 ]. Предварительно все пользователи сети связи получают от сервера S по достоверному каналу системные константы (Р, ), где простое число Р и основание степени  выбираются надлежащим образом.

 

3.1. Протокол ключевого обмена DH

 

Пользователи А и В формируют секретный ключ парной связи Kab с помощью следующего протокола (Рис.1)

- Пользователь А от датчика случайных чисел (ДСЧ) генерирует случайное число Xa,  вычисляет и посылает его В.

- Пользователь В от своего датчика генерирует случайное число Xb, вычисляет и посылает его А.

- Пользователь А, получив число Yb от В, вычисляет.

- Пользователь В, получив число Ya от А, вычисляет.

Рис.1

 

Числа Xa, Xb  стираются. Поскольку  , то Kab = Kba .

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

А : ДСЧ (А)  Xa;      ;      [A B Ya]  B

В : ДСЧ (В)  Xb; КЗУ(В); ;

[BAYb]  A,

А :

Здесь: ║ - знак присоединения, [ ... ] - сформированное сообщение, КЗУ - ключевое запоминающее устройство.

Предполагается, что канал без ошибок и без воздействий противника (Е).

Атака 1. Еb - противник Е, играющий роль пользователя В, перехватывает сообщение от А к В и формирует ключ парной связи Kea=Kae, причем А считает, что это ключ связи с В (Рис.2):

А : ДСЧ (А)  Xa; ; [A B Ya] EbB

Eb : ДСЧ (E)  Xе; КЗУ(E); ;

                            [BAYe]  A

А :

 

Рис.2

 

Атака 2Еа, Еb - противник Е, играющий роли пользователей А и В, перехватывает сообщения от А и В, формирует ключи Kae и Keb парной связи с А и В путем ведения двух параллельных протоколов. В результате пользователи А и В считают, что они имеют конфиденциальную связь на ключе Kab; в действительности они установили шифрованную связь с перешифрованием у противника Е. (Рис.3).

 

 

Рис.3

 

А : ДСЧ (А)  Xa;      ;    [A B Ya] Eb

Eb : ДСЧ (E)  Xе; КЗУ(E); ;

                            [BAYe]  A

Ea : [ABYe]  B ,

А :

В : ДСЧ (В)  Xb     КЗУ(В); ;        [BAYb]  Ea, 

Ea :

 

3.2. Протокол аутентифицированного ключевого обмена DH [ 3 ]

 

После получения системных констант  от сервера S пользователи А,В,С, ... генерируют от ДСЧ секретные ключи Ха, Хb, Xc, ... ,  вычисляют открытые ключи ;         ;    ; ... и помещают их в защищенный от модификаций общедоступный справочник {Ya, Yb, Yc, ...}. (Рис.4).

 

Рис.4

 

Формальная запись протокола:

В : ДСЧ (В)  tb ; ;  [BAZ]  A

A : ДСЧ (A)  ta ; ;

            ;

  [ABUV] канал [] B

В=A(?); =B(?);;      

 

Здесь знак “~” означает возможность искажения каналом или модификации противником, знак “ ­ ” означает возведение в степень ,  - обратный к tb по mod (p-1), знак (?) после равенства означает, что проверяется выполнение равенства:  при невыполнении протокол разрывается, при выполнении осуществляется переход к следующей операции.

В результате ключ  при  U отличается от Kab , если выполняется проверка аутентичности . Отсюда следует

Атака 1. Противник Еа, играющий роль пользователя А, подменяет в канале сообщение [ABUV]  на [AB] с условием . В результате пользователь В формирует ложный ключ Kab .     

Атака 2. Противник Еb, играющий роль В, посылает А число , на что тот по протоколу отвечает числами (UV), где  В результате противник Е устанавливает с А ключ парной связи Kae, переданный по открытому каналу связи, причем А считает, что это ключ для связи с В. 

 

 

4. Протоколы с криптосистемой RSA

 

Предварительно все пользователи А, В, С, ...  сети связи генерируют личные модули na, nb, nc, ..., каждый из которых имеет структуру: n=pq произведения двух простых чисел p и q (na=paqa; nb=pbqb;  nc=pcqc; ... ),  выбранных надлежащим образом [ 2 ]. Затем каждый пользователь соответствующим образом выбирает пару чисел (e, d),  удовлетворяющих условию , где  Далее числа (n, e) в качестве открытого ключа отправляются по достоверному каналу в общедоступный справочник. Числа (p, q, , d) пользователи сохраняют в секрете.

 

4.1. Протокол шифрования и цифровой подписи по RSA [ 2 ]

 

Данный протокол рекомендован МККТТ, рекомендация Х.509. Дефект протокола состоит в неправильном порядке операции шифрования и подписывания: правильно сначала подписать, затем шифровать. В формальной записи протокола применяются следующие обозначения:

М - передаваемое сообщение от А к В;

Сb - шифрованное А сообщение М на ключе eb получателя В;

Сba - сообщение Сb, подписанное А на ключе da отправителя А.

    

   

Предполагается, что nb<na. Обоснование последних двух равенств состоит в следующих преобразованиях:

Атака1. Некоторый пользователь Х (нарушитель) перехватывает сообщение  (Рис.5), снимает ЭЦП пользователя А, пользуясь открытым ключом (na, ea).

 

 

Рис.5

 

Полученное шифрованное сообщение Сb он подписывает на своем секретном ключе dx, тем самым присваивая себе авторство на сообщение М. Получив сообщение , пользователь В снимает подпись Х с помощью открытого ключа (nx, ex), расшифровывает на своем секретном ключе db и выделяет сообщение М, которое считает сообщением от Х, но не от А, если само сообщение М не содержит признаков А.

Замечание: если na=nb, то операции шифрования и подписывания становятся перестановочными, так что снятие ЭЦП становится возможным при любом порядке этих операций.

 

4.2. Протокол шифрования по RSA на общем модуле

 

Пусть циркулярное сообщение М шифруется по криптосистеме RSA с общим модулем “n”. Пользователи А и В получают шифрованные сообщения ,

Атака1. Противник Е перехватывает шифрованные сообщения Са и Сb. Зная открытые  ключи  ea и eb, противник    по алгоритму Эвклида находит числа x, y так, что xea + yeb = 1 (с большой вероятностью числа ea и eb  взаимно просты). Тогда     В результате противник вычисляет сообщение М, зная только открытые ключи ea, eb  и модуль n, но не зная модуля , что равносильно знанию факторизации n=pq.

 

5. Протоколы с коммутативным алгоритмом шифрования [ 4 ]

 

Алгоритм шифрования называется коммутативным, если результат последовательного шифрования сообщения М на ключах К1 и К2 не зависит от порядка используемых ключей: К2{К1{M}}= =K1{K2{M}}, где K{M} - результат шифрования M на ключе К. Примерами коммутативного алгоритма шифрования являются алгоритм DH, алгоритм RSA при общем модуле, алгоритм гаммирования (сложения по модулю). Коммутативность алгоритма шифрования является здесь следствием коммутативности операций модульного умножения и сложения.

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

<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS