Смекни!
smekni.com

Криптографические системы (стр. 3 из 3)

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

Программа 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. Шифрование файла открытым ключем получателя.