Hash
X.509中“簽名算法”和“簽名雜湊算法”的區別
X.509 證書中的“簽名算法”和“簽名雜湊算法”有什麼區別?為什麼需要“簽名雜湊算法”?
編輯:
我正在使用 PHP 5.2 創建 X.509 證書。當我將“digest_alg”更改為“md5”時,Microsoft Cert Tool 的兩個屬性都更改為 md5。因此,如下面的一個答案所述,這似乎是 Microsoft Cert Tool 的問題/發明。
更改為 md5:
$configs = array( 'config' => 'test.cnf', 'digest_alg' => 'md5', 'x509_extensions' => 'v3_ca', 'req_extensions' => 'v3_req', 'private_key_bits' => 2048, 'private_key_type' => OPENSSL_KEYTYPE_RSA, 'encrypt_key' => );
結果:
這與 Microsoft 決定如何實施其證書檢查 GUI 的方式有關,而不是與證書的實際欄位有關。當代證書中存在的大多數簽名算法標識符都指定了公鑰算法(本例中為 RSA)和摘要算法(本例中為 SHA-1)。到目前為止,標識符“sha1RSA”很可能不准確,因此 Microsoft 已決定將其用於標準
sha1WithRSAEncryption OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 5 }
中已知的標識符。我知道的唯一半通用標準簽名算法實際上將公鑰算法標識符與證書籤名算法標識符中的摘要算法標識符分開,是PKCS#1 v2 RSASSA-PSS。
編輯:
因此,Microsoft 遵循約定和 X.509 規範,讓“簽名算法”表示簽名公鑰算法和簽名雜湊算法的組合,但首先,他們用於這些組合的標識符是非標準的,其次,在大多數情況下,添加簽名雜湊算法欄位是多餘的,通常不會反映實際的 X.509 格式。