X.509,RSA,PKCS 普及


X.509

X.509是一種非常通用的證書格式。所有的證書都符合ITU-T X.509國際標准,因此(理論上)為一種應用創建的證書可以用於任何其他符合X.509標准的應用。

在一份證書中,必須證明公鑰及其所有者的姓名是一致的。對X.509證書來說,認證者總是CA或由CA指定的人,一份X.509證書是一些標准字段的集合,這些字段包含有關用戶或設備及其相應公鑰的信息。X.509標准定義了證書中應該包含哪些信息,並描述了這些信息是如何編碼的(即數據格式)

詳細特征

所有的X.509證書包含以下數據:

1、X.509版本號:指出該證書使用了哪種版本的X.509標准,版本號會影響證書中的一些特定信息。目前的版本是3。

2、證書持有人的公鑰:包括證書持有人的公鑰、算法(指明密鑰屬於哪種密碼系統)的標識符和其他相關的密鑰參數。

3、證書的序列號:由CA給予每一個證書分配的唯一的數字型編號,當證書被取消時,實際上是將此證書序列號放入由CA簽發的CRL(Certificate Revocation List證書作廢表,或證書黑名單表)中。這也是序列號唯一的原因。

4、主題信息:證書持有人唯一的標識符(或稱DN-distinguished name)這個名字在 Internet上應該是唯一的。DN由許多部分組成,看起來象這樣:
CN=Bob Allen, OU=Total Network Security Division
O=Network Associates, Inc.
C=US
這些信息指出該科目的通用名、組織單位、組織和國家或者證書持有人的姓名、服務處所等信息。

5、證書的有效期:證書起始日期和時間以及終止日期和時間;指明證書在這兩個時間內有效。

6認證機構:證書發布者,是簽發該證書的實體唯一的CAX.500名字。使用該證書意味着信任簽發證書的實體。(注意:在某些情況下,比如根或頂級CA證書,發布者自己簽發證書)

7發布者的數字簽名:這是使用發布者私鑰生成的簽名,以確保這個證書在發放之后沒有被撰改過。

8簽名算法標識符:用來指定CA簽署證書時所使用的簽名算法。算法標識符用來指定CA簽發證書時所使用的公開密鑰算法和HASH算法。

 

證書結構

 

X.509 v3證書數據結構如下:

 

Certificate證書

 

Version 版本

 

Serial Number序列號

 

Algorithm ID 算法標識

 

Issuer 頒發者

 

Validity 有效期

 

Not Before 有效起始日期

 

Not After 有效終止日期

 

Subject 使用者

 

Subject Public Key Info 使用者公鑰信息

 

Public Key Algorithm公鑰算法

 

Subject Public Key公鑰

 

Issuer Unique Identifier (Optional) 頒發者唯一標識

 

Subject Unique Identifier (Optional) 使用者唯一標識

 

Extensions (Optional) 擴展

 

Certificate Signature Algorithm 證書簽名算法

 

Certificate Signature 證書簽名

擴展文件

.cer, .crt - 通常被用於二進制的DER文件格式(同於.der), 不過也被用於Base64編碼的文件 (例如 .pem).
.P7B - 同於 .p7c
.P7C - PKCS#7證書格式,僅僅包含證書和CRL列表信息,沒有私鑰。
.PFX - 同於 .p12
.P12 -PKCS#12文件, 包含證書(公鑰)和私鑰(受密碼保護),已經完整的證書鏈信。
PKCS#7 是一種將數據加密和簽名(正式名稱是“enveloping”)的技術標准。 它描述數字證書的語法和其他加密消息——尤其是,數據加密和數字簽名的方法,也包含了算法。但PKCS#7不包含私鑰信息。
PKCS#12 定義了一個用於保存私鑰和對應公鑰證書的文件格式,並由對稱密鑰加密保護。PKCS#12通常采用PFX,P12作為文件擴展名。 PKCS#12文件可以存放多個證書,並由密碼保護,通常用於WINDOWS IIS,也能夠被當作Java Keysotre文件使用,用於Tomcat,Resign,Weblogic,Jboss等,不能被用於Apache.
 

RSA算法

RSA算法基於一個十分簡單的數論事實:將兩個大質數相乘十分容易,但是想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。

RSA公開密鑰密碼體制。所謂的公開密鑰密碼體制就是使用不同的加密密鑰與解密密鑰,是一種“由已知加密密鑰推導出解密密鑰在計算上是不可行的”密碼體制。
 
在公開密鑰密碼體制中,加密密鑰(即公開密鑰)PK是公開信息,而解密密鑰(即秘密密鑰)SK是需要保密的。加密算法E和解密算法D也都是公開的。雖然解密密鑰SK是由公開密鑰PK決定的,但卻不能根據PK計算出SK。
 

會話密鑰

當我們在進行通信的時候,常常需要在C/S兩端分配一個會話密鑰,然后利用對稱密碼算法對通信的數據加密,當然了,也可以使用非對稱加密算法,但是非對稱加密會使加密速度降低了一個數量級,因此並不適用。那么如何安全的在不安全的信道中分發會話密鑰呢? 
有兩種方式,一種使用共享密鑰機制,這樣的協議很多,比如D-H密鑰分配協議、kerberos認證協議等等。但是使用共享密鑰進行會話密鑰的分發很麻煩,而且還有各種漏洞。作為工程人員,我們當然不希望進行復雜的多次協商才能完成認證的工作。

那么使用公開密鑰機制就可以完成這個工作了。 
1、首先A獲取B的公鑰Eb,然后A隨機選擇一個隨機數Ra,然后將Eb(A,Ra)發送給B。 
2、B獲取到數據之后,利用自己的私鑰解密出結果為A,Ra,然后B獲取A的公鑰Ea,然后B選擇一個會話密鑰Ks和一個隨機數Rb並將數據Ea(Ra,Ks,Rb)發送給A。 
3、A在收到數據之后,使用自己私鑰后發現有Ra,這個數據是剛剛發給B的,Ra除了B不可能有任何知道,因為只有B才能解密。所以A確定他對面肯定是B,但是這時候B並不確定對面是不是A,還是H,因為H可以宣稱自己是A,所以最好的驗證方法是B確定A肯定能夠解密發送給A的數據。 
4、於是A 在上面收到數據之后,解密之后發現有Rb,和Ks,此時將數據Ks(Rb)發送給B。當然了,此時,B肯定知道它對面通信的是A了,於是這樣就完成了相互認證,並分發共享密鑰的操作。

那么為什么最后一步不是Eb(Rb),而要Ks(Rb)呢?我個人認為主要有兩點:1、Eb是公開的,前者的隨機性相當於只有Rb來保證,而后者Ks和Rb只有A才會知道,所以隨機性更大;2、還是一樣,對稱密碼算法速度會更快

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM