Hello,揭開區塊鏈中密碼學的神秘面紗

區塊鏈兄弟社群,區塊鏈技術專業問答先行者,中國區塊鏈技術愛好者聚集地

Hello,揭開區塊鏈中密碼學的神秘面紗

作者:小葉與小茶

原文連結:http://t。cn/E48QqQi

本文約4800字+,閱讀(觀看)需要28分鐘

著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

密碼學有著深刻的數學背景,看似一門高高在上的貴族知識體系。能夠吧啦吧啦一些密碼學的名詞術語,有助於迅速建立滿滿的逼格。

因此,在這套筆記的第一部分,彙總一些基本的密碼學概念:

密碼

單向雜湊

訊息認證碼

數字簽名

數字證書

偽隨機數生成器

密碼學工具箱

隱寫術

資訊保安的常識

為了方便理解,定義幾個角色,後面會時不時的進行引用。其實,他(她)們都是經典密碼學著作中約定俗成的著名人物。

姓名說明Alice

漂亮姑娘

Bob

帥氣小夥

Eve

偷窺癖,熱衷於竊聽通訊內容

Mallory

破壞王,喜歡偽造資訊,妨礙正常通訊

Trent

可信的第三方

Victor

驗證者

基本概念一:密碼

Alice 和 Bob 正在熱戀中,難免傳送一些肉麻的訊息。訊息會在多臺通訊裝置間中轉,很有可能被 Eve 偷看。於是 Alice 和 Bob 對訊息進行了加密處理,即使被 Eve 竊聽,其獲取的也是密文,無法得知具體的訊息內容。也就是說,密碼保證了資訊的 機密性 。

從明文生成密文的步驟,稱為加密演算法 ,將密文還原為明文的步驟,稱為解密演算法 ,加密演算法和解密演算法統稱為密碼演算法 。

密碼演算法由兩個重要的部分組成,一個是計算步驟,一個是金鑰,基本原理如下圖所示:

Hello,揭開區塊鏈中密碼學的神秘面紗

密碼演算法

在現代密碼演算法思想中,密碼演算法往往可以公開,但金鑰是必須嚴格保密。這就好比門鎖製造商會用相同方法批次生產門鎖,但每個門鎖都配套獨有的鑰匙,一旦鑰匙丟失,級別再強的門鎖也可以被輕易開啟。

而根據金鑰的使用方法,可以將密碼演算法分為 對稱密碼演算法 和 非對稱密碼演算法 兩種,後者也常常稱為 公鑰密碼演算法 。

對稱密碼演算法的其他別名:公共金鑰密碼演算法、傳統密碼演算法、私鑰密碼演算法、共享金鑰密碼演算法。

對稱密碼演算法:加密和解密時採用同一金鑰,如下圖所示:

Hello,揭開區塊鏈中密碼學的神秘面紗

對稱密碼演算法

非對稱密碼演算法:加密和解密時採用不同金鑰,如下圖所示:

Hello,揭開區塊鏈中密碼學的神秘面紗

非對稱密碼演算法

非對稱密碼演算法體系是20世紀70年代出現的,現代計算機和網際網路安全體系,很大程度是基於非對稱密碼演算法體系構建起來的。當然,現代安全體系往往會結合非對稱密碼演算法和對稱密碼演算法的優勢,形成了混合密碼演算法體系。

基本概念二:單項雜湊

如果你仔細觀察,在一些提供軟體下載的網站中,除了提供二進位制的目標檔案,還往往宣告一個MD5或SHA字串。這說明軟體釋出者具備安全意識,擔心有人篡改其釋出的軟體,在其中植入一些惡意程式。這個字串就是用單項雜湊函式計算出來的雜湊值,雜湊值也被形象的稱為 “資料指紋” 。

現實生活中,偵查員透過將犯罪現場遺留的指紋與嫌疑人的指紋進行比對來確定是否存在關聯,而計算機也可以利用資料指紋來確認兩段二進位制資料是否完全一致。我們不需要一一對比二進位制資料,只需要一一比對其資料指紋即可。單項雜湊函式能夠保證不同的二進位制序列產生不同的資料指紋 。

總結一句話:單項雜湊函式保證的不是資料的機密性,而是資料的完整性,或者說不可篡改性。

基本概念三:訊息認證碼

訊息認證碼(MAC,Message Authentication Code)是一種能夠保證資料完整性和提供認證的密碼技術,其主要作用是在保證資料完整性之外,確認 訊息是否來自期望的通訊物件 。

基本概念四:數字簽名

在通訊的過程中,保證了資料完整性,對通訊物件進行了認證還不夠,通訊雙方還可能對傳送的訊息進行 “否認” 。比如 Alice 向 Bob 寫了一封信,但後來又有點後悔,謊稱“當初根本沒有寫過這封信”,這種行為就稱為“否認”。

能夠確保完整性、提供認證並防止否認的技術,就是 “數字簽名” 。顧名思義,就是對自己傳送的內容進行簽字,只不過採用的是密碼技術。Alice 在信的內容之後簽上自己的名字發給 Bob,Bob 收到後對改簽名進行 簽名驗證 ,驗證通過後,就代表契約生效,Alice 事後也無法進行否認。

Bob 有兩把鑰匙,一把叫做公鑰,一把叫做私鑰。

Hello,揭開區塊鏈中密碼學的神秘面紗

Bob 把公鑰給了他的朋友們,Pat、Doug、Susan 每人都有一把。

Hello,揭開區塊鏈中密碼學的神秘面紗

Susan 想給 Bob 寫一封密信,用 Bob 的公鑰進行加密即可。而 Bob 用私鑰進行解密。只要 Bob 的私鑰不洩漏,別人就無法開啟 Susan 的這封密信。

Hello,揭開區塊鏈中密碼學的神秘面紗

Bob 給 Susan 回信,為了說明這封信就是自己寫的,需要給這封信加蓋一個印記,好比皇帝下的聖旨必須加印玉璽是一個道理:

1)第一步,Bob 對回信內容進行 Hash 計算,生成 Digest(摘要)。這裡要說明一下,一旦有人篡改了信件內容,Hash 演算法保證了摘要一定會發生變化,而且也不可能透過摘要推算信件內容。

Hello,揭開區塊鏈中密碼學的神秘面紗

2)第二步,Bob 用私鑰對這個摘要進行加密,生成了數字簽名。

Hello,揭開區塊鏈中密碼學的神秘面紗

3)第三步,Bob 把數字簽名新增到信件上,好比增加一句 “此致,XXX敬上”。

Hello,揭開區塊鏈中密碼學的神秘面紗

4)第四步,Bob 把簽了名的信件傳送給 Susan。

5)第五步,Susan 收到信件後,用 Bob 的公鑰解密數字簽名,成功得到信件摘要,證明此信件確實源自 Bob。同時,Susan 也可以對信件內容再進行 Hash 計算得到一份摘要,對比兩份摘要,如果內容完全一致,證明信件內容沒有被篡改過。

Hello,揭開區塊鏈中密碼學的神秘面紗

基本概念五:數字證書

透過數字證書,能夠證實信件來源於可信的一方,然而,如果 Doug 想假冒 Bob 和 Susan 進行通訊怎麼辦?繼續沿用上一節的例子:

Bob 可能會偷偷使用 Susan 的電腦,將 Bob 的公鑰換成自己的公鑰。而 Susan 沒有發覺使用的公鑰已經是 Doug 的了,而 Doug 就用自己的私鑰進行上述的數字簽名過程,偽裝 Bob 與 Susan 進行通訊。

而 Susan 終於發現事情不對勁,感覺自己使用的公鑰有問題,於是她想到一個辦法,希望 Bob 能夠到一個權威機構對自己的公鑰進行公證,這個權威結構也就是 “證書中心(Certificate Authority,簡稱CA)” 。證書中心於是用自己的私鑰,對 Bob 的公鑰和一些相關資訊一起加密,生成 “數字證書”(Digital Certificate)。

Hello,揭開區塊鏈中密碼學的神秘面紗

Bob 拿到數字證書以後,就可以放心了。以後再給蘇珊寫信,只要在簽名的同時,再附上數字證書就行了。而 Susan 收到信件後,也先用 CA 的公鑰解開數字證書,拿到經過認證的公鑰,再用這個公鑰去驗證數字簽名,以此來確認是否真的來自 Bob。

這就是數字證書作用。數字證書好比駕照,駕照上記錄了駕駛員的姓名、年齡、出生日期等資訊,並由交管部門在上面蓋章,以示經過權威部門鑑定,可以信任。同理,數字證書也同樣記錄了姓名、組織、電子郵箱、以及屬於此人的 公鑰 ,並由權威的 認證機構(Certification Authority,CA) 施加數字簽名,也就是說,權威認證機構認定該公鑰的確屬於證書上記錄的人或組織。

實際情況中,往往對數字證書申請者身份的認證,會由一個專門的 註冊機構(Registration Authority,RA) 進行處理,以便讓 CA 能專注於數字證書的制發和維護。RA 透過與金融機構,如信用報告機構進行合作,對申請人提供的業務和身份資訊進行核實,核實通過後通知 CA 頒發相應的證書。

Hello,揭開區塊鏈中密碼學的神秘面紗

CA機構

基本概念六:偽隨機數生成器

偽隨機數生成器(Pseudo Random Number Generator,PRNG)是一種能夠模擬產生隨機數序列的演算法。隨機數是密碼演算法的重要技術基礎,承擔著 生成金鑰 的重要指責。如果偽隨機數生成演算法不好,就容易被竊聽者推測出來,對通訊的機密性產生威脅。

基本概念七:密碼學工具箱

“密碼學家的工具箱” 這個比喻出自布魯斯。施奈爾寫作的《網路資訊保安的真相》一書。如下圖所示,密碼學的幾項技術在資訊保安中發揮著至關重要的作用,解決了不同維度的威脅問題,讓我們再羅列一下這些技術:

對稱密碼

非對稱密碼

單項雜湊函式

訊息認證碼

數字簽名

Hello,揭開區塊鏈中密碼學的神秘面紗

密碼學家的工具箱

基本概念八:隱寫術

為了安全的進行通訊,人們進行了很多的發明,而密碼學的本質是一種讓資訊變得無法解讀的技術。還有一種叫做隱寫術的技術,則走的是另外一個路徑,它不是讓訊息內容變得無法解讀,而是將真正的訊息巧妙的進行隱藏,是資訊科技的“障眼法”。

舉一個小例子(抄自《圖解密碼技術》,結城浩):

我 —— 我們先準備一段話

很 —— 很容易看懂的就可以

喜 —— 喜聞樂見的當然更好

歡 —— 歡迎你嘗試將另一句話嵌在這段話中

你 —— 你會發現這其實就是一段隱寫術

隱寫術是一門古老的藝術,遠不是上面寫的這麼簡單,是一個非常有意思的領域。將隱寫術與密碼技術相結合,揚長避短,能夠為帶來更強大的資訊保安保障,後面我也會更深入的進行研究。

基本概念九:資訊保安的常識

這裡寫的一些內容可能會有悖於常識,但細細品味後,更會覺得密碼學是一個有趣的領域。

第一、不要使用保密的密碼演算法

關於秘密,歷史和生活告訴我們,越少的人知道,就越安全。然而,這個經驗用在密碼學中卻不適用,主要有兩個原因:

密碼的演算法早晚會公諸於世,一旦到了那一天,依靠對密碼演算法本身保密而建立的安全體系將土崩瓦解,而那些公開密碼演算法從一開始就沒想著要保密,因此演算法的暴露根本不影響其安全強度。這其實是一種思想,現代密碼體系正是基於這個思想構建的。

依靠個人或某個組織開發高強度的密碼演算法是非常困難的。世界上公認的高強度密碼演算法,幾乎都是經過密碼破譯者長期嘗試破解未果而生存帶來的。因此,如果自認為偷偷搞出來的一套“不為人知”的密碼演算法具有更高的安全性,其實是有點自不量力了。

第二,使用低強度的密碼比不進行任何加密更危險

這觀點更讓人懵逼了。其實這還是在講述一個思想,那就是人們容易透過“密碼”這個詞獲得一種”錯誤的安全感”,我們必須清醒地認識到 資訊被加密 != 安全強度高 這個道理。使用低強度的密碼,自以為獲得了安全級別,在處理機密資訊時,意識深處會放棄警惕性,這是最危險的。

第三,任何密碼總有一天會被破解

如果有人向你推銷一種不可能被破解的密碼體系時,你一定要打起精神,不要被其欺騙。當然,嚴格來說,一次性密碼本 是絕對不會被破解的(原因在後面的文章中講述),然而這種密碼技術是不具備實際用途的;還有一種可能會實現理想的途徑 —— 量子密碼,只是現在還為時過早。不要忘記,擁有了量子武器的盾牌,面臨的也將是被量子武裝的長矛,輸贏還是玄學。

第四,密碼只是資訊保安的一部分

水流的聰明之處在於,它會巧妙的繞開石頭。攻擊者面對密碼技術時,也未必就會選擇正面強攻。也許繞道攻擊資訊持有者的電腦,直接獲取加密前或解密後的檔案更簡單。比起“騙子”,再強大的CPU也會顯得很傻。結城浩在《圖解密碼技術中》說的很棒:

要保證良好的安全性,就需要理解“系統”這一概念本身的性質。複雜的系統就像一根由無數環節相連組成的鏈條,如果用力拉,鏈條就會從其中最脆弱的環節斷開。因此,系統的強度取決於其中最脆弱的環節的強度。

最脆弱的環節並不是密碼,而是人。

以上,就是密碼學的基本概念。

文章釋出只為分享區塊鏈技術內容,版權歸原作者所有,觀點僅代表作者本人,絕不代表區塊鏈兄弟贊同其觀點或證實其描述。