@ Карта сайта News Автора!

Bog BOS: OpenSSL: установка и измерение производительности

Последние изменения:
2024.11.22: sysadmin: systemd-journald (централизованное хранение)
2024.11.11: sysadmin: Linux: пространства имён
2024.11.06: sysadmin: настройка TCP/IP в Linux: виртуальный интерфейс и виртуальный мост
2024.10.25: sysadmin: Linux VFS, атрибуты, расширенные атрибуты, ACL

Последнее изменение файла: 2023.06.01
Скопировано с www.bog.pp.ru: 2024.11.23

Bog BOS: OpenSSL: установка и измерение производительности

Перед прочтением рекомендуется ознакомиться с основными криптографическими понятиями в статье о безопасности.

OpenSSL представляет собой реализацию протокола SSL (Secure Socket Layer v2/v3) и Transport Layer Security (TLS v1), доступную для бесплатного использования (и клиент и сервер). Включает криптографическую библиотеку: шифрование (des в разных режимах, des3, RC2, RC4, IDEA, Blowfish, AES-128, AES-256, cast, cast5); контрольные суммы (MD2, MD4, MD5, SHA, SHA-1, MDC2, RMD160); публичные ключи без ограничения длины (RSA, DSA, Diffie-Hellman); X.509v3 сертификаты (ASN1, PEM) (подписи cast, hmac, rc5), которую можно использовать как для SSL/TLS так и для других целей (шифрование файлов - openssl(1), OpenSSH, MySQL). Основана на библиотеке SSLeay. Ответственность за нарушение патентов лежит на пользователе (особенно IDEA, RC5, MDC2 - не скомпилированы в Red Hat Linux).

Поставляется две версии: normal (для обычного использования) и engine (поддержка аппаратного шифрования). В версии 0.9.7 поддержка аппаратного шифрования слита в основную версию.

Формат конфигурационного файла (openssl.cnf)

Файл настройки (обычно /usr/share/ssl/openssl.cnf или /usr/lib/ssl/openssl.cnf или /etc/openssl.cnf или /etc/pki/tls/openssl.cnf) делится на секции, разделяемые заголовками секций (строки до первого заголовка относятся к секции с именем default):

[ имя-секции ]

Комментарии начинаются с символа '#'. Секция состоит из строк вида: имя=значение (обычное использование кавычек и '\'). Имя может состоять из букв, цифр и символов ".,;_". Могут использоваться макроподстановки: $имя или ${имя} или $имя-секции::имя или ${имя-секции::имя}. Специальная секция ENV содержит значения переменных окружения. Значения сначала ищутся в указанной именованной секции (используется последнее найденное), а в отсутствии - в секции default.

Имя конфигурационного файла задаётся при компиляции или берётся из переменной окружения OPENSSL_CONF (SSLEAY_CONF) или задаётся ключом -config.

Задание парольной фразы

Задание парольной фразы (пароля) для основной утилиты openssl производится с помощью ключей -passin (расшифровка) или -passout (шифровка). Параметр ключа описывает источник парольной фразы (по умолчанию, она запрашивается с терминала):

Создание ключей

Создание частного ключа RSA производится командой openssl genrsa со следующими опциональными ключами:

Создание файла параметров для DSA и манипуляция с ним производится командой openssl dsaparam с ключами:

Создание частного ключа DSA производится командой openssl gendsa со следующими опциональными ключами:

Создание зашифрованного ключа своего корневого CA (предварительно создаётся БД CA):

cd /usr/share/ssl # в FC4 перенесена в /etc/pki
mkdir CA
echo "01" > CA/serial
touch CA/index.txt
mkdir CA/newcerts
chmod 700 CA/newcerts
mkdir CA/private
chmod 700 CA/private
openssl genrsa -des3 -out CA/private/ca.key 2048
chmod 400 CA/private/ca.key

Параноики могут спрятать ca.key в сейф и доставать только для подписи сертификатов.

Создание зашифрованных ключей серверов и почтовых клиентов:

cd /usr/share/ssl
mkdir private
chmod 700 private
openssl genrsa -des3 -out private/www.company.ru.key 2048
openssl genrsa -des3 -out private/test@company.ru.sign.key 2048
openssl genrsa -des3 -out private/test@company.ru.crypt.key 2048
chmod 400 private/www.company.ru.key private/test@company.ru.*.key

Снятие пароля:

openssl rsa -outform PEM -in www.company.ru.key -out www.company.ru.open.key

P.S. Это ж сколько спама начнёт приходить на test@company.ru!

Экспорт и импорт ключей в формате PKCS#8

Преобразование ключей из внутреннего формата PEM (или DER) в PKCS #8 и обратно производится командой "openssl pkcs8" с параметрами:

Запрос и создание сертификата

Параметры для команды запроса и создания сертификата (openssl req) хранятся в секции req конфигурационного файла:

Формат секций, задаваемых distinguished_name и attributes, зависит от значения параметра prompt. Если "no", то секция просто содержит имена и значения полей. Если же содержимое секции используется как шаблон для запроса, то для каждого поля определяются 4 параметра:

Имя поля может предваряться префиксом и точкой, которые удаляются при обработке, для того, чтобы можно было задавать несколько значений одного поля. В качестве имени поля можно использовать короткое или полное имя идентификатора объекта. Встроенные имена: commonName, countryName, localityName, organizationName, organizationUnitName, stateOrProvinceName, emailAddress, name, surname, givenName, dnQualifier. Дополнительные идентификаторы объектов задаются параметрами oid_file и oid_section.

Ключи команды запроса и создания сертификата (openssl req) в формате PKCS#10 или создания самоподписанного сертификата для самодельного корневого CA:

Для создания самоподписанного сертификата для самодельного корневого CA редактируем конфигурационный файл:


[ CA_default ]
...
# потребуется для subjectAltName
copy_extensions = copy

[ req ]
default_md         = sha1
default_bits       = 2048
default_keyfile    = privkey.pem
string_mask        = nombstr
distinguished_name = req_distinguished_name
attributes         = req_attributes
req_extensions     = v3_req
x509_extensions    = v3_ca

[ req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = RU
countryName_min                 = 2
countryName_max                 = 2
stateOrProvinceName             = State or Province Name (full name)
stateOrProvinceName_default     = Moscow
localityName                    = Locality Name (eg, city)
localityName_default            = Moscow
0.organizationName              = Organization Name (eg, company)
0.organizationName_default      = My Company Ltd
organizationalUnitName          = Organizational Unit Name (eg, section)
organizationalUnitName_default  = My department
commonName                      = Common Name (eg, your name or your server\'s hostname)
commonName_max                  = 64
emailAddress                    = Email Address
emailAddress_max                = 64

[ req_attributes ]
# пароль на отзыв сертификата
challengePassword               = A challenge password
challengePassword_min           = 4
challengePassword_max           = 20
unstructuredName                = An optional company name

[ v3_req_self ]
nsCertType = objsign,email,server

[ v3_req_server ]
nsCertType = server
basicConstraints = critical,CA:FALSE
extendedKeyUsage = serverAuth,nsSGC,msSGC
# ругается если переменная не определена
#subjectAltName          = "DNS:"${ENV::commonName}

[ v3_req_email ]
basicConstraints = critical,CA:FALSE
nsCertType = client,email
extendedKeyUsage = clientAuth,emailProtection
keyUsage = digitalSignature,keyEncipherment,nonRepudiation,dataEncipherment

[ v3_req_email_sign ]
basicConstraints = critical,CA:FALSE
nsCertType = client,email
extendedKeyUsage = clientAuth,emailProtection
keyUsage = digitalSignature,nonRepudiation

[ v3_req_email_crypt ]
basicConstraints = critical,CA:FALSE
nsCertType = client,email
extendedKeyUsage = clientAuth,emailProtection
keyUsage = keyEncipherment,dataEncipherment

[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment

[ v3_ca_self ]
basicConstraints = critical,CA:true
subjectKeyIdentifier = hash
nsCertType = objsign,sslCA,emailCA
keyUsage = digitalSignature,nonRepudiation,keyCertSign,cRLSign

[ v3_ca ]
authorityKeyIdentifier=keyid:always,issuer:always
basicConstraints = [critical,]CA:true
# не для самоподписанных сертификатов
# keyUsage = cRLSign, keyCertSign

# nsCertType = sslCA, emailCA

# subjectAltName=email:copy
# issuerAltName=issuer:copy

Создаём самоподписанный корневой сертификат (в CN указать что-то вида: "имя компании root Certificate"):

openssl req -new -x509 -extensions v3_ca_self -days 3650 -key CA/private/ca.key -out CA/ca.crt
# при обновлении
#openssl req -set_serial 0 -new -x509 -extensions v3_ca_self -days 3650 -key CA/private/ca.key -out CA/ca.crt
chmod 444 CA/ca.crt

Посмотреть на результат

openssl x509 -in CA/ca.crt -text

Выложить сертификат на HTTP сервер или распространить другими способами.

Импорт сертификата корневого CA в Firefox: Edit -> Preferences -> Advanced -> Certificates -> Manage Certificates -> Authorities -> Import.

Импорт сертификата корневого CA в Thunderbird: Tools -> Options -> Advanced -> Certificates -> Manage Certificates -> Authorities -> Import.

Импорт сертификата корневого CA в Mozilla: Edit -> Preferences -> Privacy & Security -> Certificates -> Manage Certificates -> Authorities -> Import.

Импорт сертификата корневого CA в IE: указать в обозревателе на содержащий сертификат файл и нажать правую кнопку, выбрать из меню "Установить сертификат" (Control Panel -> Users).

Создание запроса на сертификат сервера (CN должен быть равен имени хоста, которое будет указано в настройках клиентских программ; некоторые клиентские программы - Thunderbird - воспринимают записи типа *.company.ru):

mkdir certs
openssl req -new -reqexts v3_req_server -key private/www.company.ru.key -out certs/www.company.ru.csr

Создание запроса на сертификат почтового клиента:

openssl req -new -reqexts v3_req_email -key private/test@company.ru.key -out certs/test@company.ru.csr

или создание отдельных запросов на сертификаты для подписи и шифрования почтовых сообщений (CN - д.б. разный):

openssl req -new -reqexts v3_req_email_sign -key private/test@company.ru.sign.key -out certs/test@company.ru.sign.csr
openssl req -new -reqexts v3_req_email_crypt -key private/test@company.ru.crypt.key -out certs/test@company.ru.crypt.csr

Подпись сертификатов и ведение БД

При работе с сертификатами и CRL используется текстовая БД, которая хранится в отдельной директории (CA) и содержит файлы: сертификат CA (ca.crt), частный ключ CA (private/ca.key), серийный номер следующего сертификата (serial), индекс БД (index.txt). Нельзя запускать параллельно, так как никаких блокировок записи в файл не предусмотрено. Нельзя подписать 2 сертификата с одинаковым DN (TXT_DB error number 2). Первая колонка индекса БД содержит пометку:

Параметры для команды подписи сертификата (openssl ca) хранятся в секции, имя которой задаётся параметром default_ca в секции ca конфигурационного файла или ключом -name в командной строке:

Секция с описанием политики содержит переменные, имена которых совпадают с именами поле DN (поля запроса, имена которых отсутствуют в описании политики, молча удаляются, если не указан ключ -preserveDN), а значения могут быть следующими:

Параметры для команды подписи сертификата (openssl ca):

Параметры для работы с CRL (Certificate Revocation List):

Для подписи сертификатов самодельным корневым CA редактируем конфигурационный файл:

[ ca ]
default_ca      = CA_default

[ CA_default ]
dir             = ./CA                  # Where everything is kept
certs           = $dir/certs            # Where the issued certs are kept
crl_dir         = $dir/crl              # Where the issued crl are kept
database        = $dir/index.txt        # database index file.
new_certs_dir   = $dir/newcerts         # default place for new certs.
certificate     = $dir/ca.crt           # The CA certificate
serial          = $dir/serial           # The current serial number
crl             = $dir/crl.pem          # The current CRL
private_key     = $dir/private/ca.key   # The private key
RANDFILE        = $dir/private/.rand    # private random number file

x509_extensions = usr_cert              # The extentions to add to the cert

# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt        = ca_default            # Subject Name options
cert_opt        = ca_default            # Certificate field options

default_days    = 365                   # how long to certify for
default_crl_days= 30                    # how long before next CRL
default_md      = sha1                  # which md to use.
preserve        = no                    # keep passed DN ordering

policy          = policy_match

# политики для подписи сертификатов CA
[ policy_match ]
countryName             = match
stateOrProvinceName     = match
localityName            = match
organizationName        = match
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

# "расслабленные" политики
[ policy_anything ]
countryName             = optional
stateOrProvinceName     = optional
localityName            = optional
organizationName        = optional
organizationalUnitName  = optional
commonName              = supplied
emailAddress            = optional

[ usr_cert ]
basicConstraints        = CA:FALSE
# по умолчанию, сертификат можно использовать для всего, кроме сертифицирования
# nsCertType            = server
# nsCertType            = objsign
# nsCertType            = client, email
# nsCertType            = client, email, objsign
# This is typical in keyUsage for a client certificate.
# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
nsComment               = "OpenSSL Generated Certificate"
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid,issuer:always

[ usr_cert_email ]
basicConstraints        = critical,CA:FALSE
nsCertType              = client,email
nsComment               = "OpenSSL Generated Certificate"
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid,issuer:always
extendedkeyUsage        = clientAuth,emailProtection
keyUsage                = digitalSignature,keyEncipherment,nonRepudiation,dataEncipherment
subjectAltName		= email:copy

[ usr_cert_email_sign ]
basicConstraints        = critical,CA:FALSE
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid,issuer:always
subjectAltName          = email:copy
extendedKeyUsage        = clientAuth,emailProtection
keyUsage                = digitalSignature,nonRepudiation
nsCertType              = client,email
nsComment               = "OpenSSL Generated Certificate"

[ usr_cert_email_crypt ]
basicConstraints        = critical,CA:FALSE
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid,issuer:always
subjectAltName          = email:copy
extendedKeyUsage        = clientAuth,emailProtection
keyUsage                = keyEncipherment,dataEncipherment
nsCertType              = client,email
nsComment               = "OpenSSL Generated Certificate"

Подпись запроса на сертификат сервера от имени собственного корневого CA:

openssl ca -in certs/www.company.ru.csr -out certs/www.company.ru.crt
openssl verify -CAfile CA/ca.crt certs/www.company.ru.crt

Подпись запросов на сертификаты почтового клиента от имени собственного корневого CA:

openssl ca -in certs/test@company.ru.csr -out certs/test@company.ru.crt -extensions usr_cert_email
  или
openssl ca -in certs/test@company.ru.sign.csr -out certs/test@company.ru.sign.crt -extensions usr_cert_email_sign
openssl ca -in certs/test@company.ru.crypt.csr -out certs/test@company.ru.crypt.crt -extensions usr_cert_email_crypt
# проверка
openssl verify -CAfile CA/ca.crt certs/test@company.ru.sign.crt
openssl verify -CAfile CA/ca.crt certs/test@company.ru.crypt.crt
openssl x509 -in certs/test@company.ru.sign.crt -noout -text
openssl x509 -in certs/test@company.ru.crypt.crt -noout -text

Отзыв сертификата и создание CRL:

openssl ca -revoke certs/test@company.ru.crt
openssl ca -gencrl [ -crl_reason keyCompromise] -out company.ru.crl

Экспорт клиентских почтовых сертификатов в формате PKCS#12 (PFX)

Файлы в формате PKCS#12 (Personal Information Exchange Syntax Standard) содержат сертификат и частный ключ, предназначены для передачи подписанного сертификата клиента от CA клиенту.

Команда разбора файлов в формате PKCS#12 (openssl pkcs12) имеет следующие ключи:

Команда экспорта сертификатов в формате PKCS#12 (openssl pkcs12 -export) имеет следующие ключи:

Экспорт почтовых сертификатов клиента (запрашивается пароль для расшифровки ключа и пароль для шифрования на время передачи, т.к. включает приватный ключ!):

openssl pkcs12 -export -in certs/test@company.ru.sign.crt -inkey private/test@company.ru.sign.key -out private/test@company.ru.sign.p12 -descert -name 'mailbox имя-пользователя sign certificate' -caname 'название CA'
openssl pkcs12 -export -in certs/test@company.ru.crypt.crt -inkey private/test@company.ru.sign.key -out private/test@company.ru.sign.p12 -descert -name 'mailbox имя-пользователя crypt certificate' -caname 'название CA'

Импорт сертификатов и приватных ключей в формате PKCS #12 в Mozilla: Edit -> Preferences -> Privacy & Security -> Certificates -> Manage Certificates -> Your Certificates -> Import.

Ручной выбор сертификата в Mozilla: Edit -> Preferences -> Privacy & Security -> Certificates -> Ask Every Time.

Импорт сертификатов и приватных ключей в формате PKCS #12 в Thunderbird: Tools -> Options -> Advanced -> Manage Certificates -> Your Certificates -> Import.

Импорт сертификатов и приватных ключей в формате PKCS #12 в MS Outlook: Tools, Options and Security, import/export.

Настройка использования полученных сертификатов в Mozilla и Thunderbird: Edit -> Mail & Newsgroups Account Setting -> Security (в требуемой учётной записи); выбрать сертификат, содержащий ключи для подписи, и сертификат с ключами для шифрования.

Настройка использования полученных сертификатов в Thunderbird: Tools -> Mail & Newsgroups Account Setting -> Security (в требуемой учётной записи); выбрать сертификат, содержащий ключи для подписи, и сертификат с ключами для шифрования.

Для шифрования сообщения необходимо иметь сертификат получателя с его публичным ключом. Проще всего получить его из подписанного контрагентом сообщения (Netscape, Thunderbird и MS Outlook Express извлекают все публичные ключи из подписанных писем и складывают их в архив самостоятельно - на всякий случай).

Симметричное шифрование

openssl enc -aes256 -in исходный-файл -out зашифрованный-файл \
            -pass file:файл-с-парольной-фразой -md sha1

Установка

Установка 1.0.2q (1.1.0j, 1.1.1a не проходят тесты) на Linux Fedora 10 (экзотика)

  1. получить дистрибутив и разархивировать его
  2. доставить пакеты - perl-Module-Load-Conditional
  3. ./config --prefix=/usr/local/openssl1.0.2q --openssldir=/usr/local/openssl1.0.2q/etc [shared] enable-weak-ssl-ciphers enable-md2 enable-rc5 zlib # некоторые ключи
  4. make depend
  5. make
  6. make test
  7. make install
  8. [make install_docs_html]
  9. [make linux-shared]

Установка OpenSSL 0.9.7a на Fedora Core 3

OpenSSL 0.9.7a-40 (заплатки безопасности наложены, но почему не OpenSSL 0.9.7e?) устанавливается вместе с FC3: пакеты openssl и openssl-devel (pyOpenSSL-0.6-1.p23, perl-Crypt-SSLeay-0.51-5, pyOpenSSL-0.6-1.p23). IDEA, MD2C и RC5 отсутствуют, чтобы избежать проблем с патентами.

Установка OpenSSL 0.9.6 на Linux Red Hat 7.1

OpenSSL 0.9.6 устанавливается вместе с RH 7.1: пакеты openssl и openssl-devel (а также пакет openssl095a-0.9.5a-1 для совместимости). Причем пакет openssl неудаляем (libcrypto.so.1 и libssl.so.1 требуются для python, который нужен огромному числу других пакетов). IDEA и RC5 отсутствуют, чтобы избежать проблем с патентами. Стал значительно медленее (на некоторых тестах в 2.5 раза!) по сравнению с 0.9.5a, потому что скомпилирован с меньшим уровнем оптимизации (самостоятельно собранная под Solaris библиотека 0.9.6b чуть быстрее, чем 0.9.5a).

Установка OpenSSL 0.9.5a на Linux Red Hat 7.0

OpenSSL 0.9.5a устанавливается вместе с RH 7.0: пакеты openssl и openssl-devel. Причем пакет openssl неудаляем (libcrypto.so.0 и libssl.so.0 требуются для python, который нужен огромному числу других пакетов).

Установка 0.9.5a/0.9.6b на Solaris и Linux Red Hat 6.2

  1. получить дистрибутив и разархивировать его
  2. ./config
  3. в Solaris добавить /usr/ccs/bin к PATH
  4. make
  5. make test (тщательность тестирования впечатляет - и время тоже)
  6. make install (помещает 5MB в /usr/local/ssl, для RH 4.0 необходимо вручную создать библиотеки и закоментировать вызовы mkdir-p.pl)

Ключи config:

Измерение производительности

Скорость (openssl speed) на P4 2800 MHz (Intel D915PLB), FC3:

OpenSSL 0.9.7a Feb 19 2003
built on: Tue Oct  5 08:55:24 EDT 2004
options:bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) aes(partial) blowfish(idx)
compiler: gcc -fPIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DKRB5_MIT -DOPENSSL_NO_IDEA -DOPENSSL_NO_MDC2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_EC -I/usr/kerberos/include -DL_ENDIAN -DTERMIO -Wall -O2 -g -pipe -m32 -march=i686 -mtune=pentium4 -Wa,--noexecstack -DSHA1_ASM -DMD5_ASM -DRMD160_ASM
available timing options: TIMES TIMEB HZ=100 [sysconf value]
timing function used: times
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md2               1807.78k     3852.46k     5419.26k     6071.98k     6288.73k
mdc2                 0.00         0.00         0.00         0.00         0.00
md4              15241.31k    53824.77k   162998.61k   332831.06k   475570.18k
md5              13566.99k    51908.42k   161850.45k   340513.45k   498231.98k
hmac(md5)         7610.91k    29370.86k   102779.90k   259210.92k   470575.79k
sha1             13558.06k    43256.38k   120299.01k   209566.04k   269473.11k
rmd160           12819.31k    39786.52k    83672.27k   145334.95k   171963.73k
rc4              89555.22k   106739.88k   111524.27k   113503.23k   114543.27k
des cbc          56835.86k    59083.95k    59410.26k    59732.99k    59514.88k
des ede3         21191.84k    21500.86k    21656.92k    21633.02k    21493.08k
idea cbc             0.00         0.00         0.00         0.00         0.00
rc2 cbc          21842.01k    23500.78k    23735.98k    23686.49k    23587.50k
rc5-32/12 cbc        0.00         0.00         0.00         0.00         0.00
blowfish cbc     93026.94k    99430.44k   101743.62k   102699.69k   102252.54k
cast cbc         41901.01k    49243.52k    51145.22k    52097.71k    52224.00k
aes-128 cbc      58268.97k    58232.90k    59630.85k    59912.19k    59790.71k
aes-192 cbc      51133.59k    51053.57k    51906.73k    52268.03k    52461.57k
aes-256 cbc      45866.35k    45743.57k    46160.47k    46371.50k    46456.83k
                  sign    verify    sign/s verify/s
rsa  512 bits   0.0009s   0.0001s   1125.0  12622.2
rsa 1024 bits   0.0044s   0.0002s    225.7   4322.7
rsa 2048 bits   0.0267s   0.0008s     37.5   1305.2
rsa 4096 bits   0.1772s   0.0027s      5.6    366.2
                  sign    verify    sign/s verify/s
dsa  512 bits   0.0007s   0.0009s   1369.9   1148.7
dsa 1024 bits   0.0022s   0.0027s    458.5    376.5
dsa 2048 bits   0.0073s   0.0090s    136.9    110.9

Скорость (openssl speed) на PIII 917MHz ;) Linux RedHat:

OpenSSL 0.9.6 24 Sep 2000 / Linux Red Hat 7.1
built on: Wed Mar 14 11:58:32 EST 2001
options:bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) blowfish(idx) 
compiler: gcc -fPIC -DTHREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DNO_ASM
              -DNO_IDEA -DNO_MDC2 -DNO_RC5 -DL_ENDIAN -DTERMIO -O2 -march=i386
              -mcpu=i686 -Wall
The 'numbers' are in 1000s of bytes per second processed.
type              8 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md2                774.87k     2163.93k     2940.49k     3224.23k     3320.49k
mdc2                 0.00         0.00         0.00         0.00         0.00 
md4               9791.78k    54026.43k   109757.27k   146940.25k   163700.74k
md5               7194.21k    35212.20k    65486.93k    82989.40k    90292.22k
hmac(md5)         2861.76k    18317.65k    45815.64k    73081.17k    88738.47k
sha1              4400.32k    17984.73k    30425.77k    36694.36k    39081.30k
rmd160            3258.86k    14370.13k    24432.73k    29585.75k    31582.89k
rc4              45260.47k    61084.67k    63948.71k    64347.82k    64989.87k
des cbc           7060.09k     7639.62k     7718.23k     7733.59k     7735.98k
des ede3          2786.02k     2877.03k     2882.30k     2893.48k     2894.51k
idea cbc             0.00         0.00         0.00         0.00         0.00 
rc2 cbc           7103.06k     7617.51k     7691.09k     7701.50k     7708.67k
rc5-32/12 cbc        0.00         0.00         0.00         0.00         0.00 
blowfish cbc     21176.39k    26349.74k    27114.75k    27418.62k    27402.24k
cast cbc          8678.57k     9606.19k     9718.02k     9743.02k     9753.94k
                  sign    verify    sign/s verify/s
rsa  512 bits   0.0029s   0.0003s    344.1   3251.0
rsa 1024 bits   0.0182s   0.0011s     54.9    938.5
rsa 2048 bits   0.1213s   0.0036s      8.2    275.4
rsa 4096 bits   0.8450s   0.0131s      1.2     76.3
                  sign    verify    sign/s verify/s
dsa  512 bits   0.0032s   0.0039s    313.9    253.8
dsa 1024 bits   0.0103s   0.0125s     96.7     80.3
dsa 2048 bits   0.0357s   0.0435s     28.0     23.0

OpenSSL 0.9.5a 1 Apr 2000 / Linux Red Hat 6.2
built on: Птн Сен 22 03:44:31 MSD 2000
options:bn(64,32) md2(int) rc4(idx,int) des(ptr,risc1,16,long) idea(int) blowfish(idx) 
compiler: gcc -DTHREADS -D_REENTRANT -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer 
              -m486 -Wall -DSHA1_ASM -DMD5_ASM -DRMD160_ASM
The 'numbers' are in 1000s of bytes per second processed.
type              8 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md2                557.48k     1538.76k     2072.57k     2260.73k     2336.24k
mdc2              1983.99k     2051.47k     2058.43k     2061.10k     2060.41k
md5              10728.29k    57713.91k   105182.90k   137775.24k   151135.50k
hmac(md5)         3883.95k    25801.63k    68444.49k   116343.98k   142473.70k
sha1              6691.30k    30785.61k    54171.73k    66339.88k    71954.45k
rmd160            5487.01k    24718.34k    42169.30k    51317.41k    54692.54k
rc4              66635.32k    95527.91k   101365.23k   102609.63k   102703.41k
des cbc          18856.93k    20994.52k    21267.86k    21279.14k    21334.56k
des ede3          7169.83k     7364.71k     7475.48k     7531.05k     7530.02k
idea cbc          9725.22k    10510.84k    10666.52k    10668.41k    10688.09k
rc2 cbc           7736.04k     8306.01k     8281.95k     8411.94k     8406.42k
rc5-32/12 cbc    46514.77k    60379.66k    62773.41k    63105.13k    64324.27k
blowfish cbc     27262.56k    31648.43k    32247.04k    32087.75k    32208.08k
cast cbc         27350.20k    31417.17k    31966.64k    32172.91k    32141.88k
                  sign    verify    sign/s verify/s
rsa  512 bits   0.0014s   0.0001s    740.1   7194.5
rsa 1024 bits   0.0073s   0.0004s    136.1   2424.6
rsa 2048 bits   0.0449s   0.0014s     22.3    725.2
rsa 4096 bits   0.3055s   0.0048s      3.3    208.2
                  sign    verify    sign/s verify/s
dsa  512 bits   0.0014s   0.0017s    731.1    596.9
dsa 1024 bits   0.0039s   0.0047s    257.3    213.3
dsa 2048 bits   0.0129s   0.0158s     77.7     63.3

Скорость (openssl speed) на SparcServer10 Solaris 2.5:

OpenSSL 0.9.6b 9 Jul 2001
built on: Tue Jul 10 20:36:02 MSD 2001
options:bn(64,32) md2(int) rc4(ptr,char) des(idx,cisc,16,long) idea(int) blowfish(ptr) 
compiler: gcc -fPIC -DTHREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -mv8 -O3 
          -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W
The 'numbers' are in 1000s of bytes per second processed.
type              8 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md2                 68.67k      193.09k      262.31k      286.99k      295.03k
mdc2               171.64k      182.61k      183.98k      183.91k      180.83k
md4                880.28k     4091.41k     7156.48k     8785.51k     9433.13k
md5                680.21k     2730.01k     5061.27k     6458.37k     7015.08k
hmac(md5)          269.29k     1556.50k     3742.72k     5799.69k     6941.21k
sha1               384.08k     1731.93k     2980.05k     3642.37k     3893.93k
rmd160             308.99k     1214.02k     2094.93k     2537.09k     2703.36k
rc4               4831.43k     6341.70k     6545.12k     6613.33k     6632.79k
des cbc           1001.18k     1124.48k     1136.90k     1145.30k     1138.26k
des ede3           401.63k      422.53k      425.10k      424.62k      425.82k
idea cbc           801.69k      871.30k      878.53k      881.32k      882.01k
rc2 cbc            859.26k      944.19k      954.67k      954.82k      955.73k
rc5-32/12 cbc     2416.53k     3211.03k     3326.20k     3356.33k     3369.64k
blowfish cbc      1143.84k     1936.72k     2084.35k     2126.02k     2140.84k
cast cbc          1483.71k     1776.73k     1810.15k     1820.67k     1824.09k
                  sign    verify    sign/s verify/s
rsa  512 bits   0.0238s   0.0022s     42.1    457.4
rsa 1024 bits   0.1291s   0.0070s      7.7    142.5
rsa 2048 bits   0.8254s   0.0247s      1.2     40.5
rsa 4096 bits   5.7200s   0.0907s      0.2     11.0
                  sign    verify    sign/s verify/s
dsa  512 bits   0.0220s   0.0266s     45.4     37.5
dsa 1024 bits   0.0688s   0.0858s     14.5     11.7
dsa 2048 bits   0.2408s   0.2974s      4.2      3.4

Скорость (openssl speed) на SparcStation4 Solaris 2.5:

OpenSSL 0.9.6b 9 Jul 2001
built on: Tue Jul 10 20:58:12 MSD 2001
options:bn(64,32) md2(int) rc4(ptr,char) des(idx,cisc,16,long) idea(int) blowfish(ptr) 
compiler: gcc -fPIC -DTHREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -mv8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W
The 'numbers' are in 1000s of bytes per second processed.
type              8 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md2                 48.86k      138.71k      188.16k      207.53k      215.01k
mdc2               121.24k      137.45k      139.43k      140.29k      139.38k
md4                459.37k     2655.83k     5060.27k     6590.12k     7222.11k
md5                425.45k     1976.43k     3770.48k     4949.91k     5395.80k
hmac(md5)          188.01k     1043.22k     2637.31k     4191.57k     5259.26k
sha1               254.74k     1216.64k     2179.50k     2723.50k     2920.63k
rmd160             185.76k      517.99k     1195.09k     1776.98k     2061.65k
rc4               1905.84k     2609.39k     2704.04k     2737.83k     2727.94k
des cbc            622.21k      795.72k      822.37k      829.44k      808.65k
des ede3           274.83k      316.74k      321.02k      322.90k      319.49k
idea cbc           404.06k      470.71k      480.45k      478.67k      481.07k
rc2 cbc            573.00k      718.21k      737.11k      743.42k      737.28k
rc5-32/12 cbc     1157.04k     1971.43k     2118.74k     2169.86k     2160.71k
blowfish cbc       932.59k     1384.15k     1464.06k     1491.29k     1411.75k
cast cbc           711.37k     1209.13k     1305.43k     1338.71k     1275.22k
                  sign    verify    sign/s verify/s
rsa  512 bits   0.0421s   0.0039s     23.8    256.9
rsa 1024 bits   0.2240s   0.0122s      4.5     81.8
rsa 2048 bits   1.4314s   0.0431s      0.7     23.2
rsa 4096 bits   9.9750s   0.1589s      0.1      6.3
                  sign    verify    sign/s verify/s
dsa  512 bits   0.0383s   0.0459s     26.1     21.8
dsa 1024 bits   0.1192s   0.1476s      8.4      6.8
dsa 2048 bits   0.4221s   0.5155s      2.4      1.9

OpenSSL 0.9.5a 1 Apr 2000
built on: Fri Sep 22 05:01:55 MSD 2000
options:bn(64,32) md2(int) rc4(ptr,char) des(idx,cisc,16,long) idea(int) blowfish(ptr) 
compiler: gcc -DTHREADS -D_REENTRANT -mv8 -O3 -fomit-frame-pointer -Wall -DB_ENDIAN -DBN_DIV2W
The 'numbers' are in 1000s of bytes per second processed.
type              8 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
md2                 48.97k      139.26k      190.63k      209.58k      215.72k
mdc2               120.11k      128.96k      129.62k      129.71k      129.77k
md5                457.10k     2118.44k     3937.28k     4982.44k     5401.26k
hmac(md5)          186.18k     1131.79k     2805.59k     4419.93k     5278.38k
sha1               247.06k     1195.80k     2175.57k     2721.45k     2935.47k
rmd160             193.59k      524.50k     1206.27k     1778.47k     2061.65k
rc4               2485.27k     2714.56k     2745.17k     2741.25k     2730.67k
des cbc            664.97k      797.91k      815.53k      817.15k      794.54k
des ede3           287.57k      310.76k      316.02k      316.76k      312.98k
idea cbc           384.97k      467.39k      479.06k      481.28k      479.00k
rc2 cbc            621.84k      731.64k      745.90k      749.79k      740.27k
rc5-32/12 cbc     1383.39k     2060.78k     2180.10k     2196.14k     2187.26k
blowfish cbc       952.07k     1299.95k     1342.58k     1351.75k     1422.68k
cast cbc          1004.95k     1303.23k     1346.56k     1355.78k     1288.87k
                  sign    verify    sign/s verify/s
rsa  512 bits   0.0374s   0.0042s     26.7    235.4
rsa 1024 bits   0.2238s   0.0134s      4.5     74.9
rsa 2048 bits   1.4600s   0.0468s      0.7     21.4
rsa 4096 bits  10.3500s   0.1719s      0.1      5.8
                  sign    verify    sign/s verify/s
dsa  512 bits   0.0400s   0.0485s     25.0     20.6
dsa 1024 bits   0.1243s   0.1543s      8.0      6.5
dsa 2048 bits   0.4361s   0.5395s      2.3      1.9

Изменения

Изменения в 0.9.7b (2003.04.10) по сравнению с 0.9.7: возможность сборки без драйверов аппаратных устройств шифрования; защита от некоторых видов нетривиальных атак.

Изменения в 0.9.7 по сравнению с 0.9.6i: поддержка алгоритма Rijndael (AES); слита ветка engine (бинарной совместимости нет) и добавлены новые типы оборудования; утилита, проверяющая наличие аппаратных устройств шифрации и их возможности; ключ "-noverify" для "openssl passwd"; новая субкоманда "openssl ca -status"; новая субкоманда "openssl ca -updatedb"; новая субкоманда "openssl ca -extfile"; OCSP (Online Certificate Status Protocol) и улилиты работы с ним ("openssl ocsp"); опция -set_serial для команд req и x509; опция -subj для команд req и ca позволяет задавать или подменять информацию о субъекте при запросе; опции -verbose и -batch для команды "openssl req"; ключ "-HTTP" в программе s_server; опции nameopt и certopt в файле конфигурации ca; опция copy_extensions для команды "openssl ca"; поддержка CRL V2 (и ключи для "openssl verify", smime, s_client, s_server); поддержка Kerberos 5; сжатие (zlib) для TLS; опция utf8 для "openssl req"; поддержка Subject Information Access extension; изменен формат конфигурационного файла; правила выбора алгоритма шифрования COMPLEMENTOFALL и COMPLEMENTOFDEFAULT.

Изменения в 0.9.6i по сравнению с 0.9.6b: поддержка большого количества оборудования аппаратной шифрации, исправлены критические ошибки.

Изменения в 0.9.6b по сравнению с 0.9.6: исправлены ошибки и заделаны дырки в защите, ключ "-rand" для s_client и s_server.

Изменения в 0.9.6 по сравнению с 0.9.5a: MD4, SSL опции (в которых я не разбираюсь), поддержка разделяемых библиотек (хотя в RH 7.0 разделяемые библиотеки есть и для 0.9.5a), пароли в стиле MD5.

Ссылки

@ Карта сайта News Автора!

Bog BOS: OpenSSL: установка и измерение производительности

Последние изменения:
2024.11.22: sysadmin: systemd-journald (централизованное хранение)
2024.11.11: sysadmin: Linux: пространства имён
2024.11.06: sysadmin: настройка TCP/IP в Linux: виртуальный интерфейс и виртуальный мост
2024.10.25: sysadmin: Linux VFS, атрибуты, расширенные атрибуты, ACL



Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru