假設一下,我找了兩個數字,一個是1,一個是2。我喜歡2這個數字,就保留起來,不告訴你們,然后我告訴大家,1是我的公鑰。
我有一個文件,不能讓別人看,我就用1加密了。別人找到了這個文件,但是他不知道2就是解密的私鑰啊,所以他解不開,只有我可以用數字2,就是我的私鑰,來解密。這樣我就可以保護數據了。
我的好朋友x用我的公鑰1加密了字符a,加密后成了b,放在網上。別人偷到了這個文件,但是別人解不開,因為別人不知道2就是我的私鑰,只有我才能解密,解密后就得到a。這樣,我們就可以傳送加密的數據了。
現在我們知道用公鑰加密,然后用私鑰來解密,就可以解決安全傳輸的問題了。如果我用私鑰加密一段數據(當然只有我可以用私鑰加密,因為只有我知道2是我的私鑰),結果所有的人都看到我的內容了,因為他們都知道我的公鑰是1,那么這種加密有什么用處呢?
但 是我的好朋友x說有人冒充我給他發信。怎么辦呢?我把我要發的信,內容是c,用我的私鑰2,加密,加密后的內容是d,發給x,再告訴他解密看是不是c。他 用我的公鑰1解密,發現果然是c。這個時候,他會想到,能夠用我的公鑰解密的數據,必然是用我的私鑰加的密。只有我知道我得私鑰,因此他就可以確認確實是 我發的東西。這樣我們就能確認發送方身份了。這個過程叫做數字簽名。當然具體的過程要稍微復雜一些。用私鑰來加密數據,用途就是數字簽名。
好,我們復習一下:
1,公鑰私鑰成對出現
2,私鑰只有我知道
3,大家可以用我的公鑰給我發加密的信了
4,大家用我的公鑰解密信的內容,看看能不能解開,能解開,說明是經過我的私鑰加密了,就可以確認確實是我發的了。
總結一下結論:
1,用公鑰加密數據,用私鑰來解密數據
2,用私鑰加密數據(數字簽名),用公鑰來驗證數字簽名。
在實際的使用中,公鑰不會單獨出現,總是以數字證書的方式出現,這樣是為了公鑰的安全性和有效性。
二,SSL
我和我得好朋友x,要進行安全的通信。這種通信可以是QQ聊天,很頻繁的。用我的公鑰加密數據就不行了,因為:
1,我的好朋友x沒有公私鑰對,我怎么給他發加密的消息啊? (注:實際情況中,可以雙方都有公私鑰對)
2,用公私鑰加密運算很費時間,很慢,影響QQ效果。
好 了,好朋友x,找了一個數字3,用我的公鑰1,加密后發給我,說,我們以后就用這個數字來加密信息吧。我解開后,得到了數字3。這樣,只有我們兩個人知道 這個秘密的數字3,別的人都不知道,因為他們既不知x挑了一個什么數字,加密后的內容他們也無法解開,我們把這個秘密的數字叫做會話密鑰。
然后,我們選擇一種對稱密鑰算法,比如DES,(對稱算法是說,加密過程和解密過程是對稱的,用一個密鑰加密,可以用同一個密鑰解密。使用公私鑰的算法是非對稱加密算法),來加密我們之間的通信內容。別人因為不知道3是我們的會話密鑰,因而無法解密。
好,復習一下:
1,SSL實現安全的通信
2,通信雙方使用一方或者雙方的公鑰來傳遞和約定會話密鑰 (這個過程叫做握手)
3,雙方使用會話密鑰,來加密雙方的通信內容
上面說的是原理。大家可能覺得比較復雜了,實際使用中,比這還要復雜。不過慶幸的是,好心的先行者們在操作系統或者相關的軟件中實現了這層(Layer),並且起了一個難聽的名字叫做SSL,(Secure Socket Layer)。
SSL的握手協議
1. 用戶瀏覽器將其SSL版本號、加密設置參數、與session有關的數據以及其它一些必要信息發送到服務器。
2. 服務器將其SSL版本號、加密設置參數、與session有關的數據以及其它一些必要信息發送給瀏覽器,同時發給瀏覽器的還有服務器的證書。如果配置服務器的SSL需要驗證用戶身份,還要發出請求要求瀏覽器提供用戶證書。
3. 客戶端檢查服務器證書,如果檢查失敗,提示不能建立SSL連接。如果成功,那么繼續。
4. 客戶端瀏覽器為本次會話生成pre-master secret,並將其用服務器公鑰加密后發送給服務器。
5. 如果服務器要求鑒別客戶身份,客戶端還要再對另外一些數據簽名后並將其與客戶端證書一起發送給服務器。
6. 如果服務器要求鑒別客戶身份,則檢查簽署客戶證書的CA是否可信。如果不在信任列表中,結束本次會話。如果檢查通過,服務器用自己的私鑰解密收到的pre-master secret,並用它通過某些算法生成本次會話的master secret。
7. 客戶端與服務器均使用此master secret生成本次會話的會話密鑰(對稱密鑰)。在雙方SSL握手結束后傳遞任何消息均使用此會話密鑰。這樣做的主要原因是對稱加密比非對稱加密的運算量低一個數量級以上,能夠顯著提高雙方會話時的運算速度。
8. 客戶端通知服務器此后發送的消息都使用這個會話密鑰進行加密。並通知服務器客戶端已經完成本次SSL握手。
9. 服務器通知客戶端此后發送的消息都使用這個會話密鑰進行加密。並通知客戶端服務器已經完成本次SSL握手。
10. 本次握手過程結束,會話已經建立。雙方使用同一個會話密鑰分別對發送以及接受的信息進行加、解密。
1 SSL通訊示意圖
SSL通訊示意圖如圖1所示:
2 SSL通訊說明
在該部分,將對圖1所示的示意圖進行說明。為了說明的方便,在本文中稱客戶端為B,服務器端為S。
STEP 1: B——〉S(發起對話,協商傳送加密算法)
你好,S!我想和你進行安全對話,我的對稱加密算法有DES,RC5,我的密鑰交換算法有RSA和DH,摘要算法有MD5和SHA。
STEP2: S——〉B(發送服務器數字證書)
你好,B!那我們就使用DES-RSA-SHA這對組合進行通訊,為了證明我確實是S,現在發送我的數字證書給你,你可以驗證我的身份。
STEP 3: B——〉S(傳送本次對話的密鑰)
(檢查S的數字證書是否正確,通過CA機構頒發的證書驗證了S證書的真實有效性后。生成了利用S的公鑰加密的本次對話的密鑰發送給S)
S, 我已經確認了你的身份,現在將我們本次通訊中使用的對稱加密算法的密鑰發送給你。
STEP4: S——〉B(獲取密鑰)
(S用自己的私鑰解密獲取本次通訊的密鑰)。
B, 我已經獲取了密鑰。我們可以開始通信了。
STEP5: S<——>B(進行通訊)
說明:一般情況下,當B是保密信息的傳遞者時,B不需要數字證書驗證自己身份的真實性,如
電子銀行的應用,客戶需要將自己的賬號和密碼發送給銀行,因此銀行的服務器需要安裝數字證書來表明自己身份的有效性。在某些B2B應用,服務器端也需要對客戶端的身份進行驗證,這時客戶端也需要安裝數字證書以保證通訊時服務器可以辨別出客戶端的身份,驗證過程類似於服務器身份的驗證過程。
此外需要說明的是,在一些電子商務的應用中,可能還會使用到電子簽名,或者為了信息交換的更加安全,會增加電子簽名和消息校驗碼(MAC)。
為了便於了解SSL,下面在簡要介紹一下信息加密相關知識。使用密鑰類型加密信息的加密算法可以分為以下幾類:HASH 編碼、對稱加密和非對稱加密三類。
HASH 編碼是使用HASH算法從任意長度的消息中計算HASH值的一個過程,HASH值可以說是消息的指紋,因為對於任何不同的消息,幾乎總有不同的HASH值。因此在SSL通訊過程中,
可以對消息的HASH值進行加密,確保傳遞的消息在傳輸過程中沒有被修改。
非對稱加密或稱之為公鑰加密使用數學上相關的兩個數值來對信息進行編碼(加密),其中一個數字稱為公鑰,另一個稱為私鑰。公鑰加密的信息可以用私鑰解密, 私鑰加密的信息可以用公鑰解密。由於公鑰可以大面積發放,因此公鑰加密在SSL加密通信中應用於對密鑰的加密或者進行數字簽名。
對稱加密和非對稱加密相比的區別在於對稱加密中,加密信息和解密信息使用同樣的密鑰,因此該密鑰無法公開。
但是其具有加密、解密快速的特點。
在SSL通訊中,首先采用非對稱加密交換信息,使得服務器獲得瀏覽器端提供的對稱加密的密鑰,然后利用該密鑰進行通訊過程中信息的加密和解密。為了保證消息在傳遞過程中沒有被篡改,可以加密HASH編碼來確保信息的完整性。
[@more@]