news 2026/9/30 13:14:28

EverRoom 安全模型拆解:本地回环、Bearer Token 与凭据脱敏的隐私设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
EverRoom 安全模型拆解:本地回环、Bearer Token 与凭据脱敏的隐私设计

EverRoom 安全模型拆解:本地回环、Bearer Token 与凭据脱敏的隐私设计

【免费下载链接】EverRoomEverRoom - A workspace that remembers your projects, decisions, and sources.项目地址: https://gitcode.com/gh_mirrors/ev/EverRoom

EverRoom 是一个"记得你的项目、决策和信息来源"的本地优先(local-first)个人工作区。它把文档、知识库、上下文房间和 AI Agent 都跑在你的电脑上,因此隐私设计从第一天起就是核心:网关只监听本地回环地址、每次启动随机轮换 Bearer Token、敏感凭据加密落盘并在日志中自动脱敏。本文用 3 个关键模块带你读懂这套隐私设计。

一、本地回环 + 随机 Bearer Token:网关只对"自己人"开门

EverRoom 的桌面端通过一个本地网关进程承载所有核心能力(文档、记忆、Agent、连接器)。它的安全边界非常简单:

  • 只绑定127.0.0.1:网关不监听局域网地址,其他设备无法直接访问你的数据。
  • 每次启动随机生成 Token:网关启动时生成一个随机 Bearer Token,只保存在桌面端主进程内存中,并随进程结束失效。
  • 每个请求都必须带Authorization: Bearer <token>,否则直接返回 401。

鉴权逻辑只有 20 来行,核心在 auth.ts 中:

请求进入时,Fastify 的onRequest钩子对比请求头与Bearer ${token},不匹配即返回 401 的unauthorized响应;只有/v1/health和/docs免鉴权。

Token 的注册与注入在 create-server.ts:

await app.register(auth, { token: config.authToken })—— 鉴权插件在启动时统一挂载,所有业务路由共享同一道关卡。

这套"回环 + 随机令牌"的组合,让网关即使被本机其他程序扫描到端口,也无法在不知道 Token 的情况下读写任何数据。对于桌面应用而言,这是成本最低、效果最好的一道门。

二、凭据加密落盘:AES-256-GCM + 0600 文件权限

连接 Gmail、飞书、Notion 等账号时,网关需要保存刷新令牌等敏感凭据。EverRoom 没有把这些值以明文写进配置文件,而是用了一个"加密保险箱":secret-store.ts。

三个值得注意的细节:

  1. 整份凭据文件一次性加密。credentials.enc不是"每条凭据各存一段密文",而是把所有值打包成 JSON 后整体用AES-256-GCM加密,附带version / iv / tag信封结构,任何单字节被篡改都会导致解密失败。
  2. 文件权限 0600。持久化时先写临时文件再原子替换(rename,Windows 上降级为 copy+delete 兼容杀软锁定),并强制chmod 0o600,只有当前系统用户可读。
  3. 主密钥可覆盖。默认内置固定主密钥保证开发/无头环境零交互,生产环境可通过环境变量NXCORE_SECRET_STORE_KEY替换成自己的密钥。

桌面端同样思路的本地加密在 local-secret-cipher.ts(enc:v1:前缀 + AES-256-GCM,nonce 与认证标签拼进密文),并由 credential-store.ts 统一管理——读到旧明文时会自动迁移为密文,兼顾了历史版本的平滑升级。

💡 历史版本曾用系统钥匙串(safeStorage)托管主密钥;新方案改为内置密钥 + 文件权限保护,彻底消除了"登录解锁钥匙串"的交互,见 gateway-secret-key.ts 中对旧密钥文件的清理逻辑。

三、凭据脱敏:日志与响应中的密钥自动变成[REDACTED]

比"存好密钥"更难的是"别让密钥泄漏"——它可能出现在 HTTP 请求头、错误堆栈、甚至流式日志里。EverRoom 用 secret-redaction.ts 做了三层防御:

层级机制说明
关键词匹配SENSITIVE_KEY正则键名含api_key / token / secret / password / credential等字段直接替换为[REDACTED]
文本模式匹配redactText抹掉Bearer <任意串>和 URL 里的token=xxx&signature=xxx等查询参数
已知值注册表registerSecret任何写进保险箱的凭据都会登记到内存集合,之后在所有文本(含 URL 编码、表单编码形态)中全局替换

几个工程细节体现了成熟度:

  • 深层递归 + 循环引用保护:redactSecrets递归遍历任意 JSON 结构,用WeakMap防循环引用死循环;
  • Date特判:时间戳字段原样透传,避免响应里的日期被摊平成{};
  • 流式日志防泄漏:redactDelta按 scope 缓存日志尾巴,保证密钥恰好被跨块截断时也不会半截泄漏到输出里。

这套脱敏同时挂在 Fastify 的preSerialization(所有 API 响应)和 logged-axios.ts(所有对外 HTTP 调用的日志)上,相当于给"出口"装了安检机。

四、加分项:跨设备同步也是端到端加密的

当你把 EverRoom 同步到手机等其他设备时,密钥分发同样不信任中间人。account-keyring-service.ts 实现了一套密钥包协议:

X25519-HKDF-SHA256-AES-256-GCM:每次用临时 X25519 密钥协商出共享密钥,经 HKDF 派生包装密钥,再 AES-256-GCM 加密账号主密钥(UMK);本地私钥本身也用 AES-256-GCM 加密后以 0600 权限落盘。

审批新设备时,界面上会展示一个由设备公钥派生的 12 位校验码(verificationCode),用户肉眼比对确认,防止"中间设备冒充"。密钥包打开失败或版本不匹配时,会明确提示"请在手机上重新批准此设备",而不是带着脏状态继续。

五、给用户的实操建议

  • 不要给网关端口做内网映射/端口转发:它只在127.0.0.1监听,暴露到局域网就等于跳过 Token 之外的全部边界。
  • 自托管部署可设置NXCORE_SECRET_STORE_KEY:用独立主密钥替换内置默认密钥,凭据文件即使被拷贝也无法跨环境解密。
  • 看到[REDACTED]是好事:日志、报错、Agent 输出里出现这个标记,说明脱敏层正常工作,无需担心。

总结

EverRoom 的隐私设计可以浓缩成一句话:网络层用回环 + 随机 Bearer Token 关上门,存储层用 AES-256-GCM + 0600 锁住保险箱,出口层用三层脱敏拦住泄漏。没有复杂架构,每一层都短小、可验证,正是本地优先应用该有的安全姿态。

  • 网关鉴权源码:apps/gateway/src/server/auth.ts
  • 凭据加密保险箱:apps/gateway/src/security/secret-store.ts
  • 脱敏引擎:apps/gateway/src/security/secret-redaction.ts
  • 本地加密与设备密钥环:apps/desktop/src/main/security/

【免费下载链接】EverRoomEverRoom - A workspace that remembers your projects, decisions, and sources.项目地址: https://gitcode.com/gh_mirrors/ev/EverRoom

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

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

Laya微调实战:从System 1决策到17K Star背后的技术拆解

17K Star&#xff01;爆打Jev&#xff0c;Laya使用完整教程&#xff1a;从安装到微调的System 1决策实战 先聊个现象&#xff1a;最近开源模型圈里&#xff0c;一个叫Laya的项目突然冲到17K Star&#xff0c;社区里到处都在讨论“Laya爆打Jev”。我在实际测试之前也觉得这就是营…

作者头像 李华
网站建设 2026/9/30 13:13:23

3步让旧款Mac免费装上新版macOS:OpenCore Legacy Patcher 上手指南

3步让旧款Mac免费装上新版macOS&#xff1a;OpenCore Legacy Patcher 上手指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 2012年的MacBook Pro打开「系统…

作者头像 李华
网站建设 2026/9/30 13:13:09

从二分类到多分类:图像多分类实战指南与避坑技巧

1. 从二分类到多分类&#xff1a;为什么这个问题值得单独拿出来讲 很多人学神经网络&#xff0c;第一个能跑通的 demo 大概率是猫狗二分类——一个 sigmoid 输出&#xff0c;阈值 0.5 一刀切&#xff0c;准确率还挺好看。但真正到了实际项目里&#xff0c;你面对的几乎不可能是…

作者头像 李华
网站建设 2026/9/30 13:11:47

华为ME60二层组播配置实战:IGMP Snooping、组播VLAN与CAC避坑指南

简介&#xff1a;面向华为ME60多业务控制网关运维与网络工程师的《V800R011C10配置指南-二层组播配置》PDF文档系统梳理了二层组播在数据链路层的转发原理及配置方法。内容围绕IGMP Snooping核心机制展开&#xff0c;详细讲解静态二层组播、SSM Mapping、IGMP Snooping Proxy、…

作者头像 李华
网站建设 2026/9/30 13:10:38

Cursor 接入 MCP 配置实战:从 Agent 到自动化工具链

用 Cursor 写代码有一段时间了&#xff0c;最让我上头的不是自动补全&#xff0c;而是 Agent 模式真的会去搜索、读文件、改代码。但之前总觉得它差点意思——AI 能理解我桌上的一堆文件&#xff0c;却不能直接打开它们&#xff1b;能猜出数据库表结构&#xff0c;却没法真的连…

作者头像 李华
网站建设 2026/9/30 13:09:31

深信服sCloud_HCI 6.2.0超融合部署实战:架构拆解与避坑指南

简介&#xff1a;这是一份深信服信云sCloud_HCI 6.2.0官方用户手册&#xff0c;面向网络设计工程师、系统运维人员及云计算学习者&#xff0c;用于指导超融合平台的规划部署、日常操作与故障处理。手册系统介绍了sCloud_HCI的产品体系架构与核心特性&#xff0c;包括多租户、资…

作者头像 李华