OpenSSL 3.0.0 Cryptographic Library kiadás

Három év fejlesztés és 19 tesztkiadás után megjelent az OpenSSL 3.0.0 könyvtár az SSL/TLS protokollok és különféle titkosítási algoritmusok megvalósításával. Az új ág olyan változtatásokat tartalmaz, amelyek megtörik a visszafelé kompatibilitást API és ABI szinten, de a változtatások nem érintik a legtöbb olyan alkalmazás működését, amelyek újraépítést igényelnek az OpenSSL 1.1.1-ről való átálláshoz. Az OpenSSL 1.1.1 korábbi ága 2023 szeptemberéig támogatott.

A verziószám jelentős változását a hagyományos „Major.Minor.Patch” számozásra való átállás okozza. Ezentúl a verziószám első számjegye (Major) csak akkor fog megváltozni, ha API/ABI szinten megszakadt a kompatibilitás, a második (Minor) pedig akkor változik meg, ha a funkcionalitást API/ABI változtatás nélkül bővítik. A javító frissítéseket a harmadik számjegy (Patch) módosításával szállítjuk. A közvetlenül az 3.0.0 utáni 1.1.1 számot azért választottuk, hogy elkerüljük az átfedéseket az OpenSSL jelenleg fejlesztés alatt álló FIPS moduljával, amelyhez a 2.x számozást használták.

A projekt második fontos változása a kettős licencről (OpenSSL és SSLeay) az Apache 2.0 licencre való átállás volt. A korábbi szabadalmaztatott OpenSSL-licenc a régi Apache 1.0 licenc szövegén alapult, és az OpenSSL-t kifejezetten meg kellett említeni a marketinganyagokban az OpenSSL-könyvtárak használatakor, valamint külön figyelmeztetést, ha az OpenSSL-t a termék részeként biztosították. Ezek a követelmények összeférhetetlenné tették a régi licencet a GPL-lel, megnehezítve az OpenSSL használatát a GPL-licenccel rendelkező projektekben. Ennek az inkompatibilitásnak a megkerülésére a GPL projektek speciális licencszerződések alkalmazására kényszerültek, amelyekben a GPL fő szövegét kiegészítették egy olyan záradékkal, amely kifejezetten lehetővé tette az alkalmazásnak az OpenSSL könyvtárhoz való kapcsolását, és megemlítette, hogy a GPL követelményei nem. vonatkozik az OpenSSL-lel való összekapcsolásra.

Az OpenSSL 1.1.1 ágához képest az OpenSSL 3.0.0 több mint 7500 módosítást adott hozzá 350 fejlesztőtől. Az OpenSSL 3.0.0 főbb újításai:

  • Új FIPS modult javasoltak, beleértve a FIPS 140-2 biztonsági szabványnak megfelelő kriptográfiai algoritmusok megvalósítását (a modul tanúsítási folyamata a tervek szerint ebben a hónapban kezdődik, a FIPS 140-2 tanúsítvány megszerzése pedig jövőre várható). Az új modul sokkal könnyebben használható, és sok alkalmazáshoz csatlakoztatása nem lesz nehezebb, mint a konfigurációs fájl megváltoztatása. Alapértelmezés szerint a FIPS modul le van tiltva, és engedélyezni kell az enable-fips opciót.
  • A libcrypto megvalósítja a csatlakoztatható szolgáltatók koncepcióját, amely felváltotta a motorok koncepcióját (az ENGINE API-t elavult). A szolgáltatók segítségével saját algoritmus-megvalósításokat adhat hozzá olyan műveletekhez, mint a titkosítás, a visszafejtés, a kulcsgenerálás, a MAC számítás, a digitális aláírások létrehozása és ellenőrzése. Lehetőség van újak csatlakoztatására és a már támogatott algoritmusok alternatív megvalósításainak létrehozására (alapértelmezés szerint az OpenSSL-be épített szolgáltatót használják minden algoritmushoz).
  • Támogatás hozzáadva a Certificate Management Protocolhoz (RFC 4210), amely tanúsítványok kérésére a CA kiszolgálótól, a tanúsítványok frissítésére és a tanúsítványok visszavonására használható. A CMP-vel való munkavégzés az új openssl-cmp segédprogrammal történik, amely támogatja a CRMF formátumot (RFC 4211) és a kérések HTTP/HTTPS-en (RFC 6712) keresztül történő küldését is.
  • Teljes értékű kliens került megvalósításra a HTTP és HTTPS protokollokhoz, amely támogatja a GET és POST metódusokat, a kérés átirányítást, proxy-n keresztül működik, ASN.1 kódolást és időtúllépési feldolgozást.
  • Egy új EVP_MAC (Message Authentication Code API) került hozzáadásra, hogy megkönnyítse az álbeszúrások új megvalósításainak hozzáadását.
  • Új szoftveres interfészt javasolunk a kulcsok generálására - EVP_KDF (Key Derivation Function API), amely leegyszerűsíti a KDF és a PRF új implementációinak hozzáadását. A régi EVP_PKEY API-t, amelyen keresztül a scrypt, a TLS1 PRF és a HKDF algoritmusok elérhetők voltak, újratervezték az EVP_KDF és EVP_MAC API-k tetején megvalósított réteg formájában.
  • A TLS protokoll megvalósítása lehetővé teszi a Linux kernelbe épített TLS kliens és szerver használatát a műveletek felgyorsítása érdekében. A Linux kernel által biztosított TLS megvalósítás engedélyezéséhez engedélyeznie kell az "SSL_OP_ENABLE_KTLS" vagy az "enable-ktls" beállítást.
  • Új algoritmusok támogatása:
    • A kulcsgeneráló algoritmusok (KDF) a „SINGLE STEP” és az „SSH”.
    • A szimulált beillesztési algoritmusok (MAC) a „GMAC” és a „KMAC”.
    • RSA Key Encapsulation Algorithm (KEM) "RSASVE".
    • "AES-SIV" (RFC-8452) titkosítási algoritmus.
    • Hozzáadott hívások az EVP API-hoz inverz titkosítások támogatásával az AES algoritmus segítségével a kulcsok titkosításához (Key Wrap): „AES-128-WRAP-INV”, „AES-192-WRAP-INV”, „AES-256-WRAP- INV” , „AES-128-WRAP-PAD-INV”, „AES-192-WRAP-PAD-INV” és „AES-256-WRAP-PAD-INV”.
    • A titkosított szövegkölcsönző (CTS) algoritmusok támogatása hozzáadva az EVP API-hoz: „AES-128-CBC-CTS”, „AES-192-CBC-CTS”, „AES-256-CBC-CTS”, „CAMELLIA-128-CBC” -CTS”, „CAMELLIA-192-CBC-CTS” és „CAMELLIA-256-CBC-CTS”.
    • Hozzáadott támogatás a CAdES-BES digitális aláírásokhoz (RFC 5126).
    • Az AES_GCM megvalósítja az AuthEnvelopedData (RFC 5083) paramétert, amely lehetővé teszi az AES GCM móddal hitelesített és titkosított üzenetek titkosítását és visszafejtését.
  • A PKCS7_get_octet_string és a PKCS7_type_is_other függvények hozzáadásra kerültek a nyilvános API-hoz.
  • A PKCS#12 API lecseréli a PKCS12_create() függvényben használt alapértelmezett algoritmusokat PBKDF2-re és AES-re, és az SHA-256 algoritmust használja a MAC kiszámításához. A korábbi viselkedés visszaállításához a "-legacy" opció biztosított. Számos új kiterjesztett hívás került hozzáadásra a PKCS12_*_ex, PKCS5_*_ex és PKCS8_*_ex számára, például a PKCS12_add_key_ex().PKCS12_create_ex() és PKCS12_decrypt_skey_ex().
  • A Windows platformon a szálak szinkronizálásának támogatása az SRWLock mechanizmussal bővült.
  • Új nyomkövetési API hozzáadva, az enable-trace paraméterrel engedélyezve.
  • Az EVP_PKEY_public_check() és EVP_PKEY_param_check() függvényekben támogatott kulcsok köre kibővült: RSA, DSA, ED25519, X25519, ED448 és X448.
  • A RAND_DRBG alrendszert eltávolítottuk, helyébe az EVP_RAND API került. A FIPS_mode() és FIPS_mode_set() függvények eltávolításra kerültek.
  • Az API jelentős része elavulttá vált – az elavult hívások projektkódban történő használata figyelmeztetéseket eredményez a fordítás során. Az algoritmusok bizonyos implementációihoz (például AES_set_encrypt_key és AES_encrypt) kapcsolódó alacsony szintű API-kat is hivatalosan elavultnak nyilvánították. Az OpenSSL 3.0.0 hivatalos támogatása mostantól csak az egyes algoritmustípusoktól elvonatkoztatott magas szintű EVP API-k számára biztosított (ez az API tartalmazza például az EVP_EncryptInit_ex, EVP_EncryptUpdate és EVP_EncryptFinal függvényeket). Az elavult API-kat a következő nagyobb kiadások egyikében eltávolítjuk. Az EVP API-n keresztül elérhető örökölt algoritmusok, mint például az MD2 és DES, egy külön "örökölt" modulba kerültek, amely alapértelmezés szerint le van tiltva.
  • A dokumentáció és a tesztkészlet jelentősen bővült. Az 1.1.1 ághoz képest a dokumentáció mennyisége 94%-kal, a tesztkészlet kód mérete pedig 54%-kal nőtt.

Forrás: opennet.ru

Hozzászólás