PKCS 標準

PKCS 標準

The Public-Key Cryptography Standards (PKCS)是由美國RSA數據安全公司及其合做夥伴制定的一組公鑰密碼學標準,其中包括證書申請、證書更新、證書做廢表發佈、擴展證書內容以及數字簽名、數字信封的格式等方面的一系列相關協議。node

公鑰加密標準(Public Key Cryptography Standards, PKCS),此一標準的設計與發佈皆由RSA信息安全公司所制定。
RSA信息安全公司旗下的RSA實驗室爲了發揚公開密鑰技術的使用,便發展了一系列的公開密鑰密碼編譯標準。只不過,雖然該標準具備至關大的象徵性,也被信息界的產業所認同;可是,若RSA公司認爲有必要,這些標準的內容仍然可能會更動。所幸,這些變更並不大;此外,這幾年RSA公司也與其餘組織(比較知名的有IETF、PKIX)將標準的制定經過standards track程序來達成。web

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/MIMECMS
PKCS #8 1.2 私鑰消息表示標準(Private-Key Information Syntax Standard). Apache讀取證書私鑰的標準。
PKCS #9 2.0 選擇屬性格式(Selected Attribute Types) 定義PKCS#六、七、八、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.50九、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系列,其中主要應用到了如下規範:less

1.X.209(1988) dom

ASN.1是描述在網絡上傳輸信息格式的標準方法。它有兩部分:第一部份(ISO 8824/ITU X.208)描述信息內的數據、數據類型及序列格式,也就是數據的語法;第二部分(ISO 8825/ITU X.209)描述如何將各部分數據組成消息,也就是數據的基本編碼規則。 ide

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】我的信息交換語法標準
 特色     :  一、包含私鑰、公鑰及其證書
               二、密鑰庫和私鑰用相同密碼進行保護
 
 格式     :  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】加密信息語法標準

特色          : 一、p7b以樹狀展現證書鏈,不含私鑰
                  二、p7r爲CA對證書請求籤名的回覆,只能用於導入

格式          :  CMS 
擴展名       :  .p7c/.p7m/.p7s 
描述          : 【Cryptographic Message Syntax】 
特色          : 一、p7c只保存證書
                  二、p7m:signature with enveloped data
                  三、p7s:時間戳簽名文件
 
格式          :  PEM 
擴展名       : .pem 
描述          : 【Printable Encoded Message】 
特色          : 一、該編碼格式在RFC1421中定義,其實PEM是【Privacy-Enhanced Mail】的簡寫,但他也一樣普遍運用於密鑰管理
                  二、ASCII文件
                  三、通常基於base 64編碼
                  4. Apache 用到的CA證書鏈就是PEM格式,它實際上可保存普通多個X509證書(.cer),  將每一個證書簡單加在一塊兒就能夠了

格式         :  PKCS10 
擴展名      : .p10/.csr 
描述         : 【PKCS #10】公鑰加密標準【Certificate Signing Request】
特色         :  一、證書籤名請求文件
                  二、ASCII文件
                  三、CA簽名後以p7r文件回覆

格式         :  SPC 
擴展名      : .pvk/.spc 
描述         : 【Software Publishing Certificate】 
特色         :  微軟公司特有的雙證書文件格式,常常用於代碼簽名,其中
                  一、pvk用於保存私鑰
                  二、spc用於保存公鑰

 

============== End

相關文章
相關標籤/搜索