为了讲明白这件事情,先介绍一些基本的概念。
什么是公钥加密 (public key encryption)?
简单来讲,公钥加密是利用一对特殊的密钥 (key) 进行的信息加密手段。这对密钥其中一把称为公钥 (public key),另一把称为私钥 (private key),它们具有以下两个基本性质:
比如张三和李四约定采用公钥加密进行消息转递。张三事先生成一对密钥,私钥自己保管,公钥通过可靠渠道发给李四。李四用张三的公钥加密消息,因为这个加密后的消息只有张三手上的私钥可以解开,所以加密消息可以通过不安全的渠道发给张三,中间的人拿到加密的消息也没用。同样的道理,张三如果要给李四发送加密消息,也需要李四的公钥,过程和上面一样,对调一下收发人即可。
一般认为,以现有的技术水平,采用可靠的公钥加密算法(比如常用的 RSA)加密过的消息在私钥未泄漏的前提下是无法破解的。
什么是端到端加密?
端到端加密大概可以这么理解:一份消息在发出之前就进行加密,直到它到达最终收件人的整个过程中一直以最初的加密形式转递,中间并未有解开过。
类比的例子是古代传递密信的时候需要用火漆封口,如果密信到达最终收件人的时候火漆完好(说明中间没有人拆看过),那么这就是一种端到端加密。
一个反例是电子邮件系统。除非你使用比如 S/MIME 或者 PGP 加密,绝大部分的电子邮件都不是端到端加密的。比如我使用 Gmail 给另外一个使用 Hotmail 邮箱的人发送一封电子邮件,这个过程至少要经过三步:
以上三步中,1 和 3 通常是采用 TLS 加密传递的,但 2 往往是不加密的,并且邮件在到达 Gmail 服务器后始终是以明文的形式存储在各个中间环节的服务器上的,任何有权限查看服务器内容或者监控网络通信的人都可以看到邮件的内容。所以这不是端到端的加密。
iMessage 是如何加密消息的?
按照苹果的说法,iMessage 和 FaceTime 都采用的端到端加密:消息在发件人的 iOS 设备上用收件人的公钥加密,然后通过苹果控制的服务器中转传送给收件人,收件人用自己的私钥解开。
虽然我一贯主张在没有客户端源代码审计的情况下谈端到端加密并没有意义,但经过一些技术分析我们有理由相信苹果的确采用了端到端加密。如果我们假设苹果的具体实现是正确合理且没有明显漏洞的话,在收发件人之间的环节截获加密后的消息并试图破解是不可能的。实际上大多数攻陷加密系统的办法也不是直接去破解消息(因为通常都太难了)。
苹果到底可不可以看到 iMessage 的消息?
如果他们想,理论上的确是可以的。问题出在那对密钥上。密钥的生成和分发需要经过极其严格的措施才能保障公钥加密的安全性。举个最简单的例子,如果张三想给李四发消息,却误用了王五的公钥加密消息,王五于是可以将截获的加密消息解密,再用李四的公钥加密后传送给李四。这个过程中王五偷看了张三发给李四的消息,而后两者却并不知情。
有很多技术手段可以杜绝上述情况,但常常因为过程繁杂、概念隐晦而无法被普通人大规模使用。iMessage 的问题正是在于苹果为了降低使用门槛,完全接管了密钥的生成和分发,并且由于整个系统是苹果私有的、也未经过可信任的第三方安全审计,导致我们无法确信苹果没有在中途调换密钥,从而解密消息。
苹果发言人 Trudy Miller 说 iMessage 的系统架构限制了苹果无法解开加密的消息,苹果必须要重新构造 iMessage 系统才可能利用前述的理论上的漏洞,但苹果没有计划也没有意愿那样做:
“iMessage is not architected to allow Apple to read messages. The research discussed theoretical vulnerabilities that would require Apple to re-engineer the iMessage system to exploit it, and Apple has no plans or intentions to do so.”
我的看法很简单:苹果主观上的确没有动力去做这件事情,因为那样做对苹果只有害处没有好处。但问题在于苹果作为一家美国公司,要受到美国法律的管辖和约束。而「棱镜门」暴露出来的问题正是美国政府会通过各种合法(比如秘密法令)或者非法的手段(比如派特工打入公司内部,秘密修改系统或者植入后门)迫使美国公司解密用户的消息,苹果也不能幸免。「棱镜门」对美国信息产业的巨大危害在于它彻底破坏了这个产业赖以生存的信任关系。