什么是私密即时通信工具?

到底什么是私密即时通信工具呢?许多人会说,如果即时通信应用对传递的消息加密,就是私密即时通信工具。在混沌通信大会上,Roland Schilling和Frieder Steinmetz发表了一个演讲,在演讲中他们用简单的语言解释了什么是私密即时通信工具,即时通信应用程序必须具备哪些特征才能被视为是私密即时通信工具。

到底什么是私密即时通信工具呢?许多人会说,如果即时通信应用对传递的消息加密,就是私密即时通信工具。但在现实中,即时通信隐私远远比这复杂得多。在混沌通信大会上,Roland Schilling和Frieder Steinmetz发表了一个演讲,在演讲中他们用简单的语言解释了什么是私密即时通信工具,即时通信应用程序必须具备哪些特征才能被视为是私密即时通信工具。

私密对话的六大要素

为了理解私密即时通信的概念,Schilling和Steinmetz建议我们试着想像一下在聚会上进行的私密对话。我们该怎么做才能使对话成为私密交流呢?我们可能会找个僻静的无人房间,只和想交流的人说话。

这是私密对话的首要条件:无论对话是面对面的还是在线进行,都必须保密。除了你和你的通信伙伴之外,其他任何人都无法获知你们的对话内容。

第二个条件是真实性:你得确定,交谈的对象确实是你打算对话的人。在现实生活中,你能认出这个人,但是使用在线即时通信时,要想确认会要复杂得多。

如果对话确实很重要(私密对话通常很重要),你会希望确保对话伙伴听清你说的每一个字,当然也希望自己听清对方说得每一个字。不仅如此,你还想确保对方获取的确实是你想要说的。换句话说,对于私密在线即时通信,您需要确信没有第三方篡改你的消息。这就是完整性的概念,也是私密即时通信的关键要素。

现在,假设有第三方走进房间,听到了你们的一部分谈话。在现实生活中,第三方只会知道他实际听到的那部分对话,而不会知道他来之前或离开后你们的谈话内容。但是,互联网却永远不会忘记这些内容,所以在线交流并不像面对面交流那样简单。这就为我们带来了支持私密即时通信的两个更重要的概念:前向保密和后向保密。

前向保密不允许第三方知道在进入房间之前你与通信伙伴讨论的任何内容,而后向保密则不允许第三方知道在其离开房间后你们谈论的内容。

假设你正在讨论非常微妙的话题。这时,如果有人跳出来指责你对该话题的想法,你可能希望予以驳斥。如果对话是私密的,那么唯一可以引述对话就是你和你的交流伙伴,所以你可以用自己的话(”我没有说过!”)来驳斥其他人的话(”你说过!)。在这种情况下,哪一方都拿不出证据来证明,这就为我们引入了重要的概念可否性。

在即时通信中实现隐私

上面就是我们必须在即时通信应用中实现的六大功能,只有实现了这六大功能,我们才能将之称为私密即时通信应用。对于真实生活中面对面的私密对话,这些功能很容易实现,但是若放到即时通信服务上,可就不是件容易的事了,因为总是会存在第三方(即服务本身)。那么,在有第三方的情况下,如何实现这六大功能呢?

通过使用加密来保持保密性。加密分为对称加密和不对称加密(又称公钥密码学)。私密即时通信工具(在本例中,Schilling和Steinmetz以Threema为例)同时使用这两种加密类型,即通过一个人的公钥和另一个人的私钥生成共享密钥;或者通过第一人的私钥和第二人的公钥来生成共享密钥。这种加密类型背后的数学算法是相同的。

因此,密钥对于这两个人是相同的,并且对于他们两人也是唯一的(没有其他密钥对会获得相同的密钥)。应用会独立生成密钥,并通过不传输该密钥来保持保密性 – 这两人在决定彼此交谈后,都有拥有相应密钥。

这种方法也用于确保完整性 - 其他方对已加密文本添加的内容会显示为不可读。在这种情况下,你的对话伙伴或者会收到你发送的内容,或者会收到错误信息(因为即时通信工具无法解密加密文本)。

为了提高保密性,你可能希望隐藏你和对话伙伴在交谈这一事实。这就需要另一层加密。你发送的消息会使用你及对话伙伴的共享密钥进行加密 - 就像把信装在信封中一样,信封上会有地址。然后再次对该信封加密 - 将其装到另一个信封中,随后发送到即时通信工具的服务器地址。在这种情况下,你使用的是基于你的密钥及服务器密钥生成的密钥。

这样,这个信封套信封的消息就被传递到即时通信工具服务器。如果有潜在的攻击者试图查看此消息,他们会知道是你发送的消息,但不会知道消息的最终目的地。即时通信工具服务器会打开最外层信封,看到目的地地址(而不是消息本身)后,会将其装在另一个信封中,发送给接收者。此时,潜在的攻击者只能看到有消息从即时通信工具服务器发送给接收者,而不会知道消息的始发地。

每时每刻都会有海量的信封在各个方向传递,要想跟踪到谁是你的消息接收人就很困难。虽然困难,但并不是不可能:如果有人称一下所有信封的重量,他们就会发现有两个信封的重量完全相同,由此把你和对话伙伴联系在一起。为了避免发生这种情况,系统会为每个信封随机添加一个重量(权重),使你发送的信封和对话伙伴收到的信封重量绝不相同。

要保持真实性会更加困难。一些即时通信应用使用电子邮件地址或电话号码作为用户ID,以此证明是用户本人。但电话号码和电子邮件地址属于保密数据,你可能并不想与应用共享。有些应用(如Threema)鼓励用户使用其他ID和交换QR码来证明自己的身份。

在本例中,可否性是通过将每条消息同时发送给对话双方来实现的。密钥对于双方是相同的,所以任一方都可发送消息。这样,即便有人设法拦截并解密传入的消息,也无法确定谁是消息的发送者。

以上讨论了保密性、真实性、完整性和可否性。那么前向保密和后向保密又是怎么回事呢?如果个人私钥和公钥始终相同,那么若共享密钥外泄,攻击者就可以解密先前的消息和未来的对话。

为了限制这种情况发生,密钥必须由服务器定期重发。如果重发了密钥,比如每月重发一次,那么攻击者就只能读取本月的对话历史记录,而且一旦发出新密钥,攻击者就无法再监视对话(实际上,重发密钥的频率远高于一月一次)。

总结

上面就是我们对私密即时通信概念的简要介绍。实际情况要复杂得多,因为现代即时通信应用必须处理各种媒体文件、群聊,有时甚至还要处理视频通话。

如果您有兴趣了解更多内容,建议您观看33C3上的以下视频。其中,Schilling和Steinmetz不仅解释了即时通信的基本思路,还探讨了如何对Threema进行逆向工程 设计,了解它是如何实现关键的隐私原则的。我们非常喜欢这个视频,希望你也会喜欢。

提示