OpenSSL - OpenSSL
Разработчики) | Проект OpenSSL |
---|---|
Первый выпуск | 1998 |
Стабильный выпуск | 3.0.0 (7 сентября 2021 г [±] | )
Репозиторий | |
Написано в | C , сборка , Perl |
Тип | Библиотека криптографии |
Лицензия | Лицензия OpenSSL, v3.0 перешла на лицензию Apache License 2.0 |
Веб-сайт | www |
OpenSSL - это программная библиотека для приложений, которые защищают связь по компьютерным сетям от подслушивания или необходимости идентифицировать сторону на другом конце. Он широко используется интернет- серверами , включая большинство веб-сайтов HTTPS .
OpenSSL содержит реализацию протоколов SSL и TLS с открытым исходным кодом . Базовая библиотека , написанная на языке программирования C , реализует основные криптографические функции и предоставляет различные служебные функции. Доступны оболочки, позволяющие использовать библиотеку OpenSSL на различных компьютерных языках.
OpenSSL Software Foundation (OSF) представляет проект OpenSSL в большинстве юридических прав, включая лицензионные соглашения участников, управление пожертвованиями и так далее. OpenSSL Software Services (OSS) также представляет проект OpenSSL для контрактов на поддержку.
OpenSSL доступен для большинства Unix-подобных операционных систем (включая Linux , macOS и BSD ) и Microsoft Windows .
История проекта
Проект OpenSSL был основан в 1998 году для предоставления бесплатного набора инструментов шифрования кода, используемого в Интернете. Он основан на форке SSLeay Эрика Эндрю Янга и Тима Хадсона, разработка которого неофициально завершилась 17 декабря 1998 года, когда Янг и Хадсон начали работать в RSA Security . Первыми членами-учредителями были Марк Кокс, Ральф Энгельшалл, Стивен Хенсон, Бен Лори и Пол Саттон.
По состоянию на май 2019 года комитет управления OpenSSL состоял из 7 человек и 17 разработчиков с доступом к фиксации (многие из которых также входят в комитет управления OpenSSL). Штатных сотрудников (стипендиатов) всего два, остальные - волонтеры.
Бюджет проекта составляет менее одного миллиона долларов США в год, и он в основном зависит от пожертвований. Разработка TLS 1.3 спонсируется Akamai.
Выпуски основных версий
Версия | Исходная дата выпуска | Комментарий | Последняя дополнительная версия |
---|---|---|---|
0.9.1 | 23 декабря 1998 г. |
|
0.9.1c (23 декабря 1998 г.) |
0.9.2 | 22 марта 1999 г. |
|
0.9.2b (6 апреля 1999 г.) |
0.9.3 | 25 мая 1999 г. |
|
0.9.3a (27 мая 1999 г.) |
0.9.4 | 9 августа 1999 г. |
|
0.9.4 (9 августа 1999 г.) |
0.9.5 | 28 февраля 2000 г. |
|
0.9.5a (1 апреля 2000 г.) |
0.9.6 | 24 сентября 2000 г. |
|
0,9,6 млн (17 марта 2004 г.) |
0.9.7 | 31 декабря 2002 г. |
|
0,9,7 млн (23 февраля 2007 г.) |
0.9.8 | 5 июля 2005 г. |
|
0.9.8ж (3 декабря 2015) |
1.0.0 | 29 марта 2010 г. |
|
1.0.0t (3 декабря 2015 г. ) |
1.0.1 | 14 марта 2012 г. |
|
1.0.1u (22 сентября 2016 г. ) |
1.0.2 | 22 января 2015 г. |
|
1.0.2u (20 декабря 2019 г. ) |
1.1.0 | 25 августа 2016 г. |
|
1.1.0л (10 сентября 2019 ) |
1.1.1 | 11 сентября 2018 г. |
|
постоянное развитие |
3.0.0 | 7 сентября 2021 г. |
|
постоянное развитие |
Легенда:
Старая версия
Старая версия, все еще поддерживается
Последняя версия
Последняя предварительная версия
Будущий выпуск
|
Алгоритмы
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 , ГОСТ Р 34.10-2001 , SM2
( Идеальная прямая секретность поддерживается с помощью эллиптической кривой Диффи – Хеллмана, начиная с версии 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.
OpenSSL 3.0 восстановил режим FIPS и прошел тестирование FIPS 140-2, но со значительными задержками: усилия были впервые начаты в 2016 году при поддержке SafeLogic и дальнейшей поддержке со стороны Oracle в 2017 году, но процесс оказался непростым. 20 октября 2020 г. поставщик OpenSSL FIPS 3.0 был добавлен в список проверок реализации CMVP, что отражает официальное взаимодействие с лабораторией тестирования для проведения проверки FIPS 140-2. Это привело к множеству сертификатов в последующие месяцы.
Лицензирование
OpenSSL получил двойную лицензию по лицензии OpenSSL и SSLeay, что означает, что можно использовать условия любой из этих лицензий. Лицензия OpenSSL - это лицензия Apache License 1.0, а лицензия SSLeay имеет некоторое сходство с лицензией BSD с 4 пунктами . Поскольку лицензией OpenSSL была лицензия Apache License 1.0, но не Apache License 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 -licensed GnuTLS , BSD -licensed Ботан , или MPL -licensed НСС , которые выполняют ту же задачу.
OpenSSL объявил в августе 2015 года, что потребует от большинства участников подписать лицензионное соглашение участника (CLA), и что OpenSSL в конечном итоге будет перелицензирован в соответствии с условиями Apache License 2.0 . Этот процесс начался в марте 2017 года и был завершен в 2018 году.
7 сентября 2021 года OpenSSL 3.0.0 был выпущен под лицензией Apache License 2.0.
Заметные уязвимости
Отказ в обслуживании: парсинг 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) или функций на основе ФАЙЛОВ для чтения ненадежных данных формата 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
Версии OpenSSL 1.0.1 через 1.0.1f имеют сильную обработку памяти ошибка в их реализации TLS Heartbeat расширения , которые могут быть использованы для выявления до 64 Кбайт памяти приложения с каждым сердцебиением ( CVE - 2014-0160 ). Считывая память веб-сервера, злоумышленники могут получить доступ к конфиденциальным данным, включая закрытый ключ сервера . Это может позволить злоумышленникам декодировать ранее перехваченные сообщения, если используемый протокол шифрования не обеспечивает идеальную прямую секретность . Знание закрытого ключа также может позволить злоумышленнику организовать атаку типа «злоумышленник в середине» против любых будущих сообщений. Уязвимость также может выявить незашифрованные части конфиденциальных запросов и ответов других пользователей, включая файлы cookie сеанса и пароли, которые могут позволить злоумышленникам перехватить личность другого пользователя службы.
На момент раскрытия информации 7 апреля 2014 года около 17% или полмиллиона защищенных веб-серверов Интернета, сертифицированных доверенными органами, считались уязвимыми для атаки. Однако Heartbleed может повлиять как на сервер, так и на клиента.
Уязвимость внедрения CCS
Уязвимость CCS Injection Vulnerability ( CVE - 2014-0224 ) - это уязвимость обхода безопасности, которая возникает из-за слабости методов OpenSSL, используемых для ввода ключей.
Эту уязвимость можно использовать с помощью атаки «человек посередине», при которой злоумышленник может расшифровать и изменить транзитный трафик. Удаленный злоумышленник, не прошедший проверку подлинности, может воспользоваться этой уязвимостью, используя специально созданное рукопожатие для принудительного использования слабого ключевого материала. Успешная эксплуатация может привести к состоянию обхода безопасности, когда злоумышленник может получить доступ к потенциально конфиденциальной информации. Атака возможна только между уязвимым клиентом и сервером.
Клиенты OpenSSL уязвимы во всех версиях OpenSSL до версий 0.9.8za, 1.0.0m и 1.0.1h. Известно, что серверы уязвимы только в OpenSSL 1.0.1 и 1.0.2-beta1. Пользователям серверов OpenSSL до 1.0.1 рекомендуется выполнить обновление в качестве меры предосторожности.
Клиент Hello sigalgs DoS
Эта уязвимость ( CVE - 2015-0291 ) позволяет любому получить сертификат, прочитать его содержимое и точно изменить его, чтобы злоупотребить уязвимостью, вызывающей сбой сертификата на клиенте или сервере. Если клиент подключается к серверу OpenSSL 1.0.2 и повторно согласовывает с недопустимым расширением алгоритмов подписи, происходит разыменование нулевого указателя. Это может вызвать DoS-атаку на сервер.
Исследователь Stanford Security Дэвид Рамос использовал личный эксплойт и представил его команде 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.
Смотрите также
- Сравнение реализаций TLS
- Сравнение криптографических библиотек
- Список пакетов бесплатного и открытого программного обеспечения
- POSSE проект
- LibreSSL