密碼學原語如何應用?解析單向雜湊的妙用

買賣虛擬貨幣
隱私資料如何驗明真偽?區塊鏈資料何以可信?如何快速檢驗海量資料是否被篡改?單向雜湊在其中起到了什麼作用?隱私資料的價值很大程度上源自其真實性,如何防止資料被惡意篡改,是隱私保護方案設計中不可忽視的關鍵目標之一。為此,密碼學領域提出了一系列基本元件,即密碼學原語(Cryptographic Primitive)來實現這一目標,其中最常用的便是單向雜湊。在區塊鏈中,單向雜湊能夠連結多個區塊資料,形成可信的鏈式資料結構,在弱信任環境下,提供防篡改且經過多方共識的可信資料來源。這一特性對隱私保護方案的設計意義重大。隱私資料往往以密文形式表達,需要快速檢驗海量隱私資料的真偽,查驗是否被惡意篡改。此時,單向雜湊作為一項關鍵技術,大有用武之地。為何單向雜湊如此神奇?其常見的用法有哪些?又能具體解決哪些問題?以下將據此一一展開。1. 單向的雜湊演算法
雜湊演算法是資訊科學中的基礎演算法元件,“快速實現資料比較和效驗”是其設計初衷之一。現實業務場景中,可能會涉及海量隱私資料,逐一比對資料原文,在很多場景中非常不現實,尤其是需要透過網路傳輸的資料,會大大增加網路頻寬的負擔。雜湊演算法的出現,使得高效的資料驗證成為了可能。雜湊演算法的核心功能為,將任意長度的輸入m對映為固定長度的輸出H(m),H(m)常稱為雜湊值、雜湊值或訊息摘要。一個精心設計的雜湊演算法具有以下特徵:· 輸出確定性:同一種雜湊演算法,相同的輸入,其輸出固定不變。
· 輸出長度不變性:同一種雜湊演算法,針對任意長度的輸入,其輸出長度不變。· 輸入敏感性:同一種雜湊演算法,即便輸入資料有微小的改變,其輸出雜湊值也會發生巨大變化。因此,只要比較資料的雜湊值是否與預期的一致,就能大概率地判別隱私資料原文是否被篡改。其典型的實現有:各大主流程式語言中,HashMap資料結構所使用的雜湊演算法。然而,只是大概率,在密碼學協議中是不夠的。我們需要更強的雜湊演算法,將實際的檢驗概率提升至接近100%。與之對應的一個重要概念是『雜湊碰撞』。雜湊碰撞是指,存在兩個不同的資料原文m1和m2,其雜湊值完全相同,即H(m1) = H(m2)。容易出現雜湊碰撞的雜湊演算法在密碼學協議中不安全,同時,密碼學還進一步引入了單向性的要求。
一個密碼學安全的雜湊演算法,在傳統雜湊演算法的基礎上,還需滿足以下特性:· 單向性:根據資料原文計算雜湊值很容易,但要求難以根據雜湊值計算資料原文,提供計算上的不對稱性,以此防止攻擊者輕易地從雜湊值反推出可能的隱私資料原文,保護雜湊值的機密性。· 抗碰撞性:給定任意兩個不同的資料原文,要求它們經雜湊演算法計算後得到相同雜湊值的概率極低,以此防止攻擊者輕易地為篡改之後的隱私資料原文構造出合法的雜湊值,確保資料檢驗的有效性。以上兩個特性,賦予了密碼學安全的雜湊演算法對資料內容公開可驗證的約束能力。這一約束能力使得經過單向性轉換獲得雜湊值,在一定程度上可以作為隱私資料原文的等價資訊。在隱私保護方案設計中,雜湊演算法的單向性是最常用的特性之一。相應地,密碼學安全的雜湊演算法也常被稱之為單向雜湊。目前主流的單向雜湊有如下演算法標準:
· NIST標準:SHA(Secure Hash Algorithm)系列是由美國國家標準技術研究院(NIST)制定的SHA雜湊演算法系列,主要包括SHA-1、SHA-2和SHA-3三個系列。SHA-1由於安全問題已不再使用。SHA-2系列包括SHA-224(表示雜湊值長度為224位)、SHA-256、SHA-384、SHA-512等演算法,其中SHA-256是目前使用最廣泛的單向雜湊。SHA-3是最新演算法標準,源自參與SHA-3競賽的keccak演算法。2015年,NIST在完成SHA-3的標準化時,調整了keccak的填充流程,因此,標準的SHA-3演算法與原始的keccak演算法並不相容。· 國密標準:國密雜湊演算法SM3,是我國制定的單向雜湊演算法標準,由國家密碼管理局於2010年12月17日釋出,其安全性和效率與SHA-2系列的SHA-256相當。

單向雜湊的選型可以參考業務部署的地域性要求,建議在SM3和SHA-3之間做出選擇,如果需要與現有系統進行相容,也可酌情選用SHA-2系列中的SHA-256。

2. 鏈式雜湊結構 

單向雜湊的用途很廣泛,最直接的應用就是構造鏈式雜湊結構,即大家所熟知的區塊鏈,提供難以篡改的可信資料來源。

由於單向雜湊的單向性,從結構上可以看出,從前一個資料塊原文,很容易計算下一個資料塊所用的雜湊值輸入,但已知一個雜湊值輸入,難以反推出所有可能的資料塊原文。

區塊鏈技術結合單向雜湊和共識演算法,當某一區塊的資料共識確認後,下一區塊將會記錄前一區塊資料的雜湊值,從而實現整條鏈上所有資料塊的難以篡改。

在隱私保護方案設計中,以區塊鏈為代表的基於鏈式雜湊結構的可信資料來源,可以起到簡化協議設計的作用,尤其對於第4論中提到的惡意模型特別有效。惡意模型下的密碼學協議,為了防範內部參與者不遵守協議、隨意篡改資料,不得不引入複雜的多方互動驗證過程。

透過鏈式雜湊結構,在現實系統中引入一個可信資料來源,可以對關鍵的中間流程資料進行存證和溯源,一旦有參與方作惡,便能在第一時間檢測出,且定位到對應責任方,有效保障隱私保護方案全流程的正確性。

3. 雜湊樹

單向雜湊不僅僅能構造簡單的鏈式雜湊結構,還能根據業務需要擴充套件為更復雜的資料結構,其經典的形態之一便是雜湊樹。

雜湊樹常稱為Merkle Tree,最早由Ralph Merkle在1979年的專利申請中提出,為大資料量的完整性驗證提供了高效靈活的解決方案。

這裡的完整性驗證是指,核實原始資料在使用和傳輸的過程中沒有被篡改。

在真實的隱私保護業務中,隱私資料多為高價值資料,而且多以密文的形態儲存和使用,一旦被篡改,在不知道明文的前提下,難以透過常規技術手段來有效識別真偽。

對於涉及多方協作、聯合計算的隱私保護業務,隱私資料密文交換和共享通常是其中的核心流程。所以當這些隱私資料密文跨越系統邊界時,資料接收方會有兩方面資料檢驗需求:

· 整體完整:驗證隱私資料中任意部分都未被篡改。
· 篡改定位:如果存在攻擊,能夠有效定位被篡改的資料位置,便於開展應對流程。

為了體現雜湊樹的設計優越性,我們以舉例的形式展示其效果。

為了簡化說明,以下分析假定:

· 傳送方與接收方之間存在一個頻寬有限的可信通道,如區塊鏈上經過共識的資料,可以將簡短的雜湊值安全地傳遞給對方。

· 隱私資料相關的原始檔案由於資料量過大,不得不透過低成本低密級通道傳輸,如公共網路,因此可能被攻擊者篡改。

方案1:整體單次雜湊

本方案中,傳送方在傳送原始檔案之前,將所有的原始檔案資料作為雜湊演算法的輸入,計算雜湊值,然後將雜湊值與原始檔案均傳送給接收方。

當接收方收到雜湊值和原始檔案後,重複傳送方計算雜湊值的操作,然後將新計算得到的雜湊值與從網路上接收到的雜湊值進行比較,如果相同,就可以判斷原始檔案在傳輸過程中未被篡改。

方案2:分塊多次雜湊 + 雜湊樹

方案1對於滿足整體完整需求十分有效,但對於第二條篡改定位需求就無能為力了。

基於雜湊演算法的輸入敏感性,接收方可以知道至少有一個位元的資料被篡改了,但不知道具體在哪裡。傳送方不得不對所有資料進行重發,在這種情況下,攻擊者很容易對隱私保護方案實施拒絕服務攻擊。

為了解決這一點,本改進方案中,將原始檔案分成一系列資料塊,為每一個資料塊分別計算雜湊值。接收方驗證的過程與方案1相似,區別在於可以對具體的資料塊進行驗證,一個資料塊被篡改,導致的雜湊值不匹配不會影響到其他資料塊的驗證,由此實現了篡改定位需求。

這裡中間缺了關鍵的一步,即如何高效靈活地傳輸這些雜湊值,並在原始檔案很大時,靈活支援部分資料的獲取和驗證?

解決這些問題的要點,在於利用好雜湊樹的特性。

雜湊樹中,最底層的葉子層是各個資料塊的雜湊值,往樹根的方向迭代雜湊計算。即把相鄰的兩個節點的雜湊值串連之後,再進行雜湊運算,這樣每兩個雜湊值就生成一個新的雜湊值,重複以上計算過程,直到僅剩下一個雜湊值(根雜湊),最終形成一棵倒掛的樹。

在雜湊值傳輸方面,接收方只需要透過可信通道下載一個根雜湊,其他資料都可以透過低成本低密級通道傳輸。

在支援部分資料的獲取和驗證方面,接收方只需要獲取所需的部分資料塊、根雜湊,途經分支節點的雜湊值,以O(log(n))的時間複雜度便可完成資料的驗證,並實現被篡改資料塊的快速定位。

除了雜湊樹之外,根據業務需求的差異,單向雜湊還能用於構造有向無環圖等更復雜的資料結構。一般而言,其作用相當於連線各個資料點的鎖釦,為相關資料建立公開可驗證的密碼學約束,使之難以被篡改,以此保障資料的正確性。

正是:隱私資料真假難分辨,單向雜湊守正不輕撓!

單向雜湊是密碼學中處於核心地位的密碼學原語,可用於構建難以篡改的可信資料來源、高效靈活的資料完整性驗證機制等,以此來保障隱私保護方案中隱私資料的正確性。

本論中,我們介紹了單向雜湊的基礎應用,在往後的文章中,我們還會進一步介紹單向雜湊的高階應用,包括構造密碼學承諾、零知識證明等。

同時,作為密碼學中久經考驗的基本元件,除了單向雜湊,密碼學原語還包括資料編解碼、對稱加密、非對稱加密、數字簽名等,基礎密碼學原語還能進一步組成更高階的密碼學元件。在這一系列中,我們將逐一展開與隱私保護密切相關的密碼學原語的分享,欲知詳情,敬請關注下文分解。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;