OpenSSL 3.0.0 Kriptografik kutubxona relizi

Uch yillik ishlab chiqish va 19 ta test relizlaridan so'ng, OpenSSL 3.0.0 kutubxonasi SSL/TLS protokollari va turli shifrlash algoritmlarini amalga oshirish bilan chiqarildi. Yangi filial API va ABI darajasida orqaga qarab muvofiqlikni buzadigan o'zgarishlarni o'z ichiga oladi, ammo o'zgarishlar OpenSSL 1.1.1 dan ko'chirish uchun qayta qurishni talab qiladigan ko'pgina ilovalarning ishlashiga ta'sir qilmaydi. OpenSSL 1.1.1 ning avvalgi filiali 2023-yil sentabrgacha qo‘llab-quvvatlanadi.

Versiya raqamining sezilarli o'zgarishi an'anaviy "Major.Minor.Patch" raqamlashiga o'tish bilan bog'liq. Bundan buyon versiya raqamidagi birinchi raqam (Major) faqat API/ABI darajasida muvofiqlik buzilgan taqdirdagina o‘zgaradi, ikkinchisi (Minor) esa API/ABI o‘zgartirilmasdan funksionallik oshirilganda o‘zgaradi. Tuzatuvchi yangilanishlar uchinchi raqamga o'zgartirishlar bilan yetkaziladi (Patch). 3.0.0 dan so'ng darhol 1.1.1 raqami OpenSSL uchun hozirda ishlab chiqilayotgan FIPS moduli bilan mos kelmaslik uchun tanlangan, buning uchun 2.x raqamlash ishlatilgan.

Loyiha uchun ikkinchi muhim o'zgarish qo'sh litsenziyadan (OpenSSL va SSLeay) Apache 2.0 litsenziyasiga o'tish bo'ldi. Oldingi mulkiy OpenSSL litsenziyasi eski Apache 1.0 litsenziyasi matniga asoslangan bo'lib, OpenSSL kutubxonalaridan foydalanishda marketing materiallarida OpenSSL haqida aniq eslatib o'tishni, shuningdek, agar OpenSSL mahsulotning bir qismi sifatida taqdim etilgan bo'lsa, maxsus bildirishnomani talab qiladi. Ushbu talablar eski litsenziyani GPL bilan mos kelmaydigan qilib, GPL litsenziyalangan loyihalarda OpenSSL dan foydalanishni qiyinlashtirdi. Ushbu nomuvofiqlikni bartaraf etish uchun GPL loyihalari maxsus litsenziya shartnomalaridan foydalanishga majbur bo'ldi, ularda GPLning asosiy matni ilovani OpenSSL kutubxonasi bilan bog'lashga aniq ruxsat beruvchi band bilan to'ldirildi va GPL talablariga mos kelmasligi ta'kidlandi. OpenSSL bilan bog'lanish uchun qo'llaniladi.

OpenSSL 1.1.1 filiali bilan taqqoslaganda, OpenSSL 3.0.0 7500 ta ishlab chiquvchilar tomonidan kiritilgan 350 dan ortiq o'zgarishlarni qo'shdi. OpenSSL 3.0.0 ning asosiy yangiliklari:

  • Yangi FIPS moduli taklif qilindi, jumladan, FIPS 140-2 xavfsizlik standartiga mos keladigan kriptografik algoritmlarni amalga oshirish (modulni sertifikatlash jarayoni shu oyda boshlanishi rejalashtirilgan va kelgusi yilda FIPS 140-2 sertifikati kutilmoqda). Yangi moduldan foydalanish ancha oson va uni ko'plab ilovalarga ulash konfiguratsiya faylini o'zgartirishdan ko'ra qiyinroq bo'lmaydi. Odatiy bo'lib, FIPS moduli o'chirilgan va enable-fips opsiyasi yoqilgan bo'lishini talab qiladi.
  • libcrypto dvigatellar kontseptsiyasini almashtirgan (ENGINE API eskirgan) o'rnatilgan provayderlar kontseptsiyasini amalga oshiradi. Provayderlar yordamida siz shifrlash, shifrni hal qilish, kalitlarni yaratish, MAC hisoblash, raqamli imzolarni yaratish va tekshirish kabi operatsiyalar uchun o'zingizning algoritmlaringizni qo'shishingiz mumkin. Yangilarini ulash va allaqachon qo'llab-quvvatlanadigan algoritmlarning muqobil ilovalarini yaratish mumkin (odatda, OpenSSL-ga o'rnatilgan provayder endi har bir algoritm uchun ishlatiladi).
  • CA serveridan sertifikat soʻrash, sertifikatlarni yangilash va sertifikatlarni bekor qilish uchun ishlatilishi mumkin boʻlgan Sertifikatlarni boshqarish protokoli (RFC 4210) uchun qoʻshilgan qoʻllab-quvvatlash. CMP bilan ishlash yangi openssl-cmp yordam dasturi yordamida amalga oshiriladi, u ham CRMF formatini (RFC 4211) qo'llab-quvvatlaydi va HTTP/HTTPS (RFC 6712) orqali so'rovlarni yuboradi.
  • HTTP va HTTPS protokollari uchun GET va POST usullarini qo'llab-quvvatlaydigan, so'rovlarni qayta yo'naltirish, proksi-server orqali ishlash, ASN.1 kodlash va kutish vaqtini qayta ishlash uchun to'liq huquqli mijoz amalga oshirildi.
  • Soxta qo'shimchalarning yangi ilovalarini qo'shishni osonlashtirish uchun yangi EVP_MAC (Message Authentication Code API) qo'shildi.
  • Kalitlarni yaratish uchun yangi dasturiy interfeys taklif etiladi - EVP_KDF (Key Derivation Function API), bu KDF va PRF ning yangi ilovalarini qo'shishni soddalashtiradi. Scrypt, TLS1 PRF va HKDF algoritmlari mavjud bo'lgan eski EVP_PKEY API EVP_KDF va EVP_MAC API-larining tepasida amalga oshirilgan qatlam shaklida qayta ishlab chiqilgan.
  • TLS protokolining amalga oshirilishi operatsiyalarni tezlashtirish uchun Linux yadrosiga o'rnatilgan TLS mijozi va serveridan foydalanish imkoniyatini beradi. Linux yadrosi tomonidan taqdim etilgan TLS ilovasini yoqish uchun siz "SSL_OP_ENABLE_KTLS" yoki "enable-ktls" parametrini yoqishingiz kerak.
  • Yangi algoritmlar uchun qo'shimcha yordam:
    • Kalit yaratish algoritmlari (KDF) "SINGLE STEP" va "SSH" dir.
    • Simulyatsiya qilingan kiritish algoritmlari (MAC) "GMAC" va "KMAC" dir.
    • RSA kalitini inkapsulyatsiya qilish algoritmi (KEM) "RSASVE".
    • "AES-SIV" shifrlash algoritmi (RFC-8452).
    • Kalitlarni shifrlash uchun AES algoritmidan foydalangan holda teskari shifrlarni qo‘llab-quvvatlaydigan EVP API’ga qo‘ng‘iroqlar qo‘shildi (Key Wrap): “AES-128-WRAP-INV”, “AES-192-WRAP-INV”, “AES-256-WRAP-INV” ”, “AES-128-WRAP-PAD-INV”, “AES-192-WRAP-PAD-INV” va “AES-256-WRAP-PAD-INV”.
    • EVP API ga shifrlangan matnni qarz olish (CTS) algoritmlarini qo‘llab-quvvatlash qo‘shildi: “AES-128-CBC-CTS”, “AES-192-CBC-CTS”, “AES-256-CBC-CTS”, “CAMELLIA-128-CBC -CTS" ", "CAMELLIA-192-CBC-CTS" va "CAMELLIA-256-CBC-CTS".
    • CAdES-BES raqamli imzolari uchun qo'shimcha yordam (RFC 5126).
    • AES_GCM, AES GCM rejimi yordamida autentifikatsiya qilingan va shifrlangan xabarlarni shifrlash va shifrlashni yoqish uchun AuthEnvelopedData (RFC 5083) parametrini amalga oshiradi.
  • PKCS7_get_octet_string va PKCS7_type_is_boshqa funksiyalar umumiy APIga qo'shildi.
  • PKCS#12 API PKCS12_create() funksiyasida ishlatiladigan standart algoritmlarni PBKDF2 va AES bilan almashtiradi va MACni hisoblash uchun SHA-256 algoritmidan foydalanadi. O'tmishdagi xatti-harakatlarni tiklash uchun "-legacy" opsiyasi taqdim etiladi. PKCS12_*_ex, PKCS5_*_ex va PKCS8_*_ex ga PKCS12_add_key_ex().PKCS12_create_ex() va PKCS12_decrypt_skey_ex() kabi koʻplab yangi kengaytirilgan qoʻngʻiroqlar qoʻshildi.
  • Windows platformasi uchun SRWLock mexanizmi yordamida ip sinxronizatsiyasini qo'llab-quvvatlash qo'shildi.
  • Enable-trace parametri orqali yoqilgan yangi kuzatish API qoʻshildi.
  • EVP_PKEY_public_check() va EVP_PKEY_param_check() funksiyalarida qoʻllab-quvvatlanadigan kalitlar diapazoni kengaytirildi: RSA, DSA, ED25519, X25519, ED448 va X448.
  • RAND_DRBG quyi tizimi oʻchirildi, oʻrniga EVP_RAND API qoʻyildi. FIPS_mode() va FIPS_mode_set() funksiyalari olib tashlandi.
  • APIning muhim qismi eskirgan - loyiha kodida eskirgan qo'ng'iroqlardan foydalanish kompilyatsiya paytida ogohlantirishlarga olib keladi. Jumladan, algoritmlarning ma'lum ilovalariga bog'langan past darajadagi API'lar (masalan, AES_set_encrypt_key va AES_encrypt) rasman eskirgan deb e'lon qilingan. OpenSSL 3.0.0 da rasmiy yordam endi faqat individual algoritm turlaridan ajratilgan yuqori darajadagi EVP API uchun taqdim etiladi (bu API, masalan, EVP_EncryptInit_ex, EVP_EncryptUpdate va EVP_EncryptFinal funksiyalarini o‘z ichiga oladi). Eskirgan API’lar keyingi yirik nashrlardan birida olib tashlanadi. EVP API orqali mavjud bo'lgan MD2 va DES kabi eski algoritmlarni amalga oshirish alohida "eski" modulga ko'chirildi, sukut bo'yicha o'chirib qo'yilgan.
  • Hujjatlar va testlar to'plami sezilarli darajada kengaytirildi. 1.1.1-band bilan taqqoslaganda, hujjatlar hajmi 94% ga, test to'plami kodining hajmi esa 54% ga oshdi.

Manba: opennet.ru

a Izoh qo'shish