端到端加密
概要
端到端加密(End-to-End Encryption,E2EE),是在发送方的终端加密数据、只能在接收方的终端解密的加密方式。通信路径上的服务器和服务运营方只是中转加密后的数据,在设计上无法解密正文。这是在即时通讯应用领域逐渐普及的方式,但各个服务在什么范围内默认采用 E2EE,会随提供方的规格变更而变化。
和普通加密的区别
通过 HTTPS(TLS)进行的通信加密,加密的是客户端和服务器之间的通信路径。但是,数据在服务器上是以解密后的状态处理的,所以服务器的管理员和入侵服务器的攻击者能读取数据。
在 E2EE 中,服务器只是原样保存 / 转发加密后的数据。解密所需的私钥被设计为留在接收方的终端内,所以即使服务器被攻破,正文的机密性也能得到保护。不过,这是以密钥不离开终端为前提的设计上的性质,如果把密钥交给了备份途径,或者终端本身被攻破,前提就不成立了。在服务器一侧发生安全事故时,这一区别会造成很大的差异。
密钥交换的机制
E2EE 的技术核心,在于和通信对象安全地共享加密密钥的方法。E2EE 多采用基于 Diffie-Hellman 密钥交换的方式。每个用户生成一对公钥和私钥,交换公钥。双方用对方的公钥和自己的私钥推导出同一个共享密钥,用它来加密消息。
在 Signal 协议中,为了进一步实现前向保密(Forward Secrecy),每条消息都使用不同的一次性密钥。设计上,即使某条消息的密钥泄露,也不能用它来解密其他消息。
加密在匿名提问服务中的定位
在匿名提问服务中,对提问内容本身采用 E2EE 的情况很少。因为提问是以箱主在公开页面上回答 / 展示为前提的,而且服务器一侧需要进行内容过滤。过滤需要服务器能读取明文,这在结构上和 E2EE 无法兼容。
不过,提问者的 IP 地址等个人信息会加密保存。这种情况下用的不是 E2EE,而是服务器一侧的对称密钥加密(AES-256)。通过严格限制对解密密钥的访问,确保运营上的安全性。E2EE 并不是万能的,根据服务的需求区分使用不同的加密方式才是重要的。