General
Solana上的Winternitz簽名

Solana上的Winternitz簽名

Solana 上的 Winternitz 簽名

Solana 上的 Winternitz 簽名

與依賴於整數分解或離散對數等數學問題的 RSA 或 ECDSA 簽名不同,這些簽名容易受到量子攻擊的威脅,Winternitz 簽名的安全性完全依賴於密碼學雜湊函數的單向性質。

這一根本性的差異使其成為後量子密碼學的基石。

什麼是 Winternitz 簽名

Winternitz 一次性簽名(WOTS)源於 Leslie Lamport 在 1970 年代的開創性工作。Lamport 證明了僅使用密碼學雜湊函數即可創建數字簽名,而無需複雜的數學假設。

Lamport 的原始方案使用兩個秘密值來簽署單個位元。要簽署位元 b,您需要揭示雜湊值 H₀ 的前像(如果 b=0)或 H₁ 的前像(如果 b=1)。其安全性完全依賴於計算上無法找到雜湊前像:本質上是從雜湊輸出反推其輸入。

然而,Lamport 簽名的效率極低。簽署一條 n-bit 消息需要 2n 個秘密值,並生成 2n 值的簽名。對於 256 位元的消息,這意味著需要管理 512 個秘密值並生成 512 值的簽名。

Robert Winternitz 在 1990 年代意識到,與其在基數 2 中簽署單個位元,不如在更高的基數(如基數 16 或基數 256)中簽署更大的「數字」。這一創新大大減少了密鑰和簽名的大小,同時保持了相同的安全保證。

數學基礎

Winternitz 參數與基數表示

Winternitz 簽名中的關鍵參數是 w,它決定了我們如何對消息位元進行分組:

  • 基數:b = 2^w

  • 數字範圍:每個數字代表 w 位元,並且可以具有從 02^w - 1 的值

常見的參數選擇:

  • w = 1:每個位置代表 1 位元(值為 0 或 1),相當於以二進制表示的 Lamport 簽名

  • w = 4:每個位置代表 4 位元(值為 0-15),即十六進制表示

  • w = 8:每個位置代表 8 位元(值為 0-255),即二百五十六進制表示

較大的 w 值會產生較小的簽名,但需要更多的計算來保證安全性。這種權衡是理解 WOTS 性能特徵的基礎。

雜湊鏈

Winternitz 簽名使用雜湊鏈——從一個秘密值開始,通過重複應用雜湊函數生成的序列:H⁰(s) = sH¹(s) = H(s)H²(s) = H(H(s))、...、Hⁱ(s) = H(H^(i-1)(s))

其安全性具有非對稱性:給定 Hⁱ(s),計算任何 Hʲ(s)(其中 j > i)很容易(只需多次雜湊 j-i),但計算任何 Hʲ(s)(其中 j < i)在計算上是不可行的,因為這需要反轉雜湊函數。

校驗和機制

校驗和機制可以防止一種特定類型的偽造攻擊。如果沒有它,攻擊者在看到簽名後,可能會修改消息,使其需要在某些鏈上進行更多的雜湊操作,然後偽造這些組件。

校驗和確保所有鏈的總「雜湊預算」保持不變:如果攻擊者將消息數字修改為更大的值(需要更多的雜湊),校驗和數字會自動變小(需要在其他值中進行更少的雜湊,這在沒有私鑰的情況下是無法偽造的)。

密鑰生成過程

對於消息長度為 n 位元,Winternitz 參數為 w

  1. 計算簽名長度:首先,確定表示任何消息所需的「塊」數量。如果您的消息長度為 256 位元,並選擇 Winternitz 參數為 w = 4,則總共需要 64 個塊:l₁ = ⌈n/w⌉。使用公式 l₂ = ⌊log₂(l₁ × (2^w - 1))/w⌋ + 1,我們可以得出對於 w = 4,最大校驗和為 960,l₂ = 3,簽名的大小將為 l = l₁ + l₂

在密鑰生成過程中,你無法知道校驗碼會是什麼,因為你尚未選擇要簽名的訊息,但你仍然需要 l₂ 的私鑰組件來保留校驗碼。

  1. 創建隨機起點:為每個需要的雜湊鏈生成一個隨機的秘密值。這些隨機值成為你的私鑰組件。可以將每個值視為單獨雜湊鏈的「起點」:sk = (sk₁, sk₂, ..., skₗ)

  2. 對於每個私鑰組件,重複應用雜湊函數,直到達到最大可能的次數 (2^w - 1):pk = (H^(2^w-1)(sk₁), H^(2^w-1)(sk₂), ..., H^(2^w-1)(skₗ))

簽名過程

對訊息 M 進行簽名:

  1. 將訊息轉換為基數表示法:M → (m₁, m₂, ..., m_l₁),其中每個 mᵢ ∈ [0, 2^w - 1]

  2. 計算校驗碼:c = Σ((2^w - 1) - mᵢ) for i = 1 to l₁ 並將 c 轉換為基數表示法:c → (c₁, c₂, ..., c_l₂)

要計算該訊息的實際校驗碼值,我們可以使用適當的校驗碼私鑰組件,並根據校驗碼數字對其進行適當次數的雜湊。

  1. 生成簽名:基數表示法指示私鑰需要被雜湊的次數。

驗證過程

驗證訊息 M 的簽名 σ 與公鑰 pk

  1. 重新計算訊息表示法:M → (m₁, m₂, ..., m_l₁)

  2. 重新計算校驗碼:c = Σ((2^w - 1) - mᵢ) → (c₁, c₂, ..., c_l₂)

  3. 對於每個簽名組件,雜湊剩餘次數:

    • 對於訊息部分:驗證 H^((2^w-1)-mᵢ)(σᵢ) = pkᵢ

    • 對於校驗碼部分:驗證 H^((2^w-1)-cⱼ)(σ_(l₁+j)) = pk_(l₁+j)

驗證者從簽名者停止的地方「繼續」每條雜湊鏈,如果簽名有效,則到達已知的公鑰端點。

安全性

一次性使用限制

Winternitz 簽名是一次性簽名 (OTS):每對密鑰只能安全使用一次。

攻擊的運作方式如下:當你使用相同的私鑰簽署多個訊息時,會暴露出雜湊鏈中的中間值。

校驗和機制要求增加某些訊息位元(更多雜湊)必須通過減少校驗和位元(更少雜湊)來平衡。透過多個簽名在不同位置暴露中間值,攻擊者可以構造偽造簽名,利用較高的中間位置進一步提高訊息組件,同時利用較低的中間位置平衡校驗和,從而遵守總雜湊預算的限制。

後量子安全性

Winternitz 簽名的安全性完全依賴於雜湊函數的原像抗性。量子電腦無法有效地反轉像 SHA-256 或 SHA-3 這樣的加密雜湊函數——這與能以多項式時間破解 RSA 和 ECDSA 的量子演算法(Shor 演算法)不同。

使用適當參數的 SHA-256 提供 128 位元的後量子安全性,使這些簽名即使在後量子世界中也適合用於長期加密應用。

Winternitz Signatures on Solana

Solana 當前的加密基礎完全依賴於 Ed25519 簽名,而這些簽名容易受到 Shor 演算法的量子攻擊。

當量子電腦變得實用時,Solana 上的每個錢包、程式授權和交易都可能被偽造。

後量子遷移不是一夜之間可以完成的事情。系統需要從今天開始設計具有量子抗性的功能,創建能在前量子和後量子世界中都能運作的混合方法。

雖然 Solana 的基層仍然容易受到量子攻擊,但開發者可以使用 Winternitz 簽名在其基礎上構建量子抗性應用程式。

Blueshift © 2025Commit: e573eab