PKCS 標准
The Public-Key Cryptography Standards (PKCS)是由美國RSA數據安全公司及其合作伙伴制定的一組公鑰密碼學標准,其中包括證書申請、證書更新、證書作廢表發布、擴展證書內容以及數字簽名、數字信封的格式等方面的一系列相關協議。
公鑰加密標准(Public Key Cryptography Standards, PKCS),此一標准的設計與發布皆由RSA信息安全公司所制定。
RSA信息安全公司旗下的RSA實驗室為了發揚公開密鑰技術的使用,便發展了一系列的公開密鑰密碼編譯標准。只不過,雖然該標准具有相當大的象征性,也被信息界的產業所認同;但是,若RSA公司認為有必要,這些標准的內容仍然可能會更動。所幸,這些變動並不大;此外,這幾年RSA公司也與其他組織(比較知名的有IETF、PKIX)將標准的制定通過standards track程序來達成。
PKCS簡介
到1999年底,PKCS已經公布了以下標准:
PKCS#1:定義RSA公開密鑰算法加密和簽名機制,主要用於組織PKCS#7中所描述的數字簽名和數字信封[22]。
PKCS#3:定義Diffie-Hellman密鑰交換協議。
PKCS#5:描述一種利用從口令派生出來的安全密鑰加密字符串的方法。使用MD2或MD5 從口令中派生密鑰,並采用DES-CBC模式加密。主要用於加密從一個計算機傳送到另一個計算機的私人密鑰,不能用於加密消息。
PKCS#6:描述了公鑰證書的標准語法,主要描述X.509證書的擴展格式。
PKCS#7:定義一種通用的消息語法,包括數字簽名和加密等用於增強的加密機制,PKCS#7與PEM兼容,所以不需其他密碼操作,就可以將加密的消息轉換成PEM消息。
PKCS#8:描述私有密鑰信息格式,該信息包括公開密鑰算法的私有密鑰以及可選的屬性集等。
PKCS#9:定義一些用於PKCS#6證書擴展、PKCS#7數字簽名和PKCS#8私鑰加密信息的屬性類型。
PKCS#10:描述證書請求語法[29]。
PKCS#11:稱為Cyptoki,定義了一套獨立於技術的程序設計接口,用於智能卡和PCMCIA卡之類的加密設備。
PKCS#12:描述個人信息交換語法標准。描述了將用戶公鑰、私鑰、證書和其他相關信息打包的語法。
PKCS#13:橢圓曲線密碼體制標准。
PKCS#14:偽隨機數生成標准。
PKCS#15:密碼令牌信息格式標准。
在表格中展示如下:
PKCS標准匯總 | |||
---|---|---|---|
版本 | 名稱 | 簡介 | |
PKCS #1 | 2.1 | RSA密碼編譯標准(RSA Cryptography Standard) | 定義了RSA的數理基礎、公/私鑰格式,以及加/解密、簽/驗章的流程。1.5版本曾經遭到攻擊。 |
PKCS #2 | - | 撤銷 | 原本是用以規范RSA加密摘要的轉換方式,現已被納入PKCS#1之中。 |
PKCS #3 | 1.4 | DH密鑰協議標准(Diffie-Hellman key agreement Standard) | 規范以DH密鑰協議為基礎的密鑰協議標准。其功能,可以讓兩方通過金議協議,擬定一把會議密鑰(Session key)。 |
PKCS #4 | - | 撤銷 | 原本用以規范轉換RSA密鑰的流程。已被納入PKCS#1之中。 |
PKCS #5 | 2.0 | 密碼基植加密標准(Password-based Encryption Standard) | 參見RFC 2898與PBKDF2。 |
PKCS #6 | 1.5 | 證書擴展語法標准(Extended-Certificate Syntax Standard) | 將原本X.509的證書格式標准加以擴充。 |
PKCS #7 | 1.5 | 密碼消息語法標准(Cryptographic Message Syntax Standard) | 參見RFC 2315。規范了以公開密鑰基礎設施(PKI)所產生之簽名/密文之格式。其目的一樣是為了拓展數字證書的應用。其中,包含了S/MIME與CMS。 |
PKCS #8 | 1.2 | 私鑰消息表示標准(Private-Key Information Syntax Standard). | Apache讀取證書私鑰的標准。 |
PKCS #9 | 2.0 | 選擇屬性格式(Selected Attribute Types) | 定義PKCS#6、7、8、10的選擇屬性格式。 |
PKCS #10 | 1.7 | 證書申請標准(Certification Request Standard) | 參見RFC 2986。規范了向證書中心申請證書之CSR(certificate signing request)的格式。 |
PKCS #11 | 2.20 | 密碼設備標准接口(Cryptographic Token Interface (Cryptoki)) | 定義了密碼設備的應用程序接口(API)之規格。 |
PKCS #12 | 1.0 | 個人消息交換標准(Personal Information Exchange Syntax Standard) | 定義了包含私鑰與公鑰證書(public key certificate)的文件格式。私鑰采密碼(password)保護。常見的PFX就履行了PKCS#12。 |
PKCS #13 | – | 橢圓曲線密碼學標准(Elliptic curve cryptography Standard) | 制定中。規范以橢圓曲線密碼學為基礎所發展之密碼技術應用。橢圓曲線密碼學是新的密碼學技術,其強度與效率皆比現行以指數運算為基礎之密碼學算法來的優秀。然而,該算法的應用尚不普及。 |
PKCS #14 | – | 擬隨機數產生器標准(Pseudo-random Number Generation) | 制定中。規范擬隨機數產生器的使用與設計。 |
PKCS #15 | 1.1 | 密碼設備消息格式標准(Cryptographic Token Information Format Standard) | 定義了密碼設備內部數據的組織結構。 |
PKI標准可以分為第一代和第二代標准。
第一代PKI標准主要包括美國RSA公司的公鑰加密標准(Public Key Cryptography Standards,PKCS)系列、國際電信聯盟的ITU-T X.509、IETF組織的公鑰基礎設施X.509(Public Key Infrastructure X.509,PKIX)標准系列、無線應用協議(Wireless Application Protocol ,WAP)論壇的無線公鑰基礎設施(Wireless Public Key Infrastructure,WPKI)標准等。第一代PKI標准主要是基於抽象語法符號(Abstract Syntax Notation One,ASN.1)編碼的,實現比較困難,這也在一定程度上影響了標准的推廣。
第二代PKI標准是在2001年,由微軟、VeriSign和webMethods三家公司發布了XML密鑰管理規范(XML Key Management Specification,XKMS),被稱為第二代PKI標准。XKMS由兩部分組成:XML密鑰信息服務規范(XML Key Information Service Specification,X-KISS)和XML密鑰注冊服務規范(XML Key Registration Service Specification,X-KRSS)。X-KISS定義了包含在XML-SIG元素中的用於驗證公鑰信息合法性的信任服務規范;使用X-KISS規范,XML應用程序可通過網絡委托可信的第三方CA處理有關認證簽名、查詢、驗證、綁定公鑰信息等服務。X-KRSS則定義了一種可通過網絡接受公鑰注冊、撤銷、恢復的服務規范;XML應用程序建立的密鑰對,可通過X-KRSS規范將公鑰部分及其它有關的身份信息發給可信的第三方CA注冊。X-KISS和X-KRSS規范都按照XML Schema 結構化語言定義,使用簡單對象訪問協議(SOAP V1.1)進行通信,其服務與消息的語法定義遵循Web服務定義語言(WSDL V1.0)。目前XKMS已成為W3C的推薦標准,並已被微軟、VeriSign等公司集成於他們的產品中(微軟已在ASP.net中集成了XKMS,VeriSign已發布了基於Java的信任服務集成工具包TSIK)。
CA中心普遍采用的規范是X.509[13]系列和PKCS系列,其中主要應用到了以下規范:
1.X.209(1988)
ASN.1是描述在網絡上傳輸信息格式的標准方法。它有兩部分:第一部份(ISO 8824/ITU X.208)描述信息內的數據、數據類型及序列格式,也就是數據的語法;第二部分(ISO 8825/ITU X.209)描述如何將各部分數據組成消息,也就是數據的基本編碼規則。
ASN.1原來是作為X.409的一部分而開發的,后來才獨立地成為一個標准。這兩個協議除了在PKI體系中被應用外,還被廣泛應用於通信和計算機的其他領域。
2.X.500(1993)
X.500是一套已經被國際標准化組織(ISO)接受的目錄服務系統標准,它定義了一個機構如何在全局范圍內共享其名字和與之相關的對象。X.500是層次性的,其中的管理域(機構、分支、部門和工作組)可以提供這些域內的用戶和資源信息。在PKI體系中,X.500被用來惟一標識一個實體,該實體可以是機構、組織、個人或一台服務器。X.500被認為是實現目錄服務的最佳途徑,但X.500的實現需要較大的投資,並且比其他方式速度慢;而其優勢具有信息模型、多功能和開放性。
3.X.509(1993)
X.509是由國際電信聯盟(ITU-T)制定的數字證書標准。在X.500確保用戶名稱惟一性的基礎上,X.509為X.500用戶名稱提供了通信實體的鑒別機制,並規定了實體鑒別過程中廣泛適用的證書語法和數據接口。
X.509的最初版本公布於1988年。X.509證書由用戶公共密鑰和用戶標識符組成。此外還包括版本號、證書序列號、CA標識符、簽名算法標識、簽發者名稱、證書有效期等信息。這一標准的最新版本是X.509 v3,它定義了包含擴展信息的數字證書。該版數字證書提供了一個擴展信息字段,用來提供更多的靈活性及特殊應用環境下所需的信息傳送。
4.PKCS系列標准
PKCS是由美國RSA數據安全公司及其合作伙伴制定的一組公鑰密碼學標准,其中包括證書申請、證書更新、證書作廢表發布、擴展證書內容以及數字簽名、數字信封的格式等方面的一系列相關協議。到1999年底,PKCS已經公布了以下標准:
PKCS#1:定義RSA公開密鑰算法加密和簽名機制,主要用於組織PKCS#7中所描述的數字簽名和數字信封。
PKCS#3:定義Diffie-Hellman密鑰交換協議。
PKCS#5:描述一種利用從口令派生出來的安全密鑰加密字符串的方法。使用MD2或MD5 從口令中派生密鑰,並采用DES-CBC模式加密。主要用於加密從一個計算機傳送到另一個計算機的私人密鑰,不能用於加密消息。
PKCS#6:描述了公鑰證書的標准語法,主要描述X.509證書的擴展格式。
PKCS#7:定義一種通用的消息語法,包括數字簽名和加密等用於增強的加密機制,PKCS#7與PEM兼容,所以不需其他密碼操作,就可以將加密的消息轉換成PEM消息。
PKCS#8:描述私有密鑰信息格式,該信息包括公開密鑰算法的私有密鑰以及可選的屬性集等。
PKCS#9:定義一些用於PKCS#6證書擴展、PKCS#7數字簽名和PKCS#8私鑰加密信息的屬性類型。
PKCS#10:描述證書請求語法。
PKCS#11:稱為Cyptoki,定義了一套獨立於技術的程序設計接口,用於智能卡和PCMCIA卡之類的加密設備。
PKCS#12:描述個人信息交換語法標准。描述了將用戶公鑰、私鑰、證書和其他相關信息打包的語法。
PKCS#13:橢圓曲線密碼體制標准。
PKCS#14:偽隨機數生成標准。
PKCS#15:密碼令牌信息格式標准。
5.OCSP在線證書狀態協議
OCSP(Online Certificate Status Protocol)[14]是IETF頒布的用於檢查數字證書在某一交易時刻是否仍然有效的標准。該標准提供給PKI用戶一條方便快捷的數字證書狀態查詢通道,使PKI體系能夠更有效、更安全地在各個領域中被廣泛應用。
6.LDAP 輕量級目錄訪問協議
LDAP規范(RFC1487)簡化了笨重的X.500目錄訪問協議,並且在功能性、數據表示、編碼和傳輸方面都進行了相應的修改。1997年,LDAP第3版本成為互聯網標准。目前,LDAP v3已經在PKI體系中被廣泛應用於證書信息發布、CRL信息發布、CA政策以及與信息發布相關的各個方面。
PKI常見的證書格式和轉換
PKCS 全稱是 Public-Key Cryptography Standards ,是由 RSA 實驗室與其它安全系統開發商為促進公鑰密碼的發展而制訂的一系列標准,PKCS 目前共發布過 15 個標准。 常用的有:
PKCS#7 Cryptographic Message Syntax Standard
PKCS#10 Certification Request Standard
PKCS#12 Personal Information Exchange Syntax Standard
X.509是常見通用的證書格式。所有的證書都符合為Public Key Infrastructure (PKI) 制定的 ITU-T X509 國際標准。
PKCS#7 常用的后綴是: .P7B .P7C .SPC
PKCS#12 常用的后綴有: .P12 .PFX
X.509 DER 編碼(ASCII)的后綴是: .DER .CER .CRT
X.509 PAM 編碼(Base64)的后綴是: .PEM .CER .CRT
.cer/.crt是用於存放證書,它是2進制形式存放的,不含私鑰。
.pem跟crt/cer的區別是它以Ascii來表示。
pfx/p12用於存放個人證書/私鑰,他通常包含保護密碼,2進制方式
p10是證書請求
p7r是CA對證書請求的回復,只用於導入
p7b以樹狀展示證書鏈(certificate chain),同時也支持單個證書,不含私鑰。
一 用openssl創建CA證書的RSA密鑰(PEM格式):
openssl genrsa -des3 -out ca.key 1024
二用openssl創建CA證書(PEM格式,假如有效期為一年):
openssl req -new -x509 -days 365 -key ca.key -out ca.crt -config openssl.cnf
openssl是可以生成DER格式的CA證書的,最好用IE將PEM格式的CA證書轉換成DER格式的CA證書。
三 x509到pfx
pkcs12 -export –in keys/client1.crt -inkey keys/client1.key -out keys/client1.pfx
四 PEM格式的ca.key轉換為Microsoft可以識別的pvk格式。
pvk -in ca.key -out ca.pvk -nocrypt -topvk
五 PKCS#12 到 PEM 的轉換
openssl pkcs12 -nocerts -nodes -in cert.p12 -out private.pem
驗證 openssl pkcs12 -clcerts -nokeys -in cert.p12 -out cert.pem
六 從 PFX 格式文件中提取私鑰格式文件 (.key)
openssl pkcs12 -in mycert.pfx -nocerts -nodes -out mycert.key
七 轉換 pem 到到 spc
openssl crl2pkcs7 -nocrl -certfile venus.pem -outform DER -out venus.spc
用 -outform -inform 指定 DER 還是 PAM 格式。例如:
openssl x509 -in Cert.pem -inform PEM -out cert.der -outform DER
八 PEM 到 PKCS#12 的轉換,
openssl pkcs12 -export -in Cert.pem -out Cert.p12 -inkey key.pem
密鑰庫文件格式【Keystore】
格式 : JKS
擴展名 : .jks/.ks
描述 : 【Java Keystore】密鑰庫的Java實現版本,provider為SUN
特點 : 密鑰庫和私鑰用不同的密碼進行保護
格式 : JCEKS
擴展名 : .jce
描述 : 【JCE Keystore】密鑰庫的JCE實現版本,provider為SUN JCE
特點 : 相對於JKS安全級別更高,保護Keystore私鑰時采用TripleDES
格式 : PKCS12
擴展名 : .p12/.pfx
描述 : 【PKCS #12】個人信息交換語法標准
特點 : 1、包含私鑰、公鑰及其證書
2、密鑰庫和私鑰用相同密碼進行保護
格式 : BKS
擴展名 : .bks
描述 : Bouncycastle Keystore】密鑰庫的BC實現版本,provider為BC
特點 : 基於JCE實現
格式 : UBER
擴展名 : .ubr
描述 : 【Bouncycastle UBER Keystore】密鑰庫的BC更安全實現版本,provider為BC
證書文件格式【Certificate】
格式 : DER
擴展名 : .cer/.crt/.rsa
描述 : 【ASN .1 DER】用於存放證書
特點 : 不含私鑰、二進制
格式 : PKCS7
擴展名 : .p7b/.p7r
描述 : 【PKCS #7】加密信息語法標准
特點 : 1、p7b以樹狀展示證書鏈,不含私鑰
2、p7r為CA對證書請求簽名的回復,只能用於導入
格式 : CMS
擴展名 : .p7c/.p7m/.p7s
描述 : 【Cryptographic Message Syntax】
特點 : 1、p7c只保存證書
2、p7m:signature with enveloped data
3、p7s:時間戳簽名文件
格式 : PEM
擴展名 : .pem
描述 : 【Printable Encoded Message】
特點 : 1、該編碼格式在RFC1421中定義,其實PEM是【Privacy-Enhanced Mail】的簡寫,但他也同樣廣泛運用於密鑰管理
2、ASCII文件
3、一般基於base 64編碼
4. Apache 用到的CA證書鏈就是PEM格式,它實際上可保存普通多個X509證書(.cer), 將每個證書簡單加在一起就可以了
格式 : PKCS10
擴展名 : .p10/.csr
描述 : 【PKCS #10】公鑰加密標准【Certificate Signing Request】
特點 : 1、證書簽名請求文件
2、ASCII文件
3、CA簽名后以p7r文件回復
格式 : SPC
擴展名 : .pvk/.spc
描述 : 【Software Publishing Certificate】
特點 : 微軟公司特有的雙證書文件格式,經常用於代碼簽名,其中
1、pvk用於保存私鑰
2、spc用於保存公鑰
============== End