我们如何实现同态加密推理 专题介绍 ·《我们如何实现同态加密推理》本文件用于博客园「专题」页§1 是专题名三选一§2 是短简介字段§3 是专题介绍正文可直接作描述或置顶说明。全部内容只陈述本系列已写出的事实数字与口径与 16 篇正文一致。1. 专题名称三选一推荐 A均 ≤30 字符均含同态加密 / FHE主关键字专题名字符数说明A推荐同态加密推理FHE2B 大模型拆成 28 段密文链28主关键字「同态加密推理 FHE」前置再给规模 做法最容易被搜到BFHE 同态加密推理2B 大模型 28 跳密文接力26关键字前置 接力点出可参与性适合招人C零依赖纯 C11 同态加密推理2B 大模型密文计算26技术栈 主关键字前置吸引做底层/嵌入式的读者三个名字都没有我们如何实现这个前缀01 篇标题里有专题名省掉更省字符。若你想保留A的等价写法是「我们如何实现同态加密推理FHE28 段密文链」共 25 字符。关键「同态加密」「FHE」「推理」「大模型」「密文」这五个词至少要出现三个——这是被搜索引擎收录相关长尾词的最低成本位置。2. 专题简介填简介字段约 130 字把一个 2B 大模型拆成 28 段密文链条在普通 CPU 上做同态加密推理FHE 推理。本专题是这套同态加密推理引擎的完整工程实录只讲事实自研 negacyclic NTT 数论变换、RNS-CKKS 模数链、Key-Switch 重线性化的数量级论证、自举 Bootstrapping 七段流水线、密文 attention以及位级可复现性与验证学。同态加密参数为机制验证级不主张安全强度与性能优越性。3. 专题介绍正文3.1 这个专题在讲什么同态加密推理FHE 推理指的是让大模型直接在密文上完成前向计算、数据全程不解密的一类隐私保护推理方案。本专题讲的就是我们如何用纯 C11、零第三方 FHE 库从零实现一套同态加密推理引擎。具体来说我们让一个2B 参数的大模型Qwen3-VL-2B在密文上做前向推理。做法不是造一台更强的机器而是把模型按层横切成 28 段每一段一跳各自成为一个可交接、可独立验证的密文包——于是一台普通 8 核 CPU、跑约 1.8 小时就能为整条链贡献一段。整套引擎是纯 C11 自研的NTT、CKKS、线程池全部是本仓源码依赖只有libc libm无 GPU、无 NPU、无第三方 FHE 库。基准平台是 AMD Ryzen 7 9800X3D8 核 16 线程。3.2 一跳的契约窄到可以写在信封背面layL : u(L-1)r112 ──→ uL bootL: uL ──→ u(L)r112一跳 lay层内前向QKV、attention、FFN、激活boot自举刷新一跳产出8 枚密文4 个 token 位置 × 2 个分量单枚落盘≈3.5 MB交接包是自描述的密文 日志 元数据 manifest.sha256。为什么必须交替因为lay会把模数链吃掉而boot把它刷回去。链长就是这条流水线上的油箱表lay消费后只剩 16 个素数boot刷新后回到 112。3.3 凭什么说可复现、可验证这是最容易被质疑的一点——把密文交给不认识的人算凭什么信我们的答案不是信而是让信任不必要逐文件 SHA256交接包内每个密文、每个日志都有哈希manifest.sha256可自校验归档实测主包 104/104、链尾 45/45、工具包 6/6独立复核工具verify_layer自己做解密 → 解码 → 对明文参考算max|err|刻意不采信驱动的RESULTPASS位级可复现同一份源码、同一线程数在 x86-64 与 aarch64 上产出逐系数位级一致数据可自助生成约 7 GB 的数据包不随仓库分发但可用tools/preproc/的脚本从模型自助生成已核对生成物与分发物逐字节相同。⚠️ 第 3 条有一个必须一起讲的限制T23_NT4与T23_NT8的结果在位级上不同。根因是_Thread_local随机数状态用固定常量播种线程抽到哪几个随机数取决于调度器。修复方案按自同构指数k播种已设计但尚未落地详见第 13 篇。所以本专题的一切可复现性声明都在固定线程数的前提下讲。3.4 安全边界务请读完本专题所述参数为机制验证级n2048、112 素数内层链、2100 素数自举链 远低于 HE 参数标准的 128-bit 水平不得用于保护真实数据。 本专题主张的是可复现性与工程量账本。 本专题不主张安全强度、性能优越性、与任何其他方案的优劣对比。补充两点避免任何误读n2048与自研的非密码学 RNG原型级xorshift意味着这套东西不具备密码学安全强度。它的价值在于验证机制能不能跑通、能不能被第三方复现。我们不声称比任何其他同态加密推理方案更快或更优。文中所有耗时数字都是我们自己这份实现在我们自己这台机器上的账本。3.5 怎么读五条路径路径顺序适合只想知道结论与边界01 → 1615 分钟看它做到了什么、没做到什么密码学内核主干03 → 05 → 06 → 07想懂 NTT / 模数链 / Key-Switch / 自举三个沉默的坑08 → 13 → 14最有警示价值缺文件不报错、线程数改结果、PASS不是判据工程与复现11 → 12 → 15 → 14想做接力、想复现、想看账本模型是怎么塞进去的02 → 09 → 10 → 08关心 Transformer 层如何密文化每篇结尾都有「这一篇的未解问题」可以当钩子也是我们照实写的部分。3.6 篇目索引16 篇篇标题一句话01开篇我们为什么把 2B 大模型拆成 28 段密文链条来算单机跑不动全链 → 按层横切开篇就写我们没做到什么02引擎全景一次密态推理的完整数据流明文侧Python与密文侧纯 C的整条数据流与分界线03手写 negacyclic NTT为什么不用现成库以及怎么证明它是对的ψ^n-1、双模乘路径、与教科书 O(n²) 逐个系数位级对照04为什么我们最终放弃了 BFVFHE 方案选型明文模环上的除法语义是怎么把 GELU 逼死的05RNS-CKKS 的模数链管理rescale/modswitch/modraise到底谁是谁06Key-Switch 重线性化一个数量级2^73 噪声决定设计无 digit 分解噪声 ~2^73会直接爆掉 60-bit 素数07自举 Bootstrapping一个不提高精度的加油站七段流水线80% 的时间花在两段域变换上08SiLU 密文化两条路径与那个 8 字节开关文件缺失不报错、照打PASS数值却劣化一个数量级09逐层尺度自适应为什么每一层都要单独定标10密文里的 attention没有 max 的 softmax旋转做移位、掩码用加法密文里没有条件跳转11密文链协议两条不变式与素数分工lay/boot的契约以及 112 与 2100 的分工12自研线程池替换 OpenMP动机、设计、以及换来的限制非可重入13位级可复现性4 线程与 8 线程为何不同根因、修复方案以及修复尚未落地这一事实14验证学为什么RESULTPASS不是判据正确的两层判据PASS只表示流程走完15实测账本1.8 小时一跳的钱花在哪lay01920 s、boot04285 s以及瓶颈到底在哪16未完成清单与已知边界精度余量、超阈项、待闭环项照实写3.7 数字怎么读口径纪律跨轮次的绝对耗时不可比。文中所有耗时均为同轮交错 A/B不引用历史会话的绝对值。耗时必须与线程数绑定陈述否则无意义。参数n、链长、scale为编译期量编译期 2100指该程序支持的上限不等于运行中链上有 2100 个素数。4. 评论区统一口径建议有人问建议回答安全吗能商用吗直接给 §3.4 的边界块并明确目前是机制验证级。不要含糊比某某方案快吗不做横向比较。只报我们这份实现、这台机器上的账本我能参与吗可以。中间 21 层层 5–25仍待认领交接包自带 SHA256 与独立复核工具不依赖信任能不能给完整代码引擎源码在仓库约 7 GB 数据包不随仓分发但可用tools/preproc/自助生成并逐字节核对仓库与文档Gitee 主仓https://gitee.com/pei-xiaoguang/kestrel-llmGitHub 镜像https://github.com/m13253246268-ship-it/kestrel-llm正文中所有口径均以 wiki 页面为准术语与数据口径 性能与基准 构建与复现 快速上手 架构总览