端到端加密(英语:End-to-end encryption,缩写:E2EE),是一种只有参与通讯的用户可以读取信息的通信系统。总的来说,它可以防止潜在的窃听者——包括电信供应商、互联网服务供应商甚至是该通讯系统的提供者——获取能够用以解密通讯的密钥。此类系统被设计为可以防止潜在的监视或篡改企图,因为没有密钥的第三方难以破译系统中传输或储存的数据。举例来说,使用端到端加密的通讯提供商,将无法将其客户的通讯数据提供给当局。
在一个端到端加密的系统中,用于加解密的密钥必须被、且仅被参与通讯的各方掌握。为实现这一目的,端到端加密系统可以使用事先预定好的一串字符(称为“预共享密钥”)来加密数据(如PGP),也可以使用该字符串生成一次性密码来进行加密(如DUKPT)。此外,参与通讯的各方还可以通过协商(迪菲-赫尔曼密钥交换协议)创建密钥(如OTR)。
直到2016年,典型的基于中心服务器的通信系统尚不包括端到端加密功能。此类系统至多只能保证客户端到服务端之间的通讯受到保护。这意味着通讯双方必须信任服务端的运营者,因为他可以阅读通讯的全部明文内容。相比之下,端到端加密被认为是更安全的,因为这种机制极大减少了第三方干扰或破坏通讯加密的可能性。对于使用普通即时通讯(IM)产品的用户,通常可以选择使用第三方客户端或加解密插件,以便在非E2EE协议的通讯中实现端到端加密。
一些非E2EE的通讯系统,例如拉维毕特和 Hushmail 宣称提供了端到端加密,但实际上并没有。 而另一些系统,例如 Telegram和 谷歌Allo,由于没有默认启用端到端加密而受到了批评。
一些加密的文件备份和文件共享服务提供客户端加密。但这并不能称作端到端加密,因为此类服务并不是用来在用户之间交换信息的。 但在很多场合,这两个术语经常被混用。
端到端加密能确保数据安全保密地传输于通讯的两端之间。但对于不怀好意的窃听者而言,与其尝试破解加密,不如冒充的消息接受方(例如,在密钥交换期间冒名顶替,或是设法将收件人公布的公共密钥替换成自己的)来得方便,因为此后,发信人发出的信息将以一个窃听者掌握的密钥进行加密。在获取解密的信息后,监听者还可以冒充发信人,与实际的接收者进行密钥交换、发送讯息,以避免通讯双方察觉异常。由于攻击者处在通讯双方之间,因此这种攻击方式被称为中间人攻击的。
大多数端到端加密协议都设计了某种形式的终端认证机制,专门用来防御中间人攻击,例如依靠数字证书认证机构或信任网络进行验证。其他的技术包括的针对用户公钥或预共享密钥生成密码哈希(设备指纹)。通讯各方可以通过外部(out-of-band)通信渠道来校验这一指纹,便可确认通讯的完整性和真实性(但不能保证机密性),之后再展开真实对话。如果指纹匹配的话,理论上可以确认不存在中间人攻击。
为了方便人工检查,指纹通常会显示为十六进制字符串。这些字符串通常会编排成特定格式并编组,以提高可读性。例如,128位MD5指纹会显示如下:
43:51:43:a1:b5:fc:8b:b7:0a:3a:a9:b1:0f:66:73:a8
在一些协议中,指纹会被显示成自然语言。这是通过在指纹块与文字之间创建一对一的映射来实现的,因此不会有熵损失。有些协议还能匹配地显示为用户的母语(如参照设备的语言设定)。 但是,在跨语言的环境下这种技术会带来一些问题。 为了提高本地化程度,一些协议选择将指纹显示为十进制字符串,而不是十六进制或自然语言串。 现代化的通讯应用也可以把指纹显示为二维码,供用户使用其他设备扫描读取。
端到端加密并不能避免终端本身的安全风险。每个用户的计算机等设备上仍然存在密钥被盗(以进行中间人攻击),或是是被解密的信息被读取的可能性。即使是最完美的加密通信,他的安全性仍然受制于两端“信箱”的安全性。提升端点安全性的手段主要有:将密钥的产生、储存和加解密操作独立到一个小的智能卡上,例如Google Project Vault。 然而,由于明文输入和输出仍然对于用户设备来说依旧是可见的,因此恶意软件仍然可以实时窃听用户的对话。一个更强大的方式是将所有敏感数据隔离到一台由网闸完全限制的计算机上。一些专家已经建议将PGP用于此目的:
如果我真的要把自己的性命托付给一个软件的话,我不会选那些华而不实的东西——我选GnuPG,而且我大概会把它运行在一个与世隔绝的电脑上,再把电脑锁进地下室。
然而,正如布鲁斯·施奈尔所指出的,美国和以色列开发的“震网”病毒成功地通过离线渠道进入并瘫痪了伊朗在纳坦兹建设的核设施。 为了避免恶意软件导致的密钥泄漏、一种方法是将可信计算基分散在两个单向连接的计算机上,以避免恶意软件感染及其导致的敏感数据泄漏。
一些公司还可能还会自觉不自觉地在他们的软件中引入后门,导致密钥协商机制被破坏,或是加密被绕过。在2013年,爱德华·斯诺登披露的信息显示,Skype有一个后门允许微软将其用户的信息泄漏给美国国家安全局,尽管在公开渠道Skype宣称其使用了端到端加密。