商密SIG月度動態:檔案加密支援SM4演算法、Anolis 8.8將預設整合 | 龍蜥 SIG
商密軟體棧 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,成功獲得商用密碼產品認證,這是全球首個獲得該認證的開源專案,感謝螞蟻團隊對此專案的支援,點選 這裡瞭解詳細資訊。
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 整體支援情況
當前相關的主要開源軟體棧對國密的支援情況以及社群回饋統計:
當前商密軟體棧的縱向指令集最佳化情況及效能提升:
-
效能提升資料是相比於純軟體實現的資料
-
x86 架構的測試環境是 Intel i5-6200U 2.30GHz
-
Arm 架構的測試環境是 T-Head Yitian-710 2.75 GHz
-
✅ 表示由 OpenAnolis 開發並已經貢獻到開源軟體中的特性
-
“WIP”表示由 OpenAnolis 開發中的、或是開源軟體正在進行 review 的特性
-
“Y”表示開源軟體已經支援且不是由 OpenAnolis 開發的
-
❌ 表示開源軟體尚未支援
-
“-”表示開源軟體無需支援
更多詳情內容見商密軟體棧 SIG( openanolis.cn/sig/crypto ),歡迎各位感興趣的開發者加入共建。
—— 完 ——
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70004278/viewspace-2928631/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Cloud Kernel SIG月度動態:釋出 Anolis 8.8 映象、kABI 社群共建流程Cloud
- 高效能儲存SIG月度動態:DSMS開始適配Anolis OS、將在ANCK 5.10中支援ublk
- 龍蜥社群高效能儲存技術 SIG 11 月運營回顧 | 龍蜥 SIG
- eBPF SIG年度動態: eBPF和Wasm深度融合、參與7場活動及2023展望 | 龍蜥 SIGeBPFASM
- 龍蜥雲原生機密計算 SIG 成立,7 大開源專案重磅亮相!
- OpenCloudOS Kernel SIG 月度動態:釋出 OCK 6.6.30-4 版本,新增特性支援Cloud
- 高效能儲存SIG月度動態:ublk完成POC、dsms-storage在Anolis OS上成功適配
- 高效能儲存SIG月度動態:EROFS支援直接索引容器映象tar包等索引
- 龍蜥白皮書精選:基於 SM4 演算法的檔案加密(fscrypt)實踐演算法加密
- 龍蜥社群成立雲原生 SIG,引入 3 大核心技術,共建雲原生生態
- 系統效能監控工具ssar例項精選 | 龍蜥SIG
- 高效能網路 SIG 月度動態:推動 virtio 支援動態中斷調節及更靈活的分流機制
- Cloud Kernel SIG月度動態:釋出 ANCK 新版本及 Plugsched v1.2.0Cloud
- Cloud Kernel SIG 月度動態:釋出 ANCK 5.10-013 版本、完整支援 Intel SPR 處理器CloudIntel
- 龍蜥社群成立DeepRec SIG,開源大規模稀疏模型深度學習引擎模型深度學習
- 高效能網路SIG月度動態:virtio-net 支援動態中斷調節,SMC v2 協議增加新擴充套件協議套件
- 高效能儲存SIG月度動態:ANCK 5.10正式支援ublk、erofs容器映象按需讀時延最佳化60%
- CentOS即將停止維護,擁抱阿里“龍蜥“(Anolis OS),VMware安裝Anolis OS與介紹CentOS阿里
- 龍蜥 Node.js/WebAssembly SIG 重磅釋出 Node.js/Noslate 效能最佳化白皮書Node.jsWeb
- 高效能網路SIG月度動態:virtio 動態中斷調節最佳化、多項核心網路缺陷修復
- 高效能儲存SIG月度動態:ANCK ublk完成POC測試,EROFS最佳化xattr後設資料開銷
- 高效能網路SIG月度動態:SMC 與 IBM 就擴充套件協議達成一致,virtio 支援 XDP 新特性IBM套件協議
- Cloud Kernel SIG月度動態:釋出ANCK 5.10、4.19新版本,ABS新增倉庫構建功能Cloud
- 高效能網路 SIG 月度動態:長期投入得到業界認可,新增一位 virtio reviewerView
- Cloud Kernel SIG月度動態:建立社群第三方驅動研發流程、釋出ANCK 4.19-027版本Cloud
- 某手創作服務 __NS_sig3 sig3 | js 逆向JS
- 密碼基礎設施提供商三未信安加入龍蜥社群密碼
- 高效能網路SIG月度動態:virtio新裝置進入virtio規範、smc新特性IPC效能比tcp提升88%TCP
- 龍頭整機廠商寶德加入,共建龍蜥社群開源新生態
- 龍蜥社群正式成立 RISC-V ARCH SIG!平頭哥、中科院軟體所 PLCT 實驗室等聯合共建
- Intel Arch SIG:介紹下一代資料中心互聯協議CXL及在龍蜥的規劃 | 第 54 期Intel協議
- Java實現常用加密演算法-SM4Java加密演算法
- 固態儲存廠商憶聯加入龍蜥社群,共建開源新生態
- 龍蜥社群一週動態 | 1.10-1.14
- 龍蜥社群一週動態 | 3.14-3.18
- 知名伺服器運維軟體廠商堡塔加入龍蜥社群,並完成與 Anolis OS 相容適配伺服器運維
- signal(SIGPIPE, SIG_IGN)
- 龍蜥實驗室來了!收下這份指南,秒級體驗 Anolis OS