OpenSSL

редактировать
Реализация протоколов SSL и TLS с открытым исходным кодом

OpenSSL
OpenSSL logo.png
Разработчик (и) Проект OpenSSL
Первый выпуск1998 г.; 22 года назад (1998 г.)
Стабильный выпуск 1.1.1h (22 сентября 2020 г.; 38 дней назад (2020-09-22))
Предварительный выпуск 3.0 Alpha 7 (15 октября 2020 г.; 15 дней назад (2020-10-15))
Репозиторий Измените это в Wikidata
Написано наC, сборке, Perl
Type Cryptography library
License Apache License 2.0
Websitewww.openssl.org

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

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

OpenSSL Software Foundation (OSF) представляет проект OpenSSL в большинстве юридических прав, включая лицензионные соглашения участников, управление пожертвованиями и так далее. OpenSSL Software Services (OSS) также представляет проект OpenSSL для контрактов на поддержку.

OpenSSL доступен для большинства Unix-подобных операционных систем (включая Linux, macOS и BSD ) и Microsoft Windows.

Содержание
  • 1 История проекта
  • 2 Выпуски основных версий
  • 3 Алгоритмы
  • 4 Проверка FIPS 140
  • 5 Лицензирование
  • 6 Примечательный уязвимости
    • 6.1 Атаки по времени на ключи RSA
    • 6.2 Отказ в обслуживании: анализ ASN.1
    • 6.3 Уязвимость сшивания OCSP
    • 6.4 Уязвимость ASN.1 BIO
    • 6.5 Атака восстановления открытого текста SSL, TLS и DTLS
    • 6.6 Предсказуемые закрытые ключи (для Debian)
    • 6.7 Heartbleed
    • 6.8 Уязвимость CCS-инъекций
    • 6.9 DoS-атаки ClientHello
    • 6.10 Атака восстановления ключей на небольшие подгруппы Диффи – Хеллмана
  • 7 Вилок
    • 7.1 Агломерированный SSL
    • 7.2 LibreSSL
    • 7.3 BoringSSL
  • 8 См. Также
  • 9 Ссылки
  • 10 Внешние ссылки
История проекта

Проект OpenSSL был основан в 1998 г. предоставить бесплатный набор инструментов для шифрования кода, используемого в Интернете. Он основан на форке SSLeay Эрика Эндрю Янга и Тима Хадсона, разработка которого неофициально завершилась 17 декабря 1998 года, когда Янг и Хадсон оба приступили к работе в RSA Security. Первоначальными членами-учредителями были Марк Кокс, Ральф Энгельшалл, Стивен Хенсон, Бен Лори и Пол Саттон.

По состоянию на май 2019 года комитет по управлению OpenSSL состоял из 7 человек, из них 17 разработчики с доступом к фиксации (многие из которых также входят в состав комитета управления OpenSSL). Штатных сотрудников (стипендиатов) всего двое, остальные - волонтеры.

Бюджет проекта составляет менее одного миллиона долларов США в год и в основном он полагается на пожертвования. Разработка TLS 1.3 спонсируется Akamai.

Выпуски основных версий
История выпусков OpenSSL
ВерсияИсходная дата выпускаКомментарийПоследняя дополнительная версия
Старая версия, больше не поддерживается: 0.9.123 декабря 1998 г.
  • Официальный запуск проекта OpenSSL
0.9.1c (23 декабря 1998 г.)
Старая версия, больше не поддерживается: 0.9.222 марта 1999 г.
  • Преемник 0.9.1c
0.9.2b (6 апреля 1999 г.)
Старая версия, больше не поддерживается: 0.9.325 мая 1999 г.
  • Преемник 0.9.2b
0.9.3a (27 мая 1999 г.)
Старая версия, больше не поддерживается: 0.9.49 августа 1999 г.
  • Преемник 0.9.3a
0.9.4 (9 августа 1999 г.)
Старая версия, больше не поддерживается: 0.9.528 февраля 2000 г.
  • Преемник 0.9.4
0.9.5a (1 апреля 2000 г.)
Старая версия, больше не поддерживается: 0.9.624 сентября 2000 г.
  • Преемник 0.9.5a
0,9,6 млн (17 марта 2004 г.)
Старая версия, больше не поддерживается: 0. 9,731 декабря 2002 г.
  • Преемник 0,9,6 млн
0,9,7 млн ​​(23 февраля 2007 г.)
Старая версия, больше не поддерживается: 0,9,85 июля 2005 г.
  • Преемник 0.9.7m
0.9.8zh (3 декабря 2015 г.)
Старая версия, больше не поддерживается: 1.0.029 марта 2010 г.
  • Преемник 0.9.8n
1.0.0t (3 декабря 2015 г.)
Старая версия, больше не поддерживается: 1.0.114 марта 2012 г.1.0.1u (22 сентября 2016 г.)
Старый версия, больше не поддерживается: 1.0.222 января 2015
  • Преемник 1.0.1
  • Поддерживается до 31.12.2019 (Долгосрочная поддержка)
  • Поддержка Suite B для TLS 1.2 и DTLS 1.2
  • Поддержка DTLS 1.2
  • автоматический TLS эллиптическая кривая (EC) выбор
  • API для установки TLS поддерживаемые алгоритмы подписи и кривые
  • API конфигурации SSL_CONF
  • TLS Brainpool support
  • ALPN support
  • Поддержка CMS для RSA -PSS, RSA-OAEP, ECDH и DH
1.0.2u (20 декабря 2019 г. (2019-12-20))
Старая версия, больше не поддерживается: 1.1.025 августа 2016 г. (2016-08-25)
  • Преемник 1.0.2h
  • Поддерживается до 11.09.2019
  • Поддержка BLAKE2 (RFC 7693 )
  • Поддержка ChaCha20 - Poly1305 (RFC 7539 )
  • Поддержка X25519 (RFC 7748 )
  • Поддержка DANE и Прозрачность сертификата
  • Поддержка CCM Ciphersuites
  • Поддержка e xtended master secret
  • SSLv2 удален
  • Поддержка набора шифров Kerberos удалена
  • RC4 и 3DES удалены из набора шифрования DEFAULT в libssl
  • Удалить DSS, SEED, IDEA, CAMELLIA, и AES-CCM из списка шифрования DEFAULT
  • Поддержка 40- и 56-битных шифров удалена из libssl
1.1.0l (10 сентября 2019 г. (2019-09-10))
Текущая стабильная версия: 1.1.111 сентября 2018 г. (2018-09-11)
  • Поддерживается до 2023-09-11 (долгосрочная поддержка)
  • Поддержка TLS 1.3
  • Поддержка SHA-3
  • Поддержка X448 и Ed448 (RFC 7748 )
  • Поддержка SipHash
  • Поддержка ARIA
  • Поддержка multi-prime RSA (RFC 8017 )
  • Support for, SM3 и SM4
  • Heartbeat удалено
  • Поддержка QNX удалена
1.1.1h (22 сентября 2020 г. (2020-09-22))
Будущий выпуск: 3.0.0Н / ДН / Д
Условные обозначения: Старая версия Старая версия, все еще поддерживается Последняя версия Последняя предварительная версия Будущий выпуск
Алгоритмы

OpenSSL поддерживает ряд различных криптографических алгоритмов:

Шифры
AES, Blowfish, Camellia, Chacha20, Poly1305, SEED, CAST-128, DES, IDEA, RC2, RC4, RC5, Triple DES, ГОСТ 28147-89, SM4
Криптографические хеш-функции
MD5, MD4, MD2, SHA-1, SHA-2, SHA-3, RIPEMD-160, MDC-2, ГОСТ Р 34.11-94, BLAKE2, Whirlpool, SM3
Криптография с открытым ключом
RSA, DSA, Обмен ключами Диффи – Хеллмана, Эллиптическая кривая, X25519, Ed25519, X448, Ed448,,

(Полная прямая секретность поддерживается с помощью эллиптической кривой Диффи – Хеллмана начиная с версии 1.0.)

Проверка FIPS 140

FIPS 140 - это федеральная программа США по тестированию и сертификации криптографических модулей. Ранний сертификат FIPS 140-1 для OpenSSL FOM 1.0 был отозван в июле 2006 года, «когда возникли вопросы о взаимодействии проверенного модуля с внешним программным обеспечением». Модуль был повторно сертифицирован в феврале 2007 года, прежде чем уступить место FIPS 140-2. OpenSSL 1.0.2 поддерживает использование объектного модуля OpenSSL FIPS (FOM), который был создан для доставки утвержденных FIPS алгоритмов в среде, утвержденной FIPS 140-2. OpenSSL неоднозначно решил классифицировать архитектуру 1.0.2 как «End of Life» или «EOL» с 31 декабря 2019 года, несмотря на возражения, что это единственная версия OpenSSL, которая в настоящее время доступна с поддержкой режима FIPS. В результате EOL многие пользователи не смогли должным образом развернуть FOM 2.0 и перестали соответствовать требованиям, поскольку не обеспечили расширенную поддержку для архитектуры 1.0.2, хотя сам FOM оставался валидированным еще восемь месяцев.

Объектный модуль FIPS 2.0 оставался подтвержденным FIPS 140-2 в нескольких форматах до 1 сентября 2020 года, когда NIST отказался от использования FIPS 186-2 для стандарта цифровой подписи и обозначил все не -соответствующие модули как «Исторические». Это обозначение включает предупреждение для федеральных агентств о том, что они не должны включать модуль в какие-либо новые закупки. Все три проверки OpenSSL были включены в список устаревших: объектный модуль OpenSSL FIPS (сертификат № 1747), OpenSSL FIPS Object Module SE (сертификат № 2398) и OpenSSL FIPS Object Module RE (сертификат № 2473). Многие проверки и клоны на основе OpenSSL под частной торговой маркой, созданные консультантами, также были перемещены в Исторический список, хотя некоторые проверенные FIPS модули с заменой совместимости избежали устаревания, например BoringCrypto от Google и CryptoComply от SafeLogic.

По состоянию на октябрь 2020 года OpenSSL не имеет активной проверки FIPS 140. Давно обещанная архитектура 3.0 обещает восстановить режим FIPS и планируется пройти тестирование FIPS 140-2, но значительные задержки поставили этот план под сомнение. Впервые эта работа была начата в 2016 году при поддержке SafeLogic и дальнейшей поддержке со стороны Oracle в 2017 году, но процесс оказался чрезвычайно сложным. FIPS 140-2 завершает тестирование 21 сентября 2021 года, и о желании Управляющего комитета OpenSSL пересмотреть свои усилия, чтобы отразить стандарты FIPS 140-3 для тестирования после этой даты, неизвестно.

Лицензирование

OpenSSL имеет двойную лицензию в соответствии с Лицензией OpenSSL и Лицензией SSLeay, что означает, что применяются условия обеих лицензий. Лицензия OpenSSL - лицензия Apache 1.0, а лицензия SSLeay имеет некоторое сходство с 4-пунктами Лицензия BSD.

, поскольку лицензия OpenSSL - Лицензия Apache 1.0, но не Apache. Лицензия 2.0 требует, чтобы фраза «этот продукт включает программное обеспечение, разработанное OpenSSL Project для использования в OpenSSL Toolkit», появлялась в рекламных материалах и при любых распространениях (разделы 3 и 6 лицензии OpenSSL). Из-за этого ограничения лицензия OpenSSL и лицензия Apache License 1.0 несовместимы с GNU GPL. Некоторые разработчики GPL добавили к своим лицензиям исключение OpenSSL, которое конкретно разрешает использование OpenSSL с их системой. GNU Wget и climm оба используют такие исключения. Некоторые пакеты (например, Deluge ) явно изменяют лицензию GPL, добавляя дополнительный раздел в начале лицензии, документирующий исключение. Другие пакеты используют лицензию LGPL GnuTLS и лицензию MPL NSS, которые выполняют одну и ту же задачу.

OpenSSL объявил в августе 2015 года, что потребует от большинства участников подписать лицензионное соглашение участника (CLA), и что OpenSSL в конечном итоге будет перелицензирован в соответствии с условиями Лицензия Apache 2.0. Этот процесс начался в марте 2017 года и был завершен в 2018 году.

Заметные уязвимости

Временные атаки на ключи RSA

14 марта 2003 года временная атака на ключи RSA было обнаружено, что указывает на уязвимость в OpenSSL версий 0.9.7a и 0.9.6. Этой уязвимости был присвоен идентификатор CAN-2003-0147 в проекте Common Vulnerabilities and Exposures (CVE). Ослепление RSA не было включено по умолчанию в OpenSSL, так как это нелегко сделать при предоставлении SSL или TLS с использованием OpenSSL.

Отказ в обслуживании: анализ ASN.1

OpenSSL 0.9.6k содержал ошибку, из-за которой определенные последовательности ASN.1 вызывали большое количество рекурсий на машинах Windows, обнаружено 4 ноября 2003 г. Windows не могла правильно обрабатывать большие рекурсии, поэтому OpenSSL вылетал из строя. Возможность отправлять произвольно большое количество последовательностей ASN.1 может привести к сбою OpenSSL.

Уязвимость сшивания OCSP

При создании рукопожатия клиент мог отправить неправильно отформатированное сообщение ClientHello, что привело к синтаксическому анализу OpenSSL больше, чем конец сообщения. Проект CVE присвоил идентификатор CVE - 2011-0014, это затронуло все версии OpenSSL от 0.9.8h до 0.9.8q и OpenSSL 1.0.0 до 1.0.0c. Так как синтаксический анализ мог привести к чтению по неверному адресу памяти, злоумышленник мог вызвать DoS. Также было возможно, что некоторые приложения раскрывают содержимое проанализированных расширений OCSP, в результате чего злоумышленник может прочитать содержимое памяти, полученное после ClientHello.

Уязвимость ASN.1 BIO

При использовании базовых функций ввода / вывода (BIO) или FILE для чтения ненадежных данных формата DER OpenSSL уязвим. Эта уязвимость была обнаружена 19 апреля 2012 г., и ей был присвоен идентификатор CVE CVE -2012-2110. Хотя это не повлияло напрямую на код SSL / TLS OpenSSL, любое приложение, использующее функции ASN.1 (особенно d2i_X509 и d2i_PKCS12), также не было затронуто.

Атака восстановления открытого текста SSL, TLS и DTLS

При обработке наборов шифров CBC в SSL, TLS и DTLS OpenSSL оказался уязвимым для атаки по времени во время обработки MAC. Надхем Альфардан и Кенни Патерсон обнаружили проблему и опубликовали свои выводы 5 февраля 2013 года. Уязвимости был присвоен идентификатор CVE CVE -2013-0169.

Предсказуемые закрытые ключи (для Debian)

Генератор псевдо случайных чисел OpenSSL получает энтропию с помощью сложных методов программирования. Чтобы инструмент анализа Valgrind не выдавал связанных предупреждений, разработчик дистрибутива Debian применил патч к варианту Debian пакета OpenSSL, который случайно нарушил его генератор случайных чисел, ограничив общее количество закрытых ключей, которые он может сгенерировать, 32 768. Неисправная версия была включена в выпуск Debian от 17 сентября 2006 г. (версия 0.9.8c-1), а также поставила под угрозу другие дистрибутивы на основе Debian, например, Ubuntu. Готовые к использованию эксплойты легко доступны.

Debian сообщил об ошибке 13 мая 2008 г. В дистрибутиве Debian 4.0 (etch) эти проблемы были исправлены в версии 0.9.8c-4etch3, а исправления для дистрибутива Debian 5.0 (lenny) были предоставлены в версии 0.9.8g-9.

Heartbleed

Логотип, представляющий ошибку Heartbleed

OpenSSL версий с 1.0.1 по 1.0.1f имел серьезную ошибку обработки памяти в реализации расширения TLS Heartbeat Extension, которое можно было использовать для выявления до 64 КБ памяти приложения с помощью каждые биение (CVE -2014-0160 ). Считывая память веб-сервера, злоумышленники могут получить доступ к конфиденциальным данным, включая закрытый ключ сервера. Это может позволить злоумышленникам декодировать ранее перехваченные сообщения, если используемый протокол шифрования не обеспечивает совершенную прямую секретность. Знание закрытого ключа также может позволить злоумышленнику организовать атаку «человек посередине» против любых будущих сообщений. Уязвимость также может выявить незашифрованные части конфиденциальных запросов и ответов других пользователей, включая файлы cookie сеанса и пароли, которые могут позволить злоумышленникам перехватить личность другого пользователя службы.

На момент раскрытия информации 7 апреля 2014 г. около 17% или полмиллиона защищенных веб-серверов Интернета, сертифицированных доверенными органами, считались уязвимыми для атака. Однако Heartbleed может повлиять как на сервер, так и на клиента.

Уязвимость внедрения CCS

Уязвимость CCS Injection (CVE -2014-0224 ) - это уязвимость обхода безопасности, которая возникает из-за слабости методов OpenSSL, используемых для ввода ключей material.

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

Клиенты OpenSSL уязвимы во всех версиях OpenSSL до версий 0.9.8za, 1.0.0m и 1.0.1h. Известно, что серверы уязвимы только в OpenSSL 1.0.1 и 1.0.2-beta1. Пользователям серверов OpenSSL до 1.0.1 рекомендуется выполнить обновление в качестве меры предосторожности.

ClientHello sigalgs DoS

Эта уязвимость (CVE -2015-0291 ) позволяет кто угодно может взять сертификат, прочитать его содержимое и точно изменить его, чтобы использовать уязвимость, вызывающую сбой сертификата на клиенте или сервере. Если клиент подключается к серверу OpenSSL 1.0.2 и повторно согласовывает с недопустимым расширением алгоритмов подписи, происходит разыменование нулевого указателя. Это может вызвать DoS-атаку на сервер.

Исследователь Stanford Security Дэвид Рамос (David Ramos) обнаружил частный эксплойт и представил его команде OpenSSL, где они исправили проблему.

OpenSSL классифицировал ошибку как проблему с высокой степенью серьезности, отметив, что версия 1.0.2 была признана уязвимой.

Атака восстановления ключа на небольшие подгруппы Диффи – Хеллмана

Эта уязвимость ( CVE -2016-0701 ) позволяет при определенных обстоятельствах восстановить закрытый ключ Диффи – Хеллмана сервера OpenSSL. Исследователь Adobe System Security Антонио Сансо в частном порядке сообщил об уязвимости.

OpenSSL классифицировал ошибку как проблему высокой степени серьезности, отметив, что уязвимой была обнаружена только версия 1.0.2.

Форки

Агломерированный SSL

В 2009 г. После разочарования в исходном API OpenSSL Марко Пирбум, в то время разработчик OpenBSD, разветвил исходный API, создав агломерированный SSL (assl), который повторно использует OpenSSL API под капотом, но обеспечивает гораздо более простой внешний интерфейс. С тех пор он устарел в связи с форком LibreSSL около 2016 года.

LibreSSL

В апреле 2014 года, вслед за Heartbleed, члены OpenBSD проект разветвил OpenSSL, начиная с ветки 1.0.1g, чтобы создать проект с именем LibreSSL. За первую неделю сокращения кодовой базы OpenSSL из вилки было удалено более 90 000 строк кода C.

BoringSSL

В июне 2014 г. Google анонсировал собственный форк OpenSSL, получивший название BoringSSL. Google планирует сотрудничать с разработчиками OpenSSL и LibreSSL. С тех пор Google разработал новую библиотеку Tink на основе BoringSSL.

См. Также
  • Портал бесплатного программного обеспечения с открытым исходным кодом
Ссылки
Внешние ссылки
На Викискладе есть материалы, связанные с OpenSSL.
Последняя правка сделана 2021-06-01 12:37:55
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте