ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

第 24-1 SM4-CTR——流式加密为什么选 CTR

第 24-1 SM4-CTR——流式加密为什么选 CTR 上一篇23-3《篡改实验——改一个压缩常量看 KAT 怎么崩》 下一篇24-2《HMAC-SM3密文 tag 的原子认证》真机实测通过本文实验已在 RK3588 板端实测完成2026-09方法学与原始记录见仓库 docs 与《实验脚本》目录。一句话导读SM4-CTR 流式加密为什么 CTR 是边映射边解密场景的唯一合理选择SM4 国密分组密码如何把 VQF 数据区整块流式加密落点是板端跨计数器进位回环一致的实测。关键词SM4、CTR、流式加密、VQF-Enc、国密1. 知识点分组密码的四种工作模式为什么引擎只要 CTRDay 23 证明 SM3 摘要正确但摘要只能验没被改挡不住被偷看。Day 24 进对称加密引擎用 SM4国密分组密码做CTR 流式加密把整个 VQF 数据区变成密文VQF-Enc。这篇讲 CTR 为什么是边映射边解密场景的唯一合理选择板端实测SM4-CTR 对 257 字节跨计数器进位加解密回环一致。SM4 本身是 16 字节一块的分组密码。如何把任意长度数据加密有几种模式模式特性问题ECB每块独立加密同明文块 → 同密文块泄露结构CBC前块密文参与后块必须顺序解密前块没解完不能解后块CTR对计数器块加密异或明文任意块可独立加解密、支持随机访问引擎要加密的是 VQF 的数据区GB 级、mmap 直挂。加载时如果只能顺序解那就得把整块数据先解一遍再喂推理——冷启动直接崩盘。CTR 的关键性质是加解密同函数、每个 16 字节块的密钥流只依赖计数器位置——所以可以 mmap 后按需解密甚至为后续的只解当前页留了门vllm_crypto.h4–7 行的注释把这条取舍写成公理名at_rest_encryption_load_tradeoff。代价只有一个CTR 不提供完整性——密文被翻转一位明文就翻转一位所以必须配 HMAC tag24-2 的主题密文 tag 绑定成原子。2. 对应代码vllm_crypto.c 的 SM4 三段void vc_sm4_setkey_enc(vc_sm4_ctx *c, const uint8_t key[16]); // 252密钥扩展32 轮子密钥 void vc_sm4_crypt_block(const vc_sm4_ctx *c, const uint8_t in[16], uint8_t out[16]); // 262一轮分组 void vc_sm4_ctr_crypt(const vc_sm4_ctx *c, uint8_t counter[16], const uint8_t *in, uint8_t *out, size_t len); // 272CTR 包装CTR 包装272 行起的核心逻辑就三层while (len 16) { vc_sm4_crypt_block(c, counter, keystream); // 1) 加密当前计数器 → 密钥流块 xor(keystream, in, out, 16); // 2) 密文 密钥流 ^ 明文 counter 大端 1; // 3) 计数器前进跨 0xFF 进位由实现处理 … // 4) 尾块 16 字节时只异或前 n 字节 }加解密是同一个函数解密就是拿同一计数器再算一遍密钥流异或回去。因为密文流的正确性只依赖key counter 位置天然支持按需/乱序访问——这是 ECB/CBC 给不了的。3. 改动后果SM4-CTR 回环实测实测口径RK3588 / aarch64 / 2026-09-07。harnesssm4_hmac_kat.c链接引擎同一份vllm_crypto.c。计数器从值 2 起让 257 字节跨过 16 字节块的计数器进位路径。[PASS] SM4-CTR roundtrip (257 B, counter carry exercised) RESULT: ALL PASS同时跑的三条SM3 跨块向量、HMAC-SM3 官方向量也全绿见 24-2。回环实验的要点是故意让计数器进位从 2 开始走 257 字节 → 计数器会加满 16 轮以上覆盖进位实现错误这类只在大数据量才暴露的 bug——如果进位写错加解密在进位处会分叉回环立刻失败。纸面推演CTR 为什么不抗篡改把密文中间某字节翻转解密得到的明文在同一位置翻转——攻击者不需要知道密钥也能精确改一个明文位。这就是为什么只加密不认证是危险的VQF-Enc 的完整性交给 24-2 的 HMAC tag两者必须成对出现。4. 学员调试任务A 档板端/本地动手复刻本文编译运行sm4_hmac_kat.c确认 SM4-CTR 回环 PASS改动实验把计数器进位逻辑或 harness 里 counter 起始值改错重编观察回环在哪一段开始分叉长度扫尾把 harness 的长度改成 1/15/16/17/255/256/257 各跑一次确认尾块处理16 字节在每档都成立。B 档纯读源码读vllm_crypto.c252–290 与vllm_crypto.h4–7回答① CTR 模式下同一个 counter 值被用了两次enc/dec 各一次会不会出安全问题安全使用的前提是什么提示counter nonce 唯一性② VQF 里 SM4 key 从口令派生Day 24-3 会讲VLLM_VQF_KEY→ key material为什么口令派生后 SM4 key 与 HMAC key 必须分开两段③ 若有人把 CTR 换成 CBCVQF 的 mmap 按需解密会碰到什么问题预期输出一份 CTR 回环 长度扫尾的 PASS 记录能口头解释CTR 加解密同函数、按位置算密钥流这两条性质。收尾本篇源码点名vllm_crypto.cSM4 252–290、vllm_crypto.hVQF-Enc 公理注释 4–7开源仓库Kestrel-LLM (Gitee)AGPL-3.0-or-later 或商业许可二选一下篇预告CTR 不认证篡改所以必须给密文上锁——24-2 讲 HMAC-SM3tag 怎么把头部 目录 密文绑成原子改一个字节为什么立刻被发现。
返回列表