用于使用区块链实现系统的方法与流程



1.本公开涉及一种用于使用区块链实现系统以发行的方法。


背景技术:



2.区块链是指一种分布式数据结构形式,其中在点对点(p2p)网络中的多个节点中的每个节点处维护区块链副本。区块链包括一系列数据区块,其中每个区块包括一个或更多个事务(transaction)。每个事务都可以回指序列中的先前事务,其可以扩展一个或更多区块。事务可以通过提交到网络包括在新区块中。新区块的创建过程称为“挖掘”,该过程涉及多个挖掘节点中的每个挖掘节点争相执行“工作量证明”,即基于等待包括在区块中的未决事务池解决加密难题。
3.区块链中的事务可用于传递数字资产,即一定数量的数字通证。但是也可利用区块链实现区块链上的分层附加功能。例如,区块链协议可允许在事务输出中存储附加用户数据。现代区块链在单一事务中可储存的最大数据容量在不断增加,从而能够并入更复杂的数据。例如,这可用于在区块链中存储电子文档,甚至音频或视频数据。
4.网络中的每个节点可以具有以下三个角中的任何一个、两个或全部:转发、挖掘和存储。转发节点在整个网络节点中传播事务。挖掘节点将事务挖掘到区块中。存储节点各自对区块链中的已挖掘区块存储自己的副本。为了将事务记录在区块链中,一方将该事务发送到网络中的节点中的一个节点进行传播。接收该事务的挖掘节点可以争相将该事务挖掘到新区块中。每个节点被配置为遵守相同的节点协议,该协议将包括用于确认事务有效的一个或更多个条件。无效事务将不会传播或挖掘到区块中。假定事务已经核实有效,从而在区块链上被接受,则该事务(包括任何用户数据)将因此作为不可改变的公共记录,继续存储在p2p网络中的各个节点处。
5.成功解决工作量证明难题以创建最新区块的矿工通常被奖励一个称为“区块创始事务”的新事务,该事务会生成新的数字资产数额。工作量证明激励矿工不要欺骗系统,在他们的区块中包括双重花费事务,因为挖掘区块需要大量计算资源,而包括试图双重花费的区块很可能不会被其他节点接受。
6.在“基于输出的”模型(有时称为基于utxo的模型)中,给定事务的数据结构包括一个或更多个输入以及一个或更多个输出。任何可花费输出包括指定数字资产数额的元素,有时称为utxo(“未花费的事务输出”)。该输出还可以包括指定用于赎回该输出的条件的锁定脚本。每个输入包括指向先前事务中的此类输出的指针,并且还可以包括解锁脚本以用于解锁指向输出的锁定脚本。因此,考虑一对事务,将其称为第一事务和第二事务(或“目标”事务)。第一事务包括指定数字资产数额的至少一个输出,并且包括定义解锁该输出的一个或更多个条件的锁定脚本。第二事务(目标事务)包括至少一个输入和解锁脚本,该至少一个输入包括指向第一事务的输出的指针;该解锁脚本用于解锁第一事务的输出。
7.在此类模型中,当第二事务(目标事务)被发送到p2p网络以在区块链中传播和记录时,在每个节点处应用的有效性准则之一将是:解锁脚本满足在第一事务的锁定脚本中
定义的一个或更多个条件中的所有条件。另一条件将是:第一事务的输出尚未被另一早期有效事务赎回。根据这些条件中的任何一个条件发现目标事务无效的任何节点都不会传播该事务,也不会包括该事务以便挖掘到要记录在区块链中的区块中。
8.电子现金(ecash)最早于1983年发明(d.chaum,“用于不可追溯支付的盲签名”,《密码学进展》,第199-203页,1983年),此后出现了更多实现方式,但没有一种实现方式能够复制法定现金系统。应当注意的是,传统形式的ecash不利用区块链。


技术实现要素:



9.ecash系统(以及一般的系统)面临的最大问题之一是它容易受到“双重花费”的影响,这意味着很容易复制并再次花费相同的ecash(或)。因此,任何的先前系统并未得到广泛应用。
10.根据本文公开的一个方面,提供一种计算机实现的方法,用于使用区块链实现发行系统,其中每个由发行方向花费方发行,每个表示赎回方可赎回以换取所述的资产的数额,其中所述发行方保存货币序列号的记录,每个货币序列号表示相应;所述方法由所述发行方执行并且包括:获取花费事务,所述花费事务为区块链事务并且包括一组货币序列号中的第一货币序列号;确定所述第一货币序列号是否存在于已花费货币序列号的数据库中;以及,响应于满足一个或多个条件,将由所述第一货币序列号表示的所述资产的所述数额转移给所述赎回方,其中所述一个或多个条件中的第一条件是所述第一货币序列号不存在于所述数据库中。
11.所述发行方保存与已花费相关联的货币序列号列表。所述发行方可以直接从所述赎回方、所述区块链或其他来源接收所述花费事务。如果所述第一货币序列号存在于所述数据库中,则相应的先前已花费,并且所述花费方或所述赎回方试图对所述货币进行双重花费。所述发行方将拒绝所述。另一方面,如果所述第一货币序列号不存在于所述数据库中,则相关联的之前未花费,并且在还符合任何其他标准的条件下,所述发行方可以接受所述货币。
12.根据本文公开的另一方面,提供一种计算机实现的方法,用于使用区块链实现发行系统,其中每个由发行方向花费方发行,并且其中每个表示赎回方可赎回以换取所述的资产的数额;所述方法由所述花费方执行并且包括:获取提取事务,所述提取事务包括一个或多个输出,每个输出包括一组货币序列号中的相应一个货币序列号的哈希值,每个货币序列号表示相应;以及,将所述提取事务传输到所述赎回方、第三方和/或区块链网络以记录在所述区块链中。
13.在所述提取事务的所述输出中包含所述序列货币号的所述哈希值意味着在试图解锁所述输出的事务中必须揭示所述货币序列号本身,从而迫使所述花费方揭示所述货币序列号。所述揭示的货币序列号可用于识别先前花费的,从而防止对所述进行双重花费。
14.所述提取事务还用作已向所述花费方发行一组的记录,其中每个货币具有其自己的序列号。所述提取事务可以由所述发行方向所述花费方发行,从而允许所述发行方将已花费货币追溯到所述花费方。或者,所述花费方也可以生成所述提取事务。
15.根据本文公开的另一方面,提供一种计算机实现的方法,用于使用区块链实现数
字货币发行系统,其中每个由发行方向花费方发行,并且其中每个表示赎回方可赎回以换取所述的资产的数额;所述方法由所述赎回方执行并且包括:从所述花费方获取第一货币序列号;确定所述第一货币序列号是否存在于所述区块链上;以及,响应于满足一个或多个条件,获取花费事务,所述花费事务是区块链事务并且包括所述第一货币序列号,并且将所述花费事务传输到所述花费方、所述发行方、第三方和/或区块链网络中的一个或多个,以记录在所述区块链中,其中所述一个或多个条件中的第一条件是所述第一货币序列号不存在于所述区块链上。
16.所述赎回方检查所述第一货币序列是否存在于所述区块链上。如上所述,如果所述第一货币序列号存在于所述区块链上,则意味着所述花费方先前已花费相关联的。如果所述第一货币序列号不存在于所述区块链上,则所述赎回方可以确信所述相关联的未花费。
17.本发明提供了一种用于在所述区块链上实现系统(例如,ecash系统)的系统。有利地,利用所述区块链的特性可提高所述系统的安全性。具体而言,由于区块链的两个基本特性,使得所提出系统的双重花费安全性相对于先前的系统有所提高。所使用的第一个特性是事务输出具有二进制状态:已花费或未花费。如果输出表示货币,则只有在相应的输出未花费的情况下,它才被系统的花费和存入协议中接受(如下所述)。该特性用于防止发生双重花费。所使用的第二个特性是区块链是不可变的分布式数据库。区块链可用于存储任何人可以在需要时访问的已花费且被列入黑名单的货币序列号。
附图说明
18.为了帮助理解本公开的实施例并示出如何实施此类实施例,现将仅通过举例的方式参考附图进行说明,其中:
19.图1是一种用于实现区块链的系统的示意性框图;
20.图2示意性地示出了可记录在区块链中的事务的一些示例;
21.图3是另一种用于实现区块链的系统的示意性框图;
22.图4a是客户端应用程序的示意性框图;
23.图4b示出了用于处理事务的一些节点软件的示意性框图;
24.图5是用于实现电子现金协议的示例性系统的示意性框图;
25.图6是根据本发明实施例的用于实现系统的示例性系统的示意性框图;
26.图7a和图7b示意性地示出了示例性提取事务和相应数据;
27.图8a和图8b示意性地示出了示例性花费事务和相应数据;
28.图9a和图9b示意性地示出了示例性存入事务和相应数据;
29.图10a和图10b示意性地示出了另一个示例性提取事务和相应数据;
30.图11a和图11b示意性地示出了另一个示例性花费事务和相应数据;
31.图12a和图12b示意性地示出了另一个示例性存入事务和相应数据;
32.图13a至图13c分别示意性地示出了示例性提取、花费和存入事务;
33.图14a至图14c分别示意性地示出了用于插入到提取、花费和存入事务中的数据的第一示例;
34.图15a至图15c分别示意性地示出了用于插入到提取、花费和存入事务中的数据的
第二示例;
35.图16a至图16c分别示意性地示出了用于插入到提取、花费和存入事务中的数据的第三示例;
36.图17a至图17c分别示意性地示出了用于插入到提取、花费和存入事务中的数据的第四示例;
37.图18a至图18c分别示意性地示出了用于插入到提取、花费和存入事务中的数据的第五示例;
38.图19a至图19c分别示意性地示出了用于插入到提取、花费和存入事务中的数据的第六示例;
39.图20a至图20c分别示意性地示出了用于插入到提取、花费和存入事务中的数据的第七示例。
具体实施方式
40.示例性系统概述
41.图1示出了一种用于实现区块链150的示例性系统100。系统100包括分组交换网络101,通常是诸如互联网的广域互联网。分组交换网络101包括多个节点104,该多个节点被设置成在分组交换网络101内形成点对点(p2p)覆盖网络106。每个节点104包括对等体的计算机设备,不同的节点104属于不同的对等体。每个节点104包括含一个或更多个处理器的处理装置,例如一个或更多个中央处理单元(cpu)、加速器处理器、特定应用程序处理器和/或现场可编程门阵列(fpga)。每个节点还包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。存储器可包括一个或更多个存储器单元,其采用一个或更多个存储器介质,例如诸如硬盘等的磁介质、诸如固态硬盘(ssd)、闪存或电可擦可编程只读存储器(eeprom)等的电子媒介和/或诸如光盘驱动器等的光学介质。
42.区块链150包括一系列数据区块151,其中在p2p网络160中的多个节点中的每个节点处维护相应的区块链150副本。区块链中的每个区块151均包括一个或更多个事务152,其中该上下文中的事务是指一种数据结构。数据结构的性质将取决于用作事务模型或计划的一部分的事务协议类型。给定的区块链通常全程使用一个特定的事务协议。在一种常见的事务协议中,每个事务152的数据结构至少包括一个输入和至少一个输出。每个输出指定一个数额,该数额表示属于输出被加密锁定的用户103的数字资产值(需要该用户的签名进行解锁,从而进行赎回或花费)。每个输入指向先前事务152的输出,从而链接这些事务。
43.节点104中的至少一些节点扮演转发节点104f的角,这些节点转发并因此传播事务152。节点104中的至少一些节点扮演挖掘区块151的矿工104m的角。节点104中的至少一些节点扮演存储节点104s(有时也称为“完整副本”节点)的角,每个存储节点均在相应的存储器中存储相同区块链150的相应副本。每个矿工节点104m还维护等待挖掘到区块151中的事务152的池154。给定节点104可以是转发节点104、矿工104m、存储节点104s或其中两个节点或所有节点的任意组合。
44.在给定的当前事务152j中,输入(或每个输入)包括指针,该指针引用事务序列中先前事务152i的输出,指定该输出将在当前事务152j中被赎回或“花费”。通常,当前事务可以是池154或任何区块151中的任何事务。尽管为了确保当前事务有效,将需要存在先前事
务152i并核实其有效,但是在创建当前事务152j甚至向网络106发送当前事务152j时,不必存在先前事务152i。因此,在本文中,“先前”是指由指针链接的逻辑序列中的前任,而不一定是时间序列中的创建时间或发送时间,因此,不一定排除无序创建或发送事务152i、152j的情况(参见下面关于孤立事务的讨论)。先前事务152i同样可以称为先行事务或前任事务。
45.当前事务152j的输入还包括先前事务152i的输出被锁定到的用户103a的签名。反过来,当前事务152j的输出可以加密锁定到新用户103b。因此,当前事务152j可将先前事务152i的输入中定义的数额转移到当前事务152j的输出中定义的新用户103b。在某些情况下,事务152可具有多个输出,以在多个用户间分割输入数额(其中一个可以是原始用户103a,以便进行变更)。在某些情况下,一事务还可以具有多个输入,以将一个或更多个先前事务的多个输出中的数额汇总在一起,并重新分配到当前事务的一个或更多个输出。
46.上述可称为“基于输出的”事务协议,有时也称为未花费的事务输出(utxo)的协议(其中输出称为utxo)。用户的总余额不是用区块链中存储的任何一个数字定义的;相反,用户需要特殊“钱包”应用程序105,以整理该用户的所有utxo值,这些utxo值分散在区块链151的许多不同事务152中。
47.作为基于账户的事务模型的一部分,另一种类型的事务协议可称为“基于账户的”协议。在基于账户的情况下,每个事务均不通过参考过去事务序列中先前事务的utxo来定义转移的数额,而是通过参考绝对账户余额进行定义。所有账户的当前状态由矿工单独存储到区块链中,并不断更新。在此类系统中,事务使用账户的运行事务记录(也称为“头寸”)进行排序。该值由发送者签名作为其加密签名的一部分,并作为事务引用计算的一部分进行哈希处理。此外,可选的数据字段也可以在事务中签名。例如,如果数据字段中包含先前事务的id,则该数据字段可指向先前事务。
48.无论采用何种类型的事务协议,当用户103希望执行新事务152j时,其希望将新事务从其计算机终端102发送至p2p网络106的节点104中的一个(现在通常是服务器或数据中心,但原则上可以是其他用户终端)。此节点104根据在节点104中的每个节点处应用的节点协议检查事务是否有效。节点协议的详细信息将与相关区块链150中使用的事务协议类型相对应,一起形成整个事务模型。节点协议通常要求节点104检查新事务152j中的加密签名是否与预期签名相匹配,这取决于事务152的有序序列中的先前事务152i。在基于输出的情况下,这可包括检查新事务152j的输入中包含的用户加密签名是否与新事务花费的先前事务152i的输出中定义的条件相匹配,其中该条件通常包括至少检查新事务152j的输入中的加密签名是否解锁新事务的输入所指向的先前事务152i的输出。在一些事务协议中,条件可至少部分地由输入和/或输出中包含的自定义脚本定义。或者,这可仅由节点协议单独确定,或可通过其组合确定。无论采用哪种方式,如果新事务152j有效,当前节点会将其转发到p2p网络106中的一个或更多个其他节点104。这些节点104中的至少一些节点还作为转发节点104f,根据相同的节点协议应用相同的测试,从而将新事务152j转发到一个或更多个进一步的节点104,依此类推。通过这种方式,新事务在节点104的整个网络中进行传播。
49.在基于输出的模型中,给定输出(例如,utxo)是否花费的定义是,根据节点协议,其是否通过另一个随后事务152j的输入有效赎回。事务有效的另一个条件是其试图花费或赎回的先前事务152i的输出尚未被另一个有效事务花费/赎回。同样,如果无效,事务152j
将不会在区块链中传播或记录。这可防止重复花费,即花费者对同一个事务的输出花费超过一次。另一方面,基于账户的模型通过保持账户余额防止重复花费。因为同样存在定义的事务顺序,账户余额在任何时候均具有单一定义的状态。
50.除核实之外,节点104m中的至少一些节点在称为挖矿的过程中争先创建事务区块,该过程以“工作量证明”为基础。在挖矿节点104m处,将新事务添加到区块中尚未出现的有效事务的池中。然后,矿工争相通过尝试解决加密难题来组装事务池154中事务152的新的有效区块151。通常情况下,这包括搜索“随机数”值,从而当随机数与事务池154并置且进行哈希处理时,哈希值的输出满足预定条件。例如,预定条件可以是哈希值的输出具有某个预定义的前导零数。哈希函数的特性是,相对于其输入,其具有不可预测的输出。因此,该搜索只能通过强力执行,从而在试图解决难题的每个节点104m处消耗大量的处理资源。
51.解决难题的第一矿工节点104m在网络106上宣布难题解决,提供解决方案作为证明,然后网络中的其他节点104则可以轻松检查该解决方案(一旦给出哈希值的解决方案,就可以直接检查该解决方案是否使哈希值的输出满足条件)。基于已在每个此类节点处检查获胜者的已宣布解决方案,获胜者已为其解决该难题的事务池154之后由充当存储节点104s的节点104中的至少一些节点记录在区块链150中作为新区块151。区块指针155还分配给指向区块链中先前创建的区块151n-1的新区块151n。工作量证明有助于降低重复花费的风险,因为创建新区块151需要大量工作,并且由于包含重复花费的任何区块都可能被其他节点104拒绝,因此挖矿节点104m受到激励,不允许在其区块中包含双重花费。一旦创建,则不可修改区块151,因为其根据相同的协议在p2p网络106中的存储节点104s中的每个存储节点进行识别和维护。区块指针155还向区块151施加顺序。由于事务152记录在p2p网络106中每个存储节点104s处的有序区块中,因此提供了事务的不可变公共分类账。
52.应当注意的是,在任何给定时间争相解决难题的不同矿工104m可能会根据任何给定时间的未挖掘事务池154的不同快照执行该操作,具体取决于他们何时开始搜索解决方案。解决相应难题的人员首先定义新区块151n中包含的事务152,并更新当前未挖掘事务池154。然后,矿工104m继续争相从新定义的未完成池154中创建区块,依此类推。此外,还存在解决可能出现的任何“分叉”的协议,其中两名矿工104m彼此在很短的时间内解决难题,从而传播区块链的冲突视图。简言之,分叉方向最长的成为最终区块链150。
53.在大部分区块链中,获胜矿工104m会自动获得特殊类型的新事务作为奖励,该新事务创建新的数字资产值(与将数字资产数额从一个用户转移至另一个用户的正常事务截然相反)。因此,获胜节点被视为已“挖掘”一定数量的数字资产。这种特殊类型的事务有时称为“生成”事务,其自动形成新区块151n的一部分。该奖励可激励矿工104m争相参与工作量证明。通常情况下,常规(非生成)事务152还将在其输出中的一个输出中指定附加事务费用,以进一步奖励创建其中包含事务的区块151n的获胜矿工104m。
54.由于挖掘中涉及的计算资源,通常至少矿工节点104m中的每个矿工节点采用服务器的形式,该服务器包括一个或更多个物理服务器单元,甚至整个数据中心。每个转发节点104m和/或存储节点104s还可采取服务器或数据中心的形式。但是,原则上来说,任何给定节点104均可采用一个用户终端或联网在一起的一组用户终端的形式。
55.每个节点104的存储器均存储被配置为在节点104的处理装置上运行的软件,以根据节点协议执行其相应的角并处理事务152。应当理解的是,在本文中归因于节点104的
任何动作均可通过在相应计算机设备的处理装置上运行的软件执行。节点软件可以在应用层的一个或更多个应用中实现,或者在诸如操作系统层或协议层的较低层中实现,或者在这些层的任何组合中实现。此外,在本文中使用的“区块链”一词是指一般技术类型的通用术语,不限于任何特定专有区块链、协议或服务。
56.扮演消费用户角的多方103中的每一方的计算机设备102也连接到网络101。他们充当事务中的支付者和收受者,但不一定代表其他方参与挖掘或传播事务。他们不一定运行挖矿协议。出于说明目的,示出了双方103及其相应的设备102:第一方103a及其相应的计算机设备102a,以及第二方103b及其相应的计算机设备102b。应当理解的是,更多此类当事方103及其相应的计算机设备102可能存在并参与系统,但为了方便起见,未进行说明。每一方103均可以是个人或组织。仅出于说明目的,在本文中,第一方103a称为爱丽丝(alice),第二方103b称为鲍勃(bob),但应当理解的是,这并不仅限于爱丽丝或鲍勃,且本文对爱丽丝或鲍勃的任何引用均可分别用“第一方”和“第二方”替换。
57.每一方103的计算机设备102包括相应的处理装置,其包括一个或更多个处理器,例如一个或更多个cpu、图形处理单元(gpu)、其他加速器处理器、特定应用程序处理器和/或fpga。每一方103的计算机设备102还包括存储器,即采用非暂时性计算机可读介质形式的计算机可读存储器。该存储器可包括一个或更多个存储器单元,其采用一个或更多个存储器介质,例如诸如硬盘等磁介质、诸如ssd、闪存或eeprom等电子媒介和/或诸如光盘驱动器等的光学介质。每一方103的计算机设备102上的存储器存储软件,其包括被设置为在处理装置上运行的至少一个客户端应用程序105的相应实例。应当理解的是,在本文中归因于给定方103的任何行动均可通过在相应计算机设备102的处理装置上运行的软件执行。每一方103的计算机设备102包括至少一个用户终端,例如台式或笔记本电脑、平板电脑、智能手机或诸如智能手表等的可穿戴设备。给定方103的计算机设备102还可包括一个或更多个其他网络资源,诸如通过用户终端访问的云计算资源。
58.客户端应用程序105最初可通过例如从服务器下载的适当计算机可读存储介质,或通过诸如可移动ssd、闪存密钥、可移动eeprom、可移动磁盘驱动器、软盘或磁带等的可移动存储设备、诸如cd或dvd rom等的光盘或可移动光驱等提供至任何给定方103的计算机设备102。
59.客户端应用程序105至少包括“钱包”功能。这有两个主要功能。其中一个功能是使相应的用户方103创建、签名和发送拟在节点104的整个网络中传播的事务152,并因此包含在区块链150中。另一个功能是向相应方汇报其目前拥有的数字资产数额。在基于输出的系统中,该第二功能包括整理分散在区块链150中属于相关方的各种事务152的输出中定义的数额。
60.注意:虽然各种客户端功能可以描述为集成到给定客户端应用105中,但这不一定是限制性的,相反,在本文中所描述的任何客户端功能可以在由两个或更多个不同应用组成的套件中实现,例如经由api进行接口连接或一个应用作为另一个应用的插件。更通俗地说,客户端功能可以在应用层或诸如操作系统的较低层或这些层的任意组合实现。下面将根据客户端应用105进行描述,但应当理解的是,这不是限制性的。
61.每个计算机设备102上的客户端应用程序或软件105的实例可操作地耦合到p2p网络106的转发节点104f中的至少一个转发节点。这可以启用客户端105的钱包功能,以将事
务152发送至网络106。客户端105还可联系一个、一些或所有存储节点104,以在区块链150中查询相应方103作为接收者的任何事务(或实际上在区块链150中检查其他方的事务,因为在实施例中,区块链150是在某种程度上通过其公开可见性提供事务信任的公共设施)。每个计算机设备102上的钱包功能被配置为根据事务协议制定和发送事务152。每个节点104运行软件,其被配置为根据节点协议核实事务152有效的软件,并且在转发节点104f的情况下转发事务152,以在整个网络106中传播此类事务。事务协议和节点协议相互对应,给定事务协议和给定节点协议一起实现给定的事务模型。区块链150中的所有事务152均采用相同的事务协议(尽管事务协议可允许其内存在不同的事务子类型)。网络106中的所有节点104采用相同的节点协议(尽管其可根据针对该子类型定义的规则区分处理不同的事务子类型,并且不同的节点还可扮演不同的角,从而实现协议的不同对应方面)。
62.如上所述,区块链150包括一系列区块151,其中每个区块151包括通过如前所述的工作量证明过程创建的一个或更多个事务152的集合。每个区块151还包括区块指针155,其指向区块链中先前创建的区块151,以定义区块151的顺序。区块链150还包括有效事务池154,其等待通过工作量证明过程包含在新的区块中。每个事务152(除了一生成事务)包括指向先前事务的指针,以定义事务序列的顺序(注:事务152的序列可进行分支)。区块151的区块链一直追溯到创始区块(gb)153,该创始区块是区块链中的第一区块。区块链150中早期的一个或更多个原始事务152指向创始区块153,而非先前事务。
63.当给定方103(比方说爱丽丝)希望发送拟包含在区块链150中的新事务152j时,她将根据相关事务协议(使用其客户端应用程序105中的钱包功能)制定新事务。然后,她将事务152从客户端应用程序105发送至其连接的一个或更多个转发节点104f中的一个。例如,这可以是与爱丽丝的计算机102最近或最佳连接的转发节点104f。当任何给定节点104接收新事务152j时,其将根据节点协议及其相应的角进行处理。这包括首先检查新接收的事务152j是否满足变为“有效”的特定条件,具体示例稍后将详细讨论。在一些事务协议中,有效条件可通过事务152中包含的脚本在每个事务的基础上进行配置。或者,该条件可仅仅是节点协议的内置功能、或通过组合脚本和节点协议进行定义。
64.如果新接收的事务152j通过有效性测试(即:“有效”的条件下),接收事务152j的任何存储节点104s将向在该节点104s处维护的区块链150的副本中的池154中添加新有效事务152。进一步地,接收事务152j的任何转发节点104f随后将有效事务152传播至p2p网络106中的一个或更多个其他节点104。由于每个转发节点104f应用相同的协议,因此假定事务152j有效,这意味着事务很快将在整个p2p网络106中传播。
65.一旦进入在一个或更多个存储节点104处维护的区块链150的副本中的池154中,矿工节点104m将开始竞相解决包括新事务152的池154的最新版本方面的工作量证明难题(其他矿工104m可继续尝试基于池154的旧视角解决难题,但首先解决难题的矿工将定义下一个新区块151的结束位置和新池154的开始位置,最终将有人解决包括爱丽丝的事务152j的池154的一部分的难题)。一旦包括新事务152j的池154完成工作量证明,其将不可变地成为区块链150中区块151中的一个区块的一部分。每个事务152包括指向早前事务的指针,因此事务的顺序也被不可变地记录下来。
66.不同的节点104可以首先接收给定事务的不同实例,并且因此在一个实例被挖掘到区块150中之前具有关于哪个实例“有效”的冲突视图,此时所有节点104同意所挖掘的实
例是唯一的有效实例。如果节点104接受一个实例为有效实例,然后发现第二实例已记录在区块链150中,则该节点104必须接受这一点,并将丢弃(即视为无效)其最初接受的未挖掘实例。
67.基于utxo的模型
68.图2示出了示例性事务协议。这是基于utxo的协议的示例。事务152(简称“tx”)是区块链150的基本数据结构(每个区块151包括一个或更多个事务152)。下面将通过参考基于输出或基于“utxo”的协议进行描述。但这并不限于所有可能的实施例。
69.在基于utxo的模型中,每个事务(“tx”)152包括数据结构,其包括一个或更多个输入202和一个或更多个输出203。每个输出203可包括未花费的事务输出(utxo),其可用作另一新事务的输入202的来源(如果utxo尚未赎回)。utxo包括指定数字资产数额的值。这表示(分布式)分类账中的一组通证。utxo还可包含其来源事务的事务id以及其他信息。事务数据结构还可包括头部201,其可包括输入字段202和输出字段203的大小指示符。头部201还可包括事务的id。在实施例中,事务id是事务数据(不含事务id本身)的哈希值,且存储在提交至矿工104m的原始事务152的头部201中。
70.比方说,爱丽丝103a希望创建转移相关数字资产数额至鲍勃103b的事务152j。在图2中,爱丽丝的新事务152j标记为“tx
1”。该新事务获取在序列中先前事务152i的输出203中锁定至爱丽丝的数字资产数额,并至少将此类数额中的一部分转移至鲍勃。在图2中,先前事务152i标记为“tx
0”。tx0和tx1只是任意的标记,其不一定意味着tx0指区块链151中的第一事务且tx1指池154中的下一个事务。tx1可指向仍具有锁定至爱丽丝的未花费输出203的任何先前(即先行)事务。
71.当爱丽丝创建其新事务tx1时,或至少在她将该新事务发送至网络106时,先前事务tx0可能已经有效并包括在区块链150中。该事务此时可能已包括在区块151中的一个区块中,或者可能仍在池154中等待,在这种情况下,该事务将很快包括在新区块151中。或者,tx0和tx1可以创建并一起发送至网络102;或者,如果节点协议允许缓冲“孤立”事务,tx0甚至可以在tx1之后发送。本文事务序列上下文中使用的“先前”和“后续”一词是指由事务中指定的事务指针定义的序列中的事务顺序(哪个事务指向哪个其他事务等等)。它们同样可以替换为“前任”和“继任”、“先行”和“后代”或“父项”和“子项”等。这不一定指其创建、发送至网络106或到达任何给定节点104的顺序。然而,指向先前事务(先行事务或“父事务”)的后续事务(后代事务或“子事务”)不会有效除非父事务有效。在父事务之前到达节点104的子事务被视为孤立事务。根据节点协议和/或矿工行为,其可被丢弃或缓冲一段时间,以等待父事务。
72.先前事务tx0的一个或更多个输出203中的一个包括特定的utxo,标记为utxo0。每个utxo包括指定utxo表示的数字资产数额的值以及锁定脚本,该锁定脚本定义后续事务的输入202中的解锁脚本必须满足的条件,以使后续事务有效,从而成功赎回utxo。通常情况下,锁定脚本将数额锁定至特定方(该数额的事务的受益人)。即,锁定脚本定义解锁条件,该解锁条件通常包括以下条件:后续事务的输入中的解锁脚本包括先前事务被锁定到的一方的加密签名。
73.锁定脚本(亦称scriptpubkey)是节点协议识别的域特定语言中写入的一段代码。此类语言的特定示例称为“脚本(script)”(s大写)。锁定脚本指定花费事务输出203所需的
信息,例如爱丽丝签名的要求。解锁脚本出现在事务的输出中。解锁脚本(亦称scriptsig)是提供满足锁定脚本准则所需信息的域特定语言中写入的一段代码。例如,其可包含鲍勃的签名。解锁脚本出现在事务的输入202中。
74.因此在示出的示例中,tx0的输出203中的utxo0包括锁定脚本[checksig pa],该锁定脚本需要爱丽丝的签名sig pa,以赎回utxo0(严格来说,是为了使试图赎回utxo0的后续事务有效)。[checksig pa]包含爱丽丝的公私密钥对中的公钥pa。tx1的输入202包括向回指向tx1的指针(例如,通过其事务id(txid0),其在实施例中是整个事务tx0的哈希值)。tx1的输入202包括在tx0中标识utxo0的索引,以在tx0的任何其他可能输出中对其进行标识。tx1的输入202进一步包括解锁脚本《sig pa》,该解锁脚本包括爱丽丝的加密签名,该签名由爱丽丝通过将其密钥对中的私钥应用于预定的部分数据(有时在密码学中称为“消息”)创建。爱丽丝需要签名以提供有效签名的数据(或“消息”)可通过锁定脚本、节点协议或其组合进行定义。
[0075]
当新事务tx1到达节点104时,该节点应用节点协议。这包括一起运行锁定脚本和解锁脚本,以检查解锁脚本是否满足锁定脚本中定义的条件(其中该条件可包括一个或更多个准则)。在实施例中,这涉及并置两个脚本:
[0076]
《sig pa》《pa》||[checksig pa]
[0077]
其中“||”表示并置,“《

》”表示将数据放在堆栈上,“[

]”表示由解锁脚本组成的函数(在该示例中指基于堆栈的语言)。同样,脚本可以使用公共堆栈一个接一个地运行,而不是并置脚本。无论采用哪种方式,当一起运行时,脚本使用爱丽丝的公钥pa(包括在tx0的输出的锁定脚本中),以认证tx1的输入中的锁定脚本是否包含爱丽丝签名预期部分的数据时的签名。预期的部分数据本身(“消息”)也需要包括在tx0中,以便执行此认证。在实施例中,签名的数据包括整个tx0(因此不需要包括一个单独的元素来明文指定签名的部分数据,因为其本身便已存在)。
[0078]
本领域技术人员将熟悉通过公私密码进行认证的细节。基本上而言,如果爱丽丝已通过使用其私钥加密签署消息,则给定爱丽丝的公钥和明文中的消息(未加密消息),诸如节点104等其他实体可认证加密版本的消息必须已经由爱丽丝签名。签署通常包括对消息进行散列,签署哈希值和将此标记到消息的明文版本作为签名,从而使公钥的任何持有者能够认证签名。因此,应当注意的是,在实施例中,在本文中对签名特定数据片段或事务部分等的任何引用可以意味着对该数据片段或事务部分的哈希值进行签名。
[0079]
如果tx1中的解锁脚本满足tx0的锁定脚本中指定的一个或更多个条件(因此,在所示示例中,如果在tx1中提供了爱丽丝的签名并进行认证),则节点104认为tx1有效。如果是挖矿节点104m,这意味着其将添加至等待工作量证明的事务154池。如果是转发节点104f,则其将事务tx1转发到网络106中的一个或更多个其他节点104,从而将在整个网络中传播。一旦tx1有效并包括在区块链150中,这将把tx0中的utxo0定义为已花费。请注意,tx1仅在花费未花费的事务输出203时才有效。如果试图花费另一事务152已经花费的输出,则即使满足所有其他条件,tx1也将无效。因此,节点104还需要检查先前事务tx0中引用的utxo是否已经花费(已经形成另一有效事务的有效输入)。这是为何区块链150对事务152施加定义的顺序很重要的原因之一。在实践中,给定节点104可维护单独的数据库,标记已花费事务152的utxo 203,但最终定义utxo是否已花费取决于是否在区块链150中形成了另一有效事务的
有效输入。
[0080]
如果给定事务152的所有输出203中指定的总数额大于其所有输入202所指向的总数额,则这是大多数事务模型中的另一失效依据。因此,此类事务将不会传播或挖掘到区块151中。
[0081]
请注意,在基于utxo的事务模型中,给定utxo需要作为一个整体使用。不能“留下”utxo中定义为已花费的一部分数额,而同时又花费另一部分。但utxo的数额可以在下一个事务的多个输出之间分割。例如,tx0的utxo0中定义的数额可以在tx1中的多个utxo之间分割。因此,如果爱丽丝不想将utxo0中定义的所有数额都给鲍勃,她可以使用剩余部分在tx1的第二输出中自己零,或者支付给另一方。
[0082]
在实践中,爱丽丝通常还将需要包括获胜矿工的费用,因为现在仅靠区块创始事务的奖励币通常不足以激励挖掘。如果爱丽丝未包括矿工的费用,tx0可能会被矿工节点104m拒绝,因此,尽管技术上有效,但仍然不会传播并包括在区块链150中(如果矿工104m不愿意,矿工协议不会强制他们接受事务152)。在一些协议中,挖掘费不需要其自身的单独输出203(即不需要单独的utxo)。相反,给定事务152中输入202所指向的总数额与输出203所指定的总数额之间的任何差额都将自动提供给获胜矿工104。例如,假设指向utxo0的指针是tx1的唯一输入,而tx1只有一个输出utxo1。如果utxo0中指定的数字资产的数额大于utxo1中指定的数额,则该差额将自动提供给获胜矿工104m。替代地或附加地,这不一定排除可以在其自身事务152的其中一个utxo 203中明确指定矿工费用。
[0083]
爱丽丝和鲍勃的数字资产由区块链150中任何位置的任何事务152中的锁定至他们的未花费utxo组成。因此,通常情况下,给定方103的资产分散在整个区块链150的各种事务152的utxo中。区块链150中的任何位置均未存储定义给定方103的总余额的一个数字。客户端应用程序105的钱包功能的作用是将锁定至相应方且在其他随后事务中尚未花费的各种utxo值整理在一起。通过查询在任何存储节点104s(例如,与相应方的计算机设备102最近或最佳连接的存储节点104s)处存储的区块链150副本,可以实现这一点。
[0084]
请注意,脚本代码通常用示意图表示(即非精确语言)。例如,可写入[checksig pa]表示[checking pa]=op_dup op_hash160《h(pa)》op_equalverify op_checksig。“op_...”是指脚本语言的特定操作码。op_checksig(又称“checking”)是脚本操作码,其取两个输入(签名和公钥),并使用椭圆曲线数字签名算法(ecdsa)验证签名的有效性。在运行时,移除脚本中任何出现的签名(

sig’),但在由

sig’输入验证的事务中仍保留附加要求,诸如哈希难题。再如,op_return是脚本语言操作码,用于创建事务的不可花费输出,其可以将元数据储存在事务中,从而将元数据不可变地记录在区块链150中。例如,元数据可包括需存储在区块链中的文件。
[0085]
签名pa是数字签名。在实施例中,这基于使用椭圆曲线secp256k1的ecdsa。数字签名对特定的数据段进行签名。在实施例中,对于给定事务,签名将对部分事务输入以及全部或部分事务输出进行签名。对输出的特定部分进行签名取决于sighash标志。sighash标志是包含在签名末尾的4字节代码,用于选择签名的输出(并因此在签名时固定)。
[0086]
锁定脚本有时称为“scriptpubkey”,指其包括相应事务被锁定到的当事方的公钥。解锁脚本有时称为“scriptsig”,指其提供相应的签名。但是更通俗地说,在区块链150的所有应用中,utxo赎回的条件并不一定包括对签名进行认证。更通俗地说,脚本语言可用
于定义任何一个或更多个条件。因此,可以优选更为通用的术语“锁定脚本”和“解锁脚本”。
[0087]
可选的侧信道
[0088]
图3示出了用于实现区块链150的另一系统100。除了附加的通信功能外,该系统100与图1所示的内容基本相同。爱丽丝和鲍勃的每台计算机设备102a、120b上的客户端应用程序分别包括附加通信功能。也就是说,这可使爱丽丝103a建立与鲍勃103b分离的侧信道301(在任何一方或第三方的鼓动下)。侧信道301能够独立于p2p网络实现数据交换。此等通信有时候被称为“链下”通信。比如,当交换爱丽丝与鲍勃之间的事务152时不想将该事务(仍未)发布到p2p网络106或挖掘到区块150,可以采用此等通信,直到其中一方选择将该事务广播到网络106。替代地或附加地,该侧信道301可以用于交换任何其他的事务相关数据,例如密钥、协商的数额或条款、数据内容、等等。
[0089]
通过与p2p覆盖网络106相同的分组交换网络101可建立侧信道301。此外/或者,通过诸如移动蜂窝网络等不同网络、或者诸如本地无线网络等局域网、或者甚至爱丽丝和鲍勃的设备102a、102b之间的直接有线或无线连接可以建立侧信道301。一般而言,本文所指的侧信道301可包括经由一种或更多种联网技术或者通信介质的任何一个或更多个链路,用于“链下”(即独立于p2p覆盖网络106)交换数据。在多个链路被使用的情况下,整个链下链路的捆绑或集合才可以被称为侧信道301。因此,需要注意的是,虽然爱丽丝和鲍勃通过侧信道301对特定的信息或数据片段或者诸如此类进行交换,但这并不一定意味着所有这些数据片段必须通过相同的链路或甚至同一类型网络进行发送。
[0090]
客户端软件
[0091]
图4a示出了用于实现本公开方案的实施例的客户端应用程序105的示例性实施方式。客户端应用程序105包括事务引擎401和用户界面(ui)层402。根据上文讨论的方案以及稍后将进一步详细讨论的内容,事务引擎401被配置为实现客户端105的基础事务相关功能,诸如制定事务152,通过侧信道301接收和/或发送事务和/或其他数据,和/或发送事务以通过p2p网络106传播。
[0092]
该ui层402被配置为通过相应用户的计算机设备102的用户输入/输出(i/o)方式呈现用户界面,包括通过设备102的用户输出方式向相应用户103输出信息,和通过设备102的用户输入方式接收来自相应用户103的输入。例如,用户输出方式可包括提供视觉输出的一个或显示多个屏(触摸或非触摸屏)、提供音频输出的一个或更多个扬声器、和/或提供触觉输出的一个或更多个触觉输出设备等。用户输入方式可包括例如一个或更多个触摸屏的输入阵列(可与用于输出方式的那个/那些相同或不同);一个或更多个基于光标的设备,诸如鼠标、轨迹板或轨迹球;一个或更多个麦克风和语音或声音识别算法,用于接收语音或声音输入;一个或更多个基于手势的输入设备,用于接收手动或身体手势形式的输入;或者一个或更多个机械按钮、开关或控制杆等。
[0093]
注:虽然本文中的各种功能可以被描述为集成到同一客户端应用程序105中,但这并不一定构成限制,相反,它们可以在两个或更多个不同应用程序组成的一套程序中实现,例如一个应用程序作为另一个应用程序的插件或经由api(应用程序编程接口)进行接口。比如,事务引擎401的功能可以在单独的应用程序中实现,而不是在ui层402中实现,或者诸如事务引擎401的给定模块的功能可以在多个应用程序之间分割。同时,也不排除部分或全部描述的功能可以在比如操作系统层实现。在本文任何位置引用单个或给定应用程序105
或诸如此类的情况下,应当理解的是这只是作为示例,并且更通俗地说,所描述的功能可以在任何形式的软件中实现。
[0094]
图4b给出了用户界面(ui)400的示例的模型,该ui可由客户端应用程序105a的ui层402在爱丽丝的设备102a上呈现。应当理解的是,类似的ui可以由客户端105b在鲍勃的设备102b或任何其他方的设备上呈现。
[0095]
通过图示的方式,图4b从爱丽丝的角度示出了ui 400。ui 400可包括一个或更多个ui元素411、412、413,该一个或更多个ui元素通过用户输出方式呈现为不同的ui元素。
[0096]
例如,ui元素可包括一个或更多个用户可选择的元素411,这些元素可以是屏幕上的不同按钮、菜单中的不同选项或者诸如此类。用户输入方式被设置成使用户103(在这种情况下为爱丽丝103a)能够选择或以其它方式操作其中一个选项,诸如通过点击或触摸屏幕上的ui元素,或者说出所需选项的名称(注:本文使用的“手动”一词仅用于与自动进行对比,而不一定限于用手执行操作)。这些选项使得用户(爱丽丝)能够生成事务并将其发送给另一用户(鲍勃),且根据所述实施例生成事务的签名。
[0097]
替代地或附加地,ui元素可以包括一个或更多个数据输入字段412,通过数据输入字段412,用户可以输入要包含在所生成事务中的数据和/或要签名的消息。这些数据输入字段通过用户输出方式呈现,例如屏幕上,并且数据可通过用户输入方式输入到字段中,例如键盘或触摸屏。或者,数据可以例如基于语音识别口头地接收。
[0098]
替代地或附加地,ui元素可包括向用户输出信息的一个或更多个信息元素413。例如,这/这些可以在屏幕上呈现或可听见。
[0099]
应当理解的是,呈现各种ui元素、选择选项和输入数据的特定方式并不重要。这些ui元素的功能稍后将进行更详细地讨论。还应当理解的是,图4b中示出的ui 400只是一个图示模型,在实践中,它可包括一个或更多个进一步的ui元素,为了简洁起见,未对其进行说明。
[0100]
预备知识/术语
[0101]
货币序列号
[0102]
货币序列号被定义为已发行的唯一标识符(例如,类似于银行纸币上的序列号)。货币序列号由整数表示,该整数由用户使用伪随机函数计算,使得产生两个相同序列号的概率最小。
[0103]
加盲货币
[0104]
当某人不知道对某一货币进行加盲的计算输入时,如果该人无法计算该货币的序列号,则该货币是加盲货币。
[0105]
货币解盲
[0106]
加盲货币可以通过对货币的加盲序列号应用加盲函数的逆函数进行解盲。
[0107]
盲签名
[0108]
盲签名是签名者不知道他们正在签名的消息(即他们对“加盲消息”进行签名)的签名。结果是盲签名在相应的解盲消息上仍然有效。
[0109]
双重花费值
[0110]
当且仅当用户爱丽丝对货币进行双重花费时,此值才能识别她。也就是说,如果爱丽丝诚实行事,则没有计算上可行的方式可识别她。另一方面,如果她对单个货币进行双重
花费,则双重花费方程可用于识别她。实际上,这意味着如果她进行双重花费,则可以从货币的每次花费中揭示的信息来计算她的身份。所揭示的信息可以是她的银行账号、公钥或对应于她身份的其他值。以下是针对上下文给出的示例。在示例性系统中,双重花费者的银行账号u在双重花费的情况下被揭示。货币的接收者(例如,商家)获取哈希函数的一些原像,该哈希函数用于计算货币的序列号。提供给银行的原像将是
[0111]
a,或其中,a是爱丽丝在提取点选择的某个常数;u是爱丽丝的账号,位长度为lu;j是她的账号的初始余额;i是她花费的货币数量的计数器。请注意,是xor运算,||是级联。如果爱丽丝进行双重花费,则银行会知道这两个值,这两个值被称为“双重花费方程”或“双重花费值”,这两个术语可互换使用。因此,一旦银行掌握这些值,银行就可以移除第二等式中的a,以到爱丽丝的账号。这可以通过使用xor的逆运算将第一个值应用于第二个值来实现,xor的逆运算简单地说就是再次进行xor运算
[0112][0113]
从中银行通过读取结果的前lu位获取爱丽丝的账号,因此银行知道她的身份。应当注意的是,如果她没有进行双重花费,银行将只知道上述值中的一个值,因此无法推导出她的身份。
[0114]
安全素数
[0115]
安全素数是可以写为p=2p

+1的素数p,其中p

也是素数。
[0116]
rsa模数
[0117]
rsa模数n被定义为n=p1·
p2,其中p1和p2是素数。
[0118]
特殊rsa模数
[0119]
如果p1=2p
′1+1和p2=2p
′2+1是安全素数,则rsa模数n=p1·
p2称为“特殊”模数。
[0120]
二次剩余
[0121]
在给定的情况下,如果存在元素使得b2≡a mod n,则a称为模n的二次剩余。我们将这些二次剩余的集合称为如果n是rsa模数,则在给定b2≡a mod n而不知道n的因式分解的情况下,很难计算b。应当注意的是,如果n是rsa模数,则随机选择的元素是二次剩余的概率正好是1/4。
[0122]
生成器
[0123]
在给定n阶的g的情况下,如果该的一个元素g∈g使用运算结果重复应用其本身产生该g本身,则该元素是生成器。这表示为g=《g》,其中g为生成器。可以这种方式生成的被称为“循环”。
[0124]
下面介绍了两个,这两个是循环,并且在以下各部分中是相关的。
[0125]
第一表示为g,并且由元素g生成,其具有素数阶q。可以假设,决策diffie-hellman问题很难,这意味着在给定gu的情况下难以计算u。在几个示例性方案中,该用于导出公钥和私钥对,并且还用于下面描述的dodis-yampolskiy(dy)伪随机函数。dy函数可用于计算货币序列号和双重花费方程。
[0126]
第二表示为其由元素生成并且具有素数阶q

。该元素是模n的二次剩余,其中n=p1p2是特殊rsa模数。均通用元素表示为该可用于使用佩德森承诺
提交秘密,并且可用于银行使用的签名方案。
[0127]
佩德森承诺
[0128]
在给定均情况下,如果是模n的二次剩余并且是q

阶的生成器,则正整数x1,...,xm∈[0,n)的佩德森承诺被定义为
[0129][0130]
其中r是随机生成的整数。应当注意的是,r和xi被限制为小于该的阶数。
[0131]
camenisch-lysyanskaya(cl)签名
[0132]
可以假设,用户希望第三方在l条消息上签名而不共享消息的确切值。消息列表可以标记为(x1,...,x
l
)∈(0,min(n,n

)),其中min(n,n

)是n和n

的最小值,它们分别是和均阶数。消息的签名者具有公钥(n,a1,...,a
l
,b,c),其中l是待签名的消息块的长度,并且是的生成器,其中n是特殊rsa模数,并且签名者的私钥是p1,这意味着只有他们知道n=p1·
p2的因式分解。另外,可以假设其中和n

是一些整数。
[0133]
为了获取关于佩德森承诺值(x1,...,x
l
)的cl签名,需执行以下步骤。
[0134]
1.用户计算佩德森承诺和其中和r

是随机生成的整数。
[0135]
2.用户向签名者证明他们知道值(x1,...,x
l
),和a都是同一值x1,...,x
l
的承诺,并且最终它们处于正确的范围内。
[0136]
3.签名者选择随机整数和素数q,并计算
[0137][0138]
4.然后,签名者将发送给用户。
[0139]
5.假设则消息(x1,...,x
l
)上的签名为(v,r,q)。
[0140]
该签名的关键特征是只有签名者才能高效地计算元素模数n=p1p2的第q次根,因为只有他们知道因式分解。
[0141]
dy伪随机函数
[0142]
伪随机函数是其中输出是确定性的但看似随机的函数。在y.dodis和a.yampolskiy于2005年在国际公钥密码研讨会上发表的“具有短证明和密钥的可验证随机函数”中,dodis和yampolskiy定义了一个伪随机函数,该函数可用于下文所述的各种示例性系统中。在给定具有素数阶p和种子s的生成器g∈g的情况下,dodis和yampolskiy将一个伪随机函数定义为
[0143]
[0144]
此函数应称为dy伪随机函数。
[0145]
知识的零知识证明
[0146]
总体想法是,证明者向验证者提供足够的信息来证明他们知道某个值,而不显式地揭示该值。有各种预定义的方式可以实现这一想法,这取决于人们想要证明的内容。应当注意的是,在大多数情况下,验证者需要以挑战的形式提供输入,否则,验证者可以简单地将相同的证明传递给另一方,伪装成他们知道隐藏的值。存在非交互式知识证明的情况,其中挑战仅仅是预先约定的,或者具有标准格式,例如验证者身份的哈希值加上时间和日期戳。
[0147]
以下示例提供了整数在某一范围内的证明。这可用于证明钱包的计数器仍然在提取数额的值的范围内。该证明的目的将是证明爱丽丝知道计数器值j,该计数器值的每个位值为0或1,并且爱丽丝可以证明其是哪个值,而不共享该值。
[0148]
1/2秘密的知识证明
[0149]
假设爱丽丝想要证明她知道1/2(1-of-2)值。假设a∈γ表示爱丽丝知道值xi的见证的索引i的集合,其中γ是可能的集合中可用于重构秘密的集合。在以下示例中,i=1,2。对于每个其中是a的补码,爱丽丝运行具有输入xi的模拟器s以产生会话在知识的零知识证明协议中,这些会话为三轮,其中ci是鲍勃发出的挑战,是爱丽丝的响应。然后,对于每个i∈a,在给定输入xi的见证的情况下,爱丽丝确定为她将发送给鲍勃以证明知道的内容。爱丽丝将值(其中i=1,2)发送给鲍勃。
[0150]
1.鲍勃随机选择l位字符串str并将其发送给爱丽丝。
[0151]
2.考虑与步骤1中的挑战ci对应的共享集在γ
*
中,是非限定的,这意味着在给定对应于的ci的值的情况下,鲍勃无法重构爱丽丝的秘密。因此,爱丽丝可以根据与字符串str一致的整个共享集完成这些共享,而不存在鲍勃能够计算秘密的风险。爱丽丝对索引i∈a形成挑战ci,使得share(ci)等于完成过程中产生的共享。为完成此操作,可以复制共享的位并根据需要用随机位填充。在步骤1中,s已经通过运行证明者的算法生成用于和ci的最终消息最后,爱丽丝将用于一组消息ci、(其中i=1,2)发送给鲍勃。
[0152]
3.鲍勃检查所有会话是否会使得验证者在相应的零知识证明协议中接受(如步骤1中所述),并且还检查共享share(ci)是否与字符串s一致。当且仅当满足这些检查条件时,他才会接受。
[0153]
该知识证明用于以下证明中。
[0154]
证明提交的整数j在[0,2
l-1]范围内
[0155]
假设p是大素数,并且q|p-1,则是q阶元素,使得h以g为底的离散对数未知。
[0156]
1.爱丽丝使用佩德森承诺方案edcom(j;r)=h
rgj
提交整数j。
[0157]
2.她将j重写为二进制表示,使得j=j020+j121+

+j
l-12l-1
。然后,爱丽丝使用
pedcom(ji;ri)为这些ji,i=0,

,l-1计算佩德森承诺,其中
[0158]
3.她通过证明她知道pedcom(ji;ri)以h为底或pedcom(ji;ri)/g以h为底的离散对数,来证明pedcom(xi;ri)隐藏的数字为0或1。为完成这一操作,可以证明知道如下所述的离散对数并证明知道如上所述的1/2秘密。
[0159]
4.鲍勃最后检查∏ipedcom(ji;ri)=pedcom(j;r)。
[0160]
如果这些检验得到验证,则保留该证明。
[0161]
将秘密的知识证明转换为消息m上的知识签名
[0162]
首先,假设爱丽丝希望将秘密的知识证明转换为知识签名,以便鲍勃可以对其进行验证。在下文中,f是伪随机函数,其将任意长度的字符串转换为范围[0,n),其中n是rsa模数。
[0163]
要对消息m进行签名,爱丽丝需要执行以下步骤。
[0164]
1.爱丽丝选取随机数r1,
…rτ
∈[0,n)并计算
[0165]
2.爱丽丝计算f(m,x1,

,x
τ
),取前kτ位并将其标记为e
ij
,其中1≤i≤τ,1≤j≤k。由此创建值e
ij
的矩阵。
[0166]
3.爱丽丝计算vj=f(ida,j)(其中j=1,

,k),其中ida是爱丽丝的身份。
[0167]
4.然后,她计算
[0168]
5.接下来,她计算(其中i=1,

,τ)。
[0169]
6.最后,她将ida,m,e
ij
和yi发送给鲍勃。
[0170]
鲍勃用以下方式验证签名。
[0171]
1.鲍勃计算vj=f(ida,j)(其中j=1,

,k)。
[0172]
2.鲍勃计算(其中i=1,

,τ)。
[0173]
3.鲍勃验证f(m,z1,
…zτ
)的前kτ位是e
ij

[0174]
如果此验证成立,则签名正确。
[0175]
离散对数的知识的零知识证明
[0176]
为了证明知道gu中的u,同时保持u秘密,可以遵循以下协议。假设g,h∈g是g的公开已知元素。如果爱丽丝希望向鲍勃证明她知道用于计算gu的正确u,则她执行以下操作。
[0177]
1.爱丽丝计算:
[0178][0179][0180]
其中r1,r2,和r3是随机生成的秘密整数,并将v和u发送给鲍勃。
[0181]
2.鲍勃选择挑战e,例如e=hash(x),其中x是某条随机选择的消息,并将该挑战e发送给爱丽丝。
[0182]
3.然后需要爱丽丝进行计算
[0183]
l=r2+eu,
[0184]
m=r3+er1,
[0185]
并将这些结果返回给鲍勃。
[0186]
4.然后,鲍勃验证
[0187]glhm
=uve。
[0188]
如果鲍勃认为此等式成立,则他知道爱丽丝知道u的值。
[0189]
电子现金系统
[0190]
电子现金(ecash)于1983年由chaum首次推出。这是一种非常简单的系统,用户可以从发行方处提取加盲货币,在商家处花费解盲货币,并且商家还可以将其存入发行方处,而这与提款没有任何联系。此后,提出了许多ecash系统,这些ecash系统在这种系统的某些方面有所改进,无论是防止双重花费导致离线ecash、货币可分割性、批量花费货币、货币存储效率、回丢失货币,还是其他改进。在所有ecash系统中,发行方都提供数据库服务,存储先前花费的货币以检查是否存在双重花费。chaum的ecash系统是一种在线ecash系统,这意味着货币的发行方在花费货币时需要在线。这是因为,为了接受货币,货币的接收者必须联系发行方以检查其数据库,确认该货币是否还没有花费。离线ecash系统以某种方式稍后导出双重花费者的身份,从而在方便时存入货币。应当注意的是,在下文中,货币的发行方被称为银行,但是通常这可以是任何可信的第三方。
[0191]
所有ecash系统都包含相同的基本协议:设立、提取、花费和存入。
[0192]
在下面的示例中,爱丽丝想要从银行提取一些ecash(),并在商家处将其花费,然后商家将其存入银行,如图5所示。
[0193]
设立
[0194]
所有ecash系统中均存在初始设立,其中方案中的爱丽丝和商家注册其身份。这可以包括设立银行账户或者设立公钥-私钥对以及共享公钥。类似地,在所有ecash系统中,银行必须创建其自己的公钥-私钥对并发布公钥。
[0195]
提取
[0196]
在此步骤中,爱丽丝向银行请求包含一定货币价值的钱包。爱丽丝发起钱包发行,向银行提供加盲货币序列号或从中导出序列号的钱包种子。然后,银行对这些加盲值进行签名,使得爱丽丝可以向商家证明她正确获取了钱包。用于在钱包上获取签名的协议可以包括爱丽丝向银行发送加盲货币序列号,然后银行对其进行签名并将签名返回给爱丽丝。每个ecash将指定要使用的签名方案。然后,爱丽丝将该签名作为钱包的一部分存储。钱包的格式将取决于特定ecash系统,但是通常,这是对应于以下各项的一组值:货币序列号、银行对货币进行的签名以及在离线现金的情况下可以追溯双重花费者的一些额外信息。此时,只有爱丽丝知道货币序列号,因此只有她可以对其进行花费。
[0197]
花费
[0198]
为了花费货币,爱丽丝向商家提供货币的序列号和银行的签名,以及双重花费方程(如果协议中包括该方程)。爱丽丝必须向商家证明序列号、签名和双重花费方程(如果存在)都具有正确的格式。在更简单的协议中,这可以通过直接检查银行签名是否正确来实现,而在更复杂的情况下,这涉及知道银行已经对一些隐藏值进行签名的零知识证明。下面将针对每个协议更详细地描述验证过程。如果货币经过验证,则商家接受该货币。
[0199]
存入
[0200]
在在线ecash的情况下,商家需立即联系银行以存入货币。然后,银行将检查已花费货币的数据库以查看其是否已经花费。如果没有花费,则银行接受该货币,而商家接收该
货币的价值。如果其已经花费,则商家拒绝支付。在离线ecash中,商家每当需要时(例如,在营业日结束时)可以向银行存入货币。然后,银行将存储序列号和一些双重花费信息。如果是货币被双重花费的情况,则可以使用这种额外的双重花费信息识别罪犯。在一些协议中,还可以在双重花费之后计算剩余的未花费货币,从而可以将这些未花费货币列入黑名单。
[0201]
系统
[0202]
图6示出了用于实现数字现金系统以发行的示例性系统600。系统600包括发行方601(例如银行或其他可信的第三方),其负责向花费方602(例如最终用户爱丽丝103a,或企业、服务机构、大学、慈善机构等)发行。该系统还包括赎回方603(例如商家),其在从花费方602接收到时,可以向发行方601存入,并且作为回报,接收由表示的数字资产。例如,花费方602可以为赎回方603提供作为赎回方提供的服务的回报,然后赎回方可以通过发行方赎回,以获取由表示的传统货币(即,法定货币)的数额。系统600还包括区块链网络106。发行方601、花费方602和赎回方603中的每一个被配置为直接或间接地与区块链150交互,例如向区块链150传输事务、从区块链150获取事务等。
[0203]
应当注意的是,参考图1至图4,发行方601、花费方602和赎回方603中的每一个可以执行归因于爱丽丝103a和鲍勃103b的一些或全部功能。
[0204]
如图6所示,发行方601可以被配置为(例如)通过侧信道301向花费方602传输提取事务tx
提取
。提取事务tx
提取
也可以发送到区块链网络106。花费方602可以被配置为(例如)通过侧信道301向赎回方603传输花费事务tx
花费
。花费事务tx
花费
也可以发送到区块链网络106。赎回方603可以被配置为(例如)通过侧信道301向发行方601传输存入事务tx
存入
。存入事务tx
存入
也可以发送到区块链网络106。应当注意的是,这只是各方之间的事务流程的一个说明性示例。还可以有其他流程,并且将在下面讨论。
[0205]
为简洁起见,将结合银行(发行方601)、被称为爱丽丝的客户(花费方602)和商家(赎回方603)来描述本发明的实施例。然而,应当理解的是,这些只是所涉及各方的便利标签,并非旨在进行限制。
[0206]
设立
[0207]
银行601和爱丽丝602被配置为作为设立协议的一部分进行交互。爱丽丝602向银行601注册标识符。该标识符可以是银行账号、护照号、驾驶执照、姓名和地址等。在一些示例中,该标识符可以是公钥,例如公钥-私钥对中的公钥。爱丽丝602可以注册她的标识符作为了解客户(kyc)过程的一部分。爱丽丝602、银行601和商家603各自具有适于用作区块链协议的一部分的公钥,例如椭圆曲线公钥。也就是说,公钥可以链接到用于对区块链事务进行签名的签名。每个公钥还可以形成在区块链150上使用的相应地址的基础。在下面的示例中,爱丽丝602具有公钥pa和对应私钥ska,银行602具有公钥pb和对应私钥skb,并且商家603具有公钥pm和对应私钥skm。各方的公钥可以对每一方是已知的。或者,在一些示例中,爱丽丝的公钥pa可以至少在开始时对其他方是未知的。此外,除非上下文需要,对一方的公钥的引用可以被视为该方拥有私钥的任何公钥。换句话说,爱丽丝602可以使用一个公钥对事务进行签名,并且使用另一个公钥作为区块链地址的基础。例如,爱丽丝602可以使用两个不同的公钥作为协议的一部分,其中一个公钥是已知公钥pa,而其中一个公钥则是从该已知公钥导出的,例如p
a’。
[0208]
商家603可以执行与爱丽丝602类似的过程以注册商家603的标识符。
[0209]
提取
[0210]
为了从银行提取一个或多个(即,为了使银行601向爱丽丝602发行),爱丽丝602和银行601必须采用货币种子签名协议。货币种子s是仅对爱丽丝602已知的值(即数字)。也就是说,爱丽丝602生成货币种子s,并且不与银行601或商家603共享该货币种子。货币种子s可以由伪随机数生成器生成。爱丽丝602以加盲消息的形式将货币种子s发送给银行601,使得银行601无法辨别货币种子。银行601对加盲货币种子进行签名并将盲签名σb(即,加盲货币种子上的签名)返回给爱丽丝602。银行601可以使用私钥skb或者使用不同的签名密钥对加盲货币种子进行签名。
[0211]
在一些示例中,货币种子s可以基于来自银行601的输入。即,银行601为爱丽丝602提供输入r

。然后,基于来自爱丽丝的输入s

和来自银行的输入r

生成货币种子,例如s=s

+r


[0212]
爱丽丝602使用货币种子生成一个或多个货币序列号。每个货币序列号表示单个。每个数字表示可以由银行601设置的预定义数字资产数额。例如,每个可以代表100英镑(这可以在op_return输出中指定,或者也可以是所有货币始终表示100英镑的预定约定或协议)。爱丽丝602和银行601可以同意爱丽丝可以生成一组货币序列号。然后,银行601可以向爱丽丝的银行账户存入等于该组货币序列号的数额。
[0213]
爱丽丝602基于货币种子生成货币序列号中的第一货币序列号(并且在一些示例中,唯一货币序列号)。可以通过对货币种子应用伪随机函数,例如dy伪随机函数,来生成第一货币序列号。因此,第一货币序列号被链接到货币种子,但是看似像一个随机值。
[0214]
现在,提取事务作为区块链事务生成,用作提取证据,例如对应于第一序列号的。生成提取事务的一方取决于系统是可追溯货币系统还是不可追溯货币系统。
[0215]
对于可追溯货币系统,提取事务包括银行的签名sigb。也就是说,提取事务由银行601签名。图7a中示出了示例性可追溯提取事务。银行的签名sigb包含在提取事务的输入中(在该示例中与银行的对应公钥pb一起)。
[0216]
提取事务还包括第一输出,其包括第一货币序列号的哈希值。应当注意的是,可以使用其他可选的单向函数来代替哈希函数。第一输出包括输出脚本,该输出脚本被配置为当与花费事务的输入一起执行时,要求后续事务的输入包括哈希函数的原像(即,第一货币序列号本身),以便解锁第一输出。可选地,如图7a的示例所示,输出脚本也可以被锁定到爱丽丝的公钥pa和/或银行601的公钥pb。例如,第一输出可以是多重签名输出。也就是说,为了解锁第一输出,花费输入必须包括对应于爱丽丝的公钥pa的签名siga和/或对应于银行的公钥pb的签名sigb。可以包括第二输出,其将该变更返回给银行601。
[0217]
在图7a的示例中,提取事务包括表示第一的第一数据。第一数据可以包含在可花费输出中,或者包含在不可花费输出(例如,op_return输出)中。图7b中示出了第一数据的示例。第一数据可以包括以下各项中的一项、部分或全部:表示由(例如货币)表示的数字资产的前缀、货币协议标志、货币动作标志(例如提款)以及的余额。
[0218]
对于不可追溯货币系统,提取事务包括爱丽丝的签名siga。也就是说,提取事务由
爱丽丝602签名。图10a中示出了示例性不可追溯提取事务。爱丽丝的签名siga包含在提取事务的输入中(在该示例中与爱丽丝的对应公钥一起pa)。不可追溯提取事务包括上述与可追溯提款交易相关的相同第一输出。如上所述,不可追溯提取事务还可以包括表示第一的第一数据。图10b中示出了第一数据的示例。
[0219]
在银行对提取事务进行签名的情况下,爱丽丝602向银行601发送第一货币序列号的哈希值,以便将其包括在第一输出中。或者,爱丽丝602可以生成事务模板,该事务模板至少包括第一输出,然后银行601可以添加输入,并且如果需要,还可以添加输出中的一个或多个。然后,银行601可以向区块链网络提交提取事务。银行601还可以向爱丽丝602发送提取事务的副本。
[0220]
在爱丽丝602对提取事务进行签名的情况下,爱丽丝602不需要向银行601发送提取事务。爱丽丝602只需要向区块链网络提交提取事务。
[0221]
可选地,提取事务可以包括多个输出,该输出包括货币序列号的哈希值。例如,爱丽丝602可以生成第二货币序列号以表示第二。第一货币序列号可以是第二序列号的种子(即,可以通过将伪随机数函数应用于第一货币序列号生成第二货币序列号),或者可以通过将伪随机数函数直接应用于货币种子来生成第二货币序列号。在这些示例中,提取事务包括一系列输出,除哈希值不同之外,这些输出与第一输出类似。每个输出可以与相应数据输出(即,具有与第一数据类似的数据的输出)相关联。
[0222]
花费
[0223]
为了在与商家603的事务(例如事务)中花费第一,爱丽丝602向商家603提供第一货币序列号。商家603检查第一货币序列号是否包含在区块链的事务中。应当注意的是,仅第一货币序列号的哈希值包含在提取事务中,而不是第一货币序列号本身。如果第一货币序列号包含在区块链上,则商家603拒绝第一并终止该事务。第一货币序列号可以作为爱丽丝602在第一上花费的一部分包含在区块链上,或者可以作为由银行601将第一列入黑名单的一部分包含在区块链上,如下所述。如果第一货币序列号不包含在区块链上,则商家603可以决定接受并继续执行该事务。
[0224]
商家603响应于满足一个或多个条件而获取花费事务。一个或多个条件包括第一货币序列号不存在于区块链上的条件。花费事务包括第一货币序列号,并且充当商家603已经接受由第一货币序列号表示的的证据。商家603可以全部或部分地(例如与爱丽丝602组合)生成花费事务。也就是说,花费事务的输入和/或输出中的一个、部分或全部可以由商家603生成。类似地,花费事务的输入和/或输出中的一个、部分或全部可以由爱丽丝602生成。
[0225]
图8a示出了可追溯花费事务的示例。可追溯花费事务包括第一货币序列号,从而在花费事务被提交到区块链网络时揭示第一货币序列号。在该示例中,第一货币序列号包含在花费事务的第一输入中。花费事务的第一输入可以引用提取事务的第一输出,从而创建事务链。如果提取事务的第一输出需要,则第一输入可以包括爱丽丝的签名siga和/或公钥pa。花费事务可以包括第二输出,该第二输出包括商家的签名sigm和/或公钥pm。第二输出可以引用锁定到商家公钥pm的事务输出。
[0226]
如果爱丽丝602希望稍后花费她的中的另一个,则花费事务可以包括与提取事务的第一输出类似的第一输出,只是哈希值是她的货币序列号中的另一个
货币序列号。花费事务的第一输出可以被锁定到爱丽丝和/或银行的相应公钥。
[0227]
花费事务可以包括锁定到爱丽丝602、银行601和/或商家603的相应公钥的第二输出。多重签名输出可用于将输出锁定到m个公钥的总集合中的至少n个公钥。
[0228]
花费事务可以包括第三输出,该第三输出包括(例如)可花费输出或不可花费输出中的第二数据。图8b示出了第二数据的示例。在该示例中,第二数据可以包括上述提取事务的第一数据中包含的项目中的部分或全部。第二数据可以包括已花费货币序列号(即第一货币序列号)和爱丽丝的的剩余余额。第二数据可以包括下面讨论的附加项。
[0229]
图11a示出了不可追溯花费事务的示例。与可追溯花费事务一样,不可追溯花费事务包括第一货币序列号。在该示例中,第一货币序列号包含在花费事务的第一输入中。花费事务的第一输入可以引用提取事务的第一输出,从而创建事务链。如果提取事务的第一输出需要,则第一输入可以包括爱丽丝的签名siga和/或公钥pa。花费事务可以包括第二输出,该第二输出包括商家的签名sigm和/或公钥pm。第二输出可以引用锁定到商家公钥pm的事务输出。
[0230]
不可追溯花费事务可以包括第一输出,该第一输出包括表示已花费的第二数据的哈希值。该输出可以由爱丽丝签名,这充当爱丽丝602已证明花费的证据。第二数据本身可以包含在事务的不同输出中(图11a中的第三输出)。第一输出可以被配置为要求后续事务的输入包括第二数据本身。花费事务的第二输出可以被锁定到爱丽丝602、银行601和/或商家603的相应公钥。
[0231]
第二数据可以包含在可花费输出或不可花费输出中。图11b示出了第二数据的示例。与图8b的示例一样,第二数据可以包括上述提取事务的第一数据中包含的项目中的部分或全部。第二数据可以包括已花费货币序列号(即第一货币序列号)。
[0232]
爱丽丝602添加她的输入(即,包括她的签名siga的输入)和事务的输出之后,商家603即可对(可追溯或不可追溯)花费事务进行签名。然后,商家603可以将花费事务提交给区块链网络,或者将花费事务发送给爱丽丝602,以便她将其提交给区块链网络。再如,商家603可以向第三方提交花费事务,该第三方可以是服务提供商,例如钱包提供商。
[0233]
可选地,爱丽丝602可以向商家603提供提取事务,或者商家可以(例如)使用爱丽丝602提供的事务标识符txid从区块链获取提取事务。商家603可以检查花费事务的第一输入解锁提取事务的第一输出,或者至少引用提取事务的第一输出。
[0234]
存入
[0235]
一旦满足由商家603施加的一个或多个条件并且商家已决定接受,例如作为对商品或服务的付款,商家会联系银行601以存入并赎回由表示的资产的数额。
[0236]
商家603将第一货币序列号发送给银行601。商家603可以将第一货币序列号直接发送给银行601。附加地或替代地,商家603可以向银行601提供包括第一货币序列的花费事务,或花费事务的至少一个事务标识符txid。作为另一选项,银行601可以在收到事务被锁定到其公钥pb的警报后,直接从区块链获取花费事务。
[0237]
银行601检查第一货币序列号是否存在于由银行601保存的已花费货币序列号的记录中。货币序列号可以保存在区块链150上,即,将序列号记录在链上事务中或单独的数据库中。如果存储在数据库中,则可以扫描区块链150获取序列号,例如当货币标志出现在
链上时。该数据库也可以存储在区块链150上。如果第一货币序列号存在于数据库中,则由第一货币序列号表示的已经花费,因此将拒绝商家603对的存入。如果第一货币序列号不存在于数据库中,则银行601可以接受,并将由表示的资产的数额转移到商家603。为了使银行601将资产数额转移到商家603,可能必要满足一个或多个进一步的条件。
[0238]
商家603获取存入事务。商家603可以全部或与银行601协作生成存入事务。存入事务包括引用花费事务的输出(例如第二输出)的输入。存入事务可以包括商家的签名sigm和/或银行的签名sigb。商家603可以生成存入事务并将其提交给区块链网络,或者商家603可以生成存入事务并将其传输给银行601,以便银行将其提交给区块链网络,甚至传输给第三方,例如钱包提供商。或者,银行601可以生成存入事务,然后将其提交给区块链或商家603。
[0239]
图9a示出了可追溯存入事务的示例。在该示例中,存入事务的第一输入由银行601和商家603同时签名。也就是说,第一输入包括银行的签名sigb和商家的签名sigm。第一输入引用花费事务的输出。在该示例中,第一输入引用花费事务的第二输出,即多重签名输出。
[0240]
存入事务可以包括第三数据。图9b中示出了第三数据的示例。第三数据可以包括与第一数据和/或第二数据一样的一个或多个数据字段。第三数据可以包括存入货币的价值的指示。如果银行601在发现爱丽丝602试图对进行双重花费时生成存入事务,则第三数据可以包括向爱丽丝602发行的任何剩余未花费的序列号。
[0241]
图12a示出了不可追溯存入事务的示例。与图9a所示的示例性存入事务类似,存入事务的第一输入由银行601和商家603同时签名。第一输入引用花费事务的输出,例如不可追溯花费事务的第一输出。在该示例中,不可追溯花费事务的第一输出包括第二数据的哈希难题。换句话说,不可追溯花费事务的第一输出包括脚本,该脚本被配置为要求尝试解锁第一输出的后续事务的输入包括第二数据形式的原像。因此,在该示例中,存入事务的第一输出包括原始形式的第二数据。
[0242]
存入事务可以包括一个或多个输出。如图12a所示,存入事务可以包括锁定到银行601的公钥pm的第一输出。存入事务可以包括第二输出,该第二输出包括第三数据。图12b示出了第三数据的示例。
[0243]
其他可选条件
[0244]
在一些实施例中,为了使银行601接受而必须满足的条件之一是花费事务包括引用和解锁提取事务的输出的输入,例如由银行601签名的提取事务。类似地,为了使商家603接受而必须满足的条件之一是爱丽丝602提供由银行601签名的提取事务或对提取事务的引用。
[0245]
在附加或替代实施例中,为了使银行601接受而必须满足的条件之一是花费事务包括由爱丽丝602和/或银行601签名的输入。在一些示例中,必须存在两个签名。
[0246]
在一些实施例中,爱丽丝602可以向商家603传输货币种子证明。货币种子证明是爱丽丝602知道银行对货币种子的盲签名σb的证明。在一些示例中,货币种子证明可以仅仅是盲签名本身。在其他示例中,货币种子证明可以是零知识证明。上面已经讨论了零知识证明。商家603可以基于货币种子证明来确定爱丽丝602是否确实知道银行对货币种子的签名σb。商家603接受的条件之一可以是货币种子证明可证明爱丽丝602知道签名σb。
[0247]
在一些实施例中,商家603可以在尝试存入时将货币种子证明传输到银行601。与商家603一样,银行601可以基于货币种子证明来确定爱丽丝602以及商家603是否确实知道银行对货币种子的签名σb。银行601接受的条件之一可以是货币种子证明可证明爱丽丝602知道签名σb。
[0248]
在一些实施例中,爱丽丝602可以生成一个或多个双重花费种子。每个双重花费种子可以用于生成双重花费值。上文已经描述了双重花费值。爱丽丝602可以向银行601传输一个或多个双重花费种子的加盲版本,银行601返回一个或多个双重花费种子的盲签名σb。一个或多个双重花费种子的签名σb可以是货币种子的相同签名σb。也就是说,银行601可以将货币种子和双重花费种子作为整体进行签名。
[0249]
当在商家603处花费时,爱丽丝602可以使用相应的双重花费种子生成一个或多个相应的双重花费值。爱丽丝602向商家603传输双重花费值,例如作为花费事务的一部分。每个双重花费值基于双重花费种子、爱丽丝602的标识符(例如,她的银行账号、公钥、护照号等)以及由商家603选择并发送给爱丽丝602的数据项中的一个。数据项随着爱丽丝602与商家603之间的每次交互而变化。例如,数据项可以基于交互的时间和/或日期、爱丽丝602购买的商品或服务的发票或任何其他变量。由于数据项不同,由爱丽丝602生成的每个双重花费值所揭示的爱丽丝的标识符的组成部分也不同。如果爱丽丝602试图对同一货币进行双重花费,则将揭示关于她的标识符的足够信息,以便银行601对她进行识别。
[0250]
当商家603存入时,商家603向银行601传输双重花费值。如果银行601发现第一货币序列号存在于已花费货币序列号的记录中(即,在区块链150上),则银行601可以使用双重花费值以及先前接收的双重花费值(即,当第一首次存入时接收的那些双重花费值)揭示爱丽丝的身份。如果爱丽丝602拥有任何剩余未花费,则银行601可以将这些货币列入黑名单。下面讨论将货币列入黑名单的示例。
[0251]
爱丽丝602可以向商家603传输双重花费种子证明。双重花费种子证明是爱丽丝602知道银行的双重花费种子的盲签名σb的证明。在一些示例中,双重花费种子证明可以仅仅是盲签名σb本身。在其他示例中,双重花费种子证明可以是零知识证明。上面已经讨论了零知识证明。商家603可以基于双重花费种子证明来确定爱丽丝602是否确实知道银行对双重花费种子的签名σb。商家603接受的条件之一可以是双重花费种子证明可证明爱丽丝602知道签名σb。在一些实施例中,商家603可以在尝试存入时向银行601传输双重花费种子证明。与商家603一样,银行601可以基于双重花费种子证明来确定爱丽丝602以及商家603是否确实知道银行对双重花费种子的签名σb。银行601接受的条件之一可以是双重花费种子证明可证明爱丽丝602知道签名σb。
[0252]
在一些实施例中,爱丽丝602可以生成商家标识符r(例如,包括公钥pm)和商家603选择的数据项的哈希值。如上所述,数据项可以基于爱丽丝602与商家603之间的交互,例如交互的日期和/或时间。爱丽丝602可以向商家603传输商家标识符r的哈希值,例如作为花费事务的一部分。商家603接受的条件之一可以是商家603同意商家标识符r的哈希值。向银行601存入时,商家603可以向银行601传输商家标识符r的哈希值。银行601可以保存接收到的商家标识符哈希值(即商家标识符的相应哈希值)的记录(链上或链下)。银行601接受的条件之一可以是最近接收到的商家标识符哈希值没有出现在记录中(例如,在区块链150上)。如果商家标识符哈希值确实出现在数据库中,则意味着商
家试图对进行双重花费。
[0253]
示例性事务
[0254]
图13a至图13c分别示出了可以在任何数字现金协议中使用的示例性通用提取、花费和存入事务。这些示例性事务可用于任何协议,其中发生改变的事务的唯一部分是op_return数据。
[0255]
图13a示出了通用提取事务。爱丽丝602从银行601获取对货币序列号的签名σb。创建提取事务,以表示已经发生该交互。该事务中的输入来自可追溯协议中的银行601,或来自不可追溯协议中的爱丽丝602。这些数据将针对每个系统指定。
[0256]
图13b示出了通用花费事务。爱丽丝602向商家603证明她拥有货币(具有正确格式)和银行601对货币的签名σb。创建花费事务以表示商家603已接受她的花费,其中输入来自提取事务。该事务包含货币的序列号和附加信息,如果她进行双重花费,则该附加信息可以识别她。如果在可追溯的情况下有另一个货币要花费,则存在与提取事务中的输出具有相同格式的附加输出,使得爱丽丝602可以花费下一个货币。op_return中的数据应该针对每个系统指定。
[0257]
图13c示出了通用存入事务。商家603向银行601提供他们诚实接受货币的证明。创建存入事务,该事务花费了花费事务的输出,表示存入已被接受。对于可追溯协议和不可追溯协议,该事务是相同的。op_return中的数据应该针对每个系统指定。
[0258]
示例性协议
[0259]
可追溯
[0260]
下面描述了利用区块链来防止双重花费的示例性可追溯协议。在可追溯协议中,由于每个花费事务都链接到由银行601签名的提取事务,因此是可追溯的。此链接的结果是,更容易证明货币确实是由银行601发行的。
[0261]
爱丽丝602希望从银行601提取钱包,并在商家603处花费一些,然后商家603将向银行601存入货币。银行601具有公钥/私钥对(pkb,skb)。在该协议中,银行601可以同时对(i+3)消息进行签名。然后,银行的公钥是(n,a1,...,a
i+3
,b,c),私钥是p1,使得n=p1p2是特殊rsa模数。下面的示例性协议使用i=1,但很容易修改协议以获取更大的i。这种扩展可以提交附加秘密,然后在双重花费事件中揭示这些附加秘密。另外,爱丽丝602和商家603分别具有其自己的唯一密钥对,使得对于一些(pku,sku)=(gu,u),其中q是素数,并且g∈g,如前所述。最后,所有用户还具有其自己的(pk=sk
·
g,sk)形式的椭圆曲线(ec)公钥/私钥对,使得他们可以接收和花费比特币。爱丽丝的密钥对表示为(pa,ska),银行的密钥对由(pb,skb)给出,最后,商家的密钥对为(pm,skm)。
[0262]
爱丽丝联系银行601并要求银行提取价值为的钱包w,该钱包包含货币序列号的种子和双重花费方程。她向银行601发送提交的种子(u,s,t),然后银行601对该提交进行签名,并返回该签名σb。货币的总价值从她的账户中取出。
[0263]
为了提取货币,采取以下步骤。应当注意的是,在该协议中,由于知道货币j的内部计数器值的零知识证明的性质(其中lj是计数器的按位长度),爱丽丝602只能提取包含个货币的钱包。
[0264]
爱丽丝602通过使用引言中描述的零知识证明来证明知道sku,从而向银行601证
明自己的身份。爱丽丝602和银行601现在按照以下方式生成钱包秘密。爱丽丝602选择随机值并将佩德森承诺发送给银行601。银行601选择随机整数r

贡献给钱包并将该随机整数发送给爱丽丝602。银行和爱丽丝分别计算
[0265]
该步骤实质上是创建钱包秘密,并且使银行601对此作出随机贡献。爱丽丝602和银行601运行cl签名协议,以获取银行对佩德森承诺a中的值的签名,从而生成签名
[0266]
σb(u,s,t)=(v,r,e),其中上面的预备知识部分给出了计算该签名的方法,其中(x1,x2,x3)是(u,s,t)。
[0267]
爱丽丝602保存钱包w=(u,s,t,σb(u,s,t),j),其中j是被初始化为零的lj位计数器。应当注意的是,银行601的签名仅位于钱包种子s,t上,使得序列号和双重花费方程并不一定需要存储在钱包中,而是可以在需要时使用钱包种子和钱包计数器导出。银行601为对应于爱丽丝602的账户记录存入个货币。
[0268]
钱包具有以下形式
[0269]
w=(u,s,t,σb(u,s,t),j),
[0270]
其中
[0271]
·
u是爱丽丝的私钥,
[0272]
·
s是货币序列号的种子,
[0273]
·
t是双重花费方程的种子,
[0274]
·
σb(u,s,t)是银行对这些值的签名,以及
[0275]
·
j是钱包的计数器。
[0276]
此外,钱包可以包括附加变量,如果爱丽丝602进行双重花费,则这些附加变量将用于揭示更多秘密。附加变量表示为(z1,...,z
l
),其中l是想要揭示的附加秘密的数量。应当注意的是l∈[0,n-3),其中cl签名方案组是模数n,且范围达到n-3,因为j.camenisch、s.hohenberger和a.lysyanskaya在2005年密码技术理论和应用年度国际会议上发布的“压缩e-cash”中描述的camenische、hohenbeger和lysyanskaya(chl)协议中已经有3个待签名的值(详情见下文)。银行601使用其他钱包秘密对这些新变量进行签名,使得钱包现在为
[0277]
w=(u,s,t,(z1,...,z
l
),σb(u,s,t,(z1,...,z
l
)),j)。
[0278]
这些附加钱包秘密可用于计算l个双重花费方程z1,...,z
l
,计算方式与t用于计算chl中的t完全相同。
[0279]
chl中的钱包种子s通过以下公式得出
[0280]
s=s

+r


[0281]
其中爱丽丝602随机选择s

,而银行贡献r

。s

按照以下方式从另一随机变量推导出
[0282]s′
:=hash(gs″
),
[0283]
其中s

是这一新的随机变量并且被解释为爱丽丝对钱包种子的贡献。因此,钱包种子s现在被定义为
[0284]
s=hash(gs″
)+r


[0285]
其中,爱丽丝随机选择s

,而银行601随机选择r

。以这种方式重新定义种子s的目的是可以立即从新的双重花费方程推导出
[0286][0287]
其提供的特征与原始实现方式中的t相同(见下文中对chl协议的描述),结果是,如果爱丽丝602进行双重花费,则她的种子现在可由银行601推导出。这可以通过以下方式来完成。如果爱丽丝602进行双重花费,则银行601将知道z和r的两个不同值,标记为z1,r1,z2,r2。然后,他们可以计算
[0288][0289]
并且可以计算出完整种子
[0290]
s=hash(gs

)+r


[0291]
其中r

是银行自己的贡献,银行将其与爱丽丝提款时的信息存储在一起。然后,剩余序列号可以使用下列货币序列号的等式
[0292][0293]
针对所有剩余的情况进行计算。然后,银行601可以通过发布未花费的序列号将她钱包中所有这些未花费的货币列入黑名单。该过程可以针对任意数量的附加秘密重复执行,只要秘密的形式为g

。这种双重花费值z现在包含在货币的交换中。此时,银行601已向爱丽丝602发行钱包,其具有以下形式
[0294]
w=(u,s,t,z1,σb(u,s,t,z1),j),
[0295]
因此,银行601广播如图7a中给出的事务。
[0296]
第一输出包含可以由爱丽丝pa或银行pb解锁的1/2多重签名,以及第一货币的序列号的哈希值。所有后续货币输出也具有这种格式。这意味着,为了解锁这些输出中的任何一个,需要知道货币的序列号,此时只有爱丽丝602知道该序列号。在爱丽丝602进行双重花费的情况下,银行601只能先计算货币的序列号,然后序列号才会出现在链上。然后,他们可以花费这种形式的任何货币输出,从而导致货币被列入黑名单。锁定脚本中的这种额外要求意味着银行601不能恶意地将货币列入黑名单。应当注意的是,由于序列号在链上,因此对爱丽丝602而言,以随机顺序花费序列号更安全。要做到这一点且不需要存储所有已花费序列号的一种方式是随机选取a∈j,并选取使得最大公约数为然后选择然后选择来花费第i个货币。通过该过程,她不需要追溯她已经花费的货币的序列号,只需要跟踪花费的总数和初始值a和b,因为直到所有货币都花费完才会重复计数器。事务中的第二输出只是改回到银行601。
[0297]
最后,op_return输出中给出的数据如图7b所示,其中第一字段指定货币表示的法定货币,货币协议标志指定发行货币使用的数字现金协议,货币动作标志指定该事务所对应的动作(在这种情况下该动作是提款),并且货币的价值是已提取货币的数量。在该示例中,64个货币被发行。此后,如果需要,还可以添加任何附加信息。
[0298]
可以一次发行多个货币。作为一个选项,钱包的余额可以在op_return数据中给
出。然后,接受来自爱丽丝602的货币的任何人都可以检查该余额和先前花费的价值是否一致。这也保证了计数器在正确的范围内。在这种情况下,很容易一次花费多个货币,因为这些货币可以很容易地列在op_return中。作为另一选项,提取事务中可以有多个p2pkh输出。然后,每个输出表示单个货币,并且每花费一个货币时就花费一个输出。钱包的余额可轻松地通过事务的未花费输出的数量来计算,并且在该协议中,将货币列入黑名单货币非常容易,因为花费其相应的未花费事务输出(utxo)会导致被列入黑名单。这种情况的缺点是,如果所发行的货币数量很大,则utxo的数量将很大,这就给矿工带来了保存该数据的负担。每种情况都有优点和缺点;优选情况将取决于具体情况。该示例性可追溯协议中使用第一选项。
[0299]
在该示例协议中,为了花费货币,爱丽丝602向商家603提供:
[0300]
·
货币的序列号,
[0301]
·
双重花费方程,其使用爱丽丝从商家获取的r计算。
[0302]
·
零知识证明,证明所有这些方程的格式正确。
[0303]
·
知道签名σb的零知识证明是银行对值(u,s,t,z1)的签名。
[0304]
·
计数器j在正确范围内的证明,以及
[0305]
·
提取事务和任何进一步花费事务。
[0306]
假定爱丽丝602提取x个货币。这些货币的序列号都具有相同的种子“s”,因此为了创建不同的序列号,货币中也可以有一个从1到x的计数器,并且在序列号中包括该计数器实质上意味着每个货币具有不同的序列号。可能需要爱丽丝602证明给定的序列号是从种子和计数器推导出的。该范围可以是任意的,例如从1,...,x推导出。然而,没有什么能阻止她创建从x+1,x+2,...,推导出的货币序列号,并且认为这是从银行602提取的货币,此为对种子进行签名的证明。为了防止这种情况,爱丽丝添加了计数器值在1,...,x之间的证明。
[0307]
更详细地,为了花费货币,爱丽丝602和商家603执行以下步骤。爱丽丝602计算r=h(pkm||info),其中info是由商家603选择的某个变量,并且h是某一抗冲突哈希函数。info需要随每个事务而改变,以确保相应的双重花费方程将有所不同,例如花费的时间和日期、花费的发票或事务计数器。爱丽丝602计算货币序列号和双重花费方程
[0308][0309][0310][0311]
其中
[0312][0313]
是预备知识部分中给出的dy伪随机函数。由于双重花费值取决于商家id及其输入info,因此无法在此之前计算这些值。
[0314]
爱丽丝602发送知道(u,s,t,z1,σb,j)的零知识证明,其按照以下方式转换为消息上的单个签名φ。该签名证明j在正确的范围内,s,t和z的格式正确,签名σb的格式正确。这可以通过以下方式来完成。假设a=pedcom(j)。证明a是对范围内的整数的承诺。假
设b=pedcom(u),c=pedcom(s),d=pedcom(t),e=pedcom(z1)证明知道对u,s,t和z1的cl签名且不揭示它们。证明序列号s和双重花费方程t的格式正确。然后,签名在消息上。
[0315]
最后,爱丽丝602正在花费的货币具有以下形式
[0316]
(s,r,t,z,φ)。
[0317]
如果签名φ得到验证,则商家接受货币(s,r,t,z,φ)。应当注意的是,φ
[0318]
用作向银行证明商家603行为正确的证明。最后,爱丽丝602更新其计数器j=j+1。当时,钱包为空。
[0319]
如果向商家603提供提取事务并且所有货币的链的花费开始于该事务,则这会向商家603证明货币是由银行601发行的。然后,爱丽丝602需要证明序列号和双重花费方程是根据种子s,t,z1和计数器j正确计算的,银行601已对值(u,s,t,z1)进行签名,并且计数器在正确的范围内。这是使用以下消息上的知识签名φ的零知识证明进行总结的,
[0320][0321]
利用该信息,商家603必须首先检查货币还没有花费或被列入黑名单。为此,商家603可以检查货币还没有出现在事务的op_return数据字段中。如果商家发现该货币已经出现,则商家会拒绝该货币。否则,商家会检查序列号和双重花费方程格式正确的零知识证明,并检查j在正确的范围内。另外,商家603可以检查已花费货币的数量与钱包的余额是否一致。如果货币通过这些检查,则商家603接受货币。
[0322]
商家603接受货币后,爱丽丝602和商家603即可创建图8a中给出的花费事务。
[0323]
爱丽丝602通过签署提取事务的输出作为她的输入来创建事务。然后她创建3个输出。第一输出对应于爱丽丝602希望花费的下一个货币,从而可以重复该花费协议。第二输出将用于向银行601存入货币。第三输出包含所花费货币的数据。由于她需要对3个输出进行签名,因此她使用标志sighash_all|sighash_anyonecanpay。因为爱丽丝602使用该特定标志,因此在爱丽丝602对其签名之后,商家603只能添加其输入,但不能添加输出。需要来自商家603的输入,从而记录他们已接受该货币作为来自爱丽丝602的付款。或者,要求商家603首先对事务进行签名也将需要交换一些事务数据,因此让爱丽丝602首先对事务进行签名并将其与知识的零知识证明一起发送更有利。然后,商家603使用其输入对事务进行签名,并将其广播到区块链网络。
[0324]
应当注意的是,为了解锁第二输出,它必须具有三个签名中的两个。如果接受了存入,则为商家603和银行601的签名。如果各方中的一方采取恶意行为,则签名者的其他组合仅用于确保安全。应当注意的是,在该协议中,如果以下存入事务包含该输出(使用其自己的公钥pb进行签名)和商家公钥pm,则银行601将只接受。最终输出包含图8b所示形式的数据。该事务是商家603已接收货币的确认。由于r依赖于商家id,因此除商家603之外,没有其他商家可以存入货币。货币序列号现在在链上,因此其他商家不应该接受具有相同序列号的货币。如果爱丽丝602向商家603呈现已经在链上的序列号,则即使该商家不接受该序列号,该商家仍然可以发布货币信息s,r,t,z。这意味着银行601能够计算她钱包中的任何剩余的未花费货币,并将这些货币列入黑名单。对于提交双重花费者的商家,可以选择对其进行奖励。
[0325]
在该协议中,当序列号在链上时,商家603可以等待与银行601联系以存入货币,并且如果确实发生了双重花费,此时就可以将其识别出。在存入期间,银行601必须进行与商家603相同的检查,并且另外检查r的原像确实是商家的id(以及一些其他信息info)。银行601还检查所有先前的事务是否具有正确的形式,并拒绝没有正确形式的存入,这确保所有用户都将遵守协议。一旦序列号被呈现并且被发现不是双重花费,商家603和银行601将对存入事务进行签名,如图9a所示,该存入事务充当货币已经存入的确认。商家603创建事务模板,对输入进行签名,然后可以将其作为关于货币的其他信息同时发送。然后,银行601将其签名添加到输入中,并将事务广播到区块链。该事务表示银行601已接受来自商家603的存入货币。数据具有图9b的形式。
[0326]
为了存入货币,商家603将货币(s,r,t,z,φ)提供给银行601。如果φ得到验证并且r先前没有被存入(即,(s,r)还不在所花费货币的列表中),则银行将(s,r,t,z,φ)添加到该列表中并且记入商家账户。如果银行601发现货币序列号s已经在数据库中,则该银行检查r是否也相同。然后存在两种可能的情况。
[0327]
如果r相同,则银行601认为商家603已存入货币,并且该商家应受惩罚。在这种情况下,可以仅仅是商家603应受惩罚,或者爱丽丝602和商家603两者均应受惩罚。银行601可以放心地假设这一点,因为商家603没有理由与爱丽丝602串通。在这种情况下,爱丽丝602不能被识别并受到惩罚,因此只有商家603遭受损失。这种情况可以使用区块链,通过利用事务输出仅为未花费或已花费输出的二进制性质来解决。因此,当使用区块链时,双重花费的任一种情况都是完全不可能的。
[0328]
如果r不同,则必须至少是爱丽丝602行为不诚实(并且可能商家603也行为不诚实),并且银行601可以计算他们两个的身份。为了计算爱丽丝的身份,需进行以下计算。将前一个数据库条目表示为r1,t1,将当前值表示为r2,t2。然后,银行601可以使用以下公式计算爱丽丝的公钥
[0329][0330]
对应于z1和z2的等效计算使gs″
可用于推导出所有货币序列号,从而将未花费货币列入黑名单。
[0331]
最后,在商家603也应受惩罚的情况下,info将是不同的,并且pkm在双重花费货币的两种版本中是相等的。由于info和pkm与每个存款一起存储,银行601可以立即检测到这一情况,并且该银行能够惩罚爱丽丝602和商家603。因此,任何一方都没有串通的动机。
[0332]
如果是货币是双重花费的情况,其中货币序列号在区块链上出现两次,则银行601将只接受首先出现的货币。然后,银行601使用来自两次事件的等式通过双重花费值t1,t2和商家idr1,r2计算双重花费者的身份。另外,可以类似的方式通过z1,z2和r1,r2计算种子。这些计算上文已经说明。然后,银行601可以计算爱丽丝的身份gu和货币种子s。然后,银行601可以导出对应于爱丽丝602的序列号,并且在链上发布这些序列号,从而将货币列入黑名单。该协议自然也允许银行选择对向银行601提交爱丽丝602的商家603进行奖励,包括在上述事务中对商家603进行的付款。
[0333]
回想一下,如果是双重花费货币具有相同的序列号和商家id的情况,则银行601知
道商家603必须是应受惩罚的。如果存入完全遵循上述所有事务,则商家603将永远不可能在该协议中存入两次货币,因为第一存款将花费第二存款所需的utxo。
[0334]
不可追溯(chl)
[0335]
该示例性协议去除了货币的可追溯性,导致商家603和银行601验证货币被正确发行的负载增加。该负载将包括在上述可追溯协议中执行的相同检查,具有不可能进行双重花费的附加特征-可以立即检测到双重花费的任何尝试。
[0336]
与可追溯协议类似,爱丽丝602希望从银行601提取一些,在商家603处花费这些,然后商家603将这些存入银行601。设立步骤与前述的设立步骤相同。银行601具有公钥/私钥对(pkb,skb)。然后,银行的公钥是(n,a1,...,a4,b,c),私钥是p1,使得n=p1p2是特殊rsa模数。另外,爱丽丝602和商家603分别具有其自己的唯一密钥对,使得对于一些(pku,sku)=(gu,u),其中m是素数,并且g∈g,如前所述。所有用户还具有其自己的(pk=sk
·
g,sk)形式的ec公钥/私钥对,使得他们可以接收和花费比特币。爱丽丝的密钥对表示为(pa,ska),银行的密钥对由(pb,skb)给出,最后,商家的密钥对为(pm,skm)。
[0337]
在该协议中,爱丽丝602提取具有以下形式的钱包
[0338]
w=(u,s,t,z1,σb(u,s,t,z1),j),
[0339]
其中u是爱丽丝的私钥,s是货币序列号的种子,t,z1是双重花费方程的种子,σb是银行601对秘密的签名,j是钱包的计数器。爱丽丝602广播事务以确认提款。对于不可追溯协议,应该存在对应于她钱包中的每个货币的提取事务,然后这些就不会链接在一起。爱丽丝602稍后创建提取事务,以从银行601提取钱包。如果她同时这样做,则银行601很可能能够知道该事务对应于哪一个提款。在实践中,识别爱丽丝602的简单程度将取决于ecash系统的用户数量。如果只有一个(或几个)用户,则无论他们何时将提取事务放在链上,银行601都可以轻松识别用户。
[0340]
爱丽丝602创建她自己的表示每个货币的提取事务。应当注意的是,由爱丽丝602而不是由银行601创建提取事务是可追溯协议和不可追溯协议之间的关键区别。该事务具有图10a中给出的形式。该事务表示单个货币。如前所述,锁定脚本包含货币的哈希值,使得银行601只有在知道货币序列号的情况下才能花费输出,这仅在爱丽丝602进行双重花费时才会发生。
[0341]
图10b中示出了op_return数据。在该协议中,货币具有设定值,因此不需要余额,因为每个utxo表示1个单位值。爱丽丝602可以在她想要的任何时候创建该事务,只要该事务是在花费协议发起之前创建的。如上所述,对爱丽丝602而言,在提款之后的任意时间以及在与对应于钱包中其他货币的事务不同的时间创建该事务更安全,否则会损害隐私。除非相应的提取事务具有这种格式,否则银行601将不接受存入的货币。这可以防止爱丽丝602发生恶意行为,例如创建银行601无法花费的输出。
[0342]
为了花费货币,爱丽丝602向商家提供货币的序列号、双重花费方程、序列号和双重花费方程与钱包秘密格式正确的零知识证明、知道银行601对钱包秘密的签名的零知识证明、计数器在正确范围内的零知识证明以及提取事务。
[0343]
上述证明全部作为以下消息上的一个知识签名φ发送
[0344][0345]
其中存在对应于附加秘密z1的附加承诺e,其被定义为
[0346]
e=pedcom(z1)。
[0347]
首先,商家603必须检查序列号还没有出现在区块链上。该检查利用的是区块链的不可变历史记录。如果在该搜索中没有到货币序列号,则它就不可能曾经出现在区块链上,并且商家603可以确定它从未被花费过。如果区块链搜索结果明确,则爱丽丝602接下来必须向商家603证明序列号和双重花费方程的格式正确。最后,爱丽丝602必须证明计数器在正确的范围内。
[0348]
一旦商家603接受货币,他们就会进行花费事务,如图11a所示。在该事务中,爱丽丝602添加她的输入并使用sighash_single|sighash_anyonecanpay仅对第一输出进行签名。op_return数据《h2=sha-256(data2)》的哈希值包含在输出中,使得爱丽丝602间接地对其进行签名,并且它不能被改变。然后,她将其发送给商家603,商家603将添加他们的输入,将该输出改回到他们自身并对整个事务进行签名。他们的输入被包括在内,以表示他们在接受货币时的签名。
[0349]
第一输出是由商家603和银行601签名的将在存入事务中使用的输出。在一方发生恶意行为的情况下,签名的其他组合包括在内。该第一输出等同于可追溯花费事务中的第二输出。在这种情况下,第二输出只需改回到商家603,并且最终输出是图11b所示的数据。
[0350]
该事务是商家603所做的记录,他们已接收货币而没有共享存入该货币所需的所有信息,因为除他们自己之外没有人知道以前的r原像。另外,知识证明上的签名是保密的。此处共享的唯一信息是识别双重花费者所需的信息,并且在存入货币之前隐藏了剩余信息。应当注意的是,如果商家603发现爱丽丝602正在尝试双重花费,则银行601可以鼓励他们传递货币的详细信息,从而可以识别爱丽丝602。
[0351]
商家603现在与银行601联系,以便在他们方便时存入货币。银行601将只接受首先在花费事务中出现的货币,并且所有先前的事务具有正确的格式。商家603向银行601提供事务,r的原像和签名φ。然后,银行601通过搜索数据的区块链,确认这是序列号s和r第一次被呈现给银行601,并且这些序列号没有被列入黑名单。这些序列号应该只出现一次,并且出现在呈现它们所使用的事务中。如果这种情况成立,则银行601验证与商家603相同的证明,并且另外验证提取和花费事务的格式正确。如果所有这些检查都通过,则图12a的存入事务将被发布到区块链。
[0352]
该事务表示商家603已存入货币并且银行601已接受该货币。该输入来自花费事务,并且由商家603和银行601签名,表示他们都参与了这次交互。第一输出只是改回到银行(如果有的话),并且第二输出包含图12b中所示的数据。存在用于发布双重花费序列号的空间。如果发现存入是双重花费货币,则银行601可以检查爱丽丝602或商家603是否应受惩罚。如果它是具有相同序列号和商家idr的货币,则商家603被认为应受惩罚,并且银行601拒绝该货币。如果商家id不同,则爱丽丝602应受惩罚。然后,银行601可以使用双重花费方程计算爱丽丝的密钥gu和她的种子s

,并且由此计算所有序列号,花费爱丽丝602创建的所有utxo,并且另外在链上发布序列号。
[0353]
该系统相对于第一个系统的最大优点是货币完全不可追溯。银行601可以知道他们已经向爱丽丝602发行了货币,并且他们可以知道商家603已经存入了货币,但是他们不
知道货币从提取到花费的路线,除非这些是双重花费的结果。
[0354]
可追溯协议和不可追溯协议都可以防止在销售时发生任何双重花费,因为商家在此时检查先前花费的货币,而不是在存入时检查。这将适用于以这种方式实现的任何系统。另外,由于所有事务数据都发布在区块链上,因此可轻松地对进行审计。协议中涉及的任何人都可以证明向审计员证明他们的参与。
[0355]
这些协议利用区块链的两个特性改进先前的ecash系统。所使用的第一个特性是:区块链是不可变的分布式数据库,使得已花费货币的列表对任何人公开可用。这使得接受货币的任何人更容易检查这些货币是否已经花费。另外,这些协议利用已花费或未花费输出的事务的二进制状态。一旦输出的状态从未花费变为已花费,输出就不能被再次花费,因此根本不可能进行双重花费。
[0356]
货币提取、花费和存入的每个阶段都可以相互关联,因此在某种意义上是“可追溯的”。任何人都可以看到,已经被提取、花费和存入,但是用户的身份将对每个人隐藏,知道对应于每个事务中使用的公钥的身份的那些人除外(这通常是区块链的特征)。关键区别在于,在可追溯协议中,银行601将确切知道谁提取了货币,但是在不可追溯协议中,银行601不知道提取人在存入时的身份。
[0357]
下面描述了几个示例性ecash协议,这些协议可以通过指定op_return数据的内容使用图13a至13c中的通用事务来实现。
[0358]
chaum ecash协议
[0359]
图14a至图14c分别示出了根据该协议的用于提取、花费和存入事务的示例性op_return数据。chaum的系统是一种在线ecash系统,这意味着银行必须在线才能在任何货币被花费时接受这些货币。将ecash协议移动到链上会使该协议离线。
[0360]
爱丽丝想要从银行获取货币,然后她将在商家处花费。银行选择两个rsa素数p,q,计算n=p
·
q,并对因式分解保密。然后,在不知道素数因式分解的情况下,在计算上无法计算出整数mod n的第m次根。该概念起到银行对货币进行签名的作用。货币具有以下形式
[0361]
(s,f(s)
1/3
mod n),
[0362]
其中f是某个单向函数(例如哈希函数)并且是公开已知的,并且s是货币的随机种子。然后,f(s)
1/3
mod n是货币序列号。银行计算第三次根是银行对货币的签名。第三次根是任意选择的,并且它可以是对任何m≥2的f(s)mod n的第m次根的计算,只要m的选择对于所有提取的ecash是常数。为了发行货币,需采取以下步骤。
[0363]
爱丽丝选择随机货币种子s和加盲值r,并向银行发送“加盲”货币序列号b=r3·
f(s)mod n。银行返回只有他们可以计算b
1/3
=r
·
f(s)
1/3
mod n的b的立方根,并从爱丽丝的账户中扣除1英镑。立方根的这种计算表示银行的签名。这是因为只有银行知道n的因式分解,因此只有银行才能计算立方根模数n。应当注意的是,总是正好有一个立方根模数n=pq。另一方面,由于银行不知道r的值,因此银行不能确定货币序列号f(s)
1/3
mod n。然而,银行将知道其已经计算出该值,因为其他人无法计算该值。艾丽丝通过将该结果乘以其加盲值r-1
的倒数对货币序列号解盲
[0364]
c=r-1
·b1/3
=f(s)
1/3
mod n,
[0365]
这样她现在具有由种子和货币序列号组成的货币
[0366]
(s,f(s)
1/3
mod n)。然后,爱丽丝存储该货币,准备在需要时花费。
[0367]
应当注意的是,银行此时不知道f(s)
1/3
mod n的确切值,因此,将来将该货币存入时,银行不能将其链接到该交互。然而,银行将知道银行已对其进行“签名”,因为银行可以检查其是一个立方根模数n,并且只有银行能够计算它。在该示例中,仅可以提取单个货币。为了提取多个货币,需要针对不同的s和r重复执行该协议。
[0368]
为了向商家支付1英镑,爱丽丝给商家的正是该货币。商家通过计算货币序列号的立方数以及根据给定的s值计算公共函数f的值来检查货币的形式是否正确
[0369]
c3=(f(s)
1/3
)3mod n,
[0370]c′
=f(s)mod n,
[0371]
并比较两个值。如果这两个值相同,则货币的形式正确。
[0372]
在使用区块链之前,商家会打电话给银行并验证货币还未花费,然后再接受该货币。然后,银行可以另外通过计算与商家相同的结果来检查该货币是否具有正确的形式。一旦货币被验证,银行就会将该货币序列号添加到其数据库中。
[0373]
使用区块链记录chaumian ecash的主要优点是其可使协议离线。商家可以检查该分布式数据库本身,并拒绝已经花费的货币,而不是联系银行立即检查数据库。这适用于任何在线协议:这些货币可以与区块链一起离线。
[0374]
另外,utxo的二进制性质意味着在可追溯协议中完全不会发生双重花费或尝试存入货币两次。这是因为银行不会对同一货币进行多次签名,并且存在表示货币的提取事务的单个可花费utxo。然后,类似地,存入只能发生一次,因为相应提取事务的utxo只能花费一次。在不可追溯协议中,这依赖于该utxo特性和分布式数据库特性。商家和银行现在必须确保没有创建对应于同一货币的其他提取事务。这足以改善chaumian ecash系统。
[0375]
不可追溯ecash
[0376]
图15a至图15c分别示出了根据该协议的用于提取、花费和存入事务的示例性op_return数据。
[0377]
可以扩展上述chaum ecash系统,使得可以在不使用区块链的情况下离线花费现金。为此,可以将提取人的身份合并到货币中,然后如果提取人进行双重花费,则可以计算其身份。还可以在一次提取更多的值(以及在不同时间提取另一个值)。这意味着商家可以等待存入货币,并且如果是双重花费的情况,则可以计算双重花费者的身份。另外,在该协议中,爱丽丝可以花费提取价值高达2
j-1的货币,然后获取任何未花费值中的变更。然而,她不能在另一个商家处花费该变更。
[0378]
在该系统中,银行发布两个rsa整数n、n

,使得n=p
·
q且n

=p

·q′
,其中p,q,p

,q

是素数,并且因式分解仍是秘密。在该实现方式中,爱丽丝的银行账号表示为u,而她的货币计数器表示为j。如果她进行双重花费,则可以推导出她的银行账号,正如我们将看到的。双参数无冲突函数f、g是公开已知的。也就是说,有两个具有双参数的函数。
[0379]
如果爱丽丝希望提取价值2
j-1,的货币,则她需向银行发送t对方程,我们称之为“主要”和“次要”候选方程。主要候选方程将有助于推导出货币的序列号,同时防止双重花费。然后,次要候选方程用于获取事务中的变更。另外,我们将看到对数t与爱丽丝希望提取的货币数量之间的关系。对于每个主要候选方程,爱丽丝随机选择位长度为l的ai,bi,ci,di,ei,ri(其中i=1,...,t)。主要候选方程mi采用以下形式
[0380]
mi=f(xi,yi),
[0381]
其中
[0382]
xi=g(ai||bi,ci),
[0383]

[0384][0385]
其中是xor符号,并且||表示级联。每个次要候选方程mi由以下公式给出
[0386]
mi=g(bi,ei)。
[0387]
爱丽丝使用随机值ri对候选方程进行加盲
[0388][0389]
其中k是货币中主要候选方程的数量。应当注意的是,前j个候选方程将表示最大2
j-1的二进制数,然后货币中剩余k-j个主要候选方程将防止双重花费。这意味着k-j越大,捕获双重花费者的机会越大。加盲次要候选方程为
[0390][0391]
爱丽丝将加盲候选方程发送给银行。银行随机选择一半的方程对,并明确验证这些方程对是否具有正确的形式。然后,剩余t/2对方程,银行不知道其值。可以假设这些方程对是正确的,因为银行随机验证呈现它们所使用的t对方程中的一半。在该示例中,爱丽丝正在提取价值为2
j-1的货币,但是她可能已经发送了更多候选方程,这些候选方程可以在此时被分成多个货币。为完成这一操作,银行可以简单地将剩余的主要候选方程分成大小为k的集合。这样,t的大小取决于爱丽丝希望提取的货币数量。银行选择剩余候选方程的阶数,然后提取以下根
[0392]
对于1≤i≤k,
[0393]
对于1≤i≤j,
[0394]
银行返回加盲主要候选方程的乘积
[0395][0396]
并单独返回次要候选方程。然后,银行记录已发行总价值为2
j-1的货币。然后,爱丽丝提取主要候选方程:
[0397][0398]
并提取用于次要候选方程。爱丽丝现在拥有可花费价值高达2
j-1的货币,并且获取未花费价值的任何变更。
[0399]
为了进行购买,爱丽丝首先将mi的第一个j标记为面额1,2,...,2
j-1
。然后,针对每个0<i≤j,爱丽丝向商家揭示两件事中的一件。如果第i个面额是购买款项中的一项,则爱
丽丝向商家揭示xx的原像和yi。如果第i个面额不在购买款项中,则爱丽丝只揭示xi和yi。最后k-j项用于通过以下方式防止双重花费。商家选择随机二进制字符串z
j+1
,...,zk。如果z
l
=1且j<l≤k,则爱丽丝向商家揭示xi的原像和yi。如果z
l
=0且j<l≤k,则爱丽丝向商家揭示yi的原像和xi。然后,如果爱丽丝进行双重花费,则商家很可能会选择不同的字符串,并且可能根据任何冲突位z
l
计算爱丽丝的账号,正因为如此,双重花费防止越安全,k-j越大。爱丽丝向商家提供货币的所有相关原像。
[0400]
银行通过检查已花费货币的区块链和/或其链下数据库(数据库可以存储在链上)来验证货币之前没有花费。如果没有花费,则银行向数据库添加s以及向商家提供的原像。为了获取变更,爱丽丝将ei以及原像bi和ei提交给银行以进行退款。银行会将i和bi与先前花费的货币进行比较,并且如果这些货币以前呈现过,则会将爱丽丝识别为双重花费者。
[0401]
爱丽丝有可能在商家处花费货币,然后在商家联系银行之前获取退款。如果银行将其身份与变更事务一起存储,则银行可以识别她并向她的账户记帐。然而,如果她再次将该价值作为现金提取,则没有办法防止该现金在她行为诚实的情况下被花费。这种攻击可以通过使用如下所述的区块链来防止。
[0402]
可以修改该方案,使得一旦检测到双重花费,所有由爱丽丝提取的货币都会失效。为完成此操作,可以链接矩阵内的初始候选方程,让这些初始候选方程各自具有对应于其在矩阵中的位置的索引。然后,可以由银行在链上发布黑名单将货币列入黑名单,并且商家可以对照该黑名单检查任何呈现的货币。
[0403]
将这种ecash系统移动到链上可以防止在花费时而不是在存入时进行双重花费。商家还可以向银行报告这种双重花费的尝试,银行将能够在可追溯协议的情况下通过爱丽丝在变更事务上的签名来追溯她。最后,任何双重花费者将具有可从链上呈现的信息推导出的身份。这为用户尝试双重花费提供了另一种制止手段。
[0404]
背书ecash
[0405]
图16a至图16c分别示出了根据该协议的用于提取、花费和存入事务的示例性op_return数据。
[0406]
这种ecash可以作为未背书ecash进行交换,使得爱丽丝可以在揭示完整货币之前证明她拥有货币。
[0407]
该协议具有与chl协议相同的设立和提取步骤。为了让爱丽丝在商家处花费ecash,商家需执行以下步骤。为商家提供货币序列号s和双重花费方程t之前,爱丽丝首先选择随机背书(x1,x2,x3)。她计算未背书货币(s

,t

,φ

,r,y),其中且y=pedcom(x1,x2,x3)。φ

是证明未背书货币(j,u,s,t,σb,x1,x2,x3)有效的零知识证明。应当注意的是,s

,t

只是她将背书的中间值,使得s,t表示的实际货币将是最终提供给银行的价值。上文已经描述了这些价值s,t。未背书货币是一种可以提供给商家的加盲货币。商家可以验证φ

并检查未背书货币是否有效,类似于chl。当爱丽丝和商家愿意继续交换时,将向商家提供背书(x1,x2,x3)。利用这一点,商家可以轻松计算出背书货币
[0408]
(s,t,φ

,r,(x1,x2,x3),y)
[0409]
使用以下等式进行计算
[0410][0411][0412]
然后,这会得到与先前描述的相同等式。这种背书ecash和chl协议之间的差别只是签名φ≠φ

,但是φ

仍然足以证明货币是由银行正确发行的。
[0413]
爱丽丝可以根据自己的需要创建未背书货币,当且仅当她进行双重花费时,仍可以对她进行识别。该过程允许爱丽丝显示她拥有货币而不共享该货币,这意味着她可以向商家证明她确实拥有货币。
[0414]
另外,如果销售没有完成,则爱丽丝仍然可以在别处使用她的未背书货币而不被识别。在chl中,如果爱丽丝向商家提供货币并且交换由于任何原因而没有完成,则她无法在别处使用她的货币而不能被识别。两个不同的商家将具有相同的序列号和不同的双重花费方程,然后双重花费方程可用于计算她的身份。
[0415]
在该协议中,商家存入货币(s,t,φ

,r,(x1,x2,x3),y),银行可以验证与chl货币相同的条件,再加上(u,s,t,σb,j,x1,x2,x3)上的新签名φ

。银行可以按与以前相同的方式,通过为区块链上任何呈现的货币存储(s,t,r)来识别双重花费者。
[0416]
与其他ecash协议一样,现在可以防止在花费时而不是在存入时进行双重花费。这是因为商家可以检查该分布式数据库是否存在先前花费的货币。另外,可追溯ecash通过不可能双重花费utxo来防止双重花费。不可追溯ecash依赖这一点以及任何人都可以检查是否存在先前花费的货币。在该协议中,与其他协议一样,任何人都可以计算双重花费者的身份,因此这对双重花费的尝试也起到另一种制止作用。
[0417]
实用紧凑型ecash
[0418]
图17a至图17c分别示出了根据该协议的用于提取、花费和存入事务的示例性op_return数据。
[0419]
该协议允许一次花费多个货币:一次花费整个钱包,其被称为“紧凑型”花费;或者一次花费多个货币,其被称为“批量”花费。
[0420]
这类似于原始的chl协议,但是银行需要使用签名对四条消息(而不是三条)进行签名,并且银行还对表示计数器上的签名的整数进行签名。假设银行具有公钥/私钥对(pkb,skb),使得银行可以通过cl签名方案使用一个签名对四条消息进行签名。这意味着公钥的形式为(n,a1,...,a4,b,c),私钥是p1,使得n=p1p2是特殊rsa模数。另外,爱丽丝和商家各自生成唯一密钥对,使得对于一些(pku,sku)=(gu,u),其中m是素数,且g∈g。最后,公布银行签名的整数σb(1),σb(2),...,σb(k),其中k=2
l
,即被提取的货币数量。我们称之为σ1:=σb(1),σ2:=σb(2),...,σk:=σb(k=2
l
)。
[0421]
该提取步骤与chl提款非常类似。唯一的不同之处在于,银行对附加变量(称为y)与其他种子一起进行签名。为了提取2
l
个货币,必须采取以下步骤。应当注意的是,在该协议中,由于知道货币j的内部计数器值的零知识证明的性质,爱丽丝只能提取包含2
l
个货币的钱包。
[0422]
爱丽丝通过使用预备知识部分的定义中描述的零知识证明来证明知道sku,从而向银行证明自己的身份。爱丽丝和银行现在按照以下方式生成钱包秘密。爱丽丝选择随机值并向银行发送佩德森承诺
[0423][0424]
银行选择随机整数r

贡献给钱包,并将该随机整数发送给爱丽丝。银行和爱丽丝分别计算
[0425][0426]
该步骤实质上是创建钱包秘密,并且使银行对此作出随机贡献。爱丽丝和银行运行cl签名协议,以获取银行对佩德森承诺a中的值的签名,从而生成签名
[0427]
σb(u,s,t,y)=(v,r,e),
[0428]
其中预备知识部分给出了计算该签名的方法,其中(x1,x2,x3,x4)是(u,s,t,y)。爱丽丝保存钱包w=(u,s,t,y,σb(u,s,t,y),j),其中j是被初始化为零的l位计数器。应当注意的是,银行的签名仅位于钱包种子s,t,y上,使得序列号和双重花费方程并不一定需要存储在钱包中,而是可以在需要时使用钱包种子和钱包计数器导出。银行为对应于爱丽丝的账户记录存入2
l
个货币。
[0429]
此时,协议被分成两部分,这取决于是希望一次花费整个钱包,还是希望花费钱包里货币中的n个货币。如果爱丽丝花费n个货币,她仍然可以花费剩余的货币作为单个chl货币,或者作为另一批大小为n

的货币。
[0430]
对于紧凑型花费,为了花费整个钱包,爱丽丝和商家执行以下步骤。爱丽丝发送=pedcom(s,t,u,y),其中s,t,u与chl协议中的相同,并且y是用于防止双重紧凑型花费的另一个随机数。然后,爱丽丝还发送tc=g
ugr/(y+1)
以及她具有来自银行(s,t,u,y)对σb的签名的证明。最后,爱丽丝向商家披露s,t。如果签名的证明有效并且s,t是正确的,则商家接受货币。
[0431]
对于批量花费,为了花费n个货币,商家采取以下步骤。对于i=0,...,n-1,爱丽丝发送承诺c=pedcom(s,t,u,y,j)以及si=g
1/(s+j+i+1
)和ti=g
ugr/(t+j+i+1)

[0432]
她还发送对(σb,s,t,u,y,σj,j,σ
j+n-1
)的知识签名的零知识证明,其中σj和σ
j+n-1
是对货币计数器的第一个值和最后一个值的签名。知识签名φ的零知识证明是证明知道以下各项的签名:对(s,t,u,y)的签名σb、对j的签名σj、对j+n-1的签名σ
j+n-1
、对于i=0,...,n-1的所有si和ti以及c是对值(s,t,u,y,j)的承诺。如果该知道的零知识证明φ成立,则商家接受货币。
[0433]
在该协议中,商家向银行提供关于货币的所有信息,以及对知识的零知识证明的签名。如果商家存入的是批量花费,银行必须计算所有序列号和双重花费方程来对它们进行存储,就好像它们已经单独花费一样。然后,商家存储(si,ti,r),其中si和ti用于存入的所有单独货币,并且还在紧凑型花费的情况下存储tc。然后,计算双重花费者身份的等式如下。如果爱丽丝执行两次紧凑型花费,则如果爱丽丝进行双重批量花费,则gu=(tr′
/t
′r)
1/(r
′‑
r)
。如果爱丽丝对紧凑型花费中的单个货币进行双重花费,则银行可以按照与chl相同的方式计算爱丽丝的身份。
[0434]
op_return数据与预期的chl ecash几乎完全相同。应当注意的是,在紧凑型花费的情况下对协议稍作了修改,即商家而不是银行必须计算所有序列号。然后,在花费事务的
链上发布。如果商家等待银行计算所有序列号,则爱丽丝可以对作为紧凑型花费来花费的单个货币进行双重花费。
[0435]
与其他协议一样,该协议可防止在花费时而不是在存入时进行双重花费。与先前协议类似,这是因为商家现在可以访问已花费货币的数据库(区块链)。商家可以检查该数据库并拒绝已经花费的货币。另外,可以访问链上信息的任何人现在都可以计算出进行双重花费的任何人的身份。这将阻止任何人,因为他们有损坏自己声誉的风险。
[0436]
brands ecash(bra)
[0437]
图18a至图18c分别示出了根据该协议的用于提取、花费和存入事务的示例性op_return数据。
[0438]
就知识的零知识证明而言,与chl ecash相比,这种离线ecash在计算上更简单,但是结果是一次只能提取一个货币。
[0439]
假设p,q,g,g1,g2是公开已知的系统参数,使得p,q是相应二进制长度为l
p
,lq的大素数,并且的阶数为q。然后,是银行的私钥,公钥是h=g
x mod p。假设是爱丽丝的私钥,她的公钥是银行计算z=(ig2)
x mod p并将其发送给爱丽丝。或者,银行可以发布和作为公钥的一部分,因此用户可以自己对其进行计算。
[0440]
爱丽丝希望从银行提取货币。银行生成随机数银行对该随机数保密,并将a=gw和b=(ig2)w发送给爱丽丝。爱丽丝按照以下方式向银行发送盲货币,以获取银行的schnorr签名。爱丽丝随机生成三个数字和爱丽丝计算s=(ig2)s、和z

=zs。s是货币的序列号,b将用于货币种子的零知识证明,并且z

将构成schnorr签名的一部分。爱丽丝生成另外两个随机数μ,v∈zq并计算a

=a
μgν
和b

=b
sμsν
。这两个值也将构成schnorr签名的一部分。爱丽丝最终计算挑战c

=h(s,b,z

,a

,b

),其中h是导致lh位输出的某个无冲突哈希函数。然后,爱丽丝向银行发送加盲挑战c=c

μ-1
mod q。应当注意的是,爱丽丝会将c

提供给商家,而商家会将其返回给银行,但是关键点在于银行无法识别哪些c和c

相关,因此无法将该存入与爱丽丝的提取联系起来。银行使用r=cx+w mod q响应并存入爱丽丝的账户。如果gr=hca且(ig2)r=zcb,爱丽丝接受。然后,爱丽丝计算r

=rμ+vmod q。这是签名的最后部分。最后,签名货币是(s,b,σ(s,b)=(z

,a

,b

,r

))。
[0441]
如果爱丽丝想要在商家处花费货币,则商家执行以下步骤。为了花费货币(s,b,σ(s,b)),爱丽丝首先将其发送给商家。商家检查s≠1,然后计算挑战r=h0(s,b,idm,date/time)并将其发送给爱丽丝,其中h0是另一个无冲突哈希函数,idm是商家的身份,并date/time表示事务发生的时间。爱丽丝计算r1=r(us)+x1mod q和r2=rs+x
2 mod q,并向商家发送响应。商家最终检查签名sig(s,b)是否有效,并检查如果
[0442]gr

=hc′a′
mod p,
[0443]ar

=(z

)c′b′
mod p,
[0444]c′
=h(s,b,z

,a

,b

),成立,则商家接受货币。
[0445]
商家向银行发送包括s,b,σ(s,b),(r1,r2)的付款脚本以及事务的日期和时间。如
果s=1,银行拒绝存入。如果不是,则银行遵循该脚本,使用发送该脚本的商家的身份验证同一信息。如果这一点得到验证,则银行检查s之前是否已经存储。如果没有得到验证,则银行存储(s,date/time,r1,r2,r)并记入商家账户。如果s先前已经出现,则银行按照以下方式确定双重花费者的身份。如果date/time数据相同,则银行知道商家是双重花费者,并立即拒绝货币。如果时间不同,则银行将会知道用户是双重花费者。银行可以使用(r1,r2,r)和(r
′1,r
′2,r

)通过(r
1-r
′1)/(r
2-r
′2)来计算私钥u。然后,银行可以通过计算到双重花费者的身份。
[0446]
再次,将该协议移动到链上会将双重花费检测移动到花费时。这意味着永远不会发生双重花费,因为它会立即被检测到。同样,可以访问区块链的任何人都可以推导出试图进行双重花费的任何人的身份。与其他协议一样,这将阻止用户进行双重花费,以保护他们的声誉。
[0447]
可恢复ecash(ltw)
[0448]
图19a至图19c分别示出了根据该协议的用于提取、花费和存入事务的示例性op_return数据。
[0449]
该协议是brands协议的扩展,这种扩展为该协议增加了恢复中心,使得爱丽丝可以回其丢失的货币。这种扩展实际上可应用于货币不可分割或不可转移的任何协议,如本文描述的所有协议一样。
[0450]
该协议具有与brands相同的参数。也就是说,假设p,q,g,g1,g2是公开已知的系统参数,使得p,q是相应二进制长度为l
p
,lq的大素数,并且的大素数,并且的阶数为q。然后,是银行的私钥,公钥是h=g
x mod p。假设p。假设是爱丽丝的私钥,她的公钥是银行计算z=(ig2)
x mod p并将其发送给爱丽丝。或者,银行可以发布和作为公钥的一部分,因此用户可以自己对其进行计算。
[0451]
在该协议中,还有另一个被称为恢复中心(rc)的实体。假设爱丽丝通过匿名通道与rc通信。
[0452]
为了提取n个货币,爱丽丝需要执行以下步骤。首先,执行brands ecash中的协议,以获取(si,bi,σ(si,bi))(其中i=1,...,n),其中n是货币的数量。rc准备n个数字x1,...xn,使得hn(x1)=hn(x2)=

=hn(xn)=y,其中hn被定义为n冲突密码哈希函数,这会产生lh,位输出。这意味着rc能够到导致该哈希函数具有相同输出的n个输入。另一方面,如果攻击者只知道y,则攻击者很难到该原像。爱丽丝将货币(si,bi,σ(si,bi))发送到rc并记录序列号si。rc检查每个i的签名。如果该签名有效,则rc计算rc发回xi,爱丽丝将xi,附到货币上。rc计算另一个签名sb=σ
rc
(y,n)并将sb,y发送给爱丽丝。爱丽丝将其安全地保存以用于恢复目的。
[0453]
为了在商家处花费货币,爱丽丝需要执行以下操作。爱丽丝和商家以与brands中相同的方式执行支付协议。然后,商家检查是否是对(si,bi,σ(si,bi),xi)的有效签名。商家计算y=h

(xi)并检查y是否在黑名单上,该黑名单是作为丢失报告给银行的所有货币的列表。如果这些检验全部得到验证,则商家接受货币。
[0454]
为了向银行存入货币,需要完成以下步骤。商家和银行像在brands中一样进行存入。另外,银行检查每个货币的xi的哈希值是否在黑名单中。如果不在黑名单中,则接受货币。
[0455]
为了回丢失的货币,爱丽丝必须执行以下步骤。爱丽丝向银行揭示她的身份并将(sb,y)发送给银行。银行检查sb是否是对(y,n)的有效签名。银行检查数据库以查其h

值等于y的所有货币。货币的最大数量应该是n。这些是已经花费的货币。银行计算货币总数额与花费数额之间的差额,并返回该值的差额。为了防止双重花费,随后将该y添加到公开可用的黑名单中。如果任何客户试图花费退还的货币,则商家将不接受该事务。这与brands系统非常相似。不同之处在于,存在用于广播回的货币的额外空间。
[0456]
该协议已经具有数据库的概念,即商家可以检查列入黑名单的货币。因此,除了能够以与链上的其他ecash类似的方式更早地检测到双重花费之外,将该协议移动到链上自然会将这些已花费货币并入与其他列入黑名单的货币相同的列表中。
[0457]
有界累加器ecash(acc)
[0458]
图20a至图20c分别示出了根据该协议的用于提取、花费和存入事务的示例性op_return数据。
[0459]
该协议使货币存储更加高效,并且涉及有界累加器。累加器是将任意数量的值存储在相同大小的存储器内的概念,其中如果添加了值,则存在见证,如果没有将值添加到累加器,则不存在见证。有界累加器的概念简单来说就是累加器的概念,加上具有可以添加到累加器的值的数量k的上界。
[0460]
假设g,h∈g是g的生成器,阶数为p。假设g的所有元素都具有长度为lg的唯一二进制表示。首先,银行设立公钥/私钥对(x,g
x
),以及具有上界k的有界累加器。每个用户具有(u,gu)形式的公钥/私钥对。
[0461]
为了提取k个货币,爱丽丝需要执行以下步骤。为了提取货币,爱丽丝生成k个随机数si。这些随机数将用于生成货币的序列号。她累积si以形成累加值v,并获取k个见证wi。然后,银行对σb=sig(v,commit(u))进行签名。然后钱包的形式为(σb,si,wi,u)(其中i=1,...,k)。
[0462]
为了花费货币,爱丽丝需要执行以下步骤。商家的身份表示为idm。爱丽丝在她的钱包中选择未使用的随机数并计算
[0463][0464]
爱丽丝生成以下各项的知道π1的非交互式零知识证明
[0465]
·
verify(σb,v,commit(u))=1
[0466]
·
si在v中,使用wi作为见证
[0467]
·
s,t,y格式正确
[0468]
然后,爱丽丝针对使用t作为承诺的y的表示计算其知道π2的签名。这是为了计算zr=r
1-cr2,zu=s
i-cu,使得其中c是知识签名中使用的挑战。在两个签名π1,π2中,待签名的消息是(idm||info),其中info是随着每个事务而变化的一些信息,例如事务号、时间和日期。
[0469]
为了存入货币,商家向银行提供花费协议的通信脚本。银行完全按照商家的做法
验证该脚本。另外,银行可以验证idm是否是商家的身份,并且(idm||info)之前是否未使用,以防止双重花费,防止恶意商家窃取诚实事务并花费货币。如果这些得到验证,则银行存储(s,c,zu)。在双重花费的情况下,s存在于数据库中。然后,银行可以使用u=(z
u-z
′u)/(c
′‑
c)计算u。输出是采用gu形式的双重花费者的身份。如果zu相同,则银行可以认为商家通过尝试双重存入进行恶意行为,并且银行将拒绝存入。
[0470]
该协议可以扩展为包括按照以下方式追溯双重花费者的所有货币。在提款期间,爱丽丝获取对(v,commit(u,tr))的签名,其中tr是随机数。爱丽丝在其自己的私钥u下对tr进行可验证加密,并且银行存储该加密值。在花费协议期间,爱丽丝还计算追溯的r=h(idm||info)
tr
,其中h是哈希函数,从而产生lh位整数。然后,修改签名π1以包括
[0471]
·
verify(σb,v,commit(u,tr))=1
[0472]
·
si在使用wi作为见证的v中
[0473]
·
s,t,y,r格式正确
[0474]
如果爱丽丝进行双重花费,则银行可以计算u,然后对tr进行解密。然后,银行可以将tr列入黑名单,并且任何人可以检查用户是否当前在银行花费,并且拒绝任何进一步的花费。在销售时,商家仅需要检查
[0475]
对于每个被列入黑名单的tr,tag=h(idm||info)
tr
是否与呈现它们所使用的内容相同。
[0476]
与其他协议一样,双重花费的检测发生在花费时,因此这可以完全防止双重花费。除此之外,将该协议移动到链上允许任何人识别双重花费者,这是阻止用户双重花费的一种制止手段。
[0477]
结论
[0478]
应当理解,上述实施例仅通过示例的方式进行描述。更通俗地说,可根据下述任何一个或更多个语句提供一种方法、装置或程序。
[0479]
语句1、一种计算机实现的方法,用于使用区块链实现发行系统,其中每个由发行方向花费方发行,每个表示资产的数额,所述资产可被赎回方赎回以换取所述,其中所述发行方保存货币序列号的记录,每个货币序列号表示相应;所述方法由所述发行方执行并且包括:获取花费事务,所述花费事务为区块链事务并且包括一组货币序列号中的第一货币序列号;确定所述第一货币序列号是否存在于已花费货币序列号的数据库中;以及,响应于满足一个或多个条件,将由所述第一货币序列号表示的所述资产的所述数额转移给所述赎回方,其中所述一个或多个条件中的第一条件是所述第一货币序列号不存在于所述数据库中。
[0480]
花费事务用于传送底层区块链(“第一系统”)的通证(有时被称为币,例如比特币),而是另一种不同系统(“电子现金系统”)的一部分。也就是说,根据需要,花费、提取和存入事务转让底层区块链的通证(例如比特币)数额的所有权,并且还用于转让电子现金系统的的所有权。换句话说,货币序列号标识电子现金系统的,而不标识底层区块链系统的(例如,非比特币)。传统上,区块链通证(例如比特币)的数额不会映射到单独的标识符,其中本发明中的每个由相应的货币序列号单独标识。具体而言,货币序列号不标识底层区块链通证(例如比特币)的数额。
[0481]
语句2、根据语句1所述的方法,其中所述货币序列号的所述记录被保存在所述区
块链上。
[0482]
语句3、根据语句1或语句2所述的方法,其中所述花费事务包括锁定到所述发行方的发行公钥的输出,并且其中所述获取所述花费事务包括从所述花费方和/或从所述区块链获取所述花费事务。
[0483]
语句4、根据语句1或语句2所述的方法,其中所述区块链包括提取事务,所述提取事务包括一个或多个输出,每个输出包括所述一组货币序列号中的相应一个货币序列号的指示。
[0484]
语句5、根据语句4所述的方法,其中所述指示是所述一组货币序列号中的相应一个货币序列号的哈希值。
[0485]
语句6、根据语句4或语句5所述的方法,其中所述发行方与发行私钥-公钥对相关联,并且其中所述方法包括:生成所述提取事务,所述提取事务包括输入,所述输入包括基于所述发行私钥生成的签名;以及,将所述提取事务传输到所述花费方、第三方和/或区块链网络以记录在所述区块链中。
[0486]
例如,第三方可以是服务提供商,例如钱包提供商。
[0487]
语句7、根据语句4至6中任一项所述的方法,其中所述一个或多个条件中的第二条件是所述花费事务包括用于解锁提取事务的输出的输入。
[0488]
语句8、根据语句7所述的方法,其中所述提取事务的所述输出被配置为在与后续事务的输入一起执行时要求所述后续事务的所述输入要求所述第一货币序列号。
[0489]
语句9、根据语句6至8中任一项所述的方法,其中所述花费方与花费私钥-公钥对相关联,并且其中所述提取事务的所述输出被配置为在与后续事务的输入一起执行时要求所述后续事务的所述输入要求基于所述花费私钥生成的签名。
[0490]
语句10、根据语句3或其从属语句所述的方法,其中所述一个或多个条件中的第三条件是所述提取事务包括输入,所述输入包括基于所述发行私钥生成的所述签名。
[0491]
语句11、根据前述任一项语句所述的方法,其中所述赎回方与赎回私钥-公钥对相关联,并且其中所述一个或一个条件中的第四条件是所述花费事务包括另一输入,所述另一输入包括基于所述赎回私钥生成的签名。
[0492]
语句12、根据前述任一项语句所述的方法,包括:获取存入事务,所述存入事务包括引用所述花费事务的输出的输入,并且包括以下各项中的一项或多项:基于所述发行私钥生成的签名、基于所述花费私钥生成的签名和/或基于所述赎回私钥的签名;以及,响应于满足一个或多个条件,将所述存入事务传输到所述赎回方、第三方和/或所述区块链网络以记录在所述区块链中。
[0493]
语句13、根据前述任一项语句所述的方法,包括:获取至少部分地由所述花费方生成的货币种子的加盲版本,所述货币种子用于生成一组货币序列号,每个货币序列号表示相应;生成所述货币种子的盲签名;以及,将所述货币种子的所述盲签名传输到所述花费方。
[0494]
在一些示例中,盲签名可以是货币序列号,其通过扩展仍然位于种子上。
[0495]
语句14、根据语句13所述的方法,其中所述货币种子至少部分地由所述发行方生成。
[0496]
语句15、根据语句12至14中任一项所述的方法,包括:获取候选货币种子证明和/
或候选货币种子签名证明,其中所述候选货币种子证明表示知道候选货币种子,并且其中所述候选货币种子签名证明表示知道所述货币种子的候选签名;以及,确定由所述候选种子证明表示的所述候选签名是否是所述货币种子的所述加盲签名,其中所述一个或多个条件中的第五条件是由所述候选种子证明表示的所述候选签名为所述货币种子的所述加盲签名;和/或,确定由所述候选货币种子证明表示的所述候选货币种子是否是所述货币种子,其中所述一个或多个条件中的第六条件是所述候选货币种子为所述货币种子。
[0497]
候选货币种子证明和货币种子签名证明可以是零知识证明。在一些示例中,候选种子证明包括所生成的货币种子签名。
[0498]
语句16、根据前述任一项语句所述的方法,其中所述赎回方与已知标识符相关联,并且其中所述方法包括:获取候选标识符证明,其中所述候选标识符证明表示知道所述赎回方的候选标识符;以及,确定由所述候选标识符证明表示的所述候选标识符是否是所述赎回方的所述已知标识符,并且其中所述一个或多个条件中的第七条件是由所述候选标识符证明表示的所述候选标识符为所述赎回方的所述已知标识符。
[0499]
语句17、根据前述任一项语句所述的方法,其中所述第一货币序列号与相应计数器值相关联,并且其中所述方法包括:获取候选计数器证明,其中所述候选计数器证明表示知道所述第一货币序列号的候选计数器;以及,确定由所述候选计数器证明表示的所述候选计数器值是否在预定范围内,并且其中所述一个或多个条件中的第八条件是由所述候选计数器证明表示的所述候选计数器值在预定范围内。
[0500]
语句18、根据前述任一项语句所述的方法,包括:获取由所述花费方生成的至少一个双重花费种子的加盲版本,所述至少一个双重花费种子用于生成至少一个双重花费值,其中每个双重花费值基于双重花费种子、所述花费方的标识符以及所述赎回方选择的相应数据项,其中每个双重花费值对于不同的相应数据项揭示所述花费方的所述标识符的不同组成部分;生成所述至少一个双重花费种子的盲签名;以及,将所述至少一个双重花费种子的所述盲签名传输到所述花费方。
[0501]
在一些实例中,由同一签名对货币种子和至少一个双重花费种子进行签名。
[0502]
语句19、根据语句18所述的方法,包括:获取双重花费值;以及,响应于确定所述第一货币序列号存在于已花费货币序列号的所述数据库中,使用所述获取的双重花费值和先前获取的双重花费值揭示所述花费方的所述标识符。
[0503]
语句20、根据语句4和语句19所述的方法,其中所述提取事务包括多个输出,每个输出包括所述一组货币序列号中的相应一个货币序列号的哈希值,并且每个输出被锁定到所述发行公钥;并且其中所述方法包括:响应于确定所述第一货币序列号存在于已花费货币序列号的所述数据库中,花费锁定到所述发行公钥的每个输出。
[0504]
语句21、根据语句6和语句19所述的方法,其中所述花费事务包括输出,所述输出包括所述一组货币序列号中的相应一个货币序列号的哈希值;并且其中所述方法包括:响应于确定所述第一货币序列号存在于已花费货币序列号的所述数据库中,花费所述输出,所述输出包括所述一组货币序列号中的所述相应一个货币序列号的所述相应哈希值,和/或发布所述一组货币序列号中的相应多个货币序列号。
[0505]
例如,双重花费货币可能还不在链上,即在某个哈希值中。如果花费事务包含下一个货币的哈希值,则会出现这种情况,因此并不是所有货币序列号哈希值仍然在链上。因
此,银行可以广播序列号以防止下一个货币被花费。
[0506]
语句22、根据前述任一项语句所述的方法,其中所述发行方保存标识符哈希值的记录,并且其中所述方法包括:获取标识符哈希值,所述标识符哈希值是所述赎回方的至少一个标识符和所述赎回方选择的数据项的哈希值,并且其中所述一个或多个条件中的第九条件是所述获取的哈希值不存在于标识符哈希值的所述数据库中。
[0507]
语句23、根据语句22所述的方法,其中标识符哈希值的所述记录被保存在所述区块链上。
[0508]
语句24、一种计算机实现的方法,用于使用区块链实现发行系统,其中每个由发行方向花费方发行,并且其中每个表示赎回方可赎回以换取所述的资产的数额;所述方法由所述花费方执行并且包括:获取提取事务,所述提取事务包括一个或多个输出,每个输出包括一组货币序列号中的相应一个货币序列号的哈希值,每个货币序列号表示相应;以及,将所述提取事务传输到所述赎回方、第三方和/或区块链网络以记录在所述区块链中。
[0509]
语句25、根据语句24所述的方法,其中所述花费方与花费私钥-公钥对相关联,其中所述获取所述提取事务包括生成所述提取事务,并且其中所述提取事务包括输入,所述输入包括基于所述花费私钥生成的签名。
[0510]
语句26、根据语句24所述的方法,其中所述发行方与发行私钥-公钥对相关联,其中所述提取事务由所述发行方生成,其中所述提取事务包括输入,所述输入包括基于所述发行私钥生成的签名,并且其中所述获取所述提取事务包括从所述发行方或从所述区块链获取所述提取事务。
[0511]
语句27、根据语句24至26中任一项所述的方法,其中所述提取事务的所述一个或多个输出中的第一输出包括所述一组货币序列号中的第一货币序列号的哈希值,并且其中所述方法包括基于货币种子生成所述第一货币序列号。
[0512]
语句28、根据语句27所述的方法,其中所述货币种子至少部分地由所述发行方生成。
[0513]
语句29、根据语句24或语句28所述的方法,包括:将所述货币种子的加盲版本传输到所述发行方;以及,从所述发行方接收所述货币种子的盲签名。
[0514]
语句30、根据语句29所述的方法,包括:将货币种子证明传输到所述赎回方,其中所述货币种子证明表示知道所述货币种子上的所述盲签名。
[0515]
语句31、根据语句24至30中任一项所述的方法,其中所述第一货币序列号与相应计数器值相关联,并且其中所述方法包括将计数器证明传输到所述赎回方,其中所述计数器证明表示知道所述第一货币序列号的计数器值。
[0516]
语句32、根据语句27或其任何从属语句所述的方法,包括:将所述第一货币序列号传输到所述赎回方。
[0517]
语句33、根据语句24至32中任一项所述的方法,包括:将一个或多个双重花费值传输到所述赎回方,其中所述一个或多个双重花费值基于一个或多个相应双重花费种子、所述花费方的标识符以及所述赎回方选择的相应数据项,其中每个双重花费值对于不同的相应数据项揭示所述花费方的所述标识符的不同组成部分。
[0518]
语句34、根据语句33所述的方法,包括:从所述赎回方获取所述相应数据项。
[0519]
语句35、根据语句33或语句34所述的方法,包括:将一个或多个双重花费值证明传输到所述赎回方,其中所述一个或多个双重花费值证明分别表示知道所述双重花费值的签名和/或知道所述一个或多个双重花费值。
[0520]
语句36、根据语句35所述的方法,其中所述双重花费值与双重花费计数器值相关联,并且其中所述方法包括将双重花费计数器证明传输到所述赎回方,其中所述双重花费计数器证明表示知道所述双重花费值的所述双重花费计数器值。
[0521]
语句37、根据语句24至36中任一项所述的方法,包括:获取花费事务,其中所述花费事务包括用于解锁所述提取事务的第一输出的第一输入,所述第一输入包括基于所述花费私钥生成的签名;以及,将所述花费事务传输到所述赎回方、第三方和/或所述区块链网络以记录在所述区块链中。
[0522]
语句38、根据语句37所述的方法,其中所述花费事务的所述第一输入包括所述第一货币序列号。
[0523]
可以使用锁定提取事务的输出的序列号来防止银行花费提取输出(在双重花费的情况下这是可取的)。在没有序列号锁定输出的情况下,银行可以随时花费输出,而不仅仅是在双重花费的情况下。这不太安全,但如果银行值得信赖,则不是问题。货币序列号也存在于花费事务的op_return输出中,因此如果货币序列号不在提取事务锁定脚本中,则它仍会被发现在op_return输出中花费。
[0524]
语句39、根据语句37或语句38所述的方法,其中所述花费事务包括第一输出,所述第一输出包括基于所述赎回私钥生成的签名。
[0525]
语句40、根据语句37至39中任一项所述的方法,其中所述花费事务包括第二输出,所述第二输出包括所述一组货币序列号中的第二货币序列号的哈希值。
[0526]
语句41、一种计算机实现的方法,用于使用区块链实现发行系统,其中每个由发行方向花费方发行,并且其中每个表示赎回方可赎回以换取所述的资产的数额;所述方法由所述赎回方执行并且包括:从所述花费方获取第一货币序列号;确定所述第一货币序列号是否存在于所述区块链上;以及,响应于满足一个或多个条件,获取花费事务,所述花费事务是区块链事务并且包括所述第一货币序列号,并且将所述花费事务传输到所述花费方、所述发行方、第三方和/或区块链网络中的一个或多个,以记录在所述区块链中,其中所述一个或多个条件中的第一条件是所述第一货币序列号不存在于所述区块链上。
[0527]
语句42、根据语句41所述的方法,其中所述赎回方与赎回私钥-公钥对相关联,其中所述花费事务包括第一输入,所述第一输入包括基于所述赎回私钥生成的签名。
[0528]
语句43、根据语句41或语句42所述的方法,其中所述花费方与花费私钥-公钥对相关联,其中所述花费事务包括第二输入,所述第二输入包括基于所述花费私钥生成的签名。
[0529]
语句44、根据语句43所述的方法,其中所述花费事务的所述第二输入被配置为解锁提取事务的输出。
[0530]
语句45、根据语句44所述的方法,其中所述第二输入包括所述第一货币序列号。
[0531]
语句46、根据语句44或语句45所述的方法,其中所述发行方与私钥-公钥对相关联,其中所述一个或多个条件中的第二条件是所述提取事务包括输入,所述输入包括基于所述发行私钥生成的签名。
[0532]
语句47、根据语句41至46中任一项所述的方法,包括:从所述花费方获取货币种子签名证明和/或候选货币种子证明,其中所述货币种子签名证明表示知道用于生成所述第一货币序列号的货币种子的加盲签名,其中所述候选货币种子证明表示知道候选货币种子,其中所述一个或多个条件中的第二条件是所述加盲签名由所述发行方生成,和/或其中所述一个或多个条件中的第三条件是所述候选货币种子为所述货币种子。
[0533]
语句48、根据语句41至47中任一项所述的方法,其中所述第一货币序列号与相应计数器值相关联,并且其中所述方法包括:获取候选计数器证明,其中所述候选计数器证明表示知道所述第一货币序列号的候选计数器;以及,确定由所述候选计数器证明表示的所述候选计数器值是否在预定范围内,并且其中所述一个或多个条件中的第三条件是由所述候选计数器证明表示的所述候选计数器值在预定范围内。
[0534]
语句49、根据语句41至48中任一项所述的方法,包括:从所述花费方获取一个或多个双重花费值,其中所述一个或多个双重花费值基于相应双重花费种子、所述花费方的标识符以及所述赎回方选择的相应数据项,其中每个双重花费值对于不同的相应数据项揭示所述花费方的所述标识符的不同组成部分。
[0535]
语句50、根据语句49所述的方法,其中包括从所述花费方获取一个或多个双重花费种子证明,其中所述一个或多个双重花费种子证明表示知道用于生成所述一个或多个双重花费值的所述一个或多个双重花费种子的相应加盲签名,其中所述一个或多个条件中的第四条件是所述相应加盲签名由所述发行方生成。
[0536]
语句51、根据语句49或语句50所述的方法,其中每个双重花费值与相应双重花费计数器值相关联,并且其中所述方法包括对于每个双重花费值:获取候选双重花费计数器证明,其中所述候选双重花费计数器证明表示知道所述双重花费值的候选双重花费计数器;以及,确定由所述候选双重花费计数器证明表示的所述候选双重花费计数器值是否在预定范围内,并且其中所述一个或多个条件中的第五条件是由所述候选双重花费计数器证明表示的所述候选双重花费计数器值在所述预定范围内。
[0537]
语句52、根据语句49至51中任一项所述的方法,其中所述花费事务包括所述获取的一个或多个双重花费值。
[0538]
语句53、根据语句49至52中任一项所述的方法,包括:生成所述相应数据项。
[0539]
语句54、根据语句49至53中任一项所述的方法,包括:将所述相应数据项传输到所述花费方。
[0540]
语句55、根据语句41至54中任一项所述的方法,包括:从所述花费方获取标识符哈希值,所述标识符哈希值是所述赎回方的至少一个标识符和所述赎回方选择的数据项的哈希值;以及,将所述获取的标识符哈希值传输到所述发行方。
[0541]
语句56、根据语句41至55中任一项所述的方法,包括:获取存入事务,所述存入事务包括引用所述花费事务的输出的输入,并且包括以下各项中的一项或多项:基于所述赎回私钥生成的签名、基于所述花费私钥生成的签名和/或基于所述发行私钥生成的签名;以及,响应于满足所述一个或多个条件,将所述存入事务传输到所述发行方、第三方和/或所述区块链网络以记录在所述区块链中。
[0542]
语句57、根据语句56所述的方法,其中所述存入事务包括锁定所述发行公钥的输出。
[0543]
语句58、根据语句41至57中任一项所述的方法,包括:响应于确定不满足所述一个或多个条件中的至少一个条件,向所述发行方传输以下各项中的一项或多项:所述第一货币序列号、所述花费公钥、所述一个或多个双重花费值和/或所述花费方的所述标识符。
[0544]
语句59、一种计算机设备,所述计算机设备包括:存储器,所述存储器包括一个或多个存储器单元;以及,处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据语句1至58中任一项所述的方法。
[0545]
语句60、一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在根据语句46所述的计算机设备上运行时,执行根据语句1至58中任一项所述的方法。
[0546]
根据本文公开的另一方面,可提供一种包括发行方、花费方和赎回方的动作的方法。
[0547]
根据本文公开的另一方面,可提供一种包括发行方、花费方和赎回方的计算机设备的系统。
[0548]
一旦给出本文的公开内容,所公开技术的其他变体或用例对于本领域技术人员可能变得显而易见。本公开的范围不受所描述的实施例限制,而仅受随附权利要求限制。

技术特征:


1.一种计算机实现的方法,用于使用区块链实现发行系统,其中每个由发行方向花费方发行,每个表示赎回方可赎回以换取所述的资产的数额,其中所述发行方保存货币序列号的记录,每个货币序列号表示相应;所述方法由所述发行方执行并且包括:获取花费事务,所述花费事务为区块链事务并且包括一组货币序列号中的第一货币序列号;确定所述第一货币序列号是否存在于已花费货币序列号的数据库中;以及响应于满足一个或多个条件,将由所述第一货币序列号表示的所述资产的所述数额转移给所述赎回方,其中所述一个或多个条件中的第一条件是所述第一货币序列号不存在于所述数据库中。2.根据权利要求1所述的方法,其中所述货币序列号的所述记录被保存在所述区块链上。3.根据权利要求1或权利要求2所述的方法,其中所述花费事务包括锁定到所述发行方的发行公钥的输出,并且其中所述获取所述花费事务包括从所述花费方和/或从所述区块链获取所述花费事务。4.根据权利要求1或权利要求2所述的方法,其中所述区块链包括提取事务,所述提取事务包括一个或多个输出,每个输出包括所述一组货币序列号中的相应一个货币序列号的指示。5.根据权利要求4所述的方法,其中所述指示是所述一组货币序列号中的相应一个货币序列号的哈希值。6.根据权利要求4或权利要求5所述的方法,其中所述发行方与发行私钥-公钥对相关联,并且其中所述方法包括:生成所述提取事务,所述提取事务包括输入,所述输入包括基于所述发行私钥生成的签名;以及将所述提取事务传输到所述花费方、第三方和/或区块链网络以记录在所述区块链中。7.根据权利要求4至6中任一项所述的方法,其中所述一个或多个条件中的第二条件是所述花费事务包括用于解锁提取事务的输出的输入。8.根据权利要求7所述的方法,其中所述提取事务的所述输出被配置为在与后续事务的输入一起执行时要求所述后续事务的所述输入要求所述第一货币序列号。9.根据权利要求6至8中任一项所述的方法,其中所述花费方与花费私钥-公钥对相关联,并且其中所述提取事务的所述输出被配置为在与后续事务的输入一起执行时要求所述后续事务的所述输入要求基于所述花费私钥生成的签名。10.根据权利要求3或其从属权利要求所述的方法,其中所述一个或多个条件中的第三条件是所述提取事务包括输入,所述输入包括基于所述发行私钥生成的所述签名。11.根据前述任一项权利要求所述的方法,其中所述赎回方与赎回私钥-公钥对相关联,并且其中所述一个或一个条件中的第四条件是所述花费事务包括另一输入,所述另一输入包括基于所述赎回私钥生成的签名。12.根据前述任一项权利要求所述的方法,包括:获取存入事务,所述存入事务包括引用所述花费事务的输出的输入,并且包括以下各
项中的一项或多项:基于所述发行私钥生成的签名、基于所述花费私钥生成的签名和/或基于所述赎回私钥的签名;以及响应于满足一个或多个条件,将所述存入事务传输到所述赎回方、第三方和/或所述区块链网络以记录在所述区块链中。13.根据前述任一项权利要求所述的方法,包括:获取至少部分地由所述花费方生成的货币种子的加盲版本,所述货币种子用于生成一组货币序列号,每个货币序列号表示相应;生成所述货币种子的盲签名;以及将所述货币种子的所述盲签名传输到所述花费方。14.根据权利要求13所述的方法,其中所述货币种子至少部分地由所述发行方生成。15.根据权利要求12至14中任一项所述的方法,包括:获取候选货币种子证明和/或候选货币种子签名证明,其中所述候选货币种子证明表示知道候选货币种子,并且其中所述候选货币种子签名证明表示知道所述货币种子的候选签名;以及确定由所述候选种子证明表示的所述候选签名是否是所述货币种子的所述加盲签名,其中所述一个或多个条件中的第五条件是由所述候选种子证明表示的所述候选签名为所述货币种子的所述加盲签名;和/或确定由所述候选货币种子证明表示的所述候选货币种子是否是所述货币种子,其中所述一个或多个条件中的第六条件是所述候选货币种子为所述货币种子。16.根据前述任一项权利要求所述的方法,其中所述赎回方与已知标识符相关联,并且其中所述方法包括:获取候选标识符证明,其中所述候选标识符证明表示知道所述赎回方的候选标识符;以及确定由所述候选标识符证明表示的所述候选标识符是否是所述赎回方的所述已知标识符,并且其中所述一个或多个条件中的第七条件是由所述候选标识符证明表示的所述候选标识符为所述赎回方的所述已知标识符。17.根据前述任一项权利要求所述的方法,其中所述第一货币序列号与相应计数器值相关联,并且其中所述方法包括:获取候选计数器证明,其中所述候选计数器证明表示知道所述第一货币序列号的候选计数器;以及确定由所述候选计数器证明表示的所述候选计数器值是否在预定范围内,并且其中所述一个或多个条件中的第八条件是由所述候选计数器证明表示的所述候选计数器值在预定范围内。18.根据前述任一项权利要求所述的方法,包括:获取由所述花费方生成的至少一个双重花费种子的加盲版本,所述至少一个双重花费种子用于生成至少一个双重花费值,其中每个双重花费值基于双重花费种子、所述花费方的标识符以及所述赎回方选择的相应数据项,其中每个双重花费值对于不同的相应数据项揭示所述花费方的所述标识符的不同组成部分;生成所述至少一个双重花费种子的盲签名;以及
将所述至少一个双重花费种子的所述盲签名传输到所述花费方。19.根据权利要求18所述的方法,包括:获取双重花费值;以及响应于确定所述第一货币序列号存在于已花费货币序列号的所述数据库中,使用所述获取的双重花费值和先前获取的双重花费值揭示所述花费方的所述标识符。20.根据权利要求4和权利要求19所述的方法,其中所述提取事务包括多个输出,每个输出包括所述一组货币序列号中的相应一个货币序列号的哈希值,并且每个输出被锁定到所述发行公钥;并且其中所述方法包括:响应于确定所述第一货币序列号存在于已花费货币序列号的所述数据库中,花费锁定到所述发行公钥的每个输出。21.根据权利要求6和权利要求19所述的方法,其中所述花费事务包括输出,所述输出包括所述一组货币序列号中的相应一个货币序列号的哈希值;并且其中所述方法包括:响应于确定所述第一货币序列号存在于已花费货币序列号的所述数据库中,花费所述输出,所述输出包括所述一组货币序列号中的所述相应一个货币序列号的所述相应哈希值,和/或发布所述一组货币序列号中的相应多个货币序列号。22.根据前述任一项权利要求所述的方法,其中所述发行方保存标识符哈希值的记录,并且其中所述方法包括:获取标识符哈希值,所述标识符哈希值是所述赎回方的至少一个标识符和所述赎回方选择的数据项的哈希值,并且其中所述一个或多个条件中的第九条件是所述获取的哈希值不存在于标识符哈希值的所述数据库中。23.根据权利要求22所述的方法,其中标识符哈希值的所述记录被保存在所述区块链上。24.一种计算机实现的方法,用于使用区块链实现发行系统,其中每个由发行方向花费方发行,并且其中每个表示赎回方可赎回以换取所述的资产的数额;所述方法由所述花费方执行并且包括:获取提取事务,所述提取事务包括一个或多个输出,每个输出包括一组货币序列号中的相应一个货币序列号的哈希值,每个货币序列号表示相应;以及将所述提取事务传输到所述赎回方、第三方和/或区块链网络以记录在所述区块链中。25.根据权利要求24所述的方法,其中所述花费方与花费私钥-公钥对相关联,其中所述获取所述提取事务包括生成所述提取事务,并且其中所述提取事务包括输入,所述输入包括基于所述花费私钥生成的签名。26.根据权利要求24所述的方法,其中所述发行方与发行私钥-公钥对相关联,其中所述提取事务由所述发行方生成,其中所述提取事务包括输入,所述输入包括基于所述发行私钥生成的签名,并且其中所述获取所述提取事务包括从所述发行方或从所述区块链获取所述提取事务。27.根据权利要求24至26中任一项所述的方法,其中所述提取事务的所述一个或多个输出中的第一输出包括所述一组货币序列号中的第一货币序列号的哈希值,并且其中所述方法包括基于货币种子生成所述第一货币序列号。28.根据权利要求27所述的方法,其中所述货币种子至少部分地由所述发行方生成。29.根据权利要求24或权利要求28所述的方法,包括:
将所述货币种子的加盲版本传输到所述发行方;以及从所述发行方接收所述货币种子的盲签名。30.根据权利要求29所述的方法,包括:将货币种子证明传输到所述赎回方,其中所述货币种子证明表示知道所述货币种子上的所述盲签名。31.根据权利要求24至30中任一项所述的方法,其中所述第一货币序列号与相应计数器值相关联,并且其中所述方法包括将计数器证明传输到所述赎回方,其中所述计数器证明表示知道所述第一货币序列号的计数器值。32.根据权利要求27或其任何从属权利要求所述的方法,包括:将所述第一货币序列号传输到所述赎回方。33.根据权利要求24至32中任一项所述的方法,包括:将一个或多个双重花费值传输到所述赎回方,其中所述一个或多个双重花费值基于一个或多个相应双重花费种子、所述花费方的标识符以及所述赎回方选择的相应数据项,其中每个双重花费值对于不同的相应数据项揭示所述花费方的所述标识符的不同组成部分。34.根据权利要求33所述的方法,包括:从所述赎回方获取所述相应数据项。35.根据权利要求33或权利要求34所述的方法,包括:将一个或多个双重花费值证明传输到所述赎回方,其中所述一个或多个双重花费值证明分别表示知道所述双重花费值的签名和/或知道所述一个或多个双重花费值。36.根据权利要求35所述的方法,其中所述双重花费值与双重花费计数器值相关联,并且其中所述方法包括将双重花费计数器证明传输到所述赎回方,其中所述双重花费计数器证明表示知道所述双重花费值的所述双重花费计数器值。37.根据权利要求24至36中任一项所述的方法,包括:获取花费事务,其中所述花费事务包括用于解锁所述提取事务的第一输出的第一输入,所述第一输入包括基于所述花费私钥生成的签名;以及将所述花费事务传输到所述赎回方、第三方和/或所述区块链网络以记录在所述区块链中。38.根据权利要求37所述的方法,其中所述花费事务的所述第一输入包括所述第一货币序列号。39.根据权利要求37或权利要求38所述的方法,其中所述花费事务包括第一输出,所述第一输出包括基于所述赎回私钥生成的签名。40.根据权利要求37至39中任一项所述的方法,其中所述花费事务包括第二输出,所述第二输出包括所述一组货币序列号中的第二货币序列号的哈希值。41.一种计算机实现的方法,用于使用区块链实现发行系统,其中每个由发行方向花费方发行,并且其中每个表示赎回方可赎回以换取所述的资产的数额;所述方法由所述赎回方执行并且包括:从所述花费方获取第一货币序列号;确定所述第一货币序列号是否存在于所述区块链上;以及响应于满足一个或多个条件,获取花费事务,所述花费事务是区块链事务并且包括所述第一货币序列号,并且将所述花费事务传输到所述花费方、所述发行方、第三方和/或区块链网络中的一个或多个,以记录在所述区块链中,其中所述一个或多个条件中的第一条
件是所述第一货币序列号不存在于所述区块链上。42.根据权利要求41所述的方法,其中所述赎回方与赎回私钥-公钥对相关联,其中所述花费事务包括第一输入,所述第一输入包括基于所述赎回私钥生成的签名。43.根据权利要求41或权利要求42所述的方法,其中所述花费方与花费私钥-公钥对相关联,其中所述花费事务包括第二输入,所述第二输入包括基于所述花费私钥生成的签名。44.根据权利要求43所述的方法,其中所述花费事务的所述第二输入被配置为解锁提取事务的输出。45.根据权利要求44所述的方法,其中所述第二输入包括所述第一货币序列号。46.根据权利要求44或权利要求45所述的方法,其中所述发行方与私钥-公钥对相关联,其中所述一个或多个条件中的第二条件是所述提取事务包括输入,所述输入包括基于所述发行私钥生成的签名。47.根据权利要求41至46中任一项所述的方法,包括:从所述花费方获取货币种子签名证明和/或候选货币种子证明,其中所述货币种子签名证明表示知道用于生成所述第一货币序列号的货币种子的加盲签名,其中所述候选货币种子证明表示知道候选货币种子,其中所述一个或多个条件中的第二条件是所述加盲签名由所述发行方生成,和/或其中所述一个或多个条件中的第三条件是所述候选货币种子为所述货币种子。48.根据权利要求41至47中任一项所述的方法,其中所述第一货币序列号与相应计数器值相关联,并且其中所述方法包括:获取候选计数器证明,其中所述候选计数器证明表示知道所述第一货币序列号的候选计数器;以及确定由所述候选计数器证明表示的所述候选计数器值是否在预定范围内,并且其中所述一个或多个条件中的第三条件是由所述候选计数器证明表示的所述候选计数器值在预定范围内。49.根据权利要求41至48中任一项所述的方法,包括:从所述花费方获取一个或多个双重花费值,其中所述一个或多个双重花费值基于相应双重花费种子、所述花费方的标识符以及所述赎回方选择的相应数据项,其中每个双重花费值对于不同的相应数据项揭示所述花费方的所述标识符的不同组成部分。50.根据权利要求49所述的方法,其中包括从所述花费方获取一个或多个双重花费种子证明,其中所述一个或多个双重花费种子证明表示知道用于生成所述一个或多个双重花费值的所述一个或多个双重花费种子的相应加盲签名,其中所述一个或多个条件中的第四条件是所述相应加盲签名由所述发行方生成。51.根据权利要求49或权利要求50所述的方法,其中每个双重花费值与相应双重花费计数器值相关联,并且其中所述方法包括对于每个双重花费值:获取候选双重花费计数器证明,其中所述候选双重花费计数器证明表示知道所述双重花费值的候选双重花费计数器;以及确定由所述候选双重花费计数器证明表示的所述候选双重花费计数器值是否在预定范围内,并且其中所述一个或多个条件中的第五条件是由所述候选双重花费计数器证明表示的所述候选双重花费计数器值在所述预定范围内。
52.根据权利要求49至51中任一项所述的方法,其中所述花费事务包括所述获取的一个或多个双重花费值。53.根据权利要求49至52中任一项所述的方法,包括:生成所述相应数据项。54.根据权利要求49至53中任一项所述的方法,包括:将所述相应数据项传输到所述花费方。55.根据权利要求41至54中任一项所述的方法,包括:从所述花费方获取标识符哈希值,所述标识符哈希值是所述赎回方的至少一个标识符和所述赎回方选择的数据项的哈希值;以及将所述获取的标识符哈希值传输到所述发行方。56.根据权利要求41至55中任一项所述的方法,包括:获取存入事务,所述存入事务包括引用所述花费事务的输出的输入,并且包括以下各项中的一项或多项:基于所述赎回私钥生成的签名、基于所述花费私钥生成的签名和/或基于所述发行私钥生成的签名;以及响应于满足所述一个或多个条件,将所述存入事务传输到所述发行方、第三方和/或所述区块链网络以记录在所述区块链中。57.根据权利要求56所述的方法,其中所述存入事务包括锁定所述发行公钥的输出。58.根据权利要求41至57中任一项所述的方法,包括:响应于确定不满足所述一个或多个条件中的至少一个条件,向所述发行方传输以下各项中的一项或多项:所述第一货币序列号、所述花费公钥、所述一个或多个双重花费值和/或所述花费方的所述标识符。59.一种计算机设备,所述计算机设备包括:存储器,所述存储器包括一个或多个存储器单元;以及处理装置,所述处理装置包括一个或多个处理单元,其中所述存储器存储被设置在所述处理装置上运行的代码,所述代码被配置为当在所述处理装置上运行时,执行根据权利要求1至58中任一项所述的方法。60.一种计算机程序,所述计算机程序包含在计算机可读存储器上并且被配置为当在根据权利要求46所述的计算机设备上运行时,执行根据权利要求1至58中任一项所述的方法。

技术总结


一种计算机实现的方法,用于使用区块链实现发行系统,其中每个由发行方向花费方发行、并表示赎回方可赎回以换取所述的资产的数额,其中所述发行方保存货币序列号的记录,每个货币序列号表示相应;所述方法由所述发行方执行并且包括:获取花费事务,包括一组货币序列号中的第一货币序列号;确定所述第一货币序列号是否存在于数据库中;以及,响应于满足一个或多个条件,将由所述第一货币序列号表示的所述资产的所述数额转移给所述赎回方,其中所述条件中的第一条件是所述第一货币序列号不存在于所述数据库中。库中。库中。


技术研发人员:

迈克尔拉

受保护的技术使用者:

区块链许可股份公司

技术研发日:

2021.04.16

技术公布日:

2022/12/22

本文发布于:2024-09-23 18:33:01,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/46855.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:所述   货币   爱丽丝   事务
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议