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