1. 程式人生 > >數字證書, 數字簽名, SSL(TLS) , SASL

數字證書, 數字簽名, SSL(TLS) , SASL

密碼學

1.

加密方法可以分為兩大類。一類是單鑰加密(private key cryptography),還有一類叫做雙鑰加密(public key cryptography)。前者的加密和解密過程都用同一套密碼,後者的加密和解密過程用的是兩套密碼。

歷史上,人類傳統的加密方法都是前一種,比如二戰期間德軍用的Enigma電報密碼。莫爾斯電碼也可以看作是一種私鑰加密方法。

2.

在單鑰加密的情況下,金鑰只有一把,所以金鑰的儲存變得很重要。一旦金鑰洩漏,密碼也就被破解。

3.

在雙鑰加密的情況下,金鑰有兩把,一把是公開的公鑰,還有一把是不公開的私鑰。

雙鑰加密的原理如下:

a) 公鑰和私鑰是一一對應的關係,有一把公鑰就必然有一把與之對應的、獨一無二的私鑰,反之亦成立。

b) 所有的(公鑰, 私鑰)對都是不同的。

c) 用公鑰可以解開私鑰加密的資訊,反之亦成立。

d) 同時生成公鑰和私鑰應該相對比較容易,但是從公鑰推算出私鑰,應該是很困難或者是不可能的。

4.

目前,通用的單鑰加密演算法為DES(Data Encryption Standard),通用的雙鑰加密演算法為RSA( Rivest-Shamir-Adleman),都產生於上個世紀70年代。

5.

在雙鑰體系中,公鑰用來加密資訊,私鑰用來數字簽名。

6.

因為任何人都可以生成自己的(公鑰,私鑰)對,所以為了防止有人散佈偽造的公鑰騙取信任,就需要一個可靠的第三方機構來生成經過認證的(公鑰,私鑰)對。目前,世界上最主要的數字服務認證商是位於美國加州的Verisign公司,它的主要業務就是分發RSA數字證書。

數字證書

數字證書是一種權威性的電子文件。它提供了一種在Internet上驗證您身份的方式,其作用類似於司機的駕駛執照或日常生活中的身份證。它是由一個由權威機構—-CA證書授權(Certificate Authority)中心發行的,人們可以在網際網路交往中用它來識別對方的身份。當然在數字證書認證的過程中,證書認證中心(CA)作為權威的、公正的、 可信賴的第三方,其作用是至關重要的。

CA認證中心是負責 簽發, 管理, 認證 數字證書的機構,是基於國際網際網路平臺建立的一個公正,權威,可信賴的第三方組織機構。

全球有很多個CA認證中心, 根CA認證中心代表權威, 它可以分派數字證書(包括下級CA數字證書 , 使用者數字證書).

數字證書的組成

 數字證書由CA派發, 包含F證書內容(明文寫明證書的一些資訊,包括派發單位,證書所有人等),  A加密演算法 , F'數字簽名(派發該證書的CA的數字簽名) , 所有者的公鑰

 這裡要說一下數字簽名的產生過程:

  例如這裡由派發證書的CA生成的數字簽名, 首先, 對證書內容(F)進行hash演算法生成摘要, 使用CA自己的私鑰進行RSA加密(或者其他一種非對稱加密演算法A) , 就生成出了數字簽名(F').

數字證書的驗證原理

  數字證書通過F , A , F' 三項來驗證證書的真實性和有效性.

  首先我們要知道下面幾個特點:

  1.數字證書機制預設, 所有者的私鑰是安全的 

  2.根CA的公鑰預設認為是合法的, 且是為大多數瀏覽器所知的, 甚至內嵌的. 例如firefox的證書管理器中就內嵌了已知的根CA的公鑰.

  驗證數字證書(包含驗證'證書'和'持有人'的真實有效性)的過程: (*******)

   1. 使用派發證書的CA的公鑰(可以向CA請求)來對F'解密得到h1 (hash值)

   2. 對證書內容F進行hash演算法得到h2

   3. 如果h1 == h2 , 那麼證書是真實有效的.

   4. 當證書被證明是真實有效的, 那麼我們就可以認為數字證書中包含的公鑰, 是證書所有人(申請該證書的使用者或者機構)的真實公鑰.

       (從這一點我們可以知道, 其實數字證書, 就是為了保證公鑰的正確性而產生的)

   5. 用此公鑰加密一段資訊傳送給證書的持有者,如果持有者能傳送回(可以是被私鑰加密,也可以是明文,沒有關係)被加密的這段資訊的話就證明該持有者擁有該證書對應的私鑰,也就是說,該持有者就是該證書的所有者。

數字證書組成資訊

1.Certificate(證書):

(1).Common Name(證書所有人姓名,簡稱CN,其實就是證書的名字,如第一幅圖看到的:ABA.ECOMRoot….)

(2).Version(版本,現在一般是V3了)

(3).Issuer(發證機關)

(4).Validity(有效日期)

(5).Subject(證書資訊,你會發現它和Issuer裡面的內容是一樣的)

(6).Subject’s Public Key Info(證書所有人公鑰,剛才所說的公鑰就是這個!)

(7).Extension(擴充套件資訊)

(8).Certificate Signature Algorithm(公鑰加密演算法)、

以上這幾項就是上面所說的證書內容(F)。

2.Certificate Signature Algorithm:

這是描述證書的加密演算法,就是上所說的加密演算法(A),看它的Fireld Value,一般會寫:PKCS #1 SHA-1 With RSA Encryption

3.Certificate Signature Value:

這記錄的是證書被加密後的結果,相當於上面說講的F’。

SSL

SSL概述:

SSL協議位於TCP/IP協議與各種應用層協議之間,為資料通訊提供安全支援。SSL協議可分為兩層:

SSL記錄協議(SSL Record Protocol)它建立在可靠的傳輸協議(如TCP)之上,為高層協議提供資料封裝、壓縮、加密等基本功能的支援。

SSL握手協議(SSL Handshake Protocol)它建立在SSL記錄協議之上,用於在實際的資料傳輸開始前,通訊雙方進行身份認證、協商加密演算法、交換加密金鑰等。

SSL協議提供的服務主要有哪些

1)認證使用者和伺服器,確保資料傳送到正確的客戶機和伺服器

2)加密資料以防止資料中途被竊取

3)維護資料的完整性,確保資料在傳輸過程中不被改變。

SSL協議的工作流程

伺服器認證階段:

1)客戶端向伺服器傳送一個開始資訊“Hello”以便開始一個新的會話連線;

2)伺服器根據客戶的資訊確定是否需要生成新的主金鑰,如需要則伺服器在響應客戶的“Hello”資訊時將包含生成主金鑰所需的資訊;

3)客戶根據收到的伺服器響應資訊,產生一個主金鑰,並用伺服器的公開金鑰加密後傳給伺服器;

4)伺服器恢復該主金鑰,並返回給客戶一個用主金鑰認證的資訊,以此讓客戶認證伺服器。

使用者認證階段

在此之前,伺服器已經通過了客戶認證,這一階段主要完成對客戶的認證。經認證的伺服器傳送一個提問給客戶,客戶則返回(數字)簽名後的提問和其公開金鑰,從而向伺服器提供認證。

握手過程

為了便於更好的認識和理解SSL 協議,這裡著重介紹SSL 協議的握手協議。SSL 協議既用到了公鑰加密技術又用到了對稱加密技術,對稱加密技術雖然比公鑰加密技術的速度快,可是公鑰加密技術提供了更好的身份認證技術。SSL 的握手協議非常有效的讓客戶和伺服器之間完成相互之間的身份認證,其主要過程如下:

①客戶端的瀏覽器向伺服器傳送客戶端SSL 協議的版本號,加密演算法的種類,產生的隨機數,以及其他伺服器和客戶端之間通訊所需要的各種資訊。

②伺服器向客戶端傳送SSL 協議的版本號,加密演算法的種類,隨機數以及其他相關資訊,同時伺服器還將向客戶端傳送自己的證書。

③客戶利用伺服器傳過來的資訊驗證伺服器的合法性,伺服器的合法性包括:證書是否過期,發行伺服器證書的CA 是否可靠,發行者證書的公鑰能否正確解開伺服器證書的“發行者的數字簽名”,伺服器證書上的域名是否和伺服器的實際域名相匹配。如果合法性驗證沒有通過,通訊將斷開;如果合法性驗證通過,將繼續進行第四步。

④使用者端隨機產生一個用於後面通訊的“對稱密碼”,然後用伺服器的公鑰(伺服器的公鑰從步驟②中的伺服器的證書中獲得)對其加密,然後將加密後的“預主密碼”傳給伺服器。

⑤如果伺服器要求客戶的身份認證(在握手過程中為可選),使用者可以建立一個隨機數然後對其進行資料簽名,將這個含有簽名的隨機數和客戶自己的證書以及加密過的“預主密碼”一起傳給伺服器。

⑥如果伺服器要求客戶的身份認證,伺服器必須檢驗客戶證書和簽名隨機數的合法性,具體的合法性驗證過程包括:客戶的證書使用日期是否有效,為客戶提供證書的CA 是否可靠,發行CA 的公鑰能否正確解開客戶證書的發行CA 的數字簽名,檢查客戶的證書是否在證書廢止列表(CRL)中。檢驗如果沒有通過,通訊立刻中斷;如果驗證通過,伺服器將用自己的私鑰解開加密的“預主密碼”,然後執行一系列步驟來產生主通訊密碼(客戶端也將通過同樣的方法產生相同的主通訊密碼)。

⑦伺服器和客戶端用相同的主密碼即“通話密碼”,一個對稱金鑰用於SSL 協議的安全資料通訊的加解密通訊。同時在SSL 通訊過程中還要完成資料通訊的完整性,防止資料通訊中的任何變化。

⑧客戶端向伺服器端發出資訊,指明後面的資料通訊將使用的步驟⑦中的主密碼為對稱金鑰,同時通知伺服器客戶端的握手過程結束。

⑨伺服器向客戶端發出資訊,指明後面的資料通訊將使用的步驟⑦中的主密碼為對稱金鑰,同時通知客戶端伺服器端的握手過程結束。

⑩SSL 的握手部分結束,SSL 安全通道的資料通訊開始,客戶和伺服器開始使用相同的對稱金鑰進行資料通訊,同時進行通訊完整性的檢驗。

通過第二節的數字證書說明, 相信大家都可以大致知道數字證書的作用(保證公鑰確實屬於證書所有人)以及驗證的過程.

那麼下面就可以來看SSL如何結合數字證書進行工作:

為何引入SSL

   我們知道, 傳統的加密技術有2個型別, 一個是對稱加密(例如DES) , 另一個是非對稱加密(例如RSA). 

其中非對稱加密中有私鑰和公鑰的概念, 十分適合驗證特定物件的真實性和唯一性. 但非對稱加密演算法比較複雜, 速度緩慢 , 也很消耗資源, 因此就不適合大資料量的加密.

而對稱加密由於兩端同用一組密碼,加密和解密演算法比較簡單, 適合大資料量加密.

  SSL全稱是 Secure Sockets Layer,它是一種間於傳輸層(比如TCP/IP)和應用層(比如HTTP)的協議. 它通過"握手協議"和"傳輸協議"來解決傳輸安全的問題.

握手協議是基於非對稱加密的,而傳輸協議是基於對稱加密的。根據不同的應用,SSL對證書的要求也是不一樣的,可以是單方認證(比如HTTP, FTP),也可以是雙方認證(比如網上銀行)。通常情況下,伺服器端的證書是一定要具備的,客戶端的證書不是必須的。

SSL的握手和傳輸 

下面兩張圖片顯示了SSL握手的過程。

                      圖3.2.1  SSL握手,單方伺服器認證                    



                         圖3.2.2  SSL握手,雙方認證





   傳輸過程: 在通訊雙方協商出一個對稱金鑰以後,他們用這個金鑰來加密傳輸的資料。同時為每個訊息生成時間戳,用此金鑰為訊息和相應的時間戳生成訊息認證碼(MAC)。也就是說,每次傳送的內容包括             Encrypt(message) + MAC(message + timestamp)



這麼做有幾個好處:         1.    防止訊息的篡改          所謂訊息篡改就是有第三者插在通訊雙方之間,篡改往來的訊息。由於訊息是加密的,第三者不能獲得訊息的內容,但是他可以閉著眼睛瞎改。如果沒有MAC的話,接受者就無法判斷此  訊息是否被篡改過。         2.    防止訊息重放          訊息的重放是隻第三者記錄下通訊雙方的每一次傳送的訊息,雖然他不能獲得訊息的內容。但是它可以通過重新發送客戶端或者服務端的資訊來把自己裝成是客戶端或者服務端。如果在MAC裡面加上了時間戳,訊息接收方驗證時間戳就可以阻止訊息的重放攻擊。  SSL的基本思想是用非對稱加密來建立連結(握手階段),用對稱加密來傳輸資料(傳輸階段)。這樣既保證了金鑰分發的安全,也保證了通訊的效率。

SASL - 簡單認證和安全層

 SASL是一種用來擴充C/S模式驗證能力的機制認證機制,  全稱Simple Authentication and Security Layer.

 當你設定sasl時,你必須決定兩件事;一是用於交換“標識信 息”(或稱身份證書)的驗證機制;一是決定標識資訊儲存方法的驗證架構。

 sasl驗證機制規範client與server之間的應答過程以及傳輸內容的編碼方法,sasl驗證架構決定伺服器本身如何儲存客戶端的身份證書以及如何核驗客戶端提供的密碼。

 如果客戶端能成功通過驗證,伺服器端就能確定使用者的身份, 並藉此決定使用者具有怎樣的許可權。

比較常見的機制;

4.1 plain(較常用)

plain是最簡單的機制,但同時也是最危險的機制,因為身份證書(登入名稱與密碼)是以base64字串格式通過網路,沒有任何加密保護措施。因此,使用plain機制時,你可能會想要結合tls。

4.2 login

login不是其正式支援的機制,但某些舊版的mua使用這種機制,所以cyrus sasl讓你可選擇其是否支援login機制。如果你的使用者仍在使用這類老掉牙的mua,你必須在編譯sasl函式庫時,指定要包含login的支援。 login的證書交換過程類似plain。

4.3 otp

otp是一種使用“單次密碼”的驗證機制。此機制不提供任何加密保護,因為沒必要--每個密碼都只能使用一次,每次聯機都要改用新密碼。smto client必須能夠產生otp證書。

4.4 digest-md5(較常用)

使用這種機制時,client與server共享同一個隱性密碼,而且此密碼不通過網路傳輸。驗證過程是從伺服器先提出challenge(質詢)開始, 客戶端使用此challenge與隱性密碼計算出一個response(應答)。不同的challenge,不可能計算出相同的response;任何擁 有secret password的一方,都可以用相同的challenge算出相同的response。因此,伺服器只要比較客戶端返回的response是否與自己算 出的response相同,就可以知道客戶端所擁有的密碼是否正確。由於真正的密碼並沒有通過網路,所以不怕網路監測。

4.5 kerberos

kerberos是一種網路型驗證協議。除非你的網路已經使用kerberos,否則你應該用不到kerberos機制;相對的,如果你的網路已經架設了kerberos驗證中心,sasl就能完美的將smtp驗證整合進現有的體系。

4.6 anonymous

anonymous機制對smtp沒有意義,因為smtp驗證的用意在於限制轉發服務的使用物件,而不是為了形成open relay,sasl之所以提供這種機制,主要是為了支援其他協議。當 客戶端連結到一個支援sasl的郵件伺服器時,伺服器會以優先順序列出可用的機制供客戶端選擇。如果客戶端也支援多鍾機制,則當第一種機制驗證失敗時,客戶 端可能會繼續嘗試第二種機制,直到通過驗證或是所有機制都失敗為止。如果雙方在一開始就無法協調出共同的機制,驗證過程就算失敗。一旦雙方在使用哪種機制上達成共識,就開始進行驗證過程。實際的互動過程隨機制而定,但通常包含一次或多次應答過程。驗證協議本身也規定了應答內容的編碼格式。

總結

   數字證書, 是級聯認證派發的, 最上層是根CA認證中心. 數字證書的根本作用, 是為了保證所有人公鑰的安全性和真實性. 大致認證過程是: 通過CA的公鑰來解出該CA所派發的證書裡面所包含的公鑰(使用者或者機構的). 並通過該公鑰來驗證證書持有人的真實性. (因為持有人並不一定是證書所有人)



   通過上面對SSL的分析,我們可以看到,SSL並不能阻止別人獲得你傳輸的資料,但是由於你傳輸的資料都是加密過的,別人拿到了毫無用處,一樣可以保護信 息的安全。還有一點需要強調一下,SSL並不依賴於TCP,它可以建立在任何可靠的傳輸層協議(比如TCP)之上。也就是說SSL是不能建立在UDP之上 的。這是顯然的,如果傳輸都不可靠,偶爾丟兩個包或者包的順序換一換的話,怎麼保證安全呢?

   SASL是提供一種使用者身份認證機制, 你可以簡單認為是用來認證使用者的賬號/密碼是否執行進入系統或者使用系統的服務. 一般較長使用digest-md5, 該種機制下, 密碼可以不用在網路上傳輸, 也就不用怕密碼被竊聽.