天天看點

區塊鍊中的密碼學(2):密碼學基本介紹

密碼學是計算機中比較基礎的學科,真正完全搞明白背後的原理,需要深厚的數學功底,涉及到的學科知識包括:高等數學、線性代數、機率論、抽象代數、數論等知識。

感興趣的同學可以就這個主題進行深入研究。對于一般的應用者,我們核心是先要知道好一些基本的密碼學算法,然後重點掌握算法的應用場景,邊界以及一些常見問題下密碼學的運用。

密碼學基本知識

密碼,最初的目的是用于對資訊加密,計算機領域的密碼技術種類繁多。但随着密碼學的運用,密碼還被用于身份認證、防止否認等功能上。

最基本的,是資訊加解密分為對稱加密(Sysmmetric Cryptography)和非對稱加密(Public-Key Cryptography,Asymmetric Cryptography),這兩者的差別是是否使用了相同的密鑰。

除了資訊的加解密,還有用于确認資料完整性(Integrity)的單向散列(One-Way Hash Function)技術,又稱密碼檢驗(Cryptographic Checksum)、指紋 (Fingerprint)、消息摘要 (Message Digest)。

資訊的加解密與資訊的單向散列的差別是,對稱與非對稱加密是可以通過密鑰解出明文,而單向散列是不可逆的。資訊的加解密,密文必定是不定長的,而單向散列可以是定長的。

結合密碼學的加解密技術和單向散列技術,又有了用于防止篡改的消息認證碼技術,防止僞裝的數字簽名技術以及認證證書。

應用場景

在上篇《提升密碼學的認知》中,我們提到,密碼學不是簡單的加解密,它核心要解決的問題是很豐富的。在這裡針對不同的應用場景,可以總結出下表:

威脅 特征 相應技術
竊聽 機密性 對稱、非對稱加密
篡改 完整性 單向散列、消息認證碼、數字簽名
僞裝 身份認證 消息認證、數字簽名
否認 不可否認 數字簽名

我們可以舉幾個常見的例子來說明密碼學的技術運用。

1. 檔案指紋

檔案指紋一般就是把一個檔案的内容或者頭尾截取一部分做一個Hash,用來辨別檔案的唯一性。2005年前後,網絡基礎設施還很差,很多檔案的下載下傳旁邊還放一個MD5碼,用來驗證下載下傳到本地的檔案是否正确。

當年做P2P檔案共享時,就用檔案指紋來标記同一個檔案,在索引的時候做好這些檔案的存儲點。使用者下載下傳的時候,就可以從過點一起下載下傳。

在用百度網盤的時候,會出現一個大檔案,瞬間上傳成功。核心技術是啥?其實就是檔案指紋。他在上傳的時候,先擷取本地檔案的指紋,然後去伺服器搜尋,如果找到同樣指紋的檔案,就不需要重新上傳,白占用帶寬和存儲,直接顯示上傳成功。

當然還會有git,整個都是圍繞檔案指紋來設計的。

2. 賬戶密碼存儲

前些年,一個網站在注冊賬戶的時候,經常明文存儲使用者的注冊密碼。結果在被脫庫,結果網站賬号和密碼都被洩漏。進而,這些黑客還拿着賬戶和密碼去其他常見的網站上去做嘗試,進而破解掉更多賬号。

這種安全事故屢見不鮮。就來随着各種Web開發架構的完善,大家開發意識逐漸加強之後,大家在知道要把密碼進行hash存儲。通過檢查hash值來判斷密碼的合法性。

後來有發現,隻hash密碼還是不夠,還需要加點随機的東西,稱之為salt(鹽),具備更高的安全性。

3. HTTPS

目前主流網站都已經換上HTTPS,大家在浏覽器的網站輸入欄左邊都能看到一個小标記。從HTTP到HTTPS其實是一個密碼學知識的廣泛運用。雖然知道HTTPS很早,但其背後的運作機制,一直不清楚。

前陣子特意買一本《深入淺出 HTTPS 從原理到實戰》,研究過後,總算搞明白。HTTPS的工作機制是一個典型的密碼學應用場景,不是簡單的某種密碼學算法,而是多種算法的組合,通過協定的方式,解決網頁通路的安全問題。

4. 區塊鍊中的應用

區塊鍊技術大量而廣泛地采用了各種密碼學技術,後期我們會逐一談到。

熱門技術研究

對于密碼學的學術進展我知之甚少。目前針對區塊鍊這方面領域,有幾個重要的密碼學技術在做積極探索。這裡簡單提一下:

1. 隐私保護

随着資訊技術不斷延伸到生活的方方面面,大家目前都越來越關注個人隐私問題。目前這一塊比較好的解決方案是采用:零知識證明,安全多方計算,同态加密這些密碼技術來解決。這一塊大家可以參考微衆銀行前陣子釋出的隐私安全保護的白皮書,寫得通俗易懂,非常值得一讀。

2. 量子計算

2019年的CES上,有幸窺見IBM量子計算機的真容。見下圖:

區塊鍊中的密碼學(2):密碼學基本介紹

目前不時可以聽到量子計算機的各種突破性消息,還有量子霸權這種讓人震驚的描述。是以區塊鍊行業很多人都擔心,一旦量子計算機出來,是否會把區塊鍊底層給颠覆掉呢?

雖然這種說法不能說是完全杞人憂天,但我判斷是不可能的。區塊鍊技術本身也是在不斷進化的,大家去看比特币的各種BIP文檔就明白,它從誕生到現在技術上經曆了很多更新和疊代的。區塊鍊項目很多雖然是去中心化的,但并不妨礙項目本身在不斷更新去應付新的問題,我們不會死等着黑暗到來。

3. 國密算法

國家于2019年頒布《中華人民共和國密碼法》 ,對密碼的應用和管理做了很多規範和規定。目前密碼算法庫都是基于OpenSSL, 很早由歐美學者提出來的算法。處于國家安全和長遠戰略焦慮,提出我們國家自己的密碼算法和相應的算法實作庫。

一般應用可以不關心,但目前如果涉及到一些2B或者2G的應用,是否采用國密肯定是很重要的一個名額,在具體項目落地的時候不可不察。

總結

密碼學的産生和發展都是在實踐中遇到的問題一步步摸索過來的。對于我們一般開發者,核心是要拿來解決實際研發過程中遇到的問題,選擇正确和安全的算法。另外就是關注目前研究的熱點,把新的算法運用在落地場景之中。

繼續閱讀