3. КРИПТОГРАФИЧЕСКИЕ СИСТЕМЫ С ОТКРЫТЫМ КЛЮЧОМ
Первые криптографические системы с открытым ключем появились в конце 1970-х годов. От классических алгоритмов они отличаются тем, что для шифрования данных используется один ключ (открытый), а для дешифрования - другой (секретный). Данные, зашифрованные открытым ключем, можно расшифровать только секретным ключем. Следовательно, открытый ключ может распространяться через обычные коммуникационные сети и другие открытые каналы. Таким образом, устраняется главный недостаток стандартных криптографических алгоритмов: необходимость использовать специальные каналы связи для распределения ключей. Разумеется, секретный ключ не может быть вычислен из открытого ключа.
В настоящее время лучшим криптографическим алгоритмом с открытым ключем считается RSA (по имени создателей: Rivest, Shamir, Adelman). Перед изложением метода RSA определим некоторые термины.
Под простым числом будем понимать такое число, которое делится только на 1 и на само себя.
Взаимно простыми числами будем называть такие числа, которые не имеют ни одного общего делителя, кроме 1.
Под результатом операции i mod j будем понимать остаток от целочисленного деления i на j.
Наиболее важной частью алгоритма RSA, как и других алгоритмов с открытым ключем, является процесс создания пары открытый/секретный ключи. В RSA он состоит из следующих шагов.
1. Случайным образом выбираются два секретных простых числа, p и q, p¹ q.
2. Вычисляется r=p* q.
3. Вычисляется f =(p-1)* (q-1).
4. Выбираются открытый (Ко) и секретный (Кс) ключи, которые являются взаимно простыми с f и удовлетворяют условию (Ко* Кс) mod f = 1.
Чтобы зашифровать данные открытым ключем Ко, необходимо:
1) разбить исходный текст на блоки, каждый из которых может быть представлен в виде числа M(i)=0, 1, ..., n-1;
2) зашифровать последовательность чисел M(i) по формуле
C(i)=(M(i)Ко) mod n,
где последовательность чисел C(i) представляет шифротекст.
Чтобы расшифровать эти данные секретным ключем Кс, необходимо выполнить следующие вычисления:
M(i)=(C(i)Кс) mod n.
В результате будет получено множество чисел M(i), которые представляют собой исходный текст.
Приведем простой пример использования метода RSA для шифрования сообщения “CAB”. Для простоты будем использовать малые числа (на практике используются намного большие числа).
1. Выберем p=3, q=11.
2. Вычислим r=3*11=33.
3. Вычислим f =(p-1)*(q-1)=20.
4. Выберем секретный ключ Кс, который является взаимно простым с f , например Кс=3.
5. На основе Кс и f вычислим открытый ключ Ко. Для этого можно использовать расширение алгоритма Евклида:
BEGIN
g0=f ; g1=Kc;
u0=1; u1=0;
v0=0; v1=1;
i=1;
while gi¹ 0 do
begin
gi=uif +viKc;
y=gi-1 div gi;
gi+1=gi-1-ygi;
ui+1=ui-1-yui;
vi+1=vi-1-yvi;
i=i+1;
end;
Kо=vi-1;
if Kо<0 then Kо=Kо+f ;
END.
В соответствии с алгоритмом получаем Ко=7.
6. Представим шифруемое сообщение как последовательность целых чисел в диапазоне 2...28. Пусть букве А соответствует число 2, букве В - число 3, а букве С - число 4. Тогда сообщение “CAB” можно представить в виде последовательности чисел {5, 3, 4}. Зашифруем сообщение, используя открытый ключ Ко=7:
C1 = (57) mod 33 = 78125 mod 33 = 14,
C1 = (37) mod 33 = 2187 mod 33 = 9,
C3 = (47) mod 33 = 16384 mod 33 = 16.
7. Для расшифровки полученного сообщения {14, 9, 16} с помощью секретного ключа Кс=3, необходимо:
M1 = (143) mod 33 = 2744 mod 33 = 5,
M1 = (93) mod 33 = 729 mod 33 = 3,
M1 = (163) mod 33 = 4096 mod 33 = 4.
Таким образом, в результате дешифрования сообщения получено исходное сообщение {5, 3, 4} (“CAB”).
Криптостойкость алгоритма RSA основывается на предположении, что исключительно трудно определить секретный ключ по открытому, поскольку для этого необходимо решить задачу о существовании делителей целого числа. Данная задача является NP-полной, то есть не имеет эффективного (полиномиального) решения. Вопрос существования эффективных алгоритмов решения NP - полных задач является до настоящего времени открытым. Традиционные же методы для чисел, состоящих из 200 цифр (именно такие числа рекомендуется использовать), требуют выполнения огромного числа операций (около 1023).
4. АРХИТЕКТУРА СИСТЕМ ЗАЩИТЫ ДАННЫХ
В последнее время все большее распространение получают программы, предназначенные для защиты электронной информации. Они предоставляют пользователям возможность зашифровывать файлы (PGP), санкционировать доступ к накопителям (adm.sys), создавать секретные логические области на дисках (Norton Diskreet). Средства защиты данных все чаще встраивают в обычное ПО (например, СУБД).
Наилучшую защиту обеспечивают методы, основанные на шифровании информации. Они преобразуют данные в понятной форме (открытый текст) в непонятную форму (шифротекст). При этом становится невозможным извлечь из них смысл или изменить его. Для получения исходного текста из шифротекста выполняется обратный процесс - дешифрование. Метод преобразования информации называется криптографическим алгоритмом.
Существует немало криптографических алгоритмов, обеспечивающих достаточный уровень защиты информации (DES, RSA и др. ). Как правило, их программная реализация несложна, и они могут послужить основой хорошей системы защиты данных.
Однако выбор и реализация алгоритма шифрования - не единственная и не самая важная проблема при создании подобных систем. Необходимо разработать и реализовать еще как минимум два компонента:
1) управление ключами;
2) интерфейс с пользователем.
В соответствии с современными взглядами криптографический алгоритм должен удовлетворять следующим требованиям:
1) обладать известной криптостойкостью, выраженной в числе операций или количестве времени, необходимых для его взлома;
2) быть понятным;
3) секретность данных должна основываться только на секретности криптографических ключей.
Последнее требование означает, что секретным должен являться не алгоритм шифрования данных, а ключ, с помощью которого данные были зашифрованы. То есть знание алгоритма без знания ключа не дает возможности восстановить исходный текст из шифротекста. Соблюдение данного требования означает, что самой важной частью системы защиты данных является подсистема управления ключами.
Управление ключами включает в себя: генерирование, хранение, распределение ключей. Способ решения каждой из этих проблем сильно влияет на дизайн всей системы и ее эффективность. Сложность генерирования ключей заключается в том, что хороший криптографический ключ должен быть случайным числом. Встроенные генераторы псевдослучайных чисел, имеющиеся в большинстве систем программирования, не обеспечивают достаточного уровня случайности. При использовании их для генерирования ключей последние могут быть легко предугаданы или даже вычислены, что недопустимо. Проблема хранения подразумевает обеспечение секретности сгенерированных ключей. Большинство систем позволяют хранить ключи на диске вместе с информацией, защищая их паролем. Но данный метод нельзя признать приемлемым, потому что создание надежного доступа по паролю для PC проблематично. Проблема распределения ключей особенно остра в сетевых приложениях. Чтобы обмениваться зашифрованной информацией, удаленные пользователи должны иметь возможность обмениваться ключами. Очевидно, что в момент передачи ключей по обычным каналам связи они могут быть перехвачены. Решение этой проблемы требует применения специальных алгоритмов.
Интерфейс с пользователем должен обеспечивать простое и понятное выполнение всех функций системы, способствовать быстрому освоению работы с программой. Предпочтительным является интуитивно понятный оконный интерфейс с развитой системой контекстуально зависимой помощи.
Программа Pretty Good Privacy (PGP) фирмы Phil's Pretty Good Software использует шифрование с открытым ключом для защиты файлов данных и электронной почты. Программа PGP обладает многими полезными качествами, работает быстро, позволяет осуществлять сложные манипуляции с ключами, реализует электронные подписи, позволяет сжимать данные и хорошо эргономически спроектирована.
PGP выполняет следующие функции:
шифрование текстового файла стандартным криптографическим методом;
шифрование текстового файла с открытым ключом получателя;
подписание текстового файла секретным ключом;
расшифровка зашифрованного файла;
проверка целостности подписи подписанного файла.
Основные функции работы с ключами:
генерирование пары секретный/открытый ключи;
ведение каталогов открытых и секретных ключей;
подпись и удостоверение открытого ключа;
защита секретного ключа фразой пароля.
Кроме того, PGP выполняет множество дополнительных функций, которые расширяют ее возможности и повышают удобство работы с программой.
Основной особенностью системы является реализация криптографического алгоритма с открытым ключом RSA. Применение RSA обеспечивает секретность передачи данных через сети коммуникации, так как данные шифруются открытым ключом, а расшифровываются секретным. Открытые ключи могут свободно распространяться по любым каналам, потому что с их помощью невозможно декодировать сообщение. Таким образом, PGP эффективно решает важную проблему распределения криптографических ключей.
Алгоритм шифрования с открытым ключом значительно медленнее, чем стандартное шифрование с одним ключом. Поэтому PGP шифрует сообщения с помощью высококачественного быстрого стандартного алгоритма шифрования с одним ключом, используя временный произвольный ключ. Открытый ключ получателя используется только для шифровки этого временного стандартного ключа, который посылается вместе с зашифрованным текстом получателю. Получатель использует свой собственный секретный ключ, чтобы восстановить временный ключ, и затем применяет его для выполнения быстрого стандартного алгоритма декодирования с одним ключом, чтобы декодировать все зашифрованное сообщение. Данный подход позволяет совместить преимущества алгоритмов с открытым ключом с высокой надежностью и быстродействием стандартных алгоритмов.
Исходный текст программы PGP написан на языке C и включает в себя следующие модули:
pgp.c - головной модуль;
basslib.c - функции стандартного шифрования;
basslib2.c - санкционирование доступа по паролю;
keygen.c - подпрограммы генерации ключей алгоритма RSA;
random.c - подпрограммы генерирования случайных чисел;
rsalib.c - математические функции алгоритма RSA;
rsaio.c - функции ввода/вывода;
lfsr.c - подпрограмма реализации линейного сдвигового регистра (LFSR);
memmgr.c - функции распределения памяти;
md4.c - функции подписи сообщений;
Головной модуль pgp.c обеспечивает интерфейс системы с пользователем и взаимодействие ее компонентов. Входящая в него функция main() производит разбор командной строки, через которую пользователь указывает команду. В соответствии с командой main() производит последовательный вызов необходимых подпрограмм, обеспечивая их согласованную работу.
Модуль basslib.c реализует алгоритм BassOmatic. Это стандартный блоковый шифратор размером блока 256 байт. Он использут ключи размером 512, 1024 и 2048 бит (в зависимости от необходимого уровня криптостойкости). Он может использовать шифрование в режиме обратной связи.
Модуль keygen.c генерирует пару открытый/секретный ключи алгоритма RSA. Это непростая задача, требующая реализации многих численных алгоритмов. В kegen.c реализованы алгоритмы проверки простых чисел, быстрого просеивания простых чисел, проверки взаимной простоты двух чисел, алгоритм Евклида. Все эти алгоритмы оперируют со 100-битными числами.
Модуль random.c реализует подпрограмму генерирования случайных чисел, используемых для создания ключей алгоритмов RSA и BassOmatic. Случайные значения вычисляются как промежутки времени между нажатием пользователем на клавиатуру. Каждый полученный байт помещается в специальный буфер и становится доступным для функций модулей keygen и basslib.
В memmgr.c находятся функции управления памятью: выделение, освобождение, очистка.
Модуль rsalib.c реализует математические функции (в частности, возведение в степень) над операндами произвольной длины. Эти функции необходимы для шифрования/дешифрования данных алгоритмом RSA.
Взаимодействие модулей при выполнении типичных команд проиллюстрировано на схемах 4.1-4.3.
Схема 4.1. Генерирование пары открытый/секретный ключи для алгоритма RSA.
Схема 4.2. Шифрование файла стандартным криптографическим алгоритмом.
Схема 4.3. Шифрование файла открытым ключем получател
... не к ключам!) и поэтому может зашифровывать и дешифровывать любую информацию; 2.7 Выводы по разделу 2. Подводя итоги вышесказанного, можно уверенно заявить, что криптографическими системами защиты называються совокупность различных методов и средств, благодаря которым исходная информация кодируеться, передаеться и расшифровываеться. Существуют различные криптографические системы защиты, ...
... для блокировки загрузки с FDD; Интерфейс для блокировки загрузки с CD-ROM; Программное обеспечение формирования списков контролируемых программ; Документация. 2. Система защиты информации "Secret Net 4.0" Рис. 2.1. Назначение: Программно-аппаратный комплекс для обеспечения информационной безопасности в локальной вычислительной сети, рабочие ...
... » использовались раньше, а в наши дни они заложены практически в любой, даже самой сложной программе шифрования. Каждый из рассмотренных методов реализует собственный способ криптографической защиты информации и имеет собственные достоинства и недостатки, но их общей важнейшей характеристикой является стойкость. Под этим понимается минимальный объем зашифрованного текста, статистическим анализом ...
... " и т.п.), продвинутые платежные средства (такие, как цифровая наличность или цифровые чеки) фактически, с технологической точки зрения и есть реализация сложных криптографических протоколов. До недавнего времени (точнее, до середины 70-х гг.) вопроса об использовании фирмами и гражданами криптографии обычно не возникало. Однако, распространение быстродействующей вычислительной техники, с одной ...
0 комментариев