python爬蟲之網路安全方面
1 各類金鑰區別
- 金鑰對:在非對稱加密技術中,有兩種金鑰,分為
公鑰
和私鑰
公鑰是金鑰對所有者持有,公佈給他人的;私鑰也是金鑰對所有者持有,不可公佈 - 金鑰:指公鑰或私鑰。
- 公鑰:公鑰用來給資料加密,用公鑰加密的資料只能使用私鑰解密。
- 私鑰:如上,用來解密公鑰加密的資料。
- 摘要:對需要傳輸的文字,做一個
HASH
計算,一般採用SHA1
,SHA2
來獲得。 - 簽名:使用私鑰對需要傳輸的文字的摘要進行加密,得到的密文即被稱為該次傳輸過程的簽名
- 簽名驗證:資料接收端,拿到傳輸文字,但是需要確認該文字是否就是傳送發出的內容,中途是否曾經被篡改。因此拿自己持有的公鑰對簽名進行解密(金鑰對中的一種金鑰加密的資料必定能使用另一種金鑰解密),得到了文字的摘要,然後使用與傳送方同樣的HASH演算法計算摘要值,再與解密得到的摘要做對比,發現二者完全一致,則說明文字沒有被篡改過。
- 總結:公鑰和私鑰是通過一種演算法得到的一個金鑰對(即一個公鑰和一個私鑰),將其中的一個向外界公開,稱為公鑰;另一個自己保留,稱為私鑰。通過這種演算法得到的金鑰對能保證在世界範圍內是唯一的。
公鑰和私鑰是成對的,它們互相解密(金鑰指公鑰或私鑰,金鑰對指公鑰加私鑰)。
公鑰和私鑰都可以加密和解密。
私鑰數字簽名,公鑰驗證。
注意
:使用這個金鑰對的時候,如果用其中一個金鑰加密一段資料,必須用另一個金鑰解密。比如用公鑰加密資料就必須用私鑰解密,如果用私鑰加密也必須用公鑰解密,否則解密將不會成功
2 各類加密
2.1 對稱加密
加密 encryptio
n 與解密 decryption
使用的是同樣的金鑰 secret key
密文+祕鑰
還原成你的明文。對稱加密有很多種演算法,由於它效率很高,所以被廣泛使用在很多加密協議的核心當中。
對稱加密通常使用的是相對較小的金鑰,一般小於
256bit
。因為金鑰越大,加密越強,但加密與解密的過程越慢。如果只用 1bit
來做這個金鑰,那黑客們可以先試著用 0 來解密,不行的話就再用 1 解;但如果你的金鑰有 1MB 大,黑客們可能永遠也無法破解,但加密和解密的過程要花費很長的時間比如常見的
DES/AES
都是屬於對稱加密演算法。優點:
演算法公開、計算量小、加密速度快、加密效率高
缺點:
祕鑰的管理和分發非常困難,不夠安全。在資料傳送前,傳送方和接收方必須商定好祕鑰,然後雙方都必須要儲存好祕鑰,如果一方的祕鑰被洩露,那麼加密資訊也就不安全了
2.2 非對稱加密
非對稱加密演算法需要兩個金鑰來進行加密和解密,這兩個祕鑰是公開金鑰(簡稱公鑰)和私有金鑰(簡稱私鑰),即常說的公鑰加密,私鑰解密
或私鑰加密,公鑰解密
。
私鑰只能由一方安全保管,不能外洩,而公鑰則可以發給任何請求它的人,非對稱加密使用這對金鑰中的一個進行加密,而解密則需要另一個金鑰
RSA
就是最常用的非對稱加密演算法
雖然非對稱加密很安全,但是和對稱加密比起來,它非常的慢,所以我們還是要用對稱加密來傳送訊息,但對稱加密所使用的金鑰我們可以通過非對稱加密的方式傳送出去。
優點:
安全性更高,公鑰是公開的,祕鑰是自己儲存的,不需要將私鑰給別人
缺點:
加密和解密花費時間長、速度慢,只適合對少量資料進行加密。
2.3 HTTPS
2.3.1 證書籤名
由於非對稱加密只是把公鑰傳給客戶端,倘若公鑰被中間機構給攔截就會有風險隱患,因此才有了證書祕鑰加密
證書祕鑰加密採用伺服器和客戶端雙方都能夠充分信得過第三方證書認證機構
,首先伺服器端會制定一種加密方式,稱為公鑰,有了公鑰後,伺服器先不給客戶端,而是提交到第三方證書認證機構
,機構先稽核,稽核通過後,會對公鑰進行進行數字簽名(簽名主要作用就是為了防偽
),然後機構把攜帶了簽名的公鑰封裝到證書中,把證書發給客戶端,證書裡面就是包含了數字簽名的公鑰
2.3.2 HTTPS原理
如上所言, HTTPS
協議之所以是安全的是因為採用證書加密
會對傳輸的資料進行加密,而加密過程是使用了非對稱加密實現。但其實:HTTPS
在內容傳輸的加密上使用的是對稱加密,非對稱加密只作用在證書驗證階段
兩個階段圖示:
證書驗證階段:
- 瀏覽器發起
HTTPS
請求,連線到伺服器的443
埠; - 服務端返回 HTTPS 證書;
- 客戶端驗證證書是否合法,如果不合法則提示告警。
資料傳輸階段: - 當證書驗證合法後,在本地生成隨機數;
- 通過公鑰加密隨機數,並把加密後的隨機數傳輸到服務端;
- 服務端通過私鑰對隨機數進行解密;
- 服務端通過客戶端傳入的隨機數構造對稱加密演算法,對返回結果內容進行加密後傳輸