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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章