目錄
加密方式
對稱加密
非對稱加密
非對稱加密 + 非對稱加密
非對稱加密 + 對稱加密
AC證書
AC證書內容
數據摘要
數據簽名
在我們前面學習的http協議里面,我們發送的內容都是明文傳輸的,所以在安全上并不安全,但是在現在信息發達的時代里,如果還是使用 http 協議,那么就是很危險的,所以目前我們接觸到的基本上都是 https 協議。
而https協議上也就是在 http 協議里面加了 TLS/SSL 協議,而這兩個協議就是用來加密的。
http協議是明文傳輸的,所以當有中間人修改數據后,我們也是不能被發現的,或者是明文傳輸的話,被黑客看到我們的信息,那么也是很不隱私的。
那么解決方案是什么呢?加密!
加密方式
但是我們下面并不是要談加密,而是談如何加密!
那么加密有哪些方式呢?
-
對稱加密
-
非對稱加密
-
非對稱 + 對稱加密
加密的方式就是這三種,那么這些加密有什么特點呢?
對稱加密
對稱加密:對稱加密相對于非對稱加密比較簡單,舉一個簡單的例子,對稱加密有,假設現在發送的是數據 那么對這個數據異或另一個數字,然后得到帶了一個數據,那么這個數據就是經過加密的數據,當這個數據到達對端主機后,那么將這個數據在異或這個密鑰,那么就可以得到原始的數據。
這就是使用對稱加密,但是對稱加密是有問題的。
如果使用對稱加密,那么第一次的密鑰怎么讓對方主機知道呢?
如果服務器將通信使用的密鑰明文發送的話,那么就會被黑客看到,那么第一次的密鑰協商就是有問題的?那么此就需要一個密鑰的密鑰來解決問題,這就是雞生蛋,蛋生雞的問題了。
非對稱加密
非對稱加密就是首先,服務器有公鑰和私鑰,當客戶端第一次給服務器發送的時候,服務器就會將自己的公鑰交給客戶端,那么客戶端就可以拿公鑰加密,然后發送給服務器,此時就只有拿私鑰的服務器能解密的,后面服務器也就可以拿私鑰加密,然后客戶端手里有公鑰,那么客戶端也就可以看到服務器發送的數據了。
非對稱加密就是這樣,但是非對稱加密也是有問題的,因為不僅僅是客戶端給服務發送數據,服務器也需要給客戶端響應,那么當服務器給客戶端響應的時候,黑客也是可以看到服務器的公鑰的,那么此時黑客就可以看到服務器到客戶端的數據,此時也是不安全的。
那么需要怎么辦呢?
非對稱加密 + 非對稱加密
由于只有一個非對稱加密是不夠的,那么就需要采用雙放都是非對稱加密。
第一次,客戶端訪問服務器,然后服務器給客戶端返回自己的公鑰,此時公鑰是可以被其他人拿到的,然后客戶端拿到服務器公鑰后,拿服務器公鑰對自己的公鑰加密,然后發送給服務器,此時黑客是不能拿到的,因為此時被服務器公鑰加密的數據,只能由服務器的私鑰解密,然后服務器拿到了客戶端的數據后,使用自己的私鑰解密,然后拿到客戶端的公鑰,此時服務器就可以給客戶端發送數據的時候,就可以拿客戶端發送的公鑰加密了,此時發送到網絡中的數據,只有客戶端可以解密。
但是非對稱加密是比較復雜的,而且在解密的時候也是比較浪費世間的,所以非對稱加密+非對稱加密是不好的,其實不光是這樣,而且其實也是可以被中間人拿到數據的!
那么中間人要怎么拿到數據呢?我們下面先看一下如何解決非對稱加密的速度慢的問題。
非對稱加密 + 對稱加密
上面由于雙方都是非對稱,所以比較慢,下面使用非對稱和對稱一起用,前面使用非對稱密鑰協商對稱密鑰,后面就使用對稱密鑰來通信。
首先客戶端訪問服務器,服務器將公鑰發送給客戶端,客戶端使用服務器公鑰對一格對稱密鑰加密,然后對稱密鑰此時是不能被黑客看到的,所以此時數據是安全的,當服務器拿到數據后解密,拿到對稱密鑰,然后后面就是使用對稱密鑰加密解密。
這里我們就來說一下前面說的中間人問題,那么中間人怎么攻擊呢?
假設現在有一個中間人,mid。
當客戶端服務器第一次通信的時候,也就是當服務器給客戶端返回公鑰M的時候,此時中間人將M替換成自己的公鑰H,但是把M保存起來,此時在將數據發送給客戶端,此時客戶端拿到的公鑰就是H,然后客戶端會使用H來加密一個對稱密鑰S,然后發送給服務器,此時中間人拿到該數據,然后使用中間人的私鑰H‘來解密,拿到對稱的密鑰,然后中間人對對稱密鑰S使用M加密,然后發送給服務器,此時服務器也就拿到了對稱密鑰S,在此過程中,客戶端和服務器都不知道中間人的存在,也并不知道中間人修改過數據,在客戶端和服務器協商好密鑰S后就使用密鑰S通信,但是中間人也是知道S密鑰的,所以此時中間人是可以知道客戶端和服務器的數據的。
AC證書
我們發現上面的加密都是有問題的,那么我們需要怎么做呢?
AC證書,AC證書是什么呢?AC證書就是一個可以信任的機構,該機構為特定的網站頒發證書,然后每一次通信的時候,網站就將該證書進行hash映射形成摘要,然后通過加密后,形成簽名,然后就將該證書與簽名一起發送過去,如果中間被修改,那么對簽名進行解密后,然后再對證書進行相同的hash映射后,如果形成的摘要和簽名解密后的摘要不同,那么說明數據被中間人修改過,所以就是不可以的。
上面就是如何通過AC證書來檢測數據是否被修改過,如果修改過,那么該數據就是不可信任的。
下面我們介紹一下什么是AC證書:
AC證書內容
AC證書里面包含了一些內容,其中該內容就包含了對應網站的信息,例如:網站的網址、以及該網站的公鑰等...
重要的就是該網站的公鑰,主要是為了讓客戶端看到該公鑰。
數據摘要
數據摘要就是對AC證書進行hash有映射,對證書進行hash隱私后,就形成了摘要,然后對摘要再進行AC機構的私鑰加密后,然后形成數據簽名。
數據簽名
數據簽名就是再通過數據摘要,然后使用AC機構的私鑰加密,只能由AC機構的公鑰解密,但是私鑰只有AC機構擁有,所以想要形成簽名,只能由AC機構來形成。
所以對數據摘要進行加密后就形成了簽名。
有了數據簽名后,此時網站和客戶端通信的時候,就可以將網站的信息和數據簽名放在一起了,然后發送給客戶端。
那么有了數據簽名和證書后,看一下如何加密。
此時當客戶端第一次給服務器發送數據的時候,服務器給客戶端返回了自己的證書和數據簽名放到一起。
如果此時中間人想攻擊的時候,那么中間人將AC證書里面的公鑰切換為自己的公鑰。
那么當該數據到達客戶端的時候,客戶端就會驗證AC證書的真假,客戶端就會對AC證書進行相同的hash映射,然后,形成數據摘要,然后在對數據簽名進行解密,也形成一個數據摘要,如果AC證書美喲被修改,那么這兩個摘要就是相同的,如果被修改了,那么形成的數據摘要就會差別很大,此時客戶端就會意識到數據被修改。