加密那點事


 

加密是個神奇而古老的技術,被應用於戰爭、貿易等場景,而最近的炙手可熱的比特幣和區塊鏈技術又讓某些極爲小衆的計算機專業領域的加密技術進入大家視野,例如HASH、非對稱加密算法RSA這些關鍵詞。

數據加密在區塊鏈技術實現裏面起到至關重要的作用,可以說沒有加密技術對交易信息安全的保證,就沒有區塊鏈被廣泛使用的可能性,而用到的具體的加密技術就是誕生與19世紀70年代的非對稱加密算法:RSA,由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出,RSA是他們三人姓氏開頭字母的拼寫
(發現西方人很喜歡用名字命名其工作成果,例如笛卡爾、牛頓、馮諾依曼架構等多如牛毛,而國人更願意用概念和功能來命名)。

接下來咱們聊聊什麼是加密,如何加密和發展過程。

首先,大概大家都知道爲什麼要加密,那我們來梳理總結一下,通常我們希望我們的信息安全,需要做到哪幾點?

  1. 信息傳輸過程中不會被泄露(被人截取後破解)
  2. 信息在傳輸過程中不被篡改(例如雍正十四改成第四)
  3. 信息歸屬身份證明(你真的是你,這個信息真的是來自組織的嗎?),以及防抵賴

總結完以後,細想一下是不是發現,單靠一個加密是無法同時解決以上幾個問題呢?
是的,加密其實只能解決第一項,防泄露,而要想同時解決以上三個問題,就得把PKI(Public Key Infrastructure,公開密鑰基礎設施規範)擡出來一起說道說道了。

我們知道了要保證信息安全和信息可信,就要同時解決上面提到的三個問題,那就來看看從古至今,是如何通過技術的發展一步步做到的。

1,如何防泄漏?

答案是加密!

對稱加密

算法+原文+祕鑰=密文,同樣,正確的使用 算法+密文+祕鑰 就能夠得到原文。

如圖:

 

 

這就是傳說中的 對稱加密,其實很好理解,加密、解密用的同一套密鑰就是對稱加密法。
解密是個逆向過程,也需要用到同樣的算法和密文,所以要求雙方需都要做好算法和祕鑰的保護措施,被別人知道其中之一,密文就可能被破解。

所以說,我們現在明白戰爭時期的那個密碼本是多麼的重要,爲了它不惜犧牲幾條姓名,但其實你明白它的重要性以後,就可以理解了,萬一泄露了密碼本,敵人就可能通過截取的密文和密碼本推算出原文,還記得電影《風聲》中的劇情嗎,是不是很殘酷?
因此,對稱加密要求雙方都要保護好這個密鑰,絕對不能泄露,真的是鴨梨山大呀,所以多方信息傳輸的成本和代價非常高。

而對稱加密法比較典型的算法有DES(Data Encryption Standard[數據加密標準])。

非對稱加密

整個過程是:算法+原文+公鑰/私鑰=密文、算法+密文+公鑰/私鑰=原文,如圖:

 

 

(注意,公鑰加密,私鑰解密;反之,私鑰加密,公鑰解密)
前面說到大家保護密碼本(密鑰)常常會付出了血的代價,即使在和平年代也是非常不安全的,因此,一些專家就想出了更爲精妙的想法,那就是所謂的非對稱加密法,(一些事實被抽象和包裝出一些概念以後往往會增加理解的成本甚至誤導),非對稱指的是倆頭用的密鑰不對稱,而不是其他。

所以,爲了降低保存密鑰的負擔,發明了非對稱加密,算法是公開的,有倆把鑰匙,一把鑰匙公開,另一把私有,所以稱爲非對稱,通常一方只要把私鑰保存好基本上就萬事大吉了。

詳細的工作流程:

 

 

 

這個過程是,對方要想給你寫加密信,只需要用你的公鑰把原文加密發出去,不怕別人截取,因爲他沒有私鑰,只有你能解開,反之也是一樣的,只要對方把自己的私鑰保護好,信息就不會泄露和破解,相對於對稱加密的雙方都要保護密鑰安全多了。
另外,這裏的公鑰和私鑰理論上通常沒有明確定義之間的不同,只是在使用上做了人爲的區分,本身是相通的,私鑰加密也可以用公鑰解開,有一些特殊場景做了區別處理的對待,這裏不做討論。

2,如何防篡改(十四改成第四)

答案是簽名(摘要+密鑰加密)

原文 -> HASH ->密鑰加密 = 簽名

你寫了一篇文章,如何確保它在傳播過程中不被別人修改呢?

或者在比特幣中的應用,“小花借了小明5元”,萬一被小明改成50元?

辦法是,我們可以對這句話或文章進行簽名,就是要在你說的那句話上加上你的唯一標記。
簽名的內容其實也是一個加密後的結果,簡單的來說就是非對稱加密的另一種用途,
過程是,一方用私鑰和文章加密生成一個東西叫簽名,然後把這個簽名和文章一同發出去,
收到的一方用公鑰解開你發過來的簽名,得到原文,然後和發過來的文章內容進行比對,看是否相同,就知道文章有沒有被篡改了。

通常分爲以下的三個步驟:

  1. 爲了使簽名的內容不至於太大,往往會從原文章中提取部分關鍵內容,作爲簽名的原文,一般是文章的HASH值,得到一個摘要
  2. 用自己的私鑰對摘要加密(當然你也可以省掉第一個步驟,直接在原文上加密,只是內容太大,不方便傳輸和校驗)得到簽名
  3. 把簽名(signature)附在原文上一同發出去。

例如下圖,上面是原文,下面是簽名:

 

 

對方收到以後,也是三個步驟校驗:

  1. 對文本進行HASH計算,得到摘要;
  2. 用你的公鑰解開這個signature(如果別人改了這個signature,用你的公鑰就無法解開了),得到加密前的摘要內容;
  3. 比對倆個摘要的內容,就真相大白了。

這是非對稱加密的另一個使用場景,防篡改,而非對稱法的典型實現算法就是本文開頭說到的RSA加密算法。

3,身份證明(如何證明我收到的是對的那個人或機構發給我的呢?)

答案是找個靠譜的機構做背書

 

 

說白了,不管什麼加密方式,解決都是信息本身的安全問題,單獨並不能解決信任問題,必須要有獨立第三方出來提供證據。
例如上圖,是一個基於RSA非對稱加密的Https網站和用戶交互流程圖,整個過程核心任務是交換加密協議,建立安全信道,但對方是誰,彼此是無法得知的,因爲信任關係不是個技術問題,這時候就需要一個權威機構出來說話了,辨別真假美猴王!

這個機構通常是"證書中心"(certificate authority,簡稱CA),例如中國金融認證中心(CFCA),給Https網站頒發證書,在你拿到對方公鑰的時候,裏面會包含CA發行機構的標識,你可以對其進行校驗,當然,瀏覽通常會做這個校驗,沒有通過可能是李鬼而不是你要找的李逵。

如果是個網站,會與本地證書管理器安裝的證書列表進行比對,查看是否包含在內,如果沒有出現,瀏覽器會告訴你,這個網站十有八九不可靠。

最後

我們開頭提到的PKI,就是以上三者的完整結合,就是PKI公開密鑰基礎設施規範的基本內容,通過PKI來保證信息傳輸的保密性、完整性、身份的真實性和抗抵賴。

前人栽樹,後人乘涼,我們在享受各種技術帶來的便利的同時,也不要忘記曾經爲之努力過的前輩們,感謝他們,讓我們生活在信息相對安全的環境下,放心的在網上交換重要的信息,甚至金錢交易網絡支付等!

參考

  1. https://www.ubisecure.com/iot/cryptographic-identities-for-devices/
  2. http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html
  3. https://blog.cloudflare.com/keyless-ssl-the-nitty-gritty-technical-details/
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章