現有的 Diffie-Hellman 規範之間在操作上有什麼不同嗎?
現有 Diffie-Hellman 規範之間的操作是否存在任何差異,尤其是RSA PKCS#3、ANSI X9.42 和RFC 2631標準中的那些?
PKCS#3 是一個較舊的標準,它只定義了 DH 原語本身。它包含以下資訊:參數生成、Diffie Hellman 密鑰協商算法、整數/八位字節字元串轉換(如在 PKCS#1、RSA 中)以及參數的 ASN.1 結構規範。ASN.1 結構非常有限,只包含必要的 $ p $ 和 $ g $ 參數和可選
privateValueLength
參數。ANS X9.42 是一個更大的規範,其中包含大量衍生算法,包括 MQV2 和 MQV1 認證的 Diffie-Hellman 方案。關於 Diffie-Hellman 計算本身,它包含驗證參數的方法以及對方的公鑰。它包含兩個彼此略有不同的密鑰派生函式 (KDF):一個八位字節字元串連接,而另一個使用 ASN.1 編碼。兩者都使用散列從生成的秘密值中派生密鑰。最後,ASN.1 定義比 PKCS#3 廣泛得多。域參數結構有一個必需的 $ q $ 參數,這使得域參數結構與 PKCS#3 的結構不兼容。然而,用於秘密值的基本計算和整數到八位字節字元串函式與 PKCS#3 相同。ANS X9.42 還提供了計算範例。
RFC 2631 是 ANS X9.42 的嚴格子集。它只定義了 Diffie-Hellman 算法而不進行身份驗證。它將 Diffie-Hellman 限制為 X9.42 中也存在的短暫-短暫、短暫-靜態和靜態-靜態方案。它僅定義了基於 ASN.1 的具有特定散列函式的 KDF:SHA-1。這個 ASN.1 結構中的數據也是有限的,但它並沒有變成靜態的。它包含所有域參數和公鑰參數驗證算法。然而,它沒有為域參數和公鑰定義任何 ASN.1 結構。請注意,RFC 2631 可能不會使用 X9.42 中指定的相同名稱和標識符;例如,它為 X9.42 中的“dhOneFlow”方案使用“短暫靜態 Diffie-Hellman”。它還為 KDF 生成的密鑰引入了術語 KEK。
最後,NIST 特別出版物 800-58A 是基於 ANS X9.42 的文件。它顯示了基於有限域密碼學(大多數人稱之為 DH)的密鑰協議以及基於橢圓曲線密碼學的密鑰協議。它定義了 MQV 認證方案,但僅適用於 ECC。為共享密鑰值定義了一個附加測試:如果 $ Z $ 值為 1 則應返回錯誤。它還包含一個稍微不同的 KDF,其中計數器從 OtherInfo 中刪除。它還包含對 NIST 特別出版物 800-58C 的參考,以使用使用提取-然後-擴展的 KDF。該標準的許多內容不僅提供算法,還提供了有關如何正確實施該標準的指示。該文件似乎是最新的,並且提供的資訊明顯比其他文件多。
此答案基於 PKCS#3 版本 1.4、ANS X9.42–2003、1999 年 6 月的 RFC 2631 和 NIST SP 800 56A:修訂版 2,2013 年 5 月。請注意,ANS X9.42 未公開提供。