商密SIG月度动态:文件加密支持SM4算法、Anolis 8.8将默认集成 | 龙蜥 SIG

简介: 点击了解商密软件栈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 整体支持情况

当前相关的主要开源软件栈对国密的支持情况以及社区回馈统计:

1.png

当前商密软件栈的纵向指令集优化情况及性能提升:

2.png

  • 性能提升数据是相比于纯软件实现的数据
  • 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


—— 完 ——

加入龙蜥社群

加入微信群:添加社区助理-龙蜥社区小龙(微信:openanolis_assis),备注【龙蜥】与你同在;加入钉钉群:扫描下方钉钉群二维码。

3.png

相关文章
|
10天前
|
算法 安全 物联网
关于SM2、SM3、SM4、SM9这四种国密算法
本文介绍了四种国密算法——SM2、SM3、SM4和SM9。SM2是一种基于椭圆曲线的非对称加密算法,用于数据加密和数字签名;SM3是哈希算法,用于数字签名和消息完整性验证;SM4是对称加密算法,用于数据加密和解密;SM9是基于标识的非对称密码算法,适用于物联网环境中的数据安全和隐私保护。
83 0
|
1月前
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
109 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
2月前
|
存储 算法 安全
超级好用的C++实用库之国密sm4算法
超级好用的C++实用库之国密sm4算法
52 0
|
3月前
|
算法 安全 数据安全/隐私保护
Android经典实战之常见的移动端加密算法和用kotlin进行AES-256加密和解密
本文介绍了移动端开发中常用的数据加密算法,包括对称加密(如 AES 和 DES)、非对称加密(如 RSA)、散列算法(如 SHA-256 和 MD5)及消息认证码(如 HMAC)。重点讲解了如何使用 Kotlin 实现 AES-256 的加密和解密,并提供了详细的代码示例。通过生成密钥、加密和解密数据等步骤,展示了如何在 Kotlin 项目中实现数据的安全加密。
110 1
|
3月前
|
算法 安全 数据安全/隐私保护
Android经典实战之常见的移动端加密算法和用kotlin进行AES-256加密和解密
本文介绍了移动端开发中常用的数据加密算法,包括对称加密(如 AES 和 DES)、非对称加密(如 RSA)、散列算法(如 SHA-256 和 MD5)及消息认证码(如 HMAC)。重点展示了如何使用 Kotlin 实现 AES-256 的加密和解密,提供了详细的代码示例。
72 2
|
3月前
|
算法 JavaScript 前端开发
国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
国标非对称加密:RSA算法、非对称特征、js还原、jsencrypt和rsa模块解析
255 1
|
3月前
|
算法 JavaScript 前端开发
消息摘要算法:MD5加密
消息摘要算法:MD5加密
57 1
|
4月前
|
算法 安全 数据安全/隐私保护
支付系统---微信支付09------数字签名,现在Bob想要给Pink写一封信,信件的内容不需要加密,怎样能够保证信息的完整性,使用信息完整性的主要手段是摘要算法,散列函数,哈希函数,H称为数据指纹
支付系统---微信支付09------数字签名,现在Bob想要给Pink写一封信,信件的内容不需要加密,怎样能够保证信息的完整性,使用信息完整性的主要手段是摘要算法,散列函数,哈希函数,H称为数据指纹
|
17天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
2天前
|
算法 数据挖掘 数据安全/隐私保护
基于FCM模糊聚类算法的图像分割matlab仿真
本项目展示了基于模糊C均值(FCM)算法的图像分割技术。算法运行效果良好,无水印。使用MATLAB 2022a开发,提供完整代码及中文注释,附带操作步骤视频。FCM算法通过隶属度矩阵和聚类中心矩阵实现图像分割,适用于灰度和彩色图像,广泛应用于医学影像、遥感图像等领域。