Schnorr 公鑰恢復
根據 如何從 ECDSA 簽名中恢復公鑰?,可以從 ECDSA 簽名中恢復公鑰。
EC-Schnorr簽名也可以嗎?
我正在專門查看https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki 作為 EC-Schnorr 的參考,但它似乎與 pubkey 恢復無關。
修復組 $ E(k) $ 在場上的橢圓曲線上 $ k $ . 認為 $ P \in E(k) $ 是公鑰。如果在消息上簽名 $ m $ 在下面 $ P $ 是一對的編碼 $ (R, s) $ 一點的 $ R \in E(k) $ 和一個整數 $ s $ 滿足(各種標準和)方程
$$ [s]G = R + [H(R \mathbin| m)]P, $$在哪裡 $ G $ 是標準基點,則可以恢復$$ P’ = [H(R \mathbin| m)^{-1}]([s]G - R), $$在哪裡 $ H(R \mathbin| m)^{-1} $ 是標量環中的倒數 $ E(k) $ ,如果有一個逆,這是保證如果 $ E(k) $ 具有像 secp256k1 這樣的主要順序。在像 edwards25519 或 FourQ 這樣的複合順序組中, $ P’ $ 可能不等於 $ P $ 但它可能相當於 $ P $ 用於簽名驗證。 然而,雖然該等式在 BIP-Schnorr 文件中作為一個選項進行了討論,但這並不是他們選擇的選項。 相反,他們選擇了一種設計,其中籤名是一對的編碼 $ (r, s) $ 一個座標 $ r \in k $ 和一個標量 $ s $ 滿足(各種標準和)方程
$$ r = x([s]G - [H(r \mathbin| P \mathbin| m)]P), $$ 有點像 Ed25519,關於它,請參閱有關密鑰隱私的相關討論,因為它離密鑰**恢復更遠。這給你留下了計算的障礙 $ H(r \mathbin| P \mathbin| m) $ 你必須知道 $ P $ 已經,或者知道一些黑魔法來打破雜湊 $ H $ . 所以不,您引用的文件中的簽名方案無法從簽名中恢復公鑰。