密钥-值映射承诺系统和方法与流程

文档序号:30088046发布日期:2022-05-18 06:51阅读:207来源:国知局
密钥-值映射承诺系统和方法与流程
密钥-值映射承诺系统和方法
1.相关申请交叉引用
2.本技术是2019年9月25日提交的第62/905,966号美国临时申请的pct申请并且主张所述美国临时申请的权益,出于所有目的将所述美国临时申请以全文引用的方式并入本文中。


背景技术:

3.像比特币[bit]和以太坊[ethb]这样的加密货币以分散式方式处理支付。每次生成交易区块时,验证器都会检查所述区块的有效性。例如,在以太坊中,交易由发送方的公钥pk、转账金额b和签名σ(以及其它内容)组成。对于区块中的每笔交易,验证器都会检查签名σ是否有效,以及发送方账户(通过散列发送方的公钥pk来标识)是否至少具有转账金额b的余额。虽然可以仅在进行交易的情况下验证签名σ,但发送方的余额取决于过去的交易。验证器可以遍历整个区块链(例如,区块链)来初始地计算余额。验证器可以在之后将余额存储在存储器中,并且在新交易到达时更新所述余额。
[0004]
然而,发送方账户的数目通常很大。即使区块链的吞吐量不高(例如每秒5-10笔交易[ethc]),以太坊也具有约7,000万个账户[etha]。像libra[lib]这样的其它货币可以具有更高的吞吐量,并且预期将具有数十亿个账户。快速访问如此大量的账户需要大量资源,从而限制了可以执行验证器功能的节点数量。对于想要在不依赖几台计算机的情况下广泛传播网络,这是个问题。
[0005]
本发明的实施例个别地以及共同地解决这些和其它问题。


技术实现要素:

[0006]
实施例包括一种方法,包括:由验证计算机从用户装置接收授权请求消息,其中所述授权请求消息包括用户状态和用户证明,其中所述用户状态包括第一用户状态元素和第二用户状态元素,并且其中所述用户证明包括第一用户证明元素、第二用户证明元素和第三用户证明元素;由所述验证计算机通过将所述第一用户证明元素的所述第二用户状态元素次幂乘以所述第二用户证明元素的所述第一用户状态元素次幂来计算第一验证值;由所述验证计算机通过求所述第二用户证明元素的所述第二用户状态元素次幂来计算第二验证值;由所述验证计算机将所述第一验证值与累加状态的第一累加状态元素进行比较;由所述验证计算机将所述第二验证值与所述累加状态的第二累加状态元素进行比较;以及在所述第一验证值与所述第一累加状态匹配并且所述第二验证值与所述第二累加状态元素匹配的情况下,由所述验证计算机对所述授权请求消息进行授权。
[0007]
另一实施例包括一种验证计算机,包括:处理器;存储器;以及计算机可读介质,其耦合到所述处理器,所述计算机可读介质包括能够由所述处理器执行以用于实施方法的代码,所述方法包括:从用户装置接收授权请求消息,其中所述授权请求消息包括用户状态和用户证明,其中所述用户状态包括第一用户状态元素和第二用户状态元素,并且其中所述用户证明包括第一用户证明元素、第二用户证明元素和第三用户证明元素;通过将所述第
一用户证明元素的所述第二用户状态元素次幂乘以所述第二用户证明元素的所述第一用户状态元素次幂来计算第一验证值;通过求所述第二用户证明元素的所述第二用户状态元素次幂来计算第二验证值;将所述第一验证值与累加状态的第一累加状态元素进行比较;将所述第二验证值与所述累加状态的第二累加状态元素进行比较;以及在所述第一验证值与所述第一累加状态匹配并且所述第二验证值与所述第二累加状态元素匹配的情况下,对所述授权请求消息进行授权。
[0008]
另一实施例包括一种方法,包括:由用户装置生成包括用户状态和用户证明的授权请求消息,其中所述用户状态包括第一用户状态元素和第二用户状态元素,并且其中所述用户证明包括第一用户证明元素、第二用户证明元素和第三用户证明元素;由所述用户装置将所述授权请求消息提供给多个验证计算机中的验证计算机,其中所述验证计算机1)通过将所述第一用户证明元素的所述第二用户状态元素次幂乘以所述第二用户证明元素的所述第一用户状态元素次幂来计算第一验证值,2)通过求所述第二用户证明元素的所述第二用户状态元素次幂来计算第二验证值,3)将所述第一验证值与累加状态的第一累加状态元素进行比较,4)将所述第二验证值与累加状态的第二累加状态元素进行比较,并且5)在所述第一验证值与所述第一累加状态匹配并且所述第二验证值与所述第二累加状态元素匹配的情况下,对所述授权请求消息进行授权;以及由所述用户装置从所述验证计算机接收授权响应消息,其中所述授权响应消息指示所述授权请求消息是否被授权。
[0009]
有关本发明的实施例的更多详细信息可见于具体实施方式和附图。
附图说明
[0010]
图1示出根据实施例的系统的框图。
[0011]
图2a示出根据一些实施例的用户装置的框图。
[0012]
图2b示出根据实施例的验证计算机的框图。
[0013]
图3示出根据实施例的授权请求过程的流程图。
[0014]
图4示出根据实施例的验证方法的流程图。
[0015]
图5a-5d示出根据实施例的各种等式。
具体实施方式
[0016]“区块链”可以是分布式数据库,其维护不断增长的记录列表,以防篡改和修订。区块链可以包括多个交互记录区块。区块链中的每个区块还可以包含时间戳和到前一个区块的链接。换句话说,区块链中的交互记录可以存储为一系列“区块”或包括在给定时间段内发生的多个交互的记录的永久性文件。在完成区块并且验证区块之后,可以由适当节点将区块附加到区块链。每个区块可以与区块标头相关联。在本发明的实施例中,区块链可以是分布式的,并且可以在验证网络中的每个完整节点处维护区块链的副本。验证网络内的任何节点随后可以使用区块链来验证交互。
[0017]“验证网络”可以包括被编程为提供对交互的验证的一组计算机。验证网络可以是使用经由通信链路互连的若干计算机(例如,验证计算机)的分布式计算系统。验证网络可以使用任何适当网络实施,所述网络包括内联网、互联网、蜂窝网络、局域网或任何其它此类网络或其组合。在一些情况下,验证计算机可以由第三方或管理实体独立操作。此类实体
可以连续地从验证网络添加或移除计算机。在一些实施例中,验证网络中的验证计算机可以是完整节点。
[0018]“区块”可以包括保存一个或多个交互的记录的数据元素,并且可以是区块链的子组件。区块可以包括区块标头和区块主体。区块可以包括被散列并编码成默克尔树(merkle tree)的一批有效交互。每个区块可以包括区块链中前一区块(或多个区块)的密码散列。
[0019]“区块标头”可以是包括关于区块的信息的标头。区块标头可用于标识区块链中的特定区块。区块标头可以包括任何合适的信息,例如前一散列、默克尔根、时间戳和临时数。在一些实施例中,区块标头还可以包括难度值。
[0020]“交互”可以包括相互的作用或影响。“交互”可以包括各方、各装置和/或各实体之间的通信、联系或交换。示例的交互包括两方之间的交易和两个装置之间的数据交换。在一些实施例中,交互可以包括用户请求访问安全数据、安全网页、安全位置,等等。在其它实施例中,交互可以包括支付交易,在所述支付交易中,两个装置可以交互以促进支付。
[0021]“交互数据”可以是与交互相关联的数据。例如,交互可能是将数字资产从一方转移到另一方。例如,交互数据可以包括交易金额和未花费的交易输出(utxo)。在一些实施例中,交互数据可指示为交互一方的不同实体以及被交换的价值或信息。交互数据可以包括交互金额、与发送方相关联的信息(例如,令牌或账户信息、别名、装置标识符、联系地址等)、与接收方相关联的信息(例如,令牌或账户信息、别名、装置标识符、联系地址等),一次性值(例如,随机值、临时数、时间戳、计数器等)和/或任何其它合适的信息。交互数据的实例可以是交易数据。
[0022]“数字资产”可以指与价值相关联的数字内容。在一些情况下,数字资产还可指示价值的转移。例如,数字资产可包括指示货币值(例如法定货币或密码货币)的转移的数据。在其它实施例中,数字资产可对应于其它非货币值,例如访问权限数据(例如用于访问信息的授权使用次数或时间分配)和所有权数据(例如数字权限数据)。数字资产还可以包括关于一个或多个数字资产属性的信息。例如,数字资产可以包括将价值从一个实体或账户转移到另一实体或账户的有用信息。数字资产还可以包括汇款信息(例如标识发送实体的信息)。在一些实施例中,数字资产可以包括以下中的一个或多个:数字资产标识符,值(例如,金额、原始货币类型,目的地货币类型等),转账费用信息,货币兑换率,发票号,购买订单号,时间戳,发送实体标识符(例如,发送方企业id),发送实体账号,发送实体名称,发送实体联系信息(例如,地址、电话号码、电子邮件地址等),发送机构信息(例如,金融机构名称、企业id和bin),接收方实体标识符(例如,接收方企业id),接收方实体账号,接收方实体名称,接收方实体联系信息(例如,地址、电话号码、电子邮件地址等)和/或接收机构信息(例如,金融机构名称、企业id和bin)。当接收到数字资产时,接收方可具有足够的信息以继续针对所指示价值的结算交易。
[0023]
术语“验证”及其派生词可以指利用信息来确定潜在的主体在一组给定的情况下是否有效的过程。验证可以包括任何信息比较以确保某些数据或信息是正确的、有效的、准确的、合法的和/或信誉良好的。
[0024]“用户”可以包括个人。在一些实施例中,用户可与一个或多个个人账户和/或移动装置相关联。在一些实施例中,用户也可以被称为持卡人、账户持有人或消费者。
[0025]“用户标识符”可以包括任何一条能够标识用户的数据。用户标识符可以包括任何
合适的字母数字字符串。在一些实施例中,用户标识符可以从用户标识信息中导出。在一些实施例中,用户标识符可以包括与用户相关联的账户标识符。
[0026]“验证计算机”可以包括检查或证明某物的有效性或准确性的计算机。验证计算机可以验证从用户装置接收的用户证明。验证计算机可以确定用户证明和/或任何其它提供的数据是否足以使用户装置执行交互。验证计算机可以是验证网络中的节点。在一些实施例中,验证计算机可以提议将新区块添加到区块链,其中新区块包括一个或多个交互。
[0027]“授权请求消息”可以是请求对交互授权的电子消息。在一些实施例中,将授权请求消息发送到验证器计算机以请求对交易的授权。
[0028]“授权响应消息”可以是响应于授权请求的消息。在一些情况下,授权响应消息可以是对由验证计算机生成的授权请求消息的电子消息回复。仅举例来说,授权响应消息可以包括以下状态指示符中的一个或多个:批准-交易被批准;拒绝-交易未被批准;或呼叫中心-挂起更多信息的响应,商家可呼叫免费授权电话号码。授权响应消息或其中包括的数据可以充当授权证明。
[0029]“用户状态”可以包括用户数据的属性或状态的情况。用户状态可以是元组,并且可以包括一个或多个用户状态元素。例如,用户状态可以包括第一用户状态元素和第二用户状态元素。用户状态可以包括第一用户状态元素(例如,xk),所述第一用户状态元素可以是与用户的账户相关联的金额(例如,余额、值等)。用户状态可以包括可以是随机值的第二用户状态元素(例如,zk)。
[0030]“用户证明”可以包括足以将由用户提供的东西确定为真实的证据。用户证明可以被称为证人,并且可以是处于累加状态的元素的成员资格的证明。用户证明可以是可包括一个或多个用户证明元素的元组。例如,用户证明可以包括第一用户证明元素、第二用户证明元素和第三用户证明元素。用户证明可以包括第一用户证明元素和第二用户元素,第一用户证明元素和第二用户元素可以被验证计算机用来验证对应用户状态是否包括在区块链中最新区块的累加状态中。用户证明可以包括第三用户证明元素,其可以指示用户与累加状态中的条目的数量相关联的(例如,与累加状态中包括的多个用户中的第一用户状态元素中的哪个用户是相关联的)。
[0031]“验证值”可以包括用于验证某物的值。验证值可以基于所提供的信息来确定,然后与已知(例如,先前存储的)信息进行比较。通过将确定的验证值与已知值进行比较,验证计算机可以验证所提供的信息与已知信息匹配。验证值可以由验证计算机确定以验证用户证明和用户状态。
[0032]“累加状态”可以包括属性或数据状态的搜集或收集情况。累加状态可以由累加器输出。累加状态可以是对一组元素以及所述一组元素中的任何元素的短期成员资格和/或非成员资格的绑定承诺。累加状态可以是包括一个或多个累加状态元素的元组。例如,累加状态可以包括第一累加状态元素、第二累加状态元素和第三累加状态元素。累加状态可以包括第一累加状态元素,其基于验证网络中的每个用户的每个第一用户状态元素(例如,金额)和每个第二用户状态元素(例如,随机值)。累加状态可以包括第二累加状态元素,其基于验证网络中的每个用户的每个第二用户状态元素。累加状态可以包括第三累加状态元素,其可以是验证网络中的用户状态的数量。
[0033]“用户装置”可以是由用户操作的装置。用户装置的实例可以包括移动电话、智能
手机、卡、个人数字助理(pda)、膝上型计算机、台式计算机、服务器计算机、车辆(例如汽车)、精简客户端装置、平板式pc,等等。此外,用户装置可以是任何类型的可穿戴技术装置,例如手表、耳机、眼镜等。用户装置可以包括能够处理用户输入的一个或多个处理器。用户装置还可以包括用于接收用户输入的一个或多个输入传感器。如本领域中已知的,存在能够检测用户输入的多种输入传感器,例如加速度计、相机、麦克风等。由输入传感器获得的用户输入可以来自多种数据输入类型,包括但不限于音频数据、视觉数据或生物特征数据。用户装置可以包括用户可以操作的任何电子装置,所述电子装置还可以提供与网络的远程通信能力。远程通信能力的实例包括使用移动电话(无线)网络、无线数据网络(例如,3g、4g或类似网络)、wi-fi、wi-max,或者可以提供对网络(例如互联网或专用网络)的访问的任何其它通信介质。
[0034]“处理器”可以包括处理某事的装置。在一些实施例中,处理器可以包括任何合适的一个或多个数据计算装置。处理器可以包括一起工作以实现期望的功能的一个或多个微处理器。处理器可以包括cpu,所述cpu包括至少一个高速数据处理器,所述高速数据处理器足以执行用于执行用户和/或系统生成的请求的程序成分。cpu可以是微处理器,例如amd的athlon、duron和/或opteron;ibm和/或motorola的powerpc;ibm和sony的cell处理器;intel的celeron、itanium、pentium、xeon和/或xscale;和/或类似的处理器。
[0035]“存储器”可以是能够存储电子数据的任何合适的一个或多个装置。合适的存储器可以包括存储指令的非瞬态计算机可读介质,所述指令能够由处理器执行以实施期望的方法。存储器的实例可以包括一个或多个存储器芯片、磁盘驱动器,等等。此类存储器可使用任何合适的电气、光学和/或磁性操作模式来操作。
[0036]“服务器计算机”可以包括功能强大的计算机或计算机集群。例如,服务器计算机可以是大型主机、小型计算机集群或作为一个单元运作的一组服务器。在一个实例中,服务器计算机可以是耦合到web服务器的数据库服务器。服务器计算机可以包括一个或多个计算设备,并且可以使用多种计算结构、布置和编译中的任一种来服务于来自一个或多个客户端计算机的请求。
[0037]
1引言
[0038]
随着区块链的规模不断扩大,验证新交易变得更加资源密集。为了解决这个问题,需要发现区块链的(有效)状态的紧凑编码,所述紧凑编码仍然允许有效证明成员资格并且进行更新。对于基于账户的加密货币,状态可以由密钥-值映射表示,其中密钥是账户地址,并且值由账户余额、临时数等组成。实施例为这种状态提供了新的编码,其大小不会随着账户数量的增加而增加,然而成员资格证明的大小是恒定的。编码和证明两者都可以由仅两个群组元素(像类别群组这样的未知阶数的群组)组成。验证和更新证明可能涉及几组求幂。对账户值的额外更新也可能非常有效。
[0039]
基于账户的加密货币的状态是密钥-值映射,其中密钥是账户的地址,并且值是其属性(例如,余额、临时数等)。各种实施例为具有以下四个特性的按未知阶数分组的密钥-值映射提供编码。1)简洁编码:编码由仅两个群组元素组成,而与密钥的数量无关。2)简洁证明和快速验证:证明编码中的某个密钥、值对也由两个群组元素组成。可能仅需三次求幂就能验证证明。3)对编码的快速更新:对编码中的值进行额外更新也很快速。4)去信任设置:如果在此处将类别群组用作底层群组,则可以去信任方式自举编码方案。
[0040]
当编码方案与基于账户的加密货币一起使用时,其中对值的更新本质上是额外的(例如,用于支付),验证变成几乎无状态的任务(例如,需要存储两个群组元素)。为了将金额b

从账户(k,v)发送到账户(k

,v

),其中v由余额b≥b

组成,用户将提供(k,v)作为编码的一部分的证明π。可以对证明进行验证,并且可以容易地更新编码以反映k、k

的新的余额值。此外,网络中的其它用户将会更新其证明,这可以与更新编码相同的方式完成。示例性方法在图3-4中示出并且在下文进一步详细描述。
[0041]
图1示出根据各种实施例的系统100。系统100包括用户装置110、验证计算机120、区块链网络130和接收方装置140。区块链网络130可以是包括多个计算机的区块链网络,所述多个计算机包括额外的验证计算机、用户装置和接收方装置(未示出)。用户装置110可以与区块链网络130和验证计算机120进行操作性通信。验证计算机120可以与区块链网络130和接收方装置140进行操作性通信。接收方装置140可以与区块链网络130进行操作性通信。
[0042]
为了简化说明,图1中示出一定数量的组件。然而,应理解,本发明的实施例可以包括多于一个每种组件。此外,本发明的一些实施例可以包括比图1中所示的所有部件少或多的组件。
[0043]
图1的系统100中的至少组件之间的消息可以使用安全通信协议来发送,所述安全通信协议例如但不限于:文件传输协议(ftp)、超文本传输协议(http)、安全超文本传输协议(https)、ssl、iso(例如,iso 8583)等。可以驻存于装置之间的通信网络可以包括以下中的任一种和/或组合:直接互连;因特网;局域网(lan);城域网(man);作为因特网节点的运营任务(omni);安全的定制连接;广域网(wan);无线网络(例如,使用例如但不限于无线应用程序协议(wap)、i模式等的协议)等);等等。通信网络可以使用任何合适的通信协议以生成一个或多个安全通信信道。在一些情况下,通信信道可以包括安全通信信道,该安全通信信道可以以任何已知方式建立,例如通过使用相互认证和会话密钥,以及建立安全套接层(ssl)会话。
[0044]
用户装置110可以包括由用户操作的任何合适的装置。例如,用户装置110可以包括手提式计算机、桌上型计算机或智能手机等。用户装置110可以是尝试向第二用户发起交易的第一用户的计算机。第二用户可以例如操作接收方装置140。用户装置110可以连接到区块链网络130。用户装置110可以生成并向验证计算机120提供用于交互的授权请求消息。交互可以是用户装置110的第一用户与接收方装置140的第二用户之间的交易。授权请求消息可以包括与用户相关联的用户状态和用户证明。授权请求消息还可以包括交互数据,例如,交互金额。交互数据还可以包括与发送方相关联的信息(例如,令牌或账户信息、别名、装置标识符、联系地址等)、与接收方相关联的信息(例如,令牌或账户信息、别名、装置标识符、联系地址等)、一次性值(例如,随机值、临时数、时间戳、计数器等)和/或任何其它合适的信息。
[0045]
验证计算机120可以是在交互被发布到区块链网络130上之前对所述交互进行授权的计算机。验证计算机120可以在将区块添加到区块链网络130之前验证所述区块。例如,验证计算机120可以从用户装置110接收请求对交互的授权的授权请求消息。验证计算机120可以验证用户是否具有足够的金额来满足所述交互的交互金额,如图4中进一步详细描述的。例如,用户可以具有带有一定金额货币的账户。验证计算机120可以验证用户是否具有足够的货币来执行交互。
[0046]
区块链网络130可以是加密货币的区块链。在一些实施例中,区块链网络130的加密货币可以是基于账户的加密货币。区块链网络130可以是验证网络,其包括被编程以为交互提供验证的一组计算机。区块链网络130可以连续地从区块链网络130添加或移除计算机。区块链网络130的装置可以维护包括一个或多个区块的区块链。区块链的每个区块可以包括来自被处理交互的交互数据。
[0047]
接收方装置140可以是参与与第一用户的交易的第二用户的计算机。接收方装置140可以连接到区块链网络130。接收方装置140可以是由与用户装置110的用户不同的用户操作的用户装置。例如,接收方装置140可以是手提式计算机、桌上型计算机、智能手机等。
[0048]
图2a示出根据实施例的用户装置200的框图。示例性用户装置200可以包括处理器204。处理器204可以耦合到存储器202、网络接口206和计算机可读介质208。
[0049]
存储器202可以用于存储数据和代码。存储器202可以在内部或在外部耦合到处理器204(例如,基于云的数据存储装置),并且可以包括例如ram、dram、rom、闪存存储器或任何其它合适的存储器装置之类的易失性和/或非易失性存储器的任何组合。例如,存储器202可以存储用户状态、用户证明等。
[0050]
计算机可读介质208可以包括可由处理器204执行的代码,用于执行一种方法,所述方法包括:由用户装置生成包括用户状态和用户证明的授权请求消息,其中所述用户状态包括第一用户状态元素和第二用户状态元素,并且其中所述用户证明包括第一用户证明元素、第二用户证明元素和第三用户证明元素;由所述用户装置将所述授权请求消息提供给多个验证计算机中的验证计算机,其中所述验证计算机1)通过将所述第一用户证明元素的所述第二用户状态元素次幂乘以所述第二用户证明元素的所述第一用户状态元素次幂来计算第一验证值,2)通过求所述第二用户证明元素的所述第二用户状态元素次幂来计算第二验证值,3)将所述第一验证值与累加状态的第一累加状态元素进行比较,4)将所述第二验证值与累加状态的第二累加状态元素进行比较,并且5)在所述第一验证值与所述第一累加状态匹配并且所述第二验证值与所述第二累加状态元素匹配的情况下,对所述授权请求消息进行授权;以及由所述用户装置从所述验证计算机接收授权响应消息,其中所述授权响应消息指示所述授权请求消息是否被授权。
[0051]
网络接口206可以包括可允许用户装置200与外部计算机通信的接口。网络接口206可以使得用户装置200能够将数据传送到另一装置(例如,验证计算机250等)并从另一装置传送数据。网络接口206的一些实例可以包括调制解调器、物理网络接口(例如以太网卡或其它网络接口卡(nic))、虚拟网络接口、通信端口、个人计算机存储卡国际协会(pcmcia)插槽和卡,等等。由网络接口206启用的无线协议可以包括wi-fi
tm
。经由网络接口206传送的数据可以呈信号的形式,所述信号可以是电信号、电磁信号、光信号,或者能够由外部通信接口接收的任何其它信号(统称为“电子信号”或“电子消息”)。可以包括数据或指令的这些电子消息可以经由通信路径或信道在网络接口206与其它装置之间提供。如上所述,可以使用任何合适的通信路径或信道,例如电线或电缆、光纤、电话线、蜂窝链路、射频(rf)链路、wan或lan网络、互联网,或任何其它合适的介质。
[0052]
图2b示出根据实施例的验证计算机250的框图。示例性验证计算机250可以包括处理器254。处理器254可以耦合到存储器252、网络接口256和计算机可读介质258。
[0053]
存储器252可用于存储数据和代码。存储器252可以在内部或在外部(例如,基于云
的数据存储)耦合到处理器254,并且可以包括易失性和/或非易失性存储器的任何组合,例如ram、dram、rom、快闪或任何其它合适的存储器装置。例如,存储器252可以存储区块链的区块、区块标头、累加状态等。
[0054]
计算机可读介质258可以包括可由处理器254执行的代码,用于执行一种方法,所述方法包括:由验证计算机从用户装置接收授权请求消息,其中所述授权请求消息包括用户状态和用户证明,其中所述用户状态包括第一用户状态元素和第二用户状态元素,并且其中所述用户证明包括第一用户证明元素、第二用户证明元素和第三用户证明元素;由所述验证计算机通过将所述第一用户证明元素的所述第二用户状态元素次幂乘以所述第二用户证明元素的所述第一用户状态元素次幂来计算第一验证值;由所述验证计算机通过求所述第二用户证明元素的所述第二用户状态元素次幂来计算第二验证值;由所述验证计算机将所述第一验证值与累加状态的第一累加状态元素进行比较;由所述验证计算机将所述第二验证值与所述累加状态的第二累加状态元素进行比较;以及在所述第一验证值与所述第一累加状态匹配并且所述第二验证值与所述第二累加状态元素匹配的情况下,由所述验证计算机对所述授权请求消息进行授权。
[0055]
网络接口256类似于网络接口206,并且此处将不再重复其描述。
[0056]
2概念
[0057]
2.1符号注释
[0058]
对于n∈n,令[n]={1,2,...,n}。令λ∈n表示安全参数。在此处的一些实施例中,例如a之类的粗体符号表示向量,然而,鉴于粗体符号,本文描述的变量不限于向量或标量。向量a的第i元素由ai表示。长度n∈n的向量a和索引集由a|i、元素集{ai}
i∈i
表示。在其变量参数中由多项式界定的任何函数由(
·
)表示。如果算法t被建模为以λ为时间多项式运行的概率图灵机,则它可以被称为ppt。在某些情况下,如果函数的消失速度快于任何多项式的倒数,则函数可被称为可忽略的,由negl表示。如果s是集合,则指示在s内均匀随机地选择x的过程(特别是假设s可以有效地采样)。类似地,表示作为随机算法的输出的随机变量a。
[0059]
2.2累加器
[0060]
本文中可适配来自[bbf18]的累加器的定义,其遵循[bcd
+
17]的惯例。例如,密码编译的累加器可以是原语,其产生对一组元素以及所述一组元素中的任何元素的短期成员资格和/或非成员资格证明的较短绑定承诺。可以根据承诺公开验证这些证明。累加器(例如,无陷门(trapdoorless)通用累加器)可以被定义为作为原语的[bbf18]acc,其可以经由以下算法正式定义。
[0061]
1)acc.setup(1
λ
):给定安全参数λ,设置算法输出一些公共参数pp(其隐式地定义消息空间m)和累加器的初始状态a0。
[0062]
2)acc.add
pp
(a
t
,x):当在特定时刻t输入与集合s
t
和消息x∈m相对应的累加值a
t
时,添加算法输出与集合s
t+1
=s
t
∪{x}相对应的更新累加器值a
t+1
和一些可用于更新其它元素的证明的更新信息upmsg
t+1

[0063]
3)acc.del
pp
(a
t
,x):当在特定时刻t输入与集合s
t
和消息x∈m相对应的累加值a
t
时,添加算法输出与集合s
t+1
=s
t
\{x}相对应的更新累加器值a
t+1
和一些可用于更新其它元
素的证明的更新信息upmsg
t+1

[0064]
4)acc.memwitcreate
pp
(a
t
,x):当在特定时刻t输入与集合s
t
和消息x∈m相对应的累加值a
t
时,成员资格见证创建算法为x∈s
t
的成员资格输出成员资格证明
[0065]
5)acc.nonmemwitcreate
pp
(a
t
,x):当在特定时刻t输入与集合s
t
和消息x∈m相对应的累加值a
t
时,成员资格见证创建算法为的非成员资格输出非成员资格证明
[0066]
6)当在特定时刻t输入与集合s
t
、消息x∈m、x∈s
t
的成员资格的成员资格证明以及在执行第(t+1)次更新(add或del)时获得的更新信息upmsg
t+1
相对应的累加值a
t
时,成员资格见证更新算法为x∈s
t+1
的成员资格输出更新后的成员资格证明
[0067]
7)当在特定时刻t输入与集合s
t
、消息x∈m、针对的非成员资格的非成员资格证明和在执行第(t+1)次更新(add或del)时获得的更新信息upmsg
t+1
相对应的累加值a
t
时,非成员资格见证更新算法为的非成员资格输出更新后的非成员资格证明
[0068]
8)当在特定时刻t输入与集合s
t
、消息x∈m和x∈s
t
的成员资格的成员资格证明相对应的累加值a
t
时,成员资格验证算法仅在是x∈s
t
的成员资格的有效证明时才接受(即,其输出1)。
[0069]
9)当在特定时刻t输入与集合s
t
、消息x∈m和的非成员资格的非成员资格证明相对应的累加值a
t
时,非成员资格验证算法仅在是的非成员资格的有效证明时才接受(即,其输出1)。
[0070]
为了正确性,对于所有λ∈n,对于所有真实生成的参数对于所有时刻t∈n∪{0},对于所有x∈m,如果a
t
是在某个时刻t与m中的一组s
t
元素相对应的累加值(通过运行序列acc.add
pp
和acc.del
pp
获得)时,则是由acc.memwitcreate
pp
或acc.memwitup
pp
生成的x∈s
t
的成员资格的证明,然后以压倒性的概率输出1。类似地,如果是由acc.nonmemwitcreate
pp
或acc.nonmemwitup
pp
生成的的非成员资格的证明,则以压倒性的概率输出1。
[0071]
本文遵循的安全定义[lip12]为累加器规定了不可否认的特性。以下定义表明,如果对手无法构造累加器、元素x、有效成员资格见证w
x
和非成员资格见证u
x
,则累加器是安全的,其中w
x
表明x在累加器中,而u
x
表明其不在累加器中。此定义可被提供为定义1:如果对于每个ppt对手a,以下概率在λ中最多可忽略不计,则累加器acc是安全的:
[0072][0073]
累加器可以简洁,因为累加值a
t
的大小和上述所有算法的输出与t无关。
[0074]
累加器也可以被认为是隐藏的。例如,如果对手即使在获得其它元素的成员资格和/或非成员资格的证明之后也无法区分元素是否在累加器中,则累加器是隐藏的。弱隐藏的概念也可以定义为,当给定集合s的累加值a时,在最不利的情况下很难恢复任何x∈s。然而,在一些实施例中,隐藏可能不是实现累加器的关键特性。不满足隐藏的累加器的任何构造都可以通过例如使用承诺方案来固定(例如,首先使用标准承诺方案单独多每个消息进行承诺,然后将累加器应用于所获得的承诺集合)。
[0075]
所述定义仅要求按顺序更新成员资格和非成员资格的证明。换句话说,如果应用m更新,则必须更新成员资格和非成员资格的证明m次。人们可能希望建立累加器方案,其中必须更新成员资格和非成员资格的证明的次数与m呈次线性增长,所述m甚至可能是一个常数。[ch10]证明了相反的结果,但正如本文进一步论述的,这确实未被排除。
[0076]
2.3向量承诺
[0077]
[cf13]中提供了向量承诺的定义。例如,向量承诺允许装置、计算机等对有序的值序列进行承诺,使得以后可以仅相对于特定位置打开承诺。向量承诺vc可以是非交互式原语,其可经由以下算法正式进行描述。
[0078]
1)vc.keygen(1
λ
,q):给定安全参数λ和承诺向量的大小q(其中q=poly(λ)),密钥生成算法输出一些公共参数pp(其隐式地定义消息空间m)。
[0079]
2)vc.com
pp
(x1,...,xq):在输入q条消息x1,...,xq∈m和公共参数pp的序列时,承诺算法输出承诺字符串c和辅助信息aux。
[0080]
3)vc.open
pp
(x,i,aux):此算法由承诺方运行以产生证明λi,其中x是第i承诺消息。具体地说,注意,在已经发生一些更新的情况下,辅助信息aux可以包括由这些更新产生的更新信息。
[0081]
4)vc.ver
pp
(c,x,i,λi):只有当λi是c被创建为序列x1,...,xq的有效证明时,验证算法才接受(即,其输出1),使得x=xi。
[0082]
5)vc.update
pp
(c,x,x

,i):此算法由产生c并且希望通过将第i消息更改为x

来更新c的承诺方运行。算法将旧消息x、新消息x

和位置i作为输入。所述算法输出新的承诺c

以及一些更新信息u。
[0083]
6)vc.proofupdate
pp
(c,λj,x

,i,u):此算法可以由在位置j处持有关于c的一些消息的证明λj的任何用户运行,并且其允许用户计算更新的证明λj'(和更新的承诺c

),这样λj'将对c

有效,其中所述c'包含在位置i处作为新消息的x

。基本上,所述值u包含计算此类值所需的更新信息。
[0084]
为了正确性,对于所有λ∈n、q=(λ),对于所有真实生成的参数ppvc.keygen(1
λ
,q),如果c是对向量(x1,...,xq)∈mq的承诺(通过运行vc.com
pp
获得,可能随后是一系列更新),λi是由vc.open
pp
或vc.proofupdate
pp
针对任何i∈[q]生成的位置i的证明,则vc.ver
pp
(c,xi,i,λi)以压倒性概率输出1。
[0085]
向量承诺的安全要求是位置绑定。例如,这意味着,对于了解pp的任何多项式界定的对手来说,针对同一位置i提出承诺c和两个不同的有效开口是不可行的。此定义被提供为定义2:如果对于所有i∈[q]和每个ppt对手以下概率(接管所有真实生成的参数)在λ中最多可忽略不计,则向量承诺vc满足位置绑定:
[0086][0087]
向量承诺可以简洁,因为承诺字符串c的大小和上述所有算法的输出与q无关。
[0088]
向量承诺也可以被认为是隐藏的。例如,如果对手即使在看到一些开口(在两个序列一致的位置i处)之后也无法区分承诺是针对序列(x1,

,xq)还是针对序列(x1',...,xq')创建的,则向量承诺是隐藏的。弱隐藏的概念也可以定义为,当给定序列(x1,...,xq)的承诺时,在最不利的情况下很难恢复任何mi。隐藏可能不是实现向量承诺的关键属性。不满足隐藏的向量承诺的任何构造都可以使用承诺方案来固定(例如,首先使用标准承诺方案单独承诺每个消息,然后将向量承诺应用于所获得的承诺序列)。
[0089]
3累加器的不可能结果
[0090]
在此部分中,论述关于累加器的某些迫切需求的实施例的一些不可能的结果。除非另有说明,否则此部分将论述公钥设置。然而,实施例不限于此。如本文所描述的累加器方案可被定义为定义6、定义7和定义8。定义6可被定义为:令k为安全参数。累加器方案a cc由以下七个算法组成。
[0091]
1)setup(1
λ
):概率算法,以一元安全参数λ作为参数,并且返回一对公钥和私钥(pk,sk)以及空集的初始累加值。
[0092]
2)给定有限的元素集合x、公钥(或私钥)和初始累加值算法返回与集合x相对应的累加值acc
x

[0093]
3)verify(x,w,acc,pk):给定元素x、见证w、累加值acc和公钥pk,如果验证成功,则此确定性算法返回ok,这意味着x∈x,或否则返回


[0094]
4)witness(x,acc,pk,[sk]):此算法返回与由acc表示的集合的元素x相关联的见证w。
[0095]
5)insert(x,acc
x
,pk,[sk]):此算法计算将x插入集合x之后获得的新累加值acc
x∪{x}

[0096]
6)delete(x,acc
x
,pk,[sk]):此算法计算从累加集合acc
x\{x}
中移除x获得的新累加值x。
[0097]
7)updwit(x,w,acc
x
,upd
x,x

,pk):此算法会重新计算保持在所述集合中的一些元素x的见证。所述算法将其见证可被更新的元素x、与由累加值acc
x
表示的先前集合x相关的“旧”见证w、一些更新信息upd
x,x

和公钥pk作为参数,并且返回x的新见证。在一些实施例中,此算法由用户运行。
[0098]
定义7可被定义为:令x为集合,acc
x
为其相关联累加值并且x∈x。如果verify(x,w,acc
x
,pk)=ok,则累加器方案是正确的,其中acc
x
是集合x、x∈x的累加值,pk是公钥,并且w是通过对acc
x
、x和pk运行witness获得的见证。
[0099]
定义8可被定义为:令a cc为累加器方案。实施例可以考虑由下面的实验描述的安全性概念uf-acc:给定整数k、安全参数,对手可以访问oracle数据库o,所述oracle数据库通过扮演累加器管理器的角色来回复查询。使用oracle数据库,对手可以插入和删除他选择的多个多项式元素。oracle数据库会使用新的累加值进行回复。对手也可以要求见证计算或更新。最后,对手需要输出对(x,w)。对手a的优势定义如下:
[0100][0101]
其中pk是由setup生成的公钥。
[0102]
考虑以下普通的累加器a cc
duh
。令λ为安全参数。a cc
duh
由以下七种算法组成。
[0103]
1)setup(1
λ
):一对公钥和私钥是空的,即(pk,sk)=null并且空集的初始累加值为
[0104]
2)所述算法返回累加值acc
x
=x。
[0105]
3)verify(x,w,acc,pk):此确定性算法检查x∈acc是否正确,如果正确,则返回ok,否则返回

。在一些情况下,如果验证w中没有使用见证w,则可以是null。
[0106]
4)witness(x,acc,pk,[sk]):此算法返回null。
[0107]
5)insert(x,acc
x
,pk,[sk]):此算法计算新的累加值
[0108]
acc
x∪{x}
=acc
x
∪{x}
[0109]
6)delete(x,acc
x
,pk,[sk]):此算法计算新的累加值
[0110]
acc
x\{x}
=acc
x
\{x}
[0111]
7)updwit(x,w,acc
x
,upd
x,x

,pk):此算法返回null。在一些情况下,如果见证w和更新信息upd
x,x

未在验证中使用,则它们将是无效的。
[0112]
应注意,a cc
duh
满足定义1中描述的正确性概念,在定义1中描述的安全性实验中,任何对手a的优势为零。acc可能会随着其中元素的数量线性增长。此外,verify的运行时间也可以随着其中元素的数量线性增长。由实施例提供的各种实施方案包括恒定(实际上为零)大小的见证和更新信息。此外,见证不会随时间而改变。
[0113]
3.1非平凡的见证
[0114]
真正累加的累加器可以具有非平凡的见证。这在定理2中示出,如下所示:按照定义1、1和1,令a cc为正确且安全的累加器方案。如果累加器acc的大小不随其中元素的数量线性增长,则元素的见证可能是非平凡的,即,见证的大小可以是ω(1)。
[0115]
作为定理2的证明,对于任意n,令某一时间点的累加集合为现在,用户可以获得对每个元素i∈[n]的见证wi。使用这些见证,可以通过对每个见证n运行公共验证算法来推断verify个元素中的哪些元素已被添加到累加器中。此过程还完全基于累加器的正确性和安全性而起作用。与初始状态相比,仅可能发生变化的信息是见证和累加器本身。因为可以添加n个元素中的任何数目的元素,并且用户可以准确地恢复此信息,
[0116][0117]
由于|acc|=o(n),
[0118]
[0119]
这就证明了这一主张,即假设见证是大小一致。在一些实施例中,为了移除此假设,可以将见证的大小设置为适当大的。
[0120]
请注意,即使在仅插入型累加器的情况下,上述不可能性也成立。此外,即使实施例假设在生成见证和/或见证在插入时生成并可被更新以供进一步使用的场景中需要一些密钥sk,上述证明仍然表明,只要累加器是非平凡的,功能性(可能更新的)见证就必须是非平凡的。因此,我们不能指望在任何有意义的环境中都有非平凡的见证。
[0121]
很容易看出如何从向量承诺中实现累加器,所述向量承诺对将要承诺的向量的大小没有先验限制。因此,不可能的结果也适用于此类向量承诺。所述结果也适用于向量承诺,所述向量承诺对将要承诺的向量的大小具有先验界定,前提是向量承诺与界定相比是简洁的。
[0122]
不可能的结果可以用以下方式解释。见证生成算法witness在每次运行时都会生成一些非平凡的信息。请注意,算法可用的唯一新信息是插入累加器的元素。如[ch10]中所定义的,witness的输入为(x,acc,pk,[sk])。由于各种实施例可能希望acc和pk较小(换句话说,不随插入累加器的元素数量而增长),因此不清楚此非平凡的信息来自何处。我们必须假设它来自sk,这意味着[ch10]的定义在公钥设置中没有真正意义。在[ch13]中,在向量承诺的上下文中,定义通过允许见证生成算法访问被证明是已提交的消息列表的一些辅助信息aux来解决这个问题。在[bbf18]中,在累加器和向量承诺的上下文中,定义通过向见证生成算法提供已经插入累加器或向量承诺的消息集合来解决这个问题。
[0123]
3.2批处理更新
[0124]
camacho和hevia[ch10]指出,如果累加器允许更新(例如以删除的形式),则更新之后更新见证所需的信息不能短,确切地说,其大小无法恒定。换言之,他们指出,不同更新的更新信息无法进行批处理。此部分论述了其不可能的结果。[ch10]中的定理3指出:对于n个元素的集合中涉及m个删除操作的更新,在保持动态累加器安全的情况下,由算法updwit使用的信息upd
x,x,
的大小为具体地说,如果并且n为偶数,则|upd
x,x

|=ω(m)。
[0125]
在[ch10]中呈现的定理的证明按如下所示进行。令在某个时间点上的累加集合为x={x1,...,xn}。假设单个用户拥有这些元素中的每一个的见证。发布了从x中删除1≤m≤n个元素的更新,即其中|x

|=n-m。令upd
x,x

为更新信息,用户可以使用它更新x中每个元素的见证。显然,m个更新的见证将是无效的,因为对应元素已被删除。此外,通过对每个更新的见证运行公共验证算法verify,可以推断出n个元素中的m个已被删除。此过程还完全基于累加器的正确性和安全性而起作用。因为n个元素中的任何m个可能都已被删除,并且用户可以准确地恢复这些信息,
[0126][0127]
应注意,acc
duh
平凡地满足了定义7中描述的正确性概念,并且在定义8中描述的安全实验中,任何对手a的优势为零。但是,无论更新是什么,更新信息upd
x,x

都是null。实际上,没有见证需要进行验证,并且因此具体地说,不需要更新见证。
[0128]
反对在相反定理3中使用acc
duh
的一个理由是,所述实际上不是累加器,因为它不压缩以任何方式累加的集合元素。证明中引用的用户推断出集合中n个元素中的m个被删除,而不仅仅是更新信息upd
x,x

。实际上,它们需要集合x={x1,

,xn}、{wi}
i∈[n]
个元素中的每一个n的见证acc
x
、acc
x

、upd
x,x

和pk。正是所有这些元素一起向用户通知更新中删除的元素,从而得出以下结论:
[0129][0130]
我们可以看到,即使对于a cc
duh
,也是如此。但是应注意
[0131][0132]
因此,此结果没有特别的后果,因此没有理由说一个正确且安全的累加器不能进行批处理更新。
[0133]
另一方面,更仔细选择的论点将意味着
[0134][0135]
如果假设累加器是非平凡的,则批处理更新的不可能性是成立的。定理4给出了这一点,它指出:按照定义6、7和8,令a cc是正确且安全的累加器方案。如果累加器acc的大小不随其中元素的数量线性增长,则对元素的见证进行更新可能是非平凡的,即,每次更新的更新信息的大小可以是ω(1)。
[0136]
作为定理4的证明,考虑空的累加器可以发布i∈[n]的表格updi=(insert,i)的一系列n次更新,其中n是任意的。令为作为第i次更新的结果而发布的更新信息,其中针对i∈[n],并且xi=[i]。针对0≤t≤n,令表示i相对于集合x
t
的见证。对于每个i∈[n],可以仅使用和pk来计算。应注意,所有最终见证,即对于i∈[n],每个i∈[n]的都是仅使用更新信息updi来计算。使用这些更新的见证,可以通过对每个见证运行公共验证算法verify来推断n个元素中的哪些元素已被添加到累加器中。此过程还完全基于累加器的正确性和安全性而起作用。与初始状态进行比较,可以获得的新信息仅是更新信息和累加器本身。因为可以添加n个元素中的任何数目的元素,并且用户可以准确地恢复此信息,
[0137][0138]
由于|acc|=o(n),
[0139][0140]
这就证明了这一主张,即每次更新的更新信息的大小一致。在一些实施例中,为了移除此假设,可以将更新信息的大小设置为适当大的。
[0141]
请注意,即使在仅插入型累加器的情况下,上述不可能性也成立。此外,即使假设在生成见证和更新信息和/或见证和更新信息在插入时生成并可被更新以供进一步使用的
本文中考虑的场景中需要一些密钥sk,上述证明仍然表明,只要累加器是非平凡的,任何功能性(可能更新的)更新信息就必须是非平凡的。因此,我们不能指望在任何有意义的环境中对见证进行批处理更新。
[0142]
很容易看出如何从向量承诺中实现累加器,所述向量承诺对将要承诺的向量的大小没有先验限制。因此,不可能的结果也平凡地适用于此类向量承诺。所述结果也适用于向量承诺,所述向量承诺对将要承诺的向量的大小具有先验界定,前提是向量承诺与界定相比是简洁的。
[0143]
不可能的结果可以用以下方式解释。见证可以在给定时间取决于累加器中的元素集合。从这个意义上讲,很明显,更新不能成批进行,因为更新可以传递关于已从累加器中插入或删除的元素的信息,以便更新的见证也反映累加器中的当前元素集合。
[0144]
4累加器
[0145]
在此部分中,描述了累加器方案。作为起始点,考虑满足所有要求的累加器,但要求简洁,如以下函数所描述的:
[0146]
1)setup(1
λ
):对将λ位数字映射到唯一o(λ)位素数的散列函数h的描述进行采样。设m={0,1}
λ
。输出(pp,a0)=(h,1)。
[0147]
2)add
pp
(a
t
,x):检查是否为h(x)|a
t
。如果是,则设a
t+1
=a
t
。否则,设a
t+1
=a
t
·
h(x)。输出(a
t+1
,upmsg
t+1
=null)。
[0148]
3)del
pp
(a
t
,x):检查是否为h(x)|a
t
。如果是,则设否则,设a
t+1
=a
t
。输出(a
t+1
,upmsg
t+1
=null)。
[0149]
4)memwitcreate
pp
(a
t
,x):输出
[0150]
5)nonmemwitcreate
pp
(a
t
,x):输出
[0151]
6)输出
[0152]
7)输出
[0153]
8)检查是否为h(x)|a
t
。如果是,则输出1。否则,输出


[0154]
9)检查是否为h(x)|a
t
。如果是,则输出

。否则,输出1。
[0155]
上文所描述的累加器满足正确性和安全性要求。问题是在最不利的情况下,|a
t
|=o(λt)。在一些实施例中,解决此技术问题的方法是将此产品累加器以指数放置,即,构建形式为以下内容的累加器
[0156][0157]
其中g是群组g的发生器。此类似于[[bf18]中的构造的起始点。然而,现在的问题是,与实际使用不同,实施例使用对群组g的阶数进行模化,并且为了可靠性,实施例可以依赖于群组的阶数是未知的。实际上,[bbf18]基于强rsa假设证明累加器的安全性。然而,在此情境中,与平凡构造的情况相反,必须开始释放见证。[cf13]和[bbf18]中的见证在某种形式下是累加器中所有其它元素的“累加器”。因此,可能需要随着
累加器的改变而更新。出于这些原因,考虑了将memwitcreate(a
t
,x)作为add
pp
(a
t-1
,x)的一部分执行并且仅在未来更新见证的场景,而不是能够在任意时刻为任意元素生成见证。将进一步描述根据各种实施例配备有这些直觉、系统和方法。
[0158]
4.1仅插入型累加器
[0159]
首先将论述仅插入型累加器的构造。应注意,本文论述的下限也适用于这种情况。可以忽略元素的非成员资格的见证。集合x={xi}
i∈[q]
的累加器a(x可以指系统中的值的总累加量,xi可以是由用户i持有的量,并且q可以是账户总数),根据实施例采取如下形式,并且如图5a所示:
[0160][0161]
其中zi可以是与用户i相关联的随机值,g可以是发生器。在上文中描述了i和q,并且j可以指i以外的用户。累加器输出可以被称为累加状态,并且可以是包括第一累加状态元素、第二累加状态元素和第三累加状态元素的元组,这些累加状态元素可以分别对应于上述等式中括号内的三个元素。
[0162]
作为示意性实例,可以存在与用户状态相关联的三个用户。累加状态可以累加第一用户的用户状态、第二用户的用户状态和第三用户的用户状态。累加状态可以存储在区块链的最新区块中。在一些实施例中,累加状态可以存储在区块链的最新区块的区块标头中。例如,当存在三个累加用户状态时,累加状态可以等于此处,x1可指代第一用户,用户1的金额。z2和z3可以是分别与第二用户和第三用户(用户2和用户3)相关联的随机值。
[0163]
可基于验证网络中的每个用户的每个第一用户状态元素(例如,金额)和每个第二用户状态元素(例如,随机值)创建第一累加状态元素。第一用户状态元素可以通过求每个第一用户状态元素的除与第一用户状态元素相关联的第二用户状态元素之外的每个第二用户状态元素的乘积次幂来生成。这些指数中的每一个都已经乘以发生器g的幂,然后可以相乘在一起。例如:
[0164][0165]
此等式等效于上文所示的累加状态元组的第一元素。
[0166]
第二累加状态元素可以基于验证网络中的每个用户的每个第二用户状态元素来创建。第二累加状态元素可以通过将每个第二用户状态元素乘以选定发生器值的指数来创建。
[0167]
第三累加状态元素可以是验证网络中的用户状态的数量。例如,上述实例将具有与三个不同的用户状态相对应的三个不同的用户。因此,第三累加状态元素将为值3。然而,在一些实施例中,用户可以与多于一个的用户状态相关联。例如,用户可以在验证网络中具有多个账户。第三累加状态元素表示用户状态的数量,而不是验证网络中的用户数量。
[0168]
元素xk∈x的成员资格见证(k表示用户的标识符,x将是与用户k相关联的金额,并且x是系统中的值的总量)将如下所示,并且如图5b中所示:
[0169][0170]
这基本上是x中的所有其它元素的累加器(上面的pi符号表示证明,而不是上面等式中的变量)。见证可以被称为用户证明,并且可以是包括第一用户证明元素、第二用户证明元素和第三用户证明元素(分别对应于上述等式中括号内的元素)的元组。所述元素xk可以是用户状态(xk,zk)的一部分。此等式中括号内的元素可以分别是第一用户状态元素和第二用户状态元素的实例。假设这些随机值zi可以公开生成,比如说通过一些伪随机函数生成。在一些实施例中,如果存在它们的一些简洁表示,则zi中不需要任何真实随机性。这一点从各种实施例可以公布伪随机函数的密钥以使其能够公开评估的事实中是清楚的。然后,见证的验证仅仅是以下检查,包括计算第一验证值,如图5c所示:
[0171][0172]
以及第二验证值,如图5d所示:
[0173][0174]
下面参照图4描述第一验证值和第二验证值的计算和实例。
[0175]
应注意,上述设计还描述了向累加器添加元素的程序。为了将元素x
q+1
添加到x,
[0176][0177]
其中x

=x∪{x
q+1
}。此外,成员资格x
q+1
的见证可以是
[0178]
还可以更新元素的成员资格的见证。例如,在将x
q+1
添加到累加器时,使用更新信息(x
q+1
,q+1),可以针对成员资格xk更新见证如下所示:
[0179][0180]
很容易验证对成员资格xk∈x

的验证是否成功。
[0181]
最后一个难题是安全性,即验证程序的可靠性。由于各种实施例正在处理仅附加累加器而不处理非成员资格的见证,因此安全要求是,对手在计算上针对累加器中不存在的元素x

产生见证是不可行的。这可以如下进行分析。假设对手针对x的成员资格提出元素
x和见证w=(w
x,1
,w
x,2
,w
x,3
)。首先,检查1≤w
x,3
≤a
x,3
。令w
x,3
=k并且a
x,3
=q。然后,检查
[0182][0183]
如果检查通过,则,以压倒性的概率得出,
[0184][0185]
这是因为
[0186][0187]
是非平凡的第zk单位根。在不知道群组阶数的情况下,可能很难找到此类元素。具体地说,这意味着已经计算了非平凡元素α的阶数。作为最终检查:
[0188][0189]
应注意
[0190][0191]
并且,以压倒性的概率得出因此
[0192][0193]
对于xk≠x的情况:
[0194]
并且
[0195][0196]
因此确定β,可能难以以未知阶数群组找到非平凡元素γ的第zk根。但是,以下攻击是可能的:令x
k-x=zk并且然后,验证检查将通过。为了防范此类攻击,各种实施例可以确保x
k-x≠zk。这可以通过使zk按指数规律(呈λ)大于x
k-x来实现。
[0197]
图3示出根据实施例的授权请求消息处理方法的流程图。将在用户装置302生成用于用户装置302与接收方装置306之间的交互的授权请求消息的上下文中描述图3所示的方法。用户装置302可以将授权请求消息提供给验证计算机304,并且可以接收指示交互是否被授权的授权响应消息。例如,在一些实施例中,交互可以是交易,并且当验证计算机304将交易包括在区块链的区块中时可以被授权。
[0198]
在步骤320之前,在一些实施例中,用户装置302可以发起交互(例如,交易、数据传输交互等)。例如,用户装置302的第一用户可以选择与接收方装置306的第二用户执行交易。
[0199]
在步骤320处,用户装置302可以生成用于交互的授权请求消息。授权请求消息可以包括用户状态和用户证明。在一些实施例中,所述授权请求消息还可以包括交互数据、日期、时间、用户装置标识符、接收方装置标识符等。用户状态可以是包括一个或多个元素的元组。例如,用户状态可以包括第一用户状态元素和第二用户状态元素。
[0200]
第一用户状态元素可以是与用户装置302的用户的账户相关联的金额(例如,余额等)。例如,第一用户状态元素可以是xk,其中k表示用户的标识符(例如,用户1为k=1),并且x表示金额(例如,5.00美元)。在一些实施例中,可以基于金额创建第一用户状态元素。例如,第一用户状态元素可以基于将金额与临时数以串联或其它方式组合而创建。
[0201]
第二用户状态元素可以是随机值。例如,第二用户状态元素可以是zk,其中k表示用户的标识符(例如,用户1为k=1),而z表示随机值(例如,18389828332)。在一些实施例中,第二用户状态元素可以是散列函数的输出。例如,可以将指示向量中的特定位置的值输入到散列函数中以获得第二用户状态元素。例如,可以在用于创建累加器承诺的向量中为每个用户分配特定位置。可以向第一用户分配向量中的第一位置(例如,值为0或1)。第一用户的第二用户状态元素可以等于散列函数的输出(例如,h(0)或h(1))。
[0202]
授权请求消息的用户证明可以是包括一个或多个元素的元组。例如,用户证明可以包括第一用户证明元素、第二用户证明元素和第三用户证明元素。用户证明可以是见证,如本文所描述的。见证可以是累加状态中的元素的成员资格的证明。例如,用户证明可以是用户状态是累加状态的元素的证明,其可以存储在区块链的每个区块中。换句话说,用户可以使用用户证明来证明他或她的用户状态以累加状态存在。累加状态可以是区块链网络中用户状态的紧凑聚合。
[0203]
第一用户证明元素和第二用户证明元素可以由验证计算机使用来验证用户状态是否包括在区块链中最新区块的累加状态中。因此,验证计算机304可以验证用户装置302与足够的金额(例如,资金)相关联以执行交互(例如,交易)。
[0204]
用户证明的第三用户证明元素可以包括迄今为止在累加状态下累加的多个元素的值。例如,如果区块链网络中存在与500个用户相关联的500个账户,则第三用户证明元素可以是表示多个账户的值500。
[0205]
例如,累加状态可以如下所示,如图5a所示:
[0206][0207]
例如,用户证明可以如下所示,如图5b所示:
[0208][0209]
以上详细描述了这些等式。
[0210]
在一些实施例中,在生成所述授权请求消息之前,用户装置302基于自上次更新用户证明以来包括在区块链中的交互来更新用户证明。例如,用户装置302可以使用来自上次用户装置302更新用户证明以来执行的每个交互的一个或多个值变化(δk,其中k是特定用户并且

符号表示所述变化)来更新用户证明。例如,起始用户证明可以是第二用户证明元素和第三用户证明元素不需要更新。为了用值变化δ2(例如,由第二用户,即用户2进行的交易的交易金额)更新第一用户证明元素,用户装置302可以将第一用户证明元素(例如,)提高到金额δ2的变化乘以与对应于金额δ2的变化的用户状态相关联的随机值(z2)的指数。例如,
这些可以表示并入有交易金额δ2的新的第一用户证明元素。
[0211]
因此,用户装置302可以基于自用户装置302上次更新用户证明以来已添加的区块链块的区块中包括的交互来更新用户证明。
[0212]
在步骤322处,在生成授权请求消息之后,用户装置302可以将授权请求消息提供给验证计算机304。在一些实施例中,用户装置302可以将授权请求消息广播到验证网络中的多个验证计算机,其中验证计算机304是多个验证计算机中的一个。
[0213]
在步骤324处,在接收到授权请求消息之后,验证计算机304可以对用户证明进行验证。例如,验证计算机304可以对用户证明提供足够的证明进行验证,验证交互的金额等于或小于由第一用户状态元素指示的金额。例如,验证计算机304可以验证用户具有足够的资金。验证计算机304可以确定是否将交互包括在区块链的新区块中。在图4中进一步详细描述了步骤324。
[0214]
在步骤324处,在评估授权请求消息并确定是否将交互包括在区块链的新区块中之后,验证计算机304可以生成授权响应消息,所述授权响应消息包括交互是否被授权的指示。
[0215]
在步骤328处,在生成授权响应消息之后,验证计算机304可以将授权响应消息提供给用户装置302。
[0216]
在一些实施例中,在步骤330处,在生成授权响应消息之后,验证计算机304可以将授权响应消息提供给与用户装置302一起正在执行交互的接收方装置306。
[0217]
在其它实施例中,在步骤332处,在从验证计算机304接收到授权响应消息之后,用户装置302可以将授权响应消息提供给接收方装置306。
[0218]
图4示出根据实施例的验证方法的流程图。图4所示的方法将在用户装置将授权请求消息提供给验证计算机的上下文中描述。验证计算机可以验证用户装置的用户与足以执行交互的金额相关联。在一些实施例中,验证计算机可以基于用户和/或用户装置的验证来授权交互。图4的步骤410-480可以在图3的步骤324期间执行。例如,从用户装置302提供给验证计算机304的授权请求消息可以是在步骤410处由验证计算机接收的授权请求消息。
[0219]
在步骤410处,验证计算机可以从用户装置接收授权请求消息。如本文所描述,所述授权请求消息可以包括用户状态和用户证明。用户状态包括第一用户状态元素和第二用户状态元素。用户证明包括第一用户证明元素、第二用户证明元素和第三用户证明元素。
[0220]
作为示意性实例,用户状态可以表示关于用户的信息。例如,用户状态(例如,(xk,zk))可以是包括与用户相关联的账户中包括的金额(例如,第一用户状态元素xk)和随机值(例如,第二用户状态元素zk)的元组。包括在用户状态中的值可以是任何合适的数值。例如,第一用户状态元素xk的值可以是100美元。第二用户状态元素zk的值可以是0、5、100等。在此实例中,用户状态可以与第一用户相关联。因此,可以将用户状态写入为(x1,z1)。
[0221]
包括第一用户证明元素、第二用户证明元素和第三用户证明元素的用户证明可以是元素xk∈x(例如,第一用户状态元素)的成员资格的见证。在一些实施例中,第一用户证明元素和第二用户证明元素可以是数据项,所述数据项可以证明第一用户状态元素xk被包括在区块链中最新区块的累加状态中。第三用户证明元素可以指示用户与累加状态中的多个条目中的哪个条目相关联(例如,用户与累加状态中包括的来自多个用户的多个第一用户状态元素中的哪一个相关联)。
[0222]
作为示意性实例,可以存在与三个不同用户相关联的三个不同的第一用户状态元素。如果第一用户被分配到金额1(例如,具有示例性金额1、2和3),则第一用户的第三用户证明元素可以等于1(例如,k=1)。第一用户证明元素和第二用户证明元素可以基于第二用户和第三用户的用户状态生成,并且可能不需要基于第一用户的用户状态生成。此外,可以基于第二用户和第三用户的用户状态的金额和随机值两者生成第一用户证明元素。然而,可以基于第二用户和第三用户的用户状态的随机值生成第二用户证明元素。例如,第一用户证明元素可以是第二用户证明元素可以是因此,由验证计算机接收到的用户证明可以是
[0223]
在一些实施例中,授权请求消息还可以包括交互数据。例如,用户装置可以将与交互有关的交互数据包括到用于用户装置正尝试的交互的授权请求消息中。例如,授权请求消息中的交互数据可以包括交互金额。在一些实施例中,交互数据可以包括交易金额和未使用的交易输出(utxo)。在其它实施例中,交互数据可以包括与用户装置302和/或用户相关联的信息(例如,令牌或账户信息、别名、装置标识符、联系地址等),与接收方装置306和/或接收方装置306的用户相关联的信息(例如,令牌或账户信息、别名、装置标识符、联系地址等)、一次性值(例如,随机值、临时数、时间戳、计数器等)和/或任何其它合适的信息。
[0224]
在步骤420处,在接收到授权请求消息之后,验证计算机可以计算第一验证值。验证计算机可以通过将第一用户证明元素的第二用户状态元素次幂乘以第二用户证明元素的第一用户状态元素次幂来确定第一验证值。在一些实施例中,第一验证值可用于验证第一用户证明元素,而第二验证值可用于验证第二用户证明元素。
[0225]
例如,验证计算机可以通过将第一用户证明元素的第二用户状态元素次幂(例如,)乘以第二用户证明元素的第一用户状态元素次幂(例如,)来确定第一验证值。这两个因素相乘可使得第一验证值。这两个因素相乘可使得此术语可表征为基于系统中每个用户的金额和随机值求幂的发生器g。
[0226]
在步骤430处,在计算第一验证值之后,验证计算机可以通过求第二用户证明元素的第二用户状态元素次幂来计算第二验证值。作为实例,验证计算机可以通过求第二用户证明元素(例如,)的第二用户状态元素(例如,z1)次幂来确定第二验证值。执行此幂运算可使得这表示基于所有随机数而没有基于金额而求幂的发生器。
[0227]
在一些实施例中,验证计算机可以使用用户标识符k从另一数据源获得用户状态,而不是从用户装置接收用户状态。例如,第三用户证明元素可以等于1,其可以是第一用户,即用户1的标识符k1。验证计算机可以确定用于确定第一验证值和第二验证值的第一用户状态元素和第二用户状态元素应与第一用户(例如,(x1,z1))相关联。
[0228]
在一些实施例中,验证计算机可以从在步骤440之前由验证计算机维护的区块链中的前一区块中检取包括第一累加状态元素和第二累加状态元素的累加状态。
[0229]
在步骤440处,在确定第一验证值和第二验证值之后,验证计算机可以将第一验证值与累加状态的第一累加状态元素进行比较。如本文所描述,累加状态可以为如下所示(其在上文详细描述了):
[0230][0231]
在此实例中,可以存在与三个用户状态相关联的三个用户。累加状态可以累加第一用户的用户状态、第二用户的用户状态和第三用户的用户状态。累加状态可以存储在区块链的最新区块中。在一些实施例中,累加状态可以存储在区块链的最新区块的区块标头中。例如,当存在三个累加用户状态时,累加状态可以等于
[0232]
验证计算机可以将第一验证值(在步骤420中确定的)与累加状态的第一累加状态元素(例如,)进行比较。在此实例中,验证计算机确定第一验证值与存储在区块链中的第一累加状态元素匹配。然后验证计算机可以继续到步骤450以验证第二验证值。
[0233]
在一些实施例中,如果用户装置是恶意的并且试图提供例如包括第一用户状态元素(例如,金额)的用户状态,所述第一用户状态元素不同于包括在累加状态中的实际金额,则验证计算机将确定第一验证值与第一累加状态元素不匹配。例如,如果用户装置提供虚假金额f(例如,试图执行用户实际上没有所需资金的交易),则验证计算机将确定第一验证值所述第一验证值与第一累加状态元素不匹配,因为虚假金额f会改变计算结果,从而使得结果与使用实际金额x1的情况不同。
[0234]
在步骤450处,验证计算机可以将第二验证值与累加状态的第二累加状态元素进行比较。验证计算机可以将第二验证值(在步骤430中确定的)与累加状态的第一累加状态元素(例如,)进行比较。在此实例中,验证计算机确定第二验证值与区块链中存储的第二累加状态元素匹配。然后,验证计算机可以继续到步骤460以对授权请求消息的交互进行授权。
[0235]
在一些实施例中,如果用户装置提供虚假金额(例如,第一用户状态元素),但提供正确的随机值(例如,第二用户状态元素),则验证计算机可以确定第一验证值与第一累加状态元素不匹配,但第二验证值与第二累加状态元素匹配。这是因为第二验证值不依赖于虚假金额(例如,第一用户状态元素)。
[0236]
在一些实施例中,验证计算机可以将第三用户证明元素与累加状态的第三累加状态元素进行比较。例如,验证计算机可以确定第三用户证明元素是否是小于或等于第三累加状态元素的值。第三累加状态元素可以是验证网络中的用户状态的总数量。因此,如果用户装置提供大于第三累加状态元素的第三用户证明元素,则用户装置会将不正确信息提供给验证计算机。
[0237]
在步骤460处,如果第一验证值与第一累加状态匹配并且第二验证值与第二累加状态元素匹配,则验证计算机可以对授权请求消息的交互进行授权。在一些实施例中,验证计算机还可以确定包括在授权请求消息中的交互金额是否小于或等于第一用户状态元素(例如,金额)。如果交互金额小于或等于第一用户状态元素,则用户装置可以确定用户具有足够的资金用于交互。如果交互金额大于第一用户状态元素,则验证计算机可以拒绝交互。
[0238]
在授权交互之后,验证计算机可以至少将交互金额包括到由验证计算机维护的区
块链的新区块中。例如,验证计算机可以向验证网络提出至少包括交互的交互金额和任何数量的其它交互的新区块。验证网络可以执行任何合适的共识协议以确定是否将新区块添加到区块链。如果验证网络的计算机决定将新区块添加到区块链,则验证计算机可以生成授权响应消息,从而指示授权请求消息已被授权。验证计算机可以将授权响应消息提供给用户装置。
[0239]
在一些实施例中,验证计算机可以基于值到金额(例如,第一用户状态元素)的变化基于交互金额来更新累加器状态。例如,验证计算机可以基于包括在区块链的新区块中的每个已执行的交互来更新累加器状态。如果区块中包括50个交互,则验证计算机可以基于50个值变化(例如,δk)来更新累加器。
[0240]
作为实例,验证计算机可以基于参考图4所描述的授权交互更新累加器状态。金额的变化(例如,第一用户状态元素)可以为δ1。具体地说,验证计算机可以基于第二用户证明元素(例如,)和金额的变化δ1更新第一累加状态元素,所述变化也等于交互金额。
[0241]
验证计算机可以将第二用户证明元素(例如,)提高到金额变化δ1的指数。例如,然后,验证计算机可以将上述值(例如,中间值)与第一累加状态元素相乘。例如:
[0242][0243]
因此,验证计算机可能只需要基于区块链的新区块中的交互中使用的第一用户状态元素的值变化(例如,交互金额)来更新累加状态。验证计算机不需要重新计算累加状态元素的指数,所述累加状态元素包括新区块中的交互中未使用的用户状态元素。
[0244]
在一些实施例中,用户装置可以以与验证计算机如何更新累加状态类似的方式在本地更新用户证明。
[0245]
4.2构造
[0246]
接下来,提供用于各种实施例(例如,在图3-4中)的累加器的构造。可以使用以下5个函数。
[0247]
1)setup(1
λ
):对[a,b]范围内的未知阶数的群组的描述进行采样,其中a、b和a-b是λ的指数,并且为随机元素在一些实施例中,g的随机元素将以压倒性概率为g的发生器,并且至少可能不是低阶数的。令|b|=m。对将λ位数字映射到集合primes(m+1)\[0,b]中唯一素数的散列函数h的描述进行采样。设m=[0,a)。输出(pp,a0)=((g,g,h,a,b),(1,g,0))。
[0248]
2)add
pp
(a
t
,x):令z
t+1
=h(t+1)。
[0249]

[0250]
输出(a
t+1
,upmsg
t+1
=(x,t+1))。
[0251]
3)memwitcreate
pp
(a
t
,x):在执行add
pp
(a
t-1
,x)时,memwitcreate
pp
(a
t
,x)输出
[0252]
4)对输入a
t
=(a
t,1
,a
t,2
,a
t,3
)、
和upmsg
t+1
=(upmsg
t+1,1
,upmsg
t+1,2
)进行解析。令z=h(upmsg
t+1,2
)。输出
[0253][0254]
5)对输入a
t
=(a
t,1
,a
t,2
,a
t,3
)和进行解析。令检查是否:
[0255]
0≤x《a
[0256][0257][0258][0259]
如果是,则输出1。否则,输出


[0260]
4.3完整性和有效性
[0261]
方案的正确性直接遵循检查结果。还应请注意,就计算难度而言,每个操作最多涉及一次散列计算、三次幂运算和一次乘法运算。累加器的大小可以是恒定的,即两个群组元素,除了跟踪已添加到累加器中的元素数量的计数器之外,计数器以对数增长。假设执行不超过2
λ
添加,计数器的大小也是恒定的,受λ位限制。成员资格的见证也是如此。
[0262]
5向量承诺
[0263]
新向量承诺的起始点是部分5中设计的仅插入型累加器。回想一下,集合x={xi}
i∈[q]
的累加器a采用以下形式
[0264][0265]
其中zi是随机奇数串。元素xk∈x的成员资格的见证将是
[0266][0267]
这可以x是中所有其它元素的累加器。(例如,通过一些伪随机函数)可以公开生成字符串zi。在一些情况下,各种实施例可能不需要zis中的任何真实随机性,只是它们具有一些简洁的表示。这可能是因为实施例可以发布伪随机函数的密钥以启用公共评估。
[0268]
关键的观察结果是累加器对元素中添加的阶数很敏感。此阶数可被认为是指定正在进行承诺的向量中的索引。此外,由于可以公开生成zi,因此正在进行承诺的向量的大小没有先验界定。此外,指数在正在进行承诺的消息中是线性的。因此,为了将在索引i处承诺的消息改变δ,只需执行以下操作:
[0269][0270]
这意味着只需知道索引i和δ即可对向量中的第i消息执行更新。令
[0271][0272]
首先,应注意可以公开产生β。但是,这将是项计算密集型任务—必须针对j∈[q]\{i}生成所有zj,然后执行q-1次幂运算。然而,应注意
[0273][0274]
因此,如果假设参与第i元素更新的一方可以访问则可以假设可以访问β,并且无需在每次发布更新时重新计算β。然而,可以解决此限制。例如,在区块链的情况下,想要向另一用户发送一些资金的发送方将无法有效地更新对应于接收方账户中反映的变化的向量承诺,除非所述发送方能够访问接收方的见证。
[0275]
如果在索引处i执行更新,则与第i消息相对应的见证不会改变。对于k≠i,元素xk的成员资格的见证可通过执行以下操作来更新:
[0276][0277][0278]
γ可以公开生成。然而,这可能是计算密集型任务。例如,可能需要针对j∈[q]\{i,k}生成所有zj,然后可以执行q-2次幂运算。
[0279]
为此目的,各种实施例可以使zi变得特别。zi可以使用密钥同态伪随机函数[blmr15]生成。可以针对某个值ζ定义,其中ki是以某种公共确定性的方式(例如,使用额外的伪随机函数)从i中导出的。密钥-同态特性可以包括:
[0280][0281]
以此方式,如果将以下内容作为向量承诺的一部分,
[0282][0283]
给定i,k,则可以有效地计算如上文所定义的β和γ。根据各种实施例,实现这一点的方法是考虑函数
[0284][0285]
其中ζi是随机奇数字符串并且α是固定随机字符串。接着,可保留以下内容作为向量承诺的一部分,
[0286][0287]
现在,呈现了以下困难的计算任务,但可以通过实施例得到解决。给定g,α,δ,计算
[0288][0289]
在不知道ord(g)的情况下,这似乎难以有效地完成。应注意,给定α
δ
mod ord(g),y将易于计算。然而,似乎没有办法使用户能够在不让他们学习ord(g)的情况下计算α
δ
mod ord(g),这会影响方案的安全性。假设δ的位长度最多为m,我们可以通过发布i∈[m]来启
[0305]-[0306]-c3=q
[0307]-c4=∑
i∈[q]
h(i)
[0308]
输出c=(c1,c2,c3,c4)和aux=(x1,...,xq)。
[0309]
openpp(x,i,aux):令aux=(x1,

,xq)。如果x≠xq,则输出

。否则,进行计算
[0310]
对于j∈[q]\{i},
[0311]
zj=α
h(j)
modγ
[0312]-[0313]-[0314]-λ
i,3
=i-1
[0315]-λ
i,4
=∑
j∈[q]\{i}
h(j)
[0316]
输出λi=(λ
i,1

i,2

i,3

i,4
)。
[0317]
add
pp
(c,x,i):如果i≠c3+1,则输出

。令
[0318]
zi=α
h(i)
modγ
[0319]

[0320][0321]
输出(c

,upmsg=(add,x,i))。
[0322]
openonadd
pp
(c

,x,i):在执行add
pp
(c,x,i)时,openonadd
pp
(c

,x,i)输出λi=c。
[0323]
update
pp
(c,δ,i):如果不是0≤i《c3这种情况,则输出

。计算
[0324]
δi=c
4-h(i)
[0325]
以及
[0326][0327]

[0328][0329]
并且
[0330]c′
=(c1',c2,c3,c4)
[0331]
输出(c

,upmsg=(upd,δ,i))。
[0332]
proofupdate
pp
(c,λi,upmsg):对upmsg进行解析。如果i=upmsg3,则输出λi'=λi,否则,存在以下情况:
[0333]-upmsg1=add:令
[0334]
zi=α
h(i)
modγ
[0335]

[0336][0337]-upmsg1=upd:计算
[0338]
δi=λ
i,4-h(i)
[0339]
以及
[0340][0341]

[0342][0343]
并且
[0344]
λi'=(λ
i,1
',λ
i,2

i,3

i,4
)
[0345]
输出λi'。
[0346]
ver
pp
(c,x,i,λi):对输入c=(c1,c2,c3,c4)和λi=(λ
i,1

i,2

i,3

i,4
)进行解析。
[0347]

[0348][0349]
检查是否:
[0350]-0≤x《a
[0351]-λ
i,4
+h(i)=c4[0352]-0≤λ
i,3
《c3[0353]-[0354]-[0355]
如果是,则输出1。否则,输出


[0356]
5.3完整性和有效性
[0357]
方案的正确性直接遵循检查结果。此外,所有操作都涉及(最多)一次散列计算、四次幂运算和一次乘法运算。累加器的大小可以是恒定的,即两个群组元素,除了跟踪已添加到累加器中的元素数量的计数器以及散列总和之外,计数器和散列总和以对数增长。假设执行不超过2
λ
添加,计数器和散列总和的大小也是恒定的,受(2λ+m+2)位限制。成员资格的见证也是如此。
[0358]
实施例提供多个优势。例如,实施例提供数据的高效存储。具体地说,用户状态可以累加到累加状态。累加状态是对元素集合(例如,用户状态)的绑定承诺,其紧凑地存储可用于验证用户是否有足够的金额(例如,第一个用户状态元素)用于交互的数据。累加状态的大小可以较小,使得其可以容易地包括到区块链的每个区块中。例如,累加状态可以包括在每个区块的区块标头中,因此允许验证网络中的每个节点容易地验证用户状态。
[0359]
实施例提供多个额外优势。区块链网络中的发送方账户的数量通常很大。即使区块链的吞吐量不高(例如每秒5-10笔交易),以太坊也具有约7,000万个账户。快速访问如此大量的账户需要大量资源,从而限制了可以执行验证器功能的节点数量。实施例解决了想要在不依赖几台计算机的情况下广泛传播网络的这个问题。实施例不仅允许少数选定的高计算能力计算机作为验证器节点。实施例还允许能够访问普通手提式计算机或手机的终端用户充当验证器计算机。
[0360]
本技术中描述的任何软件组件或功能可以被实施为将使用任何合适的计算机语
言(例如java、c、c++、c#、objective-c、swift)或者脚本语言(例如perl或python)使用例如常规的或面向对象的技术由处理器执行的软件代码。软件代码可以作为一系列指令或命令存储在计算机可读介质上以进行存储和/或传输。合适的非瞬态计算机可读介质可以包括随机存取存储器(ram)、只读存储器(rom)、例如硬盘驱动的磁性介质或例如光盘(cd)或dvd(数字通用光盘)的光学介质、闪存存储器等。计算机可读介质可以是此类存储或传送装置的任何组合。
[0361]
此类程序也可以使用载波信号来编码和传输,所述载波信号适合于经由符合多种协议的有线、光学和/或无线网络来发送,包括因特网。因此,可以使用以此类程序编码的数据信号来创建计算机可读介质。以程序代码编码的计算机可读介质可与兼容装置一起封装或与其它装置分开提供(例如,通过因特网下载)。任何此类计算机可读介质可以驻存在单个计算机产品(例如,硬盘驱动器,cd或整个计算机系统)之上或其内部,并且可以存在于系统或网络内的不同计算机产品之上或其内部。计算机系统可以包括用于向用户提供本文中提及的任何结果的监视器、打印机或其它合适显示器。
[0362]
本文所描述的任何方法可完全或部分地通过计算机系统执行,所述计算机系统包括可被配置以执行所述步骤的一个或多个处理器。因此,实施例可涉及被配置成执行本文所述的任何方法的步骤、可能具有执行相应步骤或相应步骤群组的不同组件的计算机系统。尽管以编号的步骤呈现,但是本文中的方法步骤也可以同时执行或以不同的次序执行。另外,这些步骤的部分可与来自其它方法的其它步骤的部分一起使用。同样,一个步骤的全部或部分可以是可选的。另外,任何方法的任何步骤可以用模块、电路或用于执行这些步骤的其它手段来执行。
[0363]
特定实施例的具体细节可按任何适合的方式组合而不脱离本发明实施例的精神和范围。然而,本发明的其它实施例可以涉及与每个个别方面或这些个别方面的特定组合相关的特定实施例。
[0364]
上文对本发明的示例性实施例的描述已经出于说明和描述的目的呈现。不旨在是详尽的,或将本发明局限到描述的精确形式,根据上文的教导许多修改和变形是可能的。选择和描述这些实施例是为了最好地解释本发明的原理及其实际应用,从而使本领域的技术人员能够在各种实施例中最好地利用本发明,并且进行适合于预期的特定用途的各种修改。
[0365]
除非明确指示有相反的意思,否则叙述“一个/种”或“该/所述”旨在表示“一个/种或多个/种”。除非明确指示为相反情况,否则“或”的使用旨在表示“包括性的或”,而不是“排除性的或”。
[0366]
本文中所提及的所有专利、专利申请、公开和描述是出于所有目的而以全文引用的方式并入。并非承认它们是现有技术。
[0367]
6参考文献
[0368]
[bbf18]dan boneh、benedikt bunz和ben fisch。应用于iops和无状态区块链的累加器的批处理技术(batching techniques for accumulators with applications to iops and stateless blockchains)。iacr密码云打印档案,2018:1188,2018年。
[0369]
[bcd+17]foteini baldimtsi、jan camenisch、maria dubovitskaya、anna lysyanskaya、leonid reyzin、kai samelin和sophia yakoubov。具有匿名保护撤销应用的
累加器(accumulators with applications to anonymity-preserving revocation)。2017年ieee欧洲安全与隐私研讨会,euros&p 2017,法国巴黎,2017年4月26日至28日,第301{315页,2017年。
[0370]
[bit]bitcoin.bitcoin.org/.
[0371]
[blmr15]dan boneh、kevin lewi、hart william montgomery和ananth raghunathan。密钥同态prf及其应用(key homomorphic prfs and their applications)。iacr密码云打印档案,2015:220,2015年。
[0372]
[blw17]dan boneh、kevin lewi和david j.wu。私自限制伪随机函数(constraining pseudorandom functions privately)。公钥密码学—pkc 2017—第20届iacr国际公钥密码学实践与理论会议,2017年3月28日至31日,荷兰阿姆斯特丹,会议记录第ii部分,第494{524页,2017年。
[0373]
[cf13]dario catalano和dario fiore。向量承诺及其应用(vector commitments and their applications)。公钥密码学—pkc 2013—第16届公开密钥密码学实践与理论国际会议,日本奈良,2013年2月26日至3月1日。会议记录,第55-72页,2013年。
[0374]
[ch10]philippe camacho和alejandro hevia。关于密码累加器批处理更新的不可能性(on the impossibility of batch update for cryptographic accumulators)。密码学进展——拉丁密码2010,第一届拉丁美洲、墨西哥普埃布拉密码学和信息安全国际会议,2010年8月8日至11日,会议记录,第178{188页,2010年。
[0375]
[cs99]ronald cramer和victor shoup。基于强rsa假设的签名方案(signature schemes based on the strong rsa assumption)。在ccs'99,第6届acm计算机和通信安全会议论文集,新加坡,1999年11月1日至4日,第46{51页,1999年。
[0376]
[etha]以太坊。对以太坊账户总数的演变。www.etherchain.org/charts/totalaccounts.
[0377]
[ethb]ethereum.www.ethereum.org/.
[0378]
[ethc]etherscan.etherscan.io/.
[0379]
[ft14]pierre-alain fouque和mehdi tibouchi。接近均匀的优先数字生成,随机位更少(close to uniform prime number generation with fewer random bits)。《自动机、语言和编程》,以及第41届国际学术讨论会,icalp 2014,丹麦哥本哈根,2014年7月8日至11日,会议记录第i部分,第991{1002页,2014年。
[0380]
[ggm84]oded goldreich、sha_goldwasser和silvio micali。如何构造随机函数(扩展摘要)。第25届计算机科学基础年会上,美国佛罗里达州西棕榈滩,1984年10月24日至26日,第464{479页,1984年。36
[0381]
[hill99]johan h_astad、russell impagliazzo、leonid a.levin和michael luby。来自任何单向函数的伪随机发生器(a pseudorandom generator from any one-way function)。siam j.comput.,28(4):第1364{1396页,1999年。
[0382]
[hw09]susan hohenberger和brent waters。rsa假设的短签名和无状态签名(short and stateless signatures from the rsa assumption)。密码学进展—密码学2009,第29届国际密码学年会,美国加利福尼亚州圣巴巴拉,2009年8月16日至20日。会议记录,第654{670页,2009年。
[0383]
[lib]libra.libra.org/.
[0384]
[lip12]helger lipmaa。在没有可信任设置的情况下,根据欧几里德环保护累加器(secure accumulators from euclidean rings without trusted setup)。在应用密码学和网络安全—第10届国际会议上,acns 2012,新加坡,2012年6月26日至29日。会议记录,第224{240页,2012年。
[0385]
[nrr02]moni naor、omer reingold和alon rosen。伪随机函数和因式分解(pseudorandom functions and factoring)。siam j.comput.,31(5):第1383{1404页,2002年。
[0386]
[wes19]benjamin wesolowski。e_cient veri_able延迟函数。密码学进展—
[0387]
密码学2019—第38届密码技术理论与应用国际会议,德国达姆施塔特,2019年5月19日至23日,会议记录第iii部分,第379{407页,2019年。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1