Lightning-Network
可選標記欄位 19 與簽名恢復。這些 pub 鍵會有所不同嗎?
來自 Bolt-11:
A reader if a valid `n` field is provided: MUST use the `n` field to validate the signature instead of performing signature recovery.
這僅僅是性能優化嗎?是否存在聲明的公鑰欄位與從簽名中恢復的公鑰不同的情況?
從 ECDSA 簽名中恢復公鑰不是唯一的。這是因為
r
簽名中的值只是一個點的 x 座標,所以實際上有兩個點具有相同的 x 座標,R
並且-R
兩者都會給出不同的公鑰。實際上,為了完整起見,您甚至可以得到四個可能的公鑰——但這發生的機率可以忽略不計。在 bolt-11 中,一個取值為 0、1、2 或 3 的恢復 ID 用於指定應該使用這四個公鑰中的哪一個。但實際上,簡單地使用給定的 public key 更有效
n
。我認為除了效率之外沒有其他實際的好處,而且在恢復過程中出現問題時可能還具有強韌性。n
應該始終是恢復的密鑰之一,否則簽名驗證將失敗。