為什麼 MultSig 的鎖定腳本包含 PubKeys 而不是 PubKeyHash?
我正在閱讀 Andreas Antonopoulos 的“掌握比特幣”。在交易部分,普通賬戶(單個地址)的鎖定腳本是
OP_DUP OP_HASH160 <Cafe Public Key Hash> OP_EQUALVERIFY OP_CHECKSIG
我確定這
<Cafe Public Key Hash>
是收件人的地址。但是多簽名帳戶的鎖定腳本是,
2 <Public Key A> <Public Key B> <Public Key C> 3 CHECKMULTISIG
我的問題是,為什麼多簽名地址的鎖定腳本包含他們的公鑰而不是 PubKeyHash(地址)?而且接收方(多簽名所有者)向發件人透露他們的公鑰也不是很危險……遠射但如果 ECDSA 發生故障,他們無法使用 SHA256 和 RIPEMD160 來確保安全,對嗎?
我的問題是,為什麼多簽名地址的鎖定腳本包含他們的公鑰而不是 PubKeyHash(地址)?
為什麼會呢?
在 P2PKH 中使用公鑰散列的原因是因為它導致地址更短(在 Satoshi 的時代,在壓縮公鑰之前,公鑰是 65 字節,因此使用 20 字節的散列明顯更短)。裸多重簽名不存在這樣的論點,因為不存在裸多重簽名的地址。
在 P2SH(或 P2WSH)多重簽名中,這個問題也不適用,因為給發送者的是一個只包含鎖定腳本*雜湊的地址。*該腳本是否使用 pubkeys 或 pubkey 散列不會影響該散列的大小。在腳本中使用額外的重定向也會浪費資源(因為在花費時間時,公鑰雜湊(在鎖定腳本內)和完整的公鑰(作為它的輸入)都需要傳遞)。
而且接收方(多簽名所有者)向發件人透露他們的公鑰也不是很危險
在某些情況下,發送者會知道接收者的公鑰,但通常情況並非如此。如前所述,不存在裸多重簽名地址類型,因此最常見的是使用 P2SH 或 P2WSH 多重簽名。在這種情況下,發件人只收到來自收件人的腳本雜湊。
關於安全性降低,我自己(並且顯然有些爭議)的觀點是公鑰散列對比特幣的安全性沒有有意義的貢獻,雖然它經常重複,但這是貨物崇拜。原因是:
- 如果 ECDSA 被破壞,任何與礦工合作的攻擊者都可以利用它(因為未經確認的交易會洩露公鑰)。
- 數以百萬計的 BTC 儲存在具有公開公鑰的輸出中。在假設 ECDSA 被破壞(只要 ECDSA 是常用的)之後,你不能真正希望 BTC 保持任何價值。
- 大量有趣的案例涉及向其他方透露公鑰(例如閃電網路,甚至只是簽名者之間的多重簽名)。如果我們嚴重關注 ECDSA 的安全性,我們不應該僅僅阻止這些,而應該將它們取締。這不會發生,因為 ECDSA 是比特幣安全假設的一部分。處理它被破壞是通過遷移到其他東西來完成的,而不是通過修補它。
該站點上還有其他答案,其中對此進行了更詳細的介紹。