端对端加密(E2EE)-参考文章
早在上世纪,旧金山开始了一场叫“Cypherpunk(密码朋克)”的运动,由一群追求自由、崇尚代码的天才极客和密码学精英组成,包括维基解密的创始人阿桑奇、万维网的发明者Tim Berners-Lee、比特币之父中本聪都是其中成员。Cypherpunks只做一件事情:使用强加密算法来保护个人信息和隐私免受攻击。他们追求极限的隐私,在网络中几乎“隐形”。在他们不断的实践和创造中,密码学得到了快速的应用和发展,特别在通讯领域沉淀了很多优秀的技术和产品。
本姜在Cypherpunks的通讯世界里面逛了一圈后,研究了十几个加密通讯应用,总结出一些描述一个安全的隐私加密通讯应用应该考核的维度,包含两个角度:1.有多安全? 2.提供什么程度的隐私。
安全性
使用公认安全的加密通讯协议?
在即时通讯协议中进行加密,保证除了发送者和接收者之外没有任何第三方可以窃听数据,安全的实现方式只有E2EE(End-to-End Encryption,端到端加密),主要以非对称加密的方式实现无风险的数据加密传输,连传输服务器也不能知道传输的内容。
在E2EE的实现中,不同的应用有不同的方案,而安全的代码实现才是前提和保障,通常我们希望应用使用公认安全的E2EE协议而不是自创协议。经过多年的发展和验证,公认安全的E2EE通讯协议主要有:OTC,OMEMO,OpenPGP,Signal Protocol 等。
E2EE是否为默认?
默认开启E2EE加密是一个合格的加密通讯应用最起码的标准。Telegram常常因为没有默认开启E2EE而收到隐私性的诟病——当你直接使用Telegram时你的聊天数据是以明文的形式保存在服务器的。
如果E2EE不是默认的,那你必需要求你的联系人也打开E2EE通讯,而且经过检测确认双方开启后,你们的聊天才是安全的,非常不畅快。
有去中心化的服务器?
中心化的服务器对于安全稳定隐私通讯服务的来说是一个脆弱点。中心化的服务器不但存在单点故障的风险,还大大的降低了隐私性。一般中心化的服务器会储存用户的聊天数据和个人数据,这样一来,一旦服务器被和谐了,或者屈服于某些权力组织,或者被黑客攻击了,这个应用和你的数据就不安全了。
服务器是否储存聊天数据、用户信息、密钥?
最安全的做法是不储存任何的用户数据。但是为了提高易用性,很多应用都会储存用户的聊天数据,这样做对用户来说唯一的好处是可以实现多设备实时同步聊天。另外,为了能让用户即时获取联系人的最新信息,比如在线状态、实时个人资料,很多应用都会在服务器保存用户信息,这样一来,就算服务器不知道你的聊天内容,也会知道你在跟谁什么时候聊天,其实是非常不隐私的。为了增加安全性,很多应用会选择将用户数据加密保存,但是又为了用户方便好用,服务器又会代替用户持有了私钥或者密码进行解密,这是非常不安全的。
是否开源?代码是否经过审查?
是否开源是一个很重要的安全标准。一句话说,开源可以让大家查证官方所介绍的功能是否完全执行在代码里面。如果不开源,那么用户就必需相信官方的“人品”,相信官方不会作恶。官方到底靠不靠谱,见仁见智。WhatsApp是Facebook的产品,你敢不敢用?
另外还会有一些第三方安全审计公司,专门给企业应用的产品做安全性检测,然后给出权威性的审查报告。如果代码是开源而且每次更新都经过专业审查的,那可以算是很安全了。
用户是否能验证通讯安全?
客户端应该有自主检测通讯安全的能力。这里包括好几方面的安全:客户端是否为最新版(使用旧版本很可能会存在漏洞),服务器是否被黑,数据传输过程中自己是否被钓鱼,对方是否开启加密通讯等。
如果以上这几点都做好了,那么可以认为这个产品提供了非常安全的点对点加密通讯功能。
隐私性
抗审查的身份体系
在说到抗审查的时候, 我们主要是指账户的权限不因内容的审查而限制,所以抗审查的需求一般伴随着隐私的需求。抗审查和不被审查的意义不一样,前者指不可能被审查,后者指没有人主动去审查。只有去中心化的身份体系才能做到抗审查,即没有一个中心化主体能够干预你的身份信息和限制/删除你的账户。
数据定时毁灭
类似阅后即焚的设计,一个注重隐私的通讯应用应该给予用户自由设置数据定时毁灭的权力,用户应该有能力控制自己所发的内容的留存时间。
客户端数据加密储存
为了追求聊天记录的完整性,用户使用的客户端难免会需要储存聊天数据。本地加密储存和应用密码锁能有效的防止第三方访问聊天数据。
可主动删除服务器数据
相对于定时毁灭数据来说,主动删除服务器数据是后置性的保护数据隐私的操作,毕竟不储存任何数据才是最安全的。在用户觉得自己可能存在安全风险时,一键删除是最省心的操作。
支持账户删除
用户应该有权永久删除自己的用户信息和账户。
不需要绑定个人信息
特别是手机号码,很多应用的账户需要与用户的第三方信息绑定,这让用户被迫透露了不必要的个人信息。
截/录屏提醒
在聊天的时候,即使使用了E2EE加密,我们也不能阻止对方通过截屏或者录屏,这个隐私风险是极大的。应用中提供截/录屏提醒功能可以增加聊天的隐私性。当然,使用第二台设备去录屏是我们防不胜防的,一般应用会忘记考虑录屏提醒,iOS有自带的录屏功能是可以检测得到的。
支持paperkey
与私钥的保密性相当,paperkey是私钥编译过的一串随机单词,顾名思义,paperkey是用来写到纸上保存的。如同冷钱包,写到纸上不连网的密钥才是属于你自己的,非常安全。当然也比较麻烦。
掌握了这些维度,你就可以自己去考核一个加密通讯应用是否安全,也可以根据这些点去寻找适合自己的隐私需求的产品。