聊聊對稱加密與非對稱加密
原創:花括號MC(微信公衆號:huakuohao-mc)。關注JAVA基礎編程及大數據,注重經驗分享及個人成長。
目前大家常說的信息加密技術就兩種, 對稱加密 和 非對稱加密 。
對稱加密
所謂的對稱加密就是加密和解密用同一份密鑰。對稱加密的好處就是加密速度快,但是缺點也很明顯,一定要保存好這份密鑰,如果密鑰丟失,就會帶來很大的安全風險。而且如果與服務端進行通信的客戶端比較多的話,服務端要管理很多份不同的密鑰。
非對稱加密
爲了解決對稱加密的缺點,人們提出了非對稱加密,非對稱加密技術也是目前應用最廣泛的加密技術。所謂的非對稱加密就是生成一對密鑰,分爲公鑰和私鑰。私鑰自己保存,公鑰發佈出去。用私鑰加密的信息只能用公鑰解密,用公鑰加密的信息也只能用私鑰解密。
舉個例子
假設你的好朋友鐵蛋,經常網購。購物網站爲了保證信息安全傳輸,決定生成一對密鑰,私鑰自己保存,公鑰發給鐵蛋。鐵蛋發給購物網站的信息都是用公鑰加密的信息,購物網站收到後,用自己的私鑰進行解密。這樣即使傳輸途中,信息被截獲,也沒辦法破解,因爲沒有私鑰。
有個漏洞
這個時候有個黑客,做了一個假的購物網站,頁面和真的網站一摸一樣,連網址都很相似。同時也生成了一對密鑰,最重要的是黑客偷偷的把鐵蛋電腦裏真購物網站的公鑰給替換成了假購物網站的公鑰。
當鐵蛋打開假的網址進行購物操作時,會用假的公鑰進行加密然後把消息發給假的網站,整個通信過程,鐵蛋都沒有發現自己被騙。
鐵蛋之所以被騙,是因爲他不知道電腦裏的真公鑰已經被換成假的了。爲了解決這個問題,出現一個認證機構,這個機構會對網站的公鑰進行加密簽名並形成一個證書,這個證書就是大家常說的 CA
證書,這個機構就是 CA
。
只要鐵蛋電腦裏面安裝的是經過 CA
認證的證書,在訪問的時候,瀏覽器就會顯示出一把小鎖,提示可以安全訪問,如果沒有經過認證,瀏覽器就會提示鐵蛋有風險。
鐵蛋經常在多個網站購物,難道需要每個網站都保存一份證書?其實不用這樣,我們的電腦裏面一般都有 CA
的根證書,只要有了這個證書,所有經過 CA
認證過的網站就都是安全的。
沒錯,我上面介紹的就是 HTTPS
的工作原理,這也是非對稱加密技術的典型 應 用。
雙向認證
非對稱加密還有一個應用場景就是雙向認證。所謂的雙向認證就是不僅服務端要驗證客戶端的身份,客戶端也要驗證服務端的身份。說白了就是客戶端和服務端各自生成一個密鑰對,私鑰自己保存,公鑰發給對方。這種情況一般用在系統與系統的對接上。
爲什麼需要雙向認證
假設 C
系統要訪問 S
系統的服務, S
系統對外提供的數據安全級別比較高,只有受信系統才能訪問。假設目前只允許 C
系統訪問。
S
系統爲了保證信息安全傳輸,決定生成一對密鑰,私鑰自己保存,公鑰發給 C
系統。 C
系統訪問 S
的時候,會用 S
的公鑰將消息進行加密發給系統 S
, S
用私鑰進行解密。
如果這個時候竊密者 B
系統偷偷拿到的 S
提供給 C
的公鑰,然後 B
用 S
的公鑰加密消息之後發送給系統 S
,獲取相應的數據,那麼 S
是沒辦法判斷出請求的消息是來自 C
還是來自竊密者 B
。
如何保證消息來自於受信系統 C
呢?經過協商, C
系統也生成一對密鑰,私鑰自己保存,公鑰發給系統 S
。
當 C
向 S
發送請求的時候, C
先將要發的消息,假設爲 M
,進行一次 Hash
運算,得到一個固定長度的 Hash
值,這個值一般稱爲 數字摘要 。然後 C
用自己的私鑰對這個數字摘要進行加密,加密後的值稱爲 數字簽名 ,其實跟現實中我們在文件中進行手寫簽名是一個意思。
C
系統將數字簽名和要發送的消息 M
,一起用 S
的公鑰做一次加密之後發送給系統 S
。
S
收到消息之後,先用自己的私鑰對消息進行解密,解密之後,得到 C
的數字簽名和消息 M
。這個時候關鍵的一步來了,就是驗籤,驗證消息是否是 C
發來的。
首先 S
用 C
的公鑰對簽名進行解密操作,解密完成後會得到一個摘要值,我們稱之爲 D
。能解開就證明消息是 C
發來的。 S
還會用和 C
一樣的 Hash
算法對消息 M
進行 Hash
運算,這樣將會得到一個摘要值,我們稱之爲 D‘
,如果 D
和 D’
相同就證明消息沒有被篡改過。
總結
上面的雙向認證過程也是有漏洞的,只不過相比於單項認證,降低了被破譯的風險而已。注意,世界上不存在絕對安全的系統,即便是現在逐漸流行起來的生物識別系統。我們所做的各種安全措施都只是在降低系統被破解的風險而已。
就像家裏的防盜門,只防君子不防小人。
推薦閱讀
·END·
花括號MC
Java·大數據·個人成長
微信號:huakuohao-mc
點一下你會更好看耶