原創:花括號MC(微信公衆號:huakuohao-mc)。關注JAVA基礎編程及大數據,注重經驗分享及我的成長。算法
目前你們常說的信息加密技術就兩種,對稱加密和非對稱加密。編程
所謂的對稱加密就是加密和解密用同一份密鑰。對稱加密的好處就是加密速度快,可是缺點也很明顯,必定要保存好這份密鑰,若是密鑰丟失,就會帶來很大的安全風險。並且若是與服務端進行通訊的客戶端比較多的話,服務端要管理不少份不一樣的密鑰。瀏覽器
爲了解決對稱加密的缺點,人們提出了非對稱加密,非對稱加密技術也是目前應用最普遍的加密技術。所謂的非對稱加密就是生成一對密鑰,分爲公鑰和私鑰。私鑰本身保存,公鑰發佈出去。用私鑰加密的信息只能用公鑰解密,用公鑰加密的信息也只能用私鑰解密。安全
假設你的好朋友鐵蛋,常常網購。購物網站爲了保證信息安全傳輸,決定生成一對密鑰,私鑰本身保存,公鑰發給鐵蛋。鐵蛋發給購物網站的信息都是用公鑰加密的信息,購物網站收到後,用本身的私鑰進行解密。這樣即便傳輸途中,信息被截獲,也沒辦法破解,由於沒有私鑰。 微信
這個時候有個黑客,作了一個假的購物網站,頁面和真的網站一摸同樣,連網址都很類似。同時也生成了一對密鑰,最重要的是黑客偷偷的把鐵蛋電腦裏真購物網站的公鑰給替換成了假購物網站的公鑰。markdown
當鐵蛋打開假的網址進行購物操做時,會用假的公鑰進行加密而後把消息發給假的網站,整個通訊過程,鐵蛋都沒有發現本身被騙。 併發
鐵蛋之因此被騙,是由於他不知道電腦裏的真公鑰已經被換成假的了。爲了解決這個問題,出現一個認證機構,這個機構會對網站的公鑰進行加密簽名並造成一個證書,這個證書就是你們常說的CA
證書,這個機構就是CA
。運維
只要鐵蛋電腦裏面安裝的是通過CA
認證的證書,在訪問的時候,瀏覽器就會顯示出一把小鎖,提示能夠安全訪問,若是沒有通過認證,瀏覽器就會提示鐵蛋有風險。oop
鐵蛋常常在多個網站購物,難道須要每一個網站都保存一份證書?其實不用這樣,咱們的電腦裏面通常都有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·
Java·大數據·我的成長
微信號:huakuohao-mc