Development

在原始碼中,從簽名中恢復密鑰的這一行是什麼意思?

  • November 2, 2013

我知道可以從簽名 (r,s) 中提取公鑰 (Q),但我無法理解這一行:

if (!key.Recover(hash, &vchSig[1], (vchSig[0] - 27) & ~4))

第三個變數稱為“rec”,必須為 0 到 3。

  • 這個參數(第三個)的目的是什麼?
  • 為什麼簽名從字節1而不是 [0] 開始?也許我沒有正確理解 r 和 s 在比特幣簽名中的“位置”。

簽名格式是否封裝在任何標準中?PKCS..?等等。

它是一種自定義格式,對簽名和允許從中重建公鑰的參數進行編碼。

給定一個簽名(一個 (r,s) 對)及其簽名的消息,最多可以有 4 個不同的公鑰對其有效。要知道是哪一個,數字是沿著簽名編碼的。

第一個字節是這個恢復參數加27。如果對應的公鑰是壓縮的,加4。接下來的 32 個字節編碼 r。最後 32 個字節編碼 s。

請注意,此格式僅用於消息簽名。用於交易簽名的方案較舊,不支持恢復,並使用 DER 編碼。

引用自:https://bitcoin.stackexchange.com/questions/14263