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位元,並且可以具有從0到2^w - 1的值
常見的參數選擇:
w = 1:每個位置代表 1 位元(值為 0 或 1),相當於以二進制表示的 Lamport 簽名w = 4:每個位置代表 4 位元(值為 0-15),即十六進制表示w = 8:每個位置代表 8 位元(值為 0-255),即二百五十六進制表示
雜湊鏈
Winternitz 簽名使用雜湊鏈——從一個秘密值開始,通過重複應用雜湊函數生成的序列:H⁰(s) = s、H¹(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:
計算簽名長度:首先,確定表示任何消息所需的「塊」數量。如果您的消息長度為 256 位元,並選擇 Winternitz 參數為
w = 4,則總共需要 64 個塊:l₁ = ⌈n/w⌉。使用公式l₂ = ⌊log₂(l₁ × (2^w - 1))/w⌋ + 1,我們可以得出對於w = 4,最大校驗和為 960,l₂ = 3,簽名的大小將為l = l₁ + l₂。
創建隨機起點:為每個需要的雜湊鏈生成一個隨機的秘密值。這些隨機值成為你的私鑰組件。可以將每個值視為單獨雜湊鏈的「起點」:
sk = (sk₁, sk₂, ..., skₗ)對於每個私鑰組件,重複應用雜湊函數,直到達到最大可能的次數 (
2^w - 1):pk = (H^(2^w-1)(sk₁), H^(2^w-1)(sk₂), ..., H^(2^w-1)(skₗ))
簽名過程
對訊息 M 進行簽名:
將訊息轉換為基數表示法:
M → (m₁, m₂, ..., m_l₁),其中每個mᵢ ∈ [0, 2^w - 1]計算校驗碼:
c = Σ((2^w - 1) - mᵢ) for i = 1 to l₁並將 c 轉換為基數表示法:c → (c₁, c₂, ..., c_l₂)
生成簽名:基數表示法指示私鑰需要被雜湊的次數。
驗證過程
驗證訊息 M 的簽名 σ 與公鑰 pk:
重新計算訊息表示法:
M → (m₁, m₂, ..., m_l₁)重新計算校驗碼:
c = Σ((2^w - 1) - mᵢ) → (c₁, c₂, ..., c_l₂)對於每個簽名組件,雜湊剩餘次數:
對於訊息部分:驗證
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 簽名在其基礎上構建量子抗性應用程式。