揭祕 AnolisOS 國密生態,想要看懂這一篇就夠了

此文原系 2021 年阿里雲開發者大會,開源操做系統社區和生態分論壇,題爲《國密技術開發與實踐》的分享會後解讀。
AnolisOS 國密是社區在 AnolisOS 上作的國密技術解決方案,很是歡迎業界有興趣的開發者可以參與到 OpenAnolis 社區,爲國內的基礎軟件生態添磚加瓦。linux

演講嘉賓:
楊洋:螞蟻集團高級技術專家,主導開發了 BabaSSL,也是國內惟一的一個 OpenSSL maintainer,參與起草並推進 RFC8998 標準國際化。
張天佳:阿里雲技術專家,主要負責 AnolisOS 上國密技術的開發和應用,參與實現了 libgcrypt 中的國密算法和 linux 內核中的 SM2 算法。算法

讓咱們穿越回現場:瀏覽器

緣起

說到密碼算法,你們必定很熟悉 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
  • 同態加密算法

國密生態架構

萬事俱備,有了基礎國密算法支持,咱們即可以構建出一個圍繞國密算法展開的基礎軟件生態。這是一個國密生態的垂直場景,也是咱們在 AnolisOS 上的國密生態架構,同時它也是一個全棧國密解決方案:從底層固件,內核,到基礎密碼學庫,在主要鏈路上作國密改造,最終造成一個完整的基於國密的安全信任鏈條。

圖上右邊是一些垂直的國密應用場景,好比 SecureBoot,IMA,內核模塊簽名,文件完整性校驗等。

到目前爲止,咱們已經在 linux 內核,BabaSSL,libgcrypt,gnulib 等主流的基礎組件中支持了國密算法,這部分的工做都已經回饋到了上游開源社區,有興趣的開發者能夠直接拿來使用或者做爲參考,這些特性功能以後也會率先在 AnolisOS 上輸出,達到一個開箱即用的原生支持國密的 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

本週推薦閱讀

更多文章請掃碼關注「金融級分佈式架構」公衆號

相關文章
相關標籤/搜索