SSL協議工作原理

SSL協議工作原理

在現代,A和B之間要進行安全,省心的網絡通信,需要經過以下幾個步驟

  • 通過CA體系交換public key
  • 通過非對稱加密算法,交換用於對稱加密的密鑰
  • 通過對稱加密算法,加密正常的網絡通信

在實際中,非對稱加密只會用來傳遞一條信息,那就是用於對稱加密的密鑰。當用於對稱加密的密鑰確定了,A和B還是通過對稱加密算法進行網絡通信

因爲非對稱加密算法比對稱加密算法要複雜的多,處理起來也要慢得多。如果所有的網絡數據都用非對稱加密算法來加密,那效率會很低。

1.什麼是對稱加密?

A和B會使用一個共享的密鑰,A在發送數據之前,用這個密鑰對數據加密。B在收到數據之後,用這個密鑰對數據解密。因爲加密解密用的是同一個密鑰,所以這裏的加密算法稱爲對稱加密算法

常見的有:AES、DES、3DES

DES(Data Encryption Standard):數據加密標準,速度較快,適用於加密大量數據的場合。

3DES(Triple DES):是基於DES,對一塊數據用三個不同的密鑰進行三次加密,強度更高。

AES(Advanced Encryption Standard):高級加密標準,是下一代的加密算法標準,速度快,安全級別高;AES是一個使用128位分組塊的分組加密算法,分組塊和128、192或256位的密鑰一起作爲輸入,對4×4的字節數組上進行操作。AES是種十分高效的算法,尤其在8位架構中,這源於它面向字節的設計。AES 適用於8位的小型單片機或者普通的32位微處理器,並且適合用專門的硬件實現,硬件實現能夠使其吞吐量(每秒可以到達的加密/解密bit數)達到十億量級。同樣,其也適用於RFID系統。
AES 本身就是爲了取代 DES 的,AES 具有更好的 安全性效率靈活性

在以前,通過將對稱加密算法的密鑰長度變長,來應對中間人攻擊。

但是A和B還是需要見面商量一個密鑰。

A不只與B通信,還同時還跟其他10000個人進行網絡通信。A不可能每個人都跑去跟他們見個面,商量一個密鑰。

所以出現了非對稱加密算法

2.什麼是非對稱加密?

非對稱加密使用兩個密鑰,一個是public key,一個是private key。通過一個特殊的數學算法,使得數據的加密和解密使用不同的密鑰。因爲用的是不同的密鑰,所以稱爲非對稱加密

常見的有:RSA、DSA、ECC

RSA:是一個支持變長密鑰的公共密鑰算法,需要加密的文件塊的長度也是可變的。RSA算法基於一個十分簡單的數論事實:將兩個大質數(素數)相乘十分容易,但是想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作爲加密密鑰。比如:取兩個簡單的質數:89、97,得到兩者乘積很簡單8633;但是要想對8633進行因式分解,其工作量成幾何增加。

DSA(Digital Signature Algorithm):數字簽名算法,是一種標準的 DSS(數字簽名標準),嚴格來說不算加密算法。

ECC(Elliptic Curves Cryptography):橢圓曲線密碼編碼學。ECC和RSA相比,具有多方面的絕對優勢,主要有:抗攻擊性強。相同的密鑰長度,其抗攻擊性要強很多倍。計算量小,處理速度快。ECC總的速度比RSA、DSA要快得多。存儲空間佔用小。ECC的密鑰尺寸和系統參數與RSA、DSA相比要小得多,意味着它所佔的存貯空間要小得多。這對於加密算法在IC卡上的應用具有特別重要的意義。帶寬要求低。當對長消息進行加解密時,三類密碼系統有相同的帶寬要求,但應用於短消息時ECC帶寬要求卻低得多。帶寬要求低使ECC在無線網絡領域具有廣泛的應用前景。

非對稱加密的好處在於,現在A可以保留private key,通過網絡傳遞public key。這樣,就算public key被C攔截了,因爲沒有private key,C還是沒有辦法完成信息的破解。既然不怕C知道public key,那現在A和B不用再見面商量密鑰,直接通過網絡傳遞public key就行。

具體在使用中,A和B都各有一個public key和一個private key,這些key根據相應的算法已經生成好了。private key只保留在各自的本地,public key傳給對方。A要給B發送網絡數據,那麼A先使用自己的private key(只有A知道)加密數據的hash值,之後再用B的public key加密數據。之後,A將加密的hash值和加密的數據再加一些其他的信息,發送給B。B收到了之後,先用自己的private key(只有B知道)解密數據,本地運算一個hash值,之後用A的public key解密hash值,對比兩個hash值,以檢驗數據的完整性。

非對稱加密的隱患:中間人攻擊

但是在一切的最開始,A和B要通過網絡交換public key。如果C在中間攔截了呢?假設有這種情況,C攔截了A和B的public key,又分別用自己的public key發給A和B。A和B並不知道,他們還以爲這個public key來自對方。當A給B發消息時,A先用自己的private key加密數據的hash值,之後用C傳來的假的public key加密數據,再發出去。C攔截到之後,先用C自己的private key解密數據,C就獲取了A的原始信息!之後,C可以篡改數據內容,再用自己的private key加密數據的hash值,用之前攔截的B的public key加密數據,再發給B。B收到以後,先用自己的private key解密數據,再用C傳來的假public key解密hash值,發現匹配。這樣,B收到了一條來自C的假的信息,但是B還以爲信息來自於A。中間人攻擊仍然可能存在!

那如果有其他辦法能保證public key的真實性,A和B是可以不用見面交換public key的。

答案是CA證書

3.什麼是CA證書?

現實中,通過CA(Certificate Authority)來保證public key的真實性。

CA也是基於非對稱加密算法來工作。

有了CA,B會先把自己的public key(和一些其他信息)交給CA。CA用自己的private key加密這些數據,加密完的數據稱爲B的數字證書。現在B要向A傳遞public key,B傳遞的是CA加密之後的數字證書。A收到以後,會通過CA發佈的CA證書(包含了CA的public key),來解密B的數字證書,從而獲得B的public key。

但是等等,A怎麼確保CA證書不被劫持。C完全可以把一個假的CA證書發給A,進而欺騙A。CA的大殺器就是,CA把自己的CA證書集成在了瀏覽器和操作系統裏面。A拿到瀏覽器或者操作系統的時候,已經有了CA證書,沒有必要通過網絡獲取,那自然也不存在劫持的問題。

現在A和B都有了CA認證的數字證書。在交換public key的階段,直接交換彼此的數字證書就行。而中間人C,還是可以攔截A和B的public key,也可以用CA證書解密獲得A和B的public key。但是,C沒有辦法僞造public key了。因爲C不在CA體系裏面,C沒有CA的private key,所以C是沒有辦法僞造出一個可以通過CA認證的數字證書。如果不能通過CA認證,A和B自然也不會相信這個僞造的證書。所以,採用CA認證以後,A和B的public key的真實性得到了保證,A和B可以通過網絡交換public key(實際是被CA加密之後的數字證書)。

除非有種情況,A內置的CA證書被篡改了,例如A使用了盜版的系統,“優化”了的非官方瀏覽器,或者被病毒攻擊了,那這個時候,A有可能會認可非CA認證的數字證書,C就有機會發起中間人攻擊。所以,用正版至少是安全的。

4.SSL協議的具體流程

  • 用戶向web服務器發起一個安全連接的請求

  • 服務器返回經過CA認證的數字證書,證書裏面包含了服務器的public key

  • 用戶拿到數字證書,用自己瀏覽器內置的CA證書解密得到服務器的public key

  • 用戶用服務器的public key加密一個用於接下來的對稱加密算法的密鑰,傳給web服務器

    • 因爲只有服務器有private key可以解密,所以不用擔心中間人攔截這個加密的密鑰
  • 服務器拿到這個加密的密鑰,解密獲取密鑰,再使用對稱加密算法,和用戶完成接下來的網絡通信

現在用戶知道自己訪問的網站是正規的網站,否則用戶瀏覽器會報錯說不能用CA證書解析。服務器通過CA授予的數字證書自證了身份。但,這裏的安全隱患在於,服務器怎麼知道訪問者就是真用戶呢?之前介紹的雙向認證是可以通過數字證書驗明用戶的正身,現在用戶爲了省錢沒有數字證書。這種情況下一般是通過用戶名密碼來確認用戶。所以,大家要保管好自己的密碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章