OpenSSL未来架构设计,3.0初步实现
qiyuwang 2024-10-08 10:34 20 浏览 0 评论
概述
日前OpenSSL官网公布了未来OpenSSL的架构蓝图。作为战略性的架构目标,需要大量的版本迭代本文档概述了OpenSSL战略架构。它需要多个版本的迭代从目前最新的版本1.1开始直到3.0甚至是4.0最终实现。由于版本架构变动非常大,涉及大量的变化和迭代,力争在OpenSSL 3.0.0版本中实现对绝大多数应用程序的影响最小,并能高性能的编译迁移。3.0后对目前版本的功能将通过API来实现,现有引擎将不再支持。本文虫虫和大家一起来学习OpenSSL的现有架构、存在问题,新架构、特点,实现等。
现有架构
当前版本OpenSSL提供的功能主要通过四个主要组件提供:
1. libcrypto加密库。该库提供了大量加密算法的实现。另外提供libssl和libcrypto使用支持服务,以及CMS和OCSP等协议的实现。
2.引擎。 libcrypto的功能可以通过Engine API进行扩展。引擎是可动态加载的模块,它们向libcrypto注册并使用可用的钩子来提供加密算法实现。通常这些hook由libcrypto提供的算法的替代实现(例如,用于实现算法的硬件加速),还包括默认未在OpenSSL中实现的算法。引擎作为OpenSSL发行版的一部分提供,未实现的引擎则通过外部第三方提供。
3.libssl。该库依赖于libcrypto并实现TLS和DTLS协议。
4.应用程序。应用程序是一组命令行工具,这些工具使用底层的libssl和libcrypto库来提供一系列的加密和其他功能:
密钥和参数的生成和检查;
证书生成和检查;
SSL/TLS测试工具集;
ASN.1检查;
其他等。
现有架构的特点和问题
目前版本的OpenSSL具有以下特征和问题:
1.EVP层。
EVP在API级别提供与具体加密功能实现和打包分开的的高级抽象接口。
EVP层还提供复合操作,例如签名和验证的打包。一些复合操作也EVP级操作提供(例如HMAC-SHA256)。
EVP还允许使用算法无关的方式使用加密算法(例如,EVP_DigestSign适用于RSA和ECDSA算法)。
2.不支持FIPS140。
FIPS140只能在OpenSSL-1.0.2中使用,它早于目前架构,不兼容API或ABI。
架构图
现有的体系结构是一个简单的4级分层,底部为引擎层和算法层。 TLS层依赖于加密层,应用程序依赖于TLS和加密层。
注意:图中组件的存在并不表示该组件是公共API或旨在供最终用户直接访问或使用。
打包图
以上的各层的功能和组件都被打包到了基础库(libcrypto和libssl)以及相关的引擎接口以及用于运行各种应用程序实现的"openssl"命令行可执行文件。打包图如下所示。
新架构
新架构的特点
新架构的的目的是优化现有架构,新架构由一下功能组成:
1、核心服务由应用程序和应用程序提供器使用的构建块组成。 (例如BIO,X509,SECMEM,ASN1等)。
2、提供器实现加密算法和支持服务。提供器由以下一个或多个功能的组合:
算法的加密子,例如如何加密/解密/签名/哈希等
算法的序列化,例如如何将私钥转换为PEM文件。序列化当前支持的格式或者不支持的格式的扩展。
存储加载后端。 OpenSSL目前有一个存储加载程序,可以从文件中读取密钥,参数和其他项。提供器可以从另一个位置(例如LDAP目录)加载加载器。
提供器可以是完全独立的,也可以使用由不同提供器或核心服务提供的服务。
例如,应用程序可以使用一个加密原子实现由硬件加速提供程序实现的算法,但是其他程序提供的序列化服务把密钥导出为PKCS#12格式。
程序默认内置一个提供器(包含由当前OpenSSL加密算法实现的核心),但其他提供器可以在在运行时动态加载。
旧提供器模块将为较旧的算法(例如,DES,MDC2,MD2,Blowfish,CAST)提供加密实现。 OMC会发布一个策略,说明从旧提供器转化到默认提供器的时间和迁移方法。
FIPS提供器内嵌的OpenSSL FIPS加密模块可以在运行时动态加载。
3、核心实现对默认应用程序提供器(和其他提供商)提供的服务器的访问。提供器负责为Core提供服务和方法。
Core将实现基于属性的查找功能,用于算法查找,例如通过"fips = true"或"keysize = 128,constant_time = true"这样条件来搜索算法。
4、协议的实现。例如。 TLS,DTLS。
新架构的特点:
1、EVP层功能缩减,仅仅对提供器提供的服务进行打包。大多数功能将直接调用,没有或者很少的预处理和后处理。
2、将提供新的EVP API用来查找Core中提供给特定EVP调用的算法的实现。
信息将以与实现无关的方式在核心库和提供者之间传递。
3、旧API将被删除(例如绕过EVP层的底层API)。
4、OpenSSL FIPS加密模块将由动态加载的提供器实现,并且自包含,只依赖于核心提供的系统运行时库和服务。
5、其他接口也可能会随着时间的推移而转换到核心库。
6、引擎功能由提供器取代。
架构图
OpenSSL新架构图如下图所示。
上图中显示的组件如下:
1、应用程层:命令行应用程序,例如ca,ciphers,cms,dgst等
2、协议:提供根据标准协议在端点之间进行通信的功能
TLS协议:所有支持的TLS/DTLS协议和支持基础设施的实现,例如:
SSLBIO:使用TLS进行通信的BIO
Statem:TLS状态机
RECORD:TLS记录层
其他协议:
CMS:加密消息语法标准的实现
OCSP:在线证书状态协议的实现
TS:时间戳协议的实现
支持服务:用于支持协议代码实现的组件
Packet:用于读取协议消息的内部组件
Wpacket:用于编写协议消息的内部组件
3、核心:这是将服务请求(例如加密)关联到该服务的提供器的基础组件。核心实现了提供器的注册几附属参数的设置。它还支持通过对给定服务属性进行服务的搜索功能。例如,加密服务的属性可能包括"aead","aes-gcm","fips","security-bits = 128"等。
4、默认提供器:实现核心启动时默认注册服务。
支持服务
低层实现:这是实际实现加密算法的一组组件。
5、FIPS提供器:实现一组经过FIPS验证并可供核心使用的服务。包括以下支持的服务:
POST:开机自检
KAT:已知的答案测试
完整性检查等等
6、旧提供器:提供通过EVP级API公开的旧算法的实现,为向后兼容提供服务。
7、第三方提供器:不属于OpenSSL发行版。第三方可以实施自己的提供者。
8、公共服务:这部分构成了应用程序和提供器可用的构建块。 (例如BIO,X509,SECMEM,ASN1等)。
9、旧版API。 低层API。这里的特指老API,而不是算法本身。例如,AES不是老算法,但它还在老API中(例如AES_encrypt)。
打包图
以上的架构图提供各种组件都会打包到一下文件,打包图如下:
可执行的应用程序供用户使用;
应用程序使用的库;
可动态加载的模块供核心使用。
图中涉及的包有:
Openssl可执行文件。命令行应用程序。
libssl。这包含与TLS和DTLS直接相关的所有内容。它的内容与现有架构中的libssl大致相同,某些支持服务将移至libcrypto。
Libcrypto。该库包含以下组件:
核心服务的实现,例如:X509,ASN1,EVP,OSSL_STORE等
核心
与TLS或DTLS无关的协议
协议支持服务(例如Packet和Wpacket)
默认提供程序,包含所有默认算法的实现
Libcrypto旧程序。提供兼容老程序的底层API。这些APIS算法的实现可能来自任何提供器。
FIPS模块。它包含FIPS提供器程序,该提供程序实现一组经过FIPS验证并在核心中注册的服务。
旧模块。这包含旧版提供器程序。
相关推荐
- 在Word中分栏设置页码一页两个页码的技巧!
-
施老师:在正常情况下,Word文档中一页只会出现一个页码。但在某种情况下,比如说:用了分栏后,我们希望一页中出现两个页码,那应该如何实现呢?今天,就由宁双学好网施老师来为大家讲一下,利用域来实现一页两...
- 如何在关键时刻向上自荐(如何在关键时刻做出正确选择)
-
抓住机会,挺身而出有种时刻叫“关键时刻”,关键时刻,作为一个认为自己有能力的、训练有素的人,应该考虑挺身而出,甚至应该不考虑就挺身而出。...
- WPS Word:跨页的文档表格,快速调整为一页。#Excel
-
如何快速将跨页的文档表格调整为一页?需要根据两种情况分别处理。如果表格所有行的行高相同,调整为一页的方法有两种。第一种方法是将光标移动到表格内,然后将鼠标移动到表格右下角的方框处,按住鼠标左键向上拖动...
- word文档插入下一页分节符(word下一页分页符)
-
在word文档中,对文档页面进行分页是特别常见的操作,其中的下一页分节符也是用得比较多的,但是一些人不太清楚在哪里设置,也不知道它具体能实现的功能是什么。接下来看看如何在word文档中插入下一页分节符...
- word文档如何设置某一页纸张的方向
-
word文档页面方向有横向和纵向,纵向是默认的纸张方向,有时我们需要将页面设置为横向,或只设置其中某一页方向,应该怎么操作呢?一起来看看下面的详细介绍第一步:...
- word怎么单独设置一页为横向(word2019怎样设置单独一页为横向)
-
word里面其中一页可以改为横向的吗?经过实际操作发现是完全可以的。...
- Word如何设置分栏,如何一页内容同时显示一栏和两栏
-
我们使用Word文档,有时需要用到两栏的排版,甚至一页内容同时包含一栏和两栏的排版,这种格式怎么设置呢?具体步骤如下:首先是两栏排版的设置,直接点击Word文件上方工具栏【布局】,选择【分栏】下面的【...
- Word怎么分页?这三个方法可以帮到你
-
我们不仅可以利用Word编辑文档,还可以编辑文集呢。但是有时候会出现两个部分的文章长短不一,我们需要对文档进行分页处理。这样可以方便我们对文档进行其他操作。那么Word怎么分页呢?大家可以采用下面这...
- Word内容稍超一页,如何优化至单页打印?
-
如何将两页纸的内容,缩到一页打印呢?有时候一页纸多一点内容,我们完全可以缩一下,放到一页来打印。...
- [word] word 表格如何跨行显示表头、标题
-
word表格如何跨行显示表头、标题在Word中的表格如果过长的话,会跨行显示在另一页,如果想要在其它页面上也显示表头,更直观的查看数据。难道要一个个复制表头吗?当然不是,教你简单的方法操作设置Wo...
- Word表格跨页如何续上表?(word如何让表格跨页不断掉)
-
长文档的表格跨页时,你会发现页末空白太多了,这时要怎么调整?选中整张表格,右击【表格属性】,点击【行】选项,之后勾选【允许跨页断行】,点击确定即可解决空白问题。...
- Word怎么连续自动生成页码,操作步骤来了!
-
Word怎么连续自动生成页码,操作步骤来了!...
- word文档怎么把两页合并成一页内容?教你4种方法
-
word怎么把两页合并成一页?word怎么把两页合并成一页?用四种方法演示一下。·方法一:把这一个文档合并成一页,按ctrl加a全选文档,然后右键点击段落,弹出的界面行距改成固定值,磅值可以改小一点,...
- 如何将Word中的一页的纸张方向设置为横向?这里提供详细步骤
-
默认情况下,MicrosoftWord将页面定向为纵向视图。虽然这在大多数情况下都很好,但你可能拥有在横向视图中看起来更好的页面或页面组。以下是实现这一目标的两种方法。无论使用哪种方法,请注意,如果...
- Word横竖混排你会玩吗?(word横排竖排混合)
-
我们在用Word排版的时候,一般都是竖版格式,但偶尔会需要到一些特殊的版式要求,比如文档中插入的一个表格,横向的内容比较多,这时就需要用到横版,否则表格显示不全。这种横竖版混排的要求,在Word20...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- navicat无法连接mysql服务器 (65)
- 下横线怎么打 (71)
- flash插件怎么安装 (60)
- lol体验服怎么进 (66)
- ae插件怎么安装 (62)
- yum卸载 (75)
- .key文件 (63)
- cad一打开就致命错误是怎么回事 (61)
- rpm文件怎么安装 (66)
- linux取消挂载 (81)
- ie代理配置错误 (61)
- ajax error (67)
- centos7 重启网络 (67)
- centos6下载 (58)
- mysql 外网访问权限 (69)
- centos查看内核版本 (61)
- ps错误16 (66)
- nodejs读取json文件 (64)
- centos7 1810 (59)
- 加载com加载项时运行错误 (67)
- php打乱数组顺序 (68)
- cad安装失败怎么解决 (58)
- 因文件头错误而不能打开怎么解决 (68)
- js判断字符串为空 (62)
- centos查看端口 (64)