什麼是區塊鏈區塊?
什麼是區塊鏈中的區塊?了解區塊包含哪些資料,以及它如何與前一個區塊相連形成安全的鏈。
閱讀指南
語言
在數位技術的運作中,很少有工具像雜湊函式一樣重要,同時又如此不為使用者所察覺。它們廣泛存在於檔案驗證、數位簽章、資料庫、驗證系統,以及尤其重要的區塊鏈網路中。雜湊會把一定量的資訊轉換為固定長度的字元序列,可以視為該資料的數學指紋。這項運算可以極快完成,而且非常容易驗證;另一方面,在使用適當的密碼學函式時,從雜湊值重建原始內容,在計算上應該不可行。
這項特性使雜湊成為確保資料完整性的重要元件。例如,從網際網路下載檔案時,檔案建立者可以公布對應的雜湊值。接收者接著計算收到檔案的雜湊值,並比較兩個結果。如果兩者相同,在演算法所提供的保證與假設範圍內,這就構成一項數學證據,說明檢查到的資料與產生參考值的資料完全相同。即使只修改檔案中的單一位元,也應該產生完全不同的雜湊值。
其基本概念建立在一種數學函式之上:它接受大小可變的輸入,並產生指定大小的輸出。輸入可以是一個單字、一份文件、一張照片、一筆金融交易,甚至是極其龐大的資料集。相較之下,輸出的長度始終維持演算法所定義的大小。SHA-256 是加密貨幣領域最知名的演算法之一,其輸出由 256 位元組成,通常表示為 64 個十六進位字元。
密碼學雜湊函式最重要的特性之一,是所謂的雪崩效應。對輸入資料進行微小修改,應該使輸出產生巨大且不可預測的變化。如果一個人先計算一句話的雜湊值,然後只改變其中一個字母,新的結果就不應該與原值相似。從實務角度來看,新雜湊值應該完全不同。這項特性使人很難推斷應如何操縱特定資料,才能取得某個指定的輸出。
然而,並非每個雜湊函式都具備足以應用於安全領域的特性。有些雜湊函式主要為效率與資料分布而設計,例如某些電腦資料結構中所使用的函式,它們不提供保護敏感資訊所需的密碼學保證。安全應用會使用專門設計、能抵抗不同類型攻擊的演算法。例如 MD5 和 SHA-1 過去被廣泛使用,但由於與碰撞相關的漏洞,現今已不再被視為適合許多密碼學情境。
當兩個不同的輸入產生完全相同的雜湊值時,就會發生碰撞。由於可能的輸入集合幾乎可以無限大,而輸出長度有限,因此從數學上說,碰撞無法避免。密碼學雜湊函式真正需要做到的,不是讓碰撞完全不可能發生,而是讓人刻意找出碰撞變得極其困難。這項區分十分基本。系統安全依賴於找到兩個具有相同結果的不同輸入需要足夠多資源,以至於攻擊變得不切實際。
雜湊函式在區塊鏈中也扮演關鍵角色,因為它們能讓記錄的不同部分以密碼學方式彼此連結。每個區塊都可以包含前一個區塊的雜湊值,在兩者之間建立數學關係。當新的區塊加入時,對前一區塊的參照會成為定義新單位的資料之一。如果有人之後修改舊區塊中的資料,其雜湊值就會改變,下一個區塊儲存的參照也將不再相符。這項特性能以有效率的方式偵測歷史是否遭到修改。
在比特幣中,雜湊也是工作量證明流程的核心元素。礦工會尋找一個值,使區塊標頭產生的雜湊值符合協定規定的某些條件。由於演算法的特性,沒有實際可行的方法可以直接計算出哪個輸入會產生所需結果。礦工必須不斷嘗試不同數值,直到找到有效組合。即使可用的計算能力發生變化,網路也會定期調整難度,使其產生新區塊的速度大致保持穩定。
這種用途表明,雜湊並不只用於檢查完整性。它也可以成為一種機制的組成部分,用來讓某些密碼學證明的產生具有成本。找到有效結果所需的工作量可能非常大,但網路其他參與者驗證該結果則相對容易。這種不對稱性,是比特幣所採用安全模型的基礎之一。
另一個重要應用出現在稱為梅克爾樹的結構中。在區塊鏈裡,一個區塊中的交易可以透過連續的雜湊運算進行組織,直到得到一個以密碼學方式代表整個集合的單一根值。修改一筆交易會改變其雜湊值,進而影響更高層級計算出的數值,直到根值也發生改變。這個程序使人可以驗證某筆交易是否屬於某個集合,而不必處理所有可用記錄,對分散式系統尤其有用。
雜湊也會出現在驗證與密碼儲存系統中,但這裡需要一項重要限定。與直接儲存明文密碼相比,儲存密碼的雜湊值通常更好;然而,單靠快速雜湊函式目前並不是安全儲存密碼的適當解決方案。現代系統通常會使用專門為此目的設計的函式,例如 Argon2、scrypt 或 bcrypt,這些函式加入了讓暴力破解與大規模密碼測試成本更高的機制。
雜湊的用途在於,它能把複雜資訊轉換成精簡且可驗證的表示形式,同時不一定揭露其內容。這項能力使人能建立多個參與者都可獨立檢查完整性的系統。在區塊鏈中,這一點尤其重要,因為使用者不必完全依賴中央權威來判斷某些資料是否被修改。密碼學關係提供了一種可以由任何能執行協定規則的參與者檢查的證據。
即便如此,雜湊本身並不能證明原始資訊是真實的。如果有人把錯誤資料輸入系統,之後再正確計算其雜湊值,結果在數學上仍然有效。雜湊的根本作用,是保護完整性並貢獻於某些安全性質,但它不保證資料在語意上的真實性,也無法確認所記錄的內容是否符合外部現實。當區塊鏈儲存來自網路外部來源的資訊時,這項區分尤其重要。
總體而言,可以把雜湊理解為一種數學指紋,使人能夠有效識別並關聯資訊。它的特性能讓修改被偵測、資料結構彼此連結、建立密碼學證明機制,以及以精簡形式驗證大量資訊。在區塊鏈中,這項功能具有非比尋常的重要性,因為它把系統的不同元素連接起來,並有助於抵抗對歷史的修改。
因此,理解雜湊是什麼,也就能理解許多當代技術所依賴安全架構的一個核心部分。在一串看似隨機的字元背後,是一套經過精心設計的數學機制,可以產生可重現的結果,對任何修改都十分敏感,同時又難以被刻意操縱。雜湊並不只是程式設計師或密碼學專家使用的技術資源,而是讓分散式系統能夠驗證資訊、維持記錄之間的參照關係,以及建立某些完整性保證的重要組件。