跳轉到

D-20260706-14|簽章位元組結構釘死+Race Sign Key 派生式

背景與驅動力

D-20260604-04 定了簽章涵蓋四欄,但簽章訊息的位元組結構未釘死:key-manager spec 偽碼(四參數)與 ledger 檔簽名(單參數)對不上——跨 client 各自序列化 = 驗簽必炸。同輪並發現 Race Sign Key「同 raceId 跨 peer 一致」措辭錯誤:字面 = 各玩家同一把鑰匙、賽內簽章可互偽。里程碑 2b key-manager 落地複審抓出。

考慮過的選項

(流水帳未記錄替代方案;本決策以修正 / 釘死形式成立。)

決定

  • buildSignedMessagesha256(dagCbor.encode({nonce, payload, signer, timestamp})) 釘死為唯一簽章訊息構造式;函數名 =spec 與 src 的雙向對照鍵,其他檔撤公式一律改指單一權威(程式架構/key-manager.md)。
  • Race Sign Key 派生式釘死 sha256(master ‖ 'open4wd-race-sign' ‖ raceId):同(master, raceId)確定性重派生、各 peer 各自持鑰、公鑰賽前握手交換——「跨 peer 一致」錯誤措辭廢除。

後果與影響

amends D-20260604-04:補完其未定的序列化層,簽章封套自此可跨 client 互驗。dag-cbor canonical 編碼在簽章路徑成為既成事實,為 D-20260708-01 的 wire 編碼定案鋪路;「單一權威 + 各處 copy 同步改指」自此為同型 drift 的標準防線。