OpenSSL 3.0.0 密碼庫發布

經過三年的開發和 19 次測試發布,OpenSSL 3.0.0 庫發布,實現了 SSL/TLS 協定和各種加密演算法。 新分支包括破壞 API 和 ABI 層級的向後相容性的更改,但這些更改不會影響大多數需要重建才能從 OpenSSL 1.1.1 遷移的應用程式的操作。 OpenSSL 1.1.1 的先前分支將支援到 2023 年 XNUMX 月。

版本號的重大變化是由於過渡到傳統的“Major.Minor.Patch”編號。 從現在開始,只有當API/ABI 等級的兼容性被破壞時,版本號碼中的第一個數字(主要)才會更改,而當功能增加而不更改API/ABI 時,第二個數字(次要)才會更改。 將透過更改第三位數字(補丁)來提供糾正性更新。 選擇 3.0.0 之後的數字 1.1.1 是為了避免與目前正在開發的 OpenSSL FIPS 模組重疊,該模組使用 2.x 編號。

此專案的第二個重要變更是從雙重授權(OpenSSL 和 SSLeay)過渡到 Apache 2.0 授權。 先前專有的 OpenSSL 授權是基於舊版 Apache 1.0 授權的文本,並且需要在使用 OpenSSL 程式庫時在行銷資料中明確提及 OpenSSL,以及如果 OpenSSL 作為產品的一部分提供的特殊通知。 這些要求使得舊許可證與 GPL 不相容,從而很難在 GPL 許可的專案中使用 OpenSSL。 為了解決這種不相容性,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 中內建的提供者現在用於每個演算法)。
  • 新增了對憑證管理協定 (RFC 4210) 的支持,該協定可用於從 CA 伺服器請求憑證、更新憑證和撤銷憑證。 使用新的 openssl-cmp 實用程式可以使用 CMP,該實用程式還支援 CRMF 格式 (RFC 4211) 並透過 HTTP/HTTPS (RFC 6712) 發送請求。
  • 已經實現了 HTTP 和 HTTPS 協定的成熟用戶端,支援 GET 和 POST 方法、請求重定向、透過代理程式工作、ASN.1 編碼和逾時處理。
  • 新增了新的 EVP_MAC(訊息驗證程式碼 API),以便更輕鬆地新增模擬插入的新實作。
  • 提出了一種用於生成密鑰的新軟體介面 - EVP_KDF(密鑰導出函數 API),它簡化了 KDF 和 PRF 新實現的新增。 舊的 EVP_PKEY API(可透過其使用 scrypt、TLS1 PRF 和 HKDF 演算法)已以在 EVP_KDF 和 EVP_MAC API 之上實現的層的形式進行了重新設計。
  • 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)。
    • 新增了對EVP API 的調用,支援使用AES 演算法加密金鑰的逆密碼(金鑰包裝):「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 模式驗證和加密的訊息的加密和解密。
  • PKCS7_get_octet_string 和 PKCS7_type_is_other 函數已新增至公共 API 中。
  • PKCS#12 API 將 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%。

來源: opennet.ru

添加評論