安全

哪些措施保护你的手机不受网络上的其他人、中继运营者和网页的影响,以及哪些不在保护范围内。

本页为译文。如与英文版不一致,以英文版为准。 English

Droidline 可以读取已配对手机的屏幕并进行操作。下面是围绕这一能力的保护措施,以及它们的局限。

配对决定谁能控制手机

手机只接受与它配对的电脑发来的命令,电脑也只接受与它配对的手机。配对有两种方式:

  • 二维码。 它包含电脑的公钥和一个一次性令牌。令牌 10 分钟内有效,只能用于一部手机,而且从不以明文传输:手机通过派生出正确的密钥来证明自己持有该令牌。
  • 6 位代码。 手机显示一个由双方密钥派生出的代码,你在电脑上输入它。位于中间的设备会让两边得出不同的代码。

droidline revoke <device> 会删除手机的密钥;该手机必须重新配对才能连接。

握手之后全部加密

手机与电脑之间的每一行都用 AES-256-GCM 加密。密钥来自两次 P-256 密钥交换:一次使用每个连接新生成的密钥(这样以后被盗的密钥无法解密过去的流量),一次使用长期密钥(这样双方都知道自己在和谁通信)。这在每条路由上都成立,包括同一 Wi-Fi。隧道或中继,包括 Cloudflare,只能看到设备 ID、数据大小和时间。

该设计以接近 Noise KK 的模式组合标准原语(P-256、HKDF-SHA256、AES-GCM),但它不是 Noise 的实现,也没有经过审计。协议及其测试向量是公开的。

你的代码这一侧

  • 客户端端口监听 127.0.0.1。除非你修改 client.listen,其他机器无法连接它;修改之后,每个连接都需要客户端令牌(droidline token create)。令牌以哈希形式存储。
  • HTTP 接口会拒绝来自网页的请求(Origin 头不在 client.allowed_origins 中的任何请求)、Host 不是 localhost 的请求(DNS 重绑定),以及请求体不是 JSON 的 POST 请求。你访问的网页无法操控你的手机。

电脑上的机密信息

服务器私钥、TLS 密钥、中继令牌和已保存的代理密码,在 Windows 上用 DPAPI 存储并绑定你的 Windows 账户,在 macOS 和 Linux 上存放在只有你的用户能读取的文件中。手机用来自 Android Keystore 的密钥加密保存自己的私钥。

不在保护范围内

  • 任何能使用你电脑账户的人都能操控你的手机,这一点与你运行的任何自动化工具相同。
  • 无障碍服务可以读取屏幕上的任何内容。只在你能控制的手机上安装该应用。
  • Droidline 不会解锁 PIN、图案或密码锁屏。

报告问题

请通过 GitHub 私下报告漏洞:在仓库中依次选择 Security 和 Report a vulnerability。请不要提交公开的 issue。