Keccak

Keccak演算法是一種雜湊函數,能將各種資料壓縮為固定長度的「指紋」,並作為NIST所採納的SHA-3標準核心。此演算法廣泛應用於Ethereum,包括地址生成、合約函式選擇器及事件日誌。Keccak採用「海綿」結構,透過吸收與擠壓的運作流程,以及24輪置換,徹底混合資料。此設計支援多種輸出長度,能有效平衡安全性與效能。
內容摘要
1.
Keccak 是一種加密雜湊函數,被選為 SHA-3 標準的基礎。
2.
Ethereum 區塊鏈使用 Keccak-256 演算法生成地址和交易雜湊。
3.
Keccak 採用海綿結構設計,具有高安全性與靈活的輸出長度。
4.
與傳統的 SHA-2 演算法相比,Keccak 提供了更強的抗碰撞性與效能優勢。
Keccak

什麼是 Keccak 演算法?

Keccak 演算法是一類密碼學雜湊函數家族,可將任意輸入資料轉換為固定長度的數位指紋。它是 SHA-3 標準的基礎,並被廣泛應用於區塊鏈領域。

雜湊函數可視為「指紋產生器」:相同的輸入一定會產生相同的輸出,但僅根據輸出幾乎無法還原原始輸入。Keccak 支援可變長度輸出,其中以 256 位元(Keccak-256)最常見。固定長度的輸出方便高效驗證、建立索引與進行一致性檢查。

Keccak 在 Web3 的關鍵角色

Keccak 作為以太坊等系統的核心「指紋產生器」,支撐地址產生、智能合約函數選擇器與事件日誌索引等關鍵流程。

舉例來說,在 Gate 等交易所儲值 ETH 時,「0x」開頭的地址是對公鑰執行 Keccak-256 雜湊並取最後 20 個位元組產生。合約呼叫時,函數選擇器則是將函數簽名以 Keccak-256 雜湊後擷取前 4 個位元組取得。事件日誌則利用 Keccak 產生主題,實現快速檢索。

Keccak 演算法的運作方式

Keccak 採用「海綿結構」設計。可以將其比擬成一塊海綿:先「吸收」輸入資料混合內部狀態,再「擠壓」出所需的雜湊輸出。

第一步,吸收:輸入訊息會被分塊,並以異或方式寫入狀態的「可寫區域」,如同海綿吸水,將資料整合至內部狀態。

第二步,置換:多輪應用置換函數(Keccak-f)打亂狀態中的位元。置換過程是一種可逆的「洗牌」,Keccak-f[1600] 通常執行 24 輪。

第三步,擠壓:從狀態的「可讀區域」擷取輸出。若需更長的輸出,則持續置換後再提取資料,就像按需求反覆擠壓海綿。

在標準 Keccak-256 參數下,內部狀態為 1600 位元,分為 1088 位元比特率(讀寫區)與 512 位元容量(安全緩衝區)。容量越大,安全性越高。

Keccak 在以太坊的實際應用

Keccak 在以太坊主要有四大用途:地址產生、函數選擇器、事件主題以及資料結構索引。

  • 地址產生:以太坊地址通常透過對公鑰執行 Keccak-256 雜湊並取最後 20 個位元組產生「0x」開頭的地址。您在 Gate 看到的儲值地址就是這樣產生。有些地址的檢查碼格式也會用 Keccak 驗證大小寫。
  • 函數選擇器:函數的文字簽名(例如 "transfer(address,uint256)")經 Keccak-256 雜湊,前 4 個位元組作為選擇器。著名的選擇器 "0xa9059cbb" 就是這樣得到的。
  • 事件主題:事件名稱及參數型態串接後以 Keccak-256 雜湊產生主題,支援鏈上事件的高效檢索。
  • 資料結構索引:在狀態樹或映射鍵中,Keccak-256 用於雜湊鍵值,降低碰撞並提升查詢效率。

Keccak 與 SHA3 的主要差異

Keccak 與 SHA3 的最大差異在於填充(「域分隔」)參數。SHA3-256 的填充後綴為 0x06,而以太坊常用的 Keccak-256 則為 0x01。

因此,相同輸入在 Keccak-256 和 SHA3-256 下會產生不同的輸出。開發或稽核時,務必確認使用的是「Keccak-256」還是「SHA3-256」——兩者不可混用。NIST 在 2015 年標準化 SHA-3 時進行了這項域分隔調整(來源:NIST,2015)。

開發時正確使用 Keccak 的方法

第一步:確認輸入型態是位元組還是文字。若為字串,務必使用 UTF-8 編碼;若為十六進位字串,需轉為原始位元組,且「0x」前綴不參與雜湊。

第二步:選擇正確的函數。在 EVM 中,keccak256(即 Keccak-256)為標準。有些函式庫將 SHA3-256 稱為 sha3——請務必詳閱文件與庫版本,避免混淆。

第三步:交叉驗證結果。建議用兩套獨立函式庫或工具計算雜湊並比對結果,也可用 "transfer(address,uint256)" 得到 "0xa9059cbb" 等已知選擇器來測試。

雜湊應視為不可逆的指紋——它不是加密,也不是隨機數。為防止彩虹表攻擊,務必在雜湊前加入隨機鹽,並將鹽與資料一同雜湊。

Keccak 的常見風險與陷阱

主要有三大陷阱:填充差異、編碼錯誤,以及應用場景誤用。

  • 填充差異:Keccak-256 與 SHA3-256 混用會造成結果不同,可能導致地址或選擇器不符,進而引發資產損失或合約呼叫失敗。
  • 編碼錯誤:混用文字與十六進位會完全改變雜湊結果。開發過程應統一編碼策略,並在測試時涵蓋所有邊界情境。
  • 應用誤用:雜湊並非加密。敏感資料僅做一次雜湊存儲,仍有字典攻擊風險。務必加鹽並控管存取權限。針對金融安全流程(如 Gate 的鏈上儲值識別),上線前需充分測試與稽核。

Keccak 的安全性與效能

Keccak 的安全性取決於其海綿結構與容量參數。Keccak-256 的抗碰撞強度約為 2^128 次運算,抗原像強度約為 2^256 次運算。

截至 2025 年 1 月,標準參數下尚未發現實際可行的碰撞或原像攻擊,相關研究主要聚焦於降輪變體或理論極限。效能方面,主流函式庫已針對 CPU/GPU 進行高效能優化,硬體加速(如 ASIC)也在高需求場景持續發展。

Keccak 的未來展望

Keccak 作為 SHA-3 的核心演算法,將持續保障系統安全;在 EVM 生態系中,Keccak 是地址、選擇器與日誌索引的基礎。隨著硬體加速與函式庫實作更加成熟,效能與工具鏈還會持續提升。部分新應用(如零知識證明)可能會採用 Poseidon 等雜湊演算法,但這不影響 Keccak 在通用指紋與索引場景的穩定地位。開發者只需明確區分 Keccak-256 與 SHA3-256,嚴格管理編碼與測試流程,Keccak 仍是可靠的底層工具。

常見問題

我想用 Keccak 產生錢包地址,該如何開始?

在以太坊中,Keccak-256 用於產生帳戶地址——對公鑰執行 Keccak-256 雜湊並取最後 20 個位元組作為地址。使用 Gate 或其他錢包應用時,這個流程會自動完成;開發智能合約時,可直接使用 Solidity 的 keccak256() 內建函數。建議先以 Web3.js 等函式庫體驗雜湊如何將任意長度資料轉為固定 256 位元結果。

為什麼不同工具算出的 Keccak 雜湊結果不同?

這通常是因為輸入資料的編碼方式不同。Keccak-256 預期輸入為位元組資料——輸入字串時,各工具可能採用不同字元編碼(如 UTF-8 或 ASCII)。解決方式是在開發時統一編碼並明確指定輸入格式;Gate 等平台通常會提供清楚的輸入說明。同時要確認使用的是 Keccak-256 還是 SHA3-256——即使輸入相同,輸出也會不同。

除了產生地址,Keccak 在智能合約中還有哪些應用?

Keccak-256 在智能合約中的應用非常廣泛:可用於驗證資料完整性(對交易資料雜湊比對)、產生唯一 ID(對參數組合雜湊)、或實現存取控制(將敏感資訊以雜湊形式儲存而非明文)。部分合約會先雜湊用戶資料再儲存,避免洩漏原始值。這種彈性讓 Keccak 成為 Web3 的基礎工具——但請注意雜湊是單向的,無法從雜湊值還原原始資料。

學習 Keccak 需要高階密碼學知識嗎?

不需要。作為 Web3 使用者或初階開發者,只需理解「Keccak 是單向雜湊函數——相同輸入必然產生相同結果」。進階密碼學學習屬於選修(如安全稽核或研究),多數開發者只需呼叫現有函式庫,例如Solidity 的 keccak256。建議先於 Gate 或測試網實際體驗簽章、地址產生等應用。

鏈下應用 Keccak 時有哪些注意事項?

在鏈下程式(前端或後端)呼叫 Keccak 時,請確保函式庫版本與鏈上保持一致——通常為 Keccak-256。使用 Web3.js、ethers.js 等標準庫可避免大多數問題,這些函式庫預設正確實作 Keccak。請特別留意資料序列化——若鏈下產生雜湊供鏈上驗證,序列化方式(如 ABI 編碼)必須完全一致。涉及簽章或合約驗證等場景時,務必於測試環境充分驗證。

真誠點讚,手留餘香

分享

推薦術語
ETH地址查詢
以太坊地址查詢是指在公開區塊鏈上輸入以「0x」開頭的地址,即可查詢該地址的公開資料。這些資料包括ETH餘額、代幣及NFT資產、交易紀錄、智慧合約互動狀況,以及已授權的權限。常見用途包含驗證交易所入金、確認提領是否到帳、資金流向追蹤、稅務申報及風險管理。地址查詢通常透過區塊鏈瀏覽器執行,無需登入帳號。
時代
在Web3領域,「cycle」指的是區塊鏈協議或應用中,依照固定時間或區塊間隔,定期發生的流程或時段。典型案例包括 Bitcoin 減半、Ethereum 共識輪次、代幣歸屬期規劃、Layer 2 提現挑戰期、資金費率與收益結算、預言機更新,以及治理投票週期。各系統的 cycle 在持續時間、觸發條件與彈性上各有不同。深入掌握這些 cycle,有助於管理流動性、優化操作時機,並明確風險界限。
共識機制
共識機制是在區塊鏈網路中,促使去中心化電腦就交易的有效性與需紀錄的資料達成一致的一套規範與流程。這類機制如同共享帳本的對帳系統,確保所有參與者的資料紀錄一致無誤。主流方式包括依賴算力競爭的 Proof of Work(PoW),以及透過質押與驗證者投票的 Proof of Stake(PoS)。共識機制在防範詐騙、維護系統穩定運作、決定網路速度、交易手續費和安全性等方面扮演關鍵角色。Bitcoin 與 Ethereum 等公有區塊鏈皆採用共識機制,聯盟鏈也常見於企業協作應用場景。不同的共識機制在確認速度、網路吞吐量、能源消耗與去中心化程度之間,存在各自的權衡與取捨。
去中心化
去中心化是一種系統設計理念,將決策與控制權分散至多方參與者,在區塊鏈技術、數位資產及社群治理等領域均有廣泛應用。這項機制仰賴眾多網路節點共同達成共識,使系統無需任何單一權威即可自動運作,進而提升安全性、抗審查性與開放性。在加密產業中,去中心化具體展現在 Bitcoin 和 Ethereum 的全球節點協作、去中心化交易所、非託管錢包,以及社群治理模式中,代幣持有者能透過投票決定協議規則。
有向無環圖
有向無環圖(Directed Acyclic Graph,簡稱 DAG)是一種網路結構,能將對象及其方向關係組織成僅能往前推進、無循環的體系。這類資料結構廣泛應用於表示交易依賴、工作流程及版本歷程。在加密網路領域,DAG 支援平行處理交易與共識資訊共享,有效提升系統吞吐量與確認效率。同時,DAG 能清楚展現事件的順序與因果關係,為區塊鏈運作的透明度及可靠性提供強而有力的保障。

相關文章

3074傳奇後對以太坊治理的思考
中級

3074傳奇後對以太坊治理的思考

以太坊 以太坊改進提案-3074/以太坊改進提案-7702事件揭示了其治理結構的複雜性:除了正式的治理流程外,研究人員提出的非正式路線圖也具有重大影響。
2024-06-11 07:21:16
區塊鏈盈利能力和發行 - 重要嗎?
中級

區塊鏈盈利能力和發行 - 重要嗎?

在區塊鏈投資領域,工作量證明(工作量證明)和權益證明(權益證明)區塊鏈的盈利能力一直是備受關注的話題。加密貨幣網紅Donovan寫了一篇文章,探討了這些區塊鏈的盈利模式,特別關注以太坊和Solana之間的差異,並分析了區塊鏈盈利能力是否應該成為投資者關注的重點。
2024-06-17 15:09:39
以太坊被低估了嗎?
中級

以太坊被低估了嗎?

儘管最近一些加密貨幣投資者對以太坊感到失望,認為其表現未能超過比特幣,但以太坊繼續展示持續的技術創新和市場優勢。
2024-05-27 10:01:05