+38/050/370-3627
+38/093/220-0872
+38/044/257-2444
Новини

Відбувся реліз криптографічної бібліотеки OpenSSL 3.0

Випущено криптографічну бібліотеку OpenSSL 3.0

OpenSSL - це повноцінна криптографічна бібліотека з відкритим кодом, широко відома розширенням SSL / TLS, що використовується у веб-протоколі HTTPS.

Був випущений  OpenSSL 3.0 . В ході розробки було випущено 17 альфа-версій, дві бета-версії і отримано понад 7500 комітів від більш ніж 350 учасників, а також введено ряд виправлень і оновлень. Як зазначається, обсяг документації збільшився на 94% в порівнянні з версією 1.1.1, а обсяг коду - на 54%. З виходом нового релізу схема версії, як вона була анонсована ще в 2018 році, змінилася.

Підтримка попередньої гілки OpenSSL 1.1.1 буде надаватися до вересня 2023 року.

Істотна зміна номера версії пов'язано з переходом на традиційну нумерацію «Major.Minor.Patch». Перша цифра (Major) в номері версії тепер буде змінюватися тільки при порушенні сумісності на рівні API/ABI, а друга (Minor) при збільшенні функціональності без зміни API/ABI. Коригувальні оновлення будуть поставлятися зі зміною третьої цифри (Патч). Число 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 додав понад 7500 змін, підготовлених 350 розробниками. Основні нововведення  OpenSSL 3.0.0:

  • Був запропонований новий модуль FIPS, який включає впровадження криптографічних алгоритмів, сумісних з FIPS 140-2 (процес сертифікації модулів планується розпочати в цьому місяці, а FIPS 140-2, як очікується, буде сертифікований в наступному році). Новий модуль набагато простіше у використанні і його підключення до багатьох додатків буде не складніше, ніж зміна конфігураційного файлу. За замовчуванням модуль FIPS відключений і вимагає активації опції enable-fips.
  • libcrypto  реалізує концепцію провайдерів плагінів, які прийшли на зміну концепції движків (ENGINE API визнаний застарілим). За допомогою провайдерів можна додавати власні реалізації алгоритмів для таких операцій, як шифрування, дешифрування, генерація ключів, MAC-розрахунок, створення і перевірка цифрових підписів. Є можливість як підключення нових, так і створення альтернативних реалізацій вже підтримуваних алгоритмів (за замовчуванням для кожного алгоритму тепер використовується вбудований провайдер OpenSSL).
  • Додано підтримку протоколу керування сертифікатами (CMP ) (RFC 4210), за допомогою якого можна запитувати сертифікати із сервера ЦС, поновлювати сертифікати та відкликати сертифікати. Робота з CMP здійснюється за допомогою нової утиліти openssl-cmp, яка також підтримує формат CRMF (RFC 4211) і передачу запитів по HTTP/HTTPS (RFC 6712).
  • Реалізований повноцінний клієнт для протоколів HTTP і HTTPS, що підтримує методи GET і POST, переадресацію запитів, проксі-сервер, кодування ASN.1, обробку тайм-ауту.
  • Додано новий api EVP_MAC (Api коду аутентифікації повідомлень ), що дозволяє легко додавати нові імітаційні реалізації .
  • Запропоновано новий програмний інтерфейс для генерації ключів - EVP_KDF (Key Derivation Function API), що спрощує додавання нових реалізацій KDF і PRF. Старий api EVP_PKEY, за допомогою якого були доступні алгоритми scrypt, TLS1 PRF і HKDF, був перероблений у вигляді шару, реалізованого поверх EVP_KDF і EVP_MAC API.
  • Реалізація протоколу TLS надає можливість використовувати вбудований в ядро Linux клієнт і сервер TLS для прискорення операцій. Реалізація TLS, передбачена ядром Linux, вимагає увімкнення опції "SSL_OP_ENABLE_KTLS" або параметра "enable-ktls".
  • Додана підтримка нових алгоритмів:
    • Алгоритми генерації ключів (КДФ) - «ОДИНОЧНИЙ КРОК» і «СШ».
    • Імітаційні алгоритми доставки (MAC) - «GMAC» і «KMAC».
    • Алгоритм інкапсуляції ключів RSA (КЕМ) "RSASVE".
    • Алгоритм шифрування "AES-SIV" (RFC-8452).
    • EVP API додає виклики, які підтримують інвертовані шифри, які використовують алгоритм 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".
    • До EVP API додана підтримка алгоритмів запозичення тексту шифрів (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, а алгоритм SHA-256 використовується для розрахунку MAC. Для відновлення минулого поведінки передбачена опція «-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 замість якої пропонується 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 будуть видалені. Реалізації застарілих алгоритмів, таких як MD2 і DES, доступні через EVP API, були переміщені в окремий «застарілий» модуль, який за замовчуванням відключений.
  • Документація та набір тестів були значно розширені. У порівнянні з гілкою 1.1.1 обсяг документації збільшився на 94%, а розмір коду тесту встановлений на 54%.

Інші новини