news 2026/8/31 9:20:08

Thunderbolt零知识同步架构完全指南:后端只存密文的端到端加密设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Thunderbolt零知识同步架构完全指南:后端只存密文的端到端加密设计

Thunderbolt零知识同步架构完全指南:后端只存密文的端到端加密设计

【免费下载链接】thunderboltAI You Control: Choose your models. Own your data. Eliminate vendor lock-in.项目地址: https://gitcode.com/GitHub_Trending/thund/thunderbolt

Thunderbolt是一款开源的自托管 AI 客户端,支持端到端加密的多设备同步。它的核心承诺是:启用零知识同步后,后端服务器只存储密文与包装密钥(wrapped keys),连管理员也无法读取你的聊天记录、模型配置和自动化任务。本文将带你用通俗的方式看懂这套密码学设计:内容密钥(Content Key)、ECDH + ML-KEM 混合信封、24 词恢复密钥,以及让服务器"自证清白"的金丝雀机制 🛡️。

一、零知识同步:服务器"看得见"的只有密文

Thunderbolt 的跨设备同步基于 PowerSync:每台设备本地有一个 SQLite 数据库,PowerSync 服务在 SQLite 与后端 PostgreSQL 之间流转增量数据。完整说明见 docs/architecture/multi-device-sync.md。

如果数据原样上传,服务器就能读取一切。Thunderbolt 的做法是在同步管道中插入一层加密中间件

  • 下载时:密文在写入本地 SQLite 之前先解密,本地数据库永远是明文,应用体验零损耗;
  • 上传时:明文在离开本地之前先加密,服务器上只落密文。

加密的开关只有一个后端环境变量E2EE_ENABLED(默认关闭),前端在启动时从GET /v1/config读取该标志并缓存到localStorage,见 src/db/encryption/config.ts。关闭时自动信任设备、跳过信封流程;开启后则必须完成"设备信任"流程才能同步——这正是零知识安全模型的分界线。

二、密钥层级:一把内容密钥,N 个设备信封

整个设计围绕一个概念展开——内容密钥(Content Key, CK):每个账号只有 1 把AES-256-GCM密钥,负责加密该账号的全部用户数据,在所有设备间保持一致。

每台设备再各自生成两把密钥对,私钥永远不出设备:

概念说明
设备密钥对ECDH P-256+ML-KEM-768(后量子),私钥永不出设备
内容密钥(CK)全局唯一的一把 AES-256-GCM,加密所有用户数据
设备信封(envelope)CK 用混合加密"包装"给特定设备,只有该设备能解包
恢复密钥CK 编码成的 24 词 BIP-39 助记词,仅在首次设置时显示一次
金丝雀(canary)用 CK 加密的固定明文,存于服务器,用于验证恢复密钥

用一张简图表达"一钥多信封"的关系(源自 docs/architecture/e2e-encryption.md):

┌──────────────┐ │ CK │ 一把密钥,加密所有记录 └──────┬───────┘ 为每台设备单独包装信封 ┌─────────────┬──────┴──────┐ ▼ ▼ ▼ 设备1的信封 设备2的信封 设备3的信封 │ │ │ 用私钥1解包 用私钥2解包 用私钥3解包 ▼ ▼ ▼ 同一个 CK 同一个 CK 同一个 CK

这就是零知识的关键:服务器存的是 N 个互相独立的信封,任何一个信封都不暴露 CK 本身。撤销一台设备,只需删除它的信封,那台设备立刻再也解不出数据。

三、混合信封:经典 ECDH 撞上后量子 ML-KEM

信封是怎么"包装"CK 的?核心实现在 src/crypto/primitives.ts:

  1. 发送方生成一个临时 ECDH P-256 密钥对,与目标设备的公钥算出共享秘密 ①;
  2. 同时用目标设备的ML-KEM-768公钥做后量子封装,得到共享秘密 ②;
  3. 两个共享秘密经HKDF-SHA256派生出一把临时 AES-KW-256 包装密钥;
  4. 用这把临时密钥对 CK 做AES-KW包裹,最终信封结构为:[版本1B][临时公钥65B][ML-KEM密文1088B][包裹后的CK 40B]

这套组合叫混合密钥封装,安全性质是:只要 ECDH 和 ML-KEM 中任意一个没被攻破,信封就安全。换句话说,未来即使量子计算机破解了 ECDH,ML-KEM 依然守得住 CK——这是典型的"防未来量子"设计。

四、设备流转:新设备如何安全拿到密钥

零知识架构下,CK 绝不能由服务器中转。Thunderbolt 为每种场景设计了独立流程(见 docs/architecture/e2e-encryption.md):

场景发生什么
🆕 第一台设备生成密钥对 + CK → 为自己包装信封 →只显示一次24 词恢复密钥
📱 新增设备生成自己的密钥 → 等待已有设备批准→ 受信设备为它包装信封 → 本地解包开始同步
💻 回归设备本地私钥还在、CK 丢失 → 拉取自己的信封 → 解包恢复同步
🔑 恢复密钥输入 24 词 → 解出 CK → 金丝雀验证 → 为新设备建立信封
🚪 登出 / 撤销清空本地密钥;撤销则删除信封并置revoked_at,设备永久失权

新增设备必须经过"受信设备批准"这一步,意味着密钥分发永远发生在设备与设备之间的信任链里,服务器只是信封的"信箱",不是"钥匙"。相关后端路由(设备注册、信封管理、金丝雀校验)集中在 backend/src/api/encryption.ts,且限制每账号最多 10 台设备。

五、金丝雀与恢复密钥:如何证明"这 24 个词是对的"

恢复密钥是最后一道保险,但它只会在屏幕上出现一次。写坏了、记岔了一个词怎么办?

金丝雀(canary)解决的就是验证问题。首次设置时,客户端生成一个随机机密,拼上固定前缀thunderbolt-canary-v1:<secret>后用 CK 加密,把密文存到服务器(实现见 src/crypto/canary.ts)。恢复流程中:

  1. 客户端把 24 词通过 BIP-39 解码回 32 字节 CK(见 src/crypto/recovery-key.ts);
  2. 用这把 CK 解密金丝雀;
  3. 前缀正确 → 密钥必然正确;顺便把解出的canarySecret作为持有证明提交给服务器(后端只存其哈希,无法反推)。

这样服务器能确认"用户确实拥有恢复密钥",却始终不知道 CK 是什么。

六、明文去哪了:同步管道中的加密中间件

数据面则由encryptedColumnsMap这张"加密清单"统一驱动(见 src/db/encryption/config.ts):

  • chat_messagescontentpartsmetadata
  • modelsnameurlvendor
  • promptstasksskillsprojects的全部用户自创内容
  • ……

新增一个加密列,只需在清单里加一行,下载解密与上传加密自动生效。密文在传输线上的格式统一为__enc:<iv>:<ciphertext>

不同运行时的执行位置略有差异,详见 docs/architecture/powersync-sync-middleware.md:

运行时执行位置原因
Chrome / Edge / Firefox自定义SharedWorker多标签页共享一条同步连接,CK 常驻 worker
Safari / iOS / Tauri主线程 transformer这些环境不支持 SharedWorker

两条路径殊途同归:最终写入本地 SQLite 的都是明文,而网络上和服务器上的永远是密文

七、这套设计能对抗什么?

把各部件串起来,可以清晰地回答"威胁模型":

  • 🔓服务器被入侵:数据库里只有密文和信封,没有 CK,攻击者拿不到明文;
  • 🏛️法律强制披露:后端架构上就不持有可读数据,"想给也给不了";
  • 🤖未来量子计算机:混合信封保证经典 + 后量子双保险;
  • 📵设备丢失:在其余设备上撤销该设备,删除信封即永久失效;
  • 💾全设备丢失:24 词恢复密钥 + 金丝雀验证,数据可完整找回。

⚠️ 需要说明:Thunderbolt 的端到端加密目前处于Preview阶段,尚未经历独立密码学审计(见 docs/architecture/e2e-encryption.md)。请妥善保管你的 24 词恢复密钥——它是唯一能救回全部数据的东西。

八、延伸阅读:源码与文档导航

想深入源码?按这条路线走最快:

模块路径作用
E2EE 架构总览docs/architecture/e2e-encryption.md密钥概念、用户流程、关键文件清单
混合信封 + AES 原语src/crypto/primitives.tsECDH/ML-KEM 包装、AES-256-GCM 加解密
密钥本地存储src/crypto/key-storage.tsIndexedDB 存储设备私钥与 CK
加密列清单src/db/encryption/config.ts唯一事实源,新增加密列只需改这里
后端加密 APIbackend/src/api/encryption.ts设备注册、信封读写、金丝雀持有证明
同步中间件docs/architecture/powersync-sync-middleware.md下载解密 / 上传加密的管道实现

一句话总结:Thunderbolt 的零知识同步 = 一把 CK 管所有数据 + 混合后量子信封把 CK 逐台设备安全送达 + 金丝雀兜底验证恢复密钥。后端从头到尾只是一个"存信封的仓库"——这就是"AI You Control"在密码学层面的真实含义 ⚡。

【免费下载链接】thunderboltAI You Control: Choose your models. Own your data. Eliminate vendor lock-in.项目地址: https://gitcode.com/GitHub_Trending/thund/thunderbolt

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 9:18:36

AI字幕翻译流水线搭建:从语音识别到SRT字幕生成实践

很多做视频内容的朋友&#xff0c;这两年应该都听过“AI熟肉”这个词。所谓“AI熟肉”&#xff0c;指的是用AI工具完成视频音频的语音识别、翻译、字幕生成甚至配音&#xff0c;替代传统人工听译和逐句翻译的繁琐流程。以前一个小时的视频&#xff0c;人工听译加打轴可能要花一…

作者头像 李华
网站建设 2026/8/31 9:18:11

Umi-OCR 批量识别指南:离线免费,一次导入几百张图片识别成文字

Umi-OCR 批量识别指南&#xff1a;离线免费&#xff0c;一次导入几百张图片识别成文字 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片&#xff0c;PDF文档识别&#xff0c;排除水印/页眉页脚&#xff0c;扫描/生成…

作者头像 李华
网站建设 2026/8/31 9:16:33

React主流库全解析:路由、状态管理与数据请求实战

React 的“主流库”不像表面上那么少。很多人一聊 React 生态&#xff0c;脑子里只有 React Router 和 Redux&#xff0c;但实际上常用的路由、状态管理、数据请求、表单、UI 组件、动画、跨端框架加起来至少有 10 个以上。这次我们把 React 生态里最常用的主流库全部过一遍&am…

作者头像 李华
网站建设 2026/8/31 9:15:18

SLMs + IRM 为 Coding Agent 加装独立安全闸门:部署与评测实践

Coding Agent 跑得再快&#xff0c;安全闸门没守住&#xff0c;就是在给生产环境埋雷。最近看到一个很有意思的方案标题&#xff1a;用 SLMs 加 IRM 在 Coding Agent 安全场景对标 GPT5.5-xhigh 这类旗舰大模型。核心思路不是堆更大的模型&#xff0c;而是把“干活”和“安检”…

作者头像 李华
网站建设 2026/8/31 9:12:19

免费大模型API使用指南:从注册、避坑到批量调用与报错排查

免费大模型API 是很多开发者在学习、做Demo、跑自动化任务时最想找的资源。市面上确实有一些公益API站点&#xff0c;注册后送额度&#xff0c;也有人整理过几十个入口&#xff0c;标题常常写成“一次打包&#xff0c;注册就送”。但真正用起来&#xff0c;比“找不到API”更常…

作者头像 李华