Termalin 的安全机制
Termalin 是一款 SSH 客户端:它保管着你最敏感的凭据。本页面——用大白话——说清楚我们的服务器存储什么、永远读不到什么,以及为什么你并不需要太信任它们。
端到端加密,具体怎么做
所有有意义的数据,在发送到任何地方之前,都会先在你的设备上加密,密钥由你的主密码派生(PBKDF2-HMAC-SHA256,600,000 次迭代 → AES-256-GCM)。主密码永远不会离开你的设备。我们读不了你的数据,也无法替你重置它——这是设计使然,不是缺陷。后备的主动权在你手里:设置一个可选的恢复代码,万一忘了密码也能重新进入;不设置的话,一旦忘记密码,数据就没了。无论哪种方式,恢复的能力始终在你手中,绝不在我们这里。
我们的服务器能看到什么
| 数据 | 服务器能读取吗? |
|---|---|
| 你的主机、SSH 密钥、密码、代码片段(同步) | 否——仅为加密数据块 |
| 终端会话录制(内容) | 否——仅为加密数据块 |
| 你的主密码 | 从不发送 |
| 账户邮箱 + 密码 | 邮箱可以;密码以 Argon2 哈希存储 |
| 录制的标题和主机标签 | 否——和录制一样,用你的主密码加密 |
| 录制元数据(时长、大小、是否有 AI 代理参与) | 是——用于列表和配额 |
| 订阅套餐、设备名称、时间戳 | 是 |
| 网页终端会话(浏览器控制台) | 实时进行时经过我们的服务器;不存储。会记录主机、端口和用户名 |
| AI 应用通过托管 MCP 端点执行的命令 | 是——命令文本在你的活动记录里;只有在你开启后才会保留其输出,并用只有你持有的密钥加密 |
| 来自 Connector 服务器的服务器指标和告警 | 是——绘制图表和发出告警所必需(参见隐私政策,英文) |
| 密钥派生盐值 | 是——盐值不是秘密;它让网页控制台能在你的浏览器中派生出你的密钥 |
更新无法伪造
自动更新用一把离线的 Ed25519 密钥签名;与之匹配的公钥内置在应用里。在安装任何东西之前,应用都会核验发布清单的签名以及安装包的 SHA-256。我们自己的服务器在这里并不是可信方:即便更新服务器被完全攻陷(或 DNS/hosts 被重定向),它最多也只能扣下更新——而无法塞进一个更新。
应用会验证服务器,而不只是验证 TLS
在把你的账户凭据发送到任何地方之前,应用会用一个随机 nonce 向服务器发起质询;服务器必须用它的身份密钥对其签名,并由内置在应用里的公钥来核验。伪造的后端——无论是通过 hosts 文件或 DNS 重定向访问的,还是一台被设置为信任额外 TLS 证书的机器——都无法产生那个签名,所以它永远看不到你的密码。
二进制文件里没有秘密
桌面应用只内置公钥。翻查应用的文件得不到任何可用的东西。所有付费功能都在服务端校验。
关于网页控制台,实话实说
网页控制台用你的主密码在浏览器中解密录制——密码永远不会离开该页面。每个网页端 E2E 产品都要如实说明的一点:页面代码是由服务器下发的,所以一台被攻陷的服务器有可能提供一个被篡改的页面。带签名更新的桌面应用,始终是信任度最高的路径;网页控制台则是为了方便。
在你的机器上
- SSH 主机密钥在首次使用时被固定(TOFU),记录在
~/.termalin/known_hosts中。 - 你的 termal.in 账户支持双重验证(TOTP,附备用码)和通行密钥——桌面应用可以通过浏览器登录,所以密码从不接触应用。
- 录制保存的是终端输出和事件标记——绝不保存原始按键。
在隐藏提示符下输入的密码(
sudo之类)从不回显, 所以永远不会进入录制;终端打印出来的任何内容都是录制的一部分。 - “记住主密码”(可选,默认关闭)由你的操作系统密钥库保护—— Windows DPAPI、macOS Keychain 或 Linux Secret Service—— 并与你的操作系统用户绑定。
基础设施
后端运行在 Cloudflare 后面的 Docker 中,使用 TLS 1.2+(Let's Encrypt 证书)。数据库只能从主机的 localhost 访问——从不暴露在公网上—— 备份也经过加密。我们尽可能少地收集数据:没有分析 SDK,没有广告追踪器, 也不出售数据。
合规与路线图
我们宁愿准确地告诉你我们现在处在什么位置,也不想暗示我们 做得比实际更多:
| 领域 | 状态 |
|---|---|
| AES-256-GCM 保险库、PBKDF2-HMAC-SHA256、Ed25519 签名的更新 | 已上线 |
| 数据最小化 + 应请求删除整个账户/数据(GDPR 立场) | 已上线 |
| 独立的第三方渗透测试 | 计划在正式发布(GA)前完成 |
| SOC 2 | 在路线图上——可来询问进展 |
报告漏洞
发邮件到 security@termal.in(另见我们的 security.txt),说明你发现了什么、如何 复现,以及你认为影响是什么。我们会在 3 个工作日内确认收到,并告诉你我们的决定 ——包括当我们判定它不构成问题时,也会说明理由。
请只针对你自己的账户测试,点到为止、证明问题即可(不要窃取数据、不要植入 持久化、不要发起拒绝服务、不要涉及第三方或其他用户的数据),并在公开披露前 给我们留出合理的时间窗口。只要在这些界限内行事,我们就不会因此追究你。
我们不支付漏洞赏金。Termalin 是一个尚未盈利的小项目,没有奖励预算; 与其让人为此空忙一个周末,我们宁愿事先说清楚。我们能提供的是:在 security.txt 致谢中按你选择的名字和链接署名、一份描述你所报告问题的书面推荐信,以及几个月的 Pro 授权。如果问题严重,我们还会告诉你修复何时上线。
致谢
感谢以负责任的方式报告问题、帮助我们让 Termalin 更安全的研究者:
- MD Rabbi Hossain — 加固了 MCP 授权流程中的 OAuth 客户端注册(2026 年 9 月)。