TLS 中的靜態 Diffie-Hellman
靜態 Diffie-Hellman(密碼套件
DH
在其名稱中但不要求DHE
或DH_anon
- 要求伺服器擁有其中包含 DH 公鑰的證書。當使用靜態 DH 密鑰交換時,伺服器提供包含由證書頒發機構 (CA) 簽名的固定 Diffie-Hellman 參數的證書 - (在這種情況下不使用 ServerKeyExchange 消息)。
靜態 DH 密碼套件的範例:
TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA TLS_DH_DSS_WITH_AES_128_CBC_SHA TLS_DH_RSA_WITH_AES_128_CBC_SHA TLS_DH_DSS_WITH_AES_256_CBC_SHA256 TLS_DH_RSA_WITH_AES_256_CBC_SHA256
從Diffie-Hellman 密鑰交換 中,Alice 和 Bob 公開同意使用模 p = 23 和底 g = 5(這是模 23 的本原根),其中 p 是素數,g 是模 p 的本原根。我的問題是。
p
證書中是否提供了固定的 Diffie-Hellman 參數g
?
這已在 RFC 3279 中(重新)定義:“Internet X.509 公鑰基礎結構證書和證書撤銷列表 (CRL) 配置文件的算法和標識符”。對於 DH第 2.3.3 節:“Diffie-Hellman 密鑰交換密鑰”適用:
這是 ASN.1 模組(它是從 X9.42 複製的,所以這至少是一個副本):
DomainParameters ::= SEQUENCE {
p INTEGER, -- odd prime, p=jq +1 g INTEGER, -- generator, g q INTEGER, -- factor of p-1 j INTEGER OPTIONAL, -- subgroup factor validationParms ValidationParms OPTIONAL }
ValidationParms ::= SEQUENCE {
seed BIT STRING, pgenCounter INTEGER }
所以至少它 $ p $ , $ g $ 和 $ q $ , 但輔因子 $ q $ 通常設置為 1。該集合已為 OID 1.2.840.10046.2.1(“dhpublicnumber”)定義。
但是,當我使用
openssl
命令行為自己嘗試時,我只有兩個參數, $ p $ 和 $ g $ . 原來openssl
是使用 PKCS#3 代替:DHParameter ::= SEQUENCE {
prime INTEGER, -- p base INTEGER, -- g privateValueLength INTEGER OPTIONAL }
已為 OID 1.2.840.113549.1.3.1(“dhKeyAgreement”)定義。
是的, $ p $ 和 $ g $ 肯定存在,其中包含哪些參數集取決於定義公鑰的密鑰類型的 OID 以及實現它的組織的選擇。對於幾乎不使用的東西,有很多選擇。