Vydání kryptografické knihovny OpenSSL 3.0.0

Po třech letech vývoje a 19 testovacích verzích byla vydána knihovna OpenSSL 3.0.0 s implementací protokolů SSL/TLS a různých šifrovacích algoritmů. Nová větev obsahuje změny, které narušují zpětnou kompatibilitu na úrovni API a ABI, ale změny neovlivní provoz většiny aplikací, které vyžadují přebudování pro migraci z OpenSSL 1.1.1. Předchozí větev OpenSSL 1.1.1 bude podporována do září 2023.

Významná změna v čísle verze je způsobena přechodem na tradiční číslování „Major.Minor.Patch“. Od nynějška se první číslice (hlavní) v čísle verze změní pouze v případě, že dojde k porušení kompatibility na úrovni API/ABI, a druhá (vedlejší) se změní, když dojde ke zvýšení funkčnosti beze změny API/ABI. Opravné aktualizace budou dodány se změnou třetí číslice (patch). Číslo 3.0.0 bezprostředně za 1.1.1 bylo zvoleno, aby se předešlo překrývání s aktuálně vyvíjeným modulem FIPS pro OpenSSL, pro který bylo použito číslování 2.x.

Druhou důležitou změnou pro projekt byl přechod z duální licence (OpenSSL a SSLeay) na licenci Apache 2.0. Předchozí proprietární licence OpenSSL byla založena na textu starší licence Apache 1.0 a vyžadovala výslovnou zmínku o OpenSSL v marketingových materiálech při používání knihoven OpenSSL a také zvláštní upozornění, pokud bylo OpenSSL poskytováno jako součást produktu. Takové požadavky způsobily, že stará licence byla nekompatibilní s GPL, což znesnadnilo použití OpenSSL v projektech s licencí GPL. Aby se tato nekompatibilita obešla, byly projekty GPL nuceny používat specifické licenční smlouvy, ve kterých byl hlavní text GPL doplněn o klauzuli, která výslovně umožňovala propojení aplikace s knihovnou OpenSSL a zmiňovala, že požadavky GPL neumožňují platí pro propojení s OpenSSL.

Ve srovnání s větví OpenSSL 1.1.1 přidal OpenSSL 3.0.0 více než 7500 350 změn, které přispělo 3.0.0 vývojářů. Hlavní inovace OpenSSL XNUMX:

  • Byl navržen nový modul FIPS, včetně implementace kryptografických algoritmů, které splňují bezpečnostní standard FIPS 140-2 (proces certifikace modulu je naplánován na tento měsíc a certifikace FIPS 140-2 se očekává příští rok). Použití nového modulu je mnohem jednodušší a jeho připojení k mnoha aplikacím nebude o nic složitější než změna konfiguračního souboru. Ve výchozím nastavení je modul FIPS zakázán a vyžaduje povolení možnosti enable-fips.
  • libcrypto implementuje koncept pluggable providerů, který nahradil koncept motorů (ENGINE API bylo zastaralé). S pomocí poskytovatelů můžete přidat své vlastní implementace algoritmů pro takové operace, jako je šifrování, dešifrování, generování klíčů, výpočet MAC, vytváření a ověřování digitálních podpisů. Je možné jak připojovat nové, tak vytvářet alternativní implementace již podporovaných algoritmů (standardně se nyní pro každý algoritmus používá poskytovatel zabudovaný v OpenSSL).
  • Přidána podpora pro protokol správy certifikátů (RFC 4210), který lze použít k vyžádání certifikátů od serveru CA, aktualizaci certifikátů a odvolání certifikátů. Práce s CMP probíhá pomocí nové utility openssl-cmp, která podporuje i formát CRMF (RFC 4211) a odesílání požadavků přes HTTP/HTTPS (RFC 6712).
  • Byl implementován plnohodnotný klient pro protokoly HTTP a HTTPS podporující metody GET a POST, přesměrování požadavků, práci přes proxy, kódování ASN.1 a zpracování timeoutu.
  • Bylo přidáno nové EVP_MAC (Message Authentication Code API), aby bylo snazší přidávat nové implementace falešných vložek.
  • Je navrženo nové softwarové rozhraní pro generování klíčů - EVP_KDF (Key Derivation Function API), které zjednodušuje přidávání nových implementací KDF a PRF. Staré API EVP_PKEY, přes které byly k dispozici algoritmy scrypt, TLS1 PRF a HKDF, bylo přepracováno ve formě vrstvy implementované nad rozhraní API EVP_KDF a EVP_MAC.
  • Implementace protokolu TLS poskytuje možnost používat klienta a server TLS zabudovaný v jádře Linuxu ke zrychlení operací. Chcete-li povolit implementaci TLS poskytovanou jádrem Linuxu, musíte povolit volbu "SSL_OP_ENABLE_KTLS" nebo nastavení "enable-ktls".
  • Přidána podpora pro nové algoritmy:
    • Algoritmy generování klíčů (KDF) jsou „SINGLE STEP“ a „SSH“.
    • Algoritmy simulovaného vkládání (MAC) jsou „GMAC“ a „KMAC“.
    • RSA Key Encapsulation Algorithm (KEM) "RSASVE".
    • Šifrovací algoritmus "AES-SIV" (RFC-8452).
    • Přidána volání do EVP API s podporou inverzních šifer pomocí algoritmu AES k šifrování klíčů (Key Wrap): „AES-128-WRAP-INV“, „AES-192-WRAP-INV“, „AES-256-WRAP- INV“, „AES-128-WRAP-PAD-INV“, „AES-192-WRAP-PAD-INV“ a „AES-256-WRAP-PAD-INV“.
    • Do rozhraní EVP API byla přidána podpora pro algoritmy vypůjčování šifrovaného textu (CTS): „AES-128-CBC-CTS“, „AES-192-CBC-CTS“, „AES-256-CBC-CTS“, „CAMELLIA-128-CBC -CTS“, „CAMELLIA-192-CBC-CTS“ a „CAMELLIA-256-CBC-CTS“.
    • Přidána podpora digitálních podpisů CAdES-BES (RFC 5126).
    • AES_GCM implementuje parametr AuthEnvelopedData (RFC 5083), který umožňuje šifrování a dešifrování zpráv ověřených a šifrovaných pomocí režimu AES GCM.
  • Do veřejného rozhraní API byly přidány funkce PKCS7_get_octet_string a PKCS7_type_is_other.
  • Rozhraní API PKCS#12 nahrazuje výchozí algoritmy používané ve funkci PKCS12_create() algoritmy PBKDF2 a AES a k výpočtu MAC používá algoritmus SHA-256. Chcete-li obnovit minulé chování, je k dispozici možnost "-legacy". Přidán velký počet nových rozšířených volání do PKCS12_*_ex, PKCS5_*_ex a PKCS8_*_ex, jako je PKCS12_add_key_ex().PKCS12_create_ex() a PKCS12_decrypt_skey_ex().
  • Pro platformu Windows byla přidána podpora pro synchronizaci vláken pomocí mechanismu SRWLock.
  • Přidáno nové trasovací rozhraní API, povolené pomocí parametru enable-trace.
  • Rozsah klíčů podporovaných ve funkcích EVP_PKEY_public_check() a EVP_PKEY_param_check() byl rozšířen: RSA, DSA, ED25519, X25519, ED448 a X448.
  • Subsystém RAND_DRBG byl odstraněn a nahrazen rozhraním API EVP_RAND. Funkce FIPS_mode() a FIPS_mode_set() byly odstraněny.
  • Významná část API je zastaralá – použití zastaralých volání v kódu projektu bude mít za následek varování během kompilace. Včetně nízkoúrovňových rozhraní API vázaných na určité implementace algoritmů (například AES_set_encrypt_key a AES_encrypt) bylo oficiálně prohlášeno za zastaralé. Oficiální podpora v OpenSSL 3.0.0 je nyní poskytována pouze pro vysokoúrovňová EVP API, která jsou abstrahována od jednotlivých typů algoritmů (toto API zahrnuje například funkce EVP_EncryptInit_ex, EVP_EncryptUpdate a EVP_EncryptFinal). Zastaralá rozhraní API budou odstraněna v jedné z příštích hlavních verzí. Implementace starších algoritmů, jako jsou MD2 a DES, dostupné prostřednictvím rozhraní EVP API, byly přesunuty do samostatného „staršího“ modulu, který je ve výchozím nastavení zakázán.
  • Dokumentace a testovací sada byly výrazně rozšířeny. Ve srovnání s větví 1.1.1 se objem dokumentace zvýšil o 94 % a velikost kódu testovací sady o 54 %.

Zdroj: opennet.ru

Přidat komentář