Випуск криптографічної бібліотеки 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 для прискорення операцій. Для задіяння TLS, що надається ядром Linux реалізації, потрібне включення опції «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

Додати коментар або відгук