Hash-Signature
基於 SPHINCS 雜湊的簽名如何“無狀態”?
我真的希望有人可以幫助我解決這些與 SPHINCS 相關的問題。
我試圖理解“無狀態”與“有狀態”簽名方案的概念,這是 SPHINCS 的基礎。我閱讀了 Goldreich 的密碼學基礎第 2 卷的第 6.4 章。在第 546 頁,附有這個問題的圖片,他給出了一個父節點 x 驗證兩個子節點 x_0 和 x_1 的小例子。
以下是我的問題:
Q1:節點 x 生成 (S_x, V_x) 對,其中 S_x 是密鑰,V_x 是公鑰。然後節點 x 分別為節點 x_0 和 x_1 生成兩個額外的對 (S_x0,V_x0) 和 (S_x1,V_x1)。除了它們使用相同的 G(1^n) 之外,S_x 和 S_x0,S_x1 之間是否存在任何關係?
Q2:公鑰只有V_x?
Q3:簽名只發生在子節點上。假設我用 S_x0 對 α 簽名,因此簽名將是 σ=f_Sx0(α),V_x0,auth_x0 其中 auth_x0= f_Sx(V_x0) ?
Q4:在 SPHINCS 中,我們可以假設所有的私鑰也是用相同的 G(1^n) 生成的嗎?因此我們總是會在給定相同種子的情況下生成相同的私鑰?於是“無國籍”從何而來?
非常感謝
我面前沒有 Goldreich,但是看起來他正在討論與 Merkle 樹完全不同的東西(至少,因為它出現在基於雜湊的簽名方法中)。
在那些 Merkle 樹中,樹是自下而上建構的,而不是自上而下的。也就是說,頂層節點不定義子節點持有的值;相反,頂部節點值是子節點的(單向)函式。此外,一個節點的值可能是公開的(也就是說,我們不介意有人知道它);它沒有秘密成分。唯一的秘密是每個 Merkle 樹底部的一次(或幾次)簽名的私鑰。
至於基於有狀態和無狀態的簽名方法之間的區別:
- 有狀態的方案有一個底部有多個一次性簽名的 Merkle 樹(或樹的樹);每個一次性簽名可以使用一次(你猜對了);因此,簽名者需要跟踪他使用了哪些;也就是說,當他使用一次性簽名來簽署消息時,他必須更新他的狀態。
- 無狀態方案(例如 Sphincs)有一個大樹樹;但在底部,它們有一些拍號(Sphincs 使用 HORST);每個這樣的幾個時間簽名可以簽署幾條消息。因此,當 Sphincs 對消息進行簽名時,簽名者選擇一個隨機的幾次簽名,使用它對消息進行簽名,然後通過 Merkle 樹直到根(即公鑰)對其進行身份驗證。由於我們使用的是幾次簽名,我們不介意偶爾多次選擇相同的幾次簽名;少數時間簽名方案可以處理它。而且,由於我們在生成簽名時不需要更新任何狀態,這被認為是“無狀態的”。