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

添加评论