雜湊是指從可變大小的輸入值生成固定大小輸出值的過程。透過使用所謂雜湊函數 (以雜湊演算法施行) 的數學公式來完成。
雖然並非所有雜湊函數都涉及使用密碼學,但所謂的加密雜湊函數是加密貨幣的核心。透過它們,區塊鏈和其他分散式系統才能在資料完整性和安全性方面達到相當的水準。
傳統雜湊函數和加密雜湊函數都是決定性的。決定性代表只要輸入值不更改,雜湊演算法將一律生成相同的輸出值 (也稱為摘要或雜湊)。
通常,加密貨幣的雜湊演算法設計為單向函數,代表如果沒有大量的計算時間和資源,它們就無法輕鬆反向還原。換句話說,從輸入值創建輸出值非常容易,但反向推算相當困難 (從輸出值生成輸入值)。一般而言,輸入值越難還原,雜湊演算法就會被視為越安全。
雜湊函數如何運作?
不同雜湊函數將生成不同大小的輸出值,但每個雜湊演算法的可能輸出大小始終一致。例如,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-2 群組的一部份,後者亦包含 SHA-512 和其他變異版本。目前,只有 SHA-2 和 SHA-3 被視為安全群組。
為什麼它們很重要?
傳統的雜湊函數具有廣泛的用例,包括資料庫查找、大型檔案分析和資料管理。另一方面,加密雜湊函數廣泛用於資安應用,例如訊息驗證和數位指紋識別。比特幣方面,加密雜湊函數是挖礦流程的基礎部分,同時兼具生成新地址和金鑰的作用。
雜湊在處理大量資訊時才會發揮真正的實力。例如,大型檔案或資料集可以透過雜湊函數執行,然後使用其輸出值來快速驗證資料的準確性和完整性。雜湊函數的決定性可以辦到這一點:輸入值將始終導致簡化且壓縮的輸出值 (雜湊)。這種技術代表不再有儲存和「記住」大量資料的需求。
雜湊在區塊鏈技術的脈絡下特別實用。比特幣區塊鏈有幾項操作涉及雜湊,其中大部分是在挖礦過程中。事實上,幾乎所有加密貨幣協定都依賴雜湊將交易群組連結和壓縮成區塊,並在每個區塊之間產生加密連結,從而有效創建區塊鏈。
加密雜湊函數
再次說明,部署加密技術的雜湊函數可以定義為加密雜湊函數。一般而言,要破解加密雜湊函數需要無數次的暴力嘗試。如果有人要「還原」加密雜湊函數,他們必須先猜到輸入值,透過無數嘗試直到生成相應的輸出值。然而,不同的輸入值也可能生成完全相同的輸出值,在這個情況下可能會發生「碰撞」。
在技術方面,加密雜湊函數必須依循三個屬性才能視為確實安全。這些屬性包含抗碰撞性、抗原像攻擊性和抗第二原像攻擊性。
討論每個屬性之前,讓我們以三個簡短句子摘要說明他們的邏輯。
抗碰撞:無法找到兩個不同輸入值可生成相同的雜湊輸出值。
抗原像攻擊:無法「還原」雜湊函數 (從輸出值推算輸入值)。
抗第二原像攻擊:無法找到任何與指定輸入值碰撞的第二輸入值。
抗碰撞性
如前所述,當不同輸入值生成完全相同的雜湊時就會發生碰撞。因此,雜湊函數被視為有抗碰撞性,直到有人發現碰撞。請注意,任何雜湊函數都將始終存在碰撞,因為可能有無窮盡的輸入值,但輸出值可能有限。
換句話說,當發現碰撞的可能性低到需要數百萬年的計算時,代表雜湊函數是抗碰撞的。因此,儘管沒有無碰撞的雜湊函數,但其中一些函數強大到可以被認為是抗碰撞的 (例如 SHA-256)。
在各種 SHA 演算法中,SHA-0 和 SHA-1 群組不再安全,因為已發現碰撞。目前,SHA-2 和 SHA-3 群組被認為具有抗碰撞性。
抗原像攻擊性
抗原像攻擊屬性與單向函數的概念相關。如果幾乎不可能推算能生成特定輸出值的輸入值,則該雜湊函數可視為是抗原像攻擊性的。
請注意,此屬性與前一個屬性不同,因為攻擊者會嘗試透過查看給定的輸出值來推算輸入值。另一方面,如果有人發現兩個不同輸入值會生成相同輸出值時則發生碰撞,與使用哪個輸入值無關。
抗原像攻擊屬性對於保護資料很有價值,因為訊息的簡單雜湊可以證明其真實性,無需披露資訊。實際上,許多服務供應商和 Web 應用程式都儲存和使用透過密碼生成的雜湊,而不是純文字形式的密碼。
抗第二原像攻擊性
簡而言之,我們可以說抗第二原像攻擊性介於其他兩個屬性之間。當有人能夠找到一個特定輸入值,且該輸入值和他們已知的另一個輸入值生成相同輸出值時,就會發生第二原像攻擊。
換句話說,第二原像攻擊涉及找尋碰撞,但並非搜尋兩個生成相同雜湊的隨機輸入值,而是搜尋可和另一個特定輸入值生成相同雜湊的輸入值。
因此,任何抗碰撞的雜湊函數也能抗第二原像攻擊,因為後者會發生代表已發生碰撞。但是,抗碰撞函數上仍然可以執行原像攻擊,因為它代表透過單一輸出值找尋單一輸入值。
挖礦
比特幣挖礦中有許多步驟涉及雜湊函數,例如檢查餘額、連結交易輸入值和輸出值以及在區塊中雜湊交易以形成雜湊樹。但比特幣區塊鏈很安全的主要原因之一是礦工必須執行無數的雜湊操作,最終才能為下一個區塊找到有效的解決方案。
具體來說,礦工在為其候選區塊創建雜湊值時必須嘗試數種不同的輸入值。基本上,只有當他們生成以一定數量的零開頭的輸出雜湊值時,他們才能驗證他們的區塊。而零的數量決定挖礦的難度,此數量依據應用於網路的雜湊率而有所不同。
在這種情況下,雜湊率代表在比特幣挖礦中投入了多少計算機能力。如果網路的雜湊率增加,比特幣協定將自動調整挖礦難度,使挖掘出一個區塊所需的平均時間保持在 10 分鐘左右。相對地,如果多位礦工決定停止挖礦,導致雜湊率大幅下滑,挖礦難度將進行調整,讓挖礦更加容易 (直到平均區塊時間回到 10 分鐘)。
請注意,礦工不必找尋碰撞,因為他們可以生成多個雜湊作為有效輸出值 (以一定數量的零開頭)。因此,一個特定區塊具有數種可能的解決方案,礦工只需要找出其中一種 - 根據挖礦難度決定的閾值。
由於比特幣挖礦是一項成本密集型的任務,礦工沒有理由欺騙系統,因為這樣會導致巨額的經濟損失。加入區塊鏈的礦工越多,它就會變得越強大。
總結
毫無疑問,雜湊函數是資訊科技不可或缺的工具,尤其是在處理大量資料的時候。當雜湊演算法與加密技術合併使用時,可以發揮多元功能,以許多不同方式提供安全性和身分驗證。因此,加密雜湊函數對於幾乎所有加密貨幣網路而言都至關重要,所以了解其屬性和運作機制,對於任何有興趣了解區塊鏈科技的人而言都相當實用。