每种密钥交换方法需要哪些密钥用法?

信息安全 tls 证书 x.509
2021-08-25 01:29:50

我只关心 RSA 密钥,所以交换方法是 RSA(生成密钥、加密并发送)和 [EC]DHE_RSA(生成临时 [EC]DH 密钥、签名并使用它用于关键协议)。

RSA中的实际操作是“密钥加密”,并且[EC]DHE_RSA是数字签名,但它们都是密钥协议的形式。那么,每种方法的密钥使用扩展都需要“密钥加密”、“数字签名”和“密钥协议”中的哪一个呢?我无法在任何地方找到这个指定的,它可能因实现而异,所以答案可能是每个实现的表。

1个回答

密钥用法扩展在X.509的第 4.2.1.3 节中进行了描述,并带有以下可能的标志:

  KeyUsage ::= BIT STRING {
       digitalSignature        (0),
       nonRepudiation          (1), -- recent editions of X.509 have
                            -- renamed this bit to contentCommitment
       keyEncipherment         (2),
       dataEncipherment        (3),
       keyAgreement            (4),
       keyCertSign             (5),
       cRLSign                 (6),
       encipherOnly            (7),
       decipherOnly            (8) }

SSL/TLS中,当服务器证书包含 RSA 密钥时,则:

  • 使用 DHE 或 ECDHE 密码套件,在这种情况下,RSA 密钥用于签名(参见 RFC 5246 的第 7.4.3 节:“服务器密钥交换”消息);这将练习digitalSignature密钥的使用;

  • 或使用“普通 RSA”,客户端使用服务器的公钥加密随机值(48 字节的预主密钥)(参见 RFC 5246 的第 7.4.7.1 节);这在keyEncipherment密钥使用标志的定义中是正确的。

dataEncipherment不适用,因为加密的不是直接有意义的数据,而是一个主要随机生成并用于派生对称密钥的值。keyAgreement也不适用,因为它适用于不是非对称加密情况的密钥协商算法(例如 Diffie-Hellman)。keyAgreement使用标志将出现在包含 DH 密钥而不是 RSA 密钥的证书中不可否认性未使用,因为作为 SSL/TLS 密钥交换的一部分签名的任何内容都不能用作第三方的证明(SSL/TLS 隧道中没有任何内容可供客户端记录,然后在进行验证时用来说服法官起诉服务器本身;在隧道内交换的数据未经服务器签名)。

综上所述:的DigitalSignature为(EC)DHE密码套件,keyEncipherment为纯RSA密码套件。但是,即使未设置digitalSignature,某些实现也将接受keyAgreement代替keyEnciphermentnonRepudiation有些人会完全忽略 Key Usage 扩展(即使标记为关键)。为了获得最大的互操作性,请在 Key Usage 扩展中指定所有四个标志。