keyImage 如何連結到環簽名?
我試圖理解環簽名的概念。因此,似乎有一種方法可以讓您擁有一組公鑰,這些公鑰只能由該組的一個私鑰簽名,而不會透露實際使用了哪個私鑰。另一方面,你有一個 keyImage 來防止雙重花費,這樣觀察者就可以確定這個特定的私鑰還沒有被使用。
我不明白這個 keyImage 是如何產生和驗證的。它以某種方式從私鑰派生並以無法逆向工程的方式進行散列。但是我怎麼知道私鑰實際上用於 keyImage 呢?我的意思是我可以只使用一個隨機的 keyImage 來擁有它的唯一性。
因此,它必須以某種方式與簽名相關聯,以便可以確定它確實是從私鑰派生和散列的。當然,不會透露使用了該組的哪個私鑰。那麼這是如何联系在一起的呢?
希望在評論中滿足@fgrieu 的邀請,我嘗試了一個來自門羅幣實現的答案。這些話的來源是我在學習 https://www.getmonero.org/library/Zero-to-Monero-2-0-0 時寫的https://getmonero.org/library/RingsCheatsheet20210301.pdf的備忘單。 pdf
我認為正確的做法是從橢圓曲線上的鍵的非互動式(Fiat-Shamir 風格)Schnorr 簽名開始。讓我們快速回顧一下。
比方說 $ (x,X) $ 是私鑰/公鑰對,其中 $ X\triangleq xG $ 和 $ G $ EC的發電站; $ tx $ 是交易/文本/我們需要簽署的任何東西;簽約 $ tx $ 和 $ x $ 意味著能夠生成一對 $ (c,r) $ 這樣:
$ H(tx, rG + cX)=c $
在哪裡 $ H $ 是一個雜湊(不管這裡是哪一個)和 $ c $ 和 $ r $ 被稱為“挑戰”和“響應”,術語來自互動式模式。 $ c $ 是從一個秘密的隨機唯一的 $ \alpha $ 只有簽名者知道並且從未在兩個簽名中重用,上述等式等價於:
$ rG + cX = \alpha G $
(順便說一句,通過替換你得到如何 $ c $ 被定義為 ;) )
所以,從鳥瞰的角度來看,我們可以說驗證 $ tx $ 簽名人 $ x $ 是簽名內容、公鑰、挑戰和響應的函式:
$ f(tx, X, r, c) $
環簽名是關於尋找帶有誘餌的這種模式的味道,同時仍然只保留一個 ACTUAL 簽名者(從技術角度來看:需要很多 $ X_i $ - 比方說 $ n $ - 在驗證算法但單一 $ x $ 在簽名算法中);並且所有相關的關鍵所有者之間都沒有協調。
每個人都有挑戰和回應 $ X_i $ ,所以我們有 $ c_i $ 和 $ r_i $ , 然而事情是這樣安排的 $ c_i $ 我們可以計算 $ c_{i+1} $ ,當出現“溢出” $ i=n $ (這裡是“環”),所以:
$ H(tx, r_{i}G + c_{i}X_{i})=c_{i+1} $ 和 $ 1 \le i \le n-1 $
$ H(tx, r_{n}G + c_{n}X_{n})=c_1 $ 和 $ i=n $
鑑於我們可以從 $ c_n $ 至 $ c_1 $ 以上條件導致簽名驗證功能:
$ f(tx, X_i, r_i, c_1) $
但“魔力”從何而來?如何安排_ $ c_i $ 形成一個封閉鏈,其中給定一個挑戰值,您可以計算所有其他挑戰值(注意我們選擇 $ c_1 $ 作為一個特別的,但這真的沒什麼特別的)?好吧,多虧了這些事實:
- 如果我們表示為 $ c_\pi $ 與實際簽名者相關的挑戰, $ c_{\pi+1} $ 由隨機秘密計算得出 $ \alpha $ 只有實際簽名者知道(它記得什麼嗎?;));
- 所有其他 $ c_i $ 用上述鍊式計算;
- 全部 $ r_i $ 只是隨機數,除了 $ r_\pi $ 就是這樣選擇的 $ c_{\pi+1} $ 也要尊重鍊式公式(即使它來自 $ \alpha $ )
現在最終是關鍵圖像 $ X^* $ !一部分來自於在交易中做廣告以防止雙重支出,它也是一部分 $ c_i $ 微積分,再一次 $ \alpha $ 使用 /chain 公式技巧:它僅在關鍵圖像時才成立 $ X^* $ 以非常具體的方式獲得,即 ACTUAL 簽名者的私鑰和公鑰的功能。
這就是為什麼你不能隨便選擇一個尚未使用的隨機!
我理解這只是推理的主線,遺漏了很多細節,但我希望你能在這些伴隨詞的幫助下在備忘單中找到它們(我想你的需要你可以只關心“非互動式(菲亞特-Shamir) Schnorr"、“SAG” 和 “bLSAG”)