對 Schnorr 簽名的相關密鑰攻擊 - 為什麼挑戰包括ψ=GXψ=GXpsi = g^x, 不是是是y?
如Morita 等人所述,原始 Schnorr 簽名方案遭受相關密鑰攻擊 (RKA) 。然後,本文的作者建議對簽名算法進行修改以防止 RKA,如下所示:
- 放 $ \psi \leftarrow g^x $ , 在哪裡 $ x $ 是方案的私有(簽名)密鑰。
- 將挑戰雜湊設置為 $ h \leftarrow H(M || r || \psi) $ .
上面的第二步不同於原來的 Schnorr 方案(這裡),它只需要 $ h \leftarrow H(r || M) $ .
這種修改是有道理的,但是 Morita 等人的論文。說(第 9 頁):
“請注意,簽名算法的第二步,計算 $ \psi \leftarrow g^x $ ,不應更改為僅使用驗證密鑰 $ y $ 作為 $ \psi $ 。”
作者沒有解釋原因 $ y $ (公鑰/驗證密鑰)不能代替 $ \psi $ ,即使它們的值完全相同 - 這有什麼原因嗎?
更令人困惑的是,隨著在 Taproot 軟分叉中將 Schnorr 添加到比特幣中,比特幣核心開發人員已經編寫了自己的 Schnorr 簽名實現(如BIP340中所述),包括 RKA 的緩解措施。但是,在 BIP340 中,他們決定使用 $ y $ 在挑戰賽中 $ \psi $ ,違背了之前的建議。
這個實現是錯誤的嗎?
作者沒有解釋原因 $ y $ (公鑰/驗證密鑰)不能代替 $ \psi $ ,即使它們的值完全相同。是否有一個原因?
是的。這個想法是改變私鑰 $ x $ 成相關的 $ x’ $ 將改變 $ \psi\leftarrow g^{x’} $ 在簽名時重新計算為不同於 $ y=g^x $ 最初計算,與 $ \psi $ 輸入雜湊從而防止相關密鑰攻擊。
比特幣核心開發人員 (..) 已決定使用 $ y $ 在挑戰賽中 $ \psi $ .
那不是我閱讀規範的方式。相反,簽名似乎重新計算 $ d’ $ (我讀為充當 $ x’ $ ) 然後 $ P $ (我讀起來像 $ \psi $ ) 從目前假定的私鑰。如果有的話,它的實現變體是題外話。
這不應被解釋為對比特幣或其任何分叉或實施的認可。我個人認為整件事是對人類的侮辱。