用于区块链交易中的知识证明的计算机实现的方法和系统与流程

文档序号:27611928发布日期:2021-11-27 04:53阅读:265来源:国知局
用于区块链交易中的知识证明的计算机实现的方法和系统与流程

1.本公开大体涉及用于区块链交易的知识证明系统,并且更具体地涉及知识证明系统的链上非交互式实现。本公开特别适合但不限于在用于任意数据认证的签名方案中使用。


背景技术:

2.在本文档中,我们使用术语“区块链”来包括所有形式的电子的、基于计算机的分布式账本(ledger)。这些包括基于共识的区块链和交易链技术、经许可的和未经许可的账本、共享账本及其变型。尽管已经提出并开发了其他区块链实现方式,但是区块链技术最广为人知的应用是比特币账本。尽管为了方便和说明的目的在本文中可能提及比特币,但是应当注意,本公开不限于与比特币区块链一起使用,并且替代的区块链实现和协议落入本公开的范围内。术语“用户”在本文中可以指人类或基于处理器的资源。
3.区块链是一种点对点的电子分类帐,其被实现为基于计算机的、去中心化的分布式系统,该系统由区块组成,而区块又由交易组成。每个交易是一种数据结构,该数据结构对区块链系统中参与者之间的数字资产的控制权的转移进行编码,并包括至少一个输入和至少一个输出。每个区块都包含前一个区块的哈希值,因此区块被链接在一起来创建所有交易的永久、不可更改的记录,这些交易自其开始就已经被写入区块链。交易包含嵌入到其输入和输出中的被称为脚本的小程序,这些小程序指定如何以及由谁可以访问交易的输出。在比特币平台上,这些脚本是使用基于堆栈的脚本语言编写的。
4.为了将交易写入区块链,必须对其进行“验证”。网络节点(矿工)执行工作以确保每笔交易有效,而无效交易则被网络拒绝。安装在节点上的软件客户端通过执行其锁定脚本和解锁脚本来对未花费的交易输出(unspent transaction,utxo)执行该验证工作。如果锁定脚本和解锁脚本的执行被评估为真(true),则该交易有效,并将该交易写入区块链。因此,为了将交易写入区块链,必须:i)由接收交易的第一节点验证该交易

如果交易经过验证,则该节点将其中继到网络中的其他节点;ii)将该交易添加到由矿工创建的新区块中;以及iii)对该交易进行挖掘,即,将该交易添加到过去交易的公共账本中。
5.尽管区块链技术因使用加密货币实现而被广泛了解,但数字企业家已经开始探索使用比特币所基于的加密安全系统以及可以存储在区块链上的数据这两者以实现新的系统。如果区块链可以被用于不限于加密货币领域的自动化任务和过程,则这将是非常有利的。这样的方案将能够利用区块链的好处(例如,事件的永久性防篡改记录、分布式处理等),同时在其应用中具有更多用途。
6.当前研究的一个领域是使用区块链来实现“智能合约”。这些是被设计为自动执行机器可读合约或协议的条款的计算机程序。与将以自然语言编写的常规合约不同,智能合约是机器可执行程序,其包括能够处理输入以产生结果的规则,这些规则然后可以促使根据这些结果来执行动作。
7.与区块链相关的另一个领域是使用“令牌”(或“彩色币”)来表示现实世界的实体
并经由区块链转移现实世界的实体。潜在的敏感或秘密物品可以由没有可辨别的含义或值的令牌来表示。因此,令牌用作允许从区块链引用现实世界的物品的标识符。
8.知识证明是一种密码系统,其允许一方向另一方证明他或她知道某个秘密,而无需揭露有关该秘密的任何信息。存在知识证明系统的许多实例。然而,它们中的大多数在计算上是昂贵的。
9.因此,期望为区块链交易提供一种比现有的知识证明系统计算效率更高的知识证明系统。
10.现在已经设计出了这种改进的方案。


技术实现要素:

11.提供了如所附权利要求中限定的方法。
12.可以提供一种在区块链交易中实现知识证明的方法,该方法包括:从验证方向证明方发送借助于数据可赎回的区块链交易,该数据包括:(i)基于临时密钥、第二数据和密码系统的公钥私钥对的私钥的组合的第一数据,其中,公钥是基于整数生成元(generator)取第一次幂,其中,第一次幂基于私钥,并且其中,需要私钥的知识以便从第一数据确定临时密钥,以及(ii)基于整数生成元取第二次幂的第三数据,其中,第二次幂基于临时密钥。
13.可以提供一种确定2的整数次幂的值的计算机实现的方法,该方法包括:确定一系列2的幂的项的系数,其中,该系列的每一项包括2的相应幂乘以相应的所述系数,其中,每个所述项的相应的所述系数是0或1,并且所述项的总和等于所述整数;以及确定具有为1的相应值的所述系数;确定多个值的乘积,其中,每个所述值是2取对应于所述系列的每一项的2的相应幂,每一项的对应的所述系数具有为1的值。
14.可以提供一种在区块链交易中将两个整数相加的计算机实现的方法,该方法包括:将整数表示为二进制位串对;对作为输入的所述二进制位串对执行组合步骤,该组合步骤包括:(i)对所述输入的对应各个位的对进行异或组合以生成第一输出二进制位串,以及(ii)对所述输入的对应各个位的对进行与组合以生成另一位串并将值为0的位作为最低有效位串接到所述另一位串以生成第二输出二进制位串;以及如果所述第二输出二进制位串包含值为1的任何位,则使用先前所述组合步骤的输出作为输入来重复所述组合步骤,直到生成仅包含值为0的位的所述第二输出二进制位串为止。
15.可以提供一种确定区块链交易中两个整数的乘积的方法,该方法包括:将第一整数和第二整数表示为相应的第一二进制位串和第二二进制位串;对于值为1的第一整数的每一位,提供相应的存储位串,该相应的存储位串包括表示第二整数的位串和一定数量的值为0的位,值为0的位作为最低有效位添加到相应的存储位串,该数量等于由值为1的第一整数的对应位表示的2的幂;以及借助于如上定义的至少一种方法将存储位串加在一起。
16.可以提供一种在模算术中确定整数的方法,该方法包括:
确定一系列2的幂(mod p)的项的系数,其中,该系列的每一项包括2的相应幂(mod p)乘以相应的所述系数,其中,每个所述项的相应的所述系数为0或1,并且所述项的总和等于所述整数(mod p);存储多个值,其中,每个所述值是2取对应于该系列的每一项的2的相应幂(mod p),每一项的对应的所述系数具有为1的值;以及借助于如上定义的至少一种方法将多个值加在一起。
17.可以提供一种系统,包括:处理器;以及包括可执行指令的存储器,该可执行指令由于被处理器执行而促使系统执行本文所述的计算机实现的方法的任何实施例。
18.可以提供一种其上存储有可执行指令的非瞬时性计算机可读存储介质,该可执行指令由于被计算机系统的处理器执行而促使计算机系统至少执行本文所述的计算机实现的方法的实施例。
附图说明
19.将参考附图描述根据本公开的各种实施例,其中:
20.图1示出了区块链交易的脚本的执行以进行知识证明;
21.图2示出了区块链交易的脚本的执行以确定2的大幂(large power);
22.图3示出了图2所示的脚本的具体示例的区块链交易的脚本的执行;
23.图4示出了区块链交易的脚本的执行以确定两个大整数的和;
24.图5示出了区块链交易的脚本的执行以确定两个大整数的乘积;
25.图6示出了区块链交易的脚本的执行以在模算术中确定大整数;以及
26.图7是示出可以实现各种实施例的计算环境的示意图。
具体实施方式
27.本公开的知识证明系统是schnorr识别方案[c.p.schnorr(1990),g.brassard编辑的adv.in cryptology

efficient identification and signatures for cards(卡片的有效识别和签名)’,crypt 239

252,springer verlag(1990)lecture notes in computer science(计算机科学讲义)nr 435]的实现。该方案不仅在概念上简单,而且还仅使用在原始比特币协议中定义的op代码。因此,它可以轻松嵌入到交易的脚本中。描述了知识证明系统的链上非交互式实现,以及其他两种实现,包括转换为用于任意数据认证的签名方案。
[0028]
应注意本公开的以下评论和用例。如果公共验证密钥在其他地方可用,则知识证明系统可以嵌入到最少一笔交易中。此外,只有在接收方知道秘密值的情况下才能花费付款。特别地,公钥(验证密钥)不必对公众可见或包括在交易中。这将为接收方提供完全的隐私。此外,可以通过选择不同的素数来调整安全性。这将在效率和安全性之间的权衡方面提供灵活性。
[0029]
当知识证明意味着所有权证明时,该方案变为智能合约,表明只有在接收方能够证明对某些资产的所有权时才会发放资金。作为示例,土地登记处可以实现相同的知识证
明系统来记录财产的所有权。土地登记处可以具有经认证的验证密钥列表,其中,每个所有者都被赋予其对应的秘密值。为了证明财产的所有权,所有者可以在受到质询时简单地构建知识证明。重要的是注意,验证密钥不必包括在交易中。它可以隐藏在计算中。
[0030]
另一个示例可以是实现知识证明系统的任何令牌系统。类似地,如上,可以通过构建秘密值的知识证明来证明某些令牌的所有权。该方案还可以用于租赁服务,其中,用于解锁租赁财产的密钥是知识证明,该知识证明可以通过发起包含相同质询的交易来获得。例如,为了使用租来的汽车或房屋,承租方将接收到质询,要求提供来自被锁住的门的知识证明。然后承租方构建包含质询的交易。财产所有人在接受付款时会揭露知识证明,并且因此揭露用于解锁汽车或房屋门所需的知识证明。
[0031]
本公开也可以是涉及第三方的资产转移的方案。例如,律师(第三方)受委托人的意愿的指示,只向知道秘密值的人发放资金。
[0032]
在概述本公开的具体实施例之前,这里公开schnorr的原始协议[c.p.schnorr(1990),g.brassard编辑的adv.in cryptology

efficient identification and signatures for cards(卡片的有效识别和签名)’,crypt239

252,springer verlag(1990)lecture notes in computer science(计算机科学讲义)nr 435]。
[0033]
设置(公共):1.选取素数p2.选取素数q,使得q|p

1(即,p

1可被q整除),并且2
q
≡1mod p公共参数是(p,q)
[0034]
keygen(证明方):1.随机选取2.计算v≡2

s
mod p秘密值为s,并且公共验证密钥为v3.将v发送给验证方
[0035]
质询(验证方):1.随机选取2.将c发送给证明方
[0036]
证明(证明方):1.随机选取2.计算x≡2
r
mod p3.计算y≡r+s
·
c mod q4.将(x,y)发送给验证方
[0037]
验证(验证方):1.计算x

≡2
y
·
v
c
mod p2.将x

与x进行比较
[0038]
对于公共参数,它们表示乘法群的q阶子群。2
q
≡1mod p的条件是使2作为子群生成元。这显著地提高了取幂的效率。
[0039]
该方案的安全性基于离散对数问题。对于大小为n的群,安全性大约为例如,如果q为256位,则该方案的安全性大约为128位。也就是说,攻击方花费大约2
128
次操作才能破坏系统。
[0040]
作为参考,经由fiat

shamir变换获得的签名方案也如下呈现:
[0041]
设置(公共):1.选取素数p2.选取素数q,使得q|p

1,并且2
q
≡1mod p
[0042]
keygen(签名方):1.随机选取2.计算v≡2

s
mod p秘密密钥为s,并且公钥为v
[0043]
签名(签名方给出消息m):1.随机选取2.计算x≡2
r
mod p3.计算c≡h(x||m)mod q4.计算y≡r+s
·
cmod p5.向验证方发送(m,x,y)
[0044]
验证(验证方):1.计算c≡h(x||m)mod q2.计算x

≡2
y
·
v
c
mod p3.将x

与x进行比较
[0045]
需要注意的是,知识证明和签名方案之间的主要区别在于,用h(x||m)mod q替换质询c。交易中的知识证明非交互式交易
[0046]
描述从鲍勃到爱丽丝的交易,在这种情况下,只有在爱丽丝提供知识证明的情况下,爱丽丝才可以花费付款。
[0047]
假设鲍勃拥有来自爱丽丝本人或来自可验证来源的公共参数(p,q)和爱丽丝的验证密钥v的副本。
[0048]
鲍勃可以简单地构建交易并包括以下输出:交易1

从鲍勃到爱丽丝:
[0049]
输出1:
[0050]
值:10.00000000
[0051]
锁定脚本:“<2>op_swap op_lshift<v
c
mod p>op_mul<p>op_mod op_numequal”[0052]
假设v
c
mod p是由鲍勃在区块外(off

block)计算的,并且值条目(value entry)是任意的。为了实现完美的隐私,鲍勃在链外(off

chain)向爱丽丝发送质询c,或者他们具有一些共享的随机性作为质询。
[0053]
为了让爱丽丝花费付款,她按照协议所指示的那样简单地计算x和y,并利用解锁
脚本构建交易,如下所示:花费交易1
[0054]
解锁脚本:“<alice’s public key><x><y>”[0055]
为了验证交易,执行脚本,如图1所示:执行:“<x><y><2>op_swap op_lshift<v
c
mod p>op_mul<p>op_mod op_numequal”[0056]
需要注意的是,v
c
mod p可以被预先计算并且放在脚本中。这不仅节省了用于实现脚本内验证的计算,而且隐藏了公共验证密钥。
[0057]
为了保护爱丽丝创建的交易的输出的完整性,将ecdsa签名请求id附加到鲍勃的交易中的锁定脚本。即:
[0058]
锁定脚本:“<2>op_swap op_lshift<v
c
mod p>op_mul<p>op_mod op_numequal op_if op_dup op_hash160<hash of alice’s public key>op_equalverity op_checksig”。
[0059]
作为回应,当爱丽丝花费该交易时,她将利用她的ecdsa签名来签署新的交易。即:
[0060]
解锁脚本:“<alice’s signature><alice’s public key><x><y>”[0061]
在y为多位数(large number)的情况下,需要实现更复杂的脚本来计算2
y
mod p,这涉及按位计算。如果操作码的最大数量的当前上限显著地提升,则该实现将成为可能。该脚本在图2中详细示出。
[0062]
已经假设所使用的算术操作码配备有大整数库,这是比特币原始协议中的情况。然而,在图4至图6中详细示出了使用串运算来模拟大整数算术运算的其他实施例。计算2
y
mod p:
[0063]
图2中所示的脚本通过实现以下步骤来执行:1.编写y=y020+y121+

+y
t2t
,其中,对于i=0,1,...,t,y
i
∈{0,1},这是y的二进制表示。2.使为预先计算的。3.请注意,当y
i
=1时,并且4.假设将y被作为(y0,y1,

,y
t
)压入堆栈,其中,y0位于栈顶:
[0064]
现在栈顶将具有2
y
mod p。
[0065]
应该注意的是,当前最大堆栈深度为1000。如果要实现128位的安全性,那么y将是256位的。因此,堆栈深度的当前上限不是问题。
[0066]
图2中所示的脚本的执行的示例在图3中详细示出。
[0067]
示例:计算2
12
mod 311.编写12=22+232.将n0,n1,n2,n3预先计算为2,4,16,8。3.将(1,1,0,0)逐个压入堆栈,然后是op_1。
[0068]
然后执行图2的脚本,如图3所示。一轮交易
[0069]
如果需要进行链上通信,爱丽丝通过向鲍勃发送交易来直接发起通信并传递公共
验证密钥。交易0

从爱丽丝到鲍勃:
[0070]
输出1:
[0071]
值:0.00000600
[0072]
锁定脚本:“op_dup op_hash160<hash of bob’s public key>op_equalverify op_checksig”[0073]
输出2:
[0074]
值:0.00000000
[0075]
锁定脚本:“op_returnv”[0076]
应该注意的是,这里的输出1只是为了涵盖矿工的交易费用。也可以使用“<v>op_drop”将输出2包括在输出1中。
[0077]
该轮的第二回合将是在非交互式情况中描述的交易加上嵌入在锁定脚本中的质询c。这可以使用具有op_return的新输出或将“<c>op_drop”添加到现有的锁定脚本来完成。作为签名方案的实现
[0078]
schnorr方案还可以用作对任意数据类型进行源验证的方法,换句话说,是数字签名方案。到目前为止,由于大整数取幂的计算成本高,因此在比特币中避免涉及大整数取幂的任何数字签名方案。由于可以在链外预先计算成本高的取幂运算,因此上述schnorr签名方案可以在比特币脚本中实现。知识证明和数字签名之间的重要技术区别在于,对于数字签名,验证方发出的质询是在签名中使用的消息或数据以及临时公钥的哈希值(参见上文)。
[0079]
这里的困难在于,鲍勃在任何签名之前都不知道临时公钥。克服这个困难的一种方法是让签名方在鲍勃创建交易之前发送临时公钥。更好的方法是在签名方和鲍勃之间具有共享的临时公钥集。
[0080]
例如,鲍勃想向爱丽丝发送一些比特币,只有爱丽丝通过受鲍勃信任的具有公钥v的签名方提供消息m的有效签名(x,y)时,爱丽丝才可以花费这些比特币。鲍勃可以构建以下交易:交易1

从鲍勃到爱丽丝:
[0081]
输出0:
[0082]
值:10.00000000
[0083]
锁定脚本:“<x>op_swap op_cat op_hash256<q>op_mod<c>op_equalverify<2>op_swap op_lshift<v
c
mod p>op_mul<p>op_mod op_numequal op_dup op_hash160<hash of alice’s public key>op_equalverify op_checksig”[0084]
假设v
c
mod p是由鲍勃在链外计算的。
[0085]
为了花费来自鲍勃的付款,爱丽丝首先从签名方获得关于消息m的签名(x,y)。
[0086]
应该注意的是,x和m两者通过等式c≡h(x||m)mod q固定在锁定脚本中。y的值成为提供真实性的密钥。
[0087]
然后爱丽丝可以利用以下解锁脚本构建交易:花费交易1
[0088]
解锁脚本:<alice’s signature><alice’s public key><x><y><m>
[0089]
需要注意的是,该脚本不需要爱丽丝为m创建签名,只需要提供由具有公钥v的签名方创建的签名。上面列出的锁定脚本的最后4个操作码(从op_dup到op_checksig)确保了还需要爱丽丝的私钥来花费该交易。
[0090]
签名方案实现不提供与知识证明系统实现相同水平的隐私性,因为质询c必须与v
c
mod p一起包括在锁定脚本中。从c和v
c
mod p推导出v在计算上并不困难。
[0091]
验证方也必须知道被签名的消息,验证方在锁定脚本中提供c(≡h(x||m)mod q)和v
c
两者。虽然这限制了提供用于验证未确定的数据的方法的实现能力,但是如果消息空间很小,则验证方可以使用流控制操作码来首先确定消息并且然后确定用于认证的schnorr方案。
[0092]
例如,如果爱丽丝希望花费交易,则鲍勃创建需要第三方(卡罗尔)批准的交易。在这种情况下,被签名的消息是布尔值,即,m∈{m1,m2},其中,m1=



,m2=



。鲍勃不知道哪个消息将作为解锁脚本的一部分而包括在内,但想要验证它是否已被具有公钥v的卡罗尔签署。如果来自卡罗尔的消息为



,则爱丽丝可以花费,如果为



,则它被返回给鲍勃。
[0093]
m1和m2的对应质询分别是c1=h(x1||m1)和c2=h(x2||m2)。鲍勃创建以下锁定脚本:交易2

从鲍勃到爱丽丝:
[0094]
输出0:
[0095]
值:10.00000000
[0096]
锁定脚本:
[0097]“<x1>op_swap op_cat op_hash256<q>op_mod<c1>op_equal op_if<2>op_swap op_lshiftop_mul<p>op_mod op_numequal op_dup op_hash160<hash of alice’s public key>op_equalverify op_checksig op_endif
[0098]
<x2>op_swap op_cat op_hash256<q>op_mod<c2>op_equal op_if<2>op_swap op_lshiftop_mul<p>op_mod op_numequal op_dup op_hash160<hash of bob’s public key>op_equalverify op_checksig op_endif”[0099]
锁定脚本首先检查消息是m1还是m2并验证它是否已被卡罗尔签署,并且最后检查合法的花费者是否正在解锁交易。例如,如果卡罗尔希望签署的消息是m1=



,则她可以生成与她选择的消息相对应的签名(x1,y1)并将该消息/签名发送给爱丽丝。然后爱丽丝可以创建以下解锁脚本来花费交易:花费交易2
[0100]
解锁脚本:<alicesig.><alicepubkey><x1><y1><m1>
[0101]
该数据方案为使用比特币脚本进行安全数据源验证奠定了基础。如果鲍勃希望附上依赖于消息/数据的附加花费标准(例如,在智能合约中),那么,交易2中可以包括附加的脚本。计算x+y:
[0102]
用于将两个大整数相加在一起的脚本在图4中详细示出。假设将整数(x,y)作为两个二进制串压入堆栈。在其他实施例中,该脚本将被表示为func_stringadd。
加法背后的理论
[0103]
令a0和b0是长度为t的两个二进制串。我们定义了:b
i+1
=a
i
∧b
i
||0
[0104]
其中,表示按位异或运算,并且∧表示按位与运算。
[0105]
当该过程重复足够多的次数从而b
k
=00...0为一串零时,则a
k
是表示a0+b0的二进制串。
[0106]
证明:
[0107]
应该注意的是,在不考虑所有进位的意义下,异或对按位加法进行了模拟。应该注意的是,在不考虑所有进位的意义下,异或对按位加法进行了模拟。应该注意的是,在不考虑所有进位的意义下,异或对按位加法进行了模拟。
[0108]
唯一的问题在于,1+1不是0。但是,可以使用∧运算来识别该情况,因为∧会通过利用1进行标记来指示该问题发生在哪个位置。需要注意的是,结果中的这些表示作为加法的一部分的进位。通过将结果与0串接,我们有效地创建了捕获所有进位的数字。可以迭代该过程,直到加法中不再有进位为止。归纳证明:
[0109]
我们想证明的是,对于所有n≥1,a0+b0=a1+b1=

=a
n
+b
n

[0110]
首先,我们想证明a0+b0=a1+b1。
[0111]
对于某个整数t,令a0=a
00
...a
0t
‑1和b0=b
00
b
01
...b
0t
‑1。
[0112]
当t=1时,我们使a0=a
00
和b0=b
00
。因此,左侧只是a
00
+b
00

[0113]
右侧是
[0114]
通过仔细检查如下表1所示的a
00
和b
00
的所有可能值,我们可以得出结论:对于t=1,该语句为真。表1
[0115]
假设对于某些k≥1时的t=k,该语句为真。我们想证明对于t=k+1,该语句为真。
[0116]
应该注意的是,已经使用了对于t=k该语句为真的事实。即:
[0117]
而且,已经使用了以下事实:a
0i
∧b
0i
·
2=a
0i
∧b
0i
||0。乘以2与将位串左移一位并在末尾附上0相同。
[0118]
推导中的最后一个等式再次来自上面的表1。
[0119]
既然已经证明了在对于t=k语句为真的条件下对于t=k+1该语句为真,通过归纳,可以得出结论:对于所有整数t≥1,a0+b0=a1+b1为真。
[0120]
需要注意的是,a1和b1只是表示两个数字为a0和b0的两个二进制串。在不失一般性的情况下,通过重复以上证明,可以得出结论,对于所有n≥1,a0+b0=a1+b1=

=a
n
+b
n
。因此,当迭代该过程直到其中一个输出完全由值为0的位组成时,可以得出结论:另一个输出表示两个初始输入的总和。计算x
·
y:
[0121]
用于将两个大整数相乘在一起的脚本在图5中详细示出。
[0122]
其中一个整数y被编写为y=y020+y121+

+y
t2t
,其中,对于i=0,1,...,t,y
i
∈{0,1}。假设将y作为(y0,y1,...,y
t
)压入堆栈,其中y0位于栈顶。
[0123]
然后,脚本保存另一个整数x的值,其中,作为最低有效位添加的值为0的位的数量对应于由y
i
的每个非零值表示的2的幂。这些值然后借助于上面参考图4描述的func_stringadd过程彼此相加。计算y mod p:
[0124]
用于在模算术中计算大整数的脚本在图6中详细示出。首先对于i=k

1,...,t,预
先计算值r
i
≡2
i
mod p,其中,k是p的位长。假设将y作为(y0,y1,...,y
t
)压入堆栈,其中,y
t
位于栈顶。
[0125]
最后,定义func_splitstringtobit以获取二进制串的输入并将每一位垂直放置在堆栈上。这可以通过使用op_substr来实现。结论
[0126]
已经描述了一种协议实现,其使得只有在爱丽丝知道秘密值时才能花费从鲍勃到爱丽丝的付款。本公开的优点在于其简单、安全、有用且与最安全且可信的比特币原始协议兼容。
[0127]
选择使用整数表示而不是椭圆曲线表示使其更易于实现和理解。仅需要公开随机数的幂的公钥这一事实在接收方的隐私方面提供了安全性。此外,可以预先计算该值以实现链上验证并节省计算。
[0128]
还已经描述了对素数的幂模运算(exponentiation modulo)的创新且有效的实现。这使得知识证明系统能够嵌入到比特币网络中的矿工可接受的标准交易中的脚本中。作为副产品,还提供了签名方案的实现,其允许脚本内任意数据的认证和验证。此外,schnorr签名方案的所有标准特性和扩展都适用。例如,批量验证使得能够通过先聚合多个签名来在一个步骤中对多个签名进行验证。另一个示例是阈值签名的扩展,其是比特币中multisig的替代方案。
[0129]
现在转向图7,提供了可用于实践本公开的至少一个实施例的计算装置2600的说明性简化框图。在各种实施例中,计算装置2600可以用于实现以上示出和描述的任何系统。例如,计算装置2600可以被配置为用作数据服务器、网络服务器、便携式计算装置、个人计算机或任何电子计算装置。如图7所示,计算装置2600可以包括具有一个或多个级别的高速缓冲存储器和存储器控制器的一个或多个处理器(统称为2602),该处理器可以被配置为与包括主存储器2608和永久存储装置2610的存储子系统2606通信。如图所示,主存储器2608可以包括动态随机存取存储器(dram)2618和只读存储器(rom)2620。存储子系统2606和高速缓存存储器2602可以用于存储信息,例如与本公开中描述的交易和区块相关联的细节。(一个或多个)处理器2602可用于提供本公开中描述的任何实施例的步骤或功能。
[0130]
(一个或多个)处理器2602还可以与一个或多个用户接口输入装置2612、一个或多个用户接口输出装置2614以及网络接口子系统2616通信。
[0131]
总线子系统2604可以提供用于使得计算装置2600的各个组件和子系统能够按预期彼此通信的机制。尽管总线子系统2604被示意性地示出为单个总线,但是总线子系统的替代实施例可以利用多个总线。
[0132]
网络接口子系统2616可以提供通往其他计算装置和网络的接口。网络接口子系统2616可以用作从不同于计算装置2600的其他系统接收数据以及将数据传输到其他系统的接口。例如,网络接口子系统2616可以使数据技术人员能够将装置连接至网络,使得数据技术员可以在位于远程位置(例如,数据中心)的同时,将数据传输到该装置并从该装置接收数据。
[0133]
用户接口输入装置2612可以包括一个或多个用户输入装置,例如,键盘;诸如集成鼠标、轨迹球、触摸板或图形输入板等定点装置;扫描仪;条形码扫描仪;合并到显示器中的触摸屏;诸如语音识别系统、麦克风等音频输入装置;以及其他类型的输入装置。通常,术语

输入装置”的使用旨在包括用于将信息输入到计算装置2600的所有可能类型的装置和机构。
[0134]
一个或多个用户接口输出装置2614可以包括显示子系统、打印机或诸如音频输出装置等非可视显示器。显示子系统可以是阴极射线管(crt),诸如液晶显示器(lcd)、发光二极管(led)显示器或投影仪的平板装置,或其他显示装置。通常,术语“输出装置”的使用旨在包括用于从计算装置2600输出信息的所有可能类型的装置和机构。一个或多个用户接口输出装置2614可以用于例如呈现用户界面,以有助于用户与执行所描述的过程及其中的变型的应用进行交互,如果这样的交互是适当的话。
[0135]
存储子系统2606可以提供计算机可读存储介质,该计算机可读存储介质用于存储可以提供本公开的至少一个实施例的功能的基本编程和数据构造。当由一个或多个处理器执行时,应用程序(程序、代码模块、指令)可以提供本公开的一个或多个实施例的功能,并且可以被存储在存储子系统2606中。这些应用程序模块或指令可以由一个或多个处理器2602执行。另外,存储子系统2606可以提供用于存储根据本公开而使用的数据的存储库。例如,主存储器2608和高速缓存存储器2602可以为程序和数据提供易失性存储。永久存储装置2610可以为程序和数据提供永久性(非易失性)存储,并且可以包括快闪存储器、一个或多个固态驱动器、一个或多个磁性硬盘驱动器、一个或多个具有相关联的可移除介质的软盘驱动器、一个或多个具有相关联的可移除介质的光驱(例如,cd

rom或dvd或blue

ray)驱动器,以及其他类似的存储介质。这样的程序和数据可以包括用于执行如本公开中所描述的一个或多个实施例的步骤的程序以及与本公开中所描述的交易和区块相关联的数据。
[0136]
计算装置2600可以具有各种类型,包括便携式计算机装置、平板计算机、工作站或以下描述的任何其他装置。另外,计算装置2600可以包括可通过一个或多个端口(例如,usb、耳机插孔、闪电连接器等)连接到计算装置2600的另一装置。可以连接到计算装置2600的装置可以包括被配置为接受光纤连接器的多个端口。因此,该装置可以被配置为将光信号转换为电信号,该电信号可以通过将装置连接至计算装置2600的端口传输以进行处理。由于计算机和网络不断变化的性质,对图7中所描绘的计算装置2600的描述仅旨在作为特定示例用于说明该装置的优选实施例的目的。具有比图7中描绘的系统更多或更少的组件的许多其他配置是可能的。列举的示例实施例
[0137]
可以结合以下条款来描述本公开的实施例的示例:
[0138]
1.一种在区块链交易中实现知识证明的方法,该方法包括:从验证方向证明方发送借助于数据可赎回的区块链交易,该数据包括:(i)第一数据,所述第一数据是基于临时密钥、第二数据和密码系统的公钥私钥对的私钥的组合,其中,公钥是基于整数生成元取第一次幂,其中,第一次幂是基于私钥,并且其中,需要私钥的知识以便从第一数据确定临时密钥,以及(ii)第三数据,所述第三数据是基于整数生成元取第二次幂,其中,第二次幂是基于临时密钥。
[0139]
通过提供基于密码系统而借助于数据可赎回的区块链交易,其中,公钥是基于整数生成元取第一次幂,其中,第一次幂是基于私钥,这提供了在计算上简单且高效的优势,并且因此不像诸如椭圆曲线密码学等其他密码系统那样在计算上是昂贵的。通过使赎回交易所需的数据包含基于临时密钥、第二数据和公钥私钥对的私钥的组合的第一数据以及基
于整数生成元取第二次幂的第三数据,其中,需要私钥的知识以便从第一数据确定临时密钥,其中,第二次幂是基于临时密钥,这提供了能够验证第一数据包含私钥的优点,而无需公开私钥。通过确定第二数据,这表明了构建第一数据和第三数据的一方必须拥有私钥。
[0140]
2.根据条款1所述的方法,其中,所述整数生成元是2。
[0141]
这提供了在计算上更高效的优势。
[0142]
3.根据条款1或2所述的方法,其中,所述第二数据由所述验证方选择。
[0143]
这提供了确保构建第一数据的一方拥有私钥的优势。
[0144]
4.根据前述条款中任一项所述的方法,还包括:将所述第二数据与所述区块链交易分别从所述验证方发送到所述证明方。
[0145]
这提供了提高隐私性的优势。
[0146]
5.根据前述条款中任一项所述的方法,其中,所述第一数据的形式为:y≡r+s
·
cmod q其中,y是所述第一数据,r是临时密钥,s是私钥,c是所述第二数据,并且q是素数。
[0147]
6.根据前述条款中任一项所述的方法,其中,所述第二数据是基于消息。
[0148]
7.根据条款6所述的方法,其中,所述消息包括用于实现智能合约的数据。
[0149]
8.根据条款6或7所述的方法,其中,所述第二数据的形式为:c≡h(x||m)mod q其中,c是所述第二数据,x是所述第三数据,m是所述消息,q是素数,并且h是哈希函数。
[0150]
9.根据条款6至8中任一项所述的方法,还包括:在所述验证方处接收所述消息。
[0151]
10.根据前述条款中任一项所述的方法,还包括:在所述验证方和所述证明方之间共享至少一个临时密钥。
[0152]
11.根据前述条款中任一项所述的方法,还包括:在所述验证方处接收所述公钥。
[0153]
12.根据前述条款中任一项所述的方法,还包括:在所述验证方处接收所述第一数据和所述第二数据。
[0154]
13.一种确定2的整数次幂的值的计算机实现的方法,所述方法包括:确定一系列2的幂的项的系数,其中,所述系列的每一项包括2的相应幂乘以相应的所述系数,其中,每个所述项的相应的所述系数是0或1,并且所述项的总和等于所述整数;以及确定具有为1的相应值的所述系数;确定多个值的乘积,其中,每个所述值是2取对应于所述系列的每一项的2的相应幂,每一项的对应的所述系数具有为1的值。
[0155]
通过使系数能够由二进制位串表示,这提供了在计算上高效的优点。
[0156]
14.根据条款13所述的方法,其中,预先计算并存储所述值。
[0157]
15.根据条款13或14所述的方法,其中,所述方法由区块链交易实现。
[0158]
16.根据条款13至15中任一项所述的方法,其中,所述方法确定2
y
mod p的值,其中,y是所述整数。
[0159]
17.根据条款13至16中任一项所述的方法,其中,所述方法用于以条款1至12中任一项限定的方法来提供区块链交易。
[0160]
18.一种在区块链交易中将两个整数相加的计算机实现的方法,所述方法包括:
将整数表示为二进制位串对;对作为输入的所述二进制位串对执行组合步骤,所述组合步骤包括:(i)对所述输入的对应的各个位对进行异或组合以生成第一输出二进制位串,以及(ii)对所述输入的对应的各个位对进行与组合以生成另一位串并将值为0的位作为最低有效位串接到所述另一位串以生成第二输出二进制位串;以及如果所述第二输出二进制位串包含值为1的任何位,则使用先前所述组合步骤的输出作为输入来重复所述组合步骤,直到生成仅包含值为0的位的所述第二输出二进制位串为止。
[0161]
这提供了能够在区块链交易中执行计算上高效的大整数的加法的优势。
[0162]
19.一种确定区块链交易中两个整数的乘积的方法,所述方法包括:将第一整数和第二整数表示为相应的第一二进制位串和第二二进制位串;对于值为1的第一整数的每一位,提供相应的存储位串,所述相应的存储位串包括表示第二整数的位串和一定数量的值为0的位,值为0的位作为最低有效位添加到所述相应的存储位串,该数量等于由值为1的第一整数的对应位表示的2的幂;以及借助于根据条款18所述的至少一种方法将存储位串加在一起。
[0163]
20.一种在模算术中确定整数的方法,所述方法包括:确定一系列2的幂(mod p)的项的系数,其中,所述系列的每一项包括2的相应幂(mod p)乘以相应的所述系数,其中,每个所述项的相应的所述系数为0或1,并且所述项的总和等于所述整数(mod p);存储多个值,其中,每个所述值是2取对应于所述系列的每一项的2的相应的幂(mod p),每一项的对应的所述系数具有为1的值;以及借助于根据条款18所述的至少一种方法将所述多个值加在一起。
[0164]
21.一种计算机实现的系统,包括:处理器;以及包括可执行指令的存储器,所述可执行指令由于被所述处理器执行而促使所述系统执行如条款1至20中任一项所述的计算机实现的方法的任何实施例。
[0165]
22.一种其上存储有可执行指令的非瞬时性计算机可读存储介质,所述可执行指令由于被计算机系统的处理器执行而促使所述计算机系统至少执行如条款1至20中任一项所述的方法的实施例。
[0166]
应当注意,上述实施例说明而不是限制本公开,并且本领域技术人员将能够设计许多替代实施例,而不脱离由所附权利要求限定的本公开的范围。在权利要求中,括号中的任何附图标记都不应解释为对权利要求的限制。单词“包括(comprising、comprise)”等不排除任何权利要求或整个说明书中列出的元素或步骤之外的元素或步骤的存在。在本说明书中,“包括(comprise)”是指“包括(include)或由
……
组成(consist of)”,“包括(comprising)”是指“包括(including)或由
……
组成(consisting of)”。元素的单数形式并不排除此类元素的复数形式,并且反之亦然。本公开可以通过包括几个不同元件的硬件以及通过适当编程的计算机来实现。在列举几个装置的设备权利要求中,这些装置中的几个可以由一个且相同的硬件来实施。在互不相同的从属权利要求中记载某些手段的事实并不表示不能有利地使用这些手段的组合。参考文献
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1