LibreSSL 4.1.0 版本发布:安全性与性能的全面提升
LibreSSL 是一个开源的加密协议库,它是 OpenSSL 的一个分支,专注于提供更安全、更现代的加密实现。作为 TLS/SSL 协议的重要实现之一,LibreSSL 被广泛应用于各种操作系统和应用程序中,特别是在 OpenBSD 项目中作为默认的加密库。
跨平台支持与构建改进
最新发布的 LibreSSL 4.1.0 版本在跨平台支持方面取得了显著进展。开发团队新增了对龙芯架构(loongarch64)的实验性支持,修复了 mips32 架构的编译问题并重新启用了相关 CI 测试。对于 FreeBSD 用户,修复了 CMake 构建系统的问题,同时修正了 cmake --install 命令中 --prefix 选项的行为。针对 Windows 平台的 MinGW 环境,修复了由于缺少 sh(1) 导致的测试问题。
加密算法内部实现优化
在加密算法实现方面,4.1.0 版本进行了多项重要改进:
-
椭圆曲线加密(ECC)优化:彻底重写了 EC ASN.1 相关代码,修正了 EC 密钥和参数的 DER 编码实现。优化了 EC_POINT_{oct2point,point2oct}() 的内部实现,改进了设置 EC 点压缩坐标的代码。EC_GROUP 和 EC_POINT 中的 BIGNUM 现在采用堆分配方式,提高了内存管理效率。
-
SHA 算法加速:针对 amd64 架构,开发了全新的 SHA-1、SHA-256 和 SHA-512 汇编实现,这些实现能够自动检测并利用 SHA-NI 指令集(如果可用),取代了之前由 Perl 生成的旧版汇编代码。对于 aarch64 架构,新增了利用 ARM 加密扩展(CE)的 SHA-256 和 SHA-512 汇编实现。
-
其他加密算法改进:简化并重写了 MD5 的 amd64 实现,使其更易读且高效。改进了 SM4 算法的实现,使其与其他对称加密算法更加一致。重写了 BN_bn2binpad() 及其小端版本,优化了大数处理性能。
兼容性调整与 API 变更
4.1.0 版本引入了一些重要的 API 变更和兼容性调整:
-
椭圆曲线相关变更:移除了 EC_METHOD 相关的公共 API,包括 EC_GROUP_new()、EC_GFp_mont_method() 等函数。现在只接受编码内置曲线的椭圆曲线参数。移除了对小于 224 位字段的所有椭圆曲线的支持,包括所有 WTLS 曲线和 P-192。
-
内存管理接口变更:CRYPTO_set_mem_functions() 现在与 OpenSSL 1.1 保持一致,同时移除了 CRYPTO_set_mem_ex_functions()。
-
命令行工具调整:移除了 openssl 命令中 dh、dhparam 等子命令的 -C 选项,该选项原本用于生成"C代码"。
-
新增功能:libtls 新增了 tls_peer_cert_common_name() API,方便开发者获取对等证书的通用名而不必检查 PEM 数据。
安全修复与内存管理
该版本修复了多个安全问题:
- 修复了 eckey_compute_pubkey() 中的内存泄漏问题。
- 恢复了 RSA-PSS 密钥在 EVP_PKEY_CTX_ctrl_str() 接口中对盐长度特殊值(-1, -2, -3)的支持。
- 修复了遗留代码中的多个内存泄漏问题。
- 改进了 X509_VERIFY_PARAM 内部实现,避免了公共 API 中的越界读取问题。
文档与测试改进
文档方面,完成了剩余未记录的公共 EVP API 文档化工作,并对现有文档进行了重组以提高清晰度和准确性。测试方面,显著提升了椭圆曲线代码的回归测试覆盖率,确保实现的正确性和稳定性。
总结
LibreSSL 4.1.0 是一个重要的版本更新,它在性能优化、安全加固和代码现代化方面取得了显著进展。通过引入新的汇编优化实现、简化内部数据结构、移除不安全的遗留功能,LibreSSL 继续朝着提供更安全、更高效的加密库目标迈进。对于开发者而言,需要注意一些 API 变更,特别是与椭圆曲线加密相关的接口调整。这些改进使得 LibreSSL 在现代加密应用场景中更具竞争力,为开发者提供了更可靠的加密基础设施。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考