crypto.SE和security.SE都对TLS生成会话密钥的方式有很好的问答(我在底部链接了一些内容)。尽管它们显然是不同的概念,但似乎在重叠的上下文中使用。读定义仅部分有用,因为它们没有显示出用法之间的差异。共享密钥/会话密钥

据我所知,预主密钥与私钥有关,但是与算法无关,并且主密钥(通常是?)用作会话密钥。但是我敢肯定这些定义还有更多细微差别。


相关问题:




SSL / TLS如何工作? [security.SE]

预主密钥有什么意义? [security.SE]

SSL / TLS中的预主密钥的目的是什么? [crypto.SE]

长期密钥和会话密钥之间有什么区别? [crypto.SE]


评论

+5有时候,我希望我们能为真正好的问题提供额外的代表点。谁会想到,有人在发布之前实际搜索并阅读了相关问题:)

@mikeazo谢谢*脸红。不是我四处搜寻,而是我对security.se相当活跃,这困扰了我一段时间。

你做了什么研究?您已阅读TLS规范吗?官方规格将是显而易见的检查地方,我相信所有内容都已定义在其中。在这里阅读问题并不能代替检查主要资料。

预先掌握的机密:tools.ietf.org/html/rfc5246#page-58。主要机密的计算以及与主要机密的区别:tools.ietf.org/html/rfc5246#page-64。会话密钥在记录层中定义和使用:tools.ietf.org/html/rfc5246#page-16。如果您想了解TLS的工作原理,那么阅读整个规范是一个很棒的练习!

客户端和服务器在SSL / TLS中共享四个不同秘密的目的是什么?对此有部分回答。

#1 楼


本书简化的SSLv3 / TLS注意,$ R _ {((Alice | Bob)} $是分别由Alice或Bob选择的随机随机数,而$ \ {S \} _ {Bob} $是使用Bob的公钥。

预主密钥

如您所链接的答案之一所述,“预主密钥的目的是在TLS密码之间提供更大的一致性。套件。”

在上图中,premaster密码是$ S $(在消息3中)。在这种情况下,它是随机生成的。它可能来自diffie-hellman交换,或其他某种方法,具体取决于双方同意的密码套件。取决于上图中第二个消息中选择的密码套件。

主密码

在上图中,主密码是$ K $。如侧面所示,它是预掌握密钥和前两个消息中发送的两个随机值的函数。确定这是哪里来的。它可以引用Bob 2消息2中发送的证书的私钥。也可以引用diffie-hellman密钥交换中使用的私钥。如果执行客户端身份验证,则可以引用与其证书相关联的客户端私钥。

共享密钥/会话密钥

这是最后一步中提到的该图。会话密钥称为“从K派生的密钥”。实际上,许多密钥是从K派生的。这可能是加密密钥,完整性保护密钥(例如HMAC),密码的IV等。而且,每个方向通常是不同的集合。

评论


$ \ begingroup $
+1谢谢!关于“私钥”;我的印象是,每一方都提供了一个主密码,如果服务器使用Diffie-Hellman证书,那么它将始终使用相同的主密码(以某种方式与证书相关)。从您的回答中,我知道只有一个预高级机密S,而DH证书中的内容是R_bob。那是对的吗?
$ \ endgroup $
–麦克·恩斯沃思(Mike Ounsworth)
15年7月24日在17:36



$ \ begingroup $
AFAIK,$ R_ {bob} $每次都是新的随机数。因此,证书中不会包含任何内容。尽管对于特定的密码套件,情况可能会发生很大变化。如果有您感兴趣的特定密码套件,我将作为一个单独的问题提出。我的答案最与RSA密码套件有关。
$ \ endgroup $
– Mikeikeazo
15年7月24日在17:44

$ \ begingroup $
@MikeOunsworth DH证书仅用于“固定”(又名“静态”(整数)DH),基本上没人使用。 ECC等效项非常罕见。固定的[EC] DH与客户端身份验证结合使用(也很少见)会产生固定的premaster机密,仍然可以通过在主密钥派生中包括现时来处理。短暂的DH或ECDH结合基于证书的身份验证(分别为RSA,DSS或ECDSA)是常见的; SSL / TLS拼写了这些DHE和ECDHE。
$ \ endgroup $
–dave_thompson_085
15年7月24日在23:37

#2 楼

当TLS / SSL会话启动时(在问候和密码决定之后),服务器将向客户端提供其证书。证书中的密钥可以执行不同的操作,具体取决于客户端和服务器决定的密钥协商算法。

说他们同意RSA密钥协商。这意味着证书包含服务器公共RSA密钥,并且服务器具有用于解密的私有RSA密钥,因此也包含私有密钥。客户端生成一个随机序列,称为“主密码前机密”。客户端使用证书上的公共RSA密钥对PMS进行加密。服务器解密该消息并获取PMS。然后,服务器和客户端在PMS上执行一些随机混合,可能是KDF。该主密钥用于派生用于对称加密和MAC的密钥。

另一个选择是服务器和客户端可以执行Diffie-Hellman密钥交换,其中客户端还必须生成所使用的公私DH对交换和生成(由于DH工作的方式,客户端未选择PMS)。 MS如上得出。一种更现代的方法是使用会话密钥,其中服务器证书包含它的公共密钥,以验证用于签名RSA或DHE的签名算法(RSA-SHA,ECDSA)(E表示一次性使用密钥或会话密钥)用于密钥协商的公共密钥。因此,服务器不会重用它的密钥协议公用密钥。这提供了完美的前向保密性。在其中找到服务器用于对其密钥进行签名的签名算法的PriK(永久密钥)不会使所有会话密钥容易受到攻击。此外,查找会话密钥应使您能够获取信息,以使您可以解密使用另一个会话密钥的流量(也可以将PMS视为“会话密钥”)。您可以查询PKI以了解有关证书如何使用的更多信息。我没有解释的验证工作。这是客户端确保证书有效的地方。

由于要求的高处理能力,非对称加密用于密钥协商(密钥比消息小),对称加密用于加密和认证所得密文。同样,术语“密钥协议”与密钥交换不同(更为笼统)。密钥协议意味着实际的密钥交换中不涉及受信任的第三方,在SSL / TLS的情况下确实如此

评论


$ \ begingroup $
从1999年左右开始使用SSLv3,已使用服务器证书(如果适用的客户端证书)与RSA或DSA(DSS)签署了临时DH(DHE)密钥交换,自2006年添加ECC后,临时DHDH(ECDHE)类似;这些不是“更现代的”。唯一带有证书签名的RSA临时密钥的密钥交换-甚至根本没有使用-是针对某些“ EXPORT”套件的,这些套件仅在2006年之前的版本中(并在2000年之前被广泛使用)。密钥交换的RSA签名(DHE-RSA或ECDHE-RSA)使用通过TLSv1.1的MD5 + SHA1和TLSv1.2中的协商哈希值的非标准组合。
$ \ endgroup $
–dave_thompson_085
15年7月24日在23:40



$ \ begingroup $
@ dave_thompson_085在某些情况下,服务器证书上的密钥是长期使用的RSA(非临时),客户端使用该RSA加密并向服务器发送Pre-master秘密。如果RSA密钥未由证书签名,那么它是证书上的密钥吗?还是比您提到的上皮RSA还要古老?
$ \ endgroup $
– dylan7
2015年8月1日在4:02

$ \ begingroup $
是的,协议的所有版本中都使用了“普通” RSA密钥交换,并且仍在使用,但是如今许多用户和/或管理员(Snowden和其他公共违规行为)都不喜欢它,因为它不提供“向前保密”功能,出于这个原因,有些人禁止这样做。我对该段没有任何批评。
$ \ endgroup $
–dave_thompson_085
2015年8月5日在3:33



$ \ begingroup $
关于此声明的另一个相关问题:“主密钥”用于导出对称加密和MAC的密钥。如果出于不同目的(例如加密/解密数据或mac标签)而生成了不同的会话密钥,那么客户端如何知道要使用哪个密钥?换句话说,如果可以从主密钥中生成多个会话密钥,那么双方如何在使用的“对称”密钥上对齐?
$ \ endgroup $
–stdout
19-11-16在15:09