商密软件栈SIG 7月份运营月报|龙蜥SIG

简介: 商密软件栈SIG是以国密算法为主的系统组件,在固件、bootloader、内核以及基础应用中支持国密算法,基于Anolis OS发行版构建国密技术栈及解决方案生态,致力于为行业提供基于国密的信息安全标准。

商密软件栈SIG是以国密算法为主的系统组件,在固件、bootloader、内核以及基础应用中支持国密算法,基于Anolis OS发行版构建国密技术栈及解决方案生态,致力于为行业提供基于国密的信息安全标准。(往期文章参考:技术解析:一文看懂 Anolis OS 国密生态|龙蜥专场

欢迎更多开发者加入商密软件栈SIG:

网址:https://openanolis.cn/sig/crypto

邮件列表:tc@lists.openanolis.cn

截图.png

以下为「商密软件栈SIG」 7月份的运营情况:

SIG目标

基于龙蜥操作系统(Anolis OS),在整个系统软件层面(包括硬件、固件、bootloader、内核以及OS)实现以商密算法为主的操作系统,结束一直以来商密算法生态碎片化的状况,在技术方面打造社区和生态,在资质合规方面致力于为行业提供基于商密的信息安全标准。

本月进展

  • IMA场景的国密化技术支持已经全部被upstream社区合入,包括内核的支持和用户态工具ima-evm-utils
  • Linux SM4 的AVX指令集优化实现已经合入上游社区
  • SM4 GCM/CCM,RFC8998技术调研
  • 第一版国密镜像,正在按计划使用BabaSSl替代OpenSSL,经过一些移植和验证,替换后BaseOS运行正常,目前没有发现大的问题,ima-evm-utils的国密支持还在进行backport工作

SIG长期规划

商密软件栈涉及到众多的上下游组件,团队,外部合作伙伴,上游社区,要尽可能团结其它团队的力量,消除不必要的重复开发,扩大推广和影响力,成为商密事实上的标准技术实现。全栈国密要求先具备从boot到业务运行环节各安全链路上所需的国密算法,有了通用的算法实现后,再针对各模块或者平台做针对性的优化,扩大社区版本技术影响力。帮助BabaSSL申请国密一级资质,为应用系统提供必要的合规属性,也为有合规需求的用户可以迁移到这个系统上来。

目前规划支持的国密场景:

  • IMA场景下使用国密算法替代国际算法
  • 内核模块签名认证流程的国密化支持
  • Web场景下的RFC 8998协议支持,即TLS v1.3协议中支持使用国密算法套件
  • 使用国密算法支持luks,dm-crypt场景
  • SecureBoot中使用国密算法替换国际算法
  • 内核SM4算法的指令集加速实现
  • coreutils 支持sm3sum工具
  • SM2优化,类似于NIST,主要优化点是SM2所用曲线的快速取模算法
  • 集成intel QAT方案,大量哈希算法加速daemon
  • 集成AMD,Hygon CCP加速方案
  • 积极参与openssl 3.0.0 dev开发,加速release
  • coreboot等未来可能替代UEFI的固件支持SM系统算法

Milestone

8月提供第一版全栈国密OS镜像,提供默认国密算法的系统基础组件:

  • 使用BabaSSL替换系统默认的OpenSSL1.1.1,提供国密的系统运行支持,也提供给开发者无门槛的国密应用二次开发体验
  • 内置sm3sum工具,用于计算文件SM3哈希算法,提供与md5sum,sha256sum一致的用户体验
  • IMA全场景支持国密算法,包括ima-evm-utils使用国密算法签名,内核使用相应算法认证签名的合法性
  • 内核模块签名支持使用国密算法

12月第二版本国密OS镜像:

  • 基于5.10内核的国密镜像
  • 内核支持SM4的avx/avx2加速实现,性能是纯软件实现的五倍左右,为商用提供必要支持
  • Web场景支持RFC 8998协议,在TLS v1.3中支持使用国密套件,以及提供给用户最佳实践,可以在国密OS上开发自己的国密应用
  • 争取更多的自研patch进入上游社区,减少由此导致的自定义rpm数量

当前国密软件栈的整体支持情况

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

开源软件名称 SM2 SM3 SM4 SM4-AVX PKCS#7 x509 commit数量 修改行数
gnulib - - - - - 5 -5/+1046
libgcrypt Y - - 13 -64/+1630
linux Y Y 开发中 20 -259/+5810
coreutils - 开发中 - - - - 0 0
RustCrypto Y - - 1 -0/+851
openssl Y Y Y Y Y 3 -25/+97
ima-evm-utils - - - - 5 -13/+97
  • ✅ 表示由OpenAnolis开发并已经贡献到开源软件中的特性
  • “开发中”表示由OpenAnolis开发中的、或是开源软件正在进行review的特性
  • “Y”表示开源软件已经支持且不是由OpenAnolis开发的
  • ❌ 表示开源软件尚未支持
  • “-”表示开源软件无需支持

主要成果

  • gnulib库中实现了SM3算法的基础实现,gnulib是GNU软件栈中一个通用的基础库
  • 实现了libgcrypt中基础的商密算法SM2/3/4
  • 实现了Linux内核里SM2算法,以及支持了使用SM2/3算法的pkcs#7签名,X509证书
  • 使用x86 avx指令集对内核的SM4算法加速,相比于纯软件实现,性能提升了4倍
  • IMA场景支持使用SM2/3算法组合,包括内核和用户态工具ima-evm-utils的支持
  • 在Rust生态中主流算法库RustCrypto中实现了SM3算法
  • 修复了OpenSSL商密实现上的一些Bug

预告:下周将推出【跟踪诊断技术SIG】7月运营月报,敬请期待。欢迎更多开发者盆友、用户加入龙蜥社区( 官网:openanolis.cn

关于龙蜥社区SIG

SIG是开放的,并争取让交付成果成为社区发行的一部分,由组内核心成员主导治理,可通过邮件列表和组内的成员进行交流。龙蜥社区目前有近20个SIG,包括商密软件栈、高性能存储技术SIG、Java语言与虚拟机SIG、跟踪诊断技术SIG、Cloud Kernel、OceanBase SIG等。

sig截图.png

https://openanolis.cn/sig

加入龙蜥社群

加入微信群:添加社区助理-龙蜥社区小龙(微信:openanolis_assis),备注【龙蜥】拉你入群;加入钉钉群:扫描下方钉钉群二维码或搜索钉钉群号(33311793)。欢迎开发者/用户加入龙蜥OpenAnolis社区交流,共同推进龙蜥社区的发展。加入我们,一起打造一个活跃的、健康的开源操作系统生态!

1.jpegsig.JPG

龙蜥社区钉钉交流群                商密软件栈SIG交流群

相关实践学习
CentOS 8迁移Anolis OS 8
Anolis OS 8在做出差异性开发同时,在生态上和依赖管理上保持跟CentOS 8.x兼容,本文为您介绍如何通过AOMS迁移工具实现CentOS 8.x到Anolis OS 8的迁移。
相关文章
|
2月前
|
存储 C语言 C++
【C++数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现顺序栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 1.初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储
160 77
|
11天前
|
算法 调度 C++
STL——栈和队列和优先队列
通过以上对栈、队列和优先队列的详细解释和示例,希望能帮助读者更好地理解和应用这些重要的数据结构。
26 11
|
24天前
|
DataX
☀☀☀☀☀☀☀有关栈和队列应用的oj题讲解☼☼☼☼☼☼☼
### 简介 本文介绍了三种数据结构的实现方法:用两个队列实现栈、用两个栈实现队列以及设计循环队列。具体思路如下: 1. **用两个队列实现栈**: - 插入元素时,选择非空队列进行插入。 - 移除栈顶元素时,将非空队列中的元素依次转移到另一个队列,直到只剩下一个元素,然后弹出该元素。 - 判空条件为两个队列均为空。 2. **用两个栈实现队列**: - 插入元素时,选择非空栈进行插入。 - 移除队首元素时,将非空栈中的元素依次转移到另一个栈,再将这些元素重新放回原栈以保持顺序。 - 判空条件为两个栈均为空。
|
2月前
|
存储 C++ 索引
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
【数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】初始化队列、销毁队列、判断队列是否为空、进队列、出队列等。本关任务:编写一个程序实现环形队列的基本运算。(6)出队列序列:yzopq2*(5)依次进队列元素:opq2*(6)出队列序列:bcdef。(2)依次进队列元素:abc。(5)依次进队列元素:def。(2)依次进队列元素:xyz。开始你的任务吧,祝你成功!(4)出队一个元素a。(4)出队一个元素x。
54 13
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
|
2月前
|
C++
【C++数据结构——栈和队列】括号配对(头歌实践教学平台习题)【合集】
【数据结构——栈和队列】括号配对(头歌实践教学平台习题)【合集】(1)遇到左括号:进栈Push()(2)遇到右括号:若栈顶元素为左括号,则出栈Pop();否则返回false。(3)当遍历表达式结束,且栈为空时,则返回true,否则返回false。本关任务:编写一个程序利用栈判断左、右圆括号是否配对。为了完成本关任务,你需要掌握:栈对括号的处理。(1)遇到左括号:进栈Push()开始你的任务吧,祝你成功!测试输入:(()))
48 7
|
4月前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
393 9
|
4月前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
66 1
|
2月前
|
存储 C语言 C++
【C++数据结构——栈与队列】链栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现链栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储整数,最大
52 9
|
4月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
107 5
|
4月前
|
存储 算法 Java
数据结构的栈
栈作为一种简单而高效的数据结构,在计算机科学和软件开发中有着广泛的应用。通过合理地使用栈,可以有效地解决许多与数据存储和操作相关的问题。
137 21

热门文章

最新文章