密碼學是計算機中比較基礎的學科,真正完全搞明白背後的原理,需要深厚的數學功底,涉及到的學科知識包括:高等數學、線性代數、機率論、抽象代數、數論等知識。
感興趣的同學可以就這個主題進行深入研究。對于一般的應用者,我們核心是先要知道好一些基本的密碼學算法,然後重點掌握算法的應用場景,邊界以及一些常見問題下密碼學的運用。
密碼學基本知識
密碼,最初的目的是用于對資訊加密,計算機領域的密碼技術種類繁多。但随着密碼學的運用,密碼還被用于身份認證、防止否認等功能上。
最基本的,是資訊加解密分為對稱加密(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量子計算機的真容。見下圖:
目前不時可以聽到量子計算機的各種突破性消息,還有量子霸權這種讓人震驚的描述。是以區塊鍊行業很多人都擔心,一旦量子計算機出來,是否會把區塊鍊底層給颠覆掉呢?
雖然這種說法不能說是完全杞人憂天,但我判斷是不可能的。區塊鍊技術本身也是在不斷進化的,大家去看比特币的各種BIP文檔就明白,它從誕生到現在技術上經曆了很多更新和疊代的。區塊鍊項目很多雖然是去中心化的,但并不妨礙項目本身在不斷更新去應付新的問題,我們不會死等着黑暗到來。
3. 國密算法
國家于2019年頒布《中華人民共和國密碼法》 ,對密碼的應用和管理做了很多規範和規定。目前密碼算法庫都是基于OpenSSL, 很早由歐美學者提出來的算法。處于國家安全和長遠戰略焦慮,提出我們國家自己的密碼算法和相應的算法實作庫。
一般應用可以不關心,但目前如果涉及到一些2B或者2G的應用,是否采用國密肯定是很重要的一個名額,在具體項目落地的時候不可不察。
總結
密碼學的産生和發展都是在實踐中遇到的問題一步步摸索過來的。對于我們一般開發者,核心是要拿來解決實際研發過程中遇到的問題,選擇正确和安全的算法。另外就是關注目前研究的熱點,把新的算法運用在落地場景之中。