openssl不是内部或外部命令_OpenSSL新架构蓝图
概述
日前OpenSSL官網(wǎng)公布了未來OpenSSL的架構(gòu)藍(lán)圖。作為戰(zhàn)略性的架構(gòu)目標(biāo),需要大量的版本迭代本文檔概述了OpenSSL戰(zhàn)略架構(gòu)。它需要多個版本的迭代從目前最新的版本1.1開始直到3.0甚至是4.0最終實(shí)現(xiàn)。由于版本架構(gòu)變動非常大,涉及大量的變化和迭代,力爭在OpenSSL 3.0.0版本中實(shí)現(xiàn)對絕大多數(shù)應(yīng)用程序的影響最小,并能高性能的編譯遷移。3.0后對目前版本的功能將通過API來實(shí)現(xiàn),現(xiàn)有引擎將不再支持。本文蟲蟲和大家一起來學(xué)習(xí)OpenSSL的現(xiàn)有架構(gòu)、存在問題,新架構(gòu)、特點(diǎn),實(shí)現(xiàn)等。
現(xiàn)有架構(gòu)
當(dāng)前版本OpenSSL提供的功能主要通過四個主要組件提供:
1. libcrypto加密庫。該庫提供了大量加密算法的實(shí)現(xiàn)。另外提供libssl和libcrypto使用支持服務(wù),以及CMS和OCSP等協(xié)議的實(shí)現(xiàn)。
2.引擎。 libcrypto的功能可以通過Engine API進(jìn)行擴(kuò)展。引擎是可動態(tài)加載的模塊,它們向libcrypto注冊并使用可用的鉤子來提供加密算法實(shí)現(xiàn)。通常這些hook由libcrypto提供的算法的替代實(shí)現(xiàn)(例如,用于實(shí)現(xiàn)算法的硬件加速),還包括默認(rèn)未在OpenSSL中實(shí)現(xiàn)的算法。引擎作為OpenSSL發(fā)行版的一部分提供,未實(shí)現(xiàn)的引擎則通過外部第三方提供。
3.libssl。該庫依賴于libcrypto并實(shí)現(xiàn)TLS和DTLS協(xié)議。
4.應(yīng)用程序。應(yīng)用程序是一組命令行工具,這些工具使用底層的libssl和libcrypto庫來提供一系列的加密和其他功能:
密鑰和參數(shù)的生成和檢查;
證書生成和檢查;
SSL/TLS測試工具集;
ASN.1檢查;
其他等。
現(xiàn)有架構(gòu)的特點(diǎn)和問題
目前版本的OpenSSL具有以下特征和問題:
1.EVP層。
EVP在API級別提供與具體加密功能實(shí)現(xiàn)和打包分開的的高級抽象接口。
EVP層還提供復(fù)合操作,例如簽名和驗證的打包。一些復(fù)合操作也EVP級操作提供(例如HMAC-SHA256)。
EVP還允許使用算法無關(guān)的方式使用加密算法(例如,EVP_DigestSign適用于RSA和ECDSA算法)。
2.不支持FIPS140。
FIPS140只能在OpenSSL-1.0.2中使用,它早于目前架構(gòu),不兼容API或ABI。
架構(gòu)圖
現(xiàn)有的體系結(jié)構(gòu)是一個簡單的4級分層,底部為引擎層和算法層。 TLS層依賴于加密層,應(yīng)用程序依賴于TLS和加密層。
注意:圖中組件的存在并不表示該組件是公共API或旨在供最終用戶直接訪問或使用。
打包圖
以上的各層的功能和組件都被打包到了基礎(chǔ)庫(libcrypto和libssl)以及相關(guān)的引擎接口以及用于運(yùn)行各種應(yīng)用程序?qū)崿F(xiàn)的"openssl"命令行可執(zhí)行文件。打包圖如下所示。
新架構(gòu)
新架構(gòu)的特點(diǎn)
新架構(gòu)的的目的是優(yōu)化現(xiàn)有架構(gòu),新架構(gòu)由一下功能組成:
1、核心服務(wù)由應(yīng)用程序和應(yīng)用程序提供器使用的構(gòu)建塊組成。 (例如BIO,X509,SECMEM,ASN1等)。
2、提供器實(shí)現(xiàn)加密算法和支持服務(wù)。提供器由以下一個或多個功能的組合:
算法的加密子,例如如何加密/解密/簽名/哈希等
算法的序列化,例如如何將私鑰轉(zhuǎn)換為PEM文件。序列化當(dāng)前支持的格式或者不支持的格式的擴(kuò)展。
存儲加載后端。 OpenSSL目前有一個存儲加載程序,可以從文件中讀取密鑰,參數(shù)和其他項。提供器可以從另一個位置(例如LDAP目錄)加載加載器。
提供器可以是完全獨(dú)立的,也可以使用由不同提供器或核心服務(wù)提供的服務(wù)。
例如,應(yīng)用程序可以使用一個加密原子實(shí)現(xiàn)由硬件加速提供程序?qū)崿F(xiàn)的算法,但是其他程序提供的序列化服務(wù)把密鑰導(dǎo)出為PKCS#12格式。
程序默認(rèn)內(nèi)置一個提供器(包含由當(dāng)前OpenSSL加密算法實(shí)現(xiàn)的核心),但其他提供器可以在在運(yùn)行時動態(tài)加載。
舊提供器模塊將為較舊的算法(例如,DES,MDC2,MD2,Blowfish,CAST)提供加密實(shí)現(xiàn)。 OMC會發(fā)布一個策略,說明從舊提供器轉(zhuǎn)化到默認(rèn)提供器的時間和遷移方法。
FIPS提供器內(nèi)嵌的OpenSSL FIPS加密模塊可以在運(yùn)行時動態(tài)加載。
3、核心實(shí)現(xiàn)對默認(rèn)應(yīng)用程序提供器(和其他提供商)提供的服務(wù)器的訪問。提供器負(fù)責(zé)為Core提供服務(wù)和方法。
Core將實(shí)現(xiàn)基于屬性的查找功能,用于算法查找,例如通過"fips = true"或"keysize = 128,constant_time = true"這樣條件來搜索算法。
4、協(xié)議的實(shí)現(xiàn)。例如。 TLS,DTLS。
新架構(gòu)的特點(diǎn):
1、EVP層功能縮減,僅僅對提供器提供的服務(wù)進(jìn)行打包。大多數(shù)功能將直接調(diào)用,沒有或者很少的預(yù)處理和后處理。
2、將提供新的EVP API用來查找Core中提供給特定EVP調(diào)用的算法的實(shí)現(xiàn)。
信息將以與實(shí)現(xiàn)無關(guān)的方式在核心庫和提供者之間傳遞。
3、舊API將被刪除(例如繞過EVP層的底層API)。
4、OpenSSL FIPS加密模塊將由動態(tài)加載的提供器實(shí)現(xiàn),并且自包含,只依賴于核心提供的系統(tǒng)運(yùn)行時庫和服務(wù)。
5、其他接口也可能會隨著時間的推移而轉(zhuǎn)換到核心庫。
6、引擎功能由提供器取代。
架構(gòu)圖
OpenSSL新架構(gòu)圖如下圖所示。
上圖中顯示的組件如下:
1、應(yīng)用程層:命令行應(yīng)用程序,例如ca,ciphers,cms,dgst等
2、協(xié)議:提供根據(jù)標(biāo)準(zhǔn)協(xié)議在端點(diǎn)之間進(jìn)行通信的功能
TLS協(xié)議:所有支持的TLS/DTLS協(xié)議和支持基礎(chǔ)設(shè)施的實(shí)現(xiàn),例如:
SSLBIO:使用TLS進(jìn)行通信的BIO
Statem:TLS狀態(tài)機(jī)
RECORD:TLS記錄層
其他協(xié)議:
CMS:加密消息語法標(biāo)準(zhǔn)的實(shí)現(xiàn)
OCSP:在線證書狀態(tài)協(xié)議的實(shí)現(xiàn)
TS:時間戳協(xié)議的實(shí)現(xiàn)
支持服務(wù):用于支持協(xié)議代碼實(shí)現(xiàn)的組件
Packet:用于讀取協(xié)議消息的內(nèi)部組件
Wpacket:用于編寫協(xié)議消息的內(nèi)部組件
3、核心:這是將服務(wù)請求(例如加密)關(guān)聯(lián)到該服務(wù)的提供器的基礎(chǔ)組件。核心實(shí)現(xiàn)了提供器的注冊幾附屬參數(shù)的設(shè)置。它還支持通過對給定服務(wù)屬性進(jìn)行服務(wù)的搜索功能。例如,加密服務(wù)的屬性可能包括"aead","aes-gcm","fips","security-bits = 128"等。
4、默認(rèn)提供器:實(shí)現(xiàn)核心啟動時默認(rèn)注冊服務(wù)。
支持服務(wù)
低層實(shí)現(xiàn):這是實(shí)際實(shí)現(xiàn)加密算法的一組組件。
5、FIPS提供器:實(shí)現(xiàn)一組經(jīng)過FIPS驗證并可供核心使用的服務(wù)。包括以下支持的服務(wù):
POST:開機(jī)自檢
KAT:已知的答案測試
完整性檢查等等
6、舊提供器:提供通過EVP級API公開的舊算法的實(shí)現(xiàn),為向后兼容提供服務(wù)。
7、第三方提供器:不屬于OpenSSL發(fā)行版。第三方可以實(shí)施自己的提供者。
8、公共服務(wù):這部分構(gòu)成了應(yīng)用程序和提供器可用的構(gòu)建塊。 (例如BIO,X509,SECMEM,ASN1等)。
9、舊版API。 低層API。這里的特指老API,而不是算法本身。例如,AES不是老算法,但它還在老API中(例如AES_encrypt)。
打包圖
以上的架構(gòu)圖提供各種組件都會打包到一下文件,打包圖如下:
可執(zhí)行的應(yīng)用程序供用戶使用;
應(yīng)用程序使用的庫;
可動態(tài)加載的模塊供核心使用。
圖中涉及的包有:
Openssl可執(zhí)行文件。命令行應(yīng)用程序。
libssl。這包含與TLS和DTLS直接相關(guān)的所有內(nèi)容。它的內(nèi)容與現(xiàn)有架構(gòu)中的libssl大致相同,某些支持服務(wù)將移至libcrypto。
Libcrypto。該庫包含以下組件:
核心服務(wù)的實(shí)現(xiàn),例如:X509,ASN1,EVP,OSSL_STORE等
核心
與TLS或DTLS無關(guān)的協(xié)議
協(xié)議支持服務(wù)(例如Packet和Wpacket)
默認(rèn)提供程序,包含所有默認(rèn)算法的實(shí)現(xiàn)
Libcrypto舊程序。提供兼容老程序的底層API。這些APIS算法的實(shí)現(xiàn)可能來自任何提供器。
FIPS模塊。它包含F(xiàn)IPS提供器程序,該提供程序?qū)崿F(xiàn)一組經(jīng)過FIPS驗證并在核心中注冊的服務(wù)。
舊模塊。這包含舊版提供器程序。
總結(jié)
以上是生活随笔為你收集整理的openssl不是内部或外部命令_OpenSSL新架构蓝图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “衰恨满秋容”下一句是什么
- 下一篇: winfrom软件开发汽车测试_ETci