PenEcho安全设计深度解析:访问码、HTTPS MCP与无到期证书鉴权的完整指南
【免费下载链接】penechoThink with AI beyond the chat box. A shared canvas for handwriting, equations, diagrams, and spatial reasoning.项目地址: https://gitcode.com/gh_mirrors/pe/penecho
PenEcho 是一款"超越聊天框"的 AI 共享画布应用,支持手写、公式、图表与空间推理协作。由于它把 AI 能力开放给局域网内的浏览器和 AI Agent,安全问题就成了设计的核心:谁能打开画布?AI 如何安全连接?证书会不会过期?本文带你读懂 PenEcho 的三层安全机制——六位访问码、HTTPS MCP 本地证书鉴权、以及"无到期证书"设计。
整体架构:安全从哪里开始
先看懂 PenEcho 的连接关系,你就明白了为什么需要多层防护:
浏览器、本地应用、AI Agent(Codex / Claude 等)可能同时接入同一台主机,因此 PenEcho 用访问码守住网页入口、用HTTPS + 证书守住 MCP 通道,两层互不替代。
访问码机制:一个六位数字的"门锁"
首次启动时,PenEcho 会让你设置一个六位数字访问码(或在确认风险后选择开放访问)。这个看似简单的 PIN,背后做了四件专业的事:
🔐只存哈希,不存明文访问码经scrypt加盐哈希后才保存在内存中(src/server/main.js中 deriveLocalAccessPin,参数 N=16384),即使别人拿到了程序也拿不到你的码。
🔐恒定时间比较,防时序攻击校验时使用 crypto.timingSafeEqual 做比较,避免通过响应时间差逐位猜解。
🔐两级暴力破解防护限速常量定义了两层防线:
| 防护层 | 触发条件 | 惩罚 |
|---|---|---|
| 单 IP 限流 | 5 分钟内同一 IP 输错 5 次 | 锁定 30 秒 |
| 全局限流 | 5 分钟内全局累计错 30 次 | 锁定 60 秒 |
同时最多只允许 4 个并行的校验请求,防止用并发刷掉时间预算。
🔐会话 Cookie 严格加固验证成功后下发的会话 Cookie 是随机 32 字节令牌,带HttpOnly和SameSite=Strict属性(aiSessionCookie),JavaScript 读不到、跨站请求带不走;且访问码只存在内存中,重启即重置,攻击者无法持久化利用。
值得一提的是,选择"开放访问"模式时,open 接口会强制要求客户端显式确认风险(acknowledgeRisk: true),把安全决策权交回用户。
HTTPS MCP:本地 CA + Bearer 的双因子鉴权
AI 客户端连接 PenEcho 时走的是内置 HTTPS MCP 服务(默认依次尝试 3922、13922、23922 端口)。它没有发明复杂协议,而是用两道经典防线:
第一道:TLS 证书信任(证明"你是那台 PenEcho")direct-http-identity.js 在首次启动时自动生成一套本地证书体系:
- 用 EC P-256 密钥对创建一个名为
PenEcho MCP Local CA的本地根证书; - 每次监听为新的 LAN IP 签发覆盖
localhost+ 实际地址的叶子服务器证书(createDirectHttpLeaf,含完整 SAN 列表); - 客户端必须导入该 CA 信任包并完成 IP 校验,发现机制提供的地址提示永远不能替代信任验证。
第二道:Bearer 令牌(证明"你被授权")身份文件中还包含一个随机 32 字节的accessToken(loadDirectHttpIdentity),每次请求都要携带。两者缺一不可:光有证书说明"认识这台机器",光有令牌说明"拿到了钥匙",但无法证明对方身份。
📌 身份文件本身的存储也很讲究:目录强制0700、文件0600权限,读取时用O_NOFOLLOW防符号链接劫持,加载后还会逐项自检(CA 标志、私钥匹配、签名有效、未过期),任何一项不过就拒绝启动(校验逻辑)。客户端通过证书 SHA-256 摘要得到hostId,保证连接的是导入信任包时的那台主机。
无到期证书:告别"每月续签"的麻烦
很多自签名 MCP 方案每月都要重新生成证书、重新分发,非常麻烦。PenEcho 依据RFC 5280 §4.1.2.5"无明确到期日期"的规定,把根证书和服务器证书的有效期直接设为9999-12-31T23:59:59Z(CERTIFICATE_NOT_AFTER),Bearer 凭据同样不设定期失效。
这套"无到期证书鉴权"带来的好处(详见 docs/mcp-setup.md):
✅没有月度证书续签定时器,配置一次长期有效 ✅IP 变化不破坏信任:新地址在同一根 CA 下签发新叶子证书即可 ✅升级字节级兼容:旧版本的 10 年有效期根证书在升级后原样保留,不会被偷偷替换 ✅ 只有主动重置证书才会更换根 CA,此时需要给已配置客户端更新一次信任包
一句话总结:把"证书过期导致 AI 断连"这类最烦人的故障从根上消灭了。
一次请求的安全之旅
把三层机制串起来看,AI 发起一次工具调用要经历:
- CLI 子进程用导入的本地 CA + Bearer 令牌连接 HTTPS 端点,主机证书与
hostId必须匹配; - MCP 会话建立后,浏览器侧仍需在设置中显式开启 MCP——服务启动不等于授权,未选定的浏览器与文档一律拒绝;
- 画布操作全部经由已授权的文档绑定执行,虚拟文件工具永不触碰宿主机文件系统。
安全设计速查表
| 机制 | 防护目标 | 关键实现 |
|---|---|---|
| 六位访问码 | 局域网内网页入口 | scrypt + 限流 + 加固 Cookie |
| 本地 CA 证书 | MCP 通道传输加密与主机证明 | 证书生成与自检 |
| Bearer 令牌 | MCP 请求级授权 | 随机 32 字节令牌 |
| 无到期证书 | 免维护的长期信任 | RFC 5280 §4.1.2.5 |
| 显式浏览器授权 | 防未受邀设备读写画布 | MCP 设置与绑定 |
📚 更多细节可阅读 docs/mcp-setup.md 中的证书生命周期章节、docs/mcp-implementation.md 的实现说明,以及访问页面前端 public/access.html。
小结:PenEcho 用"访问码守门 + HTTPS 双因子 + 无到期证书"这套朴素而严谨的组合,让新手无需理解密码学细节,也能放心地把 AI 画布开在局域网里——这正是它安全设计最打动人的地方。
【免费下载链接】penechoThink with AI beyond the chat box. A shared canvas for handwriting, equations, diagrams, and spatial reasoning.项目地址: https://gitcode.com/gh_mirrors/pe/penecho
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考