非公开信息第1部分:PGP的问题“一条狗吃了我的作业”成为一个相当可信的借口,当你炫耀地购买20只凶猛的狗。
这是一个由4部分组成的系列文章,介绍了离线消息传递(OTR),这是一种加密消息传递协议,即使用户遭到黑客攻击,也能保护其通信。
假设你想在公园里与朋友秘密交谈。如果你保护了附近的灌木丛,那么你可以确信没有人能偷听到你。除非你被秘密录制或拍摄,否则你同样可以确信,没有人能够对你的谈话进行永久的、可验证的记录。这意味着你和你的朋友可以私下私下交换意见。当地公园——以及整个物质世界——都有相当强大和直观的隐私设置。
然而,在网络世界中,这些设置变得更加复杂。互联网窃听者不能躲在灌木丛中,但他们可以入侵你的电脑,或者在你的流量通过网络时拦截它。除了对方的话之外,大多数真实世界的对话都没有记录,但电子信息会产生一种书面记录,它既有用又能证明有罪。肉质和虚拟领域之间的这些差异不一定增加或减少网络隐私,但它们确实改变了安全和隐私敏感的人需要考虑的威胁和向量。
例如,在现实世界中,通信安全的短暂失误通常会产生有限的后果。它可能会让窥探者无意中听到一次谈话,或者让不满的同盟者在没有证据的情况下松散地复述过去讨论的细节。然而,在网络世界中,短暂的失误可能是灾难性的,其后果可能比仅仅披露机密信息还要糟糕。
假设,正如经常发生的那样,攻击者窃取了一堆电子消息以及解密它们所需的密钥。攻击者将能够打开并读取以前的机密消息。更糟糕的是,他们还可以利用这些信息的加密协议向全世界证明被盗信息是真实的,从而防止受害者声称它们是应该被忽略的赝品。除此之外,攻击者甚至可以使用泄露的密钥解密多年的历史消息,这些消息也使用同一密钥加密。
幸运的是,我们可以缓解这些问题。被黑客攻击不一定会泄露你所有的历史信息,也不一定会无意中提供证据证明被盗信息是真实的。密码学不仅仅是加密和解密消息,细节也很重要。例如:
非记录消息传递(OTR)是一种加密协议,旨在复制随意的面对面对话的隐私属性。与大多数加密协议一样,OTR的主要目标是防止攻击者读取其消息。但除此之外,它还保证,如果有人以某种方式获得了OTR消息的访问权限,那么他们将无法证明它是真实的,他们肯定无法解密和读取大量历史消息。任何一个在高级密码学领域有几十年经验的傻瓜都可以设计出一种通信协议,在一切顺利的情况下是安全的。OTR关注的是事情出错时会发生什么。
OTR使用标准的、现成的密码和算法来完成所有这些,它(相对)简单的天才在于如何以新颖的模式排列旧工具。为了理解OTR的创新,我们不需要仔细阅读数页的数学证明。相反,我们必须精确地考虑系统级的方式,将熟悉的原语链接在一起。OTR启发了安全消息应用程序Signal使用的信号协议的第一个版本,学习OTR的工作原理也将激发你自己的密码想象力。
这篇长篇博客文章/短篇书基于Borisov、Goldberg和Brewer 2004,该论文首次介绍了OTR。它假设的密码学知识非常少。在公共密钥、私钥和加密签名等概念方面有经验不会有什么坏处,但如果没有,请不要担心,我们将介绍您需要了解的内容。虽然鲍里索夫、戈德伯格和布鲁尔在一本学术期刊上只有7页,但我们有尽可能多的空间来报道背景、澄清细节,并思考OTR与2020年美国总统选举的交叉方式。
爱丽丝和鲍勃想在网上聊天。然而,他们的隐私受到邪恶夏娃的威胁,夏娃想知道他们在说什么,并操纵他们信息的内容。爱丽丝和鲍勃想阻止她,安全地互相交谈。要做到这一点,他们需要一个加密协议。
Alice和Bob在协议中需要的两个最基本的属性是机密性和真实性。保密意味着爱丽丝和鲍勃的信息是保密的,而伊芙无法阅读。真实性意味着Alice和Bob可以确信他们在和正确的人交谈,Eve不能伪造信息。
然而,这些并不是他们想要的唯一属性。假设伊芙侵入爱丽丝和鲍勃的电脑,偷走了他们的加密密钥。即使在这种灾难场景中,Alice和Bob也希望确保Eve不能使用他们的密钥读取她截获的任何过去的加密邮件。这种特性称为前向保密。他们还想阻止伊芙证明她以某种方式窃取的任何信息都是真实的。如果伊芙向媒体泄露他们的信息是不好的,但如果他们可以可信地否认这些信息是真实的,那就不那么糟糕了。这种特性称为可否认性。
最初的OTR论文的标题是“非记录通信,或者,为什么不使用PGP”。PGP是一种应用广泛且简单的密码协议,它提供了良好的保密性和真实性,但不具有完美的正向保密性或可否认性。OTR旨在解决这些缺点。
由于OTR最初是对PGP的挑战,我们将通过分析PGP的优势和劣势来开始对OTR的研究。然后,通过对PGP的深入了解,我们将了解OTR如何缓解PGP的问题。
PGP协议既可以用于加密消息(保密),也可以用于签名(证明是谁写的)。简言之,当爱丽丝想给鲍勃发信息时,她首先用明文写。她对它进行加密和签名(一秒钟内会有更多),并将密文和签名发送给鲍勃。当鲍勃收到爱丽丝的信息时,他解密信息,验证签名,然后阅读。
如果Eve在给Bob的路上截获了Alice的消息,那么她将无法阅读它,而且由于签名,她将无法在Bob没有注意到的情况下操纵它。这意味着Alice和Bob可以在不安全的网络上交换安全消息。
PGP的核心使用非对称密码,这是一种加密算法,使用一个密钥进行加密,使用另一个密钥进行解密。在一个人可以接收PGP消息之前,他们必须首先生成一对数学上链接的密钥,称为密钥对。其中一个密钥是他们的私钥,他们必须不惜一切代价保密和安全。另一个是他们的公钥,他们可以安全地发布并提供给任何想要它的人,甚至是他们的敌人。
可靠地分发公钥可能会非常困难,关于如何分发、信任和不信任公钥,有大量的文献。我已经在其他地方写过这些机制,但这里我们假设Alice和Bob能够安全地检索和信任彼此的公钥,而不会出现问题。
非对称加密的关键特性是,使用个人公钥加密的数据只能使用其私钥解密,反之亦然。
为了了解这一点为何如此有用,假设Alice想使用非对称密码向Bob发送一条秘密消息。对她来说,最简单的方法是使用Bob的公钥直接加密她的消息(尽管PGP做了一些不同的事情,我们很快就会看到)。为此,Alice检索Bob的公钥并用它加密她的消息。她将生成的密文发送给Bob,Bob使用他的私钥解密并读取它。
由于该消息只能使用鲍勃的私钥解密,只有鲍勃知道,爱丽丝和鲍勃可以确信,即使伊芙截获了他们的消息,也无法读取他们的消息。
非对称加密的一大特点是,它不需要Alice和Bob提前就共享密钥达成一致。他们所要做的就是分发他们的公钥。他们不在乎伊芙是否发现了他们(只要她没有发现他们的私钥),事实上他们完全期待她发现。
与非对称加密相反的是对称加密。在对称加密中,相同的密钥用于加密和解密。
为了使用对称加密交换消息,Alice和Bob必须首先就他们将使用的对称密钥达成一致。这很棘手,因为他们不能简单地让一个人生成密钥并将其发送给另一个人。Eve可能会截取密钥,然后用它解密随后的消息。正如我们将看到的,Alice和Bob确实有很多方法可以在Eve无法发现的情况下就共享对称密钥达成一致,但这样做确实需要小心。
尽管如此,这两个算法家族本质上都不比另一个更“安全”,不知道相关密钥的攻击者将无法读取使用这两种算法进行了可靠加密的消息。
事实上,PGP同时使用非对称和对称加密。这是因为非对称加密速度慢,尤其是对于长输入。使用非对称密码对整个长消息进行加密将耗费不可接受的时间。相比之下,对称密码要灵活得多。因此,Alice和Bob更愿意尽可能多地使用对称密码而不是非对称密码进行加密和解密。但是,他们怎么能在Eve看不到这个密钥的情况下,就一个共享密钥与对称密码一起使用达成一致呢?
PGP通过巧妙的技巧实现了两全其美。在PGP中,Alice不会使用非对称密码加密她的整个消息。相反,她使用对称密码对其进行加密,并生成一个称为会话密钥的随机对称密钥。
为了让Bob解密她的消息,Alice需要向他发送会话密钥。她还需要确保Eve看不懂钥匙。为了实现这一点,她使用Bob的公钥加密会话密钥。现在,如果没有Bob的私钥,Eve就无法恢复会话密钥,这一切都很好,只有Bob知道。由于Eve无法恢复会话密钥,她也无法解密Alice的实际消息,即使她截获了Alice和Bob交换的每个字节的流量。因此,Alice可以自信地向Bob发送对称加密的消息和不对称加密的会话密钥。
为了阅读爱丽丝的信息,鲍勃颠倒了爱丽丝的过程。他使用私钥解密对称会话密钥,然后使用会话密钥解密实际消息。通过PGP,Alice和Bob以对称加密的速度获得了非对称加密的便利。
然而,尽管鲍勃是唯一能读爱丽丝留言的人,但目前他还没有证据证明这条留言真的是爱丽丝写的。据他所知,它可能是由伊芙假装成爱丽丝编写和加密的,或者伊芙可能截获并操纵了爱丽丝的真实信息。为了向鲍勃证明是她写的消息,爱丽丝在发送之前使用PGP加密签名。
加密签名是附加在邮件上的一组数据,允许收件人向自己证明是谁写的邮件。这也让他们确信信息没有被篡改。签名可以用几种不同的方式生成,包括Alice和Bob刚刚用来加密消息的同一种非对称加密。
在使用非对称加密技术对消息进行加密和解密时,Alice和Bob利用了一个事实,即使用公钥加密的消息只能使用相应的私钥进行解密。为了给消息签名,他们利用了一个等价但相反的事实,即使用私钥加密的消息只能使用相应的公钥解密。
为了生成一个简单的签名,Alice可以获取她的加密消息,并使用她的私钥再次加密。此操作的结果是消息的签名。她可以将此签名附加到加密邮件上,并将其和邮件发送给Bob。
这个签名很有用,因为Bob可以使用Alice的公钥对其进行解密,并验证结果是否等于Alice的加密消息。这向Bob证明签名是使用Alice的私钥生成的,因此消息是由Alice签名和编写的。他还知道消息在传输过程中没有被篡改,因为如果被篡改,那么解密签名的结果将不再等同于加密消息。为了在不被发现的情况下弄乱消息,Eve也需要更新签名。然而,由于她不知道Alice的私钥,她无法为她的变异消息生成有效的签名。
实际上,爱丽丝并没有直接在加密信息上签名。这是因为,正如我们所知,非对称加密速度很慢。除此之外,对整个消息进行签名将产生与消息长度相同的签名,这将需要不必要的带宽来发送。此外,短消息会产生短签名,攻击者即使不知道Alice的密钥,也很容易伪造短签名。
因此,Alice首先通过一个哈希函数传递消息,这个算法可以为给定的输入生成看似随机但一致且固定长度的输出。然后,她用私钥对哈希函数的输出进行签名。
当Bob收到Alice的消息和签名时,他也会使用哈希函数来验证签名。他使用Alice的公钥解密她的签名,但他没有直接将结果与她的消息进行比较,而是首先对她的消息进行散列,并将输出与解密的签名进行比较。如果他们匹配,那么Bob可以确信消息是真实的。
加密和签名是PGP为Alice和Bob提供保密性和真实性的方式。我们已经看到了Eve无法解密Alice的消息,因为她不知道Bob的私钥,因此无法解密对称会话密钥。她不能伪造Alice给Bob的假消息,因为她不知道Alice的私钥,因此无法生成有效的签名。如果一切都很顺利,PGP就能完美运行。
然而,在现实世界中,我们也必须为一切都不完美的时候做计划。这就是PGP下降的地方,也是OTR致力于改进的地方。PGP在很大程度上依赖于私钥保持私密。如果用户的私钥被盗(例如,如果他们的计算机遭到黑客攻击,他们的所有文件都被盗),那么之前由它支撑的安全属性就会被破坏。假设Eve窃取了Bob的私钥副本,并在Alice发送给Bob的途中截获了它的消息。她将能够解密Alice使用Bob的公钥加密的会话密钥,然后使用它们解密Alice的消息。如果她偷了爱丽丝的私钥副本,那么她可以用它来签署伊芙自己写的假消息,使这些消息看起来像是爱丽丝写的。
所有的加密在某种程度上都是基于密钥保密的假设,因此如果这个假设被打破,我们应该预计任何协议都会受到严重破坏。但PGP的后果比泄露机密信息更糟糕。我们已经知道,如果Eve窃取了一个私钥,那么她可以使用它来解密她截获的任何未来PGP消息,这些消息使用相应的公钥进行了加密。但假设伊芙已经听了爱丽丝和鲍勃几个月或几年,耐心地存储他们所有的加密流量。以前她没有办法读取任何这些流量,但通过访问Bob的私钥,她现在可以解密他们所有的历史会话密钥,并使用它们来解密他们所有以前保密的旧消息。
但情况变得更糟。Alice对她的所有PGP消息进行加密签名,以便Bob确信这些消息是真实的。然而,虽然生成签名需要Alice的私钥,但验证签名只需要她的公钥,而公钥通常是免费提供的。这意味着Eve可以像Bob一样使用Alice的签名来验证她从Bob那里窃取的消息的真实性。如果Eve能够访问Alice和Bob的签名信息,她还可以访问他们通信的加密可验证副本。这可以防止爱丽丝和鲍勃可信地否认被盗的信息是真实的。在接下来的几节中,我们将介绍一些真实世界的例子,说明这样的加密签名如何会给黑客受害者带来严重问题。
PGP确实提供了保密性和真实性。但它很脆弱,而且对私钥泄露也不可靠。理想情况下,我们希望加密协议能更好地减轻黑客攻击的后果。我们特别想要两处额外的房产。首先,我们想要deniability,即用户可以可信地否认他们发送过被黑客攻击的消息。第二,我们需要前向保密,即如果攻击者泄露了用户的私钥,那么他们仍然无法读取使用该密钥对加密的过往流量。
在本系列的第2部分中,我们将详细研究这两个属性,并了解它们为何如此可取。然后在第3部分和第4部分中,我们将了解非公开消息是如何工作的,以及它是如何提供这些功能的。