第 25-3 篇:随机源纪律——内核 CSPRNG 与 k 复用灾难
上一篇25-2《工具链实操vllm_vqf_sign 的 genkey/sign/verify》下一篇26-1《信任根与验签闭环发布方 → 设备》真机实测通过本文实验已在 RK3588 板端实测完成2026-09方法学与原始记录见仓库 docs 与《实验脚本》目录。一句话导读随机源纪律SM2 签名每次的 k 必须取自内核 CSPRNGk 一旦复用私钥会被纯代数解出原理用笔推演、不演示攻击落点是同一私钥连签三次全不同且各自验签通过的实测。关键词随机源纪律、CSPRNG、k 复用、SM2、国密25-2 里vllm_vqf_sign --sign每签一次都悄悄做了一件事从内核 CSPRNG 取一个新的随机数 k。这篇讲这条纪律为什么是生死线——SM2 签名若复用同一个 k私钥会被纯代数直接解出且不需要任何量子计算机。原理用笔推演不演示攻击纪律用板端实测证明同一私钥同一消息连签三次三次签名完全不同、且各自验签通过。1. 知识点k 为什么必须每次新鲜SM2 签名公式25-1 已给s (1d)^-1 · (k − r·d) mod n假设对同一消息e 相同签了两次且两次用了同一个 k → 两次的椭圆曲线点 [k]G 相同 → r 相同而 s 按上述公式由 (k, r, d) 唯一确定 →两次签名完全一样。r/s 一模一样本身就可疑——这是 k 复用的暴露信号。但真正的灾难是下面这个场景不同消息、同一个 k如用固定随机种子签名不同的模型文件。此时 e 不同 → r₁ ≠ r₂但 k 相同s₁ (k − r₁·d)/(1d) s₂ (k − r₂·d)/(1d)两式相减消去 ks₁ − s₂ (r₂ − r₁)·d/(1d)反解出d (s₁ − s₂) · ((r₂ − r₁) − (s₁ − s₂))⁻¹ mod n。右边全部是公开值 (r₁, s₁, r₂, s₂)——私钥 d 被纯代数解出不需要碰任何加密算法只需要两条同 k 不同消息的签名。历史上有教科书级事故PlayStation 3 的 ECDSA 签名用固定 k2010 年 fail0verflow 团队正是用这条式子解出了索尼的私钥。ECDSA 与 SM2 同族s 公式结构等价k 复用 私钥裸奔。所以纪律只有一条k 必须每次签名从密码学安全随机源现取绝不缓存、绝不复用、绝不手工注入。vllm_crypto.h 88–91 行把这句写成了注释k 复用会泄露私钥。2. 对应代码vc_secure_rand 与签名侧的唯一取数点/* vllm_crypto.c 682–702 */ int vc_secure_rand(uint8_t out[32]) { #ifdef __linux__ while (got 32) { ssize_t r getrandom(out got, 32 - got, 0); /* 686: 内核 CSPRNG */ if (r 0) { ... fopen(/dev/urandom) ... } /* 688–693: 老内核回退 */ got r; } return 0; #else return -1; /* 非 Linux拒绝生成签名侧必须自备 CSPRNG */ #endif }要点① 32 字节分片循环读完getrandom不是一把梭只调一次② Linux 之外显式拒绝返回 -1而不是悄悄用弱随机——宁可不签不签弱签③ 回退路径只有/dev/urandom内核阻塞池同样 CSPRNG没有任何时间种子 / rand()这类伪随机。签名工具侧的调用点唯一/* vllm_vqf_sign.c 233–238每个签名都重新取 k */ uint8_t k[32]; if (tool_secure_rand32(k) ! 0) { ... return 1; } /* 每次 --sign 都走到这里 */ if (vc_sm2_sign(priv, digest, 32, ..., k, r, s) ! 0) ...25-2 的--genkey也走同一tool_secure_rand32工具私钥生成 每次签名随机数共用这一个 CSPRNG 入口——把随机源纪律收敛到单点代码审查只需盯这一个函数。3. 改动后果同一私钥连签三次三次签名全不同实测口径RK3588 / aarch64 / 2026-09-07。harnesssm2_rand_kat.c固定私钥GM/T 附录示例 dA、固定消息nonce discipline test、固定 IDvllm-shs-vqf真实 VQF_SM2_ID连签三次k 每次由vc_secure_rand现取。run0 k5a3eb31627aba27f996571a1636f6941d0e050ec07d60c38753d2e928ca1133e run0 r4298c4a4762ad8353e01f7d502d9b6fa0b09395b4396ba0d89b99ade85a94d65 s075ef6889172f6923b6d07519ffb89102ab91293f6aa8790c77a889dc830f659 verify1 run1 kf13205557a4caeb0edb1f9ee59a14efd71b32f4a778adf821e584ab4acc9bf85 run1 r1b4961960504f9f721291c9d041bbf882882b343a5edbc9faa32203b575877be s86cbbbe10d9fc2ac74a76d42cd13d0182111f6b9e2ec723166ce42d2e6617a87 verify1 run2 k5c7b326044974c6c23eb8266e8784e0b9a12b502ac4fbf2598625cb6c8f67aa4 run2 rb016204a37d3353d166a056b26c9b1ac40a6d1c10112bc46df97343555d1f6a7 sae6d21a7135909d74b214c2341a145d0ea3e919e6c843cd97ab0ec09a0e287f0 verify1 three_signatures_all_distinct1 k_freshness: PASS (CSPRNG per-signature k)推演改动后果对照 25-1 的确定性 harness把sm2_rand_kat.c里的vc_secure_rand(k)换成memcpy(k, 常量, 32)固定 k三次签名会得到逐字节相同的 r/s——这是肉眼可查的 k 复用红线信号。再把同 k 不同消息代入第 1 节的代数任意两对 (r,s) 即可解出 d。也就是说复现本文全部实验用固定 k 没问题KAT 就是这么做的25-1 的 gmssl 对拍也用固定 k但生产签名路径里出现固定/复用 k等同私钥公开。KAT 固定 k 与生产随机 k 的分界就是纪律本身。4. 学员调试任务A 档动手编译运行sm2_rand_kat.c复现三次签名全异、k_freshness: PASS然后把它改成固定 k 重跑观察三次 r/s 完全相同感受复用信号。B 档纯读源码读vllm_crypto.c682–702 与vllm_vqf_sign.c60–85、233–248回答①getrandom返回可能不足 32 字节被信号打断代码为什么必须循环若只调一次不检查返回值会怎样② Windows 上tool_secure_rand32回退到 BCryptGenRandom为什么不能回退到rand()/time()③ 用纸笔完成第 1 节代数给定 (r₁,s₁)、(r₂,s₂) 且 k 相同写出解出 d 的完整推导不要跳步。预期输出三次签名全异 固定 k 复现全同的对照日志以及一张手写/打字的 k 复用推导能讲清每条签名都要新 k而不只是背结论。收尾本篇源码点名vllm_crypto.cvc_secure_rand682–702、vllm_vqf_sign.c60–85 随机数包装、233–238 每签取 k、vllm_crypto.h88–91 k 复用警告注释开源仓库Kestrel-LLM (Gitee)AGPL-3.0-or-later 或商业许可二选一下篇预告工具会用了、k 纪律立了——但签名文件拿到设备上引擎凭什么信任Day 26 进供应链签名接入信任根从哪来、VQF_FLAG_SIGNED文件加载时走哪条验签路径、以及亲手做一次掉包攻击看它怎么被拒。

相关新闻

DeepSeek    LeetCode 199. 二叉树的右视图 Java实现

DeepSeek LeetCode 199. 二叉树的右视图 Java实现

LeetCode 199. 二叉树的右视图 题目描述 给定一个二叉树的根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例&#xff1a; 输入: [1,2,3,null,5,null,4] 输出: [1,3,4]1 <---/ \2…

2026/10/1 17:14:05 阅读更多 →
用 schtasks 给电脑设每天定时重启:一个 bat 双击搞定全科室

用 schtasks 给电脑设每天定时重启:一个 bat 双击搞定全科室

摘要&#xff1a;科室电脑老不重启&#xff0c;软件更新不生效、共享打印机罢工、越用越卡。一台台去设太麻烦&#xff0c;我用 Windows 自带的计划任务写了个批处理脚本&#xff1a;内网群发出去&#xff0c;让每台电脑双击运行一次&#xff0c;就设好每天定时重启&#xff0c…

2026/10/1 17:14:05 阅读更多 →
ImageGlass Windows 打包全指南:MSIX、MSI 与便携版 ZIP 的构建与签名实战

ImageGlass Windows 打包全指南:MSIX、MSI 与便携版 ZIP 的构建与签名实战

桌面应用图像处理 【免费下载链接】ImageGlass &#x1f3de; A fast, open-source, modern image viewer for 90 formats – including WEBP, GIF, SVG, AVIF, JXL, HEIC and more – built for smooth browsing across Windows, macOS, and Linux. 项目地址&#xff1a; http…

2026/10/1 17:14:05 阅读更多 →

最新新闻

K9s v0.1.3 版本解析:热键体系重构、多集群配置迁移与 ReplicationController 支持

K9s v0.1.3 版本解析:热键体系重构、多集群配置迁移与 ReplicationController 支持

云原生容器编排CLI运维 【免费下载链接】k9s &#x1f436; Kubernetes CLI To Manage Your Clusters In Style! 项目地址&#xff1a; https://gitcode.com/GitHub_Trending/k9s/k9s 点击查看 免费下载 导读 K9s v0.1.3 是该项目早期发展中一次承上启下的关键发布&#xff1…

2026/10/1 18:39:46 阅读更多 →
计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度建模与实现

计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度建模与实现

做虚拟电厂优化调度这几年&#xff0c;我几乎每个月都会碰到同行在群里问同一个问题&#xff1a;垃圾焚烧、碳捕集、电转气这些单元单独看都很“绿”&#xff0c;但把它们放进同一个虚拟电厂里到底该怎么配合&#xff1f;不少人的模型里各算各的&#xff0c;碳捕集出来的二氧化…

2026/10/1 18:39:46 阅读更多 →
嵌入式学习第十七天:用Linux个人博客项目打通服务部署全流程

嵌入式学习第十七天:用Linux个人博客项目打通服务部署全流程

嵌入式学习找工作第十七天--第一个项目&#xff08;Linux个人博客&#xff09; 走到第十七天这个节点&#xff0c;算是一个值得停下来认真复盘的位置。前面两周多的时间里&#xff0c;大概率已经啃完了 Linux 基础命令、vim 的基本操作、环境变量的概念&#xff0c;甚至可能被…

2026/10/1 18:39:46 阅读更多 →
AI论文能洗白吗?实测Paperxie降AIGC率真相

AI论文能洗白吗?实测Paperxie降AIGC率真相

这段时间后台总有读者追着我问同一件事&#xff1a;用 AI 写完论文以后&#xff0c;拿去跑 Paperxie 这类降重工具&#xff0c;出来的 AIGC 率到底能不能压到个位数&#xff1f;尤其是知网、维普据说要在 2026 年执行更严的新规&#xff0c;很多人怕现在辛辛苦苦改完&#xff0…

2026/10/1 18:39:46 阅读更多 →
基于Unet的医学影像分割实战:从PyTorch模型训练到Dice评估与避坑指南

基于Unet的医学影像分割实战:从PyTorch模型训练到Dice评估与避坑指南

简介&#xff1a;一套基于U-Net的医学影像分割系统完整项目源码&#xff0c;适合计算机、人工智能、自动化等专业学生完成毕设、课程设计或医学影像分割入门实践&#xff0c;也便于小白进阶学习。项目实现了从数据标注到模型部署的全流程&#xff0c;包含标注格式转换、训练与预…

2026/10/1 18:39:46 阅读更多 →
AI求职Demo失效真相:从玩具到产品的能力表达重构

AI求职Demo失效真相:从玩具到产品的能力表达重构

1. 这不是技术问题&#xff0c;是求职信号系统失灵了 “做了3个AI Demo&#xff0c;为什么还是拿不到面试&#xff1f;”——这句话我去年在技术社区刷到不下二十次&#xff0c;每次看到都下意识点开&#xff0c;不是因为好奇&#xff0c;而是太熟悉了。熟悉到能一眼看出提问者…

2026/10/1 18:38:45 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/1 1:01:17 阅读更多 →

周新闻

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

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

如何划分训练/验证集&#xff1a;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/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

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

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

2026/9/30 18:13:06 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/1 1:01:17 阅读更多 →