CANN Crypto 架构设计揭秘:分层依赖如何让密码算子高效复用

发布时间:2026/9/30 0:31:26

CANN Crypto 架构设计揭秘:分层依赖如何让密码算子高效复用 CANN Crypto 架构设计揭秘分层依赖如何让密码算子高效复用【免费下载链接】cryptocrypto SIG 是密码学兴趣小组围绕昇腾 NPU 打造高性能密码软件库提供丰富的密码算子与算法实现项目地址: https://gitcode.com/cann/cryptoCANN Crypto 是 CANNCompute Architecture for Neural Networks中面向昇腾 NPU的密码学算子与算法库提供 AES、SM2/SM3/SM4、SHA-2/3、ML-KEM、ML-DSA 等丰富的密码算子与算法实现。它的核心设计思想是分层依赖按数学引擎、密码原语、算法服务三层组织代码依赖只能向下流动让下层能力被多个算法族复用——这正是密码算子高效复用的关键。本文用一次清晰的架构拆解带你快速看懂这套设计。一张图看懂 CANN Crypto 分层依赖先看整体目录与依赖方向箭头一律向下绝不回头include/cann_crypto/ 对外稳定 C ABI唯一承诺兼容性的边界 │ src/api/ ABI 校验、句柄/plan 生命周期、算法分发 │ src/core/ 运行时handle / stream / workspace / 密钥管理 │ src/algorithms/ 算法服务digest / aead / mac / kdf / signature / kem │ src/primitives/ 密码原语AES、SM4、Keccak-f、ChaCha、GHASH、EC │ src/math/ 数学引擎大数模乘、NTT/RNS、GF(2^k)、位平面转置 │ reference/ 纯 C 参考实现零 CANN 依赖正确性基准分层规则写在根 README 中非常明确分层依赖只能向下algorithms/与primitives/不实现数学运算需要时下沉到math/算法族之间不互相依赖。 —— README.md每层职责拆解从 C ABI 到数学引擎每一层都有各自的 README.md 说明职责与约束。下面逐层说明它们做什么和不做什么。1️⃣ include api唯一的兼容边界对外接口是纯 C ABI不出现 C 类型、异常、模板公共描述符带structSize/version字段保证 ABI 可平滑演进见 include/cann_crypto/README.md。src/api/ 负责边界校验空指针、版本、缓冲区重叠等、句柄与 plan 生命周期管理并按算法枚举分发到algorithms/。关键点算法特有的参数校验密钥、nonce、tag 长度不在这里重复而是下沉到各算法的op_host/避免一处改、处处漏。2️⃣ core所有算法族共用的控制面src/core/ 提供所有算法族共享的运行时能力能力说明Handle / Stream / workspace资源与计划缓存的统一管理密钥对象管理导入、device 常驻缓存、usage 限制、销毁清零资源配额与 AI 负载共存时的 stream 优先级、core 预算公共设施错误码、日志、内存清零约束只有一条但很硬不依赖任何具体算法。这样新算法接入时无需改动运行时。3️⃣ math被所有算法族共享的数学引擎src/math/ 是整个复用体系的地基大数与模运算Montgomery、BarrettNTT / INTT / RNS后量子密码的命脉GF(2^k) 域运算对称密码的土壤位平面转置、面向 Cube 单元的限位整数卷积两条铁律本目录有单一 ownerprimitives/与algorithms/不得自行实现本目录已覆盖的运算。这就是复用能发生的根本原因——数学只写一遍。4️⃣ primitives密码原语层src/primitives/ 存放算法内核AES、SM4、Keccak-f、ChaCha、GHASH、Poly1305、EC 点运算等。值得注意的设计决策这些原语单独使用并不构成完整的安全服务比如 GHASH 本身不是 MAC因此不对最终用户默认暴露。它是给上层算法用的零件而非给用户用的产品。5️⃣ algorithms只做组合与调度src/algorithms/ 提供语义完整的密码服务按digest/aead/mac/kdf/signature/kem等算法族分目录。约束是只做组合、参数校验与调度不实现数学运算算法族之间不得互相依赖需要共用能力时下沉到primitives/或math/。复用如何发生3 个真实例子分层架构的价值体现在写一次、用多处。以仓库中已有的代码为例 例 1Keccak-f 一个原语撑起两个算法Keccak-f[1600] 置换实现位于 src/primitives/keccak/而 SHAKE128 / SHAKE256 两个 XOF 算子位于 src/algorithms/hash/shake/。算法服务层只负责吸挤squeeze的调度与输出长度控制置换本体零重复——同族再加 SHA3-256 时新增的只是薄薄一层组合。 例 2NTT 引擎服务整个后量子密码族src/math/ntt/ 提供完整的 NTT/RNS 数学引擎且自带 CANN 算子适配见 ntt_adapter.h。ML-KEM、ML-DSA 这类基于多项式环的算法全部复用同一套数论变换实现而不是各自造轮子。 例 3AES 模式扩展 原语组合src/primitives/AES/ 下 CTR 与 GCM 两条模式线分别复用 AES 分组加密内核GCM 再叠加 GHASH 原语。对称密码新模式的成本被压缩到组合逻辑级别。算子内部三层协作op_api / op_host / op_kernel宏观分层解决算法间的复用每个算子内部还有一套与 CANN 算子仓一致的微观分层alg/ ├── alg_internal.h # 中性类型内部接口原生 API 与 aclnn 入口共用 ├── alg_launch.cpp # kernel 组合与变体选择 ├── op_api/ # aclnn 两段式入口 ├── op_host/ # 算子定义、infershape、tiling ├── op_kernel/ # Ascend C 实现 └── tests/以一个真实算子为例shake 算子目录 中的分工是目录职责复用要点op_host/算子注册、形状推导、tilingtiling 接口只接受中性标量类型原生 API 与 aclnn 入口共用同一份实现op_kernel/Ascend C 设备端实现Shake128/256 共用同一套 uniform u32 向量核仅参数不同tests/ut / st 分级验证与 reference 基准做差分比对这个中性接口细节很妙同一份 tiling 逻辑同时服务两种调用入口从机制上杜绝了两份实现漂移分叉。正确性如何兜底reference 独立基准高性能设备端代码最怕算错了还跑得欢。reference/ 目录放各算法的纯 C 参考实现三条约束保证它是独立 oracle只求显然正确不做任何优化零 CANN 依赖无设备机器也能单独编译不得 includesrc/下任何文件——一旦与被测实现共享代码就不再是独立基准。tests/host/的差分测试以它为基准例如 golden.pyKAT 与差分测试因此能进 PR 门禁。这是分层 独立基准组合在工程上的完整闭环。给新手的分层开发速查表 ✍️写新代码前先问自己我属于哪一层我要做的事放到哪里别做的事新增数学运算模乘、NTT 变体等src/math/在算法里顺手实现一遍新增密码原语内核src/primitives/让两个算法族互相 include新增完整算法服务src/algorithms/ 对应算法族目录在 algorithms 层写数学运算新增对外接口字段include/cann_crypto/ 带 structSize/version 演进暴露内部结构体成员补充正确性基准reference/引用src/下任何代码更多贡献规范见 CONTRIBUTING.md各层职责以目录内 README 为准。小结CANN Crypto 的分层依赖可以浓缩成三句话依赖只向下算法 → 原语 → 数学永不回头能力下沉复用数学引擎单一 owner原语跨算法族共享边界清晰可信C ABI 是唯一兼容承诺reference 是独立正确性基准。理解了这套结构你就能快速判断任何新密码算子该落在哪一层、复用什么、避免什么重复实现——这正是这套架构能持续高效扩展的底层原因。【免费下载链接】cryptocrypto SIG 是密码学兴趣小组围绕昇腾 NPU 打造高性能密码软件库提供丰富的密码算子与算法实现项目地址: https://gitcode.com/cann/crypto创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/30 0:26:26

MQTT与Modbus统一接入DolphinDB:构建工业测点流数据平台

1. 接入层整体设计做工业数据接入这件事,最头疼的往往不是某个协议有多难,而是设备太多、协议太杂。今天聊的这套方案,核心就是把 MQTT、Modbus 这两类最常见的工业协议,全部收口到 DolphinDB 里,统一成一测点一行的“…

2026/9/30 0:26:26

工厂设备数据采集与实时告警闭环:边缘-中心协同架构实战

1. 这不是“又一个IoT平台”,而是产线老师傅和IT工程师坐下来一起画出来的数据流工厂里最怕什么?不是设备停机,是设备“假装在运行”。我去年蹲点一家做汽车零部件的中型工厂,车间主任指着一台价值380万的数控珩磨机跟我说&#x…

2026/9/30 1:36:31

QComboBox下拉箭头定制全攻略:从QSS到QProxyStyle

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 1:36:31

嵌入式开发中的Vibe Coding:能力边界与工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 1:36:31

JVM内存结构详解:从运行时数据区到OOM排查实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 1:36:31

Linux 中文 man 手册安装指南:从查找机制到实战配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 1:31:30

设计模式之策略模式:从if-else重构到生产级代码示例

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/29 11:07:23

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/29 21:48:03

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/29 7:00:49

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/30 0:01:22

MATLAB+Yalmip+CPLEX实战:综合能源系统优化调度全流程解析

做综合能源系统优化调度这活儿,最痛苦的不是建模本身,而是模型写完之后不知道该怎么求解。看论文里轻飘飘一句“采用Yalmip调用CPLEX求解”,自己上手时却往往卡在环境配置、变量声明、约束写法和求解状态判读上,一耗就是两三天。这…

2026/9/30 0:01:22

I3C比I2C快10倍?RK3576实战:速率、DTS配置与混合总线避坑指南

I3C 比 I2C 快 10 倍?这句话在嵌入式群里传了很久,每次都能吵出一堆截图。前段时间我正好在 RK3576 上调板级 I3C 接口,从控制器寄存器一路摸到 Linux DTS 配置,踩了不少坑,也把这笔速度账彻底算明白了。本文就用 RK35…

2026/9/30 0:01:22

字符串转对象:JSON.parse、new Function与URLSearchParams

“字符串转对象”这几个字,我在技术群里见过的问法至少有十几种:有人拿着一串{a:1,b:2}说 JSON.parse 直接报错,有人要从 URL 里抠出参数,还有人只是想把abc变成能挂属性的东西。js 这门语言里,字符串和对象之间的转换…

2026/9/29 3:53:39

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/29 9:46:12

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/29 6:36:14

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑