1. 程式人生 > 其它 >SSL協議工作原理

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授予的數字證書自證了身份。但,這裡的安全隱患在於,伺服器怎麼知道訪問者就是真使用者呢?之前介紹的雙向認證是可以通過數字證書驗明使用者的正身,現在使用者為了省錢沒有數字證書。這種情況下一般是通過使用者名稱密碼來確認使用者。所以,大家要保管好自己的密碼。