雜湊運算是從可變大小的輸入產生固定大小的輸出的過程。該過程透過稱為「雜湊函數」(以哈希運算演算法實現)的數學公式完成。
並非所有雜湊函數都涉及運用密碼學,但「加密雜湊函數」卻是加密貨幣的核心。得益於加密雜湊函數,區塊鏈和其他分散式系統的資料完整性和安全性才能達到較高水準。
傳統雜湊函數與加密雜湊函數皆具有確定性。確定性指的是只要輸入不更改,雜湊運算演算法將始終產生相同的輸出(也稱為“摘要”或“雜湊值”)。
通常情況下,加密貨幣的雜湊運算演算法皆設計為單向函數,這表示如果沒有大量計算時間和資源,這些函數無法輕易恢復。換言之,從輸入建立輸出極為容易,但反向從輸出產生輸入則相對困難。整體而言,越難找到輸入,哈希運算演算法就越安全。
不同的雜湊函數產生大小不一的輸出,但每個雜湊運算演算法的輸出大小始終不變。例如,SHA-256演算法只能產生256位元的輸出,而SHA-1總是產生160位元的摘要。
為說明這一點,我們透過SHA-256哈希運算演算法(比特幣中使用的演算法)運行“Binance”和「binance」這兩個字。
SHA-256 | ||||||||
輸入 | 輸出(256位元) | |||||||
Binance | f1624fcc63b615ac0e95daf9ab78434212886621476250007862125000021251250002125000212525250 | |||||||
binance | 59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8bdcd1ac957abc1ec5833319ddcae7f5e8bdcd1ac957abc1ec5833319ddcae7f5e8b550c ="438aa172-14fc-47d0-bf5f-e2c84a4368cd"> 請注意,首字母大小的小改動寫都會產生完全不同的哈希值。不論輸入數值的長短,使用SHA-256的輸出始終保持256位元(或64個字元)的固定長度。此外,無論演算法運行這兩個字多少次,二者的輸出都保持不變。 相反,如果透過SHA-1哈希運算演算法運行同樣的輸入,得到的結果如下:
請注意,「SHA」是安全雜湊演算法(Secure Hash Algorithms)的縮寫。此演算法指的是一組加密雜湊函數,其中包括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組被認為具有抗衝突性。 抗原像性抗原像性屬性與單向函數概念有關。假設找出產生特定輸出的輸入機率極低,則可認為雜湊函數具有抗原像性。 請注意,攻擊者會查看給定輸出來猜測輸入,因此該屬性與抗衝突性有所不同。而且,兩個不同的輸入產生相同的輸出就會產生衝突,但使用哪個輸入其實並不重要。 抗原像性屬性對保護數據很有價值,其原因是無需披露信息,消息的簡單哈希值即可證明其真實性。在實際運用中,許多服務供應商和網路應用程式儲存和使用由密碼產生的雜湊值,而非明文形式的密碼。 抗第二原像性簡言之,抗第二原像性介於上述兩種屬性之間。假設有人能找出特定的輸入,該輸入產生的輸出與已知的另一個輸入的輸出相同,則會發生第二原像攻擊。 換言之,第二原像攻擊與找出衝突相關,但並非搜尋產生相同雜湊值的兩個隨機輸入,而是在已知特定輸入的情況下,搜尋產生相同雜湊值的另一個輸入。 第二原像攻擊通常意味著存在衝突。因此,任何抗衝突的雜湊函數同樣能抵抗第二原像攻擊。但是,函數具有抗衝突性意味著能從單一輸出中找出單一輸入,因此攻擊者仍可向抗衝突的函數發動原像攻擊。 加密貨幣挖礦比特幣挖礦中多個步驟用到哈希函數,例如查看餘額、連接交易輸入和輸出,以及哈希運算同個區區塊內的交易以形成默克爾樹。但是,比特幣區塊鏈安全的主要原因之一是,礦工需要執行無數哈希運算操作,才能最終找出下一個區塊的有效解決方案。 具體而言,礦工在創建候選區塊雜湊值時必須嘗試若干不同的輸入。從本質上講,只有產生的輸出哈希值以一定數量的零開頭,礦工才能驗證區塊。零的數量決定挖礦難度,並隨著專用於網路的哈希率變化而變化。 在這種情況下,哈希率代表投入比特幣挖礦的算力大小。如果網路的哈希率增加,比特幣協議將自動調整挖礦難度,使得出區塊所需的平均時間保持在近10分鐘。相反,若多名礦工決定停止挖礦,導致哈希率大幅下降,則挖礦難度調低,直到平均出塊時間恢復到10分鐘。 請注意,礦工能產生多個哈希值作為有效輸出(以一定數量的零開頭),因此他們無需尋找衝突。一個區塊有多種可能的解決方案,但取決於挖礦難度閾值,礦工只須找到其中一個解決方案。 比特幣挖礦是一項高成本任務,礦工沒有必要欺騙系統,反而會造成重大經濟損失。加入區塊鏈的礦工越多,區塊鏈規模越大,也越強大。 總結毫無疑問,雜湊函數是計算機科學中必不可少的工具,其處理海量資料的能力尤為出眾。與密碼學結合,雜湊運算演算法能發揮廣泛用途,以各種方式保障安全性和提供身分驗證。對於幾乎所有加密貨幣網路而言,加密雜湊函數至關重要。因此,若對區塊鏈技術感興趣,了解加密雜湊函數屬性與運作機制必將大有裨益。 |