LIC:在区块链中,详细解析多重签名

大家好,这里是链客区块链技术问答社区。

链客,专为技术开发者而生,有问必答!

多重签名

多重签名脚本设置了一个条件,N个公钥记录在脚本中,并且需要其中至少M个提供签名才能解锁资金。这也被称为M-of-N方案,其中N是密钥的总数,M是验证所需签名个数的阈值。例如,一个2-of-3的多重签名是三个公钥被列为潜在签名者并且其中至少两个必须被用来创建签名,从而创建有效的交易花费资金。

目前,标准的多重签名脚本最多只能列出3个公钥,这意味着你可以执行从1-of-1到1-of-3之间的任意组合的多重签名。本书出版时,列出3个公钥的限制可能已经解除,因此请检查IsStandard()函数以查看网络当前接受的操作。请注意,3键的限制仅适用于标准多重签名脚本,而不适用于包含在支付到脚本哈希中的多重签名脚本。P2SH多重签名脚本限于15个键,最多允许15-of-15的多重签名。我们将在支付到脚本哈希Pay-to-Script-Hash(P2SH)中学习P2SH。

声音 | 李礼辉:我们正处在区块链技术和产业创新的关键机遇期:中国互联网金融协会区块链研究工作组组长、中国银行原行长李礼辉在接受专访时表示,区块链技术经过十年发展,应该说还处在一个初级应用阶段,现在已经有一些规模化的商业应用,但规模总体还不大。另外,很多应用还是一种带有实验性质的。所以,区块链技术现在还不是特别成熟,区块链规模化可靠应用的瓶颈还有待突破,我们还处在区块链技术和产业创新的关键机遇期。

区块链是多种的底层技术创新,比如P2P的对等网络,还有一些密码学的算法作为一种组件技术,它本身是比较成熟的。但当我们把已有的组件技术集成在一起时,那就会得到新的要求。另外,区块链也有特定的技术,比如共识算法、智能合约,这些技术要满足规模化可靠应用的需求,也要进一步创新,让它更加成熟。

在中国运用区块链技术或者用其他数字化技术也好,有一个非常重要的特点就是中国是一个超大的市场。在超大的市场中,任何数字化技术的创新、数字化技术的应用,都要达到超大市场高并发的要求。这也是未来区块链技术进一步创新、进一步提升、进一步成熟所要努力的方向。(新华网)[2020/1/14]

M-of-N多重签名条件的锁定脚本设置通常形式如下:

公告 | 2022年美国政府在区块链上的支出或达到1.235亿美元:据Cointelegraph消息,IDC Government Insights的报告认为,到2022年美国联邦政府预计将区块链的支出提高到1.235亿美元,比2017年的1070万美元增长1000%。同时,州和地方政府的区块链支出预计也将增长,从2017年的440万美元增至2022年的4820万美元,增幅接近1000%。IDC研究主管Shawn McCarthy指出,随着时间的推移,政府对区块链技术的投资可能会进一步发展,并扩大到更复杂的领域。[2019/4/18]

M<PublicKey1><PublicKey2>……<PublicKeyN>NCHECKMULTISIG

金融服务业在区块链上花费17亿美元:研究机构greenwich Associates的数据显示,金融服务行业每年在分布式账薄上的支出约为17亿美元,银行和其他公司正从概念验证阶段转向商业分布式账簿技术。数据显示,去年该行业用于区块链的预算增加了67%,1/10的银行和其他金融服务公司去年在区块链的支出超过1000万美元。同样,参与区块链计划的员工数量去年翻了一番。这是金融服务公司认真对待区块链技术的证据。[2018/6/12]

其中N是列出的公钥数量,M是花费这笔支出所需的签名个数。

一个2-of-3多重签名条件的锁定脚本设置如下:

2<PublicKeyA><PublicKeyB><PublicKeyC>3CHECKMULTISIG

中国平安董事会秘书盛瑞生:平安在区块链等科技领域的投入有上百亿元:中国平安董事会秘书兼品牌总监盛瑞生在演讲中表示,近几年,中国平安致力于科技创新,在区块链、大数据、云科技方面都有非常多的科技储备。平安的科技模式是经过十几年深耕挖掘,我们累计投入的科技研发,差不多有几百亿元。[2018/5/19]

上面的锁定脚本可以被包含签名和公钥对儿的解锁脚本满足:

<SignatureB><SignatureC>

或者3个公钥中的任意两个对应的私钥生成的签名的组合

两个脚本组合起来形成下面的验证脚本

<SignatureB><SignatureC>2<PublicKeyA><PublicKeyB><PublicKeyC>3CHECKMULTISIG

执行时,只有在解锁脚本与锁定脚本设置的条件匹配时,此组合脚本才会评估为TRUE。在这种情况下,条件是解锁脚本是否具有来自3个公钥中的两个对应私钥的有效签名。

CHECKMULTISIG执行中的一个错误

在CHECKMULTISIG的执行过程中有一个错误,需要稍微解决一下。当CHECKMULTISIG执行时,它应该消耗堆栈中的M+N+2个项目作为参数。但是,由于该错误,CHECKMULTISIG会弹出额外的值或超出预期的值。

让我们用前面的验证示例更详细地看一下:

<SignatureB><SignatureC>2<PublicKeyA><PublicKeyB><PublicKeyC>3CHECKMULTISIG

首先,CHECKMULTISIG+弹出顶部元素,它是+N。然后它弹出N个元素,这是可签名的公钥。在这个例子中,是公钥A,B和C。然后,它弹出一个项目,即M,仲裁数。这里M=2。此时,CHECKMULTISIG应该弹出最后的M个元素,这是签名,并查看它们是否有效。然而,不幸的是,实现中的一个错误会导致CHECKMULTISIG弹出另一个元素。额外的项目在检查签名时被忽略,因此它对CHECKMULTISIG本身没有直接影响。但是,必须存在额外的值,因为如果它不存在,当CHECKMULTISIG试图弹出空堆栈时,它将导致堆栈错误和脚本失败。由于额外的项目被忽略,它可以是任何东西,但通常使用0。

由于这个bug成为了共识规则的一部分,现在必须永久复制。因此,正确的脚本验证将如下所示:

0<SignatureB><SignatureC>2<PublicKeyA><PublicKeyB><PublicKeyC>3CHECKMULTISIG

所以,正确的解锁脚本不是

<SignatureB><SignatureC>

而是:

0<SignatureB><SignatureC>

从现在起,如果你看到一个multisig解锁脚本,你应该在开始时看到一个额外的0,其唯一目的是修正意外成为共识规则的错误。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

链链资讯

[0:15ms0-3:743ms