На сайті 11893 реферати!

Усе доступно безкоштовно, тому ми не платимо винагороди за додавання.
Авторські права на реферати належать їх авторам.

Протокол SSL


Протокол SSL Handshake (Secure Sockets Layer — защищенный протокол) разработан корпорацией Netscape Communications для обеспечения безопасности и секретности интернет-соединений. Протокол поддерживает аутентификацию (установление подлинности) клиента и сервера, не зависит от приложений и прозрачен для протоколов HTTP, FTP и Telnet. Однако, SSL оптимизирован для протокола HTTP, а для FTP более предпочтителен IPSec (см. подп. 5.1.4).

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

Протокол SSL Handshake состоит из двух этапов: установление подлинности сервера и необязательное установление подлинности клиента. На первом этапе сервер в ответ на запрос клиента посылает свой сертификат и параметры шифрования. Затем клиент генерирует мастер-ключ, зашифровывает его открытым ключом сервера и отсылает серверу. Сервер расшифровывает мастер-ключ своим частным ключом и подтверждает свою подлинность клиенту, возвращая ему сообщение, заверенное мастером-ключом клиента.

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

SSL поддерживает разнообразные криптографические алгоритмы. В ходе установления связи используется криптосистема открытого ключа RSA. После обмена ключами используется много разных шифров: RC2, RC4, IDEA, DES и TripleDES. Также используется MD5 — алгоритм создания дайджеста сообщений (см. подп. 3.6.7). Синтаксис сертификатов открытого ключа описан в X.509 (см. подп. 1.5.3).

TLS — протокол, который основан и очень похож на SSL 3.0. Дополнительная информация о TLS 1.0 приведена в RFC 2246.

Следует также упомянуть WTLS (Wireless Transport Layer Security — беспроводной TLS), который определяет протокол для слоя безопасности в WAP (Wireless Access Protocol — протокол ббеспроводного доступа). WAP — фактический стандарт передачи и представления информации для беспроводных устройств типа мобильных телефонов и пейджеров. WTLS очень похож на TLS, но оптимизирован для узкополосных сетей.

Основы работы с OpenSSL

OpenSSL — это система защиты и сертификации данных, название SSL переводится, как система безопасных сокетов (secure socket layer). OpenSSL используется практически всеми сетевыми серверами для защиты передаваемой информацией. Существует программное API SSL (SSLEAY), позволяющее создавать безопасные сокеты с шифрацией передаваемых данных в собственных разработках. Но в данной статье я бы хотел рассказать о самой системе OpenSSL, вызываемой через командную строку.

Т.к. OpenSSL поддерживает очень много различных стандартов сертификации, шифрования, хеширования, то использование данной команды достаточно сложно. Внутри OpenSSL существуют отдельные компоненты, отвечающие за то или иное действие, для получения списка доступных компонентов можно вызвать openssl с параметрами list-standart-commands. Можно также получить список доступных алгоритмов хеширования (list-message-digest-commands) и алгоритмов шифрования (list-cipher-commands).

OpenSSL может использоваться во множестве случаев и умеет выполнять следующие задачи:

Создавать и управлять ключами RSA и DSA — команды rsa, dsa, dsaparam.

Создавать сертификаты формата x509, запросы на сертификацию, восстановление — команды x509, req, verify, ca, crl, pks12, pks7.

Зашифровывать данные с помощью симметрического или асимметрического шифрования — команды enc, rsautl.

Высчитывать хеши различных типов — команда dgst.

Работа с S/MIME — команда s/mime.

Проверка работы серверов и клиентов ssl — команды s_client, s_server.

Cуществует также несколько вспомогательных утилит ssl:

— openssl speed [список_алгоритмов_хеширования_или шифрования]:

тестирование скорости различных алгоритмов, если запускать без параметров, то тестируются все алгоритмы; алгоритмы внутри списка разделяются пробелом, например: openssl speed md5 rsa idea blowfish des 3des sha1. В конце работы выводится общая скорость работы различных алгоритмов (в 1000-х байт в секунду), для обработки различной длины блоков. Вот результат работы тестов скорости на моем домашнем компьютере (Celeron 366), на других машинах значения будут другими: См. таблицу 1

Проверка алгоритмов асимметрического шифрования: См таблицу 2

— openssl rand [-out file] [-rand file] num:

генерация num рандомных байт, можно использовать для проверки рандомизационной последовательности rand:

# openssl rand -rand .rnd 5
Wеб~
#

— openssl ciphers [-ssl2] [-ssl3] [-tls1] NAME: вывод доступных алгоритмов для обеспечения уровня безопасности NAME, где NAME — это символическое название группы алгоритмов. Обычно используются значения:
LOW — алгоритмы низкого уровня безопасности (<128 бит);
MEDIUM — алгоритмы среднего уровня стойкости (128 бит);
HIGH — алгоритмы высокой стойкости (>128 бит);
ALL — все алгоритмы;
NULL — алгоритмы без шифрования.

Обычно в настоящее время используются алгоритмы групп MEDIUM и HIGH, которые еще долго не смогут быть взломаны прямым перебором. Можно также вывести список алгоритмов из нескольких групп, разделив их «:» (например, MEDIUM:HIGH).

Теперь я бы хотел рассказать об основных утилитах openssl. Для начала о методах генерации ключей, затем о командах шифрования, и, наконец, о сертификатах, s/mime. Итак, пару слов о генерации ключей. Для создания rsa-ключей используется команда genrsa:

openssl genrsa [-out file] [-des | -des3 | -idea]

[-rand file] [bits]

Команда genrsa создает секретный ключ длиной bits в формате PEM, шифрует его одним из алгоритмов: des (56 бит), des3 (3-й des 168 бит) или idea (128 бит). При выборе алгоритма шифрования будет запрошен пароль для шифрации создаваемого секретного ключа (если алгоритм не указан, то секретный ключ не шифруется, чего делать ни в коем случае нельзя для личных ключей, т.к. некоторые серверы требуют отсутствие шифрации для сектетного ключа сервера). Опция -out говорит программе, что вывод нужно осуществлять не в stdout, а в файл file (опция -out присутствует во множестве других компонентов openssl и используется аналогичным образом для указания выходного файла). Опция -rand указывает на файл[ы] (разделенные «:»), из которых будут считываться данные для установки seed (зерна) генератора случайных чисел. В качестве таких файлов сразу же приходит на ум использовать что-то вроде /dev/random или /dev/urandom, но у меня с этим возникли проблемы: все вешалось наглухо, поэтому я рекомендую в этом случае использовать какие-нибудь сложно угадываемые файлы, вроде /var/log/messages или /boot/vmlinuz, думаю, что угадать содержимое этих файлов не намного проще, чем содержимое /dev/random, но работает этот фокус в любом *nix (опция -rand также присутствует во всех компонентах генерации и управления ключами и сертификатами). Использовать /dev/random и /dev/urandom, конечно, можно, но я для этого скопировал из /dev/random 32768 байт в файл .rnd таким образом:

dd if=/dev/[u]random of=.rnd count=64

Кроме этого, можно указывать в качестве -rand-файла EGD-сокет, который обеспечивает генерацию определенного количества случайных байт, EGD доступен на узле http://www.lothar.com/tech/crypto/. Установка генератора случайных чисел производится на основании хеша -rand файла, поэтому можно указывать файлы различной длины, т.к. хеш все равно имеет фиксированное число бит. Пример генерации 4096 битового секретного ключа RSA:

Перейти на сторінку номер: 1  2  3  4  5  6  7  8  9 Версія для друкуВерсія для друку   Завантажити рефератЗавантажити реферат