您是否需要特殊类型的证书才能使用 Diffie Hellman 作为 SSL 中的密钥交换协议?

信息安全 加密 tls
2021-08-13 09:48:25

在 Diffie Hellman 密钥交换技术中,双方就一个公共参数达成一致,g然后他们生成他们的私有参数ab然后他们交换g^ag^b现在他们可以计算出通用密钥了g^ab
但我的问题是他们如何就参数 g 达成一致。它在证书中指定吗?如果是,是否需要特殊类型的证书?这种类型的证书中有哪些信息?

2个回答

Ephemeral Diffie-Hellman 密钥交换不需要特殊证书,但需要服务器密钥交换消息。固定 DH 需要特殊证书。正如 TLS 规范所说:

  The server key exchange message is sent by the server only when
  the server certificate message (if sent) does not contain enough
  data to allow the client to exchange a premaster secret.  This is
  true for the following key exchange methods:

       DHE_DSS
       DHE_RSA
       DH_anon

  It is not legal to send the server key exchange message for the
  following key exchange methods:

       RSA
       DH_DSS
       DH_RSA

此消息的含义:

  This message conveys cryptographic information to allow the client
  to communicate the premaster secret: either an RSA public key with
  which to encrypt the premaster secret, or a Diffie-Hellman public
  key with which the client can complete a key exchange (with the
  result being the premaster secret).
  • 附录 A.5(关于非临时 DH 密码套件)中:

以下 CipherSuite 定义用于服务器认证(以及可选的客户端认证)Diffie-Hellman。DH 表示密码套件,其中服务器的证书包含由证书颁发机构 (CA) 签名的 Diffie-Hellman 参数。[...]

当使用 Diffie-Hellman 密钥交换时,服务器可以提供包含固定 Diffie-Hellman 参数的证书,或者使用服务器密钥交换消息发送一组使用 DSS 或 RSA 证书签名的临时 Diffie-Hellman 参数。临时参数在签名之前使用 hello.random 值进行哈希处理,以确保攻击者不会重播旧参数。无论哪种情况,客户端都可以验证证书或签名,以确保参数属于服务器。

请注意,带有 DH 参数的证书无论如何都很少见。

Stephen Henson(来自 OpenSSL)说以下(诚然很久以前)

我到处问过,但我还没有看到一个 DH 证书的例子。由此我可以得出结论,它们不是很常见。

Nelson Bolyard(来自 Mozilla NSS)最近说

[...] 我问是因为我不知道今天有任何公共 CA 颁发此类证书。我所知道的最后一个 CA 是为 Fortezza 卡颁发证书的美国国防部 CA。

我怀疑对这些证书的需求很少。这需要 CA 做更多的工作,现在使用 EDH 一样容易,并且可以使用它们的密码套件没有得到广泛支持。支持的加密套件的最新版本的Java 7名单没有列出任何DH_RSADH_DSS加密套件(仅DH_anon和EDH)。

有两种自然的方法可以做到这一点。

  1. 该规范可以识别一组预定义的组。每个端点的组参数都硬编码在两个端点使用的软件中。然后,公钥指定要与哪些组一起使用。在 Diffie-Hellman 的情况下,组参数是gp,因此公钥中的组标识符决定了g的值。由于组标识符在公钥中,因此它包含在证书中。

  2. 或者,组参数本身(gp)可以作为公钥的一部分包含在证书中。

无论哪种方式都有效。无论哪种方式,证书中的信息都允许您确定要使用gp的正确值除此之外,没有什么特别的要求。