天天看點

技術解析:一文看懂 Anolis OS 國密生态 | 龍蜥專場

編者注:本文系兩位演講者整理,他們在2021年阿裡雲開發者大會的 「開源作業系統社群和生态分論壇」

上帶了分享,演講主題為《國密技術開發與實踐》。,為國内的基礎軟體生态添磚加瓦。

作者分别是阿裡雲技術專家張天佳與螞蟻集團進階技術專家楊洋。張天佳主要負責Anolis OS上國密技術的開發和應用,參與實作了 libgcrypt 中的國密算法和 linux核心中的 SM2 算法;楊洋則主導開發了 BabaSSL,也是國内唯一的一個 OpenSSL maintainer,參與起草并推動 RFC8998 标準國際化。相信兩位技術人的幹貨分享,能給開發者們帶來一定的思考。

技術解析:一文看懂 Anolis OS 國密生态 | 龍蜥專場

以下為技術内容解析:

國密——密碼算法的國産化

說到密碼算法,大家一定很熟悉 MD5,AES,RSA 這些通用的國際标準算法,這也是目前我們普遍采用的密碼學算法,它們在資料安全、通信、區塊鍊等衆多領域都有着廣泛的應用。

衆所周知,這些算法标準都是國外制定的,在某些情況下這會對國内資訊安全有不利影響。當下有實力的國家,甚至有些大公司都制定了自己的算法标準。

顧名思義,國密就是密碼算法的國産化,跟其它領域一樣,密碼算法的國産化已經勢不可擋,這也是我們必須要做的事情。中國的國密算法為我們提供了一個新的選擇,在必要的場合中可以選擇替代那些國際主流算法,尤其是當下國際貿易沖突,技術封鎖不可忽視的大環境下,大規模推廣和采用國密算法将為國内重要的網絡基礎設施提供可靠的資料安全保障。

國密是什麼?

我是誰,從哪裡來?

國密是一個口語化的稱呼,官方名稱是國家商用密碼,簡稱商密,拼音縮寫是SM,這也是國密标準中具體算法名字的來源。國密是用于商用的、不涉及國家秘密的密碼技術。

國密标準完全由中國密碼管理局制定,主要的技術實作也基本是國内開發人員完成的,這對擺脫國外的密碼技術和産品依賴是非常有利的。

到哪裡去?

自2012 以來,SM2/3/4 的國密标準陸續公布,目前國密技術生态基本處于一個正在逐漸走向成熟的階段,但國内密碼基礎軟體在采用國密算法方面仍處于碎片化的狀态,比如我們經常可以看到各種個人或組織名義開源的支援國密算法的庫;此外這些開源項目的安全更新和社群活躍也都做的不好。國密的推廣仍然需要我們中國基礎軟體的開發者和使用者共同努力。

2020年1月1日,《中華人民共和國密碼法》正式實施,從法律層面規範了國家商用密碼的應用和管理,這也為推廣和應用國密提供了必要的法律保障。

與國際算法的對比

這裡是國密算法和國際通用算法的一個對比,可以直覺地看到國密的一個基本情況:

技術解析:一文看懂 Anolis OS 國密生态 | 龍蜥專場

針對各種常用的國際能用算法類型,比如對稱算法,公鑰算法和消息摘要算法,國密标準都定義了對應的相同功能的國密算法,比如 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 來實作多種密碼學的能力。

技術解析:一文看懂 Anolis OS 國密生态 | 龍蜥專場

開源

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 這種老牌的密碼算法庫之間的差別:

技術解析:一文看懂 Anolis OS 國密生态 | 龍蜥專場

從圖上可以看到一些主要差別:

  • 對于一些新的密碼學技術标準,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 上的國密生态架構,同時它也是一個全棧國密解決方案:從底層固件,核心,到基礎密碼學庫,在主要鍊路上做國密改造,最終形成一個完整的基于國密的安全信任鍊條。

技術解析:一文看懂 Anolis OS 國密生态 | 龍蜥專場

圖上右邊是一些垂直的國密應用場景,比如 SecureBoot,IMA,核心子產品簽名,檔案完整性校驗等。

到目前為止,我們已經在 linux 核心,BabaSSL,libgcrypt,gnulib 等主流的基礎元件中支援了國密算法,這部分的工作都已經回饋到了上遊開源社群,有興趣的開發者可以直接拿來使用或者作為參考,這些特性功能之後也會率先在 Anolis OS 上輸出,達到一個開箱即用的原生支援國密的 OS。

從中也能看到,國密生态涉及到的軟體棧非常多,形态也是各種各樣,要逐漸完善這個生态,還有很長的路要走。近幾年的國際技術封鎖也給了我們做這件事的決心和動力。

目前我們已經和統信、海光等廠商有一些合作,也非常歡迎業界有興趣的開發者能夠參與到社群,一起來做這個事情,之後我們的工作都會在 Anolis 龍蜥社群以開源方式運作,秉着開放包容态度,繼續補充完善這個生态,最終達到的一個目标是:整個安全信任鍊是完全建立在國密算法之上。

國密在 IMA 和 modsign 的應用

我們知道,密碼學算法從來就是為安全服務的,我們來看兩個在安全領域具體國密改造的例子。

IMA 是 linux 核心提供一個檔案完整性度量架構,用于檢測檔案是否被惡意篡改,核心子產品簽名的目的是類似的,用于檢測子產品的發行源頭是否可信。它們都提供了自己的簽名工具,簽名工具依賴 BabaSSL 提供的 SM2 簽名檔案的能力,用于在使用者态做簽名。

檔案簽名的驗證是在核心裡完成的,由于核心不能直接使用應用層的庫,為了支援在Linux核心裡驗證檔案簽名,我們在核心裡實作了國密 SM2/3/4 算法以及國密證書的支援,用來驗證簽名是否合法。

通過對相應軟體棧的改造,我們完全基于國密算法建構了IMA和核心子產品簽名的安全機制,而這些之前都是由國際算法來保證的。

全棧國密 SIG

以下是我們在OpenAnolis上的全棧國密 SIG,非常歡迎有興趣的開發能參與到社群中來,為中國的基礎軟體安全添磚加瓦。

SIG位址

https://openanolis.cn/sig/crypto

代碼庫

https://codeup.openanolis.cn/codeup/crypto

歡迎搜尋釘釘群号:33311793,或掃描下方二維碼加入OpenAnolis(龍蜥)社群群,與一線研發人員和數百位開發者直接交流。一個開放的社群需要更多合作夥伴和開發者的支援,隻有在你們的參與和回報中,OpenAnolis(龍蜥)社群才會越做越好。 

技術解析:一文看懂 Anolis OS 國密生态 | 龍蜥專場

繼續閱讀