商密软件栈 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.91sm3-neon       |  171.81  220.20  322.94  339.28  334.09  343.61  343.87sm3-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.81xcbc(sm4-ce)   |  292.83  402.50  504.02  529.08  529.87  536.55  538.24cbcmac(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.04xcbc-sm4-ce    |  372.11  674.55  903.47  971.61  980.96  990.42  991.10cbcmac-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.69CTS-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.00CTS-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.01CCM dec    |  34.87  124.40   335.08   466.75   581.04   618.81   712.25   735.89CCM mb enc |  34.71  123.96   333.92   465.39   579.91   617.49   711.45   734.92CCM mb dec |  34.42  122.80   331.02   462.81   578.28   616.42   709.88   734.19GCM enc    |  25.24   64.65   104.66   116.69   123.81   125.12   129.67   130.62GCM dec    |  25.40   64.80   104.74   116.70   123.81   125.21   129.68   130.59GCM mb enc |  24.95   64.06   104.20   116.38   123.55   124.97   129.63   130.61GCM 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.89CCM dec    |  75.90  247.26   566.29   722.12   836.90   865.95   951.74   968.57CCM mb enc |  75.98  245.25   562.91   718.99   834.76   864.70   950.17   967.90CCM mb dec |  75.06  243.78   560.58   717.13   833.68   862.70   949.35   967.11GCM enc    | 108.62  397.18   971.60  1283.92  1522.77  1513.39  1777.00  1806.96GCM dec    | 116.36  398.14  1004.27  1319.11  1624.21  1635.43  1932.54  1974.20GCM mb enc | 107.13  391.79   962.05  1274.94  1514.76  1508.57  1769.07  1801.58GCM 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( https://openanolis.cn/sig/crypto ),欢送各位感兴趣的开发者退出共建。

—— 完 ——