Development
在原始碼中,從簽名中恢復密鑰的這一行是什麼意思?
我知道可以從簽名 (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 編碼。