在他们的论文Authentication and authenticated key exchange中,Diffie、van Oorschot 和 Wiener 建议将 DH 参数插入到 Alice 的证书中。因此,攻击者无法在不注意的情况下更改 DH 参数。
现在我的问题是:如何将 DH 参数存储在 X.509 证书中?我应该将它们添加为扩展名吗?
在他们的论文Authentication and authenticated key exchange中,Diffie、van Oorschot 和 Wiener 建议将 DH 参数插入到 Alice 的证书中。因此,攻击者无法在不注意的情况下更改 DH 参数。
现在我的问题是:如何将 DH 参数存储在 X.509 证书中?我应该将它们添加为扩展名吗?
通常的做法是让 Alice签署要使用的 DH 参数集。这要求 Alice 的密钥和证书适合签名。在两个广泛部署的协议中:
在SSL/TLS中,当 Alice(服务器)想要使用 Diffie-Hellman 进行密钥交换时,它会选择其中一种DHE
密码套件。DH 参数和DH 公钥(服务器的一半 DH)被编码为ServerKeyExchange
消息,服务器使用其私钥对其进行签名。
在S/MIME中,当 Alice 签署电子邮件时,她可以在签名对象中(在签名的封面下)包含一个SMIMECapabilities
属性,该属性可以包含 DH 参数和要使用的公钥,如果收件人希望用加密的电子邮件。
也可以直接拥有包含 DH 公钥(和参数)的证书,但这种情况很少发生,因为此类证书不能用于签名,只能用于密钥交换。
DH参数本身(不是公钥)也可能是“众所周知的”,因此与软件一起分发。这是 DH 的椭圆曲线变体通常会发生的情况(构建自己的曲线是可能的,但相对昂贵,并且大多数软件仅支持15 条 NIST 曲线的子集)。
自定义扩展意味着只有您的软件才能处理它们,这通常是限制性的,因此不鼓励这样做。此外,在证书中嵌入数据意味着数据(无论它是什么)是由CA选择的,并且与证书本身具有相同的生命周期,这可能足够也可能不足够(这值得考虑)。