散列是指從可變大小的輸入生成固定大小的輸出的過程。這是通過使用稱爲哈希函數(作爲哈希算法實現)的數學公式來完成的。
儘管並非所有哈希函數都涉及加密技術的使用,但所謂的加密哈希函數是加密貨幣的核心。多虧了它們,區塊鏈和其他分佈式系統才能夠實現顯着水平的數據完整性和安全性。
傳統哈希函數和加密哈希函數都是確定性的。確定性意味着只要輸入不改變,哈希算法將始終產生相同的輸出(也稱爲摘要或哈希)。
通常,加密貨幣的哈希算法被設計爲單向函數,這意味着如果沒有大量的計算時間和資源,它們就無法輕易恢復。換句話說,從輸入創建輸出非常容易,但反方向(僅從輸出生成輸入)相對困難。一般來說,找到輸入越困難,哈希算法被認爲越安全。
哈希函數如何工作?
不同的哈希函數將產生不同大小的輸出,但每個哈希算法可能的輸出大小始終是恆定的。例如,SHA-256 算法只能生成 256 位的輸出,而 SHA-1 將始終生成 160 位的摘要。
爲了說明這一點,讓我們通過 SHA-256 哈希算法(比特幣中使用的算法)運行單詞“Binance”和“binance”。
請注意,一個微小的變化(第一個字母的大小寫)導致了完全不同的哈希值。但由於我們使用 SHA-256,因此無論輸入大小如何,輸出始終具有 256 位(或 64 個字符)的固定大小。此外,無論我們通過算法運行這兩個單詞多少次,兩個輸出都將保持不變。
相反,如果我們通過 SHA-1 哈希算法運行相同的輸入,我們將得到以下結果:
值得注意的是,縮寫 SHA 代表安全哈希算法。它指的是一組加密哈希函數,其中包括 SHA-0 和 SHA-1 算法以及 SHA-2 和 SHA-3 組。 SHA-256 以及 SHA-512 和其他變體都是 SHA-2 組的一部分。目前,只有 SHA-2 和 SHA-3 組被認爲是安全的。
爲什麼它們很重要?
傳統的哈希函數具有廣泛的用例,包括數據庫查找、大文件分析和數據管理。另一方面,加密哈希函數廣泛用於信息安全應用,例如消息認證和數字指紋識別。就比特幣而言,加密哈希函數是挖掘過程的重要組成部分,並且在新地址和密鑰的生成中也發揮着作用。
當處理大量信息時,散列的真正威力就會顯現出來。例如,可以通過哈希函數運行一個大文件或數據集,然後使用其輸出快速驗證數據的準確性和完整性。這是可能的,因爲散列函數的確定性本質:輸入總是會產生簡化、壓縮的輸出(散列)。這種技術消除了存儲和“記住”大量數據的需要。
哈希在區塊鏈技術的背景下特別有用。比特幣區塊鏈有多種涉及哈希的操作,其中大多數是在挖礦過程中。事實上,幾乎所有加密貨幣協議都依賴哈希來將交易組鏈接並壓縮爲區塊,並在每個區塊之間產生加密鏈接,從而有效地創建區塊鏈。
加密哈希函數
再次,部署密碼技術的散列函數可以被定義爲密碼散列函數。一般來說,破解加密哈希函數需要進行無數次暴力嘗試。對於一個人來說,要“恢復”加密哈希函數,他們需要通過反覆試驗來猜測輸入是什麼,直到產生相應的輸出。然而,不同的輸入也有可能產生完全相同的輸出,在這種情況下就會發生“衝突”。
從技術上講,加密哈希函數需要遵循三個屬性才能被認爲有效安全。我們可以將它們描述爲碰撞抗性、原像抗性和第二原像抗性。
在討論每個屬性之前,讓我們用三個簡短的句子總結一下它們的邏輯。
抗衝突性:無法找到任何兩個不同的輸入產生與輸出相同的哈希值。
原像抵抗:無法“恢復”散列函數(從給定的輸出中找到輸入)。
第二原像抵抗:無法找到與指定輸入發生衝突的任何第二輸入。
耐碰撞
如前所述,當不同的輸入產生完全相同的哈希值時,就會發生衝突。因此,哈希函數被認爲是抗衝突的,直到有人發現衝突爲止。請注意,任何哈希函數都始終存在衝突,因爲可能的輸入是無限的,而可能的輸出是有限的。
換句話說,當發現衝突的可能性很低以至於需要數百萬年的計算時,哈希函數是抗衝突的。因此,儘管事實上不存在無碰撞哈希函數,但其中一些函數足夠強大,可以被認爲是具有抵抗力的(例如 SHA-256)。
在各種 SHA 算法中,SHA-0 和 SHA-1 組不再安全,因爲已經發現了衝突。目前,SHA-2 和 SHA-3 組被認爲具有抗衝突性。
原像抗性
原像抗性的性質與單向函數的概念有關。當有人找到生成特定輸出的輸入的可能性非常低時,哈希函數被認爲是抗原像的。
請注意,此屬性與前一個屬性不同,因爲攻擊者會嘗試通過查看給定的輸出來猜測輸入是什麼。另一方面,當有人發現兩個不同的輸入生成相同的輸出,但使用哪個輸入並不重要時,就會發生衝突。
原像抗性對於保護數據很有價值,因爲消息的簡單散列可以證明其真實性,而無需披露信息。在實踐中,許多服務提供商和 Web 應用程序存儲和使用從密碼生成的哈希值,而不是明文密碼。
第二原像抵抗
爲了簡化,我們可以說第二原像抗性介於其他兩個屬性之間。當某人能夠找到一個特定的輸入,該輸入生成與他們已知的另一個輸入相同的輸出時,就會發生第二原像攻擊。
換句話說,第二原像攻擊涉及發現衝突,但他們不是搜索生成相同哈希值的兩個隨機輸入,而是搜索生成與另一個特定輸入生成的相同哈希值的輸入。
因此,任何能夠抵抗衝突的哈希函數也能夠抵抗第二原像攻擊,因爲後者總是意味着衝突。然而,人們仍然可以對防碰撞函數執行原像攻擊,因爲這意味着從單個輸出中找到單個輸入。
礦業
比特幣挖礦中有許多步驟涉及哈希函數,例如檢查餘額、鏈接交易輸入和輸出以及對塊內的交易進行哈希處理以形成 Merkle 樹。但比特幣區塊鏈安全的主要原因之一是礦工需要執行無數的哈希操作才能最終找到下一個區塊的有效解決方案。
具體來說,礦工在爲其候選塊創建哈希值時必須嘗試幾種不同的輸入。本質上,只有生成以一定數量的零開頭的輸出哈希,他們才能夠驗證其區塊。零的數量決定了挖掘難度,它根據網絡的哈希率而變化。
在這種情況下,哈希率代表了在比特幣挖礦中投入了多少計算機能力。如果網絡的哈希率增加,比特幣協議將自動調整挖掘難度,使挖掘一個區塊所需的平均時間保持在接近 10 分鐘。相反,如果多個礦工決定停止挖礦,導致算力大幅下降,挖礦難度就會調整,讓挖礦變得更容易(直到平均出塊時間回到10分鐘)。
請注意,礦工不必發現衝突,因爲他們可以生成多個哈希值作爲有效輸出(以一定數量的零開始)。所以某個區塊有幾種可能的解決方案,礦工只需根據挖礦難度確定的閾值找到其中一種即可。
由於比特幣挖礦是一項成本密集型任務,礦工沒有理由欺騙系統,因爲這會導致重大的經濟損失。加入區塊鏈的礦工越多,它就會變得越大、越強大。
結束語
毫無疑問,哈希函數是計算機科學中必不可少的工具,尤其是在處理大量數據時。當與密碼學結合時,散列算法可以非常通用,以多種不同的方式提供安全性和身份驗證。因此,加密哈希函數對於幾乎所有加密貨幣網絡都至關重要,因此瞭解其屬性和工作機制對於任何對區塊鏈技術感興趣的人來說肯定會有所幫助。

