XMSS^MT 私鑰大小
我正在對基於雜湊的簽名方案進行一些比較。我正在閱讀最新的方案之一,XMSS^MT,並試圖找出具體參數的實際公鑰和私鑰大小。
我發現這篇論文有一些用於各種參數的數字,但是它沒有說明私鑰的大小(即使是 XMSS 參數)。有沒有人弄清楚這一點?
談論 XMSS 私鑰大小的問題在於存在相當多的大小/性能權衡,因此沒有一個答案。
至少,私鑰需要具有用於生成 WOTS+ 私鑰的值( $ n $ 位),該 $ n $ 位公共種子和目前葉索引(20、40 或 60 位,取決於參數集)。此外,如果您遵循 RFC 的建議,您還有一個 $ n $ 位 SK_PRF 值(進行隨機散列),以及 $ n $ 位根(儘管如果必須的話,您可以即時重新計算)。
如果您這樣做(包括建議),這將轉換為私鑰(對於 $ n=32 $ ) 136 字節(假設參數集具有 60 級的超樹)。
另一方面,如果您只是這樣做,這將意味著,對於您生成的每個簽名,您都需要重建所涉及的每個 XMSS 樹;那不便宜。
現在,顯而易見的事情還包括每個 XMSS 樹的內部內容;這使事情變得很快,但大大增加了私鑰的大小。
作為妥協,您可以保存一些內部 Merkle 樹元素,並使用樹行走算法,例如BDS以增量方式生成下一個身份驗證路徑(如果您正在執行 XMSS^MT,請不要忘記開始在遍歷這棵樹的同時建構下一個 Merkle 樹,如果您想避免在耗盡這棵樹時必須建構整個下一個 XMSS 樹。有許多已知的樹行走算法,具有各種權衡(和可調整的參數)。
此外,您可能還希望在您的私鑰中包含其他內容。例如,如果您有興趣檢測故障攻擊(其中較低級別 XMSS 公鑰的錯誤計算導致下一個更高級別的 WOTS+ 簽名通過兩個不同的簽名操作對兩個不同的消息進行簽名),您可能希望儲存簽名(或公共目前較低級別樹的密鑰)(或者,簽名的散列);那樣的話,要麼你從來沒有真正用相同的 WOTS+ 私鑰簽名兩次(或者,如果計算錯誤導致你生成兩個不同的簽名,你就會抓住它)。
所有這些都導致您可以做出許多不同的權衡,因此,對於“私鑰有多大”沒有簡單的答案
您詢問了使用 BDS 的範例;讓我們列出一些假設:
- 我們假設私鑰包含我上面列出的各種中心資訊,層次結構中每個 Merkle 樹的 BDS 樹,建構下一個 Merkle 樹的位置(對於除頂部之外的所有 Merkle 樹級別),僅此而已
- 我們將使用帶有內部變數的 BDS 算法 $ k=2 $ (注意:BDS 論文指出該算法僅在以下情況下才有效 $ H-B $ 是均勻的;對算法的簡單修改使其適用於所有情況)。
然後,中心資訊取 $ 4n+h $ 位。
並且,如果我們表示 $ H=h/d $ 作為每個 Merkle 樹的高度,每個 BSDS 樹(目前和下一個正在建構的樹;總共 $ 2d-1 $ ) 佔用不超過 $ n(\lfloor 3.5H \rfloor - 4) $ 記憶體(實際上,它使用的少了一點,但是關於少多少的特徵是不平凡的)。
此外,每個活躍的 BDS 結構(總共 $ d $ 其中)需要一些輔助資訊來跟踪儲存在其堆棧中的內容(我們不需要為正在建構的 Merkle 樹儲存輔助資訊)。我不想精確檢查這佔用了多少記憶體。我將其估計為 $ 8H $ 位。
這給出了總共 $ n(4+(2d+1)(\lfloor 3.5h/d \rfloor - 4)) + 9h $ 位
不同的假設給出不同的數字(可能更高,也可能更低……)