加密那點事

加密是個神奇而古老的技術,被應用於戰爭、貿易等場景,而最近的炙手可熱的比特幣和區塊鏈技術又讓某些極為小眾的計算機專業領域的加密技術進入大家視野,例如HASH、非對稱加密演算法RSA這些關鍵詞。
資料加密在區塊鏈技術實現裡面起到至關重要的作用,可以說沒有加密技術對交易資訊保安的保證,就沒有區塊鏈被廣泛使用的可能性,而用到的具體的加密技術就是誕生與19世紀70年代的非對稱加密演算法:RSA,由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出,RSA是他們三人姓氏開頭字母的拼寫
(發現西方人很喜歡用名字命名其工作成果,例如笛卡爾、牛頓、馮諾依曼架構等多如牛毛,而國人更願意用概念和功能來命名)。
接下來咱們聊聊什麼是加密,如何加密和發展過程。
首先,大概大家都知道為什麼要加密,那我們來梳理總結一下,通常我們希望我們的資訊保安,需要做到哪幾點?
- 資訊傳輸過程中不會被洩露(被人擷取後破解)
- 資訊在傳輸過程中不被篡改(例如雍正十四改成第四)
- 資訊歸屬身份證明(你真的是你,這個資訊真的是來自組織的嗎?),以及防抵賴
總結完以後,細想一下是不是發現,單靠一個加密是無法同時解決以上幾個問題呢?
是的,加密其實只能解決第一項,防洩露,而要想同時解決以上三個問題,就得把PKI(Public Key Infrastructure,公開金鑰基礎設施規範)抬出來一起說道說道了。
我們知道了要保證資訊保安和資訊可信,就要同時解決上面提到的三個問題,那就來看看從古至今,是如何通過技術的發展一步步做到的。
1,如何防洩漏?
答案是加密!
對稱加密
演算法+原文+祕鑰=密文
,同樣,正確的使用 演算法+密文+祕鑰
就能夠得到原文。
如圖:

這就是傳說中的 對稱加密
,其實很好理解,加密、解密用的同一套金鑰就是對稱加密法。
解密是個逆向過程,也需要用到同樣的演算法和密文,所以要求雙方需都要做好演算法和祕鑰的保護措施,被別人知道其中之一,密文就可能被破解。
所以說,我們現在明白戰爭時期的那個密碼本是多麼的重要,為了它不惜犧牲幾條姓名,但其實你明白它的重要性以後,就可以理解了,萬一洩露了密碼本,敵人就可能通過擷取的密文和密碼本推算出原文,還記得電影《風聲》中的劇情嗎,是不是很殘酷?
因此,對稱加密要求雙方都要保護好這個金鑰,絕對不能洩露,真的是鴨梨山大呀,所以多方資訊傳輸的成本和代價非常高。
而對稱加密法比較典型的演算法有DES(Data Encryption Standard[資料加密標準])。
非對稱加密
整個過程是: 演算法+原文+公鑰/私鑰=密文、演算法+密文+公鑰/私鑰=原文
,如圖:

(注意,公鑰加密,私鑰解密;反之,私鑰加密,公鑰解密)
前面說到大家保護密碼本(金鑰)常常會付出了血的代價,即使在和平年代也是非常不安全的,因此,一些專家就想出了更為精妙的想法,那就是所謂的非對稱加密法,(一些事實被抽象和包裝出一些概念以後往往會增加理解的成本甚至誤導),非對稱指的是倆頭用的金鑰不對稱,而不是其他。
所以,為了降低儲存金鑰的負擔,發明了 非對稱加密
,演算法是公開的,有倆把鑰匙,一把鑰匙公開,另一把私有,所以稱為非對稱,通常一方只要把私鑰儲存好基本上就萬事大吉了。
詳細的工作流程:

這個過程是,對方要想給你寫加密信,只需要用你的公鑰把原文加密發出去,不怕別人擷取,因為他沒有私鑰,只有你能解開,反之也是一樣的,只要對方把自己的私鑰保護好,資訊就不會洩露和破解,相對於對稱加密的雙方都要保護金鑰安全多了。
另外,這裡的公鑰和私鑰理論上通常沒有明確定義之間的不同,只是在使用上做了人為的區分,本身是相通的,私鑰加密也可以用公鑰解開,有一些特殊場景做了區別處理的對待,這裡不做討論。
2,如何防篡改(十四改成第四)
答案是簽名(摘要+金鑰加密)
原文 -> HASH ->金鑰加密 = 簽名
你寫了一篇文章,如何確保它在傳播過程中不被別人修改呢?
或者在比特幣中的應用,“小花借了小明5元”,萬一被小明改成50元?
辦法是,我們可以對這句話或文章進行簽名,就是要在你說的那句話上加上你的唯一標記。
簽名的內容其實也是一個加密後的結果,簡單的來說就是非對稱加密的另一種用途,
過程是,一方用私鑰和文章加密生成一個東西叫簽名,然後把這個簽名和文章一同發出去,
收到的一方用公鑰解開你發過來的簽名,得到原文,然後和發過來的文章內容進行比對,看是否相同,就知道文章有沒有被篡改了。
通常分為以下的三個步驟:
摘要 簽名
例如下圖,上面是原文,下面是簽名:

對方收到以後,也是三個步驟校驗:
- 對文字進行HASH計算,得到摘要;
- 用你的公鑰解開這個signature(如果別人改了這個signature,用你的公鑰就無法解開了),得到加密前的摘要內容;
- 比對倆個摘要的內容,就真相大白了。
這是非對稱加密的另一個使用場景,防篡改,而非對稱法的典型實現演算法就是本文開頭說到的RSA加密演算法。
3,身份證明(如何證明我收到的是對的那個人或機構發給我的呢?)
答案是找個靠譜的機構做背書

說白了,不管什麼加密方式,解決都是資訊本身的安全問題,單獨並不能解決信任問題,必須要有獨立第三方出來提供證據。
例如上圖,是一個基於RSA非對稱加密的Https網站和使用者互動流程圖,整個過程核心任務是交換加密協議,建立安全通道,但對方是誰,彼此是無法得知的,因為信任關係不是個技術問題,這時候就需要一個權威機構出來說話了,辨別真假美猴王!
這個機構通常是"證書中心"(certificate authority,簡稱CA),例如中國金融認證中心(CFCA),給Https網站頒發證書,在你拿到對方公鑰的時候,裡面會包含CA發行機構的標識,你可以對其進行校驗,當然,瀏覽通常會做這個校驗,沒有通過可能是李鬼而不是你要找的李逵。
如果是個網站,會與本地證書管理器安裝的證書列表進行比對,檢視是否包含在內,如果沒有出現,瀏覽器會告訴你,這個網站十有八九不可靠。
最後
我們開頭提到的PKI,就是以上三者的完整結合,就是PKI公開金鑰基礎設施規範的基本內容,通過PKI來保證資訊傳輸的保密性、完整性、身份的真實性和抗抵賴。
前人栽樹,後人乘涼,我們在享受各種技術帶來的便利的同時,也不要忘記曾經為之努力過的前輩們,感謝他們,讓我們生活在資訊相對安全的環境下,放心的在網上交換重要的資訊,甚至金錢交易網路支付等!