无脚本多签名和门限签名

在“脚本化多重签名”中,我们讨论了需要多个密钥签名的脚本。然而,还有另一种需要多个密钥合作的方式,也被称为多重签名,这也让人感到困惑。为了区分这两种类型,在本节中,我们将称涉及OP_CHECKSIG类操作码的版本为脚本化多重签名,称另一版本为无脚本多重签名。

无脚本多重签名要求每个参与者都像创建私钥一样创建自己的秘密。我们将这个秘密称为部分私钥,尽管我们应该注意到它与常规完整私钥的长度相同。从部分私钥中,每个参与者使用我们在“公钥”中描述的与常规公钥相同的算法派生出部分公钥。每个参与者与所有其他参与者共享他们的部分公钥,然后将所有密钥组合在一起创建无脚本多重签名公钥。

这个组合的公钥看起来与任何其他比特币公钥都一样。第三方无法区分多方公钥和由单个用户生成的普通密钥。

要花费由无脚本多重签名公钥保护的比特币,每个参与者都生成一个部分签名。然后,将这些部分签名组合成一个常规完整签名。有许多已知的方法来创建和组合部分签名;我们将在第8章中更多地讨论这个主题。与无脚本多重签名的公钥类似,通过此过程生成的签名看起来与任何其他比特币签名都一样。第三方无法确定签名是由单个人创建还是由百万人相互合作创建的。

无脚本多重签名比脚本多重签名更小、更私密。 对于脚本多重签名,每个涉及的密钥和签名都会增加事务中的字节数。对于无脚本多重签名,大小是恒定的 —— 即使是一百万个参与者每人提供自己的部分密钥和部分签名,所放置在事务中的数据量也与使用单个密钥和签名的个体相同。隐私方面也是如此:因为每个新的密钥或签名都会向事务中添加数据,脚本多重签名会泄露有关使用了多少个密钥和签名的数据 —— 这可能会很容易地确定是哪些交易是由哪些参与者组创建的。然而,由于每个无脚本多重签名看起来都像其他无脚本多重签名和每个单个签名一样,没有泄露降低隐私的数据。

无脚本多重签名存在两个缺点。第一个是为了在比特币上创建它们,所有已知的安全算法都需要更多的互动轮次或更谨慎的状态管理,这可能在签名几乎无状态的硬件签名设备生成签名并且密钥在物理上分布时会有挑战。例如,如果你将硬件签名设备放在银行保险箱中,你可能需要访问该保险箱一次来创建脚本多重签名,但是对于无脚本多重签名可能需要两次或三次。

另一个缺点是阈值签名不会透露谁签名了。在脚本化阈值签名中,Alice、Bob 和 Carol 同意(例如)任意两人签名就足以花费资金。如果 Alice 和 Bob 签名,这就需要在链上放置每个人的签名,向任何知道他们密钥的人证明他们签名了,而 Carol 没有。在无脚本阈值签名中,来自 Alice 和 Bob 的签名与 Alice 和 Carol 或 Bob 和 Carol 之间的签名无法区分。这对隐私有益,但这意味着,即使 Carol 声称她没有签名,她也不能证明她没有签名,这可能对问责和审计不利。

对于许多用户和用例来说,多重签名的始终减小的大小和增加的隐私优于其创建和审计签名时的偶发挑战。

Last updated