OpenSSL

Z Wikipedii, wolnej encyklopedii
Skocz do: nawigacja, szukaj
OpenSSL
Kryptografia
Autor The OpenSSL Project
System operacyjny wieloplatformowy
Język programowania C
Pierwsze wydanie 1998-12-2323 grudnia 1998
Aktualna wersja stabilna 1.1.0f
(25 maja 2017) [±]
Licencja OpenSSL License / SSLeay license[1][2]
Strona internetowa

OpenSSLwieloplatformowa, 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.

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[edytuj]

Projekt 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[edytuj]

stare wersje
starsze wersje, ciągle wspierane
ostatnio wydana wersja
ostatnio wydana wersja testowa
wydanie planowane
Historia wersji OpenSSL[5][6]
Wersja Data wydania Komentarz wydanie ostatniej "podwersji"
0.9.1 23 grudnia 1998
  • Oficjalny start projektu OpenSSL
0.9.1c (23 grudnia 1998)
0.9.2 22 marca 1999
  • następca wersji 0.9.1c
0.9.2b (6 kwietnia 1999)
0.9.3 25 maja 1999
  • następca wersji 0.9.2b
0.9.3a (27 maja 1999)
0.9.4 9 sierpnia 1999
  • następca wersji 0.9.3a
0.9.4 (9 sierpnia 1999)
0.9.5 28 lutego 2000
  • następca wersji 0.9.4
0.9.5a (1 kwietnia 2000)
0.9.6 24 września 2000
  • następca wersji 0.9.5a
0.9.6m (17 marca 2004)
0.9.7 31 grudnia 2002
  • następca wersji 0.9.6m
0.9.7m (23 lutego 2007)
0.9.8 5 lipca 2005
  • następca wersji 0.9.7m
0.9.8zh (3 grudnia 2015)
1.0.0 29 marca 2010
  • następca wersji 0.9.8n
1.0.0t (3 grudnia 2015)
1.0.1 14 marca 2012
  • następca wersji 1.0.0l
  • Wsparcie zakończy się 31 grudnia 2016
  • RFC 6520 ↓ TLS/DTLS wsparcie usługi heartbeat
  • Wsparcie SCTP.
  • RFC 5705 ↓ - eksport kluczy TLS.
  • RFC 5764 ↓ (DTLS-SRTP)
  • Podpisy PSS w certyfikatach, zapytania oraz Lista unieważnionych certyfikatów(CRL).
  • Wsparcie dla informacji bazujących na hasłach użytkownikow.
  • Wsparcie TLS v1.2 oraz TLS v1.1.
  • Wstępna funkcjonalność FIPS odnośnie obsługi niezwalidowanego modułu FIPS 2.0.
  • Wsparcie Secure Remote Password (SRP).
1.0.1u (22 września 2016)
1.0.2 22 stycznia 2015
  • następca wersji 1.0.1l
  • Wsparcie do 31 grudnia 2019
  • Zestaw "wsparcia B" dla TLS 1.2 oraz DTLS 1.2
  • Wsparcie dla DTLS 1.2
  • Automatyczny wybór Krzywej eliptycznej TLS.
  • Stworzenie API w celu skonfigurowania krzywych oraz algorymtów, wspieranych przez TLS
  • skonfigurowanie SSL_CONF.
  • Wsparcie dla Brainpool (TLS)
  • Wsparcie ALPN.
  • Wsparcie CMS'a dla RSA-PSS, RSA-OAEP, ECDH oraz X9.42 DH.
1.0.2j (26 września 2016)
1.1.0[7] 25 sierpnia 2016
  • Następca 1.0.2h
  • Wsparcie do 30 kwietnia 2018
  • Wsparcie dla ChaCha20-Poly1305 (RFC 7539 ↓)
  • Wsparcie dla rozszerzenia "extended master secret"
  • Wsparcie dla X25519
  • Wsparcie dla protokołu "DANE" oraz dla Przejrzystości certyfikatu
  • Algorytmy CCM
  • usunięto SSLv2
  • Usunięto wsparcie dla narzędzi Kerberosa
  • RC4 i 3DES usunięte z domyślnych algorymtów w libssl
  • Usunięto DSS, SEED, IDEA, CAMELLIA, oraz AES-CCM z domyślnej listy algorytmów cipherlist.
  • usunięto wsparcie dla 40 i 56-bitowych algorytmów z libssl
1.1.0 e (16 lutego 2017)
1.1.1[8]

Algorytmy[edytuj]

OpenSSL 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, Perfekcyjne Utajnienie przekazywania jest obsługiwane za pomocą Krzywej eliptycznej Diffiego–Hellmana[9].)

Istotne wady[edytuj]

Ataki czasowe na klucze RSA[edytuj]

14 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[edytuj]

OpenSSL w wersji 0.9.6k miał lukę, gdzie konkrente sekwencje ASN.1 wywoływały dużą ilość rekursji na urządzeniach z systemem Widnows, 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 crash'u OpenSSL'a (podobnie jak możliwość wysyłania dowolnie dużej liczby sekwencji ASN.1)

Luka w zszywaniu protokołu OCSP[edytuj]

Podczas tworzenia Handshake, istnieje ryzyko iż klient wyśle niewłaściwie sformatowaną wiadomość ClientHello, w wyniku czego OpenSSL dokona parsowania większej ilości dancyh 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[10].

Rozwidlenia[edytuj]

Agglomerated SSL[edytuj]

W 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. [11]

LibreSSL[edytuj]

 Osobny artykuł: LibreSSL.

Po ujawnieniu błędu Heartbleed, członkowie projektu OpenBSD - wraz z wydaniem wersji 1.0.1g - stworzyli rozwidlenie OpenSSL'a o nazwie LibreSSL[12]. W pierwszym tygodniu pracy nad porządkowaniem aplikacji usunięto 90 000 linii kodu źródłowego[13].

BoringSSL[edytuj]

W czerwcu 2014, Google ogłosiło własną wersję OpenSSL'a - BoringSSL[14]. Google planuje współpracę z programistami OpenSSL oraz LibreSSL[15][16][17].

Zobacz też[edytuj]

Przypisy

Linki zewnętrzne[edytuj]