Efter tre Ärs utveckling och 19 betaversioner slÀpptes biblioteket OpenSSL 3.0.0 med implementation av SSL/TLS-protokollen och olika kryptografiska algoritmer. Den nya versionen innehÄller förÀndringar som bryter bakÄtkompatibiliteten pÄ API- och ABI-nivÄ, men dessa förÀndringar pÄverkar inte majoriteten av applikationerna, för vilka en omkompilering frÄn OpenSSL 1.1.1 Àr tillrÀcklig. Stöd för den tidigare versionen OpenSSL 1.1.1 kommer att ges fram till september 2023.
Den betydande förÀndringen av versionsnumret beror pÄ övergÄngen till traditionell numrering "Major.Minor.Patch". Den första siffran (Major) i versionsnumret kommer nu endast att Àndras vid brist pÄ kompatibilitet pÄ API/ABI-nivÄ, medan den andra siffran (Minor) kommer att Àndras vid funktionalitetstillvÀxt utan förÀndringar pÄ API/ABI. Korrigeringsuppdateringar kommer att levereras med en förÀndring av den tredje siffran (Patch). Numret 3.0.0 valdes direkt efter 1.1.1 för att undvika kollisioner med den FIPS-modul som utvecklas för OpenSSL, som hade numrering 2.x.
Ett annat viktigt förÀndring för projektet var övergÄngen frÄn dubbel licensiering (OpenSSL och SSLeay) till Apache 2.0-licens. Den tidigare anvÀnda egenlicensen för OpenSSL baserades pÄ texten av den förÄldrade licensen Apache 1.0 och krÀvde tydlig nÀmnelse av OpenSSL i reklammaterial nÀr biblioteken OpenSSL anvÀndes, samt tillÀgg av en speciell anmÀrkning vid leverans av OpenSSL som en del av en produkt. SÄdana krav gjorde den gamla licensen oförenlig med GPL, vilket skapade svÄrigheter vid anvÀndningen av OpenSSL i projekt med GPL-licens. För att kringgÄ denna oförenlighet var GPL-projekt tvungna att tillÀmpa specifika licensavtal dÀr huvudinnehÄllet i GPL kompletterades med en punkt som uttryckligen tillÀt bindning av applikationen med biblioteket OpenSSL och nÀmnde att GPL-kraven inte gÀllde bindning med OpenSSL.
JÀmfört med versionen OpenSSL 1.1.1 har mer Àn 7500 Àndringar lagts till i OpenSSL 3.0.0, som förberetts av 350 utvecklare. Huvudnyheterna i OpenSSL 3.0.0:
- En ny FIPS-modul har föreslagits, som inkluderar implementeringen av kryptografiska algoritmer som uppfyller sÀkerhetsstandarden FIPS 140-2 (certifieringsprocessen för modulen planeras att börja den hÀr mÄnaden, och FIPS 140-2-certifikatet förvÀntas nÀsta Är). Den nya modulen Àr betydligt enklare att anvÀnda och att koppla den till mÄnga applikationer krÀver inte mer Àn att Àndra konfigurationsfilen. Som standard Àr FIPS-modulen avstÀngd och krÀver att alternativet enable-fips anges för att aktiveras.
- I libcrypto har konceptet med plug-in-leverantörer införts, som ersÀtter begreppet motorer (ENGINE API har förklarats som förÄldrat). Med hjÀlp av leverantörer kan anvÀndardefinierade implementeringar av algoritmer lÀggas till för operationer sÄsom kryptering, avkryptering, nyckelgenerering, MAC-berÀkning, samt skapande och verifiering av digitala signaturer. BÄde nya leverantörer kan kopplas in och alternativa implementeringar av redan stödda algoritmer kan skapas (per standard anvÀnds nu den inbyggda OpenSSL-leverantören för varje algoritm).
- Stöd för certifikatstyrningsprotokollet CMP (Certificate Management Protocol, RFC 4210) har lagts till, som kan anvÀndas för att begÀra certifikat frÄn servern certifikatutfÀrdaren, uppdatera certifikat och Äterkalla certifikat. Arbetet med CMP sker med hjÀlp av det nya verktyget openssl-cmp, som ocksÄ stöder CRMF-formatet (RFC 4211) och överföring av förfrÄgningar via HTTP/HTTPS (RFC 6712).
- En fullstÀndig klient för HTTP- och HTTPS-protokollen har implementerats, som stödjer metoderna GET och POST, omdirigering av förfrÄgningar, proxyverksamhet, ASN.1-kodning och hantering av tidsgrÀnser.
- Ett nytt API EVP_MAC (Message Authentication Code API) har lagts till, som förenklar införandet av nya implementeringar av autentiseringskoder.
- Ett nytt programmeringsgrĂ€nssnitt för nyckelgenerering har föreslagits â EVP_KDF (Key Derivation Function API), som underlĂ€ttar införandet av nya implementeringar av KDF och PRF. Det gamla API:t EVP_PKEY, genom vilket algoritmerna scrypt, TLS1-PRF och HKDF var tillgĂ€ngliga, har omarbetats i form av ett lager som Ă€r implementerat ovanpĂ„ API:erna EVP_KDF och EVP_MAC.
- I implementeringen av TLS-protokollet har möjligheten införts att anvÀnda den inbyggda Linux-kÀrnan TLS-klienten och servern för att snabba upp operationerna. För att aktivera den TLS-implementering som tillhandahÄlls av Linux-kÀrnan krÀvs att alternativet «SSL_OP_ENABLE_KTLS» eller instÀllningen «enable-ktls» aktiveras.
- Stöd för nya algoritmer har lagts till:
- Nyckelgenereringsalgoritmer (KDF) â "SINGLE STEP" och "SSH".
- Integritetskontrollalgoritmer (MAC) â "GMAC" och "KMAC".
- RSA-nyckelinbÀddningsalgoritm (KEM) "RSASVE".
- Krypteringsalgoritm "AES-SIV" (RFC-8452).
- API:et EVP har fÄtt nya anrop med stöd för inversa chiffers som anvÀnder algoritmen AES för att kryptera nycklar (Key Wrap): "AES-128-WRAP-INV", "AES-192-WRAP-INV", "AES-256-WRAP-INV", "AES-128-WRAP-PAD-INV", "AES-192-WRAP-PAD-INV" och "AES-256-WRAP-PAD-INV".
- API:et EVP har fÄtt stöd för algoritmer för ciphertext-Ätervinning (CTS): "AES-128-CBC-CTS", "AES-192-CBC-CTS", "AES-256-CBC-CTS", "CAMELLIA-128-CBC-CTS", "CAMELLIA-192-CBC-CTS" och "CAMELLIA-256-CBC-CTS".
- Stöd för digitala signaturer CAdES-BES (RFC 5126) har lagts till.
- I AES_GCM har parametern AuthEnvelopedData (RFC 5083) implementerats, vilket möjliggör kryptering och dekryptering av meddelanden som Àr autentiserade och krypterade med hjÀlp av lÀget AES GCM.
- Funktionerna PKCS7_get_octet_string och PKCS7_type_is_other har tagits ut till det publika API:et.
- I API:et PKCS#12 har de algoritmer som anvÀnds som standard i funktionen PKCS12_create() ersatts med PBKDF2 och AES, och algorithmen SHA-256 har anvÀnts för att berÀkna MAC. För att ÄterstÀlla det tidigare beteendet finns ett alternativ "-legacy". Ett stort antal nya utvidgade anrop PKCS12_*_ex, PKCS5_*_ex och PKCS8_*_ex har lagts till, sÄsom PKCS12_add_key_ex(), PKCS12_create_ex() och PKCS12_decrypt_skey_ex().
- För Windows-plattformen har stöd för trÄdsynkronisering lagts till via mekanismen SRWLock.
- Ett nytt API för spÄrning har lagts till, aktiveras genom parametern enable-trace.
- Spektrumet av nycklar som stöds i funktionerna EVP_PKEY_public_check() och EVP_PKEY_param_check() har utökats: RSA, DSA, ED25519, X25519, ED448 och X448.
- Undersystemet RAND_DRBG har tagits bort, och istÀllet erbjuds API:et EVP_RAND. Funktionerna FIPS_mode() och FIPS_mode_set() har tagits bort.
- En betydande del av API:et har överförts till en förÄldrad kategori - anvÀndning av förÄldrade anrop i projektets kod kommer att leda till varningar vid kompilering. Bland de förÄldrade Àr Àven lÄg nivÄ API:er som Àr kopplade till specifika algoritmers implementeringar (till exempel AES_set_encrypt_key och AES_encrypt). Officiellt stöd i OpenSSL 3.0.0 erbjuds nu endast för högnivÄ API:er EVP, som Àr abstraherade frÄn specifika algoritmtyper (till det hÀr API:t hör till exempel funktionerna EVP_EncryptInit_ex, EVP_EncryptUpdate och EVP_EncryptFinal). I nÀsta betydande version kommer de förÄldrade API:erna att tas bort. Implementeringar av förÄldrade algoritmer som MD2 och DES, som Àr tillgÀngliga via EVP API, har flyttats till en separat modul "legacy", som Àr inaktiverad som standard.
- Dokumentationen och testuppsÀttningarna har betydligt utökats. JÀmfört med version 1.1.1 har dokumentationens omfattning ökat med 94 %, medan storleken pÄ testuppsÀttningen har ökat med 54 %.
KĂ€lla: opennet.ru
