摘要:單向哈希是密碼學中處於核心地位的密碼學原語,可用於構建難以篡改的可信數據源、高效靈活的數據完整性驗證機制等,以此來保障隱私保護方案中隱私數據的正確性。抗碰撞性:給定任意兩個不同的數據原文,要求它們經哈希算法計算後得到相同哈希值的概率極低,以此防止攻擊者輕易地爲篡改之後的隱私數據原文構造出合法的哈希值,確保數據檢驗的有效性。

隱私數據如何驗明真僞?區塊鏈數據何以可信?如何快速檢驗海量數據是否被篡改?單向哈希在其中起到了什麼作用?

隱私數據的價值很大程度上源自其真實性,如何防止數據被惡意篡改,是隱私保護方案設計中不可忽視的關鍵目標之一。爲此,密碼學領域提出了一系列基本組件,即密碼學原語(Cryptographic Primitive)來實現這一目標,其中最常用的便是單向哈希

在區塊鏈中,單向哈希能夠鏈接多個區塊數據,形成可信的鏈式數據結構,在弱信任環境下,提供防篡改且經過多方共識的可信數據源。

這一特性對隱私保護方案的設計意義重大。隱私數據往往以密文形式表達,需要快速檢驗海量隱私數據的真僞,查驗是否被惡意篡改。此時,單向哈希作爲一項關鍵技術,大有用武之地。

爲何單向哈希如此神奇?其常見的用法有哪些?又能具體解決哪些問題?以下將據此一一展開。

單向的哈希算法

哈希算法是信息科學中的基礎算法組件,“快速實現數據比較和效驗”是其設計初衷之一。

現實業務場景中,可能會涉及海量隱私數據,逐一比對數據原文,在很多場景中非常不現實,尤其是需要通過網絡傳輸的數據,會大大增加網絡帶寬的負擔。

哈希算法的出現,使得高效的數據驗證成爲了可能。

哈希算法的核心功能爲,將任意長度的輸入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。

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

鏈式哈希結構

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

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

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

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

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

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

哈希樹

單向哈希不僅僅能構造簡單的鏈式哈希結構,還能根據業務需要擴展爲更復雜的數據結構,其經典的形態之一便是哈希樹。

哈希樹常稱爲Merkle Tree,最早由Ralph Merkle在1979年的專利申請中提出,爲大數據量的完整性驗證提供了高效靈活的解決方案。

這裏的完整性驗證是指,覈實原始數據在使用和傳輸的過程中沒有被篡改。

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

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

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

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

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

  • 發送方與接收方之間存在一個帶寬有限的可信信道,如區塊鏈上經過共識的數據,可以將簡短的哈希值安全地傳遞給對方。

  • 隱私數據相關的原始文件由於數據量過大,不得不通過低成本低密級信道傳輸,如公共網絡,因此可能被攻擊者篡改。

方案1:整體單次哈希

本方案中,發送方在發送原始文件之前,將所有的原始文件數據作爲哈希算法的輸入,計算哈希值,然後將哈希值與原始文件均發送給接收方。

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

方案2:分塊多次哈希 + 哈希樹

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

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

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

這裏中間缺了關鍵的一步,即如何高效靈活地傳輸這些哈希值,並在原始文件很大時,靈活支持部分數據的獲取和驗證?

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

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

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

在哈希值傳輸方面,接收方只需要通過可信信道下載一個根哈希,其他數據都可以通過低成本低密級信道傳輸。

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

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

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

正是:隱私數據真假難分辨,單向哈希守正不輕撓!

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

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

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

相關文章