簡介: Anolis OS國密是社區在Anolis OS上做的國密技術解決方案。
編者注:本文系兩位演講者整理,他們在2021年阿里雲開發者大會的「開源操作系統社區和生態分論壇」上帶了分享,演講主題為《國密技術開發與實踐》,為國內的基礎軟件生態添磚加瓦。
作者分別是阿里雲技術專家張天佳與螞蟻集團高級技術專家楊洋。張天佳主要負責Anolis OS上國密技術的開發和應用,參與實現了 libgcrypt 中的國密算法和 linux內核中的 SM2 算法;楊洋則主導開發了 BabaSSL,也是國內唯一的一個 OpenSSL maintainer,參與起草並推動 RFC8998 標准國際化。相信兩位技術人的干貨分享,能給開發者們帶來一定的思考。
以下為技術內容解析:
國密——密碼算法的國產化
說到密碼算法,大家一定很熟悉 MD5,AES,RSA 這些通用的國際標准算法,這也是目前我們普遍采用的密碼學算法,它們在數據安全、通信、區塊鏈等眾多領域都有着廣泛的應用。
眾所周知,這些算法標准都是國外制定的,在某些情況下這會對國內信息安全有不利影響。當下有實力的國家,甚至有些大公司都制定了自己的算法標准。
顧名思義,國密就是密碼算法的國產化,跟其它領域一樣,密碼算法的國產化已經勢不可擋,這也是我們必須要做的事情。中國的國密算法為我們提供了一個新的選擇,在必要的場合中可以選擇替代那些國際主流算法,尤其是當下國際貿易沖突,技術封鎖不可忽視的大環境下,大規模推廣和采用國密算法將為國內重要的網絡基礎設施提供可靠的數據安全保障。
國密是什么?
我是誰,從哪里來?
國密是一個口語化的稱呼,官方名稱是國家商用密碼,簡稱商密,拼音縮寫是SM,這也是國密標准中具體算法名字的來源。國密是用於商用的、不涉及國家秘密的密碼技術。
國密標准完全由中國密碼管理局制定,主要的技術實現也基本是國內開發人員完成的,這對擺脫國外的密碼技術和產品依賴是非常有利的。
到哪里去?
自2012 以來,SM2/3/4 的國密標准陸續公布,目前國密技術生態基本處於一個正在逐步走向成熟的階段,但國內密碼基礎軟件在采用國密算法方面仍處於碎片化的狀態,比如我們經常可以看到各種個人或組織名義開源的支持國密算法的庫;此外這些開源項目的安全更新和社區活躍也都做的不好。國密的推廣仍然需要我們中國基礎軟件的開發者和用戶共同努力。
2020年1月1日,《中華人民共和國密碼法》正式實施,從法律層面規范了國家商用密碼的應用和管理,這也為推廣和應用國密提供了必要的法律保障。
與國際算法的對比
這里是國密算法和國際通用算法的一個對比,可以直觀地看到國密的一個基本情況:
針對各種常用的國際能用算法類型,比如對稱算法,公鑰算法和消息摘要算法,國密標准都定義了對應的相同功能的國密算法,比如 SM4 提供了與 AES 同樣的加密強度,並且支持各種加密模式;SM2 是基於橢圓曲線的公鑰算法,同時定義了非對稱加解密,數字簽名和密鑰交換標准,相對於 RSA,SM2 的密鑰更短,但支持的加密強度卻更高;SM3 是國密定義的消息摘要算法標准,摘要長度是固定的256位,強度等同於 SHA256。
除了基礎的算法,國密標准也定義了TLCP國密雙證書協議,用以支持國內的傳輸層安全協議。這里還有一個好消息,今年三月份,TLS1.3+ 國密單證書協議正式被國際標准所承認,並且以 RFC8998 標准發布,這意味着我們可以選擇在TLS1.3協議中使用完整的國密套件,目前我們也在聯系正規瀏覽器廠商支持這個標准的實施和應用。
同時國密也定義了使用國密算法的 X509 證書,使用 SM3 哈希算法,SM2 算法作為數字簽名,證書類型是 SM2-with-SM3。
對開發者來說,國密提供了一個選擇,可以選擇從國際通用算法平滑遷移過來。除此之外,國密還有其它一些算法標准,是不太常用的,比如 SM9,ZUC 算法等。
BabaSSL 的前世今生
BabaSSL 是主打國密的密碼算法庫,與 OpenSSL 1.1.1 保持兼容,作為國密的密碼算法解決方案而誕生。
BabaSSL 是基於之前螞蟻集團和阿里集團內部的 OpenSSL 版本合並而來,並首次進行了開源。BabaSSL 的含義是:靈巧、輕快且靠譜的密碼學和 SSL/TLS 工具庫。
BabaSSL 的綠色商標,是基於阿里的橙色和螞蟻的藍色混合而來,也意味着我們希望將 BabaSSL 打造成一個靈活、小巧並且健壯的基礎密碼學庫。
BabaSSL 目前在阿里集團和螞蟻集團內部得到了非常廣泛的使用。從具體場景來看,有如下三個方面,分別是存儲、網絡和端上的設備。其中網絡服務的場景,是BabaSSL 最大的支撐場景,例如淘寶、天貓、阿里雲等各種涉及到鏈路加密的服務器端。此外移動端 App,例如支付寶手機 App 中集成了 BabaSSL 來實現多種密碼學的能力。
開源
BabaSSL 已經在去年的10月份進行了開源,目前代碼是托管在 OpenAnolis 上,當前開源的版本是 8.2.0,也是我們目前最新的穩定版本。
目前 BabaSSL 在阿里內部使用的版本和開源版本之間存在一定的差異,我們目前正在逐步把內部版本的功能特性遷移到開源版本上進行開源,最終變成一個統一的開源版本,那么屆時阿里內部也完全依賴於這個開源的版本,而不會再保留內部的閉源版本。
特色功能以下是 BabaSSL 當前最新穩定版本 8.2.0 的主要特色功能特性:
- 基於 OpenSSL 1.1.1,具備 OpenSSL 1.1.1的全部能力並且保持兼容
- 支持國密 SM2, SM3和 SM4,並對 OpenSSL 1.1.1中所欠缺的 SM2 能力,比如 X509 證書的簽發和驗證功能進行了補全
- GM/T 0024 和 TLCP 國密雙證書TLS協議
- 支持 RFC 8998:TLS 1.3+國密單證書
- 提供了對 IETF 正在標准化過程中的 Delegated Credentials
- 支持 IETF QUIC API 底層密碼學能力
- 更加完善的 SM2 算法支持,比如 X.509 證書簽發、驗簽的支持
- 正在申請軟件密碼模塊一級資質
與OpenSSL對比
接下來是大家很關心的 BabaSSL 和 OpenSSL 這種老牌的密碼算法庫之間的區別:
從圖上可以看到一些主要區別:
- 對於一些新的密碼學技術標准,BabaSSL 會采取一種相對激進的策略快速跟進,比如在 IETF 中一些正在標准化流程中的技術方案,例如 delegated credentials, compact TLS 等,會進行原型的實現和快速跟進,而 OpenSSL則是相對保守,因為 OpenSSL 社區的策略是原則上只實現已經發布了的國際標准和國家標准。
- 在對於國密算法、國密協議、國密的監管合規、雲計算廠商的深度集成、以及國產化硬件等方面,BabaSSL 會進行更加深度和廣泛的支持,而 OpenSSL 則支持的比較有限。
- 對於API的易用程度,由於沒有歷史包袱,所以 BabaSSL 可以提供更加簡單易用的 API,而 OpenSSL 的 API 則相對復雜。對於資源受限的嵌入式設備,BabaSSL 會進行體積裁剪和內存使用量的規划,OpenSSL 則明確表示沒有相關的計划。
未來規划
這個是一個后續 BabaSSL 未來的版本規划和特性支持,基本上是每半年一個版本,涵蓋了多種新的密碼領域技術的支持,包括對IETF的幾個 RFC 草稿的實現、國產化硬件的支持以及未來對於后量子密碼學以及同態加密等前沿技術的支持:
- 支持 MPK
- Encrypted SNI
- Compressed Certificate
- Compact TLS
- SM算法優化
- 支持國產化 CPU 的國密算法指令集
- 體積裁剪,內存使用量優化
- Tink API
- ZUC,SM9
- PQC
- 同態加密算法
國密生態架構
萬事俱備,有了基礎國密算法支持,我們便可以構建出一個圍繞國密算法展開的基礎軟件生態。這是一個國密生態的垂直場景,也是我們在 Anolis OS 上的國密生態架構,同時它也是一個全棧國密解決方案:從底層固件,內核,到基礎密碼學庫,在主要鏈路上做國密改造,最終形成一個完整的基於國密的安全信任鏈條。
圖上右邊是一些垂直的國密應用場景,比如 SecureBoot,IMA,內核模塊簽名,文件完整性校驗等。
到目前為止,我們已經在 linux 內核,BabaSSL,libgcrypt,gnulib 等主流的基礎組件中支持了國密算法,這部分的工作都已經回饋到了上游開源社區,有興趣的開發者可以直接拿來使用或者作為參考,這些特性功能之后也會率先在 Anolis OS 上輸出,達到一個開箱即用的原生支持國密的 OS。
從中也能看到,國密生態涉及到的軟件棧非常多,形態也是各種各樣,要逐步完善這個生態,還有很長的路要走。近幾年的國際技術封鎖也給了我們做這件事的決心和動力。
目前我們已經和統信、海光等廠商有一些合作,也非常歡迎業界有興趣的開發者能夠參與到社區,一起來做這個事情,之后我們的工作都會在 Anolis 龍蜥社區以開源方式運作,秉着開放包容態度,繼續補充完善這個生態,最終達到的一個目標是:整個安全信任鏈是完全建立在國密算法之上。
國密在 IMA 和 modsign 的應用
我們知道,密碼學算法從來就是為安全服務的,我們來看兩個在安全領域具體國密改造的例子。
IMA 是 linux 內核提供一個文件完整性度量架構,用於檢測文件是否被惡意篡改,內核模塊簽名的目的是類似的,用於檢測模塊的發行源頭是否可信。它們都提供了自己的簽名工具,簽名工具依賴 BabaSSL 提供的 SM2 簽名文件的能力,用於在用戶態做簽名。
文件簽名的驗證是在內核里完成的,由於內核不能直接使用應用層的庫,為了支持在Linux內核里驗證文件簽名,我們在內核里實現了國密 SM2/3/4 算法以及國密證書的支持,用來驗證簽名是否合法。
通過對相應軟件棧的改造,我們完全基於國密算法構建了IMA和內核模塊簽名的安全機制,而這些之前都是由國際算法來保證的。
原文鏈接
本文為阿里雲原創內容,未經允許不得轉載。