散列是指從可變大小的輸入生成固定大小的輸出的過程。這種方法是通過使用稱爲散列函數(作爲散列算法實現)的數學公式來實現的。

儘管並非所有哈希函數都始終包含加密技術的使用,但加密哈希函數是加密貨幣的核心。通過這些功能,區塊鏈和其他類型的分佈式系統能夠實現顯着水平的數據完整性和安全性。

傳統和加密哈希函數是確定性的。這意味着只要輸入不改變,哈希算法就會始終產生相同的輸出(也稱爲散列或散列)。

通常,加密貨幣哈希算法被設計爲單向函數,這意味着如果沒有大量時間和計算資源,它們就無法輕易撤銷。換句話說,從輸入創建輸出相當容易,但反方向(僅從輸出生成輸入)相對困難。總的來說,找到條目越困難,哈希算法就越安全。


哈希函數如何工作?

不同的散列函數將產生不同大小的輸出,但特定於每個散列算法的可能輸出大小始終是恆定的。例如,SHA-256 算法只能產生 256 位輸出,而 SHA-1 將始終生成 160 位哈希值。

爲了說明這一點,我們將 SHA-256 哈希函數(用於比特幣)應用於單詞 Binance 和 binance。

SHA-256

入口

出擊(256 位)

幣安

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

幣安

59bba357145ca539dcd1ac957abc1ec58339ddcae7f5e8b5da0c36624784b2


請注意一個微小的變化(這裏是第一個字母的大小寫)如何導致完全不同的哈希值。由於我們使用 SHA-256,因此無論輸入大小如何,輸出始終具有 256 位(或 64 個字符)的固定大小。此外,無論將此算法應用於這些特定單詞多少次,兩個輸出始終是相同的。

另一方面,如果我們通過 SHA-1 哈希算法使用相同的條目,我們將得到以下結果:

SHA-1

入口

出擊(160 位)

幣安

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

幣安

e58605c14a76ff98679322cca0eae7b3c4e08936


縮寫 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分鐘)。

請注意,礦工不需要尋找可能的衝突,因爲他們可以生成多個哈希作爲有效輸出(以特定數量的零開始)。因此,某個區塊有多種可能的解決方案,礦工必須根據挖礦難度確定的閾值找到一種解決方案。

由於比特幣挖礦是一項高成本的任務,礦工沒有理由在系統內作弊,因爲這會導致重大的經濟損失。區塊鏈中的礦工越多,因此它就越大,它就會變得越強大。


總結一下

毫無疑問,哈希函數是計算中必不可少的工具,尤其是在處理海量數據時。與密碼學相結合,散列算法可以在多種方面變得非常通用,特別是對於安全和身份驗證。因此,加密哈希函數對於幾乎所有加密貨幣網絡都至關重要,因此瞭解它們的屬性和工作機制對於任何對區塊鏈技術感興趣的人來說絕對有用。