Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PoIRoCSaN_Lab_1.1(openssl).doc
Скачиваний:
9
Добавлен:
18.02.2023
Размер:
270.34 Кб
Скачать

Министерство образования Республики Беларусь

ПОЛОЦКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Кафедра вычислительных систем и сетей

Методические указания для выполнения лабораторной работы № 1.1 по курсу «Защита информационных ресурсов компьютерных систем и сетей» «Использование библиотеки OpenSsl»

Ассистент кафедры ВСиС

Составитель: Матюш М.В.

Полоцк 2012

Цель работы

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

Краткие теоретические сведения

OpenSSL - Эта свободно распространяемая библиотека предоставляет в распоряжение пользователя набор утилит, реализующих различные криптографические алгоритмы, такие как Triple-DES, Blowfish, AES, RSA и другие.

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

Сборка библиотеки

Качаем последнюю (или необходимую) версию по адресу http://www.openssl.org/source/ и распаковываем ее. На данный момент последняя версия — openssl-1.0.0a:

> tar xvpf openssl-1.0.0a.tar.gz

В каталоге ./openssl-1.0.0a/ запускаем скрипт конфигурации:

> ./config

Собираем:

> make

И устанавливаем:

> sudo make install

Проверить работоспособность и версию установленной библиотеки можно выполнив команду:

> openssl version

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

Генерация псевдослучайной последовательности

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

Листинг 1. Генерация ПСП

#include <openssl/rand.h>

Void main()

{

Int outf;

unsigned char buf[1024];

If(rand_bytes(buf, sizeof(buf))) { /* 1 succes, 0 otherwise */

outf = open("./rnd_bytes", O_CREAT|O_TRUNC|O_RDWR, 0600);

write(outf, buf, sizeof(buf));

} else printf("-ERR: RAND_bytes\n");

}

Сохраним этот код в файле rand_test.c и получим исполняемый файл формата ELF при помощи команды:

gcc -o rand_test rand_test.c -lssl

После запуска на выполнение файла rand_test в текущем каталоге будет создан файл rnd_bytes размером 1024 байта, содержащий сгенерированную ПСП.

Вычисление хэшей

Хэш - это механизм контроля целостности данных, обладающий специальными свойствами:

n зная сообщение, легко вычислить хэш. Обратная задача нахождения сообщения по известному хэшу является вычислительно-трудоемкой;

n для заданного сообщения хэш является уникальным, т.е. не должно существовать двух разных сообщений с одинаковыми хэшами.

Из всех существующих алгоритмов хэширования наибольшее распространение получил алгоритм MD5. Аббревиатура "MD" означает Message Digest (краткое изложение сообщения, или дайджест). В соответствии с этим алгоритмом, входной текст обрабатывается 512-битовыми блоками, разбитыми на шестнадцать 32-битовых подблоков. Выходом алгоритма является набор из четырех 32-битовых блоков, которые объединяются в единое 128-битное значение. Рассмотрим, как вычисляется хэш сообщения по алгоритму MD5 с использованием средств библиотеки.

Для вычисления хэша библиотека предоставляет в наше распоряжение функцию MD5:

unsigned char * MD5(const unsigned char *d, unsigned long n, unsigned char *md)

Эта функция принимает три параметра - указатель на буфер с исходными данными d, размер этого буфера n и указатель на буфер для хранения вычисленного хэша md. Это очень простая в использовании функция, но у нее есть недостаток - она пригодна для вычисления хэша данных, которые можно полностью разместить в оперативной памяти. Для файлов большого размера вычисление хэша производится поэтапно. Для этого библиотека предоставляет следующий набор функций (см. openssl/md5.h):