在区块链网络上进行时间释放加密的计算机实现的系统和方法

摘要:

描述了一种计算机实现的方法,用于在区块链网络上生成公共加密密钥并允许在指定时间段之后访问相应的私有加密密钥。所述方法包括在所述区块链网络上的代理和客户之间构建数字时间锁合约,所述代理具有在所述区块链网络上的代理地址和相关联的代理签名,所述客户具有在所述区块链网络上的客户地址及相关联的客户签名。所述数字时间锁合约规定所述代理持有与所述区块链网络上的公共加密密钥相对应的所述私有加密密钥,然后在指定的时间窗口内释放所述加密私钥到所述区块链网络。所述代理提供第一加密资产,用于持有并随后在所述指定的时间窗口内释放所述加密私钥到所述区块链网络,当所述加密私钥在所述指定的时间窗口内释放到所述区块链网络时,所述第一加密资产可转移到所述区块链网络上的代理地址。所述客户向所述代理提供第二加密资产,用于持有并随后在所述指定的时间窗口内释放所述加密私钥到所述区块链网络,当所述加密私钥在所述指定的时间窗口内释放到所述区块链网络时,所述第二加密资产可转移到所述区块链网络上的代理地址。如果在所述时间窗口打开之前释放所述加密私钥,则所述第二加密资产可转移到所述区块链网络上的客户地址。如果在所述时间窗口关闭之前没有释放所述加密私钥,则所述第二加密资产可转移到所述区块链网络上的客户地址。所述数字时间锁合约可以广播到所述区块链网络,以挖掘到所述区块链上。

申请号: CN201880040787.0 专利名称: 在区块链网络上进行时间释放加密的计算机实现的系统和方法 申请(专利权)人: [区块链控股有限公司] 发明人: [托马斯·特雷维坦] 其他信息:
1.一种计算机实现的方法,用于在区块链网络上生成公共加密密钥并允许在指定时间段之后访问相应的私有加密密钥,所述方法包括: 构建区块链事务,所述区块链事务用作在所述区块链网络上的代理和客户之间的数字时间锁合约,所述代理具有在所述区块链网络上的代理地址和相关联的代理签名,所述客户具有在所述区块链网络上的客户地址及相关联的客户签名,所述构建区块链事务是通过如下步骤进行的: 根据所述加密私钥或所述加密私钥的份额来计算时间锁谜题值,和 使用所述私钥的散列和所述时间锁谜题值的散列来创建区块链事务; 所述数字时间锁合约规定: (i)所述代理持有与所述区块链网络上的公共加密密钥相对应的所述私有加密密钥,然后在指定的时间窗口内释放所述加密私钥到所述区块链网络; (ii)所述代理提供第一加密资产,用于持有并随后在所述指定的时间窗口内释放所述加密私钥到所述区块链网络,当所述加密私钥在所述指定的时间窗口内释放到所述区块链网络时,所述第一加密资产可转移到所述区块链网络上的代理地址; (iii)所述客户向所述代理提供第二加密资产,用于持有并随后在所述指定的时间窗口内释放所述加密私钥到所述区块链网络,当所述加密私钥在所述指定的时间窗口内释放到所述区块链网络时,所述第二加密资产可转移到所述区块链网络上的代理地址; (iv)如果在所述时间窗口打开之前释放所述加密私钥,则所述第二加密资产可转移到所述区块链网络上的客户地址; (v)如果在所述时间窗口关闭之前没有释放所述加密私钥,则所述第二加密资产可转移到所述区块链网络上的客户地址。 2.根据权利要求1所述的计算机实现的方法, 其中,在步骤(iv)中,所述客户或任何其他人可以使用所述私钥来获取所述代理的第一加密资产。 3.根据权利要求1或2所述的计算机实现的方法, 其中,在步骤(v)中,所述第一加密资产也可转移到所述区块链网络上的客户地址。 4.根据权利要求1所述的计算机实现的方法, 其中,所述计算机实现的方法由所述客户发送表示希望建立所述数字时间锁合约的请求来发起。 5.根据权利要求4所述的计算机实现的方法, 其中,所述客户指定所述第二加密资产和所述时间窗口。 6.根据权利要求1所述的计算机实现的方法, 其中,所述代理构建所述加密公钥和加密私钥对。 7.根据权利要求1所述的计算机实现的方法, 其中,所述代理构建所述数字时间锁合约。 8.根据权利要求1所述的计算机实现的方法, 其中,所述数字时间锁合约在被挖掘到所述区块链中之后激活,并且所述加密公钥可公开用于加密数据,所述数据在释放所述加密私钥之前无法解密。 9.根据权利要求1所述的计算机实现的方法, 其中,所述时间窗口指定为所述时间窗口打开的时间t和所述时间窗口关闭之后的时间段Δt。 10.根据权利要求9所述的计算机实现的方法, 其中,所述第二加密资产可使用所述加密私钥、所述时间锁谜题值、和所述客户签名在任何时间转移到所述客户地址。 11.根据权利要求9所述的计算机实现的方法, 其中,所述第二加密资产可在所述时间t之后使用所述加密私钥和所述代理签名转移到所述代理地址。 12.根据权利要求9所述的计算机实现的方法, 其中,所述第二加密资产可在时间t+Δt之后使用所述客户签名转移到所述客户地址。 13.根据权利要求9所述的计算机实现的方法, 其中,通过提供所述加密私钥和所述时间锁谜题值,所述第一加密资产可在任何时间转移到任何地址。 14.根据权利要求9所述的计算机实现的方法, 其中,所述第一加密资产可在所述时间t之后使用所述加密私钥和所述代理签名转移到所述代理地址。 15.根据权利要求9所述的计算机实现的方法, 其中,所述第一加密资产可在时间t+Δt之后使用所述客户签名转移到所述客户地址。 16.根据权利要求1所述的计算机实现的方法, 其中,所述代理与多个所述客户签订多个所述数字时间锁合约。 17.根据权利要求1所述的计算机实现的方法, 其中,所述代理是持有所述私钥的单个代理。 18.根据权利要求1所述的计算机实现的方法, 其中,所述代理包括多个,每个代理都持有所述加密私钥份额, 所述加密私钥的推导受所述多个代理提供的私钥份额的阈值的影响,和 所述第一加密资产和所述第二加密资产在所述代理之间分割。 19.根据权利要求1所述的计算机实现的方法, 其中,所述客户基于所述数字时间锁合约向多个终端用户提供服务。 20.根据权利要求19所述的计算机实现的方法, 其中,所述服务是以下一项或多项:密封式拍卖;密钥托管方案;投票方案;机密数据的定时释放。 21.一种计算机可读存储介质,包括计算机可执行指令,所述计算机可执行指令在被执行时,使处理器用于执行权利要求1至20中任一项所述的方法。 22.一种电子设备,包括: 接口设备; 处理器,连接到所述接口设备; 存储器,连接到所述处理器,所述存储器上存储计算机可执行指令,所述计算机可执行指令在被执行时,使所述处理器用于执行权利要求1至20中任一项所述的方法。

在区块链网络上进行时间释放加密的计算机实现的系统和方法

技术领域

本说明书主要涉及用于时间释放加密的数字时间锁合约。

背景技术

在本文中,使用术语“区块链”来包括所有形式的电子的、基于计算机的分布式账本,包括但不限于区块链和事务链技术、许可及未许可的账本、共享账本及其变型。应当指出的是,本发明不限于与特定区块链一起使用,其他的区块链实施方式和协议也落入本发明的范围内。

区块链是基于共识的电子账本,该账本被实现为由区块组成的基于计算机的去中心化、分布式系统,而区块由事务(transaction)和其他信息组成。就一些区块链而言,每个事务是对区块链系统中参与者之间的数字资产的控制的转移进行编码的数据结构,并且包括至少一个输入和至少一个输出。每个区块包含前一区块的散列,如此,这些区块被链接在一起,以创建一个永久的、不可更改的所有事务的记录,这些事务自区块链诞生之始写入区块链。事务包含小程序,这些小程序称为脚本,嵌入至所述事务的输入和输出中,这些小程序指定了如何以及由谁来访问事务的输出。在一些平台上,这些脚本是使用基于堆栈的脚本语言编写的。

为了将事务写入区块链,必须对该事务进行“验证”。一些网络节点执行工作以确保每个事务有效,无效事务则被网络拒绝。例如,安装在所述节点上的软件客户在引用未花费的事务输出(Unspent Transaction Outputs,简称UTXO)的事务上执行验证工作。可通过执行其锁定和解锁脚本来执行验证。如果锁定和解锁脚本的执行评估为真(TRUE),并且如果满足某些特定条件,则该事务有效,可将该事务写入区块链。因此,为了将事务写入区块链,该事务必须:i)由接收事务的节点进行验证——如果事务经验证通过,则该节点将该事务中继到网络中的其他节点;ii)添加到新区块中;iii)被挖掘,即添加到过去事务的公共账本中。当向区块链添加充分数量的区块以使事务实际上不可逆转时,事务被视为已确认。

数字企业家已经开始探索使用加密安全系统、以及可存储在区块链上的数据来实现新系统。如果区块链能够用于自动化任务和过程,那么将是非常有利的。这类解决方案将能够利用区块链的优势(例如,事件的永久防篡改记录、分布式处理等),同时在所述解决方案的应用中更具通用性。

研究的领域之一是使用区块链来实现“智能合约”。这些智能合约是旨在自动执行机器可读合约或协议条款的计算机程序。与用自然语言编写的传统合约不同,智能合约是一种机器可执行程序,包括可处理输入以产生结果的规则,智能合约可根据这些结果执行操作。

与区块链相关的另一领域是使用“通证”通过区块链来表示和转移现实世界的实体。潜在的敏感或秘密物品可以由没有明显意义或价值的通证来表示。因此,通证充当标识符,允许从区块链引用现实世界的物品。

如前所述,本说明书主要涉及用于时间释放加密的数字时间锁合约。时间释放加密的基本目的是,消息可以在当前时间进行加密,但在未来某个特定时间之前,任何人都不能解密。这实际上是一种“将消息发送到未来”或把信息放入“时间囊”的方式。这种功能有许多可能的应用,包括:

·密封式拍卖(Sealed Bid Auctions)

·密钥托管方案

·无收据投票

·机密数据的定时释放

·政治敏感信息的“死人开关”(“Dead Man’s Switch”)

瑞文斯特(Rivest)、沙米尔(Shamir)和瓦格纳(Wagner)在1996年的第一篇详细论文[Rivest 1996]中概述了实现时间释放加密系统的两种通用方法。所述两种方法是:

1.“时间锁谜题”的使用——信息的加密需要费时的计算工作才能解密。

2.使用可信代理,所述代理承诺在未来特定时间之前不会泄露秘密信息。

其中第一种方法不需要第三方参与,但是存在两个严重且不可避免的弊端:首先,由于计算硬件的性能差异和未知的未来技术创新,不可能高精度地预测解决特定谜题所需的时间。其次,执行解密的一方必须在整个时间锁期间执行连续且昂贵的计算工作。

第二种方法可能在释放的时机上既准确又精确,并且不需要任何一方执行昂贵的计算。但是,它确实依赖于第三方代理,该代理必须可信以在正确的时间释放正确的密钥。代理的可信度至关重要——除非能够有效激励代理正确执行操作。

与区块链网络上的时间锁加密相关的背景信息总结如下。

“以太坊闹钟”(“Ethereum Alarm Clock”)规定,用户在提供保证金后,可以在预定的时间段内执行事务。例如,参见URL网址:docs.ethereum-alarm-clock.com/en/latest/claiming.html#claim-deposit;和https://github.com/pipermerriam/ethereum-alarm-clock/commits/master/docs/claiming.rst。这允许在以后的某个时间和特定的时间窗口内安排事件。此外,如果未在特定的时间窗口内执行,则执行者可以赢回保证金,也可以将其没收。服务还包括付款,该付款支付给在所述预定时间执行事务的帐户。

《μ链:没有硬叉如何忘记》(“μchain:How to Forget without HardForks”)(网址:https://eprint.iacr.org/2017/106.pdf)公开了时间锁加密的示例。在公开的用例中,用户对机密文件进行加密。解密者可以通过向智能合约发送事务来请求访问解密密钥,该智能合约触发功能来检查是否已超过了截止期限t。如果时间合适,则解密者获取密钥。建议系统可以提供更高级的功能,例如只有在特定时间窗口内请求时才提供解密密钥。

一些文章表明,提供一种有吸引力的方式来构建定时承诺的版本,其中承诺者必须在一定的时间框架内泄露其秘密或支付罚款。如果游戏因参与者行为不诚实而提前终止,则没收参与者提供的保证金。

US2016086175公开了一种用于访问资产的区块链系统。房间具有私有/公共密钥对,以及希望在一定时间内租用房间的用户向其存入存款的地址;此类数据包括在事务中。时间合适时,锁会打开,允许用户进入房间。用户向房间提供者支付费用,以获得房间的使用权,如果在所需时间内房间不可用,则退还该费用。

发明内容

本说明书描述了一种能够通过无许可的公共区块链来保护时间释放加密服务的系统和方法。所述服务生成公钥,然后在所述服务的客户指定的未来时间释放相应的私钥。这项服务的安全性和可靠性源自新型智能合约系统,激励在正确的时间释放所述私钥,并惩罚密钥的提前或延迟释放或泄漏。所述服务设计为无信任的:所述客户不能访问私钥,但是它们仅为所述服务提供加密资产,并保证在所述合约中指定的时间在区块链上显示正确的值。在一个示例中,这通过零知识证明与事务输出的时间锁定和散列锁定相结合来实现。

根据本发明的第一方面,提供了一种用于在区块链网络上生成公共加密密钥并允许在指定时间段之后访问相应的私有加密密钥的计算机实现的方法,所述方法包括以下之一或两者:

在所述区块链网络上的代理和客户之间构建数字时间锁合约,所述代理具有在所述区块链网络上的代理地址和相关联的代理签名,所述客户具有在所述区块链网络上的客户地址及相关联的客户签名,所述数字时间锁合约规定:

(i)所述代理持有与所述区块链网络上的公共加密密钥相对应的所述私有加密密钥,然后在指定的时间窗口内释放所述加密私钥到所述区块链网络;

(ii)所述代理提供第一加密资产(例如保证金),用于持有并随后在所述指定的时间窗口内释放所述加密私钥到所述区块链网络,当所述加密私钥在所述指定的时间窗口内释放到所述区块链网络时,所述第一加密资产可转移到所述区块链网络上的代理地址;

(iii)所述客户向所述代理提供第二加密资产(例如费用),用于持有并随后在所述指定的时间窗口内释放所述加密私钥到所述区块链网络,当所述加密私钥在所述指定的时间窗口内释放到所述区块链网络时,所述第二加密资产可转移到所述区块链网络上的代理地址;

(iv)如果在所述时间窗口打开之前释放所述加密私钥,则所述第二加密资产可转移到所述区块链网络上的客户地址(所述客户或任何其他人可以使用所述私钥来获取所述代理的第一加密资产);

(v)如果在所述时间窗口关闭之前没有释放所述加密私钥,则所述第二加密资产可转移到所述区块链网络上的客户地址(所述第一加密资产也可转移到所述区块链网络上的客户地址);和

将所述数字时间锁合约广播到所述区块链网络,以挖掘到所述区块链上。

构建所述数字时间锁合约和广播所述合约的步骤可以由同一实体执行。然而,也可以设想这些步骤可以由不同的实体来执行。因此,上述定义指定了任何单个实体所需步骤中的一个或两个。

应当注意的是,本文所述的发明不仅是提供一种区块链实现的时间锁合约作为更好的开展业务的方式。本发明的出发点是使用已知加密方法实现时间锁合约。然而,这些现有技术系统具有技术问题。现有技术方法的技术问题在于它们要么不安全,要么难以使用并且可能需要大量计算。这些问题本质上是技术性的。本发明提供了一种既安全又易于使用并且计算效率高的解决方案。也就是说,本发明就提供一种结合安全性和低计算开销以用于以无信任的方式实现时间锁合约的系统而言,提供了一种更好的计算机系统。提供安全性、易用性和计算效率的组合是本发明的技术贡献。

所述计算机实现的方法可以由所述客户发送表示希望建立所述数字时间锁合约的请求来发起。所述客户可以指定所述第二加密资产和所述时间窗口。所述代理可以构建所述加密公钥和加密私钥对。所述代理还可以构建所述数字时间锁合约。所述数字时间锁合约在被挖掘到所述区块链上之后激活,并且所述加密公钥可公开用于加密数据,所述数据在释放所述加密私钥之前无法解密。

所述时间窗口可以指定为所述时间窗口打开的时间t和所述时间窗口关闭之后的时间段Δt。可以构建所述数字时间锁合约,以便可以进行以下一种或多种转移:所述第二加密资产可使用所述加密私钥、可从所述加密私钥推导的时间锁谜题值和所述客户签名在任何时间转移到所述客户地址;所述第二加密资产可在所述时间t之后使用所述加密私钥和所述代理签名转移到所述代理地址;所述第二加密资产可在时间t+Δt之后使用所述客户签名转移到所述客户地址;通过提供所述加密私钥和可从所述加密私钥推导的时间锁谜题值,所述第一加密资产可在任何时间转移到任何地址;所述第一加密资产可在所述时间t之后使用所述加密私钥和所述代理签名转移到所述代理地址;所述第一加密资产可在时间t+Δt之后使用所述客户签名转移到所述客户地址。

鉴于以上所述,一种用于在区块链网络上生成公共加密密钥并允许在指定时间段之后访问相应的私有加密密钥的计算机实现的方法的另一定义包括以下之一或两者:

在所述区块链网络上的代理和客户之间构建数字时间锁合约,所述代理具有在所述区块链网络上的代理地址和相关联的代理签名,所述客户具有在所述区块链网络上的客户地址及相关联的客户签名,所述数字时间锁合约规定:

来自所述代理的第一加密资产(例如保证金);

来自所述客户的第二加密资产(例如费用);

加密公钥;和

时间窗口,代理应该在所述时间窗口内释放对应于所述加密公钥的加密私钥,且所述时间窗口由时间窗口打开的时间t和时间窗口关闭的时间段Δt定义,

其中,构造所述数字时间锁合约以便可以进行以下转移:

所述第二加密资产可使用所述加密私钥、可从所述加密私钥推导的时间锁谜题值和所述客户签名在任何时间转移到所述客户地址;

所述第二加密资产可在所述时间t之后使用所述加密私钥和所述代理签名转移到所述代理地址;

所述第二加密资产可在时间t+Δt之后使用所述客户签名转移到所述客户地址;

通过提供所述加密私钥和可从所述加密私钥推导的时间锁谜题值,所述第一加密资产可在任何时间转移到任何地址;

所述第一加密资产可在所述时间t之后使用所述加密私钥和所述代理签名转移到所述代理地址;和

所述第一加密资产可在时间t+Δt之后使用所述客户签名转移到所述客户地址,

和将所述数字时间锁合约广播到所述区块链网络,以挖掘到所述区块链上。

所述代理可以与多个所述客户签订多个所述数字时间锁合约。所述代理可以是持有所述私钥的单个代理。或者,所述代理可以包括多个每个都持有所述加密私钥的份额的代理。在这种情况下,所述加密私钥的推导受所述多个代理提供的私钥份额的阈值的影响。所述第一加密资产和所述第二加密资产在所述代理之间分割。通过将核心协议扩展到一组具有单独合约的独立服务提供商,并使用无分配者秘密共享(m-of-n)阈值方案来分配所述私钥的时间释放,可以使服务的安全性和可靠性更加强大,从而承受子阈值数量的功能失调的服务提供商。我们描述了一个扩展的零知识证明系统,所述系统使客户能够证明对应于共享公钥的私钥份额将在支付任何费用之前被释放以解锁合约。

所述客户可以基于所述数字时间锁合约向多个终端用户提供服务。例如,所述服务可以是以下一项或多项:密封式拍卖;密钥托管方案;投票方案;机密数据的定时释放。

本文所述的计算机实现的方法可以通过提供一种计算机可读存储介质来实现,所述计算机可读存储介质包括计算机可执行指令,所述计算机可执行指令在被执行时,使处理器用于执行本文所述的方法。此外,可以提供一种电子设备包括:接口设备;处理器,连接到所述接口设备;存储器,连接到所述处理器,所述存储器上存储计算机可执行指令,所述计算机可执行指令在被执行时,使所述处理器用于执行本文所述的方法。

本文所述的本发明不同于下文背景技术部分讨论的现有技术。

以太坊闹钟系统与目前描述的系统显著不同,因为它没有公开代理持有与公钥相关的私有加密密钥,并随后在指定的时间窗口内释放私钥,其中提供数字合约来管理该系统,以确保所述代理在正确的时间释放所述私有加密密钥。此外,现有技术的系统在指定的时间内不启用公钥的使用,在该时间内,与所述使用相关联的数据被加密,然后释放私钥使得能够解密与所述使用相关联的数据。

《μ链:没有硬叉如何忘记》中描述的系统似乎也与目前描述的系统显著不同,因为它没有公开代理持有与公钥相关的私有加密密钥,并随后在指定的时间窗口内释放私钥,其中提供数字合约来管理该系统,以确保所述代理在正确的时间释放所述私有加密密钥。现有技术的系统似乎在指定的时间内不启用公钥的使用,在该时间内,与所述使用相关联的数据被加密,然后释放私钥使得能够解密与所述使用相关联的数据,其中所述私钥的释放受确保其在正确时间释放的规定的约束。相反,在μ链文档中,解密密钥由系统用户生成,而不是由代理生成。也就是说,用户保持对解密密钥的释放的控制,因此系统依赖于信任所述用户。因此,所述用户可以轻易破坏安全性。

类似地,US2016086175也描述了与目前描述的系统显著不同的系统,因为它们没有公开代理持有与公钥相关的私有加密密钥,并随后在指定的时间窗口内释放私钥,其中提供数字合约来管理该系统,以确保所述代理在正确的时间释放所述私有加密密钥。

附图说明

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

图1示出了初始化协议的流程图,所述初始化协议用于在建立客户与代理之间的通信通道后在所述客户与所述代理之间建立数字时间锁合约;

图2示出了用于在客户和代理之间构建数字时间锁合约的事务脚本的示例;

图3示出了数字时间锁合约的示意性时间线以及取决于时间段的输出目的地;和

图4示出了多代理协议的示意图。

具体实施方式

一些区块链的出现引出了一个系统,在该系统中,既有对当前时间(如区块头中所记录的)的分布式全局共识,也有合约(脚本)的无信任、自动执行。这些独特的功能可用于实现安全可靠的时间释放加密服务。在本说明书中,我们描述了一种用于时间释放加密服务的系统,该系统结合了一些区块链的基于脚本的智能合约和不依赖于对服务提供商的完全信任的零知识证明。此外,我们展示了如何使用无分配者阈值方案来扩展协议,以便在单个密钥释放中使用多个代理,从而通过去中心化提高服务的弹性和安全性。

某些配置采用知识的零知识证明(Zero-Knowledge Proofs,简称ZKP)的概念,使协议完全不可信。有两种技术可以用作该方案的一部分:非交互式证明(Non-InteractiveProofs);和分割并选择(Cut-and-Choose)。

非交互式零知识(Non-Interactive Zero-Knowledge,简称NIZK)证明对于本应用是优选的,因为它们最小化所涉及的各方之间所需的通信,但是实现起来可能复杂并且计算昂贵。形式上,NIZK证明可以直接从证明者提供给验证者,而无需交互,但是在这种情况下,它们需要可信的设置(σ)。在本申请中,验证者可以执行可信设置,然后将其发送给证明者,然后证明者计算证明(π),并将其发送回验证者。

在第一个应用中,我们需要零知识证明,即散列的预映射(提供给验证者)等于对应于椭圆曲线公钥(也提供给验证者)的私钥。这个特别的NIZK的数学结构在[Fuchsbauer2008]中详细描述。该NIZK证明可以用零知识简洁的非交互式知识论证(zero knowledgeSuccinct Non-interactive Argument of Knowledge,简称zk-SNARKS)[Lundkvist 2017]来实现。

在使用扩展系统的第二个应用中,构建高效的NIZK证明具有挑战性。在这种情况下,可以使用称为“分割并选择”的ZKP的简化的交互类型[Crepeau 2011]。在这种方法中,证明者向验证者提供对不同声明的大量承诺。验证者随机选择这些承诺的子集,并要求证明者发送知识以证明它们。当该声明的子集显示为真时,验证者就知道其余声明也为真的概率。

某些配置使用一些区块链的事务脚本的几个标准功能来实现输出的时间锁定以及散列锁的使用。

可以构造一些区块链的输出,使得解锁脚本需要提供散列到指定值(例如使用HASH256操作码)的秘密。也就是说,要花费输出,输入必须提供散列到输出中指定的另一个值的值[Maxwell 2016]。

还可以构造输出,使得其在将来某个预先指定的点之前无法花费。这是使用检查锁定时间验证(CHECKLOCKTIMEVERIFY,简称CLTV)操作码实现的,该操作码可用于防止花费事务,直到达到指定的unix时间戳(Unix Epoch Time)或指定的区块高度为止[Todd2014]。

为了确保智能合约结构的安全,使用了简短时间锁谜题的新型应用来防止“竞争攻击”。可以使用连续平方的时间锁谜题[Rivest 1996],这需要微不足道的计算工作来建立(锁定输出)。对于不具备建立参数的第二方,必须在输入上执行设定数量的串行计算(花费一定的时间)以解锁谜题并显示输出值。

在通过可信代理进行的时间释放加密方案的一种配置中,该代理(使用公钥加密系统)创建公钥-私钥对,并释放该公钥供客户用来加密信息,然后将所述信息发送给接收者。然后,在约定的时间(由代理确定),代理将私钥释放给接收者以解密信息。在这种情况下,代理需要完全可信才能执行此操作,并保持私钥的安全。

拉宾(Rabin)和索普(Thorpe)[Rabin 2006]提出了一种通过在一组多少可信代理之间分配密钥生成来增强该配置的安全性和容错性的系统,这样,即使某些参与方不诚实或受到损害,在阈值数量的代理同意释放密钥的正确时间之前,它们中的任何一方都无法获知完整的私钥。

在这个系统中,一组联网的代理(n)使用无分配者的阈值(m-of-n)秘密共享方案进行协作,以生成共享私钥和相应的共享公钥,然后将相应的共享公钥释放给客户(客户然后可以加密消息)。只有当阈值数量(m)个代理同意已经达到释放密钥的时间时,才能重建全私钥并将其发送给接收者。

沙米尔(Shamir)的秘密共享方案(Shamir's Secret Sharing Scheme,简称SSSS)[Shamir 1979]基于t次多项式可以适用于任意t+1个点集的概念。以共享私钥作为常数项(a0=f(0))形成t次多项式f(x),随机选取其余系数。曲线上的n个点随后提供给每个参与者。如果m=t+1或更多参与者合并它们的点,则有足够的信息来拟合这些点的t阶多项式,并且a0作为秘密被揭露。该方案能够在任意数量的、具有任意阈值的参与方之间共享单个私钥。

可以扩展标准SSSS,以消除可信的分配者创建多项式和分配秘密份额的要求(这是一个单点故障,因此不是不可信的)。在该无分配者SSSS中,每个参与者Pi生成自己的随机t次多项式fi(x),然后安全地发送fi(j)给其他参与者Pj。每个Pi对所有接收到的点f1(i)+f2(i)+…+fn(i)求和,以获得它们的秘密份额si=f(i),这就是共享多项式f(x)上的Pi点。

创建秘密份额后,与共享私钥(没有参与者知道)相对应的公钥的计算如下(使用椭圆曲线生成器G):

参与者Pi,其中i=1,…,t+1,将其公钥份额计算为bisi×G,其中

然后广播这些公钥份额,所述共享公钥A简单地计算为t+1个份额的总和:

单个代理协议

本节描述了单个代理提供时间释放加密服务的情况下的配置。该协议针对特定区块链事务及其本地脚本语言(脚本)(Script)进行描述,不失通用性,但适用于任何具有公共区块链和等效脚本功能的系统。

所述协议直接涉及两方:

·客户指定所需的时间锁加密服务的参数,并为此支付费用(F)。客户控制地址CAddr。

·代理执行所述时间锁加密服务,并在成功完成后收取费用。代理提供保证金(D),如果服务执行不正确,则保证金将被没收。代理控制地址AAddr。

图1示出了初始化协议的流程图,所述初始化协议用于在建立客户与代理之间的通信通道后在所述客户与所述代理之间建立数字时间锁合约。所述建立过程如下:

1.客户在公共论坛上发布对时间锁服务的请求。该请求包括客户地址(CAddr)、它们愿意支付的费用(F)、要求释放密钥的时间(T)和所需的等待时间(Δt)。

2.希望执行该服务的代理与客户联系并建立安全的通信通道。客户发送用于支付费用的UTXO的事务ID。

3.代理安全地生成随机加密私钥(EPrivK)和相应的公钥(EPubK)。

4.代理计算值tlpEPrivK——来自EPrivK的时间锁谜题输出——需要大约1小时的串行计算才能从作为输入的EPrivK进行计算(典型的一些区块链事务确认时间)。

5.代理将EPubK、对应的私钥H(EPrivK)的SHA-256散列和H(tlpEPrivK)发送给客户。

6.客户执行NIZK证明设置:σ←Setup(1256),并将结果发送到代理。

7.代理构造H(EPrivK)的预映射是对应于EPubK的ECC私钥的证明π1←Prove(σ,H(EPrivK),EPubK),以及H(tlpEPrivK)的预映射是具有约1小时的时间锁谜题的H(EPrivK)的预映射的证明π2←Prove(σ,H(tlpEPrivK),H(EPrivK)),并将所述证明发送给客户。

8.客户验证两种证明:Verify(σ,H(EPrivK),π1)=true和Verify(σ,H(tlpEPrivK),π2)=true。

9.代理使用请求参数、加密私钥(EPrivK)的散列和tlpEPrivK的散列创建事务(Tx0),该事务充当时间锁加密智能合约。

Tx0有两个输入:客户费用(F)UTXO和代理保证金(D)UTXO。

Tx0有3个输出:费用金额的输出1、保证金金额的输出2和加密公钥元数据的输出3。

输出1:

使用EPrivK、tlpEPrivK和客户签名随时向客户地址支付(F)。

使用EPrivK和代理签名在时间T后向代理地址支付(F)。

使用客户签名在时间T+ΔT后向客户地址支付(F)。

输出2:

使用EPrivK和tlpEPrivK随时向任何地址支付(D)。

使用EPrivK和代理签名在时间T后向代理地址支付(D)。

使用客户签名在时间T+ΔT之后向客户地址支付(D)。

输出3:

OP_RETURN包含作为元数据的加密公钥(EPubK)。

图2示出了完整的事务结构。注意,为了清楚起见,图2中<…PubKey>替换为OP_DUPOP_HASH160<pubKeyHash>OP_EQUALVERIFY,其中公钥散列(pubKeyHash)等同于地址。输出1和2可以实现为P2SH(Pay-to-Script-Hash)脚本公钥,并将相应的赎回脚本发送给相关方和/或发布。

10.代理签署事务并将其发送给客户。

11.客户签署事务并将其广播到区块链网络。

12.一旦事务被挖掘到区块链中,时间锁合约就被激活。EPubK现在可公开用于加密任何数据,所述数据在EPrivK释放之前无法解密。

图3示出了数字时间锁合约的示意性时间线以及取决于时间段的输出目的地。该合约旨在确保代理在T到T+ΔT的时间间隔内释放加密私钥(EPrivK),以便索取费用和保证金。为此,代理创建两个事务:Tx1(花费Tx0输出1)和Tx2(花费Tx0输出2)。用于解锁所述输出的脚本签名都包含<EPrivK><AAddr Pubkey><AAddr Sig>。Tx1和Tx2向代理选择的地址支付F和D。一旦将这些事务挖掘到区块链中,EPrivK便会公开释放,任何人都可以使用。

为了阻止代理在时间t之前向任何人泄露EPrivK(可能是为了换取贿赂),该合约旨在让在时间T之前了解EPrivK的任何人都可以通过提供无签名的散列预映射(以及相应的时间锁谜题tlpEPrivK——参见下文的竞争攻击保护)来花费输出2,然后索取完整的代理保证金——该方被称为泄密者。一旦发生这种情况,客户还可以了解EPrivK,并且可以在时间T之前使用脚本签名<EPrivK><CAddr Pubkey><CAddr Sig>来花费输出1——收回代理费用。

这为代理提供了强有力的激励结构来保证EPrivK的安全。如果任何人(包括黑客)在时间T之前发现EPrivK,则它们可以匿名索取代理的保证金。如果代理在时间T之前作为泄密者索取保证金(或允许这样做),它们将被没收费用(所述费用退还给客户)。因此,费用和保证金的值的选择影响系统的安全性,并且应该适合于加密请求的原因。

该合约还旨在确保代理在时间T之后但在时间T+ΔT(其中ΔT是所需的延迟时间)之前释放加密密钥。在时间T+ΔT之后,如果未释放EPrivK,则客户可以解锁输出1和输出2(收回费用,并收取代理的保证金作为补偿)。在这种情况下,客户使用脚本签名<CAddrPubkey><CAddr Sig>创建两个事务:TxR1(花费Tx0输出1)和TxR2(花费输出2),并向客户选择的地址支付F和D。

一些区块链脚本语言的本质意味着,虽然可以防止输出在某个时间点之前被花费(使用OP_CHECKLOCKTIMEVERIFY),但是无法防止输出在某个时间点(在该时间点之前是可花费的)之后被花费。因此,一旦脚本签名生效,它将无限期地保持有效。这给输出2的锁定脚本带来了一个问题,即任何人都可以随时通过提供EPrivK来花费它,甚至在时间T之后甚至只需要H(EPrivK)的预映射。

这将导致对代理的“竞争双倍花费攻击”(“Race Double Spending Attack”):一旦代理正确地将Tx1和Tx2广播到区块链网络(在时间T之后),在它们位于内存池中时,可以从它们任何一个中提取EPrivK,并将它们自己的任何人都可以花费的事务包括在区块内(或者其他任何人都可以使用按费替换)以先花费输出2并窃取保证金。

本文实现的防止这种攻击的解决方案是对tlpEPrivK(来自EPrivK的时间锁谜题输出)与EpRivK一起提供的额外要求,以便随时解锁输出2。如果某人(泄密者)(Leaker)在时间T之前拥有EPrivK,则它们可以使用1小时的计算来私下确定tlpEPrivK,然后索取保证金(即解锁输出2)。如果当EPrivK嵌入Tx1和Tx2中、在内存池中等待被挖掘时,它们第一次(在时间T之后)获得EPrivK,则在它们导出tlpEPrivK(1小时的计算)时,花费输出2(Tx2)的代理事务将已经在区块链得到确认。防止竞争攻击的结果是,代理可以在时间T前1小时之内释放EPrivK,而不会有被没收保证金的风险,因为tlpEPrivK需要一个小时才能导出。这将“时间解决方案”或合约的准确性限制为1小时。

多代理协议

上述智能合约协议可以扩展到具有阈值私钥的多个代理的情况。在这种情况下,每个代理使用自己的保证金和单独的费用创建自己的Tx0版本。唯一的区别是私钥(EPrivK)散列和公钥(EPubK)分别被私钥份额的散列和共享公钥所替代。每个合约都是独立执行的,密钥份额在时间T后在区块链上显示。由于重建完整私钥需要密钥份额的阈值,因此系统可以容忍子阈值数量的功能失调的代理——为更关键和更重要的应用消除单点故障(单个代理)。该扩展协议所需的主要技术差异包括共享密钥的无分配者生成,以及多方零知识证明系统,该系统使代理组能够集体证明其私钥份额的散列的预映射对应于已发布的共享公钥。

多代理协议涉及以下参与者:

·客户,指定所需时间锁加密服务的参数并为此支付总费用(F)(在n个UTXOs中拆分)的,该客户控制地址CAddr。

·n个独立代理共同执行服务,如果他们正确执行协议,则每个代理将收取一小部分费用(F/n)。每个代理提供保证金(D),如果协议未正确执行,则被没收该保证金。每个代理(i=1,2,…,n)控制地址AAddri。

图4示出了多代理协议的示意图。建立过程如下:

1.客户在公共论坛上发布对时间锁服务的请求。该请求包括客户地址(CAddr)、他们愿意支付的费用(F)、他们要求释放密钥的时间(T)、所需的延迟(Δt)、所需的代理数量(n)和所需的阈值(m)。

2.n个希望执行该服务的代理联系客户并建立安全的通信通道。客户发送用于支付费用的UTXO的事务ID。

3.客户向所述代理组广播每个代理的联系方式,每个代理与所述组中的每个其他代理建立安全通信(通过公钥加密系统或Diffie-Hellman密钥交换)。

4.参与者集体执行阈值为m的无分配者秘密共享协议,生成共享秘密:EPrivK(加密私钥)。每个参与者(i=1,…,n)拥有密钥份额sEPrivKi。(EPrivK不为任何一方所知)。

5.n个参与者的组为每个私钥份额计算公钥份额,并将这些份额(sEPubKi)广播给组中的其他参与者。每个参与者可以独立计算相应的共享公钥:EPubK。

6.然后,每个代理(i=1,…,n)计算值tlpsEPrivKi——来自sEPrivKi的时间锁谜题输出,需要大约1小时的串行计算才能从作为输入的sEPrivKi进行计算。

7.每个代理(i=1,…,n)向客户发送EPubK、其对应的私钥份额H(sEPrivKi)的SHA-256散列和H(tlpsEPrivKi)。

8.代理组协作向客户提供零知识证明,即它们的私钥份额的散列的预映射可以用阈值m来重建对应于EPubK的私钥。为此开发NIZK证明是一项艰巨的任务,并且可能非常昂贵,但是可以相对有效地使用“切割并选择”方法。在这种情况下,n个代理的组多次(N=100至1000)重复步骤4至7。客户随机选择共享公钥之一,并请求该组显示其余N-1个公钥的私钥份额。客户确认两个私钥份额都可以重建对应于每个共享公钥的私钥,并且私钥份额是已发送的散列的预映射。这就证实了代理不诚实的可能性小于(N-1)/N。被发现提供无效密钥份额或散列的任何代理都可以从协议中删除并替换(并重复该过程)。随机选择的共享公钥(和相应的私钥份额散列)随后在协议中被用于n个事务。

9.每个代理(i=1,…,n)使用请求参数、加密私钥(EPrivK)的散列和tlpEPrivK的散列,创建与图1完全相同结构的事务(Tx0i)。

每个Tx0i有2个输入:客户费用份额(F/n)UTXO和代理保证金(D)UTXO。

每个Tx0i都有3个输出:(F/n)的输出1、D的输出2和EPubK元数据的输出3。

Tx0i输出1:

使用sEPrivK、tlpEPrivK和客户签名随时向客户地址支付(F/n)。

使用sEPrivK和代理签名在时间T后向代理地址支付(F/n)。

使用客户签名在时间T+ΔT后向客户地址支付(F/n)。

Tx0i输出2:

使用sEPrivK和tlpEPrivK随时向任何地址支付(D)。

使用sEPrivK和代理签名在时间T后向代理地址支付(D)。

使用客户签名在时间T+ΔT之后向客户地址支付(D)。

Tx0i输出3:

OP_RETURN包含作为元数据加密公钥(EPubK)。

10.每个代理签署他们相应的事务并将其发送给客户。

11.客户签署n个事务中的每一个,并将其广播到区块链网络。

12.一旦事务被挖掘到区块链上,EPubK现在可以公开地用于加密任何数据,这些数据从来自代理释放的阈值数量(m)个密钥份额揭示EPrivK之前不能被解密。

每个单独合约(Tx0i)以与前文所述的单个代理合约相同的方式执行。如果他们的密钥份额在时间T之前泄露,则每个代理都有丢失其保证金的风险。他们每个都被激励在时间T之后释放其密钥份额,以索取其保证金和费用份额。每个独立合约的执行完全相互独立。该系统将容忍子阈值(n-m)数量的参与者未能在正确的时间释放其密钥份额或提前泄露它们,而不损害服务的安全性或可靠性。对于在时间T+ΔT之前没有释放密钥份额的每个代理,客户可以要求返还其费用份额和功能失调的代理保证金。

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

参考资料

[Abliz 2009]:Abliz,Mehmud,and Taieb Znati."A guided tour puzzle fordenial of service prevention."Computer Security Applications Conference,2009.ACSAC'09.Annual.IEEE,2009.

[Fuchsbauer 2008]:Fuchsbauer,Georg,and David Pointcheval.

"Encrypting Proofs on Pairings and Its Application to Anonymity forSignatures."IACR Cryptology ePrint Archive 2008(2008):528.

[Lundkvist 2017]:

https://media.consensys.net/introduction-to-zksnarks-with-examples-3283b554fc3b

[Crepeau 2011]:Crépeau,Claude."Cut-and-choose protocol."Encyclopediaof Cryptography and Security.Springer US,2011.290-291.

[Maxwell 2016]:

https://bitcoincore.org/en/2016/02/26/zero-knowledge-contingent-payments-announc ement/

[Todd 2014]:

https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki

一些区块链的出现引出了一个系统,在该系统中,既有对当前时间(如区块头中所记录的)的分布式全局共识,也有合约(脚本)的无信任、自动执行。这些独特的功能可用于实现安全可靠的时间释放加密服务。在本说明书中,我们描述了一种用于时间释放加密服务的系统,该系统结合了一些区块链的基于脚本的智能合约和不依赖于对服务提供商的完全信任的零知识证明。此外,我们展示了如何使用无分配者阈值方案来扩展协议,以便在单个密钥释放中使用多个代理,从而通过去中心化提高服务的弹性和安全性。

某些配置采用知识的零知识证明(Zero-Knowledge Proofs,简称ZKP)的概念,使协议完全不可信。有两种技术可以用作该方案的一部分:非交互式证明(Non-InteractiveProofs);和分割并选择(Cut-and-Choose)。

非交互式零知识(Non-Interactive Zero-Knowledge,简称NIZK)证明对于本应用是优选的,因为它们最小化所涉及的各方之间所需的通信,但是实现起来可能复杂并且计算昂贵。形式上,NIZK证明可以直接从证明者提供给验证者,而无需交互,但是在这种情况下,它们需要可信的设置(σ)。在本申请中,验证者可以执行可信设置,然后将其发送给证明者,然后证明者计算证明(π),并将其发送回验证者。

在第一个应用中,我们需要零知识证明,即散列的预映射(提供给验证者)等于对应于椭圆曲线公钥(也提供给验证者)的私钥。这个特别的NIZK的数学结构在[Fuchsbauer2008]中详细描述。该NIZK证明可以用零知识简洁的非交互式知识论证(zero knowledgeSuccinct Non-interactive Argument of Knowledge,简称zk-SNARKS)[Lundkvist 2017]来实现。

在使用扩展系统的第二个应用中,构建高效的NIZK证明具有挑战性。在这种情况下,可以使用称为“分割并选择”的ZKP的简化的交互类型[Crepeau 2011]。在这种方法中,证明者向验证者提供对不同声明的大量承诺。验证者随机选择这些承诺的子集,并要求证明者发送知识以证明它们。当该声明的子集显示为真时,验证者就知道其余声明也为真的概率。

某些配置使用一些区块链的事务脚本的几个标准功能来实现输出的时间锁定以及散列锁的使用。

可以构造一些区块链的输出,使得解锁脚本需要提供散列到指定值(例如使用HASH256操作码)的秘密。也就是说,要花费输出,输入必须提供散列到输出中指定的另一个值的值[Maxwell 2016]。

还可以构造输出,使得其在将来某个预先指定的点之前无法花费。这是使用检查锁定时间验证(CHECKLOCKTIMEVERIFY,简称CLTV)操作码实现的,该操作码可用于防止花费事务,直到达到指定的unix时间戳(Unix Epoch Time)或指定的区块高度为止[Todd2014]。

为了确保智能合约结构的安全,使用了简短时间锁谜题的新型应用来防止“竞争攻击”。可以使用连续平方的时间锁谜题[Rivest 1996],这需要微不足道的计算工作来建立(锁定输出)。对于不具备建立参数的第二方,必须在输入上执行设定数量的串行计算(花费一定的时间)以解锁谜题并显示输出值。

在通过可信代理进行的时间释放加密方案的一种配置中,该代理(使用公钥加密系统)创建公钥-私钥对,并释放该公钥供客户用来加密信息,然后将所述信息发送给接收者。然后,在约定的时间(由代理确定),代理将私钥释放给接收者以解密信息。在这种情况下,代理需要完全可信才能执行此操作,并保持私钥的安全。

拉宾(Rabin)和索普(Thorpe)[Rabin 2006]提出了一种通过在一组多少可信代理之间分配密钥生成来增强该配置的安全性和容错性的系统,这样,即使某些参与方不诚实或受到损害,在阈值数量的代理同意释放密钥的正确时间之前,它们中的任何一方都无法获知完整的私钥。

在这个系统中,一组联网的代理(n)使用无分配者的阈值(m-of-n)秘密共享方案进行协作,以生成共享私钥和相应的共享公钥,然后将相应的共享公钥释放给客户(客户然后可以加密消息)。只有当阈值数量(m)个代理同意已经达到释放密钥的时间时,才能重建全私钥并将其发送给接收者。

沙米尔(Shamir)的秘密共享方案(Shamir's Secret Sharing Scheme,简称SSSS)[Shamir 1979]基于t次多项式可以适用于任意t+1个点集的概念。以共享私钥作为常数项(a0=f(0))形成t次多项式f(x),随机选取其余系数。曲线上的n个点随后提供给每个参与者。如果m=t+1或更多参与者合并它们的点,则有足够的信息来拟合这些点的t阶多项式,并且a0作为秘密被揭露。该方案能够在任意数量的、具有任意阈值的参与方之间共享单个私钥。

可以扩展标准SSSS,以消除可信的分配者创建多项式和分配秘密份额的要求(这是一个单点故障,因此不是不可信的)。在该无分配者SSSS中,每个参与者Pi生成自己的随机t次多项式fi(x),然后安全地发送fi(j)给其他参与者Pj。每个Pi对所有接收到的点f1(i)+f2(i)+…+fn(i)求和,以获得它们的秘密份额si=f(i),这就是共享多项式f(x)上的Pi点。

创建秘密份额后,与共享私钥(没有参与者知道)相对应的公钥的计算如下(使用椭圆曲线生成器G):

参与者Pi,其中i=1,…,t+1,将其公钥份额计算为bisi×G,其中

然后广播这些公钥份额,所述共享公钥A简单地计算为t+1个份额的总和:

单个代理协议

本节描述了单个代理提供时间释放加密服务的情况下的配置。该协议针对特定区块链事务及其本地脚本语言(脚本)(Script)进行描述,不失通用性,但适用于任何具有公共区块链和等效脚本功能的系统。

所述协议直接涉及两方:

·客户指定所需的时间锁加密服务的参数,并为此支付费用(F)。客户控制地址CAddr。

·代理执行所述时间锁加密服务,并在成功完成后收取费用。代理提供保证金(D),如果服务执行不正确,则保证金将被没收。代理控制地址AAddr。

图1示出了初始化协议的流程图,所述初始化协议用于在建立客户与代理之间的通信通道后在所述客户与所述代理之间建立数字时间锁合约。所述建立过程如下:

1.客户在公共论坛上发布对时间锁服务的请求。该请求包括客户地址(CAddr)、它们愿意支付的费用(F)、要求释放密钥的时间(T)和所需的等待时间(Δt)。

2.希望执行该服务的代理与客户联系并建立安全的通信通道。客户发送用于支付费用的UTXO的事务ID。

3.代理安全地生成随机加密私钥(EPrivK)和相应的公钥(EPubK)。

4.代理计算值tlpEPrivK——来自EPrivK的时间锁谜题输出——需要大约1小时的串行计算才能从作为输入的EPrivK进行计算(典型的一些区块链事务确认时间)。

5.代理将EPubK、对应的私钥H(EPrivK)的SHA-256散列和H(tlpEPrivK)发送给客户。

6.客户执行NIZK证明设置:σ←Setup(1256),并将结果发送到代理。

7.代理构造H(EPrivK)的预映射是对应于EPubK的ECC私钥的证明π1←Prove(σ,H(EPrivK),EPubK),以及H(tlpEPrivK)的预映射是具有约1小时的时间锁谜题的H(EPrivK)的预映射的证明π2←Prove(σ,H(tlpEPrivK),H(EPrivK)),并将所述证明发送给客户。

8.客户验证两种证明:Verify(σ,H(EPrivK),π1)=true和Verify(σ,H(tlpEPrivK),π2)=true。

9.代理使用请求参数、加密私钥(EPrivK)的散列和tlpEPrivK的散列创建事务(Tx0),该事务充当时间锁加密智能合约。

Tx0有两个输入:客户费用(F)UTXO和代理保证金(D)UTXO。

Tx0有3个输出:费用金额的输出1、保证金金额的输出2和加密公钥元数据的输出3。

输出1:

使用EPrivK、tlpEPrivK和客户签名随时向客户地址支付(F)。

使用EPrivK和代理签名在时间T后向代理地址支付(F)。

使用客户签名在时间T+ΔT后向客户地址支付(F)。

输出2:

使用EPrivK和tlpEPrivK随时向任何地址支付(D)。

使用EPrivK和代理签名在时间T后向代理地址支付(D)。

使用客户签名在时间T+ΔT之后向客户地址支付(D)。

输出3:

OP_RETURN包含作为元数据的加密公钥(EPubK)。

图2示出了完整的事务结构。注意,为了清楚起见,图2中<…PubKey>替换为OP_DUPOP_HASH160OP_EQUALVERIFY,其中公钥散列(pubKeyHash)等同于地址。输出1和2可以实现为P2SH(Pay-to-Script-Hash)脚本公钥,并将相应的赎回脚本发送给相关方和/或发布。

10.代理签署事务并将其发送给客户。

11.客户签署事务并将其广播到区块链网络。

12.一旦事务被挖掘到区块链中,时间锁合约就被激活。EPubK现在可公开用于加密任何数据,所述数据在EPrivK释放之前无法解密。

图3示出了数字时间锁合约的示意性时间线以及取决于时间段的输出目的地。该合约旨在确保代理在T到T+ΔT的时间间隔内释放加密私钥(EPrivK),以便索取费用和保证金。为此,代理创建两个事务:Tx1(花费Tx0输出1)和Tx2(花费Tx0输出2)。用于解锁所述输出的脚本签名都包含。Tx1和Tx2向代理选择的地址支付F和D。一旦将这些事务挖掘到区块链中,EPrivK便会公开释放,任何人都可以使用。

为了阻止代理在时间t之前向任何人泄露EPrivK(可能是为了换取贿赂),该合约旨在让在时间T之前了解EPrivK的任何人都可以通过提供无签名的散列预映射(以及相应的时间锁谜题tlpEPrivK——参见下文的竞争攻击保护)来花费输出2,然后索取完整的代理保证金——该方被称为泄密者。一旦发生这种情况,客户还可以了解EPrivK,并且可以在时间T之前使用脚本签名来花费输出1——收回代理费用。

这为代理提供了强有力的激励结构来保证EPrivK的安全。如果任何人(包括黑客)在时间T之前发现EPrivK,则它们可以匿名索取代理的保证金。如果代理在时间T之前作为泄密者索取保证金(或允许这样做),它们将被没收费用(所述费用退还给客户)。因此,费用和保证金的值的选择影响系统的安全性,并且应该适合于加密请求的原因。

该合约还旨在确保代理在时间T之后但在时间T+ΔT(其中ΔT是所需的延迟时间)之前释放加密密钥。在时间T+ΔT之后,如果未释放EPrivK,则客户可以解锁输出1和输出2(收回费用,并收取代理的保证金作为补偿)。在这种情况下,客户使用脚本签名创建两个事务:TxR1(花费Tx0输出1)和TxR2(花费输出2),并向客户选择的地址支付F和D。

一些区块链脚本语言的本质意味着,虽然可以防止输出在某个时间点之前被花费(使用OP_CHECKLOCKTIMEVERIFY),但是无法防止输出在某个时间点(在该时间点之前是可花费的)之后被花费。因此,一旦脚本签名生效,它将无限期地保持有效。这给输出2的锁定脚本带来了一个问题,即任何人都可以随时通过提供EPrivK来花费它,甚至在时间T之后甚至只需要H(EPrivK)的预映射。

这将导致对代理的“竞争双倍花费攻击”(“Race Double Spending Attack”):一旦代理正确地将Tx1和Tx2广播到区块链网络(在时间T之后),在它们位于内存池中时,可以从它们任何一个中提取EPrivK,并将它们自己的任何人都可以花费的事务包括在区块内(或者其他任何人都可以使用按费替换)以先花费输出2并窃取保证金。

本文实现的防止这种攻击的解决方案是对tlpEPrivK(来自EPrivK的时间锁谜题输出)与EpRivK一起提供的额外要求,以便随时解锁输出2。如果某人(泄密者)(Leaker)在时间T之前拥有EPrivK,则它们可以使用1小时的计算来私下确定tlpEPrivK,然后索取保证金(即解锁输出2)。如果当EPrivK嵌入Tx1和Tx2中、在内存池中等待被挖掘时,它们第一次(在时间T之后)获得EPrivK,则在它们导出tlpEPrivK(1小时的计算)时,花费输出2(Tx2)的代理事务将已经在区块链得到确认。防止竞争攻击的结果是,代理可以在时间T前1小时之内释放EPrivK,而不会有被没收保证金的风险,因为tlpEPrivK需要一个小时才能导出。这将“时间解决方案”或合约的准确性限制为1小时。

多代理协议

上述智能合约协议可以扩展到具有阈值私钥的多个代理的情况。在这种情况下,每个代理使用自己的保证金和单独的费用创建自己的Tx0版本。唯一的区别是私钥(EPrivK)散列和公钥(EPubK)分别被私钥份额的散列和共享公钥所替代。每个合约都是独立执行的,密钥份额在时间T后在区块链上显示。由于重建完整私钥需要密钥份额的阈值,因此系统可以容忍子阈值数量的功能失调的代理——为更关键和更重要的应用消除单点故障(单个代理)。该扩展协议所需的主要技术差异包括共享密钥的无分配者生成,以及多方零知识证明系统,该系统使代理组能够集体证明其私钥份额的散列的预映射对应于已发布的共享公钥。

多代理协议涉及以下参与者:

·客户,指定所需时间锁加密服务的参数并为此支付总费用(F)(在n个UTXOs中拆分)的,该客户控制地址CAddr。

·n个独立代理共同执行服务,如果他们正确执行协议,则每个代理将收取一小部分费用(F/n)。每个代理提供保证金(D),如果协议未正确执行,则被没收该保证金。每个代理(i=1,2,…,n)控制地址AAddri。

图4示出了多代理协议的示意图。建立过程如下:

1.客户在公共论坛上发布对时间锁服务的请求。该请求包括客户地址(CAddr)、他们愿意支付的费用(F)、他们要求释放密钥的时间(T)、所需的延迟(Δt)、所需的代理数量(n)和所需的阈值(m)。

2.n个希望执行该服务的代理联系客户并建立安全的通信通道。客户发送用于支付费用的UTXO的事务ID。

3.客户向所述代理组广播每个代理的联系方式,每个代理与所述组中的每个其他代理建立安全通信(通过公钥加密系统或Diffie-Hellman密钥交换)。

4.参与者集体执行阈值为m的无分配者秘密共享协议,生成共享秘密:EPrivK(加密私钥)。每个参与者(i=1,…,n)拥有密钥份额sEPrivKi。(EPrivK不为任何一方所知)。

5.n个参与者的组为每个私钥份额计算公钥份额,并将这些份额(sEPubKi)广播给组中的其他参与者。每个参与者可以独立计算相应的共享公钥:EPubK。

6.然后,每个代理(i=1,…,n)计算值tlpsEPrivKi——来自sEPrivKi的时间锁谜题输出,需要大约1小时的串行计算才能从作为输入的sEPrivKi进行计算。

7.每个代理(i=1,…,n)向客户发送EPubK、其对应的私钥份额H(sEPrivKi)的SHA-256散列和H(tlpsEPrivKi)。

8.代理组协作向客户提供零知识证明,即它们的私钥份额的散列的预映射可以用阈值m来重建对应于EPubK的私钥。为此开发NIZK证明是一项艰巨的任务,并且可能非常昂贵,但是可以相对有效地使用“切割并选择”方法。在这种情况下,n个代理的组多次(N=100至1000)重复步骤4至7。客户随机选择共享公钥之一,并请求该组显示其余N-1个公钥的私钥份额。客户确认两个私钥份额都可以重建对应于每个共享公钥的私钥,并且私钥份额是已发送的散列的预映射。这就证实了代理不诚实的可能性小于(N-1)/N。被发现提供无效密钥份额或散列的任何代理都可以从协议中删除并替换(并重复该过程)。随机选择的共享公钥(和相应的私钥份额散列)随后在协议中被用于n个事务。

9.每个代理(i=1,…,n)使用请求参数、加密私钥(EPrivK)的散列和tlpEPrivK的散列,创建与图1完全相同结构的事务(Tx0i)。

每个Tx0i有2个输入:客户费用份额(F/n)UTXO和代理保证金(D)UTXO。

每个Tx0i都有3个输出:(F/n)的输出1、D的输出2和EPubK元数据的输出3。

Tx0i输出1:

使用sEPrivK、tlpEPrivK和客户签名随时向客户地址支付(F/n)。

使用sEPrivK和代理签名在时间T后向代理地址支付(F/n)。

使用客户签名在时间T+ΔT后向客户地址支付(F/n)。

Tx0i输出2:

使用sEPrivK和tlpEPrivK随时向任何地址支付(D)。

使用sEPrivK和代理签名在时间T后向代理地址支付(D)。

使用客户签名在时间T+ΔT之后向客户地址支付(D)。

Tx0i输出3:

OP_RETURN包含作为元数据加密公钥(EPubK)。

10.每个代理签署他们相应的事务并将其发送给客户。

11.客户签署n个事务中的每一个,并将其广播到区块链网络。

12.一旦事务被挖掘到区块链上,EPubK现在可以公开地用于加密任何数据,这些数据从来自代理释放的阈值数量(m)个密钥份额揭示EPrivK之前不能被解密。

每个单独合约(Tx0i)以与前文所述的单个代理合约相同的方式执行。如果他们的密钥份额在时间T之前泄露,则每个代理都有丢失其保证金的风险。他们每个都被激励在时间T之后释放其密钥份额,以索取其保证金和费用份额。每个独立合约的执行完全相互独立。该系统将容忍子阈值(n-m)数量的参与者未能在正确的时间释放其密钥份额或提前泄露它们,而不损害服务的安全性或可靠性。对于在时间T+ΔT之前没有释放密钥份额的每个代理,客户可以要求返还其费用份额和功能失调的代理保证金。

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

参考资料

[Abliz 2009]:Abliz,Mehmud,and Taieb Znati."A guided tour puzzle fordenial of service prevention."Computer Security Applications Conference,2009.ACSAC'09.Annual.IEEE,2009.

[Fuchsbauer 2008]:Fuchsbauer,Georg,and David Pointcheval.

"Encrypting Proofs on Pairings and Its Application to Anonymity forSignatures."IACR Cryptology ePrint Archive 2008(2008):528.

[Lundkvist 2017]:

https://media.consensys.net/introduction-to-zksnarks-with-examples-3283b554fc3b

[Crepeau 2011]:Crépeau,Claude."Cut-and-choose protocol."Encyclopediaof Cryptography and Security.Springer US,2011.290-291.

[Maxwell 2016]:

https://bitcoincore.org/en/2016/02/26/zero-knowledge-contingent-payments-announc ement/

[Todd 2014]:

https://github.com/bitcoin/bips/blob/master/bip-0065.mediawiki

个性化你的检索平台
使用键盘键 进行切换