散列是指從不同大小的輸入數據創建特定輸出的過程。這是使用數學公式完成的,也稱爲哈希函數(作爲哈希算法實現)。 

並非所有哈希函數都涉及密碼學的使用,只有那些專門爲此目的而設計的函數,即所謂的加密貨幣哈希函數。由於他們的工作,區塊鏈和其他分佈式系統能夠實現高水平的數據完整性和安全性。

常規哈希函數和加密哈希函數都是確定性的。確定性意味著只要輸入資料不改變,雜湊演算法將始終產生相同的結果(也稱為摘要或雜湊)。

加密貨幣中的雜湊演算法的設計方式是使其功能單向工作,這意味著如果不投入大量時間和資源來執行計算,則無法以相反的順序傳回資料。換句話說,從輸入建立輸出非常容易,但反轉該過程(從輸入產生輸出)相對困難。找到輸入值越困難,則認為雜湊演算法越安全。


哈希函數如何運作?

不同類型的雜湊函數產生不同的輸出大小,但每種雜湊演算法的可能輸出大小始終是恆定的。例如,SHA-256 演算法只能產生 256 位元格式的輸出,而 SHA-1 總是會產生 160 位元摘要。

為了說明這一點,讓我們透過 SHA-256 哈希演算法(比特幣中使用的演算法)運行單字「Binance」和「binance」。

SHA-256

輸入資料

結果(256 位)

幣安

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

幣安

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


請注意,一個微小的更改(第一個字母的大小寫)會導致完全不同的雜湊值。由於我們使用 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 分鐘)。

請注意,礦工不需要尋找衝突,因為他們可以產生作為有效輸出的哈希數量有限(以一定數量的零開始)。因此,對於給定的區塊有多種可能的解決方案,而礦工必須根據採礦難度確定的閾值僅找到其中一種。 

由於比特幣挖礦是一項成本高昂的任務,礦工沒有理由欺騙系統,因為這將導致重大的經濟損失。因此,加入區塊鏈的礦工越多,區塊鏈就會變得越大、越強大。


結論

毫無疑問,雜湊函數是計算機科學的基本工具之一,尤其是在處理大量資料時。當與密碼學結合時,雜湊演算法可以非常通用,提供安全性和多種身份驗證方法。因此,加密雜湊函數對於幾乎所有加密貨幣網路都至關重要,因此了解它們的屬性和工作機制對於任何對區塊鏈技術感興趣的人來說肯定是有用的。