Multi-Signature

防止中間人盜竊的比特幣多重簽名方案

  • July 1, 2022

背景

我正在考慮建立一項服務,允許我所在行業的參與者使用我的集中配對服務相互達成 OTC 交易。

交易總是涉及兩個參與者,他們都在交易開始時存入比特幣抵押品。讓我們稱我們的兩個玩家為 PlayerA 和 PlayerB。作為運營商,我跟踪他們的交易進展情況,並隨著交易的展開在內部在兩個參與者之間來回移動比特幣。這種和解發生在每天結束時,它在我的系統內部。它沒有發佈到比特幣區塊鏈。

如果一方或雙方想要退出交易,則交易被視為“已解決”,一方將獲得已實現的損失,另一方將獲得收益。這是一場零和遊戲。

問題

“不是你的鑰匙,也不是你的硬幣。”

玩家要求以一種點對點的方式進行互動,而無需我作為運營商訪問控制其抵押存款的私鑰。這將防止我帶著他們的資金潛逃。

我懷疑我不夠聰明,無法提出正確的解決方案,或者即使上述解決方案是可能的,但我至少想嘗試一下。

到目前為止我畫的

考慮這個例子:

開始交易:玩家 A 花費 1 BTC,這樣產生的 UXTO 可以通過以下方式兌換:

  • 僅限玩家 A:六十天時間鎖定,或
  • PlayerA AND Operator 隨時

60 天等待背後的想法是,如果 Operator 放棄該項目,再也不會收到消息,PlayerA 最終可以贖回他的資金。

讓我們假設 PlayerB 也這樣做。

PlayerA 和 PlayerB 通過應用程序找到彼此並建構交易。每天,抵押品都會根據交易的進展情況進行重新平衡。假設在維持交易四天后,PlayerB 領先 0.50 BTC 並想和解。然後系統將交易送出到 PlayerA 的節點,輸出如下:

  • PlayerA:0.50 BTC(PlayerA的剩餘抵押品)
  • 玩家B:0.50 BTC(玩家B的獎金)

PlayerA 簽署交易。運營商也對其進行簽名並將其發佈在區塊鏈上。玩家 B 得到他的 0.50 BTC,而玩家 A 得到他剩餘的 0.50 BTC 抵押品。該交易現已結束。

我想不通的事

我不明白如何阻止 PlayerA 退出交易。他知道他損失了 0.50 BTC,他知道我不能強迫他簽署結束交易。他的動機是走開。

我當然可以安排一些事情,以便我作為運營商可以單方面將資金轉移給玩家 B,但這將使我完全控制玩家 A 的資金——這正是我們試圖避免的,因為我有能力竊取抵押品.

有沒有一些巧妙的方法使用多重簽名和時間鎖來激勵玩家 A 意識到他的損失並簽署關閉交易?邏輯必須以這樣一種方式建構,即如果他在某個預定期限後拒絕簽署,他將沒收所有抵押品。並且這些抵押品將被沒收給玩家 B,而不是作為運營商的我。

由於我對比特幣程式語言的了解有限,我不確定如何實現它。有什麼聰明的主意嗎?不是在尋找程式碼,只是對比特幣原語和工具的高級概述,我可以用來實現我的目標。

我可以考慮一些可能性。

您可以在您的平台上使用 DLC(離散日誌合約)作為預言機。如果您簽署一份證明表明它確實適用於給定的陳述,則每個輸出都可以在任何時候被任何部分贖回。你甚至不需要知道每個參與者持有哪個 UTXO,然後驗證這個 p2p。這裡唯一的信任是您不會創建欺詐性證明。我什至可以想像一種協議用於屏蔽交易,為您的使用者提供更多隱私,但這更加進化並且難以正確執行。

另一種方法是在每次匹配訂單時要求每個參與者簽名,這樣您就可以獲得每個參與者的最新簽名,並且可以隨時建構具有目前狀態的 tx。這類似於 Lightning 的工作方式,需要謹慎實施。

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