OpenSSL 3.0 简介(1)

        在 2020 年 4 月 23 日,OpenSSL 管理委员会和 OpenSSL 技术委员会发布了 OpenSSL 3.0 Alpha1 版本,Alpha 1版本包含基本的功能加上基本的 FIPS(Federal Information Processing Standards,即“联邦信息处理标准”)模块。在 2020 年 5 月 16日发布了 OpenSSL 3.0 Alpha2 版本,在 2020 年 6 月 4 日发布了 Alpha 3 版本。这些 Alpha 系列测试版本中的代码都是试验性质的,还将不断地被修改。

许可证
        OpenSSL 3.0 系列的变化首先体现在许可证方面,OpenSSL 许可证说明所在的网址链接地址是:https://www.openssl.org/source/license.html 。OpenSSL 3.0.0之前的版本(例如: 1.0.2系列,1.1.0系列, 1.1.1系列)使用 OpenSSL 和 SSLeay 双重许可证,从 OpenSSL 3.0.0版本开始,OpenSSL 在git 仓库(其链接为:https://www.openssl.org/source/gitrepo.html)上的主分支(master branch)将不再使用以前的许可证,而是转而使用 Apache v2 许可证,其链接为:https://www.openssl.org/source/apache-license-2.0.txt。注意 3.0.0 版的非 master 分支仍然使用之前的 OpenSSL 和 SSLeay 双重许可证。

设计思想
         尽管 OpenSSL 3.0 版的设计原则说明文档(其链接为:https://www.openssl.org/docs/OpenSSL300Design.html)写得比较晦涩,但还是建议有条件的读者去仔细阅读它。本系列文章将提供针对该文档的一个比较模糊的介绍,目的是让读者能对它有一个粗略的了解。
        OpenSSL 3.0 与之前的 OpenSSL 0.9、1.0、1.1 系列版本相比,设计思想发生了非常巨大的变化。即使是对先前版本比较了解的程序员,也需要重新学习和适应。打一个比方:3.0 版之前的 OpenSSL,就好像是一个巨大的工具箱,里面有像扳手、电钻、锯子等各种各样的工具(与 API 函数对应)。用户只需要学习将要被用到的那个工具的用法,然后就可以直接调用相关的工具。OpenSSL 3.0 版里面的各种功能,不再是一大堆被动等待用户调用的基础工具集合。OpenSSL 的设计者参照 FIPS 关于密码模块的 FIPS 140 系列标准(主要是 FIPS 140-2 和 FIPS 140-3),将 OpenSSL 设计成一个符合 FIPS 140 系列标准的软件密码模块。读者可以将密码模块看作是一个自动化设备或装置,它在对外提供服务之前将会自动“上电自检”。对于软件,上电自检可以理解为当被加载到内存时,自动进行自检。自检的内容包括完整性检查和功能正确性检查,完整性检查的作用是检查这个密码模块是不是被攻击者恶意篡改过,功能正确性检查的作用是检查密码运算等服务是否工作正常,比如对于一个计算数字签名的功能,要检查签名计算是否符合算法标准,即按照算法标准规定的步骤计算得出的签名值能否通过验证。用户在使用 OpenSSL 3.0 时,不再能像以前一样直接调用一些底层密码运算的函数,比如 AES_set_encrypt_key,AES_encrypt,那种方法好像是打开工具箱直接拿取某一个需要的工具。现在只能调用高层级上经过封装的、对用户开放的接口函数,比如 EVP 接口函数。这有点像是在使用一台设备或装置(比如微波炉)时,只能使用设备面板上的几个有限的按钮。封装的作用是屏蔽掉大量的底层函数,特别是与具体算法相关的函数。与 3.0 以前版本相比,3.0 版提供了与算法无关的、形式统一的接口函数。例如 EVP 接口 API 中包含 EVP_EncryptInit_ex, EVP_EncryptUpdate 及 EVP_EncryFinal 这三个函数,可以用它们来执行对称加密。用户要做 AES、CHACHA 等多种算法的加解密时,都是通过调用这几个 EVP 函数来实现。这样做的一个好处是减轻用户负担,用户不需要去学习、记忆那些与具体算法有关、数量众多的底层密码函数,只需要掌握少量的通用函数,就足以执行多种密码运算了。

背景知识
        OpenSSL 3.0 版是参照 FIPS 140 系列标准开发的,FIPS 140 是美国国家标准与技术研究院 (NIST)制订的、定义密码模块安全要求的标准,该标准系列主要包括:
1)已作废的 FIPS 140-1,在 2001 年 FIPS 140-2 取代了它;
2)当前有效的 FIPS 140-2 标准,相关链接是 https://csrc.nist.gov/publications/detail/fips/140/2/final ,FIPS 140-2 测试认证将在 2021 年 9 月 22 日终止;
3)即将取代 FIPS 140-2 的 FIPS 140-3 标准。美国商务部长在 2019 年 3 月 22 日批准了 FIPS 140-3 ,它将在被批准时间的六个月之后(即 2019 年 9 月 22 日)正式生效,相关链接是 https://csrc.nist.gov/publications/detail/fips/140/3/final 。
        国内也有类似的标准,比如密码行业标准 GM/T 0028《密码模块安全技术要求》及其对应的国家标准 GB/T 37092《信息安全技术 密码模块安全要求》。
        如果想要深入理解 OpenSSL 3.0,需要了解 FIPS 140-3。

OpenSSL 3.0的新变化
1)引入了一个被称为“提供者”(Provider)的概念;所有的密码算法都将在“提供者”的概念下被实施,在 OpenSSL 3.0 中可以通过编程或设置一个配置文件的方式,来为具体的应用指定将使用哪一个提供者。
2)实施了 RFC 4210 《Certificate Management Protocol》(CMP) 中定义的证书管理协议;
3)在 libcrypto 库文件中实现了新的 HTTP 及 HTTPS 客户端,支持 GET 和 POST、重定向、普通内容及ASN.1 编码内容、代理、超时控制;
4)为了支持密钥导出函数(Key Derivation Function),增加了EVP_KDF  API 接口函数;
5)为了更好地支持 MAC(Message Authentication Code),增加了EVP_MAC API 接口函数;
6)支持Linux Kernel TLS。

你可能感兴趣的:(OpenSSL,openssl)