閃電網路的 BOLT11 付款請求格式已更新,現在要求付款雜湊與付款密鑰各只能出現一次。解析請求的軟體只要發現其中任一欄位缺漏或重複,就必須拒絕付款。
閃電規格儲存庫於 10 月 19 日合併這項 BOLT11 修訂案。即使重複欄位的值完全相同,也不例外。此次修改旨在減少不同軟體對付款請求採取不同解讀的空間。
BOLT11 是閃電網路用來請求付款的格式。付款雜湊用於識別付款所需資訊;付款密鑰則用來防止他人透過閃電付款路徑探查收款者。付款請求包含多項資訊,這次修改要求檢查「p」欄位與「s」欄位各自出現的次數。
問題在於,各套軟體處理重複付款雜湊的方式不一。有些採用第一個雜湊,另一些則選最後一個。舊版 BOLT11 規格雖建議付款方使用第一個雜湊,卻沒有要求必須拒絕含有重複雜湊的請求。
閃電開發者 Roasbeef 在 9 月 10 日說明修訂案時表示,Telegram 上的 P2P 機器人曾遭駭客利用這項差異攻擊。如果機器人從付款請求讀取的雜湊,與節點實際用於付款的雜湊不同,服務紀錄可能在款項已提領後仍顯示未付款,進而導致額外付款。攻擊發生時間與損失金額尚未公布。
規格修訂前,閃電節點軟體 LND 也已加入拒絕重複付款雜湊的修改,並於 9 月 23 日合併。Bitcoin Optech 說明,LND 過去會使用第一個雜湊並忽略其餘雜湊。如果解析請求的其他軟體選了不同雜湊,就可能把已完成的提領誤認為尚未付款。
個別軟體的實作範圍仍須與規格修訂區分。截至 10 月 27 日,LND 拒絕重複付款雜湊的修改已合併;至於拒絕重複付款密鑰等擴大解碼器檢查的另一項提案,當時仍在審議中。因此,不能只憑規格變更就認定所有閃電服務都已採用相同檢查。
Bitcoin Optech 表示,服務營運者應確認服務解析付款請求的方式,是否與節點實際使用的付款雜湊一致,並檢查提領紀錄是否依據節點使用的付款雜湊建立。
留言 0