OpenSSL 3.0.0 Криптографийн номын сангийн хувилбар

Гурван жил хөгжүүлж, 19 туршилтын хувилбар гаргасны дараа SSL/TLS протоколууд болон янз бүрийн шифрлэлтийн алгоритмуудыг хэрэгжүүлснээр OpenSSL 3.0.0 номын сан гарсан. Шинэ салбар нь API болон ABI түвшинд буцаах нийцтэй байдлыг эвдсэн өөрчлөлтүүдийг багтаасан боловч өөрчлөлт нь OpenSSL 1.1.1-ээс шилжихийн тулд дахин бүтээх шаардлагатай ихэнх програмын үйл ажиллагаанд нөлөөлөхгүй. OpenSSL 1.1.1-ийн өмнөх салбар нь 2023 оны XNUMX-р сар хүртэл дэмжигдэх болно.

Хувилбарын дугаарт мэдэгдэхүйц өөрчлөлт гарсан нь уламжлалт “Major.Minor.Patch” дугаарлалтад шилжсэнтэй холбоотой. Одооноос эхлэн хувилбарын дугаарын эхний орон (Major) нь API/ABI түвшинд нийцтэй байдал эвдэрсэн тохиолдолд л өөрчлөгдөх ба API/ABI-г өөрчлөхгүйгээр функцийг нэмэгдүүлэх үед хоёр дахь (Минор) нь өөрчлөгдөнө. Залруулсан шинэчлэлтүүдийг гурав дахь оронтой тоонд (Нөхөөс) өөрчилснөөр хүргэгдэнэ. 3.0.0.x дугаарлалт ашигласан OpenSSL-д зориулсан одоогоор хөгжүүлэгдэж буй FIPS модультай давхцахаас зайлсхийхийн тулд 1.1.1-ийн дараах 2 дугаарыг сонгосон.

Төслийн хоёр дахь чухал өөрчлөлт нь давхар лицензээс (OpenSSL ба SSLeay) Apache 2.0 лиценз рүү шилжих явдал байв. Өмнөх өмчийн OpenSSL лиценз нь хуучин Apache 1.0 лицензийн текст дээр үндэслэсэн бөгөөд OpenSSL номын санг ашиглахдаа маркетингийн материалд OpenSSL-ийн талаар тодорхой дурдах, түүнчлэн OpenSSL-ийг бүтээгдэхүүний нэг хэсэг болгон өгсөн тохиолдолд тусгай мэдэгдэл өгөх шаардлагатай байв. Эдгээр шаардлагууд нь хуучин лицензийг GPL-тэй нийцэхгүй болгож, OpenSSL-ийг GPL лицензтэй төслүүдэд ашиглахад хүндрэл учруулсан. Энэхүү үл нийцэх байдлыг даван туулахын тулд GPL төслүүд нь тусгай лицензийн гэрээг ашиглахаас өөр аргагүй болсон бөгөөд үүнд GPL-ийн үндсэн текстийг програмыг OpenSSL номын сантай шууд холбохыг зөвшөөрсөн заалтыг нэмж оруулсан бөгөөд GPL-ийн шаардлагад нийцэхгүй байгааг дурдсан болно. OpenSSL-тэй холбоход хэрэглэнэ.

OpenSSL 1.1.1 салбартай харьцуулахад OpenSSL 3.0.0 нь 7500 хөгжүүлэгчийн оруулсан 350 гаруй өөрчлөлтийг нэмсэн. OpenSSL 3.0.0-ийн гол шинэчлэлүүд:

  • FIPS 140-2 аюулгүй байдлын стандартад нийцсэн криптограф алгоритмуудын хэрэгжилтийг багтаасан шинэ FIPS модулийг санал болгосон (модулийн гэрчилгээжүүлэх үйл явц энэ сард эхлэх бөгөөд FIPS 140-2 гэрчилгээ ирэх жил болно). Шинэ модулийг ашиглахад илүү хялбар бөгөөд үүнийг олон програмуудтай холбох нь тохиргооны файлыг өөрчлөхөөс илүү хэцүү байх болно. Анхдагч байдлаар, FIPS модуль идэвхгүй бөгөөд enable-fips сонголтыг идэвхжүүлэх шаардлагатай.
  • libcrypto нь хөдөлгүүрийн тухай ойлголтыг орлуулсан залгуур үйлчилгээ үзүүлэгчийн үзэл баримтлалыг хэрэгжүүлдэг (ENGINE API хуучирсан). Үйлчилгээ үзүүлэгчдийн тусламжтайгаар та шифрлэлт, код тайлах, түлхүүр үүсгэх, MAC тооцоолол, тоон гарын үсэг үүсгэх, баталгаажуулах зэрэг үйлдлүүдийн алгоритмын өөрийн хэрэгжилтийг нэмж болно. Шинэ алгоритмуудыг холбож, аль хэдийн дэмжигдсэн алгоритмуудын өөр хувилбаруудыг бий болгох боломжтой (анхдагчаар, OpenSSL-д суулгасан үйлчилгээ үзүүлэгчийг алгоритм бүрт ашигладаг).
  • CA серверээс гэрчилгээ хүсэх, гэрчилгээг шинэчлэх, гэрчилгээг хүчингүй болгоход ашиглаж болох Сертификат Удирдлагын Протоколын (RFC 4210) дэмжлэг нэмсэн. CMP-тэй ажиллах нь CRMF форматыг (RFC 4211) дэмждэг шинэ openssl-cmp хэрэгслийг ашиглан HTTP/HTTPS (RFC 6712) хүсэлт илгээдэг.
  • HTTP болон HTTPS протоколуудад зориулсан бүрэн хэмжээний үйлчлүүлэгч хэрэгжсэн бөгөөд GET болон POST аргуудыг дэмждэг, хүсэлтийг дахин чиглүүлэх, проксигоор дамжуулан ажиллах, ASN.1 кодчилол, хугацаа дуусах процессыг дэмждэг.
  • Хуурамч оруулгын шинэ хэрэгжилтийг нэмэхэд хялбар болгох үүднээс шинэ EVP_MAC (Message Authentication Code API) нэмэгдсэн.
  • Түлхүүр үүсгэх шинэ програм хангамжийн интерфейсийг санал болгож байна - EVP_KDF (Key Derivation Function API) нь KDF болон PRF-ийн шинэ хэрэгжилтийг нэмэхэд хялбар болгодог. Scrypt, TLS1 PRF болон HKDF алгоритмуудыг ашиглах боломжтой байсан хуучин EVP_PKEY API нь EVP_KDF болон EVP_MAC API дээр хэрэгжсэн давхарга хэлбэрээр шинэчлэгдсэн.
  • TLS протоколын хэрэгжилт нь үйл ажиллагааг хурдасгахын тулд Linux цөмд суулгасан TLS клиент болон серверийг ашиглах боломжийг олгодог. Линукс цөмөөс өгсөн TLS хэрэгжилтийг идэвхжүүлэхийн тулд та "SSL_OP_ENABLE_KTLS" сонголт эсвэл "enable-ktls" тохиргоог идэвхжүүлэх ёстой.
  • Шинэ алгоритмуудад нэмэлт дэмжлэг:
    • Түлхүүр үүсгэх алгоритмууд (KDF) нь “SINGLE STEP” ба “SSH” юм.
    • Загвар оруулах алгоритмууд (MAC) нь "GMAC" ба "KMAC" юм.
    • RSA Түлхүүр Encapsulation Algorithm (KEM) "RSASVE".
    • Шифрлэлтийн алгоритм "AES-SIV" (RFC-8452).
    • Түлхүүрийг шифрлэхийн тулд AES алгоритмыг ашиглан урвуу шифрийг дэмждэг EVP API-д дуудлага нэмсэн (Түлхүүр боох): “AES-128-WRAP-INV”, “AES-192-WRAP-INV”, “AES-256-WRAP- INV” , "AES-128-WRAP-PAD-INV", "AES-192-WRAP-PAD-INV" болон "AES-256-WRAP-PAD-INV".
    • "AES-128-CBC-CTS", "AES-192-CBC-CTS", "AES-256-CBC-CTS", "CAMELLIA-128-CBC" гэсэн EVP API-д шифрлэгдсэн текст зээлэх (CTS) алгоритмуудын дэмжлэгийг нэмсэн. -CTS” ", "CAMELLIA-192-CBC-CTS" болон "CAMELLIA-256-CBC-CTS".
    • CAdES-BES тоон гарын үсгийн дэмжлэгийг нэмсэн (RFC 5126).
    • AES_GCM нь AES GCM горимыг ашиглан баталгаажуулж, шифрлэгдсэн мессежийг шифрлэх, тайлахыг идэвхжүүлэхийн тулд AuthEnvelopedData (RFC 5083) параметрийг хэрэгжүүлдэг.
  • PKCS7_get_octet_string болон PKCS7_type_is_бусад функцуудыг нийтийн API-д нэмсэн.
  • PKCS#12 API нь PKCS12_create() функцэд хэрэглэгддэг анхдагч алгоритмуудыг PBKDF2 болон AES-ээр сольж, MAC-ийг тооцоолохдоо SHA-256 алгоритмыг ашигладаг. Өнгөрсөн зан үйлийг сэргээхийн тулд "-legacy" сонголтыг өгсөн. PKCS12_add_key_ex().PKCS5_create_ex() болон PKCS8_decrypt_skey_ex() зэрэг PKCS12_*_ex, PKCS12_*_ex болон PKCS12_*_ex-д олон тооны шинэ өргөтгөсөн дуудлагуудыг нэмсэн.
  • Windows платформын хувьд SRWLock механизмыг ашиглан урсгалын синхрончлолын дэмжлэг нэмэгдсэн.
  • Enable-trace параметрээр идэвхжүүлсэн шинэ мөрдөх API-г нэмсэн.
  • EVP_PKEY_public_check() болон EVP_PKEY_param_check() функцүүдэд дэмжигдсэн түлхүүрүүдийн хүрээг өргөтгөсөн: RSA, DSA, ED25519, X25519, ED448 болон X448.
  • RAND_DRBG дэд системийг устгаж, EVP_RAND API-ээр сольсон. FIPS_mode() болон FIPS_mode_set() функцуудыг устгасан.
  • API-ийн нэлээд хэсэг нь хуучирсан - төслийн кодонд хуучирсан дуудлагуудыг ашигласнаар эмхэтгэлийн явцад анхааруулга өгөх болно. Алгоритмуудын тодорхой хэрэгжилттэй холбоотой доод түвшний API-г (жишээлбэл, AES_set_encrypt_key болон AES_encrypt) албан ёсоор хуучирсан гэж зарласан. OpenSSL 3.0.0-ийн албан ёсны дэмжлэгийг одоо зөвхөн алгоритмын төрлөөс гаргаж авсан өндөр түвшний EVP API-д олгодог (энэ API-д жишээлбэл, EVP_EncryptInit_ex, EVP_EncryptUpdate, EVP_EncryptFinal функцууд орно). Хуучин API-уудыг дараагийн томоохон хувилбаруудын аль нэгэнд нь устгах болно. EVP API-ээр дамжуулан ашиглах боломжтой MD2 болон DES зэрэг хуучин алгоритмуудын хэрэгжилтийг тусдаа "хуучин" модуль руу шилжүүлсэн бөгөөд энэ нь анхдагчаар идэвхгүй байна.
  • Баримт бичиг, туршилтын багцыг ихээхэн өргөжүүлсэн. Салбар 1.1.1-тэй харьцуулахад баримт бичгийн хэмжээ 94%-иар, тестийн багц кодын хэмжээ 54%-иар өссөн байна.

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх