Выпуск крыптаграфічнай бібліятэкі OpenSSL 3.0.0

Пасля трох гадоў распрацоўкі і 19 тэставых выпускаў адбыўся рэліз бібліятэкі OpenSSL 3.0.0 з рэалізацыяй пратаколаў SSL/TLS і разнастайных алгарытмаў шыфравання. Новая галінка ўключае змены, якія парушаюць зваротную сумяшчальнасць на ўзроўні API і ABI, але змены не паўплываюць на працу большасці прыкладанняў, для перакладу якіх з OpenSSL 1.1.1 дастаткова перазборкі. Падтрымка мінулай галіны OpenSSL 1.1.1 будзе ажыццяўляцца да верасня 2023 гады.

Значная змена нумара версіі звязана з пераходам на традыцыйную нумарацыю "Major.Minor.Patch". Першая лічба (Major) у нумары версіі з гэтага часу будзе мяняцца толькі пры парушэнні сумяшчальнасці на ўзроўні API/ABI, а другая (Minor) пры нарошчванні функцыянальнасці без змены API/ABI. Карэкціруючыя абнаўлення будуць пастаўляцца са змяненнем трэцяй лічбы (Patch). Нумар 3.0.0 адразу пасля 1.1.1 абраны для пазбягання скрыжаванняў з змешчаным у распрацоўцы FIPS-модулем да OpenSSL, для якога ўжывалася нумарацыя 2.x.

Другой важнай для праекту зменай стаў пераход з падвойнай ліцэнзіі (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, які ўключае рэалізацыю крыптаграфічных алгарытмаў, якія адпавядаюць стандарту бяспекі FIPS 140-2 (у гэтым месяцы плануецца пачаць працэс сертыфікацыі модуля, атрыманне сертыфіката FIPS 140-2 чакаецца наступным годзе). Новы модуль значна прасцей у выкарыстанні і яго падлучэнне да шматлікіх прыкладанняў будзе не складаней змены файла канфігурацыі. Па змаўчанні модуль FIPS адключаны і патрабуе ўказанні опцыі enable-fips для актывацыі.
  • У libcrypto рэалізавана канцэпцыя падключаюцца правайдэраў, якія прыйшлі на змену канцэпцыі рухавікоў (ENGINE API прызнаны састарэлым). Пры дапамозе правайдэраў можна дадаваць уласныя рэалізацыі алгарытмаў для такіх аперацый як шыфраванне, расшыфроўка, фармаванне ключоў, вылічэнне MAC, стварэнне і праверка лічбавых подпісаў. Магчыма як падлучэнне новых, так і стварэнне альтэрнатыўных рэалізацый ужо падтрымоўваных алгарытмаў (па змаўчанні для кожнага алгарытму зараз выкарыстоўваецца ўбудаваны ў OpenSSL правайдэр).
  • Дададзена падтрымка пратаколу кіравання сертыфікатамі CMP (Certificate Management Protocol, RFC 4210), які можна выкарыстоўваць для запыту сертыфікатаў у сервера які сведчыць цэнтра , абнаўленні сертыфікатаў і водгуку сертыфікатаў. Праца з CMP ажыццяўляецца пры дапамозе новай утыліты openssl-cmp, у якой таксама рэалізавана падтрымка фармату CRMF (RFC 4211) і перадачы запытаў праз HTTP/HTTPS (RFC 6712).
  • Рэалізаваны паўнавартасны кліент для пратаколаў HTTP і HTTPS, які падтрымлівае метады GET і POST, перанакіраванне запытаў, працу праз проксі, кадаваньне ASN.1 і апрацоўку таймаўтаў.
  • Дададзены новы API EVP_MAC (Message Authentication Code API), які спрашчае даданне новых рэалізацый імітаўставак.
  • Прапанаваны новы праграмны інтэрфейс для фарміравання ключоў – EVP_KDF (Key Derivation Function API), які спрашчае даданне новых рэалізацый KDF і PRF. Стары API EVP_PKEY, праз які былі даступныя алгарытмы scrypt, TLS1 PRF і HKDF, перапрацаваны ў форме праслойкі, рэалізаванай па-над API EVP_KDF і EVP_MAC.
  • У рэалізацыі пратаколу TLS прадстаўлена магчымасць выкарыстання ўбудаваных у ядро ​​Linux кліента і сервера TLS для паскарэння аперацый. Для задзейнічання якая прадстаўляецца ядром Linux рэалізацыі TLS патрабуецца ўключэнне опцыі "SSL_OP_ENABLE_KTLS" або налады "enable-ktls".
  • Дададзена падтрымка новых алгарытмаў:
    • Алгарытмы фарміравання ключоў (KDF) - "SINGLE STEP" і "SSH".
    • Алгарытмы імітаўставак (MAC) - "GMAC" і "KMAC".
    • Алгарытм інкапсуляцыі ключоў RSA (KEM) "RSASVE".
    • Алгарытм шыфравання "AES-SIV" (RFC-8452).
    • У API EVP дададзеныя выклікі з падтрымкай інверсіўных шыфраў, якія выкарыстоўваюць алгарытм AES для шыфравання ключоў (Key Wrap): "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".
    • У API EVP дададзена падтрымка алгарытмаў запазычанне шыфратэксту (CTS): "AES-128-CBC-CTS", "AES-192-CBC-CTS", "AES-256-CBC-CTS", "CAMELLIA-128-CBC-CTS" », «CAMELLIA-192-CBC-CTS» і «CAMELLIA-256-CBC-CTS».
    • Дададзена падтрымка лічбавых подпісаў CAdES-BES (RFC 5126).
    • У AES_GCM рэалізаваны параметр AuthEnvelopedData (RFC 5083), які дазваляе зашыфраваць і расшыфроўваць паведамленні, аўтэнтыфікаваныя і зашыфраваныя з выкарыстаннем рэжыму AES GCM.
  • У публічны API вынесены функцыі PKCS7_get_octet_string і PKCS7_type_is_other.
  • У API PKCS#12 алгарытмы, ужывальныя па змаўчанні ў функцыі PKCS12_create(), замененыя на PBKDF2 і AES, а для разліку MAC задзейнічаны алгарытм SHA-256. Для аднаўлення мінулага паводзін прадугледжана опцыя "-legacy". Дададзена вялікая колькасць новых пашыраных выклікаў PKCS12_*_ex, PKCS5_*_ex і PKCS8_*_ex, такіх як PKCS12_add_key_ex().PKCS12_create_ex() і PKCS12_decrypt_skey_ex().
  • Для платформы Windows дададзена падтрымка сінхранізацыі патокаў пры дапамозе механізму SRWLock.
  • Дададзены новы API для трасіроўкі, які ўключаецца праз параметр enable-trace.
  • Пашыраны спектр ключоў, якія падтрымліваюцца ў функцыях EVP_PKEY_public_check() і EVP_PKEY_param_check(): RSA, DSA, ED25519, X25519, ED448 і X448.
  • Выдалена падсістэма RAND_DRBG замест якой прапанаваны API EVP_RAND. Выдалены функцыі FIPS_mode() і FIPS_mode_set().
  • Прыкметная частка API пераведзена ў разрад састарэлых – выкарыстанне састарэлых выклікаў у кодзе праектаў будзе прыводзіць у высновы папярэджання пры кампіляцыі. У тым ліку састарэлымі афіцыйна абвешчаныя нізкаўзроўневыя API, прывязаныя з вызначаным рэалізацыям алгарытмаў (напрыклад, AES_set_encrypt_key і AES_encrypt). Афіцыйная падтрымка ў OpenSSL 3.0.0 зараз падаецца толькі для высокаўзроўневых API EVP, абстрагаваных ад асобных тыпаў алгарытмаў (да дадзенага API ставяцца, напрыклад, функцыі EVP_EncryptInit_ex, EVP_EncryptUpdate і EVP_EncryptFinal). У адным з наступных значных выпускаў састарэлыя API будуць выдалены. Рэалізацыі састарэлых алгарытмаў, такіх як MD2 і DES, даступных праз API EVP, перанесены ў асобны модуль "legacy", які адключаны па змаўчанні.
  • Значна пашыраны дакументацыя і набор тэстаў. У параўнанні з галіной 1.1.1 аб'ём дакументацыі павялічыўся на 94%, а памер кода тэставага набору на 54%.

Крыніца: opennet.ru

Дадаць каментар