安全
Vutalk 采用公开发表、经过同行评审的加密设计,而不是我们自己发明的方案。这一页说明它在实践中意味着什么,以及同样重要的——它保护不了什么。
消息加密
每一次会话先用 X3DH 完成密钥协商建立会话,再由双棘轮(Double Ratchet)为每条消息派生全新密钥。密钥只向前推进、无法回退,因此今天攻破设备的攻击者解不开昨天的消息,而会话在攻破结束后能重新恢复保密性。
群消息、附件、群组名称与成员列表采用同样的加密方式。附件在上传前就已加密,所以存放在我们存储上的是密文,旁边没有密钥。
通话
语音和视频通话均为端到端加密。当两台设备之间无法直连时,媒体会经由服务器中继,而该服务器只转发加密数据包,无法解码音频或视频。
验证你在和谁说话
加密只有在密钥确实属于你以为的那个人时才有意义。每一次会话都有一个由双方身份密钥派生出的安全号码。当面或通过另一个渠道核对它,然后把会话标记为已验证;如果对方的密钥发生变化,Vutalk 会在发出任何内容之前停下来提示你。
身份密钥只在你的设备上生成一次,之后复用而不是每次启动都重新生成——所以安全号码发生变化是一个值得认真对待的信号,而不是日常噪音。
我们启用了密钥透明性:账户到公钥的对应关系被发布在只可追加的日志中,因此试图下发替换密钥的服务器会留下永久证据。
人们如何找到彼此
只靠用户名,别无他法。Vutalk 从不上传你的通讯录,也不做任何形式的联系人匹配。用邮箱或号码搜索同样无效——邮箱地址只是你登录的方式,不是被找到的途径。
用户名以哈希形式存储用于查询,另存一份只有持有你链接的人才能打开的密文,因此拿到数据库并不能得到一份「谁在用 Vutalk」的名录。
设备上的存储
本地消息数据库使用存放在设备钥匙串中的密钥加密,并受你的设备锁保护。Vutalk 还可以设置为在打开前要求 Face ID、Touch ID 或密码。
端到端加密隐藏不了什么
我们宁愿把这件事直说,也不想让「端到端加密」这个词承担超出它能力的含义。
- 我们知道某个账户存在,以及它上次连接的大致时间,精度为天。
- 我们保存你的邮箱地址,因为重装后你需要用它重新登录。
- 为唤醒你的设备,我们向 Apple 发送一条不含内容的推送通知。因此 Apple 会知道你的设备收到了一条 Vutalk 通知。
- 任何观察你网络的人都能看到你连接了 Vutalk,尽管他们看不到你发送的内容。
- 如果你的设备处于解锁状态并落在别人手里,传输过程中的加密并不是保护你的东西。
报告漏洞
请发送邮件至 xiaosan9288@gmail.com,并附上足以复现问题的细节。对于针对你自己的账户与数据、出于善意进行的安全研究,我们不会追究法律责任。