11.3 PKCS標準 算法
公鑰密碼標準(PKCS)最初是爲推動公鑰密碼系統的互操做性,由RSA實驗室與工業界、學術界和政府表明合做開發的。在RSA帶領下,PKCS的 研究隨着時間不斷髮展,它涉及了不斷髮展的PKI格式標準、算法和應用程序接口。PKCS標準提供了基本的數據格式定義和算法定義,它們實際是今天全部 PKI實現的基礎。
11.3.1 PKCS標準的內容
PKCS標準以下:
(1)PKCS#1:RSA加密標準。PKCS#1定義了RSA公鑰函數的基本格式標準,特別是數字簽名。它定義了數字簽名如何計算,包括待簽名數據和簽名自己的格式;它也定義了PSA公/私鑰的語法。
(2)PKCS#2:涉及了RSA的消息摘要加密,這已被併入PKCS#1中。
(3)PKCS#3:Diffie-Hellman密鑰協議標準。PKCS#3描述了一種實現Diffie- Hellman密鑰協議的方法。
(4)PKCS#4:最初是規定RSA密鑰語法的,現已經被包含進PKCS#1中。
(5)PKCS#5:基於口令的加密標準。PKCS#5描述了使用由口令生成的密鑰來加密8位位組串併產生一個加密的8位位組串的方法。PKCS#5能夠用於加密私鑰,以便於密鑰的安全傳輸(這在PKCS#8中描述)。
(6)PKCS#6:擴展證書語法標準。PKCS#6定義了提供附加實體信息的X.509證書屬性擴展的語法(當PKCS#6第一次發佈時,X.509還不支持擴展。這些擴展所以被包括在X.509中)。
(7)PKCS#7:密碼消息語法標準。PKCS#7爲使用密碼算法的數據規定了通用語法,好比數字簽名和數字信封。PKCS#7提供了許多格式選項,包括未加密或簽名的格式化消息、已封裝(加密)消息、已簽名消息和既通過簽名又通過加密的消息。
(8)PKCS#8:私鑰信息語法標準。PKCS#8定義了私鑰信息語法和加密私鑰語法,其中私鑰加密使用了PKCS#5標準。
(9)PKCS#9:可選屬性類型。PKCS#9定義了PKCS#6擴展證書、PKCS#7數字簽名消息、PKCS#8私鑰信息和PKCS#10證 書籤名請求中要用到的可選屬性類型。已定義的證書屬性包括E-mail地址、無格式姓名、內容類型、消息摘要、簽名時間、簽名副本(counter signature)、質詢口令字和擴展證書屬性。
(10)PKCS#10:證書請求語法標準。PKCS#10定義了證書請求的語法。證書請求包含了一個惟一識別名、公鑰和可選的一組屬性,它們一塊兒被請求證書的實體簽名(證書管理協議中的PKIX證書請求消息就是一個PKCS#10)。
(11)PKCS#11:密碼令牌接口標準。PKCS#11或「Cryptoki」爲擁有密碼信息(如加密密鑰和證書)和執行密碼學函數的單用戶設 備定義了一個應用程序接口(API)。智能卡就是實現Cryptoki的典型設備。注意:Cryptoki定義了密碼函數接口,但並未指明設備具體如何實 現這些函數。並且Cryptoki只說明瞭密碼接口,並未定義對設備來講可能有用的其餘接口,如訪問設備的文件系統接口。
(12)PKCS#12:我的信息交換語法標準。PKCS#12定義了我的身份信息(包括私鑰、證書、各類祕密和擴展字段)的格式。PKCS#12有助於傳輸證書及對應的私鑰,因而用戶能夠在不一樣設備間移動他們的我的身份信息。
(13)PDCS#13:橢圓曲線密碼標準。PKCS#13標準當前正在完善之中。它包括橢圓曲線參數的生成和驗證、密鑰生成和驗證、數字簽名和公鑰加密,還有密鑰協定,以及參數、密鑰和方案標識的ASN.1語法。
(14)PKCS#14:僞隨機數產生標準。PKCS#14標準當前正在完善之中。爲何隨機數生成也須要創建本身的標準呢?PKI中用到的許多基 本的密碼學函數,如密鑰生成和Diffie-Hellman共享密鑰協商,都須要使用隨機數。然而,若是「隨機數」不是隨機的,而是取自一個可預測的取值 集合,那麼密碼學函數就再也不是絕對安全了,由於它的取值被限於一個縮小了的值域中。所以,安全僞隨機數的生成對於PKI的安全極爲關鍵。
(15)PKCS#15:密碼令牌信息語法標準。PKCS#15經過定義令牌上存儲的密碼對象的通用格式來增進密碼令牌的互操做性。在實現 PKCS#15的設備上存儲的數據對於使用該設備的全部應用程序來講都是同樣的,儘管實際上在內部實現時可能所用的格式不一樣。PKCS#15的實現扮演了 翻譯家的角色,它在卡的內部格式與應用程序支持的數據格式間進行轉換。
11.3.2 PKCS主要用途
以上標準主要用於用戶實體經過RA的證書申請、用戶的證書更新過程。當證書做廢時,RA經過CA向目錄服務器中發佈證書撤銷列表CRL,用於擴展證書內容,以及數字簽名與驗簽過程和實現數字信封格式定義等一系列相關協議。編程
摘自《公鑰基礎設施PKI及其應用》第11章 安全
標紅的標準爲經常使用的。服務器
數字證書文件:函數
cer後綴的證書文件有兩種編碼-->DER二進制編碼或者BASE64編碼(也就是.pem)
p7b通常是證書鏈,裏面包括1到多個證書
pfx是指以pkcs#12格式存儲的證書和相應私鑰。
在Security編程中,有幾種典型的密碼交換信息文件格式:
DER-encoded certificate: .cer, .crt
PEM-encoded message: .pem
PKCS#12 Personal Information Exchange: .pfx, .p12
PKCS#10 Certification Request: .p10
PKCS#7 cert request response: .p7r
PKCS#7 binary message: .p7b
.cer/.crt是用於存放證書,它是2進制形式存放的,不含私鑰。
.pem跟crt/cer的區別是它以Ascii來表示。
pfx/p12用於存放我的證書/私鑰,他一般包含保護密碼,2進制方式
p10是證書請求
p7r是CA對證書請求的回覆,只用於導入
p7b以樹狀展現證書鏈(certificate chain),同時也支持單個證書,不含私鑰。編碼
X.509定義了兩種證書:公鑰證書和屬性證書
PKCS#7和PKCS#12使用的都是公鑰證書
PKCS#7的SignedData的一種退化形式能夠分發公鑰證書和CRL
一個SignedData能夠包含多張公鑰證書
PKCS#12能夠包含公鑰證書及其私鑰,也可包含整個證書鏈 加密