openssl 加密解密 指令_OpenSSL未来架构设计,3.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驗證并在核心中注冊的服務。
舊模塊。這包含舊版提供器程序。
總結
以上是生活随笔為你收集整理的openssl 加密解密 指令_OpenSSL未来架构设计,3.0初步实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 14薪和年终奖一样吗
- 下一篇: vscode 运行html服务器运行_如