Nonce 是 “Number used once”(僅使用一次的數字)的縮寫。在密碼學與通訊協定中,它是隨機或偽隨機產生的任意數字,專門用於確保通訊的唯一性。Nonce 的核心特性包括:
• 唯一性:顧名思義,這個數字在特定加密通訊中只能使用一次,不可重複。
• 不可預測性:在加密場景下,Nonce 通常需具備隨機性,以防止攻擊者預測。
在比特幣 PoW 機制中,Nonce 是礦工於進行雜湊運算時,唯一可手動調整的變數。礦工無法更動交易資料,只能不斷嘗試不同的 Nonce 值,重新計算雜湊值;當某位礦工找到一個 Nonce,使整個區塊的雜湊值符合要求時,該 Nonce 即成為「工作量證明」的依據。
這就像買樂透。區塊資料是你的名字,Nonce 則是你選擇的隨機號碼。你不斷更換號碼(Nonce),直到中獎(符合雜湊難度)。
在以太坊設計中,Nonce 有兩種用途,其中最常見的是帳戶 Nonce:
Nonce 的核心任務是提升系統安全性與完整性:
• 防止重播攻擊(Replay Attacks):這是 Nonce 最基本的功能。攻擊者可能攔截合法通訊並嘗試原樣重送以取得權限,而 Nonce 確保即使訊息被攔截,由於數字已失效,伺服器也會拒絕該請求。
就像支票上的號碼具有唯一性,如果有人持編號 #001 的支票領了錢,銀行會註銷該號碼。即使有人影印這張支票,也無法再次提領。
• 確保資料新鮮度:引入 Nonce,接收端可確認收到的資料為即時產生,而非過去資料的重送。這可確保攻擊者無法利用舊有會話記錄偽造身份。
• 提升不可預測性:Nonce 為加密流程引入變數,令攻擊者難以透過模式分析破解系統。
依產生方式與應用需求,Nonce 主要分為兩類:
• 隨機 Nonce(Random Nonce):以密碼學安全偽隨機數產生器(CSPRNG)生成,具極高熵值與不可預測性。常用於數位簽章與複雜加密方案。
• 順序 Nonce(Sequential Nonce):以遞增計數器產生。雖不可預測性較低,但可絕對確保唯一性,適用於身份驗證機制。
Nonce 應用極為廣泛,從日常網頁瀏覽到數位貨幣的底層交易,以及各類安全協議與新興技術中皆可見。其核心邏輯始終圍繞著唯一性與不可預測性。
• 身份管理與認證領域:於 HTTP 摘要認證、單一登入(SSO)及雙因素認證(2FA)中,Nonce 用於驗證用戶身份並確保認證請求的真實性。
• 加密協議與數位簽章領域:
◦ 在 SSL/TLS 握手過程中,客戶端與伺服器會交換 Nonce 以驗證身份。
◦ 在 AES-GCM 等加密演算法中,Nonce 作為初始化向量(IV)使用,確保相同明文不會產生相同密文。
• 區塊鏈與分散式帳本
這是目前 Nonce 最廣為人知的應用,主要解決「誰有權記帳」及「交易順序」等問題。
例如在工作量證明(PoW)挖礦中:於比特幣中,Nonce 為 32 位元欄位。礦工不斷更換此數字,直到區塊頭的雜湊值小於目標難度值。
在以太坊帳戶管理領域:每個以太坊帳戶皆有遞增 Nonce。這不僅防止重播攻擊(同筆交易重送),亦允許用戶透過發送相同 Nonce 但更高手續費的交易來「覆蓋」或「取消」一筆卡住的交易。
雖然 Nonce 與雜湊值(Hash)常於區塊鏈同時出現,但兩者有本質差異:
在性質上,雜湊值為資料的「數位指紋」,由輸入資料決定且長度固定;Nonce 則屬暫時性、用於改變雜湊輸出結果的變數。
在時間維度上,雜湊值為資料集的固定標識;Nonce 則通常於單次使用後即被棄置。
若 Nonce 產生或管理不當,系統將面臨風險,常見攻擊方式如下:
◦ 重複使用攻擊(Nonce Reuse):攻擊者利用重複 Nonce 破解加密屬性。直接例子如 2021 年 7 月,跨鏈協議 Anyswap 多鏈路由 V3 曾簽出兩筆具有相同值(簽章結果某一分量)的交易,導致私鑰被推導,損失近 800 萬美元。
◦ 可預測攻擊(Nonce Prediction):若 Nonce 產生模式可預測,攻擊者可操控挖礦流程或身份驗證。
◦ 暴力破解:以窮舉 Nonce 值尋找符合條件的雜湊值。例如 2018 年,加密貨幣 Bitcoin Gold(BTG)遭遇多次 51% 攻擊,攻擊者租用大量算力,試圖比全網其他礦工更快「暴力破解」出符合難度的 Nonce,最終造成 388,200 枚 BTG 遭竊,損失約 1,800 萬美元。

截圖來源:Bitcoin Gold 瀏覽器
對開發者與專案方而言,為避免上述攻擊,應採用高隨機性的產生演算法(如 CSPRNG)、實施嚴格唯一性檢查,並定期升級加密函式庫。
Nonce 作為加密技術基石,憑藉「一次性使用」的特性,為複雜網路通訊與分散式帳本提供堅實防護。了解並正確實施 Nonce 機制,是確保數位世界安全、透明與防篡改的關鍵。
延伸閱讀:





