安全加密演算法

2021-09-28 21:29:15 字數 2957 閱讀 4347

在閱讀本文之前,如果您還不了解http,https,ssl/tls這幾個概念,請跳轉以下鏈結閱讀該文章:

在聊安全加密之前,我們先來看看http協議下瀏覽器與伺服器之間的互動。

如上圖所示,我們的瀏覽器訪問伺服器的時候,首先需要建立乙個連線,那麼如何連線呢?我們需要連入網路(這是句廢話,不過這是為後文鋪墊),我們的瀏覽器是執行在作業系統上的,因此作業系統想要聯網,需要乙個接入點,這個接入點就是網路接入商(比如isp),網路接入商是連入網際網路中的,伺服器也是接入網際網路的,並且提供了乙個公網ip,這樣我們的瀏覽器才能通過ip位址訪問伺服器,在http協議下,瀏覽器與伺服器之間的資料是以明文形式互動的。因此在這個過程是不安全的,會有被攔截的風險。(ps:在室外的時候最好不要用公用的wifi,公用wifi實際上就是這裡的***,是乙個網際網路的接入點,如果這個接入點收集了你的form表單資料或者是伺服器返回給你的資料的話,你的資料很有可能就被篡改了。)

由於http協議不安全,所以我們想對資料進行加密,由此引出了對稱加密。接下來我們看看對稱加密。

所謂對稱加密,就是編碼與解碼採用的演算法是一樣的。

圖中提到了加密演算法,它可以這樣來理解,它是一種規則,比如我們傳送給伺服器一段小秘密:「我喜歡whitecat」,既然是秘密,那麼我們不希望他人能直接通過明文獲取到這段小秘密,因此我們對這段小秘密在前後都加個123,假裝給它藏起來了,別人就解不開了,看不懂(當然加密演算法不可能這麼簡單,只是為了方便理解)。

這裡邊注意,加密演算法我們不希望它是不可逆的,因為如果不可逆,那加密完成後,我們瀏覽器就解不開了,所以必然要提供一套解密演算法。

繼續看上圖,在對稱加密中,我們的瀏覽器傳送給伺服器的資料,是由伺服器通過加密演算法進行加密的,伺服器把加密後的資料以及解密演算法傳送給瀏覽器,但這種加密是無效的(ps:卵用),原因很簡單,既然伺服器把解密演算法和資料傳給瀏覽器了,那麼黑客就可以利用解密演算法對資料進行解密,然後篡改資料,再把資料發給瀏覽器!

接下來我們對這兩個演算法換個專業點的稱呼:

因此,對稱加密存在金鑰分發的問題。如何安全的把共享金鑰在雙方進行分享,這本身也是乙個如何安全通訊的問題,解決辦法其中一種是提前雙方約定好,不通過具體的通訊進行協商,避免被監聽和截獲。另外一種方式,將是下面我們介紹的非對稱加密。

常用的對稱加密演算法:des,triple-des,rc2和rc4。

由於對稱加密把公鑰傳給瀏覽器還是不安全,所以我們希望在伺服器上有一套不同的金鑰(即公鑰與私鑰不同),我們在返回給瀏覽器資料時候,只傳公鑰,不傳私鑰。這裡要強調的是:只要伺服器的私鑰不洩露,我們的資料就是安全的,即使落在別人手裡,也是無法解密的。這時黑客攔截返回的資料後,只能通過解密演算法解開資料,但由於沒有私鑰,無法對資料進行加密,所以無法進行篡改。這就是最初的https。

常用的非對稱加密演算法:rsa

非對稱加密看起來很安全,但實際不然,我們來看下面這種情況,黑客攔截資料後,用伺服器的公鑰進行解密,解密完成後他雖然沒有伺服器的私鑰,但是他可以自己偽造乙個私鑰對資料進行加密,並且再偽造乙個公鑰,把自己的公鑰以及資料傳送給瀏覽器,瀏覽器以為這個公鑰和私鑰是伺服器發過來的,實際上卻是黑客發來的。因此為解決這個問題,https協議提供了ca證書,接下來我們看看ca證書是如何保證資料安全的。

由於非對稱加密還是有安全問題,所以我們引入了第三方,即ca(certificate authority),乙個認證機構

在講正題之前,我們先來看乙個概念:dns

dns是乙個網域名稱系統,是乙個用來把網域名稱轉換為ip位址的軟體。dns中儲存了一張網域名稱和與之相對應的ip位址的表,以解析訊息的網域名稱。我們在瀏覽器的位址框中打入某乙個網域名稱時,比如下圖中的「www.baidu.com」,瀏覽器實際上是向我們的網路接入商(比如isp)發出了乙個網域名稱請求,然後通過接入商的dns伺服器找到網域名稱對應的ip位址 ,並將這個ip位址所對應的伺服器上的網頁內容傳送給請求的瀏覽器。

dns劫持

當接網路入商返回給瀏覽器ip位址的時候,可能會被劫持,比如我(whitecat)是劫持者,我可以把伺服器返回的ip位址換為另外乙個完全不同的ip位址傳送給瀏覽器,這個ip位址和瀏覽器請求網域名稱的網頁一毛一樣,這樣瀏覽器就瀏覽到了乙個假**,在瀏覽器輸入的資訊就被我竊取了。這就是dns劫持。

想要避免被劫持,就可以採用ca認證。ca可以幫我們認證一下最後返回的ip是不是釣魚**。

如上圖所示,伺服器去找ca為公鑰做認證,這時ca會用自己的私鑰為伺服器的公鑰做一次加密,加密的內容裡包括伺服器的公鑰以及一些企業資訊,網域名稱等,我們稱這次加密後的內容為「數字證書」。現在伺服器獲取到了ca提供的數字證書,並將數字證書傳送給瀏覽器,由於數字證書是由ca加密的,所以這裡我們的瀏覽器還要和ca機構做一次約定,ca機構為瀏覽器提供它的公鑰,瀏覽器用ca提供的公鑰去解密「數字證書」,解密後,瀏覽器得到了伺服器的公鑰以及企業資訊、網域名稱等,這時,瀏覽器再用伺服器公鑰繼續解密就能夠獲取到伺服器返回的資料了。

接下來我們再來分析下,如果黑客劫持了伺服器傳給瀏覽器的數字證書的話,即使他能解密數字證書,但由於沒有ca的私鑰,就沒辦法加密,你可能會說黑客還可以自己偽造私鑰啊。這是不可以的,因為我們剛剛說過了「ca機構為瀏覽器提供了它的公鑰」,也就是說瀏覽器會拿著ca的公鑰去解密數字證書而不會拿別人的公鑰去解密,而黑客自己偽造了數字證書的私鑰,兩者的公鑰和私鑰是不匹配的,也就是說瀏覽器是解不開篡改過的數字證書的。

寫在最後

推薦閱讀該文章來理解數字證書,個人覺得文章寫得很不錯。

安全 加密演算法

一 對稱加密 1.caesar encrypting凱撒加密法 字母移位。2.vigen re cipher維吉尼亞加密法 加強版凱撒演算法 第i個密文字母 第i個明文本母,第i個金鑰字母 例如 this is a test.金鑰 day 則 明文 thisisatest 金鑰 daydaydayd...

最安全的加密演算法

在密碼學裡,有一種理想的加密方案,叫做一次一密亂碼本 one time pad one time pad的演算法有以下要求 1 金鑰必須隨機產生 2 金鑰不能重複使用 3 金鑰和密文的長度是一樣的。one time pad是最安全的加密演算法,雙方一旦安全交換了金鑰,之後交換資訊的過程就是絕對安全的...

對稱加密演算法 DES加密演算法

一 對稱加密演算法 對稱加密也稱為常規加密 私鑰或單鑰加密。乙個對稱加密由5部分組成 明文 plaintext 這是原始資訊或資料,作為演算法的輸入。加密演算法 encryption algorithm 加密演算法對明文進行各種替換和轉換。金鑰 secret key 金鑰也是演算法的輸入。演算法進行...