端到端加密(英语:End-to-end encryption,缩写:E2EE),是一种只有参与通讯的用户可以读取资讯的通信系统。它可以防止潜在的窃听者——包括电信供应商、互联网服务供应商以及该通讯系统的提供者——获取双方通信的明文。[1]此类系统被设计为可以防止潜在的监视或篡改企图。举例来说,使用端到端加密的通讯提供商,无法解密用户的消息,更无法将其客户的通讯消息提供给当局[2]

密钥交换

在一个端到端加密的系统中,用于加解密的密钥必须被、且仅被参与通讯的各方掌握。为实现这一目的,端到端加密系统可以使用事先预定好的一串字符(称为“预共享密钥英语pre-shared key”)来加密数据(如PGP),也可以使用该字符串生成一次性密码来进行加密(如每一次交易流程使用唯一密钥英语Derived unique key per transaction)。此外,参与通讯的各方还可以通过协商(迪菲-赫尔曼密钥交换协议)创建密钥(如OTR)。[3]

现代的用法

直到2016年,典型的基于中心伺服器的通信系统尚不包括端到端加密功能。此类系统只能保证客户端服务端之间的通讯受到保护。这意味着通讯双方必须信任服务端的运营者,因为他可以阅读通讯的全部明文内容。例如微信,用户到微信的伺服器的连接使用 MMTLS 加密,但仅仅加密于用户和伺服器之间,消息在伺服器上传递时伺服器会解密消息到原始文本[4]

相比之下,端到端加密被认为是更安全的。密钥是为最终用户分发的,比如如果在微信实现端到端加密,通信中的任意一方首先以另一最终用户的公钥加密文本,然后再以 MMTLS 的公钥加密,有两次加密,微信的伺服器仅能解密第一重,只可以看到密文,而明文仅仅出现于通信两端用户的装置上[4][5]

对于使用普通即时通讯(IM)产品的用户,通常可以选择使用第三方客户端或加解密插件,以便在非E2EE协议的通讯中实现端到端加密。[6]

一些非E2EE的通讯系统,例如拉维毕特和 Hushmail 宣称提供了端到端加密,但实际上并没有。[7] 而另一些系统,例如Telegram谷歌Allo,由于没有默认启用端到端加密而受到了批评。[8][9]

挑战

中间人攻击

端到端加密能确保数据安全保密地传输于通讯的两端之间。但对于不怀好意的窃听者而言,与其尝试破解加密,不如冒充的消息接受方(例如,在密钥交换期间冒名顶替,或是设法将收件人公布的公共密钥替换成自己的)来得方便,因为此后,发信人发出的资讯将以一个窃听者掌握的密钥进行加密。在获取解密的资讯后,监听者还可以冒充发信人,与实际的接收者进行密钥交换、发送讯息,以避免通讯双方察觉异常。由于攻击者处在通讯双方之间,因此这种攻击方式被称为中间人攻击[10]

身份验证

大多数端到端加密协议都设计了某种形式的终端认证机制,专门用来防御中间人攻击,例如依靠数码证书认证机构信任网络进行验证。[11]其他的技术包括的针对用户公钥或预共享密钥生成密码哈希(装置指纹)。通讯各方可以通过外部(out-of-band)通信渠道来校验这一指纹,便可确认通讯的完整性和真实性(但不能保证机密性),之后再展开真实对话。如果指纹匹配的话,理论上可以确认不存在中间人攻击。

为了方便人工检查,指纹通常会显示为十六进制字符串。这些字符串通常会编排成特定格式并编组,以提高可读性。例如,128位MD5指纹会显示如下:

43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8

在一些协议中,指纹会被显示成自然语言[12]这是通过在指纹块与文字之间建立一对一的映射来实现的,因此不会有损失。有些协议还能匹配地显示为用户的母语(如参照装置的语言设定)。 但是,在跨语言的环境下这种技术会带来一些问题。 为了提高本地化程度,一些协议选择将指纹显示为十进制字符串,而不是十六进制或自然语言串。[13] 现代化的通讯应用也可以把指纹显示为二维码,供用户使用其他装置扫描读取。[14]

终端安全

端到端加密并不能避免终端本身的安全风险。每个用户的电脑等装置上仍然存在密钥被盗(以进行中间人攻击),或是是被解密的资讯被读取的可能性。即使是最完美的加密通信,他的安全性仍然受制于两端“信箱”的安全性。提升端点安全性的手段主要有:将密钥的产生、储存和加解密操作独立到一个小的智慧卡上,例如Google Project Vault[15] 然而,由于明文输入和输出仍然对于用户装置来说依旧是可见的,因此恶意软件仍然可以实时窃听用户的对话。一个更强大的方式是将所有敏感数据隔离到一台由网闸完全限制的电脑上。[16]一些专家已经建议将PGP用于此目的:

如果我真的要把自己的性命托付给一个软件的话,我不会选那些华而不实的东西——我选GnuPG,而且我大概会把它运行在一个与世隔绝的电脑上,再把电脑锁进地下室。

然而,正如布鲁斯·施奈尔所指出的,美国和以色列开发的“震网”病毒成功地通过离线渠道进入并瘫痪了伊朗在纳坦兹建设的核设施。[17] 为了避免恶意软件导致的密钥泄漏、一种方法是将可信计算基分散在两个单向连接的电脑上,以避免恶意软件感染及其导致的敏感数据泄漏。[18]

后门程序

一些公司还可能还会自觉不自觉地在他们的软件中引入后门,导致密钥协商机制被破坏,或是加密被绕过。在2013年,爱德华·斯诺登披露的资讯显示,Skype有一个后门允许微软将其用户的资讯泄漏给美国国家安全局,尽管在公开渠道Skype宣称其使用了端到端加密。[19][20]

参见

参考文献

延伸阅读

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.