网络通信常见加密剖析[通俗易懂](计算机网络的基本概念)
當(dāng)人類面對(duì)荒蠻外界時(shí),人身安全是第一需求,人們需要相互傳授安全防范的經(jīng)驗(yàn)和技能。當(dāng)人類步入信息社會(huì)之時(shí),我們不難發(fā)現(xiàn)信息安全還是我們的第一需求,而且現(xiàn)在比過(guò)去任何時(shí)候都更需要普及信息安全的意識(shí)和知識(shí)。
——《密碼學(xué)》序,某不具名的中國(guó)科學(xué)院成都計(jì)算機(jī)應(yīng)用研究所研究員/博導(dǎo)
在不懂計(jì)算機(jī)的人眼里,黑客們幾乎都是離群索居、脾氣古怪,在賽博世界中無(wú)孔不入無(wú)所不能的代名詞——這當(dāng)然不是真的,而且絕大多數(shù)要?dú)w功于編劇們的奇思妙想。造成這種誤差有很大一部分來(lái)自人們并不了解這個(gè)賽博空間中相當(dāng)重要的一環(huán):網(wǎng)絡(luò)安全。
人們總認(rèn)為黑客的技術(shù)晦澀難懂且充滿神秘,其實(shí)不然(當(dāng)然,申必代碼倒是有)。但是網(wǎng)絡(luò)通信加解密有什么手段、什么意思、出自哪里呢?今天小編就帶大家來(lái)了解一下網(wǎng)絡(luò)通信中常見的兩類加密方式:對(duì)稱加密和非對(duì)稱加密
基礎(chǔ)概念
Hash
既然今天挑了加解密作為我們討論的重點(diǎn),那自然要先講一下Hash了~
Hash,音譯叫哈希,也可以叫做散列,是一種生成信息摘要的方式。我們都知道計(jì)算機(jī)是以二進(jìn)制儲(chǔ)存數(shù)據(jù)的,而所有的二進(jìn)制都是一個(gè)數(shù)字,Hash所做的就是將這樣一個(gè)數(shù)字通過(guò)計(jì)算,得出一個(gè)固定長(zhǎng)度的消息摘要,這樣的消息摘要大致上具有兩個(gè)特性:不可逆、低碰撞。不可逆的意思很好理解:用Hash處理過(guò)的消息摘要無(wú)法再還原至消息本身,也就相當(dāng)于是一個(gè)單向的加密過(guò)程(而且?guī)缀鯚o(wú)法解密)。低碰撞的意思指的則是兩條不同的消息要盡可能地不會(huì)得到同一個(gè)Hash(不過(guò)在這點(diǎn)上,有些Hash算法偏重一點(diǎn)點(diǎn)差距就會(huì)造成巨大的差異(但是相應(yīng)的,兩個(gè)不同文件碰撞的可能會(huì)變大),而另一些算法則側(cè)重于兩個(gè)不同文件更不可能碰撞)。
Tips:Hash并不是某種特定的算法,而是一類具有相同思想和特性的算法的統(tǒng)稱,常見的Hash算法包括MD5、SHA-1等。
常見術(shù)語(yǔ)解釋
明文
指原始的消息,理想狀態(tài)下只有發(fā)送/接收方能看到明文,但這一點(diǎn)很難實(shí)現(xiàn),所以大家多采用傳輸加密密文的方式來(lái)保證安全性,在數(shù)據(jù)加解密中屬于不能暴露的信息。
密文
指加密后的消息,密文最重要的一個(gè)特性就是沒有秘鑰就無(wú)法解密,因此網(wǎng)絡(luò)通信中常見的加解密主要關(guān)注于密鑰,在數(shù)據(jù)加解密中屬于可以暴露的信息。
密鑰
指的是一個(gè)控制加密/解密過(guò)程的標(biāo)志型信息(數(shù)字、字符串和其他信息),根據(jù)算法的不同,密鑰還有可能分為通用密鑰、加密密鑰和解密密鑰等,,在數(shù)據(jù)加解密中屬于基本不能暴露的信息。
算法
指的是加密/解密的過(guò)程,將一段信息通過(guò)某個(gè)密鑰進(jìn)行演算從而得出,在數(shù)據(jù)加解密中屬于最好不要暴露的信息,但好的加密算法及加密體系應(yīng)當(dāng)確保即便算法暴露也無(wú)法解密密文。
關(guān)于安全性
需要注意的是,無(wú)論是何種算法都不能抵擋無(wú)敵的窮舉法,但我們更期望于盡可能地延長(zhǎng)被破解的時(shí)間——試想,如果你的手機(jī)號(hào)需要一千年才能被超算解密,難道這種算法就是不安全的嗎?恰恰相反,在實(shí)際應(yīng)用中,我們注重的并非完全的難以破解——這不可能,我們注重的是提高入侵者的攻擊成本,從而達(dá)到阻止破解的目的。
對(duì)稱加密
對(duì)稱加密可稱得上是最古老的加密形式:通過(guò)一套加密/解密過(guò)程和一把密鑰,對(duì)密文進(jìn)行的操作和對(duì)明文的進(jìn)行的操作都可以被復(fù)現(xiàn)——就好像你家的門鎖,只要有一把鑰匙,無(wú)論是誰(shuí)都能將它鎖上、無(wú)論是誰(shuí)都能將它打開。
最簡(jiǎn)單的對(duì)稱加密當(dāng)屬古老的凱撒密碼,將一串字母中的某幾位替換成后幾個(gè)字母(如A變成C,B變成D),解密的時(shí)候只要知道向后了幾位便可以還原密文——在那個(gè)沒有計(jì)算機(jī)的時(shí)代,這種密碼還算符合軍事加密通信的要求,可在計(jì)算機(jī)性能日新月異的當(dāng)代,這種密碼就不夠看了。但最令人頭疼的不是該種算法容易被暴力破解——在現(xiàn)代,對(duì)稱加密技術(shù)在密鑰不泄漏的情況下可以稱是最安全、最高效的加密手段(例如DES、AES乃至3DES等,這里限于篇幅不再展開詳細(xì)討論算法)。唯一的問(wèn)題是,在網(wǎng)絡(luò)通信中,我們一貫假設(shè)通信是被偵聽的、甚至有可能被篡改,因此如何安全地傳遞密鑰就變成了一個(gè)雞生蛋還是蛋生雞的問(wèn)題。為此,人們又設(shè)計(jì)出了非對(duì)稱加密算法。
非對(duì)稱加密
提及非對(duì)稱加密,不得不說(shuō)的就是RSA算法,這是一種典型的非對(duì)稱加密算法,這類算法最大的特征就是加密密鑰和解密的密鑰并不是同一把密鑰,所以服務(wù)器可以公開自己的加密密鑰,任何人都可以使用這把鑰匙加密數(shù)據(jù)(我們稱公開的密鑰為公鑰,私有的密鑰為私鑰),但只有服務(wù)器自己可以解密這把公鑰加密的數(shù)據(jù)——即服務(wù)器自己持有的私鑰并不需要暴露就可以獨(dú)立進(jìn)行加密,這就保證了服務(wù)器接收到的數(shù)據(jù)是未被篡改且不會(huì)被偵聽的。
非對(duì)稱加密算法的唯一的問(wèn)題就是他們的速度相較對(duì)稱加密算法來(lái)說(shuō)要慢上許多——甚至可以說(shuō)是在高性能要求的場(chǎng)景下不可被接受的延遲。
端對(duì)端通信
綜上所述,對(duì)稱加密算法的問(wèn)題在于密鑰不可信,而非對(duì)稱加密算法的問(wèn)題在于不能支持大量數(shù)據(jù)的流動(dòng),因此聰明的你肯定馬上可以想到:我們可以利用非對(duì)稱算法傳遞一個(gè)對(duì)稱密鑰,然后如此通信啊!
對(duì),完全沒錯(cuò),這就是端對(duì)端通信中的加密手段,客戶端首先向服務(wù)器請(qǐng)求一個(gè)公鑰——這不需要加密,因?yàn)楣€本來(lái)就是暴露的,然后由這把公鑰加密自己的對(duì)稱密鑰/加密公鑰并傳輸給服務(wù)器,服務(wù)器再用自己的私鑰進(jìn)行解密:這就是大名鼎鼎的SSL。
注:SSL在工作流程上還有一些為了防止攻擊和保證數(shù)據(jù)完整性做的額外努力,但大體思路如此。
證書簽名
好的,一切看起來(lái)都很完美,但是有一個(gè)小問(wèn)題:如果我們的數(shù)據(jù)被篡改了怎么辦?
假設(shè)客戶端和服務(wù)器中間有一個(gè)轉(zhuǎn)發(fā)者,他截獲了客戶端發(fā)出的請(qǐng)求并將自己的公鑰返回給了客戶端,然后再將客戶端的請(qǐng)求發(fā)給了服務(wù)器,客戶端用攻擊者的密鑰加密了自己的對(duì)稱密鑰——但私鑰卻不在服務(wù)器,而是在攻擊者手里,很顯然這條連接將是一條裸奔的加密連接——而且雙方都對(duì)此毫不知情,這該怎么辦呢?
現(xiàn)代的安全專家們采用了一個(gè)非常巧妙的方式來(lái)解決這個(gè)問(wèn)題:他們重新構(gòu)建了另一套非對(duì)稱密鑰(為了方便和上面的連接密鑰區(qū)分,我們稱其為證書密鑰),這套非對(duì)稱密鑰中的公鑰是解密用的密鑰,而私鑰(即加密密鑰)掌握在服務(wù)器自己手里。
這樣,當(dāng)其他人詢問(wèn)的時(shí)候,服務(wù)器就會(huì)將傳輸密鑰、身份信息組合成一個(gè)字符串,然后將計(jì)算它的哈希并它加密,最后將密文和哈希同時(shí)打包發(fā)送——這證明了打包者同時(shí)知曉原文和密鑰,原因如下:
1.因?yàn)橹挥性牟拍艿贸龉#1旧聿豢赡妫缘玫焦U弑厝恍枰涝?哈希中的一條。
2.因?yàn)榉菍?duì)稱密鑰中加密密鑰和解密密鑰相對(duì)應(yīng),如果能成功解碼消息則起碼證明發(fā)送密文者知曉密鑰和原文。
我們常說(shuō)“孤證不立”,在密碼學(xué)中也有類似的說(shuō)法,即“單一信息無(wú)法驗(yàn)證自己是否可信”,讀者們可以自己思考一下為什么一定要哈希和密文同時(shí)發(fā)送才能證明密文發(fā)送者是服務(wù)器(即一定持有加密用的證書私鑰)。
在這種情況下,只要我們確保解密用的解密密鑰可信,我們就可以確保和我們通信的一定是這個(gè)解密密鑰對(duì)應(yīng)的加密密鑰——即一定是這臺(tái)服務(wù)器。
但很顯然,我們沒有辦法保證解密密鑰的可信,最后解決這個(gè)問(wèn)題的辦法是我們提前在計(jì)算機(jī)里設(shè)置一些絕對(duì)可信的解密密鑰,當(dāng)我們遇到一個(gè)聲稱“自己安全”的解密密鑰時(shí),便去詢問(wèn)這些服務(wù)器,由他們來(lái)證明這個(gè)解密密鑰安全。這些密鑰、還有一些額外的信息(比如密鑰哈希、身份等)一起打個(gè)包,就變成了我們熟知的數(shù)字證書。
結(jié)語(yǔ)
好的,那么這就是小編給大家分享的網(wǎng)絡(luò)通信加解密有什么手段、什么意思、出自哪里。希望大家看完這篇由小編精心整理的內(nèi)容后,能對(duì)相關(guān)知識(shí)有所了解,解決你的困惑!(狗頭保命)
總結(jié)
以上是生活随笔為你收集整理的网络通信常见加密剖析[通俗易懂](计算机网络的基本概念)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Ui5 tool debug - ctr
- 下一篇: 行存储 VS 列存储[通俗易懂]