2.2.3 ElGamal

Разработан в 1985 году. Назван по фамилии автора - Эль-Гамаль. Алгоритм Эль-Гамаля может использоваться для формирования электронной подписи или для шифрования данных. Он базируется на трудности вычисления дискретного логарифма. Для генерации пары ключей сначала берется простое число p и два случайных числа g и x, каждое из которых меньше p. Затем вычисляется:

 

y = gx mod p

Общедоступными ключами являются y, g и p, а секретным ключом является х. Для подписи сообщения M выбирается случайное число k, которое является простым по отношению к p-1. После этого вычисляется a = gk mod p. Далее из уравнения M = (xa + kb) mod (p-1) находим b. Электронной подписью для сообщения M будет служить пара a и b. Случайное число k следует хранить в секрете. Для верификации подписи необходимо проверить равенство:

 

yaab mod p = gM mod p.

Пара a и b представляют собой зашифрованный текст. Следует заметить, что зашифрованный текст имеет размер в два раза больше исходного. Для дешифрования производится вычисление:

 

M = b/ax mod p

2.3 Сравнение cимметричных и аcимметричных алгоритмов шифрования

 

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

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

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

Обмен информацией можно осуществлять следующим образом:

·          получатель вычисляет открытый и секретный ключи, секретный ключ хранит в тайне, открытый же делает доступным;

·          отправитель, используя открытый ключ получателя, зашифровывает сеансовый ключ, который пересылается получателю по незащищенному каналу;

·          получатель получает сеансовый ключ и расшифровывает его, используя свой секретный ключ;

·          отправитель зашифровывает сообщение сеансовым ключом и пересылает получателю;

·          получатель получает сообщение и расшифровывает его.

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

 

2.4 Использование инструментов криптографии в Delphi-приложениях

 

2.4.1 CryptoAPI

Криптографические функции являются частью операционной системы Windows, и обратится к ним можно посредством интерфейса CryptoAPI. Основные возможности доступны еще с Windows 95, но со временем они расширялись. Описание функций CryptoAPI можно найти в MSDN, или в справочном файле к Delphi. Функции содержаться в библиотеках advapi32.dll и crypt32.dll.

 

2.4.2 Подключение к криптопровайдеру. Контейнеры ключей

Первая функция, которую мы рассмотрим, будет

function CryptAcquireContext(phProv :PHCRYPTPROV;

pszContainer :LPAWSTR;

pszProvider :LPAWSTR;

dwProvType :DWORD;

dwFlags :DWORD) :BOOL; stdcall;

 

В большинстве случаев, работа с криптографическими возможностями Windows начинается с вызова именно этой функции, которая выполняет подключение к криптопровайдеру и возвращает его дескриптор в параметре phProv. Криптопровайдер представляет собой dll, независимый программный модуль, который фактически исполняет криптографические алгоритмы. Криптопровайдеры бывают различные и отличаются составом функций (например, некоторые криптопровайдеры ограничиваются лишь цифровыми подписями), используемыми алгоритмами (некоторые шифруют алгоритмом RC2, другие - DES) и другими возможностями. В каждой операционной системе свой состав криптопровайдеров, однако в каждой присутствует Microsoft Base Cryptographic Provider v1.0. При вызове функции CryptAcquireContext, необходимо указать имя провайдера и его тип (соответственно в параметрах pszProvider и dwProvType). Тип провайдера определяет состав функций и поддерживаемые криптоалгоритмы, например:

Тип PROV_RSA_FULL

·          Обмен ключами - алгоритм RSA

·          Цифровая подпись - алгоритм RSA

·          Шифрование - алгоритм RC2 и RC4

·          Хэширование - алгоритмы MD5 и SHA

Тип PROV_RSA_SIG

·          Обмен ключами - не поддерживается

·          Цифровая подпись - алгоритм RSA

·          Шифрование - не поддерживается

·          Хэширование - алгоритмы MD5 и SHA

Microsoft Base Cryptographic Provider v1.0 относится к типу PROV_RSA_FULL и для этого типа используется по умолчанию (если в параметре pszProvider указать nil). В параметре pszContainer необходимо указать имя контейнера ключей, который мы собираемся использовать. Дело в том, что каждый криптопровайдер содержит базу данных, в которой хранятся ключи пользователей. Эти ключи группируются в контейнерах. Сохраняются только ключевые пары для асимметричных алгоритмов, сеансовые ключи не сохраняются, так как их не рекомендуют использовать повторно. Таким образом, каждый контейнер имеет имя и содержит по одному ключу (точнее паре открытый-закрытый ключ) для цифровой подписи и обмена ключами. В зависимости от криптопровайдера, база данных может храниться в файлах, реестре или в каких-либо аппаратных средствах, но это не влияет на работу программиста с контейнерами ключей. Если в качестве параметра pszContainer указать nil, то будет использоваться контейнер ключей, название которого совпадает именем пользователя, под которым был осуществлен вход в систему. Но так делать не рекомендуется: дело в том, что если два приложения использует один и тот же контейнер, одно из них может изменить или уничтожить ключи, необходимые для корректной работы другого приложения. Поэтому рекомендуют использовать контейнеры, имена которых совпадает с именем приложения.

Параметр dwFlags может быть нулевым или принимать одно из следующих значений:

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

CRYPT_NEWKEYSET - создает новый контейнер ключей, но сами ключи не создаются.

CRYPT_DELETEKEYSET - удаляет контейнер вместе с хранящимися там ключами. Если задан этот флаг, то подключение к криптопровайдеру не происходит и параметр phProv неопределен.

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

В случае успеха, функция возвращает true, в противном случае - false. GetLastError вернет код ошибки.

function CryptReleaseContext(hProv :HCRYPTPROV;

dwFlags :DWORD) :BOOL; stdcall;

 

Освобождает контекст криптопровайдера и контейнера ключей. hProv - дескриптор криптопровайдера, полученный при вызове CryptAcquireContext. dwFlags - зарезервирован и должен равняться нулю.

В случае успеха, функция возвращает true, в противном случае - false. GetLastError вернет код ошибки.

Приведем пример работы с этими функциями:

uses Wcrypt2;

...

procedure CryptProc;

var

Prov: HCRYPTPROV;

begin

CryptAcquireContext(@Prov,nil,nil,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT);

// Работаем с функциями CryptoAPI

...

CryptReleaseContext(Prov,0);

end;

 


Информация о работе «Защита персональных данных с помощью алгоритмов шифрования»
Раздел: Информатика, программирование
Количество знаков с пробелами: 50231
Количество таблиц: 14
Количество изображений: 1

Похожие работы

Скачать
62272
1
7

... для блокировки загрузки с FDD; Интерфейс для блокировки загрузки с CD-ROM; Программное обеспечение формирования списков контролируемых программ; Документация. 2. Система защиты информации "Secret Net 4.0" Рис. 2.1. Назначение: Программно-аппаратный комплекс для обеспечения информационной безопасности в локальной вычислительной сети, рабочие ...

Скачать
284992
7
0

... 6.0. – Microsoft Press, 1998. – 260 c. ISBN 1-57231-961-5 ТУЛЬСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ На правах рукописи Карпов Андрей Николаевич ЗАЩИТА ИНФОРМАЦИИ В СИСТЕМАХ ДИСТАНЦИОННОГО ОБУЧЕНИЯ С МОНОПОЛЬНЫМ ДОСТУПОМ Направление 553000 - Системный анализ и управление Программная подготовка 553005 – Системный анализ данных и моделей принятия решений АВТОРЕФЕРАТ диссертации на соискание степени ...

Скачать
66389
0
0

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

Скачать
134036
26
14

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

0 комментариев


Наверх