前向保密回答的问题
设想一个攻击者今天记录下你的加密流量并把它存起来。数月之后,他取得了服务器的长期私钥,也许是通过一次入侵,或一纸法院命令。他现在能不能回过头去解密他截获的流量?
如果答案是不能,那么这条连接具备前向保密,有时也称完美前向保密。如果答案是能,那么它不具备。这一差别完全归结于密码套件中所命名的密钥交换,因此它是解码器最先报告的内容之一。
静态 RSA:方便而脆弱
在旧式的静态 密钥交换中,客户端选定将保护本次会话的秘密,用从服务器证书中取出的公钥加密,然后发送出去。只有服务器的私钥能解密它,所以会话在当下对窃听者是保密的。
致命的性质在于,会话秘密是由服务器的长期密钥所保护的。一旦那把密钥泄露,凡是用过它的每一次过去会话都能从录制中被拆开,因为加密后的秘密就在那里,在被截获的握手之内。一次密钥泄露会追溯性地攻破它曾保护过的每一段对话。以 TLS_RSA_WITH_ 开头的套件就是这样工作的,解码器会把它们标记为缺乏前向保密。
临时 Diffie-Hellman:解决之道
临时 斩断了会话秘密与任何长期密钥之间的纽带。对每一次连接,双方都生成全新的、用完即弃的 Diffie-Hellman 密钥对,交换各自的公开半边,再各自把自己的私有半边与对方的公开半边结合,从而得到同一个共享秘密。私有半边从不离开各自的机器,并在连接结束时被丢弃。
由于共享秘密从未在服务器的长期密钥之下被加密,而临时私钥也已不复存在,长期密钥日后的泄露不会透露任何关于过去会话的信息。录制之中根本无可拆解之物。
你会把它看作 ECDHE,即椭圆曲线临时 Diffie-Hellman,或较旧的有限域变体 DHE。 更快,是现代的默认; 正在被淘汰,所以即便是 TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 这样强健的 DHE- 套件,如今也带有 的不建议标记。没有结尾 E 的静态、非临时表亲 ECDH 和 DH,并不提供前向保密。
身份验证是另一项任务
一个常见的混淆,是以为移除静态 RSA 就等于移除 RSA。并非如此。密钥交换和身份验证是两项不同的任务,套件名称把它们分开列出。
在 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 中,ECDHE 负责密钥交换,RSA 负责身份验证:服务器用其 RSA 证书背后的私钥对临时握手值签名,从而证明自己是合法持有者。会话秘密来自临时 Diffie-Hellman 交换,所以前向保密得以保持,而证书依旧证明身份。关于证书结构的文章会讲述这一身份绑定如何运作。
TLS 1.3 为何把它定为强制
TLS 1.3 通过彻底移除静态 RSA 密钥传输,了结了这个问题。每一次 TLS 1.3 密钥交换都是临时的,所以前向保密不再是你必须通过选对套件来选择的东西,而是由协议保证的。RSA 和 仅作为身份验证的签名算法保留。这也是为什么一个 TLS 1.3 套件的名称根本没有密钥交换标记:已经没有一个无前向保密的选项可供命名。
现在收割,日后解密
前向保密防的是事后发生的密钥泄露,但它假定底层的 Diffie-Hellman 数学依旧困难。迫近的隐忧,是一台未来的量子计算机或许能攻破今天的椭圆曲线密钥交换,这就给录制下来的流量留下了漫长的保质期,等着一个愿意等待的攻击者。这就是现在收割、日后解密的威胁,它正推动着向混合后量子密钥交换的迁移,这种交换把一次经典交换与一次抗量子交换一并运行。前向保密依旧必要,只是不再被假定永远足够。