Diffie-Hellman

使用靜態 DH 的 TLS 1.2 中的伺服器身份驗證

  • March 20, 2021

ServerKeyExchange對於(EC)DHE密碼套件,伺服器通過簽名消息(連結)證明擁有與其證書匹配的私鑰來驗證自己:

 struct {
     select (KeyExchangeAlgorithm) {
         case dh_anon:
             ServerDHParams params;
         case dhe_dss:
         case dhe_rsa:
             ServerDHParams params;
             digitally-signed struct {
                 opaque client_random[32];
                 opaque server_random[32];
                 ServerDHParams params;
             } signed_params;
         case rsa:
         case dh_dss:
         case dh_rsa:
             struct {} ;
            /* message is omitted for rsa, dh_dss, and dh_rsa */
         /* may be extended, e.g., for ECDH -- see [TLSECC] */
     };
 } ServerKeyExchange;

ClientKeyExchange對於 RSA 密碼套件,伺服器通過解密客戶端在消息(連結)中發送的預主密鑰來證明擁有與其證書匹配的私鑰來驗證自己:

struct {
   select (KeyExchangeAlgorithm) {
       case rsa:
           EncryptedPreMasterSecret;
       case dhe_dss:
       case dhe_rsa:
       case dh_dss:
       case dh_rsa:
       case dh_anon:
           ClientDiffieHellmanPublic;
   } exchange_keys;
} ClientKeyExchange;

伺服器如何驗證自己並證明擁有與靜態 DH 證書匹配的私鑰?它不會發送ServerKeyExchange,因為其證書中嵌入的公鑰已經包含相關資訊。客戶端不會使用 發送ClientKeyExchangeEncryptedPreMasterSecret因為這不是 RSA。

伺服器是否僅通過能夠獲得與客戶端相同的主密鑰來證明擁有私鑰?

是的——這與 RSA 相同,因為伺服器證明它只能通過獲取正確的主密鑰和工作密鑰來解密預主密鑰(使用私鑰),從而完成。(所有這些對於 1.1 和 1.0 以及 SSL3 都是相同的。)

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