PKCS #6: Extended- Certificate Syntax Standard (PKCS #6: 擴充套件證書語法標準)

鄒德強發表於2012-04-20
PKCS #6: 擴充套件證書語法標準
版本 V1.5


範圍:
這個規範描述了一個擴充套件證書的的語法。一個外部證書由一個X.509公鑰證書和一個屬性集合組成,由簽發者和X.509的公鑰證書一起簽名。因此,屬性和相關的X.509公鑰證書可以使用單獨的公鑰操作驗籤,並且如果需要,可以從中提取一個普通的X.509證書,例如為了PEM(安全增強電子郵件)。
目的是包含更多的屬性來擴充套件驗證過程,而不僅僅是驗證給定實體的公鑰。PKCS#9給出了非詳盡的列表。
對這個規範的初步應用包含在PKCS#7中,但也期望有其它的應用被開發出來。
引用:
PKCS#1
PKCS#7
PKCS#9
RFC1422 PEM相關
X.208 ASN.1相關
X.209 BER相關
X.500 目錄概述
X.501 目錄模型
X.509 目錄認證


定義
基於本文件的目的,使用如下的定義:
AlgorithmIdentifier: 演算法識別符號,以及與之相關的引數。這個型別在X.509中定義。
Attribute: 包含一個或者多個屬性型別值的型別。這個型別在X.501中定義。
ASN.1:抽象語法識別符號,在X.208中定義。
BER:基本編碼規則,在X.209中定義。
Certificate:一個用數字簽名將實體的可辨別名稱與公鑰繫結起來的型別。這個型別在X.509中定義。這個型別也包含了證書籤發者的可辨別名稱,一個發行者特定的序列號,發行者簽名演算法識別符號,和一個有效期。附錄A給出了更多的資訊。
DER:確定編碼規則,在X.509中定義。
Name:在X.509目錄中唯一的或者可辨別的物件型別。這個型別在X.501中定義。在X.509證書中,名字標識了證書發行者和被證明的公鑰實體。
PEM:網際網路安全增強電子郵件,定義在RFC 1422及相關的文件中。


符號和縮寫
這個規範沒有定義符號和縮寫。


概覽
下一章指定了擴充套件證書的語法,附錄回顧了X.509證書的意義。
這個規範匯出了一個型別:ExtendedCertificate。


擴充套件證書語法
這章給出了擴充套件證書的語法。
一個擴充套件證書由3部分組成:“擴充套件證書資訊“,簽名演算法識別符號,“擴充套件證書資訊”的數字簽名。擴充套件證書資訊由一個X.509證書(已經由發行者簽名),提供實體其它資訊的屬性的集合。對擴充套件證書籤名的發行者和對X.509證書籤名的發行者為同一個。
組成一個擴充套件證書的流程包括如下幾個步驟:
1.證書發行者將一個X.509證書和一些屬性的集合連結起來,組成ExtendedCertificateInfo值。
2.證書發行者使用私鑰對ExtendedCertificateInfo簽名。
3.ExtendedCertificateInfo,簽名演算法識別符號,和簽名整理到一起形成以下定義的ExtendedCertificate值。
這章被分為兩部分,第一部分描述了擴充套件證書資訊ExtendedCertificateInfo,第二部分描述了頂級型別ExtendedCertificate。


注意
在哪些X.509證書和擴充套件證書都支援的應用中,建議使用以下的語法:
ExtendedCertificateOrCertificate ::= CHOICE {
certificate Certificate, -- X.509
extendedCertificate [0] IMPLICIT ExtendedCertificate
}
證書編碼採用和X.509證書相同的BER編碼,並且兩種證書可以通過版本區分,因為擴充套件證書的版本為0。
擴充套件證書在X.509證書基礎上擴充套件而不是直接替代,有至少四種原因:
1.切換到X.509證書語法是非常容易的。
2.X.509證書可以匯出以相容更多的規範(比如PEM)。
3.X.509和擴充套件證書可以使用同一個公鑰驗籤,因為它們根本上就是同一個發行者簽名的。
4.有一點點的冗餘,擴充套件證書中增加的資訊包含了X.509證書中已經包含的屬性,比如發行者名字,主題。


ExtendedCertificateInfo
ExtendedCertificateInfo的ASN.1描述如下:
ExtendedCertificateInfo ::= SEQUENCE {
version Version,
certificate Certificate,
attributes Attributes 
}


Version ::= INTEGER
Attributes ::= SET OF Attribute


ExtendedCertificateInfo的屬性有如下意義:
version 版本號,為了相容未來的版本,此規範的版本為0。
certificate 證書,X.509證書。
attributes 屬性的集合,這些屬性是證書主題的附加資訊。此處可能用到的一些屬性在PKCS#9中定義。


ExtendedCertificate
ExtendedCertificate的ASN.1描述如下:
ExtendedCertificate ::= SEQUENCE {
extendedCertificateInfo ExtendedCertificateInfo,
signatureAlgorithm SignatureAlgorithmIdentifier,
signature Signature 
}

SignatureAlgorithmIdentifier ::= AlgorithmIdentifier
Signature ::= BIT STRING

ExtendedCertificate屬性有如下的意義:
extendedCertificateInfo 擴充套件證書資訊,是需要簽名的值。
signatureAlgorithm 標識了擴充套件證書資訊簽名用到的簽名演算法(以及關聯的引數)。例如PKCS#1中定義的md2WithRSAEncryption或者md5WithRSAEncryption。
signature 是證書發行者使用私鑰對擴充套件證書資訊的的簽名結果。


簽名過程包含兩個步驟:
1.extendedCertificateInfo資訊屬性的值是DER編碼為位元組串。
2.步驟1的結果使用證書發行者私鑰和特定的簽名演算法簽名,生成特定位元組串。


注意
ExtendedCertificate的標識也可以使用X.509定義的巨集SIGNED來描述:
ExtendedCertificate ::= SIGNED ExtendedCertificateInfo


附錄A. X.509公鑰證書
類似X.509的公鑰證書確定了特定公鑰系統的互信體系。通過對一個證書籤名,證書籤發機構將實體的名稱和實體的公鑰等資訊繫結到一起。通過驗證證書的簽名,信任證書頒發機構的使用者可以進而相信實體的公鑰。
因為證書是公鑰體系互操作性最重要的部分,PKCS已經通過了使用X.509證書。這顯著的提高了和其它使用X.509證書系列應用的相容性,比如PEM。
這個附錄描述了X.509證書的語法,以作為參考的目的。確切的說,它描述了RFC 1422中描述的語法的修正版本,回寫到1988的X.509標準。
一個X.509證書由3部分組成:“證書資訊”,簽名演算法識別符號,對證書資訊的簽名。證書資訊又實體的可辨認名稱,實體的公鑰,證書發行者的可辨識名稱,以及一個發行者定義的序號,一個簽名演算法識別符號,和有效期組成。
證書的構建包括如下的步驟:
1.證書發行者組建包含證書資訊的CertificateInfo值。
2.使用證書發行者的私鑰簽名CertificateInfo資訊。
3.CertificateInfo值,簽名演算法識別符號,和證書發行者的簽名整理到一起成為如下定義的Certificate值。
以下的討論分成兩個部分。第一部分描述了證書資訊CertificateInfo,第二部分描述了頂級的Certificate。


CertificateInfo
CertificateInfo的ASN.1結構如下:
CertificateInfo ::= SEQUENCE {
version [0] Version DEFAULT v1988,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
issuer Name,
validity Validity,
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo 
}
Version ::= INTEGER { v1988(0) }
CertificateSerialNumber ::= INTEGER
Validity ::= SEQUENCE {
notBefore UTCTime,
notAfter UTCTime 
}
SubjectPublicKeyInfo ::= SEQUENCE {
algorithm AlgorithmIdentifier,
subjectPublicKey BIT STRING 
}
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY ALGORITHM OPTIONAL 
}
CertificateInfo的屬性有如下意義:
1.version 版本號,預設值為0
2.serialNumber 發行者定義的證書序列號。特定證書發行者發行的每個證書,序列號都不相同。
3.signature 標明瞭發行者使用的簽名演算法。
4.issuer 表明了發行者的可分辨的名字。
5.validity 表明了證書的有效期。
6.subject 標識了證書主題的可分辨名字。
7.subjectPublicKeyInfo 包含了被認證的公鑰資訊。資訊標識標識了實體的公鑰演算法,比如:X.509中的rsa,以及PKCS#1的rsaEcryption。資訊也包含實體公鑰的位元串表示。對剛才提到的所有公鑰演算法,位元串包含了X.509/PKCS#1型別的公鑰的BER編碼。


Certificate
一個X.509證書有如下的格式:
Certificate ::= SEQUENCE {
certificateInfo CertificateInfo,
signatureAlgorithm AlgorithmIdentifier,
signature BIT STRING 
}
Certificate型別的屬性有如下含義:
1.certificateInfo 是證書資訊,它是被簽名的值。
2.signatureAlgorithm 簽名演算法標識了證書資訊簽名需要的簽名演算法(和相關的引數)。比如PKCS#1中的md2WithRSAEncryption 和 md5WithRSAEncryption。這個屬性應該和CertificateInfo中的signature相同。
3.signature 是證書發行者的私鑰對證書資訊的簽名結果。
簽名過程包含兩個步驟:
1.certificateInfo屬性的值是DER編碼的位元組串表示。
2.第一步的結果使用證書發行者的私鑰和指定的簽名演算法生成的位元串標識的簽名。


注意
Certificate的ASN.1格式也可以如下表示:
Certificate ::= SIGNED SEQUENCE {
version [0] Version DEFAULT v1988,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
issuer Name,
validity Validity,
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo 
}


版本歷史
版本1.0 - 1.3
版本1.4
版本1.5


翻譯
zoudeqiang1979@tsinghua.org.cn

相關文章