Русские документы
Ежедневные компьютерные новости RSS rusdoc.ru  Найти :
Новости
Последние поступления
Книжный магазин
  Hardware:
Видеоустройства
Системные платы
Процессоры
Мобильные устройства
Аудиосистема
Охлаждение системы
Накопители информации
КПК и ноутбуки
Телефоны и связь
Периферия
Система
Сети
Разные устройства
 
  Programming:
Web-разработка
Языки программирования
Технологии и теория
Разработка игр
Программная инженерия
 
  Software:
Операционные системы
Windows 7
Базы данных
Обзоры программ
Графика и дизайн
   
  Life:
Компьютерная жизнь
Разные материалы
   
Партнеры
Публикация
Правовая информация
Реклама на сайте
Обратная связь
Экспорт в RSS Экспорт в RSS2.0
    Читать в Яндекс.Ленте



Применение протокола Диффи-Хеллмана для защищенной передачи сообщений

Раздел: Programming / Криптография @ 01.02.2009 | Ключевые слова: Диффи-Хеллман криптография версия для печати

Автор: Евгений Архипочкин

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

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

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

К примеру, в качестве пар таких объектов могут выступать:

- модуль клиентской части системы и хранимый пакет, написанный на PL\SQL в СУБД Oracle;

- тот же пакет PL\SQL и библиотека, разработанная на C++ и функционирующая на уровне ОС сервера СУБД Oracle.

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

Для начала обратимся к теории [1]. Алгоритм Диффи-Хеллмана, относится к протоколам открытого распределения ключей и позволяет двум абонентам выработать общий секретный ключ путем динамического взаимодействия на основе обмена открытыми сообщениями без какой-либо общей секретной информации, распределяемой заранее.

Для выполнения алгоритма стороны должны договориться о значениях большого простого числа p и образующего элемента aмультипликативной группы . Для выработки общего ключа kони должны сгенерировать случайные числа x, 1 ≤ xp – 2 и y, 1 ≤ yp – 2, соответственно. Затем они должны обменяться сообщениями в соответствии с протоколом:

(1)       A → B: ax mod p

(2)       B → A: ax mod p

Искомый общий ключ теперь вычисляется по формуле:

k = (ay)x = (ax) y mod p

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

Пусть необходимо организовать  взаимодействие программных модулей A и B. Не важно, на каких языках программирования они разработаны, и в каких средах они функционируют, главное, чтобы на каждом субъекте взаимодействия были доступны следующие криптографические средства:

- функции зашифрования и расшифрования на основе алгоритма с закрытым ключом k:  b:=Enc(a, k) и а:=Dec(b, k) соответственно;

-  функция генерации псевдослучайного значения Rand( ).

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

Пусть инициатором взаимодействия выступает модуль A, которому необходимо защищенно получить от модуля Bсообщение message. В таком случае, взаимодействие можно построить следующим образом (см. схему 1).

Схема 1.

В модуле А:

 

 

1. Генерируются случайные значения rand1 и rand2.
2. Вычисляется открытый ключ модуля a_open_key = rand2(modp),  где p — простое число, примитивный элемент группы GF(p), a и p - константы
3. Вызывается функция B.f( ) модуля B, которой в качестве параметра передаётся rand1.

В модуле B:

4.  Генерируется случайное значение rand и вычисляется открытый ключ модуля B: b_open_key = rand1(modp).

5.  Вызывается функция A.g( ), в качестве аргумента которой передается b_open_key.

6.  Функция A.g( ) возвращает в качестве результата значение а_open_key.

7.  На основе ключа модуля Aа_open_keyвычисляется сеансовый ключ: sec_key2 = a_open_key rand(modp).

8.  На ключе rand1+sec_key2 (“+” — конкатенация) зашифровывается сообщение: message’= Enc(message, rand1+sec_key2);

9.  Возвращается зашифрованное message’ как результат вызова функции B.f( ).

В модуле А:

10. В модуле A вычисляется сессионный ключ g_key = b_open_key rand2(modp).

11.  На ключе rand1+g_key расшифровывается сообщение: message= Dec(message’, rand1+g_key).

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

Необходимо отметить, что протокол Диффи-Хеллмана является одним из самых простых протоколов распределения ключей и обладает определенными недостатками [1]. Известны более совершенные алгоритмы, например, STS (station-to-station), предполагающий дополнительное применение цифровой подписи, или протокол MTI (Мацумото-Такашима-Имаи) с модифицированной процедурой выработки общего ключа. Но рассмотренный в силу своей наглядности протокол Диффи-Хеллмана является удобным для реализации с помощью самых простых средств. После успешной реализации доработать его до STS вам не составит труда.

Литература.

1. Алферов А.П., Зубов А.Ю., Кузьмин А.С., Черемушкин А.В. Основы криптографии. 3-е изд., испр. и доп. — М.: Гелиос АРБ, 2005.

Евгений Архипочкин
Руководитель Группы проектирования систем защиты информации компании CBOSS
http://www.cboss.ru/

Это интересно:








версия для печатиРаспечатать статью


Вернуться в раздел: Programming / Криптография


Реклама:
Читать наc на:

Add to Google
Читать в Яндекс.Ленте






Rambler's Top100
© Copyright 1998-2012 Александр Томов. All rights reserved.