Certificates

為什麼 X.509 證書中的 signatureAlgorithm 欄位是多餘的?

  • January 23, 2018

請參閱下面的 X.509 證書的 ASN.1 描述:

Certificate ::= SEQUENCE {
   tbsCertificate      TBSCertificate ({ x509_note_tbs_certificate }),
   signatureAlgorithm  AlgorithmIdentifier,
   signature       BIT STRING ({ x509_note_signature })
}

TBSCertificate ::= SEQUENCE {
   version           [ 0 ] Version DEFAULT,
   serialNumber        CertificateSerialNumber ({ x509_note_serial }),
   signature       AlgorithmIdentifier ({ x509_note_pkey_algo }),
   issuer          Name ({ x509_note_issuer }),
   validity        Validity,
   subject         Name ({ x509_note_subject }),
   subjectPublicKeyInfo    SubjectPublicKeyInfo,
   issuerUniqueID    [ 1 ] IMPLICIT UniqueIdentifier OPTIONAL,
   subjectUniqueID   [ 2 ] IMPLICIT UniqueIdentifier OPTIONAL,
   extensions        [ 3 ] Extensions OPTIONAL
}

Certificate.signatureAlgorithm 和 TBSCertificate.signature 有什麼區別?

它們似乎具有相同的值,並且 Certificate 中已經包含一個 TBSCertificate,因此其中一個值是多餘的。

那為什麼要包括在內?

來自RFC 5280 re TBSCertificate.signature

此欄位包含 CA 用於簽署證書的算法的算法標識符。

該欄位必須包含與序列證書中的 signatureAlgorithm 欄位相同的算法標識符(第 4.1.1.2 節)。

我認為是因為權威簽名在 TBSCertificate 的內容上。如果 CA 使用的簽名算法未包含在要簽名的證書中,那麼也許可以將 Certificate.signatureAlgorithm 欄位更改為更適合潛在對手的內容。

之前在security.SE上給出了類似的答案

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