OpenSSL
OpenSSL – wieloplatformowa, otwarta implementacja protokołów SSL (wersji 2 i 3) i TLS (wersji 1) oraz algorytmów kryptograficznych ogólnego przeznaczenia. Udostępniana jest na licencji zbliżonej do licencji Apache[3]. Dostępna jest dla systemów uniksopodobnych (m.in. Linux, BSD, Solaris), OpenVMS i Microsoft Windows.
Autor | The OpenSSL Project |
---|---|
Pierwsze wydanie | (dts) | 23 grudnia 1998
Aktualna wersja stabilna | 3.4.0 (22 października 2024) [±] |
Język programowania | C |
System operacyjny | wieloplatformowy |
Rodzaj | Kryptografia |
Licencja | OpenSSL License / SSLeay license[1][2] |
Strona internetowa |
OpenSSL zawiera biblioteki implementujące wspomniane standardy oraz mechanizmy kryptograficzne, a także zestaw narzędzi konsolowych (przede wszystkim do tworzenia kluczy oraz certyfikatów, zarządzania urzędem certyfikacji, szyfrowania, dekryptażu i obliczania podpisów cyfrowych).
Za pomocą OpenSSL Crypto Library można m.in. obliczać funkcję skrótu wiadomości (m.in. MD5 i SHA-1) oraz szyfrować dane popularnymi algorytmami kryptograficznymi, m.in. Blowfish, AES, IDEA, 3DES.
Historia projektu
edytujProjekt OpenSSL powstał w 1998 roku w celu utworzenia darmowego zestawu narzędzi szyfrujących, przeznaczonych dla kodu używanego w sieci. Bazuje on na SSLeay , którego twórcami byli Eric Andrew Young i Tim Hudson. Nieoficjalne zakończenie jego rozwoju datowane jest na 17 grudnia 1998, kiedy to Young wraz z Hudsonen rozpoczęli pracę dla RSA Security .
W skład zespołu, zajmującego się projektem OpenSSL wchodziło czterech Europejczyków. Cały zespół liczył 11 osób, z których 10 było wolontariuszami. Jedynym pracownikiem, pracującym na pełny etat, był szef projektu – Stephen Henson.
Budżet projektu wynosił niecały million dolarów rocznie i polegał częściowo na dotacjach. Steve Marquess, były konsultant CIA w Maryland powołał fundację, zajmującą się darowiznami i umowami konsultingowymi. Pozyskał ponadto sponsoring od Departamentu Bezpieczeństwa Krajowego Stanów Zjednoczonych oraz Departamentu Obrony Stanów Zjednoczonych.
W roku 2013, WikiLeaks opublikowała dokumenty zdobyte przez Edwarda Snowdena, według których od 2010 roku, NSA pomyślnie złamała bądź obeszła zabezpieczenia SSL/TLS za pomocą luk, takich jak HeartBleed.
W roku 2014 około dwie trzecie wszystkich serwerów korzystało z OpenSSL[4].
Ważniejsze wersje – chronologia
edytujstare wersje |
starsze wersje, ciągle wspierane |
ostatnio wydana wersja |
ostatnio wydana wersja testowa |
wydanie planowane |
Wersja | Data wydania | Data zakończenia wsparcia | Komentarz | wydanie ostatniej „podwersji” |
---|---|---|---|---|
0.9.1[7] | 23 grudnia 1998 | - |
|
0.9.1c (23 grudnia 1998) |
0.9.2[7] | 22 marca 1999 | - |
|
0.9.2b (6 kwietnia 1999) |
0.9.3[7] | 25 maja 1999 | - |
|
0.9.3a (27 maja 1999) |
0.9.4[7] | 9 sierpnia 1999 | - |
|
0.9.4 (9 sierpnia 1999) |
0.9.5[7] | 28 lutego 2000 |
|
0.9.5a (1 kwietnia 2000) | |
0.9.6[7] | 24 września 2000 |
|
0.9.6m (17 marca 2004) | |
0.9.7[7] | 31 grudnia 2002 |
|
0.9.7m (23 lutego 2007) | |
0.9.8[7] | 5 lipca 2005 |
|
0.9.8zh (3 grudnia 2015) | |
1.0.0[8] | 29 marca 2010 |
|
1.0.0t (3 grudnia 2015) | |
1.0.1[9] | 14 marca 2012 | 31 grudnia 2016 |
|
1.0.1u (22 września 2016) |
1.0.2[10] | 22 stycznia 2015 | 31 grudnia 2019 |
|
1.0.2u (20 grudnia 2019) |
1.1.0[12] | 25 sierpnia 2016 | 11 września 2019 |
|
1.1.0l (10 października 2019) |
1.1.1 (LTS)[13][14] | 11 września 2018 | 11 września 2023 | Wersja LTS (Long Term Support).
|
1.1.1w (11 września 2023) |
3.0.0[17][18] [19] |
7 września 2021 | 7 września 2026 |
|
rozwój oprogramowania w trakcie |
3.1.0[21][22] | 14 marca 2023 | 14 marca 2025 |
|
rozwój oprogramowania w trakcie |
3.2.0[23][24] | 23 listopada 2023 | 23 listopada 2025 |
|
rozwój oprogramowania w trakcie |
3.3.0[25] | 9 kwietnia 2024 | 9 kwietnia 2026 | rozwój oprogramowania w trakcie |
Algorytmy
edytujOpenSSL obsługuje następujące algorytmy kryptograficzne:
- Szyfry
- AES, Blowfish, Camellia, SEED, CAST-128, DES, IDEA, RC2, RC4, RC5, 3DES, GOST 28147-89
- Funkcje skrótu
- MD5, MD4, MD2, SHA-1, SHA-2, RIPEMD-160, MDC-2, GOST R 34.11-94, BLAKE2
- Kryptografia klucza publicznego
- RSA, DSA, Protokół Diffiego-Hellmana, Kryptografia krzywych eliptycznych, GOST R 34.10-2001
(Począwszy od wersji 1.0 utajnianie z wyprzedzeniem jest obsługiwane za pomocą krzywej eliptycznej Diffiego-Hellmana[26].)
Walidacja FIPS-140
edytujFIPS 140 (ang. Federal information processing standard) to federalny program USA dotyczący testowania i certyfikacji modułów szyfrujących. Wczesny certyfikat FIPS 140-1 dla biblioteki FOM (ang. FIPS Object Module) używanej w OpenSSL w wersji 1.0 został cofnięty w lipcu 2006 r., gdy „pojawiły się pytania dotyczące interakcji zweryfikowanego modułu z zewnętrznym oprogramowaniem”. Moduł uzyskał ponowny certyfikat w lutym 2007 r., zanim zastąpiono go standardem FIPS 140-2.[27] OpenSSL w wersji 1.0.2 obsługiwał użycie biblioteki FOM, która powstała w celu dostarczania zatwierdzonych przez FIPS algorytmów w środowisku zweryfikowanym przez FIPS 140-2.[28][29]
OpenSSL kontrowersyjnie zadeklarowało zakończenie wsparcia (ang. "end of life" - EOL) dla wersji 1.0.2 po dniu 31 grudnia 2019 r., pomimo sprzeciwów, iż była to ówcześnie jedyna wersja OpenSSL, zapewniająca obsługę trybu FIPS.[30] W wyniku zakończenia wsparcia wielu użytkowników nie było w stanie prawidłowo wdrożyć FOM w wersji 2.0 i przestało spełniać wymogi, ponieważ nie uzyskali rozszerzonego wsparcia dla architektury 1.0.2, chociaż sam FOM pozostawał zatwierdzony przez kolejne osiem miesięcy.
Moduł obiektowy FIPS 2.0 pozostał zatwierdzony jako FIPS 140-2 w kilku formatach do 1 września 2020 r., kiedy to NIST wycofał używanie FIPS 186-2 dla standardu DSS i oznaczył wszystkie niezgodne moduły jako „historyczne”. To oznaczenie zawiera ostrzeżenie dla agencji federalnych, że nie powinny uwzględniać modułu w żadnych nowych zamówieniach. Wszystkie trzy walidacje OpenSSL zostały uwzględnione w wycofaniu – OpenSSL FIPS Object Module (certyfikat nr 1747),[31], OpenSSL FOM SE (certyfikat nr 2398),[32] i OpenSSL FOM RE (certyfikat nr 2473).[33] Wiele walidacji i klonów OpenSSL „prywatnej etykiety” stworzonych przez konsultantów również zostało przeniesionych na Listę Historyczną, chociaż niektóre moduły zatwierdzone przez FIPS z kompatybilnością zastępczą uniknęły wycofania, takie jak BoringCrypto od Google[34] i CryptoComply od SafeLogic.[35]
Komitet zarządzający OpenSSL ogłosił zmianę w schemacie wersjonowania.
Z powodu tej zmiany numer główny kolejnej wersji głównej zostałby podwojony, ponieważ moduł OpenSSL FIPS już zajmował ten numer. Dlatego podjęto decyzję o pominięciu numeru wersji OpenSSL 2.0 i kontynuowaniu z OpenSSL 3.0.
OpenSSL 3.0 przywrócił tryb FIPS i przeszedł testy FIPS 140-2, ale ze znacznymi opóźnieniami: Prace rozpoczęto po raz pierwszy w 2016 r. przy wsparciu SafeLogic[36][37][38] i dalszym wsparciu Oracle w 2017 r.[39][40], ale proces ten był skomplikowany.[41]
20 października 2020 r. OpenSSL FIPS Provider 3.0 został dodany do listy IUT (ang. Implementation Under Test) w programie CMVP, co odzwierciedlało oficjalne zaangażowanie laboratorium testowego w celu przeprowadzenia walidacji FIPS 140-2. W kolejnych miesiącach zaowocowało to serią certyfikacji.[42]
Istotne wady
edytujAtaki czasowe na klucze RSA
edytuj14 marca 2003 odnotowano Atak czasowy na klucze RSA, co oznaczało obecność luki w wersjach 0.9.7a oraz 0.9.6. Ta luka została oznaczona kodem CAN-2003-0147 przez projekt Common Vulnerabilities and Exposures. Domyślnie atak na ślepy podpis RSA nie był rejestrowany przez OpenSSL (gdyż atak ten jest trudny do wykonania, gdy za pośrednictwem OpenSSL używany jest protokół SSL lub TLS). Większość serwerów Apache obsługujących SSL było narażonych na ten atak, a także wiele aplikacji OpenSSL’a. Różnice czasowe przy wykonywaniu dodatkowych redukcji oraz wykorzystanie Algorytmu Karacuby i innych algorytmów mnożenia liczb całkowitych oznaczało, iż zdobycie przez atakujących (zdalnie bądź lokalnie) prywatnego klucza serwera było możliwe.
Odmowa dostępu – parsowanie ASN.1
edytujOpenSSL w wersji 0.9.6k miał lukę, gdzie konkrente sekwencje ASN.1 wywoływały dużą ilość rekursji na urządzeniach z systemem Windows, co odkryto 4 listopada 2003. System Windows nie był w stanie prawidłowo obsłużyć dużej liczby rekursji. Taka sytuacja doprowadzała do crashu OpenSSL-a (podobnie jak możliwość wysyłania dowolnie dużej liczby sekwencji ASN.1).
Luka w zszywaniu protokołu OCSP
edytujPodczas tworzenia Handshake istnieje ryzyko, iż klient wyśle niewłaściwie sformatowaną wiadomość ClientHello, w wyniku czego OpenSSL dokona parsowania większej ilości danych niż tylko samej wiadomości. Oznaczony CVE-2011-0014, wywierała wpływ na wszystkie wersje OpenSSL-a od 0.9.8h do 0.9.8q oraz wersje od 1.0.0 do 1.0.0c. Ponieważ parsowanie mogło doprowadzić do odczytu niewłaściwego adresu pamięci, atakujący miał możliwość przeprowadzenia ataku DDOS. Ponadto istniało ryzyko, iż niektóre aplikacje ujawnią zawartość sparsowanych rozszerzeń OCSP; wówczas atakujący byłby w stanie odczytać zawartość pamięci, która została wysłana po wiadomości ClientHello[43].
Agglomerated SSL
edytujW roku 2009, Marco Peereboom (wówczas pracował jako programista OpenBSD) – niezadowolony z oryginalnego interfejsu OpenSSL – stworzył fork oryginalnego interfejsu o nazwie Agglomerated SSL (assl). W dalszym ciągu wykorzystuje on „wewnętrzny” interfejs OpenSSL, lecz posiada znacznie prostszy interfejs zewnętrzny[44].
LibreSSL
edytujPo ujawnieniu błędu Heartbleed, członkowie projektu OpenBSD – wraz z wydaniem wersji 1.0.1g – stworzyli rozwidlenie OpenSSL-a o nazwie LibreSSL[45]. W pierwszym tygodniu pracy nad porządkowaniem aplikacji usunięto 90 000 linii kodu źródłowego[46].
BoringSSL
edytujW czerwcu 2014, Google ogłosiło własną wersję OpenSSL’a – BoringSSL[47]. Google planuje współpracę z programistami OpenSSL oraz LibreSSL[48][49][50].
Krytyka
edytujKompatybilność wsteczna
edytujWśród społeczności programistów często przytacza się OpenSSL jako źródło problemów ze zgodnością interfejsu API przy każdej nowej głównej wersji[51] [52][53][54], co wymaga dostosowań oprogramowania, które zwykle opóźniają wdrażanie nowych wersji.[55]To w połączeniu z faktem, że poprzednie wersje są zazwyczaj utrzymywane nie dłużej niż dwa lata po wydaniu nowej głównej wersji[17], zmusza niektórych dostawców do przewidywania migracji oprogramowania bardzo wcześnie, mając nadal niewiele czasu[56] na aktualizację do nowej wersji, czasami ryzykując utratę części zgodności z istniejącym oprogramowaniem[57][58] lub ryzykując regresję.[59][60]
Zobacz też
edytujPrzypisy
edytuj- ↑ /source/license.html [online], www.openssl.org [dostęp 2017-11-25] (ang.).
- ↑ Various Licenses and Comments about Them – GNU Project – Free Software Foundation [online], www.gnu.org [dostęp 2017-11-25] (ang.).
- ↑ /index.html [online], www.openssl.org [dostęp 2017-11-25] (ang.).
- ↑ Critical crypto bug in OpenSSL opens two-thirds of the Web to eavesdropping.
- ↑ OpenSSL – Changelog. OpenSSL Swersjitware Foundation. [dostęp 2015-09-17].
- ↑ OpenSSL – Release Strategy. OpenSSL Swersjitware Foundation. [dostęp 2015-09-17].
- ↑ a b c d e f g h OpenSSL 0.9.x series notes. GitHub. [dostęp 2024-10-31]. (ang.).
- ↑ OpenSSL 1.0.0 series notes. GitHub. [dostęp 2024-10-31]. (ang.).
- ↑ OpenSSL 1.0.1 series notes. GitHub. [dostęp 2024-10-31]. (ang.).
- ↑ OpenSSL 1.0.2 series notes. GitHub. [dostęp 2024-10-31]. (ang.).
- ↑ a b Update on 3.0 Development, FIPS and 1.0.2 EOL – OpenSSL Blog [online], www.openssl.org, 7 listopada 2019 [dostęp 2019-11-14] .
- ↑ OpenSSL 1.1.0 Series Release Notes. [dostęp 2015-12-10]. [zarchiwizowane z tego adresu (2018-03-17)].
- ↑ Matt Caswell: OpenSSL 1.1.1 Is Released. OpenSSL Foundation, 2018-09-11. [dostęp 2024-10-31]. (ang.).
- ↑ OpenSSL 1.1.1 series notes. GitHub. [dostęp 2024-10-31]. (ang.).
- ↑ Release Strategy. OpenSSL Foundation, 2019-02-25. (ang.).
- ↑ Matt Caswell: Using TLS1.3 With OpenSSL – OpenSSL Blog. [w:] www.openssl.org [on-line]. OpenSSL Foundation, 2018-02-08. (ang.).
- ↑ a b OpenSSL 3.0 Has Been Released!. OpenSSL Blog. [dostęp 2024-10-31]. (ang.).
- ↑ OpenSSL 3.0 series notes. GitHub. [dostęp 2024-10-31]. (ang.).
- ↑ Główna wersja 2.0.0 została pominięta ze względu na jej wcześniejsze użycie w module OpenSSL FIPS.[11]
- ↑ Matt Caswell: The Holy Hand Grenade of Antioch. OpenSSL Blog, 2018-11-28. [dostęp 2019-10-07]. (ang.).
- ↑ OpenSSL 3.1 Final Release. OpenSSL Blog. [dostęp 2024-10-11]. (ang.).
- ↑ OpenSSL 3.1 series notes. GitHub. [dostęp 2023-03-15]. (ang.).
- ↑ OpenSSL 3.2.0 Final Release. OpenSSL Blog. [dostęp 2024-10-11]. (ang.).
- ↑ OpenSSL 3.2 series notes. GitHub. [dostęp 2023-11-24]. (ang.).
- ↑ OpenSSL 3.3 Final Release. OpenSSL Blog. [dostęp 2024-10-11]. (ang.).
- ↑ Protecting data for the long term with forward secrecy. [dostęp 2012-11-05].
- ↑ NIST recertifies open source encryption module. gcn.com. [zarchiwizowane z tego adresu (2007-10-10)]. (ang.).
- ↑ FIPS-140. openssl.org. [dostęp 2019-11-12]. (ang.).
- ↑ OpenSSL User Guide for the OpenSSL FIPS Object Module v2.0. openssl.org, 2017-03-14. [dostęp 2019-11-12]. (ang.).
- ↑ Update on 3.0 Development, FIPS and 1.0.2 EOL. OpenSSL Blog, 2019-11-07. [dostęp 2024-10-11]. (ang.).
- ↑ Cryptographic Module Validation Program Certificate #1747. Computer Security Resource Center, 2016-10-11. (ang.).
- ↑ Cryptographic Module Validation Program Certificate #2398. Computer Security Resource Center, 2016-10-11. (ang.).
- ↑ Cryptographic Module Validation Program Certificate #2473. Computer Security Resource Center, 2016-10-11. (ang.).
- ↑ Cryptographic Module Validation Program search results. Computer Security Resource Center, 2016-10-11. (ang.).
- ↑ Cryptographic Module Validation Program search results. Computer Security Resource Center, 2016-10-11. (ang.).
- ↑ Troy K. Schneider: Getting government approval of a more secure OpenSSL. [w:] GCN: Technology, Tools, and Tactics for Public Sector IT [on-line]. 2016-07-20. (ang.).
- ↑ Shaun Waterman: SafeLogic saves the day for feds' use of OpenSSL. [w:] FedScoop [on-line]. 2016-07-21. (ang.).
- ↑ Fahmida Y. Rashid: Reworked OpenSSL on track for government validation. [w:] InfoWorld [on-line]. 2016-07-26. (ang.).
- ↑ Joyce Wells: Oracle, SafeLogic and OpenSSL Join Forces to Update FIPS Module. [w:] Database Trends and Applications [on-line]. 2017-08-03. (ang.).
- ↑ Sean Michael Kerner: Oracle Joins SafeLogic to Develop FIPS Module for OpenSSL Security. [w:] eWeek [on-line]. 2017-08-04. (ang.).
- ↑ OpenSSL 3.0 Alpha7 Release. OpenSSL Blog, 2020-10-20. [dostęp 2024-10-11]. (ang.).
- ↑ Cryptographic Module Validation Program: OpenSSL. Computer Security Resource Center, 2016-10-11. (ang.).
- ↑ OpenSSL Updates Fix Critical Security Vulnerabilities [09 Aug 2014]. [dostęp 2014-08-25]. [zarchiwizowane z tego adresu (26 sierpnia 2014)].
- ↑ security/assl: assl-1.5.0p0v0 – hide awful SSL API in a sane interface. [w:] OpenBSD ports [on-line]. 2014-05-22. [dostęp 2015-02-10].
- ↑ OpenBSD has started a massive strip-down and cleanup of OpenSSL. [w:] OpenBSD journal [on-line]. 2014-04-15.
- ↑ OpenBSD forks, prunes, fixes OpenSSL. ZDNet, 21 kwietnia 2014. [dostęp 2014-04-21].
- ↑ https://boringssl.googlesource.com/boringssl/ BoringSSL.
- ↑ Google unveils independent ‘fork’ of OpenSSL called ‘BoringSSL’. [w:] Ars Technica [on-line]. 2014-06-21.
- ↑ BoringSSL. [w:] Adam Langley’s Weblog [on-line]. 2014-06-20.
- ↑ BoringSSL wants to kill the excitement that led to Heartbleed – Naked Security [online], nakedsecurity.sophos.com [dostęp 2017-11-25] (ang.).
- ↑ OpenSSL 3 breaks webpack build · Issue #22305 · brave/brave-browser. GitHub. (ang.).
- ↑ openssl version 3.0 in arch? / Newbie Corner / Arch Linux Forums. bbs.archlinux.org. (ang.).
- ↑ OpenSSL 3.0 transition plans. Ubuntu Community Hub, 2022-04-06. (ang.).
- ↑ OpenSSL 3.0 Compatibility · Issue #597 · nginx/unit. GitHub. (ang.).
- ↑ Our future with OpenSSL. Discussions on Python.org, 2022-11-28. (ang.).
- ↑ The experience of bringing OpenSSL 3.0 into Red Hat Enterprise Linux and Fedora. www.redhat.com. (ang.).
- ↑ Compile against OpenSSL 3.X. groups.google.com. (ang.).
- ↑ ESET Management Agent (RHEL 9.x, OpenSSL 3.0.x). ESET Security Forum, 2022-06-06. (ang.).
- ↑ Issue 46313: SSLObject does not raise SSLEOFError on OpenSSL 3 - Python tracker. bugs.python.org. (ang.).
- ↑ RHEL 9 : openssl (RHSA-2022:6224). www.tenable.com. (ang.).
Linki zewnętrzne
edytuj- Strona projektu OpenSSL (ang.)
- E. Rescorla , Keying Material Exporters for Transport Layer Security (TLS), RFC 5705, IETF, marzec 2010, DOI: 10.17487/RFC5705, ISSN 2070-1721, OCLC 943595667 (ang.).
- D. McGrew , E. Rescorla , Datagram Transport Layer Security (DTLS) Extension to Establish Keys for the Secure Real-time Transport Protocol (SRTP), RFC 5764, IETF, maj 2010, DOI: 10.17487/RFC5764, ISSN 2070-1721, OCLC 943595667 (ang.).
- R. Seggelmann , M. Tuexen , M. Williams , Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS) Heartbeat Extension, RFC 6520, IETF, luty 2012, DOI: 10.17487/RFC6520, ISSN 2070-1721, OCLC 943595667 (ang.).
- Y. Nir , A. Langley , ChaCha20 and Poly1305 for IETF Protocols, RFC 7539, IETF, maj 2015, DOI: 10.17487/RFC7539, ISSN 2070-1721, OCLC 943595667 (ang.).