安全与数据
受信任主机(known_hosts)
首次连接到某主机时会捕获其公钥指纹(SHA-256),并在你确认后存储。后续连接会比对该指纹 — 如果它发生变更,你会收到明确的警报。
在 设置 → 安全 → 受信任的主机 中管理该列表 — 每个条目都会显示主机、密钥算法(Ed25519、RSA、ECDSA…)和指纹,并且可以删除。
连接如何受保护
DR-Terminal 使用自己的 SSH 实现,针对主动攻击者和恶意服务器进行了加固:
- 主机密钥在握手期间、在发送任何机密内容之前就会被检查。 如果中间人出示了错误的密钥,连接会在密钥交换阶段中止 — 你的密码或私钥绝不会离开设备。
- 默认仅使用强算法。 陈旧的、易被降级的算法 — SHA-1 签名和 MAC、
ssh-rsa、1024 位 Diffie-Hellman — 均已关闭。连接使用现代密钥交换(优先使用后量子混合算法sntrup761x25519-sha512和mlkem768x25519-sha256,其次是 Curve25519、ECDH、Diffie-Hellman ≥ 2048 位)、密码算法(AES-GCM、ChaCha20-Poly1305、AES-CTR)以及主机密钥类型(Ed25519、ECDSA、RSA-SHA2)。只提供更弱选项的服务器将无法连接 — 除非你在 SSH 算法(见下文)中有意重新启用某个陈旧算法。 - 不会静默降级。 服务器使用的签名必须与协商结果一致,因此它无法在你不知情的情况下回退到更弱的签名。
- 已缓解 Terrapin(CVE-2023-48795),通过严格的密钥交换实现。
- 可抵御恶意或有缺陷的服务器。 来自网络的数据包长度、消息字段和通道窗口都经过边界检查,因此恶意服务器无法使应用崩溃或耗尽其内存 — 即使在你完成认证之前也不能。
这些保护会自动开启。你只会通过上面的受信任主机提示与它们交互。
SSH 算法(高级)
设置 → 安全 → SSH 算法 允许你调整客户端向服务器提议的内容 — 用于只支持旧密码算法的陈旧设备,或固定你信任的顺序。该页面按协商类别各有一节:
- 密钥交换、加密算法、MAC(完整性) — 开启或关闭每个算法并上下移动;这个顺序就是发送给服务器的优先顺序(双方都支持的第一个算法胜出)。
- 主机密钥 — 仅开关。
- 压缩 — 一个是/否开关(默认关闭)。是 会首先提议
[email protected],并以none作为没有 zlib 的服务器的后备;否 只提议none,因此服务器无法开启压缩。压缩在慢速链路上有帮助,但会消耗两端的 CPU。
库默认禁用的算法带有一个小小的琥珀色 legacy 标签 — 在你开启之前它们保持关闭。一个类别永远不会变空:最后一个已启用的算法无法关闭。节标题旁的 重置 会将该节恢复为库的默认值。
每个已保存的连接都可以覆盖全局选择:在连接表单中,SSH 算法 → 自定义 仅为该主机打开同一个编辑器(默认 遵循全局设置)。确认编辑器会更新表单 — 之后请 保存 连接。实际协商的结果 — 密钥交换、主机密钥、加密算法、MAC、压缩 — 显示在会话菜单的 连接信息 中。
新设置适用于之后打开的连接。到同一主机的第二个标签页会复用现有的 SSH 连接,因而也沿用其算法 — 断开并重新连接以重新协商。
后量子警告
“store now, decrypt later” 攻击者会记录今天的流量,等量子计算机能够破解经典密钥交换后再解密。DR-Terminal 优先使用后量子混合密钥交换(sntrup761x25519-sha512、mlkem768x25519-sha256 — 与 OpenSSH 附带的相同),并且像 OpenSSH 一样,当会话最终使用经典算法时发出警告:每个连接会出现一次对话框,说明密钥交换不是后量子的,服务器可能需要升级。不再显示 会永久关闭该警告;它位于 设置 → 安全 → 后量子警告(默认开启)。
导出的密钥
当你转换或导出一个私钥(SSH 密钥 → 转换)并设置口令时,加密会使用按格式选定的强密钥派生函数 — OpenSSH 用 bcrypt、PKCS#8 用 PBKDF2、PuTTY PPK v3 用 Argon2id — 并且每个 salt 和 IV 都来自密码学安全的随机数生成器。该转换器可读写 OpenSSH、PKCS#8、PKCS#1 和 PuTTY PPK(v2/v3),既能处理 PEM 也能处理二进制 DER。
密码存放在哪里
密码、私钥和口令 绝不会 被序列化进连接 JSON。它们会直接进入平台的安全存储:
- Android — EncryptedSharedPreferences,由硬件 Keystore 支撑。
- iOS — Keychain(如果你启用了,则受生物识别保护)。
- 桌面 — AES-256-GCM 加密文件,密钥由用户配置文件派生。
加密的配置备份
设置 → 配置 → 导出备份 会创建一个受密码保护的 .drterminal 文件。它包含:连接(含凭据)、分组、受信任主机、SSH 密钥、SFTP 书签、命令历史、高亮规则、命令片段、串口和 Telnet 配置文件、SSH 算法偏好、终端外观和设置,以及(在移动端)DevOps 键盘配置。导入备份 会还原同一个包 — 在多台机器之间迁移时很有用。
格式:用 AES-256-GCM 加密的 JSON。密码绝不会存储在文件中 — 它只用于派生加密密钥(PBKDF2,10 万次 SHA-256 迭代)。
导入 ~/.ssh/config
在桌面上,你可以从现有的 OpenSSH 配置批量导入主机。导入器会解析 Host、HostName、User、Port、IdentityFile 和 ProxyJump 条目,并把它们添加为已保存的连接。由 IdentityFile 引用的密钥文件会从磁盘加载到 SecureStorage。
日志级别
在 设置 → 终端 → 文件日志级别 中选择哪些内容会写入 ~/.dr-terminal/logs/(桌面)或移动端上的等价位置。默认:ERROR — 噪声最小。用于诊断时可切换到 DEBUG。