使用低熵密码授权区块链交易的计算机实现的系统和方法与流程

文档序号:21699459发布日期:2020-07-31 23:00阅读:547来源:国知局
使用低熵密码授权区块链交易的计算机实现的系统和方法与流程

本发明主要涉及分布式系统,且更具体地,涉及改善在区块链上维护的通过加密方式强制执行的资产(包括诸如比特币之类的加密货币)的安全性、可靠性和可用性的方法和系统。



背景技术:

在本文献中,我们使用术语“区块链”来包括所有形式的电子、基于计算机的分布式账本。它们包括但不限于区块链和交易链技术、许可和非许可的账本、共享账本及其变体。虽然也提出并开发了其他区块链实施方式,但是区块链技术最广为人知的应用是比特币账本。虽然本文中出于方便和说明的目的可以引用比特币,但是应当注意,本发明不限于与比特币区块链一起使用,并且替代性的区块链实施方式和协议也落入本发明的范围内。本文使用术语“比特币”指代源自比特币协议的任何和所有协议。

区块链是一种基于共识的电子账本,它被实现为基于计算机的分散式、分布式系统,该系统由区块组成,而区块相应地由交易和其他信息组成。对于比特币而言,每个交易是一个数据结构,该数据结构对区块链系统中的参与者之间的数字资产的控制转移进行编码,并包括至少一个输入和至少一个输出。每个区块包含前一个区块的散列,以使得这些区块变为链接在一起,以创建自区块链开始以来就已经写入区块链的所有交易的永久、不可更改的记录。交易包含嵌入其输入和输出中称为脚本的小程序,其指定如何以及通过谁来访问交易的输出。在比特币平台上,这些脚本是使用基于堆栈的脚本语言来编写的。

为了将交易写入区块链,必须对其进行“验证”。某些网络节点充当矿工并进行工作以确保每个交易都有效,而无效交易从网络中被拒绝。例如,安装在节点上的软件客户端对引用未耗用的交易输出(utxo)的交易进行该验证工作。可通过执行其锁定和解锁脚本来进行验证。如果锁定和解锁脚本的执行评估为true,并且如果满足某些其他条件,则交易有效并且可以被写入区块链。因此,为了将交易写入区块链,该交易必须i)由接收交易的节点来验证-如果交易被验证,则节点将其中继到网络中的其他节点;ii)被加入由矿工建造的新区块;iii)被挖掘,即加入过去交易的公共账本。当向区块链添加足够数量的区块以使交易实际上不可逆时,认为交易被确认。

私钥通常用于控制对在区块链上维护的加密保护的资产的访问,例如耗用在区块链上维护的加密货币。更具体而言,通常为用户提供公共地址和私钥,以发送和接收属于用户的其他加密资产的加密硬币或令牌。私钥是一个秘密数字,它允许使用、撤回或以其他方式转移或阻碍属于用户的加密硬币或其他加密资产。在比特币中,私钥通常是256位数字。公共地址是存放和接收用户的加密资产的地方。公钥是通过数学算法根据私钥创建的。但是,实际上不可能通过根据公钥生成私钥来反转该过程。

通常,数字钱包用于存储用户的私钥。当用户为了耗用、撤回、转移或阻碍属于用户的加密资产而发起交易时,数字钱包通过使用私钥处理交易来创建数字签名。这样维持了安全系统,因为为任何给定交易生成有效签名的唯一方法就是使用私钥,使得用于交易的签名对与私钥相对应的公共地址进行验证。签名和公共地址用于证实交易来自用户(用户是与公共地址相对应的私钥的持有者),并确保交易中对安全性至关重要的元素(例如发送的金额、接收者地址)一经广播就无法改变。如果这些交易元素被更改,则基于用户签名和公共地址的交易的证实将会失败。

如果用户丢失他/她的私钥,则用户将无法再耗用、撤回、转移或阻碍与私钥相关联的用户的加密资产。因此,必须将私钥保存在安全位置。数字钱包可通过多种方式存储用户的私钥。

在一个示例中,可将私钥打印在纸质形式的文档或电子文档上,以便在需要使用用户的私钥进行交易签名时可以将其取回。例如,可通过qr码的形式来打印私钥,当需要使用用户的私钥进行交易签名时可以扫描qr码。也可以使用冷存储(coldstorage)或硬件钱包来存储私钥,它们通常使用安全地存储用户的私钥的智能卡或usb装置,并使用用户的私钥来离线签名交易。在另一个示例中,可以使用热钱包来存储私钥,热钱包通常存储私钥,并使用以某种方式连接到互联网的线上系统来签名交易。

当私钥丢失时,恢复加密资产是加密货币中一个尚未解决的著名问题。人们普遍认为,缺乏可以实现这一目标的分散机制是广泛采用加密货币的最大障碍之一。例如,据估计,由于硬盘驱动器崩溃或私钥丢失,实际上已经有超过2700个比特币丢失。一旦私钥丢失,价值数十亿美元的比特币可能就被锁定在无法使用的钱包中。

实际上,丢失私钥在表面上看起来可能类似于丢失网上银行密码。但是,二者至少有两个重要的区别。首先,银行系统的交易是可追溯和可逆的,被盗用的资金有可能通过修改欺诈性交易追回。而这对于诸如比特币之类的加密货币显然是不可能的,因为其交易是不可逆的,并且没有中央机构在发生欺诈时进行仲裁。第二,用户向银行证明其身份后,银行密码可以恢复或补发。与之相比,某些加密货币钱包可以使用密码恢复服务,例如https://walletrecoveryservices.com/。但是,这些密码恢复服务的成功率通常较低(通常约为30%,并取决于用户提供的信息),并且此类密码恢复服务收取的费用通常很高(即在成功恢复密码的情况下,该费用最高可达钱包价值的20%)。

丢失私钥时用于恢复加密资产的另一种提议的解决方案称为“脑钱包”(brainwallet),凭借脑钱包,可通过对用户直接创建的足够长的密码或口令进行散列来生成私钥。这一解决方案试图解决密钥存储问题,因为密码不需要存储在钱包本身当中,但可以保存在“用户的大脑”中。在线平台(例如https://brainwallet.io/、https://paper.dash.org/等)可以很容易地生成确定性的加密货币私钥,只要提供密码/口令和一些盐值,即作为散列单向函数的附加输入使用的随机数据。请注意,脑钱包密码/口令必须安全且同时易于记忆。在这种情况下,安全性基于攻击者破解密码/口令所需的时间,而可记忆性则依赖于必须记住的信息量。显然,这两个方面是负相关的,并且取决于所选密码的熵。

脑钱包的一个问题是,试图破解用于生成私钥的密码/口令和盐值的动机很高,因为这将使攻击者能够完全访问锁定在钱包本身中的加密资产。攻击者可以使用蛮力破解算法,尝试许多不同的密码/口令和盐值,并检查生成的私钥是否存在并与加密资产相关联。以目前的技术,芯片每秒可以执行约236次尝试。此外,现实世界的攻击表明,即使使用复杂的密码和新的更快的算法,脑钱包也不安全。具体来说,现实世界的攻击设法在每个线程上每秒能够找到16250个密码,破解18000多个脑钱包地址。此外,最近有数百万个现实世界中泄露的密码被黑客获取,黑客可以使用此类密码重建用户的习惯并设计更快的算法来破解用于生成脑钱包私钥的密码/口令和盐值。在源自相同的密码的脑钱包地址作为交易脚本的一部分存储在区块链上时,可能会出现进一步的漏洞。多个地址来源于同一种子时,猜测密码变得更加容易。

可以使用密钥延伸(keystretching)技术以使破解脑钱包地址更加困难。此类密钥延伸技术多次使用难以优化的散列函数(例如sha256,sha1)从简单的密码中导出私钥。此类技术有助于提高攻击的计算成本,但不能保证将来的安全性。实际上,具有增强的计算能力的新硬件会被生产出来,因此,就成本和可行性而言,使计算方面的挑战更容易克服。此外,账户中资金价值的任何增值都会降低延伸密钥的安全性,因为如果将其破解,收益将占破解该密钥所需投资的较大比例。考虑到一台个人计算机每秒可以执行大约6500次sha-1散列,因此可以很容易看出密钥延伸解决方案很快会变得不安全。密钥延伸程序可以使用6500轮散列,将用户延迟大约一秒钟。从攻击者的角度来看,由于任何常规密码测试通常都需要进行一次散列操作,因此使用密钥延伸将其工作量增加了216倍(相当于在常规密码中增加了另外16位熵)。根据摩尔定律,计算机在速度方面的性能每1.5年翻一番,这意味着每过1.5年确定密钥强度可能就会更容易一点。为了保持稳定的安全水平,密钥延伸周期应每1.5年翻一番,但这将要求:(i)用户执行密钥延伸需要更高的计算成本;(ii)密钥延伸算法的设计者应考虑这一方面,并决定系统的寿命。区块链矿工也可以在“挖矿时”执行密钥延伸过程的计算任务,这样几乎不会产生额外费用;此外,此操作可以在不向矿工透露用户密码的情况下完成。但是,这样的安排也会使矿工想要尝试“免费”地暴力破解用户的密码,这违背了密钥延伸的整个目标。

因此,期望提供改进的方法和设备,使用户可以通过可以提供增强的安全性的方式使用密码来授权交易,并阻止试图反求密码并转移该密码控制的加密资产的攻击。



技术实现要素:

因此,根据本发明,可提供如所附权利要求书所限定的方法。

因此,根据本发明,可以提供一种区块链实现的方法和相应的系统。本发明可以被描述为区块链实现的安全方法和相应的系统。

该方法可以提供一种涉及请求者和节点群组的方法,该方法可以包括基于所述请求者选择的密码和所述节点群组发送的多个第一数量,生成请求者的密码密钥。多个第一数量可以基于该组节点的私钥份额和在椭圆曲线上使用双线性映射的数字签名方案的生成器函数。该方法可以进一步包括为所述请求者的区块链交易生成密码签名,所述密码签名对应于所述请求者的密码密钥、基于所述数字签名方案的椭圆曲线上的双线性映射。密码签名可以基于请求者选择的密码和节点群组发送的多个第二数量。多个第二数量可以基于节点群组的私钥份额。该方法可以进一步包括使用请求者的密码密钥验证区块链交易的密码签名。

附加地或可替代地,该方法可以采用涉及节点群组的共识机制,以允许用户(请求者)以安全的方式使用密码授权交易。该方法的任何阶段都不会直接公开该密码。该密码的熵不需要很高(并且可以很低),由于密码的信息量与密码的熵成正比,因此这可以提高密码的可记忆性。

附加地或可替代地,该方法采用节点群组,其中每个节点通过将数字资产转移到该群组而加入该群组,并且该群组中的每个节点都存储有对应的私钥份额。

附加地或可替代地,该方法可以包括筹资阶段(fundingphase),在此阶段中节点群组接收请求者广播的筹资交易,其中该筹资交易指定了请求者的一个或多个数字资产,其中可以使用所述请求者选择的所述密码来转移所有或一些所述数字资产。

附加地或可替代地,该方法可以包括支付授权阶段,在此阶段中节点群组接收耗用交易,该耗用交易所述耗用交易转移所述筹资交易中指定的、所述请求者的一个或多个数字资产中的某部分。耗用交易包括与请求者的密码密钥相对应的密码签名。节点群组使用请求者的密码密钥证实耗用交易的签名。

附加地或可替代地,该方法可以进一步包括初始化阶段,在该阶段中,节点群组接收请求者广播的初始化交易,其中该初始化交易表明想要设置与请求者相关联的密码。节点群组响应于初始化交易生成相应的第一数量,并将包括相应的第一数量的相应第一消息发送给请求者。

附加地或可替代地,支付授权阶段可以包括节点群组接收请求者广播的预耗用交易(pre-spendingtransaction),其中所述预耗用交易转移交易保证金并且包括所述耗用交易的至少一部分的散列,其中,所述耗用交易的至少一部分的散列基于所述数字签名方案的散列函数。节点群组响应于预耗用交易而生成相应的第二数量,并将包括相应的第二数量的相应第二消息发送给请求者。

附加地或可替代地,初始化交易可以包括请求者支付给节点群组的初始化费用。初始化费用可以支付给与该节点群组关联的公共组地址。在所述群组中有至少一个节点向请求者发送不一致的第一数量,则初始化费用可以返还给请求者。第一数量的不一致可以使用可验证的秘密共享方案来确定。

附加地或可替代地,预耗用交易的交易保证金可以锁定在与节点群组相关联的公钥下。预耗用交易可以包括耗用费用。在所述证实是成功的情况下,所述群组可以选择性地将所述交易保证金减去所述耗用费用后的费用返回给所述请求者。在证实失败的情况下,该群组可以选择性地没收所述交易保证金。在节点群组中的至少一个节点向请求者发送不一致的第二数量时,可以将交易保证金返还给请求者。优选地,第二数量的不一致可以使用可验证的秘密共享方案来确定。

附加地或可替代地,耗用费用可以支付给与节点群组相关联的公钥。该群组的节点可以证实耗用费用是否足够,其中优选地,耗用费用的充足性基于处理第三交易和耗用交易所需的计算资源。在未能验证耗用费用是充足的情况下,该群组的节点可以选择性地绕过预耗用交易的进一步处理。该群组的节点可以选择性地将所述耗用费用分配给所述群组。

附加地或可替代地,筹资交易可以指定请求者的一个或多个数字资产由请求者的密码密钥锁定,因此可以由相应的密码签名耗用。在该实施例中,上述节点群组以及(可选地)不属于该组的其他节点可以使用请求者的密码密钥证实已签名耗用交易的密码签名。

附加地或可替代地,筹资交易可以指定请求者的一个或多个数字资产由该组的公钥锁定,因此可以由基于该组的私钥份额的阈值的签名来耗用。在该实施例中,仅节点群组可以使用请求者的密码密钥来证实已签名耗用交易的签名。在成功证实已签名耗用交易的签名后,该群组可以合作以基于该组的私钥份额的阈值数生成签名,并构建包括该签名的二级耗用交易。

在实施例中,第一数量可以包含在群组的各个节点发送给请求者的私有消息中,并使用请求者的公钥加密。该群组的节点可以具有存储节点的私钥份额的受信任执行环境,并且该节点的受信任执行环境可以至少部分地基于该节点的私钥份额和签名方案的生成器函数来生成第一数量。每个私有消息都可以与节点的受信任执行环境的公钥相关联,并且可以使用节点的受信任执行环境的对应私钥进行签名。

在实施例中,第二数量可以包含在群组的各个节点发送给请求者的私有消息中,并使用请求者的公钥加密。该群组的节点可以具有节点的受信任执行环境,该节点的受信任执行环境至少部分地基于第三交易中的未签名耗用交易的散列和节点的私钥份额来生成第二数量。每个私有消息都可以与节点的受信任执行环境的公钥相关联,并且可以使用节点的受信任执行环境的对应私钥进行签名。

在实施例中,一个或多个节点可以挖掘筹资交易和已签名耗用交易以将其存储在工作量证明区块链中。

根据本发明,可以提供一种电子设备,其包括处理器、计算机存储器和网络接口设备。存储器在其上存储了计算机可执行指令,该计算机可执行指令在被执行时,使处理器执行本文所述的方法。

根据本发明,可以提供一种计算机可读存储介质。该计算机可读存储介质包括计算机可执行指令,该计算机可执行指令在被执行时,使处理器执行本文所述的方法。

附图说明

参考本文描述的实施例,本发明的这些和其他方面将变得显而易见并得以阐明。现在仅通过举例的方式并参考附图来描述本发明的实施例,其中:

图1a示出了示例性区块链网络的方框图。

图1b示出了特定于比特币区块链环境的区块链交易的示例。

图2示出了可以作为区块链网络中的节点的示例电子设备的方框图。

图3是如下示例方法的高级流程图,该示例方法采用涉及会议的共识机制以允许用户以安全的方式使用密码授权交易。

图4是示出了图3建立会议阶段的示例性细节的流程图。

图5a-5d共同示出了图3初始化阶段的示例性细节的流程图。

图6是示出了图3筹资阶段的示例性细节的流程图。

图7a-7d共同示出了图3支付授权阶段的示例性细节的流程图。

图8a-8b是另一示例方法的流程图,该方法采用涉及会议的共识机制以允许用户以安全的方式使用密码授权交易。

具体实施方式

区块链网络

首先参考图1a,图1a以方框图形式示出与区块链相关联的示例性区块链网络100。区块链网络可以是公共区块链网络,它是一个点对点的开放成员网络,任何人可以加入其中,无需邀请或经过其他成员同意。运行区块链协议(区块链网络100在该协议下操作)的实例的分布式电子装置可以参与区块链网络100。这种分布式电子装置可称为节点102。区块链协议例如可以是比特币协议。

运行区块链协议且形成区块链网络100的节点102的电子装置可以是各种类型的装置,例如,诸如台式计算机、膝上型计算机、平板计算机、服务器这样的计算机,诸如智能电话这样的移动装置,诸如智能手表这样的可穿戴计算机或其他电子装置。

区块链网络100的节点102使用合适的通信技术相互耦接,所述通信技术可包括有线和无线通信技术。这种通信遵循与区块链网络相关联的协议。例如,在区块链是比特币区块链的情况下,可以使用比特币协议。

节点102维护区块链上所有交易的全局账本。因此,全局账本是一种分布式账本。每个节点102可以存储全局账本的完整副本或部分副本。在区块链通过工作量证明保护的情况下,节点102影响全局账本的交易由其他节点102证实,从而维护全局账本的有效性。当区块链是基于工作量证明的区块链时,还可以通过检查与区块一起提交的工作量证明来证实区块。

区块链网络100的至少一部分节点102充当区块链网络100的矿工104。在图1a中的区块链网络100是工作量证明区块链的情况下,矿工104进行昂贵的计算以便在区块链账本上创建下一个区块。例如,工作量证明区块链可能要求矿工解决加密问题。在比特币中,矿工104找到一个随机数,使得区块头通过sha-256散列到一个数量,这个数量小于当前困难所限定的值。工作量证明算法所需的散列能力指的是,在交易的顶部挖掘了一定数量的区块之后,该交易实际上被视为不可逆。解决加密问题的矿工104为区块链创建一个新的区块,并将其广播到其他节点102。其他节点102证实矿工104实际上已经解决了加密问题,并因此在接受该区块应当添加到区块链之前表现足够的工作量证明。通过节点102的共识,将区块添加到分布式区块链账本中。

矿工104所创建的区块包括节点102已经广播到区块链的交易。例如,该区块可包括从与节点102的其中一个相关联的地址到与另一个节点102相关联的地址的交易。通过这种方式,该区块充当从一个地址到另一个地址的交易的记录。要求将交易包括在区块中的一方通过使用与他们的公钥相对应的私钥对请求进行签名,证明他们被授权发起转移(例如,在比特币的情况下,耗用比特币)。如果请求被有效签名,则只能将转移添加到区块中。

就比特币而言,公钥和地址之间存在一一对应的关系。也就是说,每个公钥都与一个单个地址相关联。因此,本文对于向公钥或从公钥转移数字资产(例如,支付到公钥)以及向与该公钥关联的地址或从与该公钥相关联的地址转移数字资产的任何引用均指通用操作。

某些节点102可以作为验证节点参与,并且可以(也可以不)作为矿工操作。验证节点进行交易的验证,这可以涉及检查签名,确认对有效utxo的引用等。

图1a的示例包括五个节点102,其中三个作为矿工104参与。实际上,节点102或矿工104的数量可以不同。在很多区块链网络中,节点102和矿工104的数量可以比图1a中所示的数量大得多。

图1b示出可能存储在比特币区块链中的交易150的示例。具有类似功能的其他变体也是可能的。交易的数据元素或字段可如图1b所示,并且可包括除了本公开所述之外的其他字段。如图所示,存在区块链版本字段152,其具有指示交易150的区块链协议版本的值。#vin字段154指示交易150中存在多少交易输入(下面解释)。可以存在未被示出的其他字段,但是对于每个交易输入(在此示为示例vin[y]160),存在一组字段,包括先前交易的交易id(txid)161,到该先前交易(提供交易输出以匹配交易输入160的交易)的其中一个输出的索引162,其中,txid161和索引162一起形成引用该先前交易的输出的指针163。如本文中所使用的,术语“先前交易”在针对当前或目前交易的上下文中使用时,是指其交易输出被当前或目前交易所引用(和“耗用”)的特定的在前交易。在示例中,当前或目前交易可称为“耗用交易”。

在某些区块链实施方式中,没有用于分配唯一txid值的集中式机制,而是存在一种用于为交易生成唯一的txid的分散式机制,例如通过生成交易本身内容的散列。因为一个有效的交易不能拥有与另一个有效的交易完全相同的内容,所以每个有效的交易都具有唯一的散列用于其txid(除了天文学低概率的散列冲突之外)。无论如何实现,在此假定每个交易具有唯一的交易id。由于散列的性质,一旦根据交易内容生成txid,该内容就无法更改,并且txid对于该交易仍然有效。

如图1b所示,用于交易输入vin[y]160的字段集还包括指示随后的解锁脚本的长度的unlocking_script_length字段164,包含用于vin[y]160的解锁脚本(在比特币协议中通常称为“scriptsig”)的unlocking_script字段165(该解锁脚本“解锁”指针163所指向的交易输出的对应锁定脚本)、以及可能用于约束交易150的序列号字段166。

虽然图1b仅清楚地示出一个交易输入和一个交易输出,但是交易输入和交易输出都可以是多个。在交易输入之后,有一个#vout字段180,其指示交易150中有多少交易输出(如下所述)。对于每个交易输出(此处以示例vout[x]180进行说明),都有一个字段集,包括指示此交易输出vout[x]180提供的交易值的输出值字段181,指示随后的锁定脚本长度的locking_script_length字段182,以及包含用于此交易输出vout[x]180的锁定脚本(在比特币协议中通常称为“scriptpubkey”)的locking_script字段183。如同所解释的,任何能够创建如下耗用交易的人都可以“耗用”该交易输出的交易值:该耗用交易的交易输入具有解锁脚本,当使用该解锁脚本和该锁定脚本进行证实时,区块链节点将其证实为true。其他字段可以跟随交易输出字段,例如锁定时间字段190,其可以将交易150约束为在指定的未来时间之前或在指定的未来区块之前不活跃。在耗用交易的每个交易输入指向先前交易输出的对应交易输出并且先前交易输出包括交易值的情况下,交易输入不需要包含指示该交易值的字段。

如将在下文解释的,各节点102可以合作以形成一个组,该组在本文中将被称为会议110。在所示的示例中,有三个节点102参加了会议110。然而,会议110成员的实际数目可能更大。

会议110是开放成员组,只要将足够的权益提交给与会议110相关联的池,任何节点102都可以加入该会议。例如,节点可以通过将诸如数字货币(例如比特币)、令牌或其他权益或价值的数字资产转移到与会议110相关联的账户来加入会议。加入会议的节点102可以是区块链网络中的任何节点,包括挖矿节点和非挖矿节点。在至少一些会议的应用中,充当会议成员的节点监视区块链,即这些节点下载(但不一定保留)整个区块链。于2017年4月11日提交的第1705867.8号英国专利申请(代理人案卷号p510727/cej)和于2017年4月11日提交的第gb1705869.4号英国专利申请(代理人案卷号p510728/cej)描述了建立和维护会议110的技术。

会议的成员可以形成备用链网络(alternatechainnetwork)120。备用链网络120创建并维护称为备用链的分布式账本。可以部署备用链网络120来仲裁区块链网络100上生成的与算法相关的争议。当一个节点的处理器生成的工作成果的可靠性受到另一节点的挑战时,可能存在这种争议。备用链网络120也可能被部署用于其他目的。

虽然与区块链网络100相关联的区块链是工作量证明区块链,但备用链是权益证明区块链。基于权益证明的备用链网络120提供用于达成共识的备选机制。在权益证明备用链中,区块链通过权益证明而不是工作量证明来保护。在权益证明下,备用链的矿工125存放数字资产的保证金,并且其被选择为挖掘区块的节点的概率与作为保证金提供的数字资产的数量成正比。此类权益证明区块链系统可用于避免通常在工作量证明区块链上挖矿需要的计算费用和精力。

多个节点102充当备用链网络120的矿工125。备用链网络120的至少一些矿工125可能不充当区块链网络100的矿工104。由于备用链网络120是权益证明区块链网络,所以矿工125会存入数字资产,以便被包括为矿工。更具体地,备用链的矿工125形成一个担保验证者集合(bondedvalidatorset),以便在备用链网络120上挖掘。这些矿工125还可以是与工作量证明区块链网络100相关联的会议110的成员。就是说,既是工作量证明区块链网络100的一部分、也是备用链网络120的一部分的节点102充当备用链网络120的矿工125,并且充当在工作量证明区块链网络100上建立的会议110的成员。这些矿工125根据以下描述的方法加入会议110并参加会议110。他们将数字资产存入会议池是在工作量证明区块链中进行的。也就是说,会议成员将他们的“权益”存放在工作量证明区块链网络100上,以成为会议成员,这使他们能够通过形成担保验证者集合来充当备用链上的矿工125。

在实施例中,备用链网络120的备用链可以是权益证明虚拟链(proof-ofstakeghostchain),其也是临时权益证明区块链。与传统的区块链不同,权益证明虚拟链被配置为在达到其目的后就会终止。也就是说,虚拟链是一种单一目的的区块链,一旦达到其目的就不再存在。权益证明虚拟链包括第一区块,其可以被称为创始区块,仅当出于其目的而部署权益证明虚拟链时才创建创始区块。权益证明虚拟链网络的细节在2017年4月11日提交的第gb1705869.4号英国专利申请(代理人案卷号p510728/cej)中有所描述。

作为节点操作的电子装置

图2是示出示例性电子装置200的组件的方框图,示例性电子装置200可以充当区块链网络100(图1a)中的节点102(图1a)。示例性电子装置200也可称为处理装置。电子装置可以采用各种形式,例如包括台式计算机、膝上型计算机、平板计算机、服务器、诸如智能手机这样的移动装置、诸如智能手表这样的可穿戴计算机、或其他类型的形式。

电子装置200包括处理器210、存储器220和用于通过网络进行数据通信的网络接口装置230。这些组件可以直接或间接地相互耦接并且可以相互通信。例如,处理器210、存储器220和网络接口装置230可以经由总线240相互通信。存储器220存储计算机软件程序,其包括用于进行本文所述功能的机器可读指令和数据。例如,存储器可包括处理器可执行指令,当通过处理器210执行时,可执行指令使得电子装置进行本文所述的方法。处理器可执行指令可包括指令,当由处理器210执行时,该指令使得电子装置实现与区块链网络100(图1a)相关联的协议。例如,指令可包括用于实现比特币协议的指令。

存储器220可以存储区块链网络100(图1a)的全局账本或其一部分。也就是说,存储器220可以存储区块链的所有区块或一部分区块,例如最新的区块,或者一些区块中的一部分信息。此外,当部署备用链(例如,虚拟链)时,存储器220可以存储备用链(例如,虚拟链)或其一部分。

虽然存储器220在图2中用单个方框示出,但是实际上,电子装置200可包括多个存储器组件。存储器组件可以是各种类型,例如包括ram、hdd、ssd、闪存驱动器等。不同类型的存储器可以适合于不同的目的。此外,虽然存储器220与处理器210分开示出,但是处理器210也可包括嵌入式存储器。

如图2所示,处理器210可包括诸如可信执行环境(tee)250这样的安全区域。tee250是隔离执行环境,其为电子装置200提供额外的安全性,例如隔离执行、可信应用的完整性和资产机密性。tee250可用于保护重要资源(例如密钥)的完整性和机密性。tee250至少部分地在硬件级别实现,使得在tee250内执行的指令和数据受到保护,以防止来自电子装置200其余部分以及诸如电子装置的所有者这样的外方的访问和操纵。tee250内的数据和计算从操作包括tee250的节点102的一方得到保护。tee250可以提供执行空间和数据存储,从而确保在tee250内加载的计算机指令和数据在机密性和完整性方面受到保护。tee250可以实现为在处理器210上执行的安全虚拟机。在替代实施例中,tee250可以由独立于且不同于处理器210的专用安全处理器来实现。tee250可以用于保护重要资源(例如密钥)的完整性和机密性。tee250至少部分地在硬件级别上实现,从而保护tee250内执行的指令和数据免受来自电子装置200的其余部分以及外部各方(如电子设备的所有者)的访问和操纵。tee250内的数据和计算受到操作包含tee250的节点102的一方的保护。

tee250可以操作以将飞地实例化,然后一次一个添加存储器的页面,同时累积地进行散列。也可以在远程机器(可以是开发者机器或另一个机器)上进行类似的操作,以便远程机器确定并存储预期的散列。因此,飞地的内容可以由任何远程机器证实,以确保飞地运行批准的算法。可通过比较散列来进行证实。飞地完全建成后,将其锁定。可以在tee250中运行代码并向代码发送秘密,但代码不能更改。最终散列可通过证明密钥(在tee内部)来进行签名,并且可使其对于数据所有者可用,以在数据所有者向飞地发送任何秘密之前证实它。

tee250可用于保护与由会议110(图1a)使用的会议公钥相关联的私钥份额的机密性和完整性。例如,tee250可以用于私钥份额的生成和存储。tee250目的是确保没有成员能够直接获得在tee250飞地内保持的私钥份额,或者通过成员间通信或跨飞地通信获得关于其他私钥份额的信息。协议对于飞地阈值的损害也是稳健的。此外,tee250可以启用远程证明,该远程证明可以由节点102(图1a)用来向其他节点102证明tee250是可信的并且正在运行用于会议110所实施的协议的、被批准的计算机可执行指令。远程证明可以由tee250通过运行特定代码段并在飞地内部发送该代码的散列来提供,代码的散列由用于飞地的内部证明密钥签名。

当先前在电子装置200上使用私钥份额的会议110的成员选择离开会议时,tee250可用于证明私钥份额的安全删除。电子装置200可通过tee250中提供的远程证明协议向其他会议成员发出信号以删除证明。在允许成员撤回其成员存款之前,可能需要删除证明。也就是说,存款的返回可以以证明成员的飞地内的私人密钥份额的删除为条件。

tee250可以配备有安全随机数发生器,安全随机数发生器是在tee的飞地内部,其可用于生成私钥、随机询问、或其他随机数据。tee250还可以被配置为从外部存储器读取数据,并且可以被配置为将数据写入外部存储器。这些数据可通过仅在飞地内部保持的秘密密钥加密。

可以使用各种平台(诸如可信平台模块(tpm)或英特尔软件保护扩展(sgx))来实现tee250。例如,sgx支持远程证明,这使得飞地能够从正在执行特定飞地的处理器获取签名的声明,所述特定飞地具有称为引用的成员的给定散列。诸如英特尔证明服务(ias)这样的第三方证明服务可以证明这些签名的声明源自符合sgx规范的可信cpu。

电子装置200充当区块链网络100(图1a)中的节点102,并且可以加入或者以其他方式参加会议110(图1)。当一组数字资产持有者汇集数字资产(例如数字货币、令牌或区块链网络100(图1a)支持的其他权益或价值)时,会议110形成,该数字资产池在单个公钥(会议公钥)下锁定,从而使由会议成员持有的(优选地,在会议成员的tee内部)相应的私钥的份额与他们向数字资产池贡献的资产数量成比例。电子装置200还可以充当备用链网络120(图1a)的节点102。

会议

会议110可以是许可或非许可群组。也就是说,区块链网络100(图1)中的任何节点102(图1)(即,通过监视和存储区块链中的至少一部分信息的任何节点)可以加入会议110。为了加入会议110,节点102将一个或多个数字资产转移到与会议110相关联的数字资产池(即,转移到与一个或多个数字资产相关联的公共群组地址,该一个或多个数字资产相应地与其他会议成员相关联)。该数字资产池可被称为会议池。例如,节点102可通过将这样的数字资产转移(即,存放)到与会议池相关联的地址(即,转移到又可称为公共群组地址的“会议地址”)来加入会议110。数字资产被置于具有单个公钥(称为会议公钥)的群组阈值签名的控制之下。会议成员持有分布式产生的私钥份额。特定会议成员持有的份额数量可以与该特定会议成员存放在池中的金额成比例。

由会议110控制的数字资产(包括转移到会议地址的任何数字资产)可以被置于阈值签名方案的控制之下。在阈值签名方案下,需要一组总私钥份额持有超过阈值的成员来产生有效签名,该签名允许数字资产被转移离开会议110的控制。即,必须将至少阈值数量的私钥份额生成有效签名用于为会议110控制的数字资产的任何向外转移。

会议公钥或cpk阻碍会议110的成员存放在会议池中的以换取私钥份额的数字资产,以及通过会议1100的成员或非成员存放在与会议池相关联的地址的任何数字资产(即,在会议的全部、部分、或有条件控制下放置)(该任何数字资产由于获得私钥份额之外的原因而已经被存放)。非成员或成员可出于各种原因将数字资产存放在与会议相关联的地址。

因为同一会议公钥可以阻碍成员存款(即由会议成员提供的以换取私钥份额的数字资产)以及成员或非成员处于其他目的提供的数字资产,所以到会议公钥的至少一部分存款可能会被特别标记,以表明存款的类型。例如,将数字资产转移到会议公钥的交易可包括标记、标识符或指示正在进行的存款的性质的其他属性。举例来说,不是为了加入会议或增加会议成员资格中权益的目的而进行的将数字资产转移到会议公钥的交易可包括特殊标识符,以指示存款是为了其他目的而进行的。在管理私钥生成时,可通过与会议110相关联的节点102来使用这些标识符。更具体而言,为了加入群组而存放数字资产的节点102被分配用于会议110的私钥份额(作为进行数字资产存放的结果),而为了其他目的(例如,转移到侧链)存放数字资产的其他节点102不一定持有会议的会议私钥份额(即,对应于会议公钥)。

会议110可以充当自治群组,其中通过没收全部或部分成员存款的威胁来强制执行合作行为。非合作或恶意成员可能由于加入由很多诚实成员参与的合作协议而被没收这种数字资产。此外,当会议成员希望离开会议110时,他们可以撤回其成员存款(即,要求会议110将成员存款转移回该成员的个人地址)。但是,仅当群组成员(即会议)使用多个私钥份额(其数量超过生成有效数字签名所需的阈值)来批准撤回时才进行资金的撤回。

会议110实现的阈值签名方案可以是各种类型。例如,阈值签名方案可以允许在n方之间共享签名权,只要至少阈值数量的私钥份额有助于生成有效签名。小于阈值的任何子集都不能生成有效签名。阈值签名方案可以是椭圆曲线数字签名算法(ecdsa)方案。例如,ecdsa方案可以是ibrahim等人在“arobustthresholdellipticcurvedigitalsignatureprovidinganewverifiablesecretsharingscheme”,2003eiii46thmidwestsymposiumoncircuitsandsystems,1:276-280(2003)中提出的类型。该阈值签名方案是数字签名方案的扩展,其是基于椭圆曲线加密的算法,其中需要来自n个密钥份额持有者一方的t+1个密钥份额来重建私钥。该方案可用于构建有效签名,而无需重建私钥,并且没有任何一方必须向另一方透露其密钥份额。注意,可以由会议110实现其他适当的签名方案。

采用涉及会议的共识机制以允许用户使用密码授权交易的示例方法

现在参考图3-图8b,其示出了采用涉及会议的共识机制以允许用户(在本文中称为“请求者”)使用用户选择的密码授权一个或多个交易的方法。如图3所示,共识机制可以在逻辑上划分为一系列阶段,包括建立会议的阶段301、初始化阶段303(涉及初始化交易)、筹资阶段305(涉及筹资交易)以及支付授权阶段307(涉及预耗用交易和耗用交易)。该方法的任何阶段都不会直接揭露密码。密码的熵不需要很高(并且可以很低),由于密码的信息量与密码的熵成正比,因此可以提高密码的可记忆性。支付授权阶段307可能会重复多次,以使请求者使用密码转移在筹资交易中指定的资金。此外,一旦在阶段301建立了会议,初始化阶段303、筹资阶段305和支付授权阶段307的操作就可以复制给多个用户,以允许多个个人用户使用用户选择的密码授权一个或多个交易。

在实施例中,共识机制利用数字签名方案,该数字签名方案使用椭圆曲线上的双线性图。这样的双线性映射是一种基于配对的密码术,其通过映射e将两个加密群组的元素之间的配对用于第三群组。考虑相同素数阶(primeorder)q的两个有限循环群组(g1=<p>,·),(g2,·),使得两个群组中离散对数问题都很难。当且仅当满足以下三个条件时,映射e:g1×g1→g2才称为双线性映射:

1.双线性:e(ap,bq)=e(p,q)ab

2.非退化性:g1=<p>=><e(p,p)>=g2.

3.映射e在多项式时间内是可计算的。

d.boned、b.lynn和h.sachem在“shortsignaturesfromtheweilpairing”(internationalconferenceonthetheoryandapplicationofcryptologyandinformationsecurity(密码学与信息安全理论与应用国际会议),2001年亚密会,第514-532页)一文中公开了在椭圆曲线上使用双线性映射的确定性签名方案。在该方案中,假设适当地选择了g1,g2,在随机预言模型(randomoraclemodel)下证明了安全性。更具体地说,将签名者的秘密密钥设为并将相应的公钥y=gx作为g1=<g>中的元素。假设h:{0,1}*→g1是一个散列函数。签名和证实消息m的步骤如下:

sign(m):消息m上的签名σ是h(m)x(ing1)。

verify(σ,m):当且仅当e(g,σ)=e(y,h(m))时接受。

在a.boldyreva“efficientthresholdsignature,multisignatureandblindsignatureschemesbasedonthegap-diffie-hellman-groupsignaturescheme”(pkc2003,lncs2139,第31-46页,springer-verlag,2003)中,bone、lynn和sachem的签名方案被推广到t/n阈值签名方案(t-out-of-nthresholdsignaturescheme)。在这种情况下,n组中的任何t个签名者都可以签署消息m。将第i个签名者的私钥设为并将相应的公钥作为g1=<g>中的元素。在这里主秘密是x=∑ixili,,其中li是拉格朗日系数,具体取决于i的哪些t值是可用的。主公钥是y=gx,而个人公钥是签署和证实消息m的步骤如下:

sign(m):t个签名者中的每个都会创建一个签名份额:

请注意,每个σi的有效性可以通过确保g(g,σi)=e(yi,h(m))来检查。对于i的t个值,签名σ可以确定为

verify(m,σ):当且仅当e(g,σ)=e(y,h(m))时接受。

图3-图8的共识机制的实施例所使用的数字签名方案通过将用户选择的密码结合到数字签名方案中(如下文详细描述的),在boldyreva的t/n阈值签名方案的基础上进行扩展。建立会议的阶段301包括图4的操作401-405。初始化阶段303包括图5a-5d的操作501-537。筹资阶段305包括图6的操作601-605。支付授权阶段307包括用于描述本发明的一个实施例的图7a-7d的操作701-751,或者可能包括用于描述本发明的另一实施例的图8的操作737'至751'。

注意,代表请求者(在本示例中为“alice”)执行的操作显示在图3-8的左侧,图3-8的右侧示出了由属于会议成员的节点102执行的操作或代表属于会议成员的节点102执行的操作。代表请求者(或其部分)执行的操作可涉及数字钱包。此类数字钱包可以是硬件钱包,通常将智能卡或usb设备用于某些功能(例如密钥生成、密钥存储和交易签名)。或者,数字钱包可以是热钱包,使用以某种方式连接到互联网的在线系统。

图4示出了建立会议110的阶段301的细节。

在操作401,识别将作为会议成员参加的节点102,从而建立会议110。于2017年4月11日提交的第1705867.8号英国专利申请(代理人案卷号p510727/cej)和于2017年4月11日提交的第gb1705869.4号英国专利申请(代理人案卷号p510728/cej)中描述了建立和维护会议110的技术。

在操作403,会议110确定用于数字签名方案的参数,该数字签名方案采用在椭圆曲线上双线性映射(例如,第一组g1、第二组g2、映射函数e和散列函数h)。

在操作405,会议110的成员使用分布式协议,由此会议的每个成员i的tee确定并保持其在会议私钥x中的私钥份额xi。在本实施例中,根据数字签名方案的双线性映射的双线性条件确定。分布式协议还确定与会议私钥x对应的会议公钥(cpk)。

图5a-5d示出了初始化阶段303的细节。

在操作501,请求者(alice)生成初始化交易ti。假定请求者(alice)拥有一个带有公钥pk的账户。初始化交易ti向会议110表明或发信号表示想要设置与请求者(alice)相关联的密码。初始化交易ti指定初始化费用fi,该费用是通过公钥pk从请求者的账户中转移并支付给cpk的。在实施例中,初始化交易ti可以指定初始化费用fi由会议公钥cpk锁定,并且因此可以由使用基于对应的会议私钥x的签名进行签署的交易来耗用。注意,初始化费fi将被转移到会议110,以作为对处理初始化交易ti并参与初始化阶段303的回报。

在实施例中,初始化交易ti可以包括一个或多个交易输入以及交易输出,该一个或多个交易输入指定请求者的账户的utxo以及解锁该utxo的相关联的解锁脚本(例如scriptsig),该交易输出指定等于初始化费用fi的值且具有相关联的锁定脚本(例如scriptpubkey),该锁定脚本通过会议公钥cpk将初始费用fi锁定,因此可能被具有如下交易输入的耗用交易耗用,该交易输入带有提供会议公钥cpk和基于相应会议私钥x的签名的解锁脚本(例如scriptsig)。初始化交易ti可能包含另一个交易输出,用于将零钱(change)返回到请求者的账户,该零钱表示交易输入的utxo与初始化费用fi之间的差额减去任何隐含的交易费用。

在操作503,请求者(alice)将初始化交易ti广播到区块链网络100,从而将初始化交易ti传送给会议110的成员。然后,请求者(alice)继续进行操作517。

在操作505,区块链网络110的节点(包括会议110的成员节点,也可能包括其他非成员节点)验证初始化交易ti,并且区块链网络100的挖矿节点(其不必是会议110的成员)可以挖掘经验证的初始化交易ti以便将其存储在区块链网络100的区块链中,这确认了初始化费用fi到会议110的cpk的转移。注意,初始化交易ti可能需要满足所有挖矿交易的必要条件(例如,其中一个条件是初始化交易ti向矿工提供足够的交易费)。

在操作507,会议110的每个成员i接收并处理初始化交易ti。

在操作509,会议110的每个成员i的tee通过使用散列函数h对属于请求者(alice)的公钥pk进行散列来确定第一组g1的生成器函数g。在实施例中,生成器函数g极有可能对于请求者(alice)来说是唯一的。

在操作511,会议110的每个成员i的tee使用在509中确定的生成器函数g,以基于其私钥份额xi生成数量gxi。在实施例中,数量gxi可以通过对组g1的重复运算来获得,其中该运算取决于组的加法或乘法,并且将对应于总和或乘方。在实施例中,数量gxi可以通过组的重复运算获得,而该组的重复运算简单地表示为乘方。

在操作513,会议110的每个成员i的tee为请求者(alice)生成私有消息m(gxi)。私有消息m(gxi)包括可以使用属于请求者(alice)的公钥pk加密的数量gxi。在实施例中,私有消息m(gxi)可以与关联于成员i的tee的公钥相关联,并且可以使用成员i的tee的对应私钥进行签名。请注意,私有消息m(gxi)可以包括某些盲量,这些盲量不会向请求者(alice)透露会议的私钥份额xi,但是允许请求者(alice)证实数量gxi的一致性。此操作可以基于ibrahim等人“arobustthresholdellipticcurvedigitalsignatureprovidinganewverifiablesecretsharingscheme”(2003eiii第46届中西部电路与系统研讨会,1:276-280(2003))中描述的技术。

在操作515,会议110的每个成员i将私有消息m(gxi)发送给请求者(alice),并且会议110的成员继续进行操作531。

在操作517,请求者(alice)接收并处理由会议110的成员发送给请求者(alice)的私有消息m(gxi)。每个私有消息m(gxi)的真实性可以通过使用与成员i的tee相关联的相应公钥证实私有消息m(gxi)的签名来检查。

在操作519,请求者(alice)确定数量gxi是否一致。操作323的一致性检查可以使用多种众所周知的可证实秘密共享方案中的任何一种来执行。请参阅https://en.wikipedia.org/wiki/verifiable_secret_sharing。操作323的一致性检查也可以使用公开可验证的秘密共享方案进行,如stadler,m.于1996年5月在国际密码技术理论和应用会议上发表的“publiclyverifiablesecretsharing”中所述。这些方案可用于(i)识别不一致的份额(ii)检查“秘密发送”给一方的数量或份额是否与广播的盲量或份额不同,这可以基于ibrahim等人所述的技术。为了进行一致性检查,可以使用属于请求者(alice)并且对应于公钥pk的私有密钥来解密数量gxi

在操作521,请求者(alice)生成用于报告操作323一致性确定结果的交易tc1,并将交易tc1广播到区块链网络100,从而将交易tc1传送给会议110的成员。在实施例中,交易tc1的结果可以包括对提供不一致数量gxi(例如,该节点的tee的公钥)的任何节点的引用,或者在所有数量gxi都一致的情况下为空引用。

在操作523,请求者(alice)评估交易tc1以检查其是否指示数量gxi是一致的。如果是这样,则请求者(alice)的操作继续进行到525到529;否则,请求者(alice)的操作可以返回到501以生成并广播另一个初始化交易ti。

在操作525,请求者(alice)选择或输入密码pw。

在操作527,请求者(alice)通过使用散列函数h对公钥pk进行散列来确定第一组g1的生成器函数g。

在操作529,请求者(alice)使用生成器函数g以基于密码pw和数量gxi构造公钥y,并且请求者(alice)在初始化阶段的操作结束。在实施例中,公钥y可以被构造为:

其中,li是合适的拉格朗日系数。

注意,尽管pw是低熵的,但是公钥y极有可能是唯一的,因为pk是唯一的且因此g也将是唯一的。

在操作531,会议110的成员接收并处理交易tc1。

在操作533,会议110的每个成员i评估交易tc1以检查它是否指示数量gxi是一致的。如果是,则操作继续到535;否则,操作继续到537。

在操作535,会议110可以采取步骤将初始化费用fi分配给会议110的成员,并且会议110的成员在初始化阶段的操作结束。

在操作537,会议110可以采取步骤将初始化费用fi返还给请求者(alice)(因为请求者在此阶段没有过错),并且没收提供不一致数量gxi(如交易tc1的结果报告)的会议110的任何恶意成员节点的保证金。在实施例中,会议成员可以采用权益证明备用链(例如,虚拟链)来没收会议110的任何恶意成员节点的保证金。没收的保证金可能会转移给会议的其他成员,或通过将没收的保证金转移到无法使用的地址而将其销毁。在操作527之后,会议110的成员在初始化阶段的操作可以结束。

图6示出了筹资阶段305的细节。

在操作601,请求者(alice)生成筹资交易tf,其指定了请求者(alice)的资金f,其中资金f的一些或全部可以使用密码pw转移。筹资交易tf还指定了i)交易保证金比例,其中使用密码尝试转移资金f的一些或全部时需要提供交易保证金金额dt*f,ii)生成器函数g,和iii)锁定资金f的公钥y。

在该实施例中,资金f被公钥y锁定(阻碍),因此可以由包含耗用签名σs(作为元数据)的一个或多个已签名交易(每个交易都被称为已签名耗用交易ts)耗用,该耗用签名σs从密码pw和从阈值数量的会议成员发送的数量σs,i生成(735)。在该实施例中,区块链网络100的节点(可以包括会议110的成员和非会议110成员的节点)可以使用公钥y证实耗用签名σs(请参阅下文的操作743),作为验证已签名耗用交易ts的一部分,这实际上会释放对涉及筹资交易tf的资金f上的公钥y的锁定(阻碍)。

在实施例中,筹资交易tf可以包括一个或多个交易输入以及交易输出,该一个或多个交易输入指定请求者的账户的utxo以及解锁utxo的相关联的解锁脚本(例如scriptsig),该交易输出指定等于资金f的值且具有相关联的锁定脚本(例如scriptpubkey),该锁定脚本使用公钥y锁定资金f,因此可能被具有如下交易输入的耗用交易耗用,该交易输入带有提供公钥y和从密码pw和会议私钥x得出的耗用签名σs的解锁脚本(例如scriptsig)。筹资交易tf还可能包括其他交易输出(不可耗用的),其指定交易保证金分数dt和生成器函数g。筹资交易tf也可能包括另外的交易输出,用于将零钱返回给请求者的帐户,该零钱代表交易输入的utxo与资金f减去任何隐含的交易费用的差额。

在操作603,请求者(alice)将筹资交易tf广播到区块链网络100。

在操作605,区块链网络100的节点(包括会议110的成员节点,也可能包括其他非成员节点)验证筹资交易tf,并且区块链网络100的挖矿节点(不必是区块链网络100的成员)可以挖掘经验证的筹资交易tf以将其存储在区块链网络100的区块链中。注意,筹资交易tf可能需要满足所有挖矿交易的必要条件(例如,这样的条件之一是筹资交易tf为矿工提供足够的交易费)。

图7a-7d示出了支付授权阶段307的细节。

在操作701,请求者(alice)生成未签名的耗用交易ts,该交易指的是由筹资交易tf锁定的资金f。未签名的耗用交易ts(在下面的739和741中进行签名和广播时)将转移资金f的一部分给接收者。

在实施例中,未签名的耗用交易ts可以包括交易输入以及第一交易输出,该交易输入指的是被请求者的筹资交易tf锁定的资金f,该第一交易输出指定了与资金f相关联的一部分的值且具有相关联的锁定脚本(例如scriptpubkey),该锁定脚本基于接收者的公钥来锁定此值,因此可能被具有交易输入的耗用交易好用,该交易输入带有提供接收者的公钥和基于接收者的私钥的签名的解锁脚本(例如scriptsig)。

在操作703,请求者(alice)生成预耗用交易tps,该预耗用交易tps转移交易保证金金额dt*f将其锁定在会议公钥cpk下。预耗用交易tps还包括耗用费用fs、相应的未签名耗用交易ts的散列(即,h(ts))和公钥pk’。耗用费用fs是请求者(alice)愿意提供给会议110以处理预耗用交易tps和耗用交易ts的费用。公钥pk’是请求者希望转移资金的帐户地址。该地址可能与用于转移存款的公钥pk相同或不同。

在实施例中,预耗用交易tps可以包括一个或多个交易输入以及交易输出,该交易输入指的是请求者账户的utxo以及解锁utxo的相关联的解锁脚本(例如scriptsig),该交易输出指定等于以下值(dt*f)的交易输出且具有通过相关联的锁定脚本(例如scriptpubkey)。该锁定脚本使用会议公钥cpk锁定金额(dt*f),因此可能被具有如下交易输入的耗用交易耗用,该交易输入带有提供会议公钥cpk和使用会议专用私钥x生成的签名的解锁脚本(例如scriptsig)。预耗用交易tps可以包括指定耗用费用fs,对应的未签名的耗用交易ts(即,h(ts))的散列和公钥pk’的其他交易输出(不可耗用)。预耗用交易tps可能包含另一个交易输出,用于将零钱返回给请求者的帐户,零钱表示交易输入的utxo与金额(dt*f)之差减去任何隐含的交易费用。

在操作705,请求者(alice)将预耗用交易tps广播到区块链网络100,从而将预耗用交易tps传送给会议110的成员,并且请求者(alice)的操作进行到723。

在操作707,区块链网络100的节点(包括会议110的成员节点,也可能包括其他非成员节点)验证预耗用交易tps,并且挖矿节点(不必是会议110的成员)可以挖掘经验证的预耗用交易tps以将其存储在区块链网络100的区块链中,这确认了交易保证金金额dt*f的转移。请注意,预耗用交易tps可能需要满足所有挖矿交易的必要条件(例如,其中一个条件是,预耗用交易tps向矿工提供足够的交易费用)。

在操作709,会议110的成员接收并处理预耗用交易tps,以确定由预耗用交易tps指定的耗用费用fs是否足够。耗用费用fs是否足够可以取决于处理预耗用交易tps所需的计算工作量(包括如下所述的操作709至749)。

在操作711,会议110的成员评估耗用费用fs是否足够的确定。如果确定耗用费用fs不足,则操作继续至713;否则(对于确定耗用费用fs足够的情况),操作继续到715-719。

在实施例中,在709中对耗用费用fs充足性的确定可以包括反映会议成员所执行的操作的计算工作的特定工作单元,这类似于以太坊区块链网络中的“gas”。根据会议110的成员在处理预耗用交易tps时执行的每个特定计算操作所需的计算资源,将该特定计算操作分配给特定数量的特定单元。对会议110的成员在处理预耗用交易tps时所有计算操作使用的特定数量的该特定单元进行汇总,并乘以每个特定单元的价格,以确定耗用费用fs的必要阈值。如果耗用费用fs超过此阈值,则在711中认为耗用费用fs足够。如果耗用费用fs没有超过此阈值,则在711中认为耗用费用fs不足。

在操作713,会议110可以采取步骤绕过针对预耗用交易tps的进一步处理(操作715-719和操作729-733)以及针对耗用交易ts的后续操作(操作741-749)。

在操作715,会议110的每个成员i的tee使用其私钥份额xi和预耗用交易tps中包括的未签名耗用交易ts的散列(表示为h(ts))来生成相应的数量σs,i。在实施例中,数量σs,i可以被生成为注意,会议110的其他成员在此阶段不知道耗用交易ts。

在操作717,会议110的每个成员i的tee生成给请求者(alice)的私有消息m(σs,i)。私有消息m(σs,i)包括在363中生成的数量σs,i,其可以使用请求者(alice)的公钥pk加密。在实施例中,私有消息m(σs,i)可以与成员i的tee的公钥相关联,并且可以使用成员i的tee的对应私钥签名。请注意,私有消息m(σs,i)可以包含某些盲量,这些盲量不会向请求者(alice)透露会议的私钥份额xi,但允许请求者(alice)证实量σs,i的一致性,这可以基于ibrahim等人的“arobustthresholdellipticcurvedigitalsignatureprovidinganewverifiablesecretsharingscheme”(2003eiii第46届中西部电路与系统专题研讨会,第1期:276-280(2003))中所述的技术。

在操作719,会议110的每个成员i将私有消息m(σs,i)发送给请求者(alice),操作继续至729。

在操作721,请求者(alice)接收并处理会议110的成员发送给请求者(alice)的私有消息m(σs,i)。每个私有消息m(σs,i)的真实性可以通过使用与成员i的tee关联的相应公钥证实私有消息m(σs,i)的签名来检查。

在操作723,请求者(alice)确定包括在接收到的私有消息m(σs,i)中的数量σs,i是否一致。723的一致性检查可以使用上述519中的任何一种可证实秘密共享方案来执行。为了执行一致性检查,可以使用属于请求者(alice)并对应于公钥pk的私钥来解密数量σs,i。

在操作725,请求者(alice)生成报告723一致性确定结果的交易tc2,并将交易tc2广播到区块链网络100,从而将交易tc2传送给会议110的成员。在实施例中,交易tc2的结果可以包括对提供不一致数量σs,i的任何节点的引用(例如,该节点的tee的公钥),或者如果所有接收到的数量σs,i均一致,则为空引用。

在操作727,请求者(alice)评估交易tc2以检查其是否指示数量σs,i是一致的。如果是,则请求者(alice)的操作继续到735-739;否则,请求者(alice)的操作可以返回到701,以生成另一个未签名耗用交易ts并进行后续处理。

在操作729,会议110的成员接收并处理交易tc2,以检查其是否表明接收的数量σs,i是一致的。

在操作731,会议110的每个成员i确定729的处理是否指示接收到的数量σs,i是一致的。如果是,则操作继续到741;否则,操作继续到733。

在操作733,会议110可以采取步骤将由预耗用交易tsp指定并在会议公钥cpk下锁定的交易保证金金额dt*f转移到由请求者指定的公钥pk'(因为请求者在此阶段没有过错),并没收会议110中提供不一致数量σs,i(如交易tc2的结果所报告)的任何恶意成员节点的保证金,然后绕过耗用交易ts的后续操作。在实施例中,会议成员可以采用权益证明备用链(例如,虚拟链)来没收会议110的任何恶意成员节点的保证金。没收的保证金可能会转移给会议110的其他成员,或通过将没收的保证金转移到无法使用的地址而将其销毁。在733之后,会议110的成员在支付授权阶段的操作可以结束。

在操作735,请求者(alice)使用未签名耗用交易ts的散列(即h(ts))、密码pw和从阈值数量的会议成员那里接收到的数量σs,i来生成签署签名σs。在将私钥份额xi分配给会议成员时,可以在初始化阶段确定会议成员的阈值数量。在实施例中,签署签名σs可以被生成为

在操作737,请求者(alice)包括在735中生成的签名σs作为耗用交易ts的签名(其最初在701中生成)。在一个示例中,签名σs可以作为耗用交易ts的交易输入的解锁脚本(例如,scriptsig)的一部分包含在内,其中交易输入是指被公钥y锁定的资金f。

在操作739,请求者(alice)将耗用交易ts(现在已经用签署签名σs进行签名)广播到区块链网络100。

在操作741,区块链网络的节点(包括会议110的成员节点,也可能包括其他非成员节点)验证耗用交易ts,该验证包括针对相应的筹资交易tf的公钥y证实耗用交易ts的签名σs的操作。这种证实可以使用数字签名方案的映射函数e和筹资交易tf中指定的生成器函数g。例如,这种证实当且仅当e(g,σs)=e(y,h(ts))时可以接受耗用交易ts的签名σs。在实施例中,可以通过耗用交易ts的交易输入(交易输入指的是请求者的筹资交易tf锁定的资金f)的解锁脚本(例如,scriptsig)以及请求者的所引用的筹资交易tf的相应交易输出(其使用公钥y锁定资金f)的锁定脚本(例如scriptpubkey),来指定针对公钥y证实耗用交易ts的签名σs的操作。

在操作743,区块链网络的节点(包括会议110的成员节点,还可能包括其他非成员节点)评估在741执行的筹资交易tf的验证。如果筹资交易tf的验证成功(并且已针对相应的筹资交易tf的公钥y成功证实了耗用交易ts的签名σs),则操作继续到745和747。否则(对于筹资交易tf验证失败的情况,可能因为针对相应筹资交易tf的公钥y对耗用交易ts的签名σs进行的证实失败),操作继续到749。

在操作745,挖矿节点(其不必是会议110的成员)可以挖掘耗用交易ts以将其存储在区块链网络100的区块链中,这确认了资金f的一部分向耗用交易ts的接收者的转移。

在操作747,会议110的成员可以采取步骤将预耗用交易tsp中指出的并且由会议公钥cpk锁定的金额(dt*f–fs)转移到公钥pk',并将耗用费用fs转移给会议110的成员。这可以涉及到会议110生成具有第一交易输入和第一交易输出的交易,该第一交易输入指的是在会议公钥cpk下锁定的预耗用交易tsp的交易输出且具有解锁脚本(例如scriptsig),该解锁脚本包括释放会议公钥cpk的锁定的会议生成的签名,该第一交易输出将金额(dt*f–fs)转移到公钥pk'。交易还可以包括第二交易输入和第二交易输出,该第二交易输入指的是在会议公钥cpk下锁定的预耗用交易tsp的交易输出且具有如下解锁脚本(例如,scriptsig),该解锁脚本包括释放会议公钥cpk的锁定的会议生成的签名,该第二交易输出将fs转移到会议110的cpk。区块链网络的节点(包括会议110的成员节点,也可能包括非成员节点)可以验证此交易,并且挖矿节点(不必是会议110的成员)可以挖掘经验证的交易以将其存储在区块链网络100的区块链中。

在操作749,耗用交易ts被认为是无效的,会议110可以采取步骤没收在预耗用交易tsp中引用并且被会议公钥cpk锁定的交易保证金金额dt*f,并将该交易保证金金额dt*f分配给会议110的成员。这可能涉及将交易保证金金额dt*f中的份额转移到会议110的成员的交易,其中每个交易都包含交易输入,该交易输入指的是预耗用交易tsp,该预耗用交易tsp的输出将交易保证金金额dt*f转移到会议110的cpk。交易输入还包括解锁脚本(例如scriptsig),该脚本包括从会议私钥x(利用他们的私钥份额xi)派生的会议生成的签名。该解锁脚本释放了对先前交易中在cpk下锁定的交易保证金金额dt*f的锁定。区块链网络的节点(可以包括会议的成员节点和非成员节点)可以验证这些交易,并且一个或多个挖矿节点(不必是会议的成员)可以挖掘经验证的交易以将其存储在区块链网络100的区块链中。

在替代实施例中,筹资交易tf可以指定资金f由会议公钥cpk(而不是如上所述的公钥y)锁定,并且因此可以由使用会议私钥x合作签署交易的阈值数量的会议成员解锁(通过使用其私钥份额xi)。在这种情况下,已签名耗用交易ts包括公钥y,会议110的成员可以使用公钥y来操作证实已签名耗用交易ts的签署签名σs。因此,在该实施例中,仅会议成员需要针对公钥y来证实已签名耗用交易ts的签名σs(参见743'至751')。如果阈值数量的会议110的成员使用公钥y成功证实了已签名耗用交易ts的签署签名σs,则会议的成员将使用会议私钥x(通过利用他们的私钥份额xi)合作构建并签署二级耗用交易。二级耗用交易可以从耗用交易ts复制,但是具有用于交易输入的解锁脚本(例如scriptsig),该交易输入指的是请求者的筹资交易tf锁定的资金f,其中该解锁脚本包括从会议私钥x派生的由会议生成的签名。该解锁脚本释放了对筹资交易tf中在cpk下锁定的资金f的锁定。还要注意,在该实施例中,由预耗用交易tps转移的交易保证金金额dt*f被锁定在会议110的cpk之下。在该实施例中,可以修改耗用阶段的操作,如图8a和8b所示。

在操作735',请求者(alice)使用密码pw和从阈值数量的会议成员那里接收的数量σs,i生成签署签名σs。将私钥份额xi分配给会议成员时,可以在初始化阶段确定会议成员的阈值数量。在实施例中,签署签名σs可以生成为

在操作737',请求者(alice)将签名σs作为耗用交易ts的一部分(其最初在701中生成)。

在操作739',请求者(alice)将耗用交易ts(包括签署签名σs)广播到区块链网络100,从而将耗用交易ts传送给会议110的成员。

在操作741',会议110的成员使用包含在耗用交易ts中的公钥y来处理耗用交易ts以证实耗用交易ts的签署签名σs。这样的证实可以使用包括在筹资交易tf中的生成器函数g和数字签名方案的映射函数e。例如,当且仅当e(g,σ)=e(y,h(ts))时,这样的证实才能接受耗用交易ts的签署签名σs。

在操作743',会议110的成员使用在741'中执行的公钥y独自评估耗用交易ts的签署签名σs的证实。如果耗用交易ts的签名σs的证实失败,则操作继续到745'。否则(对于耗用交易ts的签署签名σs的证实成功的情况),操作继续到747'至755'。

在操作745',耗用交易ts被认为是无效的,会议110可以采取步骤没收由预耗用交易tsp指定并锁定在会议公钥cpk下的交易保证金金额dt*f,并将交易保证金金额dt*f分配给会议110的成员。这可能涉及将交易保证金金额dt*f中的份额转移给会议110的成员的交易,其中每个交易都包含交易输入,该交易输入指的是锁定在会议公钥cpk下的预耗用交易tsp的交易输出。该交易输入还包括解锁脚本(例如,scriptsig),该解锁脚本包括从会议私钥x(利用其私钥份额xi)派生的由会议生成的签名。该解锁脚本释放对预耗用交易tsp中在会议公钥cpk下锁定的交易保证金金额dt*f的锁定。区块链网络的节点(可以包括会议的成员节点和非成员节点)可以验证这些交易,并且一个或多个挖矿节点(不必是会议的成员)可以挖掘经验证的交易以将其存储在区块链网络100的区块链中。

在操作747',挖矿节点(不必是会议110的成员)可以挖掘耗用交易ts以将其存储在区块链网络100的区块链中。

在操作749',会议110的成员(没有其他非成员节点)使用会议私钥x(利用他们的私钥份额xi)合作生成耗用交易ts的签名。

在操作751',会议110的成员(没有其他非成员节点)通过复制耗用交易ts来构造二级耗用交易。749'中的会议生成的签名包括在二级耗用交易中,以释放对筹资交易tf中指定的cpk下的资金f的锁定。

在操作753',区块链网络的节点(包括会议110的成员节点,也可能包括非成员节点)验证二次耗用交易,并且挖矿节点(不必是会议110的成员)可以挖掘经验证的二次耗用交易以将其存储在区块链网络100的区块链中。

在操作755',会议110的成员可以采取步骤将由预耗用交易tsp指定并锁定在会议公钥cpk下的金额(dt*f–fs)转移到公钥pk',并将耗用费用fs转移给会议110的成员。这可能涉及到会议110生成具有第一交易输入和第一交易输出的交易,第一交易输入指的是在会议公钥cpk下锁定的预耗用交易tsp的交易输出且具有解锁脚本(即scriptsig)的,该解锁脚本包括749'中由会议生成的签名(其释放cpk下的锁定);并且该第一交易输出将金额(dt*f–fs)转移到公钥pk'。该交易还可以包括第二交易输入和第二交易输出,该第二交易输入指的是在会议公钥cpk下锁定的预耗用交易tsp的交易输出且具有解锁脚本(例如scriptsig),该解锁脚本包括749'中会议生成的签名(解除cpk下的锁定);该第二交易输出将fs转移到会议110的cpk。区块链网络的节点(包括会议110的成员节点,也可能包括非成员节点)可以验证此交易,并且挖矿节点(不必是会议110的成员)可以挖掘经验证的交易以将其存储在区块链网络100的区块链中。

注意,不是会议110的成员的区块链网络100的节点不参与使用741'和743'中的公钥y来证实耗用交易ts的耗用签名σs。这与图7a-7d的实施例的操作741和743不同,其中会议110的成员以及非成员节点可以参与验证耗用交易ts。

注意,图7a-7d的实施例对于大型会议是有效率的,因为它不需要会议110使用会议私钥x(利用其私钥份额xi)为耗用交易ts生成签名,并针对相应筹资交易tf的cpk来验证该签名。然而,图8a–8b的实施例的优点是可以通过“二层”协议实现。例如,它可以在比特币区块链网络上实现,而无需修改比特币共识规则。

本文所述的改进的数字签名方案的安全性是密码pw的长度和dt的函数。在初始化阶段,选择g∶=h(pk),其中账户(费用fi转是从该账户转出的)的公钥中pk意味着g对于请求者而言将是唯一的,因为(我们假设)只有请求者具有对应于pk的私钥,这是授权转让费用fi所必需的。

考虑以下攻击:对手想耗用一些资金f,而无需知晓相应的密码pw。对手将广播预耗用交易tps,其将所需的保证金dt*f转移到会议公钥cpk,并指定他们持有私钥的公钥pk。预耗用交易tps还指定h(ts),其中ts将资金耗用在自己身上。对手将从会议收到但是,由于对手不知道密码pw,因此必须通过反复猜测pw来构造σ。每次pw猜测失败,对手都会损失dt*f。假设dt=1/25,如果密码pw由两位数字的“pin”组成,则平均需要进行50次尝试才能正确猜出,这需要耗用2f(账户中资金的两倍)。因此,从经济角度来看,这种攻击是不可行的。

在其他实施例中,请求者可以指定用于转移由筹资交易锁定的数字资产的其他选项,例如使用请求者持有的私钥s进行签名的“常规方法”。在这种情况下,请求者可能更喜欢使用常规方法进行交易,因为它比使用密码便宜(因为它不需要向会议支付任何费用)。在这种情况下,仅在请求者丢失私钥s时,才会使用基于请求者选择的密码进行的预耗用交易和耗用交易的交易处理。

在其他实施例中,不管交易的各个签名的证实是否成功,都可以挖掘如本文所述的一个或多个交易以存储在区块链上。

尽管上述示例已提及某些工作量证明区块链网络(例如比特币区块链网络),但本文描述的方法也可以与其他类型的工作量证明区块链网络以及可能的其他权益区块链网络一起使用。

通常将上述方法描述为在节点处执行,但是该方法的特征依赖于与其他节点的协作并且可以在其他地方执行。

应当说明,上述实施例说明而非限制本发明,在不脱离本发明的由所附权利要求限定的范围的情况下,本领域技术人员将能够设计出许多替代性实施例。在权利要求中,括号中的任何附图标记不应解释为对权利要求的限制。词语“包括(comprising)”和“包括(comprises)”等并非在整体上排除其他元件和步骤的存在,尽管这些元件和步骤并没有在任何权利要求或说明书中列出。在本说明书中,“包括(comprises)”意指“包括(includes)或由......组成(consistsof)”,“包括(comprises)”意指“包括(including)或由......组成(consistingof)”。元件的单数引用不意味着排除这些元件的复数引用,反之亦然。本发明可以借助包括若干不同元件的硬件,以及借助适当编程的计算机来实施。在列举了若干装置的设备权利要求中,这些装置中的若干个可以由硬件的同一个部件来体现。不争的事实是,在相互不同的从属权利要求中列举了某些方法,并不代表这些方法的结合不能获得有益效果。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1