首頁技術(shù)文章正文

https中到底是對稱加密還是非對稱加密?

更新時間:2020-07-15 來源:黑馬程序員 瀏覽量:

我們這一次來討論一下有關(guān)于https的相關(guān)知識。其中最重要的就是有關(guān)于加密方式的知識。https中到底是對稱加密還是非對稱加密?為什么要選用對稱加密,或者是非對稱加密?玄機(jī)何在?這一小節(jié),我們一起來看一看。

有關(guān)于加密,我們首先來看一下不加密的情況,一般在計算機(jī)中,不加密我們成為'裸奔'。如果數(shù)據(jù)不加密,則很容易被黑客竊取到。如下圖所示:

1594805804748_https01.jpg


所以針對這樣的情況,我們應(yīng)該在數(shù)據(jù)傳輸?shù)倪^程中進(jìn)行對應(yīng)的加密,那么問題來了,我們應(yīng)該選擇哪種加密方式呢?我們知道:常見的加密方式有對稱加密和非對稱加密之分,例如我們這里選擇對稱加密的形式。則如下圖所示:

1594805818673_https02.jpg


我們可以把data數(shù)據(jù),配合秘鑰,進(jìn)行f()函數(shù)運算,進(jìn)而得到密文:XXX,再把XXX傳遞到服務(wù)器端,從而使數(shù)據(jù)的傳輸進(jìn)行加密,但是這樣也面臨一些對應(yīng)的問題,我們知道,對稱加密的秘鑰是由后端生成的,但是該秘鑰往往只有一個,因為后端不可能為每一個人設(shè)置一個秘鑰,否則后端存儲的秘鑰就太多了。既然秘鑰只有一個,那么前端想要解密就需要獲取該秘鑰。這也就是不安全的地方了。因為黑客也可以偽裝成良民(普通的客戶端),拿取到對應(yīng)的秘鑰,從而對獲取的數(shù)據(jù)進(jìn)行解密處理。所以對稱加密的方式其實是不安全的。雖然進(jìn)行了加密但是黑客可以很容易就進(jìn)行解密。

對稱加密這么不安全,那么非對稱加密呢?是不是非常安全。接下來讓我們一起來看一下:

1594805843908_https03.jpg


從上圖我們可以知道,使用非對稱加密有兩種加密方式:公鑰加密,私鑰解密,私鑰加密,公鑰解密。

一開始服務(wù)端生成一對公私鑰(pk,sk)。我們要想進(jìn)行密文通訊,需要客戶端獲取對應(yīng)的公鑰(pk)。所以客戶端會發(fā)送請求,請求公鑰??蛻舳双@取到pk后,會把數(shù)據(jù)放到f()方法中進(jìn)行對應(yīng)的加密,所用的秘鑰就是剛剛獲取的pk。加密后得到的XXX就是密文。所以我們可以把數(shù)據(jù)傳輸給服務(wù)器端。

這個時候,如果黑客截取了對應(yīng)的XXX數(shù)據(jù),黑客將沒法獲取對應(yīng)的明文數(shù)據(jù),因為他沒有獲取對應(yīng)的公鑰(pk)。

但是非對稱加密的缺點來了:如果服務(wù)端想要給客戶端傳遞數(shù)據(jù),也需要加密該怎么辦呢?如果使用私鑰加密,把加密的字段YYY傳輸給客戶端,看似沒有問題,但是細(xì)細(xì)想一下,我們就會知道黑客也是可以充當(dāng)良民從而獲取公鑰(pk)的。也就是說,只要是使用私鑰(sk)加密的方法,黑客都可以對其進(jìn)行解密。

總結(jié)發(fā)現(xiàn):單獨使用對稱加密,不安全,單獨使用非對稱加密,也不安全。那么應(yīng)該怎么解決呢?

經(jīng)過科學(xué)家的努力。我們就想到了能不能把兩者結(jié)合到一起呢?

例如下面的圖片顯示:

1594805870201_https04.jpg


通過上面的圖片,我們知道,先通過請求,獲取服務(wù)端的pk,拿到之后,我們可以在客戶端隨機(jī)產(chǎn)生一個key,然后通過f(pk,key)=XXX的方式,把XXX傳輸給服務(wù)端,這樣服務(wù)端就可以通過私鑰(sk)對XXX進(jìn)行解密,從而得到key。以后我們就可以通過key,作為秘鑰,進(jìn)行對稱加密了。

這樣的方式是非常棒的。通過這樣的方式我們會覺得數(shù)據(jù)是非常安全的。

但是真的安全嗎?

其實是不對的,如果我們設(shè)想一下。黑客如果從最開始就對我們的通訊進(jìn)行了監(jiān)聽。那么我們獲取公鑰的過程也會被監(jiān)聽到。而我們知道,非對稱加密的公鑰(pk),黑客也是可以獲取的。所以一旦公鑰泄露。key就會泄露,key泄露,則后面的全部對稱加密都稱不上是安全的。所以后面很安全,但是如何保證pk的傳輸也是安全的就至關(guān)重要了。

那么該如何解決這個問題呢?

1594805912331_https05.jpg


我們可以對上面的內(nèi)容再次進(jìn)行優(yōu)化,例如我們這里引入一個'CA機(jī)構(gòu)','CA機(jī)構(gòu)'是一種信用機(jī)構(gòu)。主要靠信用賺錢,一般來說都是全球的大型機(jī)構(gòu)。這類機(jī)構(gòu)也會有自己的公鑰(cpk)和私鑰(csk),可以使用csk對于pk公鑰進(jìn)行加密,從而得到證書,我們可以把證書傳遞給前端,讓前端利用瀏覽器內(nèi)部自帶的公鑰(cpk)對證書進(jìn)行解密,如果解密成功,則可以獲取到pk,隨后再利用pk對前端生成的key進(jìn)行加密。重復(fù)之前的步驟。

通過上面的步驟,其實我們就能夠得到完整的,安全的通訊方式了。這個其實就是https通訊方式中的最主要的加密方式介紹。

好了。通過上面的學(xué)習(xí),我們可以知道https通訊其實使用了非對稱加密和對稱加密的多種方式來進(jìn)行的。

 

猜你喜歡:

fiddler手機(jī)抓包:圖文教程超詳細(xì) 

如何測試HTTP響應(yīng)?

分享到:
在線咨詢 我要報名
和我們在線交談!