天天看點

商密SIG月度動态:檔案加密支援SM4算法、Anolis 8.8将預設內建

作者:龍蜥社群小龍

商密軟體棧 SIG 目标:基于Anolis Linux,在整個系統軟體層面(包括硬體,固件,bootloader,核心以及 OS)實作以商密算法為主的全軟體棧商密作業系統,結束一直以來商密軟體生态碎片化的狀況,在技術方面打造社群和生态,在資質合規方面緻力于為行業提供基于商密的作業系統資訊安全标準。

01、SIG 近況摘要

本月分别合入 Linux 核心上遊和 Anolis 核心主線 commit 22個,代碼量 6000 多行,包括性能優化,更多的國密場景支援,以及 Bugfix 等。

在保證相容性的同時,也為 OpenSSL 1.1.1 版本支援完整的 SM2 簽名和驗簽能力,會在即将釋出的 Anolis 8.8 中預設內建。

Linux 原生檔案系統加密子系統 fscrypt,支援使用 SM4 XTS/CTS 算法加密檔案和目錄。

持續補齊 Linux 核心 Arm64 架構下的國密性能優化,涉及 SM3 以及 SM4 的諸多加密模式,包括 XTS/CTS/CMAC/GCM/CCM 等,Linux 核心上遊也同步得到了支援,可以充分發揮出倚天的性能優勢。

商密 SIG 的重點項目 Tongsuo,成功獲得商用密碼産品認證,這是全球首個獲得該認證的開源項目,感謝螞蟻團隊對此項目的支援,點選Tongsuo | 全球首個商用密碼産品認證的密碼學開源項目了解詳細資訊。

02、SIG 月度詳細進展

1、國密 SM3/4 算法性能優化

以下的優化全部針對 Arm64 架構,已在龍蜥核心 cloud-kernel 5.10 中得到支援,同時優化 patch 也都貢獻到了 Linux 核心上遊。

以下各項的資料均是在倚天 710 的環境下,使用核心 tcrypt 子產品測試得到的資料,資料經過了表格化處理,機關是 Mbyte/s。

  • 支援了 SM3 的 NEON 指令集優化,相比于軟體實作,性能提升約 11%,下表是軟體實作 sm3-generic,NEON 優化和 Crypto Extension 優化的性能資料,其中橫坐标是塊大小:
update-size    |      16      64     256    1024    2048    4096    8192
---------------+--------------------------------------------------------
sm3-generic    |  185.24  221.28  301.26  307.43  300.83  308.82  308.91
sm3-neon       |  171.81  220.20  322.94  339.28  334.09  343.61  343.87
sm3-ce         |  227.48  333.48  502.62  527.87  520.45  534.91  535.40           
  • 基于 SM4 的 MAC 算法,支援了 CE 指令集的優化,性能提升約 85%,以下是優化前後的性能對比資料:

優化前:

update-size    |      16      64     256    1024    2048    4096    8192
---------------+--------------------------------------------------------
cmac(sm4-ce)   |  293.33  403.69  503.76  527.78  531.10  535.46  535.81
xcbc(sm4-ce)   |  292.83  402.50  504.02  529.08  529.87  536.55  538.24
cbcmac(sm4-ce) |  318.42  415.79  497.12  515.05  523.15  521.19  523.01           

優化後:

update-size    |      16      64     256    1024    2048    4096    8192
---------------+--------------------------------------------------------
cmac-sm4-ce    |  371.99  675.28  903.56  971.65  980.57  990.40  991.04
xcbc-sm4-ce    |  372.11  674.55  903.47  971.61  980.96  990.42  991.10
cbcmac-sm4-ce  |  371.63  675.33  903.23  972.07  981.42  990.93  991.45           
  • SM4 算法的 CTS/XTS 模式,支援了 CE 指令集優化,CTS 是 CBC 模式的一個變種,通過密文竊取技術支援加密任意長度的資料(CBC 隻支援 16 位元組對齊的資料大小),主要用于檔案名路徑的加密,XTS 模式在非變長的磁盤加密和檔案加密中應用廣泛,以下是優化前後的性能對比資料:

優化前:

block-size |      16       64      128      256     1024     1420     4096
------------+--------------------------------------------------------------
CTS-CBC enc |  286.09   297.17   457.97   627.75   868.58   900.80   957.69
CTS-CBC dec |  286.67   285.63   538.35   947.08  2241.03  2577.32  3391.14
    XTS enc |  117.17   430.56   732.92  1134.98  2007.03  2136.23  2347.20
    XTS dec |  116.89   429.02   733.40  1132.96  2006.13  2130.50  2347.92           

優化後:

block-size |      16       64      128      256     1024     1420     4096
------------+--------------------------------------------------------------
CTS-CBC enc |  288.19   428.80   593.57   741.04   911.73   931.80   950.00
CTS-CBC dec |  292.22   468.99   838.23  1380.76  2741.17  3036.42  3409.62
    XTS enc |  224.68   798.91  1248.08  1714.60  2413.73  2467.84  2612.62
    XTS dec |  229.85   791.34  1237.79  1720.00  2413.30  2473.84  2611.95           
  • SM4 CCM/GCM 模式支援使用 CE 指令集優化,CCM 和 GCM 是帶認證的 AEAD 算法,是 TLS 1.3 協定中非常主流的算法模式,這也為 TLS 協定支援國密提供了性能保證。

CCM 模式是計算明文的 CBCMAC 認證碼,通過并行加解密操作和計算 CBCMAC 認證碼來達到優化的目的。GCM 模式是對密文計算 GHASH,是以加密時是先執行加密操作再計算 GHASH,通過同步加密四路的輸入來實作優化,解密時可以并行執行解密操作和計算 GHASH,但受 Arm64 SIMD 寄存器限制,隻能同時處理三路的輸入,即便如此,解密的性能還是高于加密性能。

以下是優化前後的性能對比資料,測試環境同上,其中 mb 是核心使用 multi buffer 時的資料,優化前 CCM 的 driver 是 rfc4309(ccm_base(ctr-sm4-ce,cbcmac-sm4-ce)),GCM 的 driver 是 gcm_base(ctr-sm4-ce,ghash-generic):

優化前:

block-size |     16      64      256      512     1024     1420     4096     8192
-----------+---------------------------------------------------------------------
CCM enc    |  35.07  125.40   336.47   468.17   581.97   619.18   712.56   736.01
CCM dec    |  34.87  124.40   335.08   466.75   581.04   618.81   712.25   735.89
CCM mb enc |  34.71  123.96   333.92   465.39   579.91   617.49   711.45   734.92
CCM mb dec |  34.42  122.80   331.02   462.81   578.28   616.42   709.88   734.19
GCM enc    |  25.24   64.65   104.66   116.69   123.81   125.12   129.67   130.62
GCM dec    |  25.40   64.80   104.74   116.70   123.81   125.21   129.68   130.59
GCM mb enc |  24.95   64.06   104.20   116.38   123.55   124.97   129.63   130.61
GCM mb dec |  24.92   64.00   104.13   116.34   123.55   124.98   129.56   130.48           

優化後:

block-size |     16      64      256      512     1024     1420     4096     8192
-----------+---------------------------------------------------------------------
CCM enc    |  77.12  249.82   569.94   725.17   839.27   867.71   952.87   969.89
CCM dec    |  75.90  247.26   566.29   722.12   836.90   865.95   951.74   968.57
CCM mb enc |  75.98  245.25   562.91   718.99   834.76   864.70   950.17   967.90
CCM mb dec |  75.06  243.78   560.58   717.13   833.68   862.70   949.35   967.11
GCM enc    | 108.62  397.18   971.60  1283.92  1522.77  1513.39  1777.00  1806.96
GCM dec    | 116.36  398.14  1004.27  1319.11  1624.21  1635.43  1932.54  1974.20
GCM mb enc | 107.13  391.79   962.05  1274.94  1514.76  1508.57  1769.07  1801.58
GCM mb dec | 113.40  389.36   988.51  1307.68  1619.10  1631.55  1931.70  1970.86           

2、檔案加密支援使用 SM4 算法

fscrypt 是運作在核心檔案系統層面的加密庫,需要嵌入到真正的檔案系統中來提供檔案的加密功能,目前 ext4、f2fs、ubifs 已支援 fscrypt。fscrypt 的特點是不同的檔案可以使用不同的密鑰,同一檔案系統上也允許有加密和非加密的檔案,這對于多使用者非常有用。

fscrypt 除了檔案名,不加密其它的檔案系統中繼資料。fscrypt 通過 API 與使用者态互動,主要包括注冊密鑰和配置加密政策,使用者則通過使用者态指令行工具 fscryptctl 來完成互動。檔案加密被是國密一個重要的場景,是以我們為 fscrypt 和 fscryptctl 提供了國密的支援,SM4 XTS 模式用于加密檔案内容,SM4 CTS 模式用于加密檔案名。

3、Anolis 8.8 将原生支援國密

一直以來,OpenSSL 1.1.1 都是國密的一個遺憾,也是一個痛點,這個版本的 SM2 簽名驗簽能力是有缺陷的,也不支援國密标準的 Za 值。但這個版本又是主流的發行版所使用的版本,也包括 Anolis 8 系列的系統。鑒于以上原因,龍蜥在保證相容的前提下,在系統預設原生的 OpenSSL 1.1.1 版本上支援了完整的 SM2 簽名能力,解決了上述的問題,該特性也會随着下一個版本的 Anolis 8 系統的釋出而帶給使用者。

03、SIG 長期規劃

全棧商密算法涉及到衆多的上下遊元件、團隊、外部合作夥伴、上遊社群,要盡可能團結其它團隊的力量,消除不必要的重複開發,擴大推廣和影響力,成為商密事實标準。

全棧商密算法要求先具備從 boot 到業務運作環節各安全鍊路上所需的商密算法,再針對各元件做針對性的優化,在社群版本擴大影響力後,也讓未來商業版相比社群版本帶來差異化優勢。

協助 BabaSSL 申請國密資質,為應用系統提供必要的合規屬性,也為有此需求的使用者可以遷移到這個系統上來,增加使用者的使用黏性,這也是一個主要的競争優勢。

規劃支援的商密算法場景:

  • IMA 場景下使用商密算法替代國際算法
  • 核心子產品簽名認證流程的商密化支援
  • Web 場景下的 RFC 8998 協定支援,即 TLS v1.3 協定中支援使用商密算法套件
  • 使用商密算法支援 luks、dm-crypt 場景
  • SecureBoot 中使用商密算法替換國際算法
  • 核心 SM4 算法的指令集加速實作
  • coreutils 支援 sm3sum 工具
  • WireGuard 場景國密化支援
  • SM2 優化,類似于 NIST,主要優化點是 SM2 所用曲線的快速取模算法
  • 積極參與 OpenSSL 3.0.0 dev 開發,加速 release
  • coreboot 等未來可能替代 UEFI 的固件支援 SM 系統算法
  • gpg 支援使用商密算法
  • libssh 支援使用商密算法

04、SIG 整體支援情況

目前相關的主要開源軟體棧對國密的支援情況以及社群回饋統計:

商密SIG月度動态:檔案加密支援SM4算法、Anolis 8.8将預設內建

目前商密軟體棧的縱向指令集優化情況及性能提升:

商密SIG月度動态:檔案加密支援SM4算法、Anolis 8.8将預設內建
  • 性能提升資料是相比于純軟體實作的資料
  • x86 架構的測試環境是 Intel i5-6200U 2.30GHz
  • Arm 架構的測試環境是 T-Head Yitian-710 2.75 GHz
  • ✅ 表示由 OpenAnolis 開發并已經貢獻到開源軟體中的特性
  • “WIP”表示由 OpenAnolis 開發中的、或是開源軟體正在進行 review 的特性
  • “Y”表示開源軟體已經支援且不是由 OpenAnolis 開發的
  • ❌ 表示開源軟體尚未支援
  • “-”表示開源軟體無需支援

更多詳情内容見商密軟體棧 SIG(連結見文末),歡迎各位感興趣的開發者加入共建。

SIG 首頁連結位址:

商密軟體棧 SIG :https://openanolis.cn/sig/crypto

—— 完 ——

繼續閱讀