聊聊對稱加密與非對稱加密

原創:花括號MC(微信公衆號:huakuohao-mc)。關注JAVA基礎編程及大數據,注重經驗分享及我的成長。算法

目前你們常說的信息加密技術就兩種,對稱加密非對稱加密編程

對稱加密

所謂的對稱加密就是加密和解密用同一份密鑰。對稱加密的好處就是加密速度快,可是缺點也很明顯,必定要保存好這份密鑰,若是密鑰丟失,就會帶來很大的安全風險。並且若是與服務端進行通訊的客戶端比較多的話,服務端要管理不少份不一樣的密鑰。瀏覽器

非對稱加密

爲了解決對稱加密的缺點,人們提出了非對稱加密,非對稱加密技術也是目前應用最普遍的加密技術。所謂的非對稱加密就是生成一對密鑰,分爲公鑰和私鑰。私鑰本身保存,公鑰發佈出去。用私鑰加密的信息只能用公鑰解密,用公鑰加密的信息也只能用私鑰解密。安全

舉個例子

假設你的好朋友鐵蛋,常常網購。購物網站爲了保證信息安全傳輸,決定生成一對密鑰,私鑰本身保存,公鑰發給鐵蛋。鐵蛋發給購物網站的信息都是用公鑰加密的信息,購物網站收到後,用本身的私鑰進行解密。這樣即便傳輸途中,信息被截獲,也沒辦法破解,由於沒有私鑰。 微信

有個漏洞

這個時候有個黑客,作了一個假的購物網站,頁面和真的網站一摸同樣,連網址都很類似。同時也生成了一對密鑰,最重要的是黑客偷偷的把鐵蛋電腦裏真購物網站的公鑰給替換成了假購物網站的公鑰。markdown

當鐵蛋打開假的網址進行購物操做時,會用假的公鑰進行加密而後把消息發給假的網站,整個通訊過程,鐵蛋都沒有發現本身被騙。 併發

鐵蛋之因此被騙,是由於他不知道電腦裏的真公鑰已經被換成假的了。爲了解決這個問題,出現一個認證機構,這個機構會對網站的公鑰進行加密簽名並造成一個證書,這個證書就是你們常說的CA證書,這個機構就是CA運維

只要鐵蛋電腦裏面安裝的是通過CA認證的證書,在訪問的時候,瀏覽器就會顯示出一把小鎖,提示能夠安全訪問,若是沒有通過認證,瀏覽器就會提示鐵蛋有風險。oop

鐵蛋常常在多個網站購物,難道須要每一個網站都保存一份證書?其實不用這樣,咱們的電腦裏面通常都有CA的根證書,只要有了這個證書,全部通過CA認證過的網站就都是安全的。大數據

沒錯,我上面介紹的就是HTTPS的工做原理,這也是非對稱加密技術的典型應用。

雙向認證

非對稱加密還有一個應用場景就是雙向認證。所謂的雙向認證就是不只服務端要驗證客戶端的身份,客戶端也要驗證服務端的身份。說白了就是客戶端和服務端各自生成一個密鑰對,私鑰本身保存,公鑰發給對方。這種狀況通常用在系統與系統的對接上。

爲何須要雙向認證

假設C系統要訪問S系統的服務,S系統對外提供的數據安全級別比較高,只有受信系統才能訪問。假設目前只容許C系統訪問。

S系統爲了保證信息安全傳輸,決定生成一對密鑰,私鑰本身保存,公鑰發給C系統。C系統訪問S的時候,會用S的公鑰將消息進行加密發給系統SS用私鑰進行解密。

若是這個時候竊密者B系統偷偷拿到的S提供給C的公鑰,而後BS的公鑰加密消息以後發送給系統S,獲取相應的數據,那麼S是沒辦法判斷出請求的消息是來自C仍是來自竊密者B

如何保證消息來自於受信系統C呢?通過協商,C系統也生成一對密鑰,私鑰本身保存,公鑰發給系統S

CS發送請求的時候,C先將要發的消息,假設爲M,進行一次Hash運算,獲得一個固定長度的Hash值,這個值通常稱爲數字摘要。而後C用本身的私鑰對這個數字摘要進行加密,加密後的值稱爲數字簽名,其實跟現實中咱們在文件中進行手寫簽名是一個意思。

C系統將數字簽名和要發送的消息M,一塊兒用S的公鑰作一次加密以後發送給系統S

S收到消息以後,先用本身的私鑰對消息進行解密,解密以後,獲得C的數字簽名和消息M。這個時候關鍵的一步來了,就是驗籤,驗證消息是不是C發來的。

首先SC的公鑰對簽名進行解密操做,解密完成後會獲得一個摘要值,咱們稱之爲D。能解開就證實消息是C發來的。S還會用和C同樣的Hash算法對消息M進行Hash運算,這樣將會獲得一個摘要值,咱們稱之爲D‘,若是DD’相同就證實消息沒有被篡改過。

總結

上面的雙向認證過程也是有漏洞的,只不過相比於單項認證,下降了被破譯的風險而已。注意,世界上不存在絕對安全的系統,即使是如今逐漸流行起來的生物識別系統。咱們所作的各類安全措施都只是在下降系統被破解的風險而已。

就像家裏的防盜門,只能防君子不能防小人。


推薦閱讀

1. Java併發編程那些事兒(十)——最後的總結

2. 一篇小文帶你走進RabbitMQ的世界

3. Awk這件上古神兵你會用了嗎

4. 手把手教你搭建一套ELK日誌搜索運維平臺

·END·
 

花括號MC

Java·大數據·我的成長

微信號:huakuohao-mc
相關文章
相關標籤/搜索