Diffie-Hellman

TLS 中的靜態 Diffie-Hellman

  • June 26, 2019

靜態 Diffie-Hellman(密碼套件DH在其名稱中但不要求DHEDH_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 以及實現它的組織的選擇。對於幾乎不使用的東西,有很多選擇。

引用自:https://crypto.stackexchange.com/questions/71557