科普丨Mimblewimble 的“无脚本脚本”是啥

文章内容较长,且涉及的技术术语比较多,为了方便大家查看,特地整理了关于本篇内容的目录。在阅读本文之前,请先仔细查看目录,这件有助于更好地理解内容。目录如下——

科普丨Mimblewimble 的“无脚本脚本”是啥

文章内容较长,且涉及的技术术语比较多,为了方便大家查看,特地整理了关于本篇内容的目录。在阅读本文之前,请先仔细查看目录,这件有助于更好地理解内容。目录如下——

  1. 无脚本脚本的定义

  2. 无脚本脚本的优势

  3. 施诺尔签名(Schnorr Signatures)

  4. 施诺尔多重签名

  5. 适配器签名

  6. 同步无脚本脚本

    · 原象(Preimages)

    · 两种施诺尔签名的区别

  7. 适配器签名的互换用例(跨链互换)

  8. 零知识条件支付(Zero Knowledge Contingent Payments)

  9. Mimblewimble的核心无脚本脚本

1.无脚本脚本的定义

无脚本脚本通过使用施诺尔签名Schnorr Signatures,在链下执行智能合约。

无脚本脚本的概念源至Mimblewimble,它是一个区块链设计,只存储内核以及内核签名,不存储永久性数据。Mimblewimble的基本属性η=γ包括隐私和扩容,两者都需要用无脚本脚本来实现。

2.无脚本脚本的优势

无脚本脚本的优势是功能性、隐私性和高效性。

  • 功能性

说到函数性,无脚本脚本可以扩大智能合约的范围和增加复杂度。当前,就像比特币的脚本一样,限制网络启用op-code(操作码)数量。无脚本脚本将智能合约的规范和执行,转移为只探讨智能合约的参与者。

  • 隐私性

在隐私性方面,将链上规范和执行智能合约转移到链下。在链上时,将智能合约的很多细节广播给整个网络,包括参与者数量和地址,以及转移金额。将智能合约移到链下,网络只知道参与者同意了其合约条款,并且交易生效。

  • 高效性

至于高效性,无脚本脚本将需要在链上验证和存储的数据量减至最小,将智能合约移至链下,全节点的开销更少,用户的手续费也降低了。

无脚本脚本列表

本篇报告将包含脚本的类型:

· 同步无脚本脚本Simultaneous Scriptless Scripts

· 适配器签名Adaptor Signatures

· 零知识条件支付Zero Knowledge Contingent Payments

3.施诺尔签名的作用

首先,先介绍施诺尔签名的定义。签名者拥有私钥x和随机数r,G是集群生成器,该集群的极难的离散对数,P是公钥。

然后,以一个简单的线性交易算出签名s

s=r+ex

而:

e=H(P||r||message)

P=xG

提交所选行的所有数据(数据签名)散列。验证方程等于将方程中的每一项乘以G,以及加密假设(离散日志),乘以G,但不能除以G,这样防止解密。

sG=rG+exG

比特币使用的椭圆曲线签名算法(ECDSA)的x和r并非线性,因此帮助不大。

4.施诺尔多重签名

多重签名(mulitsig)是指有多个参与者签名。每个参与者都可以生成一个单独签名,并将这些签名连接起来,组成一个多重签名。

多重签名有一个单一公钥,是参与者公钥的总和。由参与者公钥生成的公钥是一个用签名可验证的公钥。

多重签名公式包括对所有分量求和,所有的随机数和s值都会影响多重签名的形成。

s=Σs(i)

可以看出,这些签名本质上是无脚本脚本。多个参与者的独立公钥联合起来形成一个公钥和签名。当公布该联合公钥和签名时,不会透露参与者的数量或原始公钥的详细信息。

5.适配器签名

可通过修改多重签名协议来生成适配器签名,作为所有无脚本脚本函数的构建块。

适配器签名不是充当带有公钥信息的有效签名,而是承诺发布签名后将揭示一个secret。

这个概念类似原子交换,但没有执行脚本。由于适配器签名是椭圆曲线加密技术,因此只有椭圆曲线点的标量乘法。就像哈希函数,椭圆曲线函数只是它的一个方式,因此可以轻松地共享椭圆曲线点(T),而且secret将是其相应的私钥。

如果考虑到双方:不是在多重签名协议中提供他们的随机数R,而是导出椭圆曲线点T(致盲因子),作为R(即R+T)的补充。因此R并未被掩盖,而是被T抵消。

施诺尔多重签名修改,以便第一方生成

T=tG,R=rG

使用该信息,第二方生成

H(P||R+T||message)x

要交换的币包含在信息中,第一方现在可以计算出完整的签名s

s=r+t+H(P||R+T||message)x

然后第一方计算并公布适配器签名s给第二方(以及其他在收听的各方)

s′=s−t

第二方公布s’G验证适配器签名s

s′G=?R+H(P||R+T||message)P

然而,这不是一个有效签名,因为哈希的随机数R+T不等于R。

第二方无法从中检索到有效签名,而且用ECDLP算出来恢复s’+t的值事实不可能。

第一方广播s后去认领信息内的币,第二方可以按以下公式计算出secret t的值

t=s−s′

上述非常普遍,但通过附加辅助证明,也可以导出适配器签名,从而将辅助协议的正确转移转换为有效签名。

6.同步无脚本脚本

  • 原象

执行原子式单独交易是通过原象实现的,如果两笔交易需要同一散列的原象,一旦执行了其中一笔交易,就会公开原象。原子交换和闪电通道使用了这种架构。

  • 两种施诺尔签名的区别

如果要考虑两种施诺尔签名的区别:

d=s−s′=k−k′+ex−e′x′

通过将每个项乘以G并确认代数正确性,可以以与施诺尔签名相似的方式验证上述等式。

dG=kG−k′G+exG−e′x′G

必须指出,正在验证的是差异d,而不是施诺尔签名自身。D是两个单独施诺尔签名之前的转换公钥。给定d和s/s’,可以计算出另一个。因此拥有d使得这两个签名具有原子性。这种方式不会将两个签名链接起来,也不会损害它们的安全性。

对于原子交易,在设置阶段,一方向对方提供d,并将其断言为正确的值。一旦签署完交易,就可以调整它来完成其他交易。可以实现原子性,但只能由拥有此d值的人使用。一般来说,遭受损失的一方需要d值。

d值有一个关于原子性的有趣属性。它在签名公开之前被共享,而签名公开之后,这又允许两个交易在发布之后原子交易。通过取任意两个施诺尔签名的差异,就可以构造副本,例如原子交换多签名合约。

这是Mimblewimble的一个重要特性,此前人们认为它无法支持原子交换或闪电通道。

带有适配器签名的原子(跨链交换)示例

Alice在一个特定的区块链上有一定数量的币,Bob在另一个区块链上也有一定数量的币。Alice和Bob想进行原子交换。然而,区块链既不知道另一个,也不能验证彼此的交易。

实现这一目标的典型方法包括使用区块链的脚本系统设置一个哈希原象挑战,然后在两边显示相同的原象。一旦Alice知道了原像,她就会打开原象拿走她的币;然后Bob把原象从一条链上复制到另一条链上,拿走他的币。

使用适配器签名,可以更简单地实现相同的结果。在这种情况下,Alice和Bob都将币放在两个区块链上的两个输出上。它们并行地签署多重签名协议,Bob给Alice适配器签名,这样双方都可以使用值T。这意味着Bob要取走他的币,需要揭示t。Alice要取走自己的币,要揭示T。然后Bob替换掉其中一个签名,公开t,拿走他的币。Alice从区块链上可见的最后一个签名计算t,然后用它揭示另一个签名,拿走自己的币。

由此可见,原子性是可以实现的。人们仍然可以交换信息,但现在区块链上没有显式的散列或原象。无脚本属性非常必要,并且实现了隐私。

7.零知识条件支付

零知识条件支付(ZKCP)是一种交易协议。该协议允许买方以一种私有的、可扩展的、安全的、并在去信任化的环境中使用币从卖方购买信息。预期的信息只有在付款时才会转移。买卖双方不需要相互信任,也不需要依靠第三方仲裁。

8.Mimblewimble的核心无脚本脚本

如前所述,Mimblewimble是一个区块链设计。与比特币类似,每笔交易都有输入和输出。每个输入和输出都有一个保密交易承诺。保密承诺有一个有趣的属性,在一个有效的平衡交易中,可以从输出承诺中减去输入,从而确保Pedersen值的所有值平衡。取这些输入和输出的差,就得到交易中每个输出和每个输入的所有者的多签名公钥。也就是内核。

Mimblewimble区块将只有一个新输入列表、一个新输出列表和一个由上述溢出值创建的签名列表。

由于值是同态加密的,节点可以验证没有创建或销毁币的情况。

生成图片
2

发表评论

科普丨Mimblewimble 的“无脚本脚本”是啥

星期四 2019-04-04 19:25:22

科普丨Mimblewimble 的“无脚本脚本”是啥

文章内容较长,且涉及的技术术语比较多,为了方便大家查看,特地整理了关于本篇内容的目录。在阅读本文之前,请先仔细查看目录,这件有助于更好地理解内容。目录如下——

  1. 无脚本脚本的定义

  2. 无脚本脚本的优势

  3. 施诺尔签名(Schnorr Signatures)

  4. 施诺尔多重签名

  5. 适配器签名

  6. 同步无脚本脚本

    · 原象(Preimages)

    · 两种施诺尔签名的区别

  7. 适配器签名的互换用例(跨链互换)

  8. 零知识条件支付(Zero Knowledge Contingent Payments)

  9. Mimblewimble的核心无脚本脚本

1.无脚本脚本的定义

无脚本脚本通过使用施诺尔签名Schnorr Signatures,在链下执行智能合约。

无脚本脚本的概念源至Mimblewimble,它是一个区块链设计,只存储内核以及内核签名,不存储永久性数据。Mimblewimble的基本属性η=γ包括隐私和扩容,两者都需要用无脚本脚本来实现。

2.无脚本脚本的优势

无脚本脚本的优势是功能性、隐私性和高效性。

  • 功能性

说到函数性,无脚本脚本可以扩大智能合约的范围和增加复杂度。当前,就像比特币的脚本一样,限制网络启用op-code(操作码)数量。无脚本脚本将智能合约的规范和执行,转移为只探讨智能合约的参与者。

  • 隐私性

在隐私性方面,将链上规范和执行智能合约转移到链下。在链上时,将智能合约的很多细节广播给整个网络,包括参与者数量和地址,以及转移金额。将智能合约移到链下,网络只知道参与者同意了其合约条款,并且交易生效。

  • 高效性

至于高效性,无脚本脚本将需要在链上验证和存储的数据量减至最小,将智能合约移至链下,全节点的开销更少,用户的手续费也降低了。

无脚本脚本列表

本篇报告将包含脚本的类型:

· 同步无脚本脚本Simultaneous Scriptless Scripts

· 适配器签名Adaptor Signatures

· 零知识条件支付Zero Knowledge Contingent Payments

3.施诺尔签名的作用

首先,先介绍施诺尔签名的定义。签名者拥有私钥x和随机数r,G是集群生成器,该集群的极难的离散对数,P是公钥。

然后,以一个简单的线性交易算出签名s

s=r+ex

而:

e=H(P||r||message)

P=xG

提交所选行的所有数据(数据签名)散列。验证方程等于将方程中的每一项乘以G,以及加密假设(离散日志),乘以G,但不能除以G,这样防止解密。

sG=rG+exG

比特币使用的椭圆曲线签名算法(ECDSA)的x和r并非线性,因此帮助不大。

4.施诺尔多重签名

多重签名(mulitsig)是指有多个参与者签名。每个参与者都可以生成一个单独签名,并将这些签名连接起来,组成一个多重签名。

多重签名有一个单一公钥,是参与者公钥的总和。由参与者公钥生成的公钥是一个用签名可验证的公钥。

多重签名公式包括对所有分量求和,所有的随机数和s值都会影响多重签名的形成。

s=Σs(i)

可以看出,这些签名本质上是无脚本脚本。多个参与者的独立公钥联合起来形成一个公钥和签名。当公布该联合公钥和签名时,不会透露参与者的数量或原始公钥的详细信息。

5.适配器签名

可通过修改多重签名协议来生成适配器签名,作为所有无脚本脚本函数的构建块。

适配器签名不是充当带有公钥信息的有效签名,而是承诺发布签名后将揭示一个secret。

这个概念类似原子交换,但没有执行脚本。由于适配器签名是椭圆曲线加密技术,因此只有椭圆曲线点的标量乘法。就像哈希函数,椭圆曲线函数只是它的一个方式,因此可以轻松地共享椭圆曲线点(T),而且secret将是其相应的私钥。

如果考虑到双方:不是在多重签名协议中提供他们的随机数R,而是导出椭圆曲线点T(致盲因子),作为R(即R+T)的补充。因此R并未被掩盖,而是被T抵消。

施诺尔多重签名修改,以便第一方生成

T=tG,R=rG

使用该信息,第二方生成

H(P||R+T||message)x

要交换的币包含在信息中,第一方现在可以计算出完整的签名s

s=r+t+H(P||R+T||message)x

然后第一方计算并公布适配器签名s给第二方(以及其他在收听的各方)

s′=s−t

第二方公布s’G验证适配器签名s

s′G=?R+H(P||R+T||message)P

然而,这不是一个有效签名,因为哈希的随机数R+T不等于R。

第二方无法从中检索到有效签名,而且用ECDLP算出来恢复s’+t的值事实不可能。

第一方广播s后去认领信息内的币,第二方可以按以下公式计算出secret t的值

t=s−s′

上述非常普遍,但通过附加辅助证明,也可以导出适配器签名,从而将辅助协议的正确转移转换为有效签名。

6.同步无脚本脚本

  • 原象

执行原子式单独交易是通过原象实现的,如果两笔交易需要同一散列的原象,一旦执行了其中一笔交易,就会公开原象。原子交换和闪电通道使用了这种架构。

  • 两种施诺尔签名的区别

如果要考虑两种施诺尔签名的区别:

d=s−s′=k−k′+ex−e′x′

通过将每个项乘以G并确认代数正确性,可以以与施诺尔签名相似的方式验证上述等式。

dG=kG−k′G+exG−e′x′G

必须指出,正在验证的是差异d,而不是施诺尔签名自身。D是两个单独施诺尔签名之前的转换公钥。给定d和s/s’,可以计算出另一个。因此拥有d使得这两个签名具有原子性。这种方式不会将两个签名链接起来,也不会损害它们的安全性。

对于原子交易,在设置阶段,一方向对方提供d,并将其断言为正确的值。一旦签署完交易,就可以调整它来完成其他交易。可以实现原子性,但只能由拥有此d值的人使用。一般来说,遭受损失的一方需要d值。

d值有一个关于原子性的有趣属性。它在签名公开之前被共享,而签名公开之后,这又允许两个交易在发布之后原子交易。通过取任意两个施诺尔签名的差异,就可以构造副本,例如原子交换多签名合约。

这是Mimblewimble的一个重要特性,此前人们认为它无法支持原子交换或闪电通道。

带有适配器签名的原子(跨链交换)示例

Alice在一个特定的区块链上有一定数量的币,Bob在另一个区块链上也有一定数量的币。Alice和Bob想进行原子交换。然而,区块链既不知道另一个,也不能验证彼此的交易。

实现这一目标的典型方法包括使用区块链的脚本系统设置一个哈希原象挑战,然后在两边显示相同的原象。一旦Alice知道了原像,她就会打开原象拿走她的币;然后Bob把原象从一条链上复制到另一条链上,拿走他的币。

使用适配器签名,可以更简单地实现相同的结果。在这种情况下,Alice和Bob都将币放在两个区块链上的两个输出上。它们并行地签署多重签名协议,Bob给Alice适配器签名,这样双方都可以使用值T。这意味着Bob要取走他的币,需要揭示t。Alice要取走自己的币,要揭示T。然后Bob替换掉其中一个签名,公开t,拿走他的币。Alice从区块链上可见的最后一个签名计算t,然后用它揭示另一个签名,拿走自己的币。

由此可见,原子性是可以实现的。人们仍然可以交换信息,但现在区块链上没有显式的散列或原象。无脚本属性非常必要,并且实现了隐私。

7.零知识条件支付

零知识条件支付(ZKCP)是一种交易协议。该协议允许买方以一种私有的、可扩展的、安全的、并在去信任化的环境中使用币从卖方购买信息。预期的信息只有在付款时才会转移。买卖双方不需要相互信任,也不需要依靠第三方仲裁。

8.Mimblewimble的核心无脚本脚本

如前所述,Mimblewimble是一个区块链设计。与比特币类似,每笔交易都有输入和输出。每个输入和输出都有一个保密交易承诺。保密承诺有一个有趣的属性,在一个有效的平衡交易中,可以从输出承诺中减去输入,从而确保Pedersen值的所有值平衡。取这些输入和输出的差,就得到交易中每个输出和每个输入的所有者的多签名公钥。也就是内核。

Mimblewimble区块将只有一个新输入列表、一个新输出列表和一个由上述溢出值创建的签名列表。

由于值是同态加密的,节点可以验证没有创建或销毁币的情况。