用桌上的两部手机,讲清楚端到端加密
“端到端加密”这几个字印在太多产品上,以至于大家都快视而不见了。下面用你桌上的两部手机,讲讲它在 iTell 里的含义。
两“端”
在 iTell 里,“两端”就是你的安卓手机和 iPhone,别无其他:没有服务器、没有云、没有中转。加密在一部手机上完成,解密在另一部上完成。中间的一切,包括你周围的空气,看到的都只是一堆乱码。
第 1 步:当面认识
配对时,安卓手机显示一个二维码,里面有手机的公钥和一个五分钟内有效的一次性令牌。iPhone 扫码后,两部手机当着你的面交换长期密钥。
为什么这很重要?因为加密最难的部分是确认你在和*谁*通信。而要从房间另一头伪造你眼前屏幕上的二维码,非常困难。
第 2 步:每次连接一个新秘密
两部手机每次连接,都会各自生成新的临时密钥,再与长期密钥结合(数学上叫 P-256 曲线上的椭圆曲线 Diffie-Hellman,之后再用 HKDF-SHA256 派生密钥)。
结果是一个只有这两部手机知道、从不发送到任何地方的会话密钥。即使某天长期密钥泄露,过去的会话依然锁着,因为它们的临时密钥早已消失。
第 3 步:上锁的数据包
每条消息、每段语音、每个联系人在离开手机前都用 AES-256-GCM 封好。每个包都带计数器,另一部手机能发现任何被篡改、丢失或重放的情况。
那我们能看到什么?
我们的服务器负责你的账号和许可证:邮箱、注册时填写的号码、哪两部手机在用许可证,以及你的订单。仅此而已。
你的通话、短信、通讯录和通话记录永远不会到我们这里,因为它们根本不经过我们。我们读不到、不会在泄露中丢失,也交不出去——因为我们手里压根没有。
留在家里的密钥
你的账号密钥在 iPhone 的安全隔区(Secure Enclave)和安卓手机的硬件密钥库中生成,无法被复制出手机,App 不行,我们也不行。
完整说明见安全页面。