安全与数据
受信任主机(known_hosts)
首次连接到某主机时会捕获其公钥指纹(SHA-256),并在你确认后存储。后续连接会比对该指纹 — 如果它发生变更,你会收到明确的警报。
在 设置 → 安全 → 受信任的主机 中管理该列表 — 每个条目都会显示主机、密钥算法(Ed25519、RSA、ECDSA…)和指纹,并且可以删除。
连接如何受保护
DR-Terminal 使用自己的 SSH 实现,针对主动攻击者和恶意服务器进行了加固:
- 主机密钥在握手期间、在发送任何机密内容之前就会被检查。 如果中间人出示了错误的密钥,连接会在密钥交换阶段中止 — 你的密码或私钥绝不会离开设备。
- 默认仅使用强算法。 陈旧的、易被降级的算法 — SHA-1 签名和 MAC、
ssh-rsa、1024 位 Diffie-Hellman — 均已关闭。连接使用现代密钥交换(Curve25519、ECDH、Diffie-Hellman ≥ 2048 位)、密码算法(AES-GCM、ChaCha20-Poly1305、AES-CTR)以及主机密钥类型(Ed25519、ECDSA、RSA-SHA2)。只提供更弱选项的服务器将无法连接。 - 不会静默降级。 服务器使用的签名必须与协商结果一致,因此它无法在你不知情的情况下回退到更弱的签名。
- 已缓解 Terrapin(CVE-2023-48795),通过严格的密钥交换实现。
- 可抵御恶意或有缺陷的服务器。 来自网络的数据包长度、消息字段和通道窗口都经过边界检查,因此恶意服务器无法使应用崩溃或耗尽其内存 — 即使在你完成认证之前也不能。
这些保护会自动开启。你只会通过上面的受信任主机提示与它们交互。
导出的密钥
当你转换或导出一个私钥(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 配置文件、终端外观和设置,以及(在移动端)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。