Java加密體系(二)加密基礎概念淺析

背景介紹

大黃和小涵是好朋友,大黃的成績在班級名列前茅,小涵的成績卻總是不如人意,于是在一次考試前大黃和小涵約定好,大黃通過各種方式給小涵傳答案,幫助小涵渡過難關,但是監考老師其他因素的影響,讓兩人倍感緊張,一場考試風云即將拉開序幕......

第一集,機智的老師!

考慮到小紙條被監考老師發現的風險,大黃決定將選擇題答案變得隱蔽一些。

  • 大黃:ABCD分別對應1、2、3、4,這樣老師發現也不知道是考試答案!
  • 小涵:這種方式大家都知道的,老師是很容易發現這種規律的呀,被發現就慘啦!
  • 大黃:。。。

這種方式對應的是加密中的編碼方式,如base64編碼,編碼表是公開的,大家都可以通過計算,將密文映射成加密前的字符串,嚴格的來說,這并不是一種加密算法。

第二集,全班雷同!

  • 大黃:我自己定義一套加密解密的規則,要給你傳答案之前,先把這個規則用紙條給你傳過去,然后給你傳答案,你收到答案以后,根據我的那套規則進行解密,這樣安全多了,如果沒有規則的話,別說老師,就連你都不知道是什么!
  • 小涵:嗯,有道理,可是如果你的這套規則被其他同學截獲了,這樣我們的答案會被全班傳閱的,全班雷同呀!
  • 大黃:。。。

這個方案對應的是對稱加密算法,下面是維基百科的解釋:

對稱密鑰加密(英語:Symmetric-key algorithm)又稱為對稱加密私鑰加密、共享密鑰加密,是密碼學中的一類加密算法。這類算法在加密和解密時使用相同的密鑰,或是使用兩個可以簡單地相互推算的密鑰。

使用對稱加密算法的的確可以完成加密解密的過程,這也是我們經常會使用到的加密算法,如DES、3DES、AES等,對稱加密算法的缺點是雙方都使用同一個密鑰并且是公開的,如果密鑰被人截獲,那么雙方之后的通信內容也就變得赤裸。

第三集,一道選擇題做半小時!

  • 大黃:我們搞兩套密鑰,公鑰和私鑰,使用的方法是這樣的,我把私鑰留下,把公鑰傳給你,你用公鑰把你不會的題加密再傳給我,只有我的獨家私鑰才能解開這個內容,其他人只會看的頭大,反之,你也搞一套公鑰和私鑰,公鑰給我,我用你的公鑰加密,你解密的時候用你自己的私鑰解密,這樣我們就不怕被截獲啦!
  • 小涵:嗯嗯!這個安全多了,但是這么算太麻煩了,又是生成密鑰,又是解密的,步驟繁瑣,每一次傳都好麻煩,這是一道5分的選擇題做半個小時的節奏呀,不劃算。
  • 大黃:。。。
    這種方法對應的就是非對稱加密算法,維基百科的解釋:

公開密鑰加密(英語:Public-key cryptography),也稱為非對稱加密(英語:asymmetric cryptography),是密碼學的一種算法,它需要兩個密鑰,一個是公開密鑰,另一個是私有密鑰;一個用作加密的時候,另一個則用作解密。使用其中一個密鑰把明文加密后所得的密文,只能用相對應的另一個密鑰才能解密得到原本的明文;甚至連最初用來加密的密鑰也不能用作解密。由于加密和解密需要兩個不同的密鑰,故被稱為非對稱加密;不同于加密和解密都使用同一個密鑰的對稱加密。雖然兩個密鑰在數學上相關,但如果知道了其中一個,并不能憑此計算出另外一個;因此其中一個可以公開,稱為公鑰,任意向外發布;不公開的密鑰為私鑰,必須由用戶自行嚴格秘密保管,絕不透過任何途徑向任何人提供,也不會透露給要通信的另一方,即使他被信任。

相對于對稱加密算法而言,非對稱加密加密更加安全,但是互相傳遞的效率并沒有對稱加密算法快。

第四集,我全都不會...

  • 大黃:效率問題可以解決!我們用第三集的非對稱加密算法傳遞第二集的對稱加密密鑰,當我們都擁有密鑰的時候,就不用每次都傳輸啦!
  • 小涵:哇,真棒,半小時后就可以坐等答案了!誒?要是我全都不會呢?每一次發送給你內容都特別多,這加密解密也很麻煩呀!
  • 大黃:。。。
    這個問題也是經常會遇到的,由于非對稱加密步驟繁瑣,且由于算法本身耗時相對較長,通常只使用非對稱加密算法對傳輸的秘鑰進行加密。

第五集,同學是老司機!

  • 大黃:既然你的情況比較特殊,我們可以采取另一種方式,我們對傳遞的消息生成一段密文,這段密文有這樣的特性:
    1、不管多少內容,加密后的密文都是固定的長度。
    2、同一種規則,多次對內容一致的答案,加密后的結果密文都是一樣的。
    3、不同的答案,生成不同的密文。
    4、這種規則是不可逆的,不能像一開始的1234一樣,可以被人反推回來。

  • 小涵:嗯,這樣的話,只要有人篡改了答案,我們就可以立刻發現,防止翻車,誒?那要是有人反水,他也是個老司機,知道我們的規則,順便把我們的密文也篡改了怎么辦?

  • 大黃:。。。

這種方法叫做消息摘要,如果傳輸的內容很多,又不是特別機密的內容,我們可以考慮對其進行編碼,然后將其摘要一起傳輸過去,如果內容被修改,接收方收到的明文生成的摘要與發送方發送的摘要是不同的,這時候可以及時發現被篡改,引用百度百科對消息摘要算法的解釋:

消息摘要算法的主要特征是加密過程不需要密鑰,并且經過加密的數據無法被解密,只有輸入相同的明文數據經過相同的消息摘要算法才能得到相同的密文。消息摘要算法不存在密鑰的管理與分發問題,適合于分布式網絡上使用。由于其加密計算的工作量相當巨大,所以以前的這種算法通常只用于數據量有限的情況下的加密,例如計算機的口令就是用不可逆加密算法加密的。

第六集,資深老司機

  • 大黃:我們可以結合上面的密鑰對的方式,我用私鑰對這段密文進行加密,你用公鑰解密!就算其他同學是老司機,知道我用了什么方法,但是他沒有我的私鑰呀,只能干瞪眼哈哈哈哈
  • 小涵:佩服佩服,但是我這里有個問題,大黃你生成秘鑰對,把公鑰傳給我,他獲取了你的公鑰,把他自己生成的公鑰傳遞給了我,為了節省時間,我只用一種加密規則(對稱加密),用公鑰加密,我以為是你的公鑰,但是實際上這個是他的公鑰!然后他收到了我的密文,獲得了秘鑰,他把這個秘鑰用你之前的公鑰加密,再還給你,這樣的話我們所有的內容都是赤裸裸的呀!這個人是資深老司機!
  • 大黃:。。。
    大黃提供的方式叫做數字簽名,大黃通過他的私鑰對摘要進行加密,這個過程叫做加簽,小涵通過大黃的公鑰進行解密,這個過程叫做驗簽,數字簽名的百度百科:

數字簽名(又稱公鑰數字簽名、電子簽章)是一種類似寫在紙上的普通的物理簽名,但是使用了公鑰加密領域的技術實現,用于鑒別數字信息的方法。一套數字簽名通常定義兩種互補的運算,一個用于簽名,另一個用于驗證數字簽名,就是只有信息的發送者才能產生的別人無法偽造的一段數字串,這段數字串同時也是對信息的發送者發送信息真實性的一個有效證明數字簽名是非對稱密鑰加密技術數字摘要技術的應用。

文中的“他”使用的方式叫做中間人攻擊,以下是百度百科的解釋:

中間人攻擊(Man-in-the-Middle Attack, MITM)是一種由來已久的網絡入侵手段,并且當今仍然有著廣泛的發展空間,如SMB會話劫持、DNS欺騙等攻擊都是典型的MITM攻擊。簡而言之,所謂的MITM攻擊就是通過攔截正常的網絡通信數據,并進行數據篡改和嗅探,而通信的雙方卻毫不知情。

第七集,活雷鋒小昆

  • 大黃:這樣我們可以找可靠的中間人小昆,你給他5包辣條好處費!我把我的公鑰和我的個人信息都給他,他自己生成一套秘鑰對,用他的私鑰把我的公鑰等信息生成證書發給我,這個摘要可以證明這個公鑰是我的公鑰!以后我傳遞給你的時候,給你小昆的證書,把我的密文放在后面,你收到證書以后,用小昆公鑰解密就可以了,這樣即使是資深老司機也沒辦法篡改,因為他沒有小昆的私鑰解不開的。
  • 小強:有道理!這樣就不怕資深老司機的干預啦。
    這種方法叫做數字證書,小昆就是證書授權機構CA(Certificate Authority) ,資深老司機就是圖謀不軌的黑客,數字證書百度百科如下:

數字證書就是互聯網通訊中標志通訊各方身份信息的一串數字,提供了一種在Internet上驗證通信實體身份的方式,數字證書不是數字身份證,而是身份認證機構蓋在數字身份證上的一個章或?。ɑ蛘哒f加在數字身份證上的一個簽名)。它是由權威機構——CA機構,又稱為證書授權(Certificate Authority)中心發行的,人們可以在網上用它來識別對方的身份。

總結:

考試要靠自己的實力,不要抄襲!這里只是為了方便讀者理解,換了一種方式來表達,本文簡單介紹了關于編碼、對稱加密、消息摘要、非對稱加密、數字簽名、中間人共計、數字證書的概念,其中關于數字證書的地方舉例可能有些勉強,并沒有繼續深入,在后面的文章會單獨開辟一篇專門講數字證書、自簽名證書、CA等知識。

參考資料:
1、掘金:https://juejin.im/post/5b1cc5c36fb9a01e8d6a3f80
2、百度百科:https://baike.baidu.com/
3、維基百科:https://zh.wikipedia.org/wiki/%E9%A6%96%E9%A1%B5
4、segmentfault:https://segmentfault.com/a/1190000004461428

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容