Автор: Пользователь скрыл имя, 16 Января 2012 в 13:38, реферат
Создает секретный ключ в формате PEM. bits - длина ключа. шифрует его одним из алгоритмов: des (56 бит), des3 (3-й des 168 бит) или idea (128 бит). При выборе алгоритма шифрования будет запрошен пароль для шифрации создаваемого секретного ключа (если алгоритм не указан, то секретный ключ не шифруется, чего делать ни в коем случае нельзя для личных ключей, т.к. некоторые серверы требуют отсутствие шифрации для сектетного ключа сервера).
Создание ключей и сертификатов в OpenSSL.
Генерация ключа:
openssl genrsa [-out file] [-des | -des3 | -idea] [-rand file] [bits]
Создает секретный
ключ в формате PEM. bits - длина ключа. шифрует
его одним из алгоритмов: des (56 бит), des3 (3-й
des 168 бит) или idea (128 бит). При выборе алгоритма
шифрования будет запрошен пароль для
шифрации создаваемого секретного ключа
(если алгоритм не указан, то секретный
ключ не шифруется, чего делать ни в коем
случае нельзя для личных ключей, т.к. некоторые
серверы требуют отсутствие шифрации
для сектетного ключа сервера). Опция -out
говорит программе, что вывод нужно осуществлять
не в stdout, а в файл file (опция -out присутствует
во множестве других компонентов openssl
и используется аналогичным образом для
указания выходного файла). Опция -rand указывает
на файл[ы] (разделенные «:»), из которых
будут считываться данные для установки
seed (зерна) генератора случайных чисел.
Создание публичного ключа на основе секретного:
openssl rsa -in filename [-out file] [-des | -des3 |-idea] [-check] [-pubout]
Утилита openssl rsa способна изменять пароль и алгоритм шифрования секретного ключа, будучи вызвана с параметром -in и -out. Если применить параметр -pubout, то в указанный файл -out будет записан публичный ключ, вычисленный на основе -in секретного.
Пример:
openssl rsa -in /etc/openssl/key.pem
-out /etc/openssl/pubkey.pem -pubout
Создание self-signed сертификата:
openssl req -new -x509 -key
CAkey.pem -out CAcert.pem -days 365
Основы работы с OpenSSL.
OpenSSL — это система
защиты и сертификации данных, название
SSL переводится, как система безопасных
сокетов (secure socket layer). 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 может использоваться во множестве случаев и умеет выполнять следующие задачи:
Cуществует также несколько вспомогательных утилит ssl:
Алгоритм 8 байт 64 байта 256 байт 1024 байта 8192 байт
md2 291.38k 817.15k 1109.67k 1218.56k 1256.11k
mdc2 868.57k 911.02k 914.01k 915.11k 917.50k
md4 4417.91k 24808.28k 51404.97k 70189.40k 78168.06k
md5 3905.61k 21142.91k 41515.69k 55489.54k 59091.63k
hmac(md5) 1536.42k 10381.81k 27585.13k 46119.35k 57671.68k
sha1 2458.59k 11965.97k 21560.58k 26889.22k 29143.66k
rmd160 2032.99k 9523.48k 16568.15k 20547.81k 22220.11k
rc4 28775.08k 39239.02k 41210.52k 41862.98k 41454.25k
des cbc 7586.90k 8411.44k 8580.28k 8627.29k 8612.52k
des ede3 2866.13k 3031.96k 3050.92k 3074.74k 3058.35k
idea cbc 4948.09k 5743.19k 5760.09k 5744.67k 5723.48k
rc2 cbc 2982.04k 3220.39k 3256.32k 3263.49k 3268.61k
rc5-32/12 cbc 19108.39k 24151.19k 24906.75k 25154.90k 25212.25k
blowfish cbc 11018.91k 12881.27k 12925.01k 12972.37k 13047.13k
cast cbc
10943.48k 12674.30k 12877.74k
12994.56k 13011.63k
Проверка алгоритмов асимметрического шифрования:
Подписывание Проверка За секунду подп. За секунду пров.
rsa 512 bits 0.0036s 0.0003s 281.4 3221.7
rsa 1024 bits 0.0184s 0.0009s 54.3 1072.9
rsa 2048 bits 0.1105s 0.0032s 9.0 315.6
rsa 4096 bits 0.7414s
0.0112s 1.3
89.4
dsa 512 bits 0.0032s 0.0038s 311.3 261.3
dsa 1024 bits 0.0093s 0.0116s 107.5 86.4
dsa 2048 bits 0.0309s 0.0377s 32.4 26.5
# openssl rand -rand .rnd 5
Wеб~
#
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/
# openssl genrsa -out /etc/openssl/key.pem -des3 -rand /var/log/messages 4096
Generating RSA private key
.....++*...++++++++*
Enter PEM passphrase:
Verify PEM passphrase:
После этого секретный ключ зашифровывается и записывается в файл (в текстовом виде). В начале ключа указывается алгоритм шифрования. Для создания публичного ключа rsa на основе секретного используется команда openssl rsa. Даная команда имеет следующий формат:
openssl rsa -in filename [-out
file] [-des | -des3 |-idea] [-check] [-pubout]
Утилита openssl rsa способна изменять пароль и алгоритм шифрования секретного ключа, будучи вызвана с параметром -in и -out. Если применить параметр -pubout, то в указанный файл -out будет записан публичный ключ, вычисленный на основе -in секретного. Например, создание публичного ключа на основании секретного:
openssl rsa -in /etc/openssl/key.pem
-out /etc/openssl/pubkey.pem -pubout
Изменение пароля и алгоритма шифрования секретного ключа с des3 на idea:
openssl rsa -in /etc/openssl/key.pem -out /etc/openssl/key1.pem -idea
Для создания ключей DSA используется утилита openssl gendsa, аналогичная genrsa, но есть два отличия: во-первых, для ключей DSA нельзя прямо указывать длину в битах и, во-вторых, ключи DSA могут генерироваться согласно некоторым параметрам, записанным в файл paramfile утилитой openssl dsaparam. dsaparam имеет следующий формат:
openssl dsaparam [-rand file{s}]
[-C] [-genkey] [-out file] numbits
где numbits — длина желаемого ключа, -С заставляет dsaparam вывести на stdout код на СИ для программной генерации DSA на основе необходимых параметров, а опция -genkey говорит, что в выходной файл, наряду с параметрами, дополнительно записывается созданный секретный ключ DSA, но нельзя его сразу же зашифровать, поэтому удобнее воспользоваться утилитой openssl gendsa, которая имеет схожий синтаксис с командой genrsa, но вместо числа бит указывается файл параметров, созданный dsaparam:
# openssl gendsa -out /etc/openssl/dsakey.pem -rand /boot/vmlinuz -idea paramfile
Enter PEM passphrase:
Verify PEM passphrase:
Для управления ключами dsa используется программа openssl dsa, которая абсолютно аналогична (в параметрах) утилите openssl rsa. Поэтому я просто приведу пример генерации публичного ключа DSA:
# openssl dsa -in /etc/openssl/dsakey.pem
-out /etc/openssl/pubdsakey.pem -pubout
Теперь настало время рассказать о компонентах openssl, выполняющих шифрование и хеширование данных. Для выполнения симметрического шифрования используется утилита openssl enc -cipher или ее сокращенная запись openssl cipher, где cipher — это одно из символических имен симметрических шифров. Наиболее популярными являются следующие: base-64 (преобразование в текстовый вид), bf (blowfish — 128 бит), des (56 бит), des3 (168 бит), rc4 (128 бит), rc5 (128 бит), rc2 и idea (128 бит). Для указания входного и выходного файлов используется опции -in и -out соответственно. Пароль для шифрования вводится с клавиатуры (можно указать в командной строке параметром -k, но это очень плохо по соображениям безопасности, т.к. большинство шеллов умеют сохранять историю командной строки, IMHO намного лучше ввести пароль непосредственно перед шифрованием, хотя эта опция полезна для скриптов, так что забывать о ней нельзя :). Учтите, что пароль не спрашивается при обработке файла base64, т.к. шифрования не происходит. Для расшифровки зашифрованных данных примените openssl cipher с опцией -d (алгоритм шифрования и дешифрования должен совпадать!), а для одновременной обработки данных base64 можно воспользоваться опцией -a. Шифрование по умолчанию происходит с подмешиванием, т.е. для выбора алгоритма подмешивания используется случайная соль (salt), в этом случае, если вы шифруете один и тот же файл в разное время одним и тем же алгоритмом и паролем, то результаты скорее всего будут разными (это затрудняет атаку по словарю). Также по умолчанию используется cbc-режим алгоритмов, когда ключ меняется в течение всего сеанса работы согласно передаваемым данным, этот прием очень сильно затрудняет брутфорс, т.к. атакующему сложно поймать нужный момент времени. Приведу несколько примеров:
Зашифруем файл, используя алгоритм des3:
# openssl des3 -in file -out file.des3
Расшифруем полученный файл:
# openssl des3 -d -in file.des3 -out file
Зашифруем файл, используя алгоритм blowfish(bf), и закодируем base64:
# openssl bf -a -in file -out file.bf64
Расшифруем его и обработаем сразу же base64:
# openssl bf -a -d -in file.bf64
-out file
Для вычисления хешей (их еще называют отпечатками или контрольными суммами) используется команда openssl dgst -hashalg или краткая форма openssl hashalg (первая команда может также выполнять манипуляции с ЭЦП, но об этом далее). Обычное использование данной команды таково:
Информация о работе Создание ключей и сертификатов в OpenSSL.