基本原则
Droplet Drop 没有账号,也没有传输服务器。文件通过你的本地网络,从发送设备直接到达接收设备。我们从不会看到你的文件,也不知道谁发给了谁:它们不经过我们。
不使用自制密码学:Droplet Drop 基于久经考验的库——rustls(TLS 1.3)、ring、rcgen(ECDSA P-256)、SHA-256 和 BLAKE3。
加密
每个连接都使用 TLS 1.3 加密,且仅使用 TLS 1.3。认证是双向的:两台设备都要证明自己的身份。
首次打开时,每台设备都会生成自己的密钥(ECDSA P-256)。设备身份就是该密钥的指纹;应用中显示的安全码是其开头部分,便于一眼核对。
发起连接的设备会固定预期的身份,该身份来自网络发现或二维码。任何冒充它的其他设备都会被拒绝。
未经你同意,什么都不会送达
每次发送都以一个请求开始:发送者的名字、其设备代码、文件数量和大小。无人回应时,请求会在两分钟后过期。
只有你标记为“受信任”的设备才能无需确认直接发送,你也可以随时移除它们。
收到的文件绝不会被运行。如果发送内容中包含程序,请求中会加以提示。
校验到最后一个字节
发送前,每个文件都会被切分为 4 MiB 的数据块,每个数据块和整个文件都有自己的 BLAKE3 指纹。接收方在每个数据块到达时进行校验,然后重新读取整个文件。
损坏或被篡改的数据块会被重新请求。与原文件不一致的文件绝不会交付:它会留在隐藏的续传文件夹中直到正确为止,或被删除。
Group Drop
邀请包含主机在本地网络中的地址、其设备身份(已固定)、一个 128 位的会话标识,以及一个无法猜测的 256 位令牌。主机以恒定时间比较令牌。
邀请有时效(30 分钟、2 小时或 8 小时)。分享链接即授予加入权限:只与参与者分享。
邀请链接可以在 drop.dropletmesh.app 上打开:“#”之后包含邀请内容的部分,从不会发送到我们的服务器。它只保留在你的浏览器中。
逐项防护
| 威胁 | 防护 |
|---|---|
| 网络窃听 | 每个连接都使用 TLS 1.3 |
| 冒充设备 | 身份已固定;TLS 握手证明持有密钥 |
| 未经请求的发送 | 明确同意(或受信任设备);2 分钟后过期 |
| 分发中的入侵者 | 256 位令牌,恒定时间比较;邀请有时效 |
| 损坏或被篡改的文件 | 每个数据块及整个文件的 BLAKE3 指纹;校验通过前不交付任何内容 |
| 写入接收文件夹之外 | 接收时清理路径(“..”、根目录、保留名称、禁用字符) |
| 覆盖文件 | 绝不:会选择一个可用名称,“名称 (1).ext” |
| 磁盘已满 | 接受前检查可用空间 |
| 超大数据 | 消息长度有上限;单次发送最多 100,000 个文件、4 TiB |
| 反复尝试 | 一分钟内失败 20 次后忽略该地址;同时进行的连接最多 128 个 |
你的设备密钥
设备私钥绝不离开设备。它保存在应用的数据文件夹中(在 Mac 和 Linux 上仅你的账户可读)。如果该文件夹被删除——例如从手机上卸载应用——设备会获得新的身份,你的其他设备需要重新信任它。
报告漏洞
认为自己发现了漏洞?请写信至 contact@dropletmesh.app,并附上复现所需的信息。请在公开之前给我们修复的时间;我们会回复你并告知进展。