采用环签名的机密区块链交易的实现方法及装置
技术领域
本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种采用环签名的机密区块链交易的实现方法及装置。
背景技术
区块链技术(也被称之为,分布式账本技术)是一种去中性化的分布式数据库技术,具有去中心化、公开透明、不可篡改、可信任等多种特点,适用于诸多对数据可靠性具有高需求的应用场景中。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种采用环签名的机密区块链交易的实现方法及装置。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种采用环签名的机密区块链交易的实现方法,包括:
确定汇款交易M的所有参与者,每一参与者在区块链账本上存在对应的账户,账户内包括取值被记录为相应承诺值的收入余额、资产额被记录为资产承诺的若干资产;
根据参与者中的真实汇款方对应账户内的待花费资产ID_j_1~ID_j_m、虚假汇款方i对应账户内的掩护资产ID_i_1~ID_i_m,以及参与者中的各个收款方对应的转账额的承诺值,组装汇款交易M;
根据真实汇款方所持私钥x_j、公钥P_j和虚假汇款方i所持公钥P_i,为所述汇款交易M生成可链接环签名,所述可链接环签名中包含密钥镜像I_1~I_m,且密钥镜像I_1~I_m的取值与真实汇款方的私钥x_j、公钥P_j和资产标识ID_j_1~ID_j_m相关;
向区块链网络提交签名后的汇款交易M;其中,在交易完成后,各个收款方对应账户内的收入余额增加相应的转账额,密钥镜像I_1~I_m被添加至历史密钥镜像集合,且所述待花费资产ID_j_1~ID_j_m在区块链账本上被保持记录为真实汇款方对应账户内的资产。
根据本说明书一个或多个实施例的第二方面,提出了一种采用环签名的机密区块链交易的实现方法,包括:
接收汇款交易M,所述汇款交易M的每一参与者在区块链账本上存在对应的账户,账户内包括取值被记录为相应承诺值的收入余额、资产额被记录为资产承诺的若干资产;其中,所述汇款交易M由参与者中的真实汇款方根据自身对应账户内的待花费资产ID_j_1~ID_j_m、虚假汇款方i对应账户内的掩护资产ID_i_1~ID_i_m以及参与者中的各个收款方对应的转账额的承诺值组装生成;
获取所述汇款交易M的可链接环签名包含的密钥镜像I_1~I_m,所述密钥镜像I_1~I_m的取值与真实汇款方的私钥x_j、公钥P_j和资产标识ID_j_1~ID_j_m相关;
验证所述可链接环签名,所述可链接环签名由真实汇款方根据自身所持的私钥x_j、公钥P_j和虚假汇款方i所持的公钥P_i而生成;其中,当所述可链接环签名通过验证时,所述汇款交易M被确认为输入与输出等额;
当满足交易执行条件时,执行所述汇款交易M,使各个收款方对应账户内的收入余额增加相应的转账额;所述交易执行条件包括:所述密钥镜像I_1~I_m不属于历史密钥镜像集合、所述可链接环签名通过验证;其中,所述密钥镜像I_1~I_m在交易完成后被添加至所述历史密钥镜像集合,且所述待花费资产ID_j_1~ID_j_m在区块链账本上被保持记录为真实汇款方对应账户内的资产。
根据本说明书一个或多个实施例的第三方面,提出了一种采用环签名的机密区块链交易的实现装置,包括:
参与者确定单元,确定汇款交易M的所有参与者,每一参与者在区块链账本上存在对应的账户,账户内包括取值被记录为相应承诺值的收入余额、资产额被记录为资产承诺的若干资产;
交易组装单元,根据参与者中的真实汇款方对应账户内的待花费资产ID_j_1~ID_j_m、虚假汇款方i对应账户内的掩护资产ID_i_1~ID_i_m,以及参与者中的各个收款方对应的转账额的承诺值,组装汇款交易M;
签名生成单元,根据真实汇款方所持私钥x_j、公钥P_j和虚假汇款方i所持公钥P_i,为所述汇款交易M生成可链接环签名,所述可链接环签名中包含密钥镜像I_1~I_m,且密钥镜像I_1~I_m的取值与真实汇款方的私钥x_j、公钥P_j和资产标识ID_j_1~ID_j_m相关;
交易提交单元,向区块链网络提交签名后的汇款交易M;其中,在交易完成后,各个收款方对应账户内的收入余额增加相应的转账额,密钥镜像I_1~I_m被添加至历史密钥镜像集合,且所述待花费资产ID_j_1~ID_j_m在区块链账本上被保持记录为真实汇款方对应账户内的资产。
根据本说明书一个或多个实施例的第四方面,提出了一种采用环签名的机密区块链交易的实现装置,包括:
交易接收单元,接收汇款交易M,所述汇款交易M的每一参与者在区块链账本上存在对应的账户,账户内包括取值被记录为相应承诺值的收入余额、资产额被记录为资产承诺的若干资产;其中,所述汇款交易M由参与者中的真实汇款方根据自身对应账户内的待花费资产ID_j_1~ID_j_m、虚假汇款方i对应账户内的掩护资产ID_i_1~ID_i_m以及参与者中的各个收款方对应的转账额的承诺值组装生成;
镜像获取单元,获取所述汇款交易M的可链接环签名包含的密钥镜像I_1~I_m,所述密钥镜像I_1~I_m的取值与真实汇款方的私钥x_j、公钥P_j和资产标识ID_j_1~ID_j_m相关;
签名验证单元,验证所述可链接环签名,所述可链接环签名由真实汇款方根据自身所持的私钥x_j、公钥P_j和虚假汇款方i所持的公钥P_i而生成;其中,当所述可链接环签名通过验证时,所述汇款交易M被确认为输入与输出等额;
交易执行单元,当满足交易执行条件时,执行所述汇款交易M,使各个收款方对应账户内的收入余额增加相应的转账额;所述交易执行条件包括:所述密钥镜像I_1~I_m不属于历史密钥镜像集合、所述可链接环签名通过验证;其中,所述密钥镜像I_1~I_m在交易完成后被添加至所述历史密钥镜像集合,且所述待花费资产ID_j_1~ID_j_m在区块链账本上被保持记录为真实汇款方对应账户内的资产。
根据本说明书一个或多个实施例的第五方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如第一方面所述的方法。
根据本说明书一个或多个实施例的第六方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面所述方法的步骤。
根据本说明书一个或多个实施例的第七方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如第二方面所述的方法。
根据本说明书一个或多个实施例的第八方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第二方面所述方法的步骤。
附图说明
图1是一示例性实施例提供的一种示例环境的示意图。
图2是一示例性实施例提供的一种概念架构的示意图。
图3是一示例性实施例提供的一种采用环签名的机密区块链交易的实现方法的流程图。
图4是一示例性实施例提供的一种账户之间实现资产转移的示意图。
图5是一示例性实施例提供的一种账户模型的示意图。
图6是一示例性实施例提供的一种生成可链接环签名的流程图。
图7是一示例性实施例提供的另一种采用环签名的机密区块链交易的实现方法的流程图。
图8是一示例性实施例提供的一种验证可链接环签名的流程图。
图9是一示例性实施例提供的一种设备的结构示意图。
图10是一示例性实施例提供的一种采用环签名的机密区块链交易的实现装置的框图。
图11是一示例性实施例提供的另一种设备的结构示意图。
图12是一示例性实施例提供的另一种采用环签名的机密区块链交易的实现装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
图1是一示例性实施例提供的一种示例环境的示意图。如图1所示,示例环境100允许实体参与区块链网络102。区块链网络102可以为公有类型、私有类型或联盟类型的区块链网络。示例环境100可以包括计算设备104、106、108、110、112和网络114;在一实施例中,网络114可以包括局域网(Local Area Network,LAN)、广域网(Wide Area Network,WAN)、因特网或其组合,并连接至网站、用户设备(例如计算设备)和后端系统。在一实施例中,可以通过有线和/或无线通信方式访问网络114。
在某些情况下,计算设备106、108可以是云计算系统的节点(未显示),或者每个计算设备106、108可以是单独的云计算系统,包括由网络互连并作为分布式处理系统工作的多台计算机。
在一实施例中,计算设备104~108可以运行任何适当的计算系统,使其能够作为区块链网络102中的节点;例如,计算设备104~108可以包括但不限于服务器、台式计算机、笔记本电脑、平板电脑计算设备和智能手机。在一实施例中,计算设备104~108可以归属于相关实体并用于实现相应的服务,例如该服务可以用于对某一实体或多个实体之间的交易进行管理。
在一实施例中,计算设备104~108分别存储有区块链网络102对应的区块链账本。计算设备104可以是(或包含)用于提供浏览器功能的网络服务器,该网络服务器可基于网络114提供与区块链网络102相关的可视化信息。在一些情况下,计算设备104可以不参与区块验证,而是监控区块链网络102以确定其他节点(譬如可以包括计算设备106-108)何时达成共识,并据此生成相应的区块链可视化用户界面。
在一实施例中,计算设备104可接收客户端设备(例如计算设备110或计算设备112)针对区块链可视化用户界面发起的请求。在一些情况下,区块链网络102的节点也可以作为客户端设备,比如计算设备108的用户可以使用运行在计算设备108上的浏览器向计算设备104发送上述请求。
响应于上述请求,计算设备104可以基于存储的区块链账本生成区块链可视化用户界面(如网页),并将生成的区块链可视化用户界面发送给请求的客户端设备。如果区块链网络102是私有类型或联盟类型的区块链网络,对区块链可视化用户界面的请求可以包括用户授权信息,在生成区块链可视化用户界面并发送给请求的客户端设备之前,可以由计算设备104对该用户授权信息进行验证,并在验证通过后返回相应的区块链可视化用户界面。
区块链可视化用户界面可以显示在客户端设备上(例如可显示在图1所示的用户界面116中)。当区块链账本发生更新时,用户界面116的显示内容也可以随之发生更新。此外,用户与用户界面116的交互可能导致对其他用户界面的请求,例如显示区块列表、区块详情、交易列表、交易详情、账户列表、账户详情、合约列表、合约详情或者用户对区块链网络实施搜索而产生的搜索结果页面等。
图2是一示例性实施例提供的一种概念架构的示意图。如图2所示,该概念架构200包括实体层202、托管服务层204和区块链网络层206。例如,实体层202可以包括三个实体:实体1、实体2和实体3,每个实体都有各自的交易管理系统208。
在一实施例中,托管服务层204可以包括每个事务管理系统208对应的接口210。例如,各个事务管理系统208使用协议(例如超文本传输协议安全(HTTPS)等)通过网络(例如图1中的网络114)与各自的接口210通信。在一些例子中,每个接口210可以提供各自对应的交易管理系统208与区块链网络层206之间的通信连接;更具体地,接口210可与区块链网络层206的区块链网络212通信。在一些例子中,接口210和区块链网络层206之间的通信可以使用远程过程调用(Remote Procedure Calls,RPCs)而实现。在一些例子中,接口210可以向交易管理系统208提供用于访问区块链网络212的API接口。
如本文所述,区块链网络212以对等网络的形式提供,该对等网络包括多个节点214,这些节点214分别用于对块链数据所形成的区块链账本216进行持久化;其中,图2中仅示出了一份区块链账本216,但区块链网络212中可以存在多份区块链账本216或其副本,比如每一节点214可以分别维护一份区块链账本216或其副本。
需要指出的是:在本说明书中所描述的交易(transaction),是指用户通过区块链的客户端创建,并需要最终发布至区块链的分布式数据库中的一笔数据。其中,区块链中的交易,存在狭义的交易以及广义的交易之分。狭义的交易是指用户向区块链发布的一笔价值转移;例如,在传统的比特币区块链网络中,交易可以是用户在区块链中发起的一笔转账。而广义的交易是指用户向区块链发布的一笔具有业务意图的业务数据;例如,运营方可以基于实际的业务需求搭建一个联盟链,依托于联盟链部署一些与价值转移无关的其它类型的在线业务(比如,租房业务、车辆调度业务、保险理赔业务、信用服务、医疗服务等),而在这类联盟链中,交易可以是用户在联盟链中发布的一笔具有业务意图的业务消息或者业务请求。
区块链一般被划分为三种类型:公有链(Public Blockchain),私有链(PrivateBlockchain)和联盟链(Consortium Blockchain)。此外,还有多种类型的结合,比如私有链+联盟链、联盟链+公有链等不同组合形式。其中去中心化程度最高的是公有链。公有链以比特币、以太坊为代表,加入公有链的参与者可以读取链上的数据记录、参与交易以及竞争新区块的记账权等。而且,各参与者(即节点)可自由加入以及退出网络,并进行相关操作。私有链则相反,该网络的写入权限由某个组织或者机构控制,数据读取权限受组织规定。简单来说,私有链可以为一个弱中心化系统,参与节点具有严格限制且少。这种类型的区块链更适合于特定机构内部使用。联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织;参与者通过授权加入网络并组成利益相关联盟,共同维护区块链运行。
通过区块链网络所采用的分布式架构,以及区块所采用的链式结构,使得信息可以永久、无篡改地记录在各个区块链节点统一维护的区块链账本中。但是,由于区块链账本完全公开,导致信息隐私性无法得到保障。例如,任意用户可以在任意区块链节点上查询区块链账本,以获知某一账户持有的资产、某一交易的转账额等信息,而这些可能都是敏感的、需要隐藏的信息。
处于隐私保护的目的,相关技术中提出了基于承诺的匿名交易或机密交易(Confidential Transaction)方案,可以将每个账户持有的资产额、交易所涉及的转账额等,均生成为相应的承诺数额,且区块链账本中仅记载该承诺数额、而非直接记载明文的资产额、交易额等。例如,当采用Pedersen承诺机制时,假定原始数额为t,相应的承诺数额可以为PC(t,r)=r×G+t×H,其中G、H为椭圆曲线上的随机生成元,r为随机数,并且r的取值仅由账户持有者、交易参与者等掌握,使得无关人员仅根据PC(t,r)的取值将无法反推出原始数额t。同时,承诺数额还具有同态特性,使得承诺数额之间可以直接参与计算,譬如PC(t1,r1)-PC(t2,r2)=PC(t1-t2,r1-r2)。但是,区块链节点在验证交易时无法根据承诺数额确定相关条件是否被满足,比如交易的汇入额等于汇出额或其他条件,需要提供相关证明信息才可以确保交易顺利完成。
此外,用户在区块链网络中发起交易时需要签名。例如,当用户A希望花费自己在区块链中持有的一笔资产时,可以发起一笔区块链交易并使用该用户A持有的私钥x_j进行签名。相应地,通过该用户A所持私钥x_j对应的公钥P_j,即可对上述签名进行验证。但是,对签名的直接验证也暴露了用户A为相应签名的签名方,从而导致了用户A的隐私泄露。
出于保护签名方身份的目的,相关技术中提出了基于环签名的处理方案,用户A可以将自身持有的公钥P_j隐藏在一组公钥(P_1,……,P_n)中,其中公钥P_1~P_j-1、P_j+1~P_n分别属于其他用户;然后,用户A通过自身持有的私钥x_j和上述的一组公钥(P_1,……,P_n)生成签名,那么验证方能够验证签名是由上述的一组公钥(P_1,……,P_n)中的某一公钥对应的私钥所生成,但是并不能够确定具体为哪一公钥,从而通过上述的一组公钥(P_1,……,P_n)对签名方的身份实现了隐藏。
可以理解的是:当上文描述为(P_1,……,P_n)的形式时,虽然看似是从P_1开始、P_n结束的一组公钥,但实际上对于验证方而言并不能够确定各个公钥之间的顺序,使得这组公钥对验证方而言相当于呈现为无首尾的环形结构,因而称为环签名。
虽然环签名方案可以对签名方的身份进行隐藏,但是应用于区块链网络的交易场景时,会导致出现“双花”问题。例如,区块链网络可以采用UTXO(UnspentTransactionOutput,未花费的交易输出)模型进行资产管理:用户持有的区块链资产均被记录为相应交易的输出,每笔交易以一个或多个未花费的交易输出作为其输入,并相应产生一个或多个输出。典型的,UTXO被应用于比特币及其衍生的密码货币所采用。当环签名方案被应用在基于UTXO模型的区块链网络时,同一笔资产可能被多笔交易分别引用,但由于签名方的身份被环签名方案所隐藏,使得验证方无法检查出同一笔资产被重复引用,从而造成“双花”问题。
因此,相关技术中提出了对上述环签名方案的改进方案,称为可链接环签名(Linkable Spontaneous Anonymous Group Signature,LSAG),可以生成用于对签名方进行标记的key-image(密钥镜像),但并不会暴露该签名方在签名所用的一组环签名中所对应的公钥,从而既能够确保对签名方的身份隐藏,又能够基于key-image解决“双花”问题。
以门罗币(Monero)为例。门罗币采用UTXO(Unspent Transaction Output,未花费的交易输出)模型实现资产管理,该模型下的所有资产均为相应区块链交易的交易输出,且区块链网络上产生的所有资产被统一管理,其中每一资产均存在唯一对应的公私钥对,用户可以通过持有的公私钥对来花费相应的资产。例如,当签名方(如汇款交易中的汇款方)持有的某一资产对应于私钥x_j、公钥P_j时,可以按照公式I=x_j×Hash(P_j)生成相应的key-image,那么只要该资产先前被花费过,区块链节点就会记录有相同取值的key-image,从而据此识别出“双花”问题。
但是,由于每份资产均存在唯一对应的公私钥对,使得一笔交易包含多份资产的情况下,就需要相应的多组公私钥对,例如当一笔交易包含m份资产时,签名方需要维护m组公私钥对,极大地造成了公私钥对的维护成本。
为此,本说明书提出了新的技术方案,使得签名方仅需要维护一组公私钥对,便可针对涉及多份资产的交易生成可链接环签名,并且能够满足机密交易对证明信息的需求,下面将结合实施例进行描述。
图3是一示例性实施例提供的一种采用环签名的机密区块链交易的实现方法的流程图。如图3所示,该方法应用于客户端设备,可以包括以下步骤:
步骤302,确定汇款交易M的所有参与者,每一参与者在区块链账本上存在对应的账户,账户内包括取值被记录为相应承诺值的收入余额、资产额被记录为资产承诺的若干资产。
区块链账本包含区块链网络中所有用户对应的账户,并通过账户对相应用户持有的资金进行维护。譬如图4是一示例性实施例提供的一种账户之间实现资产转移的示意图,该图4中示出了汇款方对应的账户A_j和某一收款方对应的账户A_e。以账户A_j为例,该账户所采用的账户模型包括:“收入余额”部分和“资产”部分。
收入余额部分与相关技术中诸如以太坊等采用的账户模型相似,用于直接累计资金数额。例如,当收入余额对应的资金数额为如图4所示的Ar_j时,出于对该资金数额进行保密的目的,实际上在区块链账本上记录为该资金数额Ar_j对应的承诺数额,比如根据资金数额Ar_j和随机数r_Ar_j生成的承诺数额为PC(Ar_j,r_Ar_j)。由于随机数r_Ar_j的存在,使得资金数额Ar_j生成的承诺数额PC(Ar_j,r_Ar_j)具有随机性,除了掌握随机数r_Ar_j的汇款方之外,其他用户仅能够看到承诺数额PC(Ar_j,r_Ar_j),且无法据此反推出相应的资金数额Ar_j。
而资产部分与UTXO模型相似,用于分别管理若干资产。例如,资产部分可以包含如图4所示的资产ID_j_1、ID_j_2等。其中,ID_j_1、ID_j_2等为相应资产的资产标识,以用于区分各个资产,而这些资产的资产额分别为t_j_1、t_j_2等,但出于对资产额保密的目的,实际上在区块链账本上记录为资产额对应的承诺数额,比如根据资产额t_j_1和随机数r_j_1生成的承诺数额为PC(t_j_1,r_j_1)、根据资产额t_j_2和随机数r_j_2生成的承诺数额为PC(t_j_2,r_j_2)等。其中,区块链账本上可以采用类似于[标识,资产承诺]的形式对资产部分的各个资产进行记录,比如可以记录为如图4所示的[ID_j_1,PC(t_j_1,r_j_1)]、[ID_j_2,PC(t_j_2,r_j_2)]等,本说明书并不对此进行限制。其中,由于随机数r_j_1-r_j_2的存在,使得资产额t_j_1-t_j_2生成的承诺数额PC(t_j_1,r_j_1)-PC(t_j_2,r_j_2)具有随机性,除了掌握随机数r_j_1-r_j_2的汇款方之外,其他用户仅能够看到承诺数额PC(t_j_1,r_j_1)-PC(t_j_2,r_j_2),且无法据此反推出相应的资产额t_j_1-t_j_2。
与上述账户A_j类似,如图4所示的账户A_e同样包括收入余额部分和资产部分,其中收入余额部分在区块链账本上记录为根据资金数额Ar_e和随机数r_Ar_e生成的承诺数额为PC(Ar_e,r_Ar_e),资产部分在区块链账本上记录为[ID_e_1,PC(t_e_1,r_e_1)]、[ID_e_2,PC(t_e_2,r_e_2)]等,其中ID_e_1、ID_e_2为资产标识,承诺数额PC(t_e_1,r_e_1)由资产额t_e_1和随机数r_e_1生成、承诺数额PC(t_e_2,r_e_2)由资产额t_e_2和随机数r_e_2生成。
当然,区块链账本上并不一定采用[标识,资产承诺]的形式记录资产。例如,当存在多种资产类型时,可以采用类似于[类型,标识,资产承诺]的形式对资产进行记录和存储,那么在计算资产额、执行交易等过程中,需要考虑资产类型所带来的影响,比如不同类型的资产之间存在资产额的比例换算等。再者,除了直接记录“资产承诺”之外,还可以同时存储其他信息;以资产ID_j_1为例,可以记录为[ID_j_1,E(t_j_1,r_j_1)],其中E(t_j_1,r_j_1)=[PC(t_j_1,r_j_1),E(t_j_1),E(r_j_1)],E(t_j_1)和E(r_j_1)分别为资产额t_j_1和随机数r_j_1对应的同态密文,可由汇款方的同态加密公钥(对公钥P_j进行同态加密得到)分别对资产额t_j_1和随机数r_j_1进行加密后得到。为了便于理解,下文均以[标识,资产承诺]的资产形式进行举例说明。
步骤304,根据参与者中的真实汇款方对应账户内的待花费资产ID_j_1~ID_j_m、虚假汇款方i对应账户内的掩护资产ID_i_1~ID_i_m,以及参与者中的各个收款方对应的转账额的承诺值,组装汇款交易M。
如前所述,待花费资产ID_j_1~ID_j_m在区块链账本上可以记录为[ID_j_1,PC(t_j_1,r_j_1)]~[ID_j_m,PC(t_j_m,r_j_m)],掩护资产ID_i_1~ID_i_m在区块链账本上可以记录为[ID_i_1,PC(t_i_1,r_i_1)]~[ID_i_m,PC(t_i_m,r_i_m)],其中r_j_1~r_j_m、r_i_1~r_i_m为随机数。
通过在参与者中同时包含真实汇款方、虚假汇款方i,并且基于真实汇款方对应账户内的待花费资产ID_j_1~ID_j_m、虚假汇款方i对应账户内的掩护资产ID_i_1~ID_i_m来组装汇款交易M,再加上下文中生成的可链接环签名,使得虚假汇款方i可以对真实汇款方进行身份隐藏,使得其他用户无法确定究竟在“真实汇款方和虚假汇款方i”中的哪个用户支出了资产。
待花费资产ID_j_1~ID_j_m可以为真实汇款方所持有的任意资产、掩护资产ID_i_1~ID_i_m可以为虚假汇款方i所持有的任意资产。当然,在实际选取待花费资产ID_j_1~ID_j_m时,还需要参考汇款交易M涉及的汇款额,并确保待花费资产的资产额之和不小于汇款额。汇款额为汇款方需要向各个真实收款方转账的数额,这些数额由真实汇款方与各个真实收款方预先协商确定,也可以由真实汇款方自行确定。
从汇款交易M的款项输入角度而言,涉及到真实汇款方和虚假汇款方的角色,而从款项输出角度而言,涉及到真实收款方与虚假收款方的角色。在这些角色中,部分角色之间可能存在一定重叠。
对于真实汇款方和虚假汇款方而言,根据真实汇款方对应账户内的待花费资产ID_j_1~ID_j_m、虚假汇款方i对应账户内的掩护资产ID_i_1~ID_i_m来组装汇款交易M,再加上下文中生成的可链接环签名,使得虚假汇款方i可以对真实汇款方进行身份隐藏,使得其他用户无法确定究竟在“真实汇款方和虚假汇款方i”中的哪个用户支出了资产。这里,虚假汇款方可以包括除真实汇款方之外的参与者,比如该虚假汇款方可以包括汇款交易M的真实收款方,譬如当真实汇款方为用户A、真实收款方为用户B和用户C时,通过将用户B和用户C配置为虚假汇款方,不仅可使用户B、用户C对用户A进行身份隐藏,甚至由于用户B和用户C同时属于“汇款方”和“收款方”,从而带来更强的迷惑作用。再比如,虚假汇款方可以包括除真实汇款方和真实收款方之外的参与者,譬如当真实汇款方为用户A、真实收款方为用户B和用户C时,可以将不相干的用户D配置为虚假汇款方,以用于对用户A进行身份隐藏。又比如,虚假汇款方可以同时包括上述的真实收款方和其他用户,譬如当真实汇款方为用户A、真实收款方为用户B和用户C时,可以将用户B、用户C和用户D配置为虚假汇款方,以用于对用户A进行身份隐藏。
对于真实收款方与虚假收款方而言:
在一实施例中,汇款交易M的收款方可以仅包含真实收款方。一种情况下,当不存在找零时,真实收款方仅包含初始汇款对象,即最初确定与真实汇款方进行交易的对象,此时满足待花费资产ID_j_1~ID_j_m对应的资产额t_j_1~t_j_m之和与各个初始汇款对象对应的转账额之和恰好相等,即不存在找零。另一种情况下,而当存在找零时,真实收款方包含真实汇款方和初始汇款对象,真实汇款方对应的转账额为待花费资产ID_j_1~ID_j_m对应的资产额t_j_1~t_j_m之和与各个初始汇款对象对应的转账额之和的差值,即找零额。
在另一实施例中,除了真实收款方之外,汇款交易M的收款方还可以包括虚假收款方。一种情况下,该虚假收款方可以包括真实汇款方,但此时不存在找零。另一种情况下,该虚假收款方可以包括除真实汇款方和真实收款方之外的参与者。而通过将虚假收款方对应的转账额设为0,可以避免对真实收款方的影响,同时由于所有收款方的转账额均为相应的同态密文,因而虚假收款方可以对真实收款方实现身份隐藏。
根据实际情况,可以仅通过虚假汇款方对真实汇款方进行身份隐藏,也可以进一步通过虚假收款方对实际收款方进行身份隐藏。在一实施例中,汇款交易M的参与者可以同时包括真实汇款方、真实收款方和区别于两者的掩护方,这些用户组成共n个参与者,并且该n个参与者均同时参与汇款交易的汇款与收款:对于真实汇款方而言,真实收款方和掩护方均为虚假汇款方;对于真实收款方而言,真实汇款方和掩护方均为虚假收款方,从而同时对真实汇款方和真实收款方进行身份隐藏。而且,由于每个参与者均同时参与汇款和收款,因而可以使得汇款方与收款方之间实现身份混淆,从而进一步增加身份隐藏的可靠性。
假定汇款交易M的收款方为Q_1~Q_u,对应的转账额分别为t’_1~t’_u,其中1≤u≤n。在汇款交易M中,与前述待花费资产对应的资产额t_j_1~t_j_m相类似的,转账额t’_1~t’_u在汇款交易M中被分别记录为对应的转账额承诺PC(t’_1,r’_1)~PC(t’_u,r’_u),r’_1~r’_u为随机数。其中,随机数r’_1~r’_u可由真实汇款方确定,并通过诸如链下通道告知相应的收款方(通常仅需要告知真实收款方),使得收款方可以基于随机数r’_1~r’_u进行验证,比如真实收款方w可以验证PC(t’_w,r’_w)=t’_w×G+r’_w×H是否成立。
在机密交易中,需要证明汇款交易M中的转账额t’_1~t’_u都不小于0。真实汇款方可以利用相关技术中的零知识证明技术,为转账额t’_1~t’_u分别生成相应的范围证明RP_1~RP_u,以用于证明t’_1≥0~t’_u≥0,并将这些范围证明RP_1~RP_u添加至汇款交易M的交易内容中。其中,所采用的零知识证明技术可以为区间证明(Range Proof)技术,譬如Bulletproofs方案等,本说明书并不对此进行限制。
步骤306,根据真实汇款方所持私钥x_j、公钥P_j和虚假汇款方i所持公钥P_i,为所述汇款交易M生成可链接环签名,所述可链接环签名中包含密钥镜像I_1~I_m,且密钥镜像I_1~I_m的取值与真实汇款方的私钥x_j、公钥P_j和资产标识ID_j_1~ID_j_m相关。
真实汇款方需要维护一组公私钥对,比如私钥x_j和公钥P_j。在确定这组公私钥对之前,需要取定一个数域Z_q和该数域上的一条椭圆曲线,比如椭圆曲线Ed25519等,令G、H为该椭圆曲线的两个随机的生成元,其中|G|=p为一个大素数(譬如不小于某一预设数值),并在数值范围(0,p)中选取真实汇款方的私钥x_j,相应的公钥为P_j=x_j×G。对于其他参与者而言,均通过类似的方式确定出各自唯一对应的公私钥对。
密钥镜像I_1~I_m与真实汇款方提供的待花费资产ID_j_1~ID_j_m之间一一对应,分别用于验证相应的待花费资产是否已花费,从而解决“双花”问题。其中,由于密钥镜像I_1~I_m的取值与相应资产的资产标识ID_j_1~ID_j_m相关,使得即便所有密钥镜像均采用同一组公私钥对(即真实汇款方的私钥x_j和公钥P_j),也可以基于资产标识ID_j_1~ID_j_m之间的取值差异,确保生成的密钥镜像I_1~I_m之间完全不同,因而无需为每一资产分别维护一组公私钥对,可以在解决“双花”问题的同时,使得每一账户所需维护的公私钥对的数量与交易所含的资产数量无关。例如,I_d=x_j×Hash_G(P_j,ID_j_d),d∈[1,m];其中,Hash_G()为上述椭圆曲线到其自身的哈希函数。
根据待花费资产对应的资产承诺PC(t_j_1,r_j_1)~PC(t_j_m,r_j_m),以及前述的转账额承诺PC(t’_1,r’_1)~PC(t’_u,r’_u),可以计算得到P”_j=[PC(t_j_1,r_j_1)+…+PC(t_j_m,r_j_m)]-[PC(t’_1,r’_1)+…+PC(t’_u,r’_u)];以及,根据待花费资产对应的随机数r_j_1~r_j_m、转账额对应的随机数r’_1~r’_u,可以计算得到r”=(r_j_1+...+r_j_m)-(r’_1+...+r’_u);以及,根据待花费资产对应的资产额t_j_1~t_j_m、转账额t’_1~t’_u,可以计算得到t”=(t_j_1+…+t_j_m)-(t’_1+…+t’_u)。那么,如前所述的同态特性,可以确定P”_j=PC(r”,t”)=r”×G+t”×H。又由于真实汇款方需要确保t_j_1+…+t_j_m=t’_1+…+t’_u,使得t”=0,因而可以确定P”_j=r”×G。
那么,从形式上可以看出上述的“P”_j=r”×G”与公私钥对之间的关系“P_j=x_j×G”相似,并且如下文所述,虚假汇款方i必然满足P”_i≠r”×G,因而可以将r”视为对应于真实汇款方的一种私钥、P”_j为r”对应的公钥,而为了区别于真实汇款方对应的公私钥对,可以将r”视为真实汇款方对应的伪私钥、P”_j视为真实汇款方对应的伪公钥。类似地,可以将P”_i视为虚假汇款方i对应的伪公钥;例如,可以计算得到虚假汇款方i对应的参数P”_i=[PC{i,1}+…+PC{i,m}]-[PC(t’_1,r’_1)+…+PC(t’_u,r’_u)],i∈[1,j-1]∪[j+1,n]。同时,可以计算得到虚假汇款方i所持的m份资产对应的资产额之和与转账额t’_1~t’_u之和的差值t”_i,以及可以计算得到虚假汇款方i所持的m份资产对应的随机数之和与转账额t’_1~t’_u对应的随机数r’_1~r’_u之和的差值r”_i。
基于同态特性可以确定P”_i=r”_i×G+t”_i×H≠r”×G。可见,参数P”_j和r”均唯一对应于真实汇款方、参数P”_i唯一对应于虚假汇款方i,因而可以将r”视为真实汇款方对应的伪私钥、P”_j视为真实汇款方对应的伪公钥,以及将P”_i视为虚假汇款方i对应的伪公钥。
根据真实汇款方对应的私钥x_j、公钥P_j、伪私钥r”、伪公钥P”_j,虚假汇款方i对应的公钥P_i、伪公钥P”_i,为汇款交易M生成可链接环签名,可以高效、紧凑地实现下述两方面的验证功能:一方面,由于伪公钥P”_j与伪私钥r”之间满足P”_j=r”×G、伪公钥P”_i与伪私钥r”之间满足P”_i≠r”×G,所以当根据伪私钥r”、伪公钥P”_j和P”_i生成可链接环签名时,如果该可链接环签名通过验证,就能够证明在伪公钥(P”_1,……,P”_n)中存在某一伪公钥的取值等于r”×G,并且这个伪公钥对应于前述的t”=0,能够使得汇款交易M的输入与输出等额;另一方面,当根据真实汇款方对应的私钥x_j、公钥P_j和虚假汇款方i对应的公钥P_i生成可链接环签名时,如果该可链接环签名通过验证,就能够证明该可链接环签名是由公钥(P_1,……,P_n)中的某一公钥对应的私钥进行签名得到,从而在不暴露真实汇款方身份的前提下,完成身份验证。当然,在不考虑验证汇款交易M的输入与输出是否相等的情况下,也可以直接根据真实汇款方对应的私钥x_j、公钥P_j和虚假汇款方i对应的公钥P_i生成可链接环签名,而不需要利用真实汇款方对应的伪私钥r”、伪公钥P”_j和虚假汇款方i对应的伪公钥P”_i,本说明书并不对此进行限制。
除了上述的密钥镜像I_1~I_m之外,真实汇款方还可以根据伪私钥r”和伪公钥P”_j生成的密钥镜像I_(m+1)=r”×Hash_G(P”_j),从而与密钥镜像I_1~I_m构成共m+1个密钥镜像,共同用于解决“双花”问题。实际上,由于伪私钥r”和伪公钥P”_j的取值都具有随机性,使得不同交易产生的伪私钥r”和伪公钥P”_j必然不同,所以在根据伪私钥r”和伪公钥P”_j生成密钥镜像I_(m+1)时,可使密钥镜像I_(m+1)与相应交易之间形成一一对应关系,因而通过将密钥镜像I_(m+1)与历史密钥镜像进行比较,以识别出针对汇款交易M的重放(replay)问题:如果密钥镜像I_(m+1)存在相同的历史密钥镜像,就表明汇款交易M发生了重放。
步骤308,向区块链网络提交签名后的汇款交易M;其中,在交易完成后,各个收款方对应账户内的收入余额增加相应的转账额,密钥镜像I_1~I_m被添加至历史密钥镜像集合,且所述待花费资产ID_j_1~ID_j_m在区块链账本上被保持记录为真实汇款方对应账户内的资产。
区块链节点在收到汇款交易M后,可以将密钥镜像I_1~I_m与历史密钥镜像集合进行比对,以确定历史密钥镜像集合中是否存在与密钥镜像I_1~I_m相同的历史密钥镜像。历史密钥镜像集合用于存储先前已花费的资产对应的密钥镜像。如果存在与密钥镜像I_1~I_m中的某一密钥镜像相同的历史密钥镜像,表明该密钥镜像对应的资产已经被花费,即出现了“双花”问题,应当阻止汇款交易M的执行。而如果密钥镜像I_1~I_m不属于历史密钥镜像集合,则表明密钥镜像I_1~I_m对应的资产ID_j_1~ID_j_m均未被花费,在其他交易执行条件被满足的情况下,可以执行汇款交易M;并且,当汇款交易M完成后,密钥镜像I_1~I_m对应的资产ID_j_1~ID_j_m均被花费,因而需要将密钥镜像I_1~I_m添加至历史密钥镜像集合中,以用于后续检测与密钥镜像I_1~I_m相关的“双花”问题。
在诸如以太坊所采用的账户模型中,当汇款方通过交易花费一笔款项后,相应账户内的账户余额随即发生更新,即扣除被花费的款项额,从而确保账户余额的准确性。但在本说明书的技术方案中,在汇款交易M完成后,虽然真实汇款方对应账户内的资产ID_j_1~ID_j_m被花费,但是并不立即对真实汇款方对应账户进行更新,即无需立即删除真实汇款方对应账户内的资产ID_j_1~ID_j_m,使得任意用户通过区块链账本查询真实汇款方对应账户时,不会在汇款交易M完成后察觉到资产变化,避免基于资产变化而暴露真实汇款方在汇款交易M中承担的真实身份。同时,虽然真实汇款方对应账户内同时包含已花费和未花费的资产,但是基于对上述历史密钥镜像集合的维护,可以确保真实汇款方实际仅能够对未花费的资产进行花费,并准确检测出真实汇款方对已花费的资产所实施的“双花”操作。
当然,为了避免账户内累积的资产过多、增加区块链节点的维护成本,也为了方便各个用户对自身账户内资产进行管理,用户可以对自身账户内的已花费资产进行清理。以上述的真实汇款方为例,该真实汇款方可以向区块链网络发起资产删除请求,以从区块链账本中删除该真实汇款方已花费的至少一部分资产;例如,真实汇款方可以指定所需删除的资产对应的资产标识,或者真实汇款方可以指定一时间段(可以指定时间段的两侧端点;如果仅指定左侧端点,则时间段为从该左侧端点对应时刻至今;如果仅指定右侧端点,则时间段为从账户创建至该右侧端点对应时刻)并删除该时间段内产生或被花费的所有资产。
在汇款交易M完成后,转账额被分别汇入每一收款方的账户中。而由于本说明书中采用如图4所示的账户模型,使得转账额实际被汇入相应账户中的“收入余额”,使得收入余额增加相应的转账额。其中,对于虚假收款方而言,由于虚假收款方对应的转账额为0,因而虚假收款方对应账户的收入余额相当于没有发生数值变化,并且由于转账额被增加至“收入余额”部分而非“资产”部分,所以不会造成虚假收款方对应账户内出现资产额为0的资产,避免造成账户的维护成本上升。
基于上述描述可知,真实汇款方生成的汇款交易M可以包括下述交易内容:
1)真实汇款方、虚假汇款方i及其资产:{[P_1:ID_1_1,…,ID_1_m],[P_2:ID_2_1,…,ID_2_m],…,[P_n:ID_n_1,…,ID_n_m]},其中P_1~P_n分别为真实汇款方和虚假汇款方的公钥,比如真实汇款方对应的公钥P_j、虚假汇款方i对应的公钥P_i,i∈[1,j-1]∪[j+1,n]。
2)收款方及其转账额:{[Q_1,PC(t’_1,r’_1)],[Q_2,PC(t’_2,r’_2)],…,[Q_u,PC(t’_u,r’_u)]}。
3)范围证明RP_1~RP_u。
当然,汇款交易M还可以包含区块链网络中所需的其他交易内容,可以参考相关技术中的相关要求,此处不再一一列举。
然后,真实汇款方可以针对上述汇款交易M的交易内容进行哈希计算,而参数M可以表征计算得到的哈希值,且真实汇款方可以针对该哈希值M生成可链接环签名。当然,真实汇款方也可以直接针对整个交易内容生成可链接环签名,这可能带来相对更大的计算量。
基于如图4所示的账户模型,当参与者对应账户内的资产不足时,可以从对应账户内的收入余额划分出至少一部分,以用于生成相应的资产。而图4所示的账户模型还可以进一步变化:例如,图5是一示例性实施例提供的一种账户模型的示意图;如图5所示,在图4所示的包含“收入余额”部分和“资产”部分的基础上,账户模型还可以进一步包含“主余额”部分。以账户A_j为例,该账户A_j的主余额对应的资金数额为Ac_j,该资金数额Ac_j在区块链账本上被记录为相应的承诺数额PC(Ac_j,r_Ac_j),其中r_Ac_j为随机数;以及,收入余额被记录为承诺数额PC(Ar_j,r_Ar_j)。那么,该账户A_j中的主余额、收入余额、资产之间的关系可以包括:针对账户A_j的汇入资源被合并至收入余额中,主余额的至少一部分被划分以用于创建资产,而收入余额的至少一部分资金可以转移至主余额(譬如可以定期将收入余额全部并入主余额)、以对主余额进行补充,资产用于交易转账至其他账户,从而实现了资金的流转。当然,在一些情况下,主余额也可以用于吸收汇入资金,收入余额也可以用于创建资产,主余额的至少一部分资金也可以转移至收入余额,本说明书并不对此进行限制。上述的资金转移、资产创建、资产消费等,均需要通过发起相应的区块链交易而实现。
下面结合图6对根据真实汇款方对应的私钥x_j、公钥P_j、伪私钥r”、伪公钥P”_j,虚假汇款方i对应的公钥P_i、伪公钥P”_i,为汇款交易M生成可链接环签名的过程进行描述;其中,图6是一示例性实施例提供的一种生成可链接环签名的流程图。如图6所示,可以包括以下步骤:
步骤602,生成密钥镜像I_1~I_(m+1)。
生成密钥镜像I_1~I_(m+1)的过程可以参考前述内容,此处不再赘述。
其中,I_d=x_j×Hash_G(P_j,ID_j_d),d∈[1,m];I_(m+1)=r”×Hash_G(P”_j)。
步骤604a,计算中间参数L_j_d、R_j_d。
真实汇款方可以从数域Z_q中选取随机数a_d(即a_1~a_m),并按照下述公式计算中间参数L_j_d、R_j_d:
L_j_d=a_d×G
R_j_d=a_d×Hash_G(P_j,ID_j_d)
因此,真实汇款方可以计算得到L_j_d:L_j_1~L_j_m,以及R_j_d:R_j_1~R_j_m。
进一步地,真实汇款方可以生成对应于虚假汇款方i的中间参数L_i_d、R_i_d,包括:根据中间参数L_j_d、R_j_d的取值,分别生成中间参数L_i_d、R_i_d,将在下述步骤606~510中进行描述。
步骤604b,计算中间参数L_j_(m+1)、R_j_(m+1)。
真实汇款方可以从数域Z_q中选取随机数a_(m+1),并按照下述公式计算中间参数L_j_(m+1)、R_j_(m+1):
L_j_(m+1)=a_(m+1)×G
R_j_(m+1)=a_(m+1)×Hash_G(P”_j)
因此,真实汇款方可以计算得到L_j_(m+1)和R_j_(m+1)。进一步地,真实汇款方可以生成对应于虚假汇款方i的中间参数L_i_(m+1)、R_i_(m+1),将在下述步骤606~510中进行描述。
步骤606,计算中间参数L_(j+1)_d~L_n_d、R_(j+1)_d~R_n_d、L_(j+1)_(m+1)~L_n_(m+1)、R_(j+1)_(m+1)~R_n_(m+1)。
当i=j+1~n时,中间参数L_i_d、R_i_d的计算过程符合下述公式:
L_i_d=(s_i_d×G+c_i×P_i)mod p
R_i_d=[s_i_d×Hash_G(P_i,ID_i_d)+c_i×I_d]mod p
同时,中间参数L_i_(m+1)、R_i_(m+1)的计算过程符合下述公式:
L_i_(m+1)=[s_i_(m+1)×G+c_i×P”_i]mod p
R_i_(m+1)=[s_i_(m+1)×Hash_G(P”_i)+c_i×I_(m+1)]mod p
在计算过程中,涉及到s_(j+1)_d~s_n_d、s_(j+1)_(m+1)~s_n_(m+1),均为数域Z_q中的随机数。以及,在计算过程中,涉及到c_(j+1)~c_n,其计算过程符合下述公式:c_i=Hash[M,L_(i-1)_1,R_(i-1)_1,……,L_(i-1)_(m+1),R_(i-1)_(m+1)],其中Hash()为从上述椭圆曲线到数据Z_q上的哈希函数。
在步骤604a-b中已经计算得到L_j_d、R_j_d、L_j_(m+1),R_j_(m+1)的情况下,基于L_j_d、R_j_d计算得到i∈[j+1,n]时的中间参数L_i_d、R_i_d,即上述的L_(j+1)_d~L_n_d、R_(j+1)_d~R_n_d。具体的,首先根据L_j_d、R_j_d、L_j_(m+1),R_j_(m+1)的取值计算得到c_(j+1)=Hash[M,L_j_1,R_j_1,……,L_j_(m+1),R_j_(m+1)],并根据随机数s_(j+1)_d和计算得到的c_(j+1)计算L_(j+1)_d、R_(j+1)_d,即:根据随机数s_(j+1)_1和计算得到的c_(j+1)计算L_(j+1)_1、R_(j+1)_1,根据随机数s_(j+1)_2和计算得到的c_(j+1)计算L_(j+1)_2、R_(j+1)_2,……,根据随机数s_(j+1)_m和计算得到的c_(j+1)计算L_(j+1)_m、R_(j+1)_m;然后根据L_(j+1)_d、R_(j+1)_d的取值计算得到c_(j+2),并根据随机数s_(j+2)_d和计算得到的c_(j+2)计算L_(j+2)_d、R_(j+2)_d;以此类推,直至计算得到L_n_d、R_n_d。
类似地,根据随机数s_i_(m+1)、伪公钥P”_i、计算得到的c_i和密钥镜像I_(m+1),可以分别按照前述公式计算得到中间参数L_(j+1)_(m+1)~L_n_(m+1)、R_(j+1)_(m+1)~R_n_(m+1),此处不再一一赘述。
步骤608,计算中间参数L_1_d、R_1_d、L_1_(m+1)、R_1_(m+1)。
中间参数L_1_d、R_1_d的计算过程符合下述公式:
L_1_d=(s_1_d×G+c_1×P_1)mod p
R_1_d=(s_1_d×Hash_G(P_1,ID_1_d)+c_1×I_d)mod p
而中间参数L_1_(m+1)、R_1_(m+1)的计算过程符合下述公式:
L_1_(m+1)=[s_1_(m+1)×G+c_1×P”_1]mod p
R_1_(m+1)=[s_1_(m+1)×Hash_G(P_1)+c_1×I_(m+1)]mod p
其中,s_1_d和s_1_(m+1)均为数域Z_q中的随机数、c_1=Hash[M,L_n_1,R_n_1,……,L_n_(m+1),R_n_(m+1)]。由于各个中间参数之间符合环形取值规则,因而虽然为了便于描述而将中间参数表达为L_1_d~L_n_d、R_1_d~R_n_d、L_1_(m+1)~L_n_(m+1)、R_1_(m+1)~R_n_(m+1),但是L_1_d、R_1_d、L_1_(m+1)、R_1_(m+1)并非排列在首位,L_n_d、R_n_d、L_n_(m+1)、R_n_(m+1)也并非排列在末位,实际上应当认为L_1_d与L_n_d之间相邻、R_1_d与R_n_d之间相邻、L_1_(m+1)与L_n_(m+1)之间相邻、R_1_(m+1)与R_n_(m+1)之间相邻。所以,当c_1=Hash[M,L_n_1,R_n_1,……,L_n_(m+1),R_n_(m+1)]时,实质上也符合上述步骤606处所描述的c_i=Hash[M,L_(i-1)_1,R_(i-1)_1,……,L_(i-1)_(m+1),R_(i-1)_(m+1)],即c_1与c_(j+1)~c_n的计算公式一致。
步骤610,计算中间参数L_2_d~L_(j-1)_d、R_2_d~R_(j-1)_d、L_2_(m+1)~L_(j-1)_(m+1)、R_2_(m+1)~R_(j-1)_(m+1)。
当i=2~j-1时,中间参数L_i_d、R_i_d的计算过程符合下述公式:
L_i_d=(s_i_d×G+c_i×P_i)mod p
R_i_d=(s_i_d×Hash_G(P_i,ID_i_d)+c_i×I_d)mod p
同时,中间参数L_i_(m+1)、R_i_(m+1)的计算过程符合下述公式:
L_i_(m+1)=[s_i_(m+1)×G+c_i×P”_i]mod p
R_i_(m+1)=[s_i_(m+1)×Hash_G(P”_i)+c_i×I_(m+1)]mod p
在计算过程中,涉及到s_2_d~s_(j-1)_d、s_2_(m+1)~s_(j-1)_(m+1),均为数域Z_q中的随机数。以及,在计算过程中,涉及到c_2~c_(j-1),其计算过程符合下述公式:c_i=Hash(M,L_(i-1)_1,R_(i-1)_1,……,L_(i-1)_(m+1),R_(i-1)_(m+1))。
因此,在步骤608中已经计算得到L_1_d、R_1_d、L_1_(m+1)、R_1_(m+1)的情况下,可以基于L_1_d、R_1_d、L_1_(m+1)、R_1_(m+1)计算得到i∈[2,j-1]时的中间参数L_i_d、R_i_d,即上述的L_2_d~L_(j-1)_d、R_2_d~R_(j-1)_d。具体的,首先根据L_1_d、R_1_d、L_1_(m+1)、R_1_(m+1)的取值计算得到c_2,并根据随机数s_2_d和计算得到的c_2计算L_2_d、R_2_d,即:根据随机数s_2_1和计算得到的c_2计算L_2_1、R_2_1,根据随机数s_2_2和计算得到的c_2计算L_2_2、R_2_2,……,根据随机数s_2_m和计算得到的c_2计算L_2_m、R_2_m;然后根据L_2_d、R_2_d的取值计算得到c_3,并根据随机数s_3_d和计算得到的c_3计算L_3_d、R_3_d;以此类推,直至计算得到L_(j-1)_d、R_(j-1)_d。
类似地,根据随机数s_i_(m+1)、伪公钥P”_i、计算得到的c_i和密钥镜像I_(m+1),可以分别按照前述公式计算得到中间参数L_2_(m+1)~L_(j-1)_(m+1)、R_2_(m+1)~R_(j-1)_(m+1),此处不再一一赘述。
步骤612,生成可链接环签名。
基于上述步骤的处理过程,可以得到密钥镜像I_1,……,I_(m+1)、c_1、s_1_d~s_(j-1)_d、s_(j+1)_d~s_n_d、s_1_(m+1)~s_(j-1)_(m+1)、s_(j+1)_(m+1)~s_n_(m+1),而s_j_d、s_j_(m+1)需要签名方按照下述公式进行计算得到:
s_j_d=(a_d-c_j×x_j)mod p
s_j_(m+1)=(a_(m+1)-c_j×r”)mod p
其中,虽然上述公式中将c_j的取值划分为2种情况,但首先参数j的取值实际上是固定的,比如参数j的取值固定为1或者固定为[2,n]中的某一数值,这一点应当与上述的参数i、e区分开(参数i存在n-1个取值,分别为1~j-1和j+1~n,参数e存在m个取值,分别为1~m);同时,与上文对c_1的描述相类似的:由于各个中间参数之间符合环形取值规则,因而虽然为了便于描述而将中间参数表达为L_1_d~L_n_d、R_1_d~R_n_d、L_1_(m+1)~L_n_(m+1)、R_1_(m+1)~R_n_(m+1),但是L_1_d、R_1_d、L_1_(m+1)、R_1_(m+1)并非排列在首位,L_n_d、R_n_d、L_n_(m+1)、R_n_(m+1)也并非排列在末位,实际上应当认为L_1_d与L_n_d之间相邻、R_1_d与R_n_d之间相邻、L_1_(m+1)与L_n_(m+1)之间相邻、R_1_(m+1)与R_n_(m+1)之间相邻。所以,当c_1=Hash(M,L_n_1,R_n_1,……,L_n_(m+1),R_n_(m+1))时,实质上也符合c_j=Hash(M,L_(j-1)_1,R_(j-1)_1,……,L_(j-1)_(m+1),R_(j-1)_(m+1))。
因此,真实汇款方可以生成环签名[I_1,…,I_(m+1),c_1,s_1_1,…,s_1_(m+1),…,s_n_1,…,s_n_(m+1)],其中包含密钥镜像I_1~I_(m+1)、随机数s_i_1~s_i_(m+1)、衍生数值s_j_1~s_j_(m+1)和c_1。
图7是一示例性实施例提供的另一种采用环签名的机密区块链交易的实现方法的流程图。如图7所示,该方法应用于区块链节点,由区块链节点对图3所示实施例中生成的可链接环签名进行验证,以及对汇款交易M实施其他必要的验证操作,可以包括以下步骤:
步骤702,接收汇款交易M,所述汇款交易M的每一参与者在区块链账本上存在对应的账户,账户内包括取值被记录为相应承诺值的收入余额、资产额被记录为资产承诺的若干资产;其中,所述汇款交易M由参与者中的真实汇款方根据自身对应账户内的待花费资产ID_j_1~ID_j_m、虚假汇款方i对应账户内的掩护资产ID_i_1~ID_i_m以及参与者中的各个收款方对应的转账额的承诺值组装生成。
如前所述,本说明书采用“账户”形式对用户持有的资产进行管理。在如图4所示的账户模型中,账户包括“收入余额”部分和“资产”部分;在如图5所示的账户模型中,账户包括“收入余额”部分、“资产”部分和“主余额”部分。其中,“收入余额”和“主余额”对应的资金数额在区块链账本上均被记录为相应的承诺数额,“资产”部分所含每一资产的资产额在区块链账本上也被记录为相应的承诺数额。具体可以参考前述结合图4或图5的相关描述,此处不再赘述。
对于“资产”而言,以待花费资产ID_j_1~ID_j_m为例,ID_j_1~ID_j_m为资产标识,以用于区分不同资产;假定待花费资产ID_j_1~ID_j_m的资产额为t_j_1~t_j_m,那么区块链账本上可以记录为资产额t_j_1~t_j_m对应的资产承诺PC(t_j_1,r_j_1)~PC(t_j_m,r_j_m),r_j_1~r_j_m为随机数。由于随机数r_j_1~r_j_m的存在,使得数额t_j_1~t_j_m生成的资产承诺PC(t_j_1,r_j_1)~PC(t_j_m,r_j_m)具有随机性,除了掌握随机数r_j_1~r_j_m的真实汇款方之外,其他用户仅能够看到资产承诺PC(t_j_1,r_j_1)~PC(t_j_m,r_j_m),且无法据此反推出相应的资产额t_j_1~t_j_m。
类似地,对于掩护资产ID_i_1~ID_i_m而言,ID_i_1~ID_i_m为资产标识,以用于区分不同资产;假定掩护资产ID_i_1~ID_i_m的资产额为t_i_1~t_i_m,那么区块链账本上可以记录为资产额t_i_1~t_i_m对应的资产承诺PC(t_i_1,r_i_1)~PC(t_i_m,r_i_m),r_i_1~r_i_m为随机数。例如,虚假汇款方1持有掩护资产ID_1_1~ID_1_m,相应的资产额为t_1_1~t_1_m,那么区块链账本上可以记录为资产额t_1_1~t_1_m对应的资产承诺PC(t_1_1,r_1_1)~PC(t_1_m,r_1_m),r_1_1~r_1_m为仅虚假汇款方1持有的随机数。
举例而言,区块链账本上可以采用类似于[标识,资产承诺]的形式对资产进行记录和存储。例如,上述的待花费资产ID_j_1~ID_j_m可以被记录为[ID_j_1,PC(t_j_1,r_j_1)]~[ID_j_m,PC(t_j_m,r_j_m)]、虚假汇款方i对应的掩护资产ID_i_1~ID_i_m可以被记录为[ID_i_1,PC{i,1}]~[ID_i_m,PC{i,m}]。当然,此处仅为示例,区块链账本实际可以采用其他形式。例如,当存在多种资产类型时,可以采用类似于[类型,标识,资产承诺]的形式对资产进行记录和存储,那么在计算资产额、执行交易等过程中,需要考虑资产类型所带来的影响,比如不同类型的资产之间存在资产额的比例换算等。再者,除了直接记录“资产承诺”之外,还可以同时存储其他信息;以待花费资产ID_j_m为例,可以记录为[ID_j_m,E(t_j_m,r_j_m)],其中E(t_j_m,r_j_m)=[PC(t_j_m,r_j_m),E(t_j_m),E(r_j_m)],E(t_j_m)和E(r_j_m)分别为资产额t_j_m和随机数r_j_m对应的同态密文,可由真实汇款方的同态加密公钥(对公钥P_j进行同态加密得到)分别对资产额t_j_m和随机数r_j_m进行加密后得到。为了便于理解,下文均以[标识,资产承诺]的资产形式进行举例说明。
从汇款交易M的款项输入角度而言,涉及到真实汇款方和虚假汇款方的角色,而从款项输出角度而言,涉及到真实收款方与虚假收款方的角色。在这些角色中,部分角色之间可能存在一定重叠。
对于真实汇款方和虚假汇款方而言,根据真实汇款方对应账户内的待花费资产ID_j_1~ID_j_m、虚假汇款方i对应账户内的掩护资产ID_i_1~ID_i_m来组装汇款交易M,再加上下文中生成的可链接环签名,使得虚假汇款方i可以对真实汇款方进行身份隐藏,使得其他用户无法确定究竟在“真实汇款方和虚假汇款方i”中的哪个用户支出了资产。这里,虚假汇款方可以包括除真实汇款方之外的参与者,比如该虚假汇款方可以包括汇款交易M的真实收款方,譬如当真实汇款方为用户A、真实收款方为用户B和用户C时,通过将用户B和用户C配置为虚假汇款方,不仅可使用户B、用户C对用户A进行身份隐藏,甚至由于用户B和用户C同时属于“汇款方”和“收款方”,从而带来更强的迷惑作用。再比如,虚假汇款方可以包括除真实汇款方和真实收款方之外的参与者,譬如当真实汇款方为用户A、真实收款方为用户B和用户C时,可以将不相干的用户D配置为虚假汇款方,以用于对用户A进行身份隐藏。又比如,虚假汇款方可以同时包括上述的真实收款方和其他用户,譬如当真实汇款方为用户A、真实收款方为用户B和用户C时,可以将用户B、用户C和用户D配置为虚假汇款方,以用于对用户A进行身份隐藏。
对于真实收款方与虚假收款方而言:
在一实施例中,汇款交易M的收款方可以仅包含真实收款方。一种情况下,当不存在找零时,真实收款方仅包含初始汇款对象,即最初确定与真实汇款方进行交易的对象,此时满足待花费资产ID_j_1~ID_j_m对应的资产额t_j_1~t_j_m之和与各个初始汇款对象对应的转账额之和恰好相等,即不存在找零。另一种情况下,而当存在找零时,真实收款方包含真实汇款方和初始汇款对象,真实汇款方对应的转账额为待花费资产ID_j_1~ID_j_m对应的资产额t_j_1~t_j_m之和与各个初始汇款对象对应的转账额之和的差值,即找零额。
在另一实施例中,除了真实收款方之外,汇款交易M的收款方还可以包括虚假收款方。一种情况下,该虚假收款方可以包括真实汇款方,但此时不存在找零。另一种情况下,该虚假收款方可以包括除真实汇款方和真实收款方之外的参与者。而通过将虚假收款方对应的转账额设为0,可以避免对真实收款方的影响,同时由于所有收款方的转账额均为相应的同态密文,因而虚假收款方可以对真实收款方实现身份隐藏。
根据实际情况,可以仅通过虚假汇款方对真实汇款方进行身份隐藏,也可以进一步通过虚假收款方对实际收款方进行身份隐藏。在一实施例中,汇款交易M的参与者可以同时包括真实汇款方、真实收款方和区别于两者的掩护方,这些用户组成共n个参与者,并且该n个参与者均同时参与汇款交易的汇款与收款:对于真实汇款方而言,真实收款方和掩护方均为虚假汇款方;对于真实收款方而言,真实汇款方和掩护方均为虚假收款方,从而同时对真实汇款方和真实收款方进行身份隐藏。而且,由于每个参与者均同时参与汇款和收款,因而可以使得汇款方与收款方之间实现身份混淆,从而进一步增加身份隐藏的可靠性。
假定汇款交易M的收款方为Q_1~Q_u,对应的转账额分别为t’_1~t’_u,其中1≤u≤n。在汇款交易M中,与前述待花费资产对应的资产额t_j_1~t_j_m相类似的,转账额t’_1~t’_u在汇款交易M中被分别记录为对应的转账额承诺PC(t’_1,r’_1)~PC(t’_u,r’_u),r’_1~r’_u为随机数。其中,随机数r’_1~r’_u可由真实汇款方确定,并通过诸如链下通道告知相应的收款方(通常仅需要告知真实收款方),使得收款方可以基于随机数r’_1~r’_u进行验证,比如真实收款方w可以验证PC(t’_w,r’_w)=t’_w×G+r’_w×H是否成立。
在汇款交易M完成后,转账额被分别汇入每一收款方的账户中。而由于本说明书中采用如图4或图5所示的账户模型,使得转账额实际被汇入相应账户中的“收入余额”,使得收入余额增加相应的转账额。其中,对于虚假收款方而言,由于虚假收款方对应的转账额为0,因而虚假收款方对应账户的收入余额相当于没有发生数值变化,并且由于转账额被增加至“收入余额”部分而非“资产”部分,所以不会造成虚假收款方对应账户内出现资产额为0的资产,避免造成账户的维护成本上升。
步骤704a,获取所述汇款交易M的可链接环签名包含的密钥镜像I_1~I_m,所述密钥镜像I_1~I_m的取值与真实汇款方的私钥x_j、公钥P_j和资产标识ID_j_1~ID_j_m相关。
真实汇款方需要维护一组公私钥对,比如私钥x_j和公钥P_j。在确定这组公私钥对之前,需要取定一个数域Z_q和该数域上的一条椭圆曲线,比如椭圆曲线Ed25519等,令G、H为该椭圆曲线的两个随机的生成元,其中|G|=p为一个大素数(譬如不小于某一预设数值),并在数值范围(0,p)中选取真实汇款方的私钥x_j,相应的公钥为P_j=x_j×G。对于其他参与者而言,均通过类似的方式确定出各自唯一对应的公私钥对。
密钥镜像I_1~I_m与真实汇款方提供的待花费资产ID_j_1~ID_j_m之间一一对应,分别用于验证相应的待花费资产是否已花费,从而解决“双花”问题。其中,由于密钥镜像I_1~I_m的取值与相应资产的资产标识ID_j_1~ID_j_m相关,使得即便所有密钥镜像均采用同一组公私钥对(即真实汇款方的私钥x_j和公钥P_j),也可以基于资产标识ID_j_1~ID_j_m之间的取值差异,确保生成的密钥镜像I_1~I_m之间完全不同,因而无需为每一资产分别维护一组公私钥对,可以在解决“双花”问题的同时,使得每一账户所需维护的公私钥对的数量与交易所含的资产数量无关。例如,I_d=x_j×Hash_G(P_j,ID_j_d),d∈[1,m];其中,Hash_G()为上述椭圆曲线到其自身的哈希函数。
区块链节点在收到汇款交易M后,可以将密钥镜像I_1~I_m与历史密钥镜像集合进行比对,以确定历史密钥镜像集合中是否存在与密钥镜像I_1~I_m相同的历史密钥镜像。历史密钥镜像集合用于存储先前已花费的资产对应的密钥镜像。如果存在与密钥镜像I_1~I_m中的某一密钥镜像相同的历史密钥镜像,表明该密钥镜像对应的资产已经被花费,即出现了“双花”问题,应当阻止汇款交易M的执行。而如果密钥镜像I_1~I_m不属于历史密钥镜像集合,则表明密钥镜像I_1~I_m对应的资产ID_j_1~ID_j_m均未被花费,在其他交易执行条件被满足的情况下,可以执行汇款交易M;并且,当汇款交易M完成后,密钥镜像I_1~I_m对应的资产ID_j_1~ID_j_m均被花费,因而需要将密钥镜像I_1~I_m添加至历史密钥镜像集合中,以用于后续检测与密钥镜像I_1~I_m相关的“双花”问题。
步骤704b,验证所述可链接环签名,所述可链接环签名由真实汇款方根据自身所持的私钥x_j、公钥P_j和虚假汇款方i所持的公钥P_i而生成;其中,当所述可链接环签名通过验证时,所述汇款交易M被确认为输入与输出等额。
可链接环签名可以由真实汇款方直接根据自身对应的私钥x_j、公钥P_j和虚假汇款方i对应的公钥P_i生成,而不需要利用下述真实汇款方对应的伪私钥r”、伪公钥P”_j和虚假汇款方i对应的伪公钥P”_i。此时,如果该可链接环签名通过验证,就能够证明该可链接环签名是由公钥(P_1,……,P_n)中的某一公钥对应的私钥进行签名得到,从而在不暴露真实汇款方身份的前提下,完成身份验证。
可链接环签名可以由展示汇款方根据自身对应的私钥x_j、公钥P_j、伪私钥r”、伪公钥P”_j,以及虚假汇款方i对应的公钥P_i、伪公钥P”_i而生成。其中,伪公钥P”_j=[PC(t_j_1,r_j_1)+…+PC(t_j_m,r_j_m)]-[PC(t’_1,r’_1)+…+PC(t’_u,r’_u)]、伪私钥r”=(r_j_1+...+r_j_m)-(r’_1+...+r’_u)。同时,根据虚假汇款方i持有资产[ID_i_1,PC{i,1}]~[ID_i_m,PC{i,m}],真实汇款方可以计算出掩护方i对应的伪公钥P”_i=[PC{i,1}+…+PC{i,m}]-[PC(t’_1,r’_1)+…+PC(t’_u,r’_u)],i∈[1,j-1]∪[j+1,n]。可链接环签名的生成过程可以参考图6所示的实施例,此处不再赘述。而区块链节点通过对该可链接环签名进行验证,可以高效、紧凑地实现下述两方面的验证功能:一方面,由于伪公钥P”_j与伪私钥r”之间满足P”_j=r”×G、伪公钥P”_i与伪私钥r”之间满足P”_i≠r”×G,所以当根据伪私钥r”、伪公钥P”_j和P”_i生成可链接环签名时,如果该可链接环签名通过验证,就能够证明在伪公钥(P”_1,……,P”_n)中存在某一伪公钥的取值等于r”×G,并且这个伪公钥对应于前述的t”=0,能够使得汇款交易M的输入与输出等额;另一方面,当根据真实汇款方对应的私钥x_j、公钥P_j和虚假汇款方i对应的公钥P_i生成可链接环签名时,如果该可链接环签名通过验证,就能够证明该可链接环签名是由公钥(P_1,……,P_n)中的某一公钥对应的私钥进行签名得到,从而在不暴露真实汇款方身份的前提下,完成身份验证。
步骤706,当满足交易执行条件时,执行所述汇款交易M,使各个收款方对应账户内的收入余额增加相应的转账额;所述交易执行条件包括:所述密钥镜像I_1~I_m不属于历史密钥镜像集合、所述可链接环签名通过验证;其中,所述密钥镜像I_1~I_m在交易完成后被添加至所述历史密钥镜像集合,且所述待花费资产ID_j_1~ID_j_m在区块链账本上被保持记录为真实汇款方对应账户内的资产。
在诸如以太坊所采用的账户模型中,当汇款方通过交易花费一笔款项后,相应账户内的账户余额随即发生更新,即扣除被花费的款项额,从而确保账户余额的准确性。但在本说明书的技术方案中,在汇款交易M完成后,虽然真实汇款方对应账户内的资产ID_j_1~ID_j_m被花费,但是并不立即对真实汇款方对应账户进行更新,即无需立即删除真实汇款方对应账户内的资产ID_j_1~ID_j_m,使得任意用户通过区块链账本查询真实汇款方对应账户时,不会在汇款交易M完成后察觉到资产变化,避免基于资产变化而暴露真实汇款方在汇款交易M中承担的真实身份。同时,虽然真实汇款方对应账户内同时包含已花费和未花费的资产,但是基于对上述历史密钥镜像集合的维护,可以确保真实汇款方实际仅能够对未花费的资产进行花费,并准确检测出真实汇款方对已花费的资产所实施的“双花”操作。
当然,为了避免账户内累积的资产过多、增加区块链节点的维护成本,也为了方便各个用户对自身账户内资产进行管理,用户可以对自身账户内的已花费资产进行清理。以上述的真实汇款方为例,该真实汇款方可以向区块链网络发起资产删除请求,以从区块链账本中删除该真实汇款方已花费的至少一部分资产;例如,真实汇款方可以指定所需删除的资产对应的资产标识,或者真实汇款方可以指定一时间段(可以指定时间段的两侧端点;如果仅指定左侧端点,则时间段为从该左侧端点对应时刻至今;如果仅指定右侧端点,则时间段为从账户创建至该右侧端点对应时刻)并删除该时间段内产生或被花费的所有资产。
可链接环签名中还可以包含密钥镜像I_(m+1),该密钥镜像由真实汇款方根据自身对应的伪私钥r”和伪公钥P”_j、虚假汇款方i对应的伪公钥P”_i生成,例如I_(m+1)=r”×Hash_G(P”_j)。如前所述,密钥镜像I_(m+1)与相应交易之间存在一一对应的关系,因而通过将密钥镜像I_(m+1)与历史密钥镜像进行比较,以识别出针对汇款交易M的重放(replay)问题:如果密钥镜像I_(m+1)存在相同的历史密钥镜像,就表明汇款交易M发生了重放。那么,交易执行条件还可以包括:密钥镜像I_(m+1)不属于历史密钥镜像集合。
当真实汇款方对应于公钥P_j、虚假汇款方i对应于公钥P_i时,交易执行条件还可以包括:资产ID_k_d归属于公钥P_k的所有方,k∈[1,n]、d∈[1,m]。换言之,区块链节点可以对各个资产的归属情况进行验证。
在机密交易中,区块链节点还可以验证汇款交易M中的转账额t’_1~t’_u是否均不小于0。而转账额承诺PC(t’_1,r’_1)~PC(t’_u,r’_u)是真实汇款方根据转账额t’_1~t’_u、随机数r’_1~r’_u而生成,且转账额t’_1~t’_u和随机数r’_1~r’_u只有真实汇款方和收款方Q_1~Q_u掌握,因而验证方需要通过汇款交易M所含的范围证明RP_1~RP_u实施验证操作,以确定转账额t’_1~t’_u是否满足t’_1≥0~t’_u≥0,其中范围证明RP_1~RP_u由真实汇款方生成并添加至汇款交易M中。那么,交易执行条件还可以包括:所有转账额均不小于0。
下面结合图8对步骤704b中验证可链接环签名的过程进行描述;其中,图8是一示例性实施例提供的一种验证可链接环签名的流程图。如图8所示,可以包括以下步骤:
步骤802,验证标识ID_k_d对应的资产是否归属于公钥P_k的持有方,k∈[1,n]、d∈[1,m]。
验证方可以为区块链网络中的区块链节点,该区块链节点在收到真实汇款方提交的汇款交易M后,可以对该汇款交易M的环签名进行验证;类似地,每一区块链节点均会收到该汇款交易M,并作为验证方而实施验证。其中,汇款交易M可以由客户端设备发送至验证方,或者汇款交易M可由某一验证方从客户端设备收到后转发至其他验证方,或者汇款交易M可由某一验证方从另一验证方处收到后转发至其他验证方。
验证方作为区块链节点而维护有全量的区块链账本,使得验证方可以获知每一用户的资产持有情况。汇款交易M中涉及到用户k(对应于公钥P_k)持有的资产ID_k_d,而验证方可以基于维护的资产持有情况来分别验证每一公钥P_k与相应资产ID_k_d之间的对应关系是否成立,即公钥P_k的持有者是否拥有标识ID_k_d对应的m份资产。如果每一公钥P_k与相应数组中的标识ID_k_d之间的对应关系均成立,可以继续执行后续步骤;如果某一标识对应的资产并不属于公钥P_k的持有方,验证方可以判定汇款交易M无效,而无需继续执行后续的步骤804~708。
步骤804,根据s_k_1~s_k_(m+1)依次计算L_k_1~L_k_(m+1)、R_k_1~R_k_(m+1)。
步骤806,根据L_n_1~L_n_(m+1)、R_n_1~R_n_(m+1)计算c_1’,验证c_1’是否等于c_1。
验证方可以根据环签名所含的随机数和/或其衍生数值,计算中间参数L_j_d、R_j_d、L_j_(m+1)、R_j_(m+1)、L_i_d、R_i_d、L_i_(m+1)、R_i_(m+1),以验证中间参数L_j_d与L_i_d之间是否符合环形取值规则、中间参数R_j_d与R_i_d之间是否符合环形取值规则、中间参数L_j_(m+1)与L_i_(m+1)之间是否符合环形取值规则、中间参数R_j_(m+1)与R_i_(m+1)之间是否符合环形取值规则。
例如,当环签名所含的随机数和/或其衍生数值包括:s_1_1~s_1_(m+1),…,s_n_1~s_n_(m+1)、c_1时,中间参数L_j_d与L_i_d之间的环形取值规则可以包括:
L_k_d=(s_k_d×G+c_k×P_k)mod p,h∈[1,n]
中间参数L_j_(m+1)与L_i_(m+1)之间的环形取值规则包括:
L_k_(m+1)=[s_k_(m+1)×G+c_k×P”_k]mod p
中间参数R_j_d与R_i_d之间的环形取值规则包括:
R_k_d=[s_k_d×Hash_G(P_k,ID_k_d)+c_k×I_d]mod p
中间参数R_j_(m+1)与R_i_(m+1)之间的环形取值规则包括:
R_k_(m+1)=[s_k_(m+1)×Hash_G(P”_k)+c_k×I_(m+1)]mod p
那么,验证方可以首先根据s_1_d、c_1、G、P_1和p生成L_1_d,即L_1_1~L_1_m,以及根据s_1_d、c_1、P_1、ID_1_d、I_d和p生成R_1_d,即R_1_1~R_1_m;以及,验证方根据s_1_(m+1)、c_1、G、P”_1和p生成L_1_(m+1),根据s_1_(m+1)、c_1、P”_1、I_(m+1)和p生成R_1_(m+1)。
然后,验证方可以根据M、L_1_d、R_1_d、L_1_(m+1)和R_1_(m+1)生成c_2,并根据s_2_d、c_2、G、P_2和p生成L_2_d,根据s_2_d、c_2、P_2、ID_2_d、I_d和p生成R_2_d,根据s_2_(m+1)、c_2、G、P”_2和p生成L_2_(m+1),以及根据s_2_(m+1)、c_2、P”_2、I_(m+1)和p生成R_2_(m+1);以此类推,直至验证方根据M、L_(n-1)_d、R_(n-1)_d、L_(n-1)_(m+1)和R_(n-1)_(m+1)生成c_n,并根据s_n_d、c_n、G、P_n和p生成L_n_d,根据s_n_d、c_n、P_n、ID_n_d、I_d和p生成R_n_d,根据s_n_(m+1)、c_n、G、P”_n和p生成L_n_(m+1),以及根据s_n_(m+1)、c_n、P”_n、I_(m+1)和p生成R_n_(m+1)。
进一步地,验证方可以按照上述针对c_k的计算公式,计算得到c_1’=Hash[M,L_n_1,R_n_1,……,L_n_(m+1),R_n_(m+1)]。之所以此处采用c_1’,是为了区分于环签名所含的c_1,那么验证方可以将该c_1’与环签名所含的c_1进行比较:如果c_1’与c_1相等,表明上述的环形取值规则被满足,可以确定:1)在伪公钥P_1~P_n中,存在一个伪公钥使得汇款交易M的汇入额等于汇出额;2)环签名由公钥P_1~P_m中的某一公钥对应的私钥生成。而如果c_1’与c_1不相等,表明1)和2)中至少一个不成立,该汇款交易M被确认为无效,无需继续执行下述步骤808。
步骤808,验证范围证明RP_1~RP_u。
验证方从汇款交易M的交易内容中获取范围证明RP_1~RP_u并验证,以确定相应的转账额t’_1~t’_u是否均满足不小于0。如果满足,则转入步骤810,否则汇款交易M被确认为无效,无需继续执行下述步骤810。
步骤810,验证密钥镜像I_1~I_(m+1)是否已存在。
在一实施例中,验证方可以将密钥镜像I_1~I_(m+1)与历史密钥镜像进行比较,从而确定密钥镜像I_1~I_(m+1)是否已存在。如果密钥镜像I_1~I_(m+1)中的任一密钥镜像已存在对应的历史密钥镜像,可以判定汇款交易M无效;如果密钥镜像I_1~I_(m+1)均不存在对应的历史密钥镜像,可以判定汇款交易M有效,可以执行该汇款交易M、完成汇款操作。
图9是一示例性实施例提供的一种设备的示意结构图。请参考图9,在硬件层面,该设备包括处理器902、内部总线904、网络接口906、内存908以及非易失性存储器910,当然还可能包括其他业务所需要的硬件。处理器902从非易失性存储器910中读取对应的计算机程序到内存908中然后运行,在逻辑层面上形成采用环签名的机密区块链交易的实现装置。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图10,在软件实施方式中,该采用环签名的机密区块链交易的实现装置可以包括:
参与者确定单元1001,确定汇款交易M的所有参与者,每一参与者在区块链账本上存在对应的账户,账户内包括取值被记录为相应承诺值的收入余额、资产额被记录为资产承诺的若干资产;
交易组装单元1002,根据参与者中的真实汇款方对应账户内的待花费资产ID_j_1~ID_j_m、虚假汇款方i对应账户内的掩护资产ID_i_1~ID_i_m,以及参与者中的各个收款方对应的转账额的承诺值,组装汇款交易M;
签名生成单元1003,根据真实汇款方所持私钥x_j、公钥P_j和虚假汇款方i所持公钥P_i,为所述汇款交易M生成可链接环签名,所述可链接环签名中包含密钥镜像I_1~I_m,且密钥镜像I_1~I_m的取值与真实汇款方的私钥x_j、公钥P_j和资产标识ID_j_1~ID_j_m相关;
交易提交单元1004,向区块链网络提交签名后的汇款交易M;其中,在交易完成后,各个收款方对应账户内的收入余额增加相应的转账额,密钥镜像I_1~I_m被添加至历史密钥镜像集合,且所述待花费资产ID_j_1~ID_j_m在区块链账本上被保持记录为真实汇款方对应账户内的资产。
可选的,所述虚假汇款方包括:除真实汇款方和真实收款方之外的参与者;或者,所述虚假汇款方包括:除真实汇款方之外的参与者。
可选的,所述收款方包括真实收款方和虚假收款方;其中,虚假收款方对应的转账额为0。
可选的,当不存在找零时,所述真实收款方包括:初始汇款对象;当存在找零时,所述真实收款方包括:初始汇款对象和所述真实汇款方;其中,所述虚假收款方包括:除真实收款方之外的参与者。
可选的,
参与者对应账户内的资产包括:由对应账户内的收入余额的至少一部分划分而生成的资产;或者,
参与者对应账户内还包括主余额,所述主余额在区块链账本上被记录为相应的承诺值;其中,参与者对应账户内的资产包括:由对应账户内的主余额的至少一部分划分而生成的资产。
可选的,当参与者对应账户内包括主余额时,对应账户内的收入余额还在合并命令的指示下被合并至对应账户内的主余额。
可选的,通过下述公式计算所述密钥镜像I_1~I_m:
I_d=x_j×Hash_G(P_j,ID_j_d),d∈[1,m];
其中,Hash_G()为椭圆曲线到其自身的哈希函数。
可选的,还包括:
证明生成单元1005,针对所述汇款交易M的各个收款方对应的转账额,分别生成相应的范围证明,所述范围证明被组装至所述汇款交易M中,以用于证明相应的转账额不小于0。
可选的,签名生成单元1003具体用于:
根据待花费资产ID_j_1~ID_j_m对应的资产额t_j_1~t_j_m、随机数r_j_1~r_j_m和资产承诺PC(t_j_1,r_j_1)~PC(t_j_m,r_j_m),以及收款方Q_1~Q_u对应的转账额t’_1~t’_u、随机数r’_1~r’_u和转账额承诺PC(t’_1,r’_1)~PC(t’_u,r’_u),确定对应于真实汇款方的伪公钥P”_j=[PC(t_j_1,r_j_1)+…+PC(t_j_m,r_j_m)]-[PC(t’_1,r’_1)+…+PC(t’_u,r’_u)]、对应于真实汇款方的伪私钥r”=(r_j_1+...+r_j_m)-(r’_1+...+r’_u),u≥1;
根据掩护资产ID_i_1~ID_i_m对应的资产承诺PC{i,1}~PC{i,m},确定对应于虚假汇款方i的伪公钥P”_i=[PC{i,1}+…+PC{i,m}]-[PC(t’_1,r’_1)+…+PC(t’_u,r’_u)],i∈[1,j-1]∪[j+1,n];
根据真实汇款方对应的私钥x_j、公钥P_j、伪私钥r”、伪公钥P”_j,虚假汇款方i对应的公钥P_i、伪公钥P”_i,为所述汇款交易M生成可链接环签名。
可选的,还包括:
镜像生成单元1006,根据真实汇款方对应的伪私钥r”、伪公钥P”_j,生成密钥镜像I_(m+1)=r”×Hash_G(P”_j);其中,所述可链接环签名还包含所述密钥镜像I_(m+1)。
可选的,签名生成单元1003具体用于:
分别生成对应于真实汇款方的中间参数L_j_d、R_j_d、L_j_(m+1)、R_j_(m+1),以及对应于虚假汇款方i的中间参数L_i_d、R_i_d、L_i_(m+1)、R_i_(m+1),d∈[1,m];其中,中间参数L_j_d与L_i_d之间符合环形取值规则、中间参数L_j_(m+1)与L_i_(m+1)之间符合环形取值规则、中间参数R_j_d与R_i_d之间符合环形取值规则、中间参数R_j_(m+1)与R_i_(m+1)之间符合环形取值规则,且中间参数L_j_d、R_j_d、L_j_(m+1)、R_j_(m+1)、L_i_d、R_i_d、L_i_(m+1)、R_i_(m+1)的取值与至少一个被选取的随机数和/或其衍生数值相关;
根据被选取的随机数和/或其衍生数值,生成针对所述汇款交易M的可链接环签名。
可选的,
P_j=x_j×G,G为椭圆曲线的基点,|G|=p且p为素数,0<x_j<p;
生成对应于真实汇款方的中间参数L_j_d、R_j_d,包括:根据在所述椭圆曲线所处的数域Z_q中选取的随机数a_d,计算中间参数L_j_d、R_j_d,使得L_j_d=a_d×G、R_j_d=a_d×Hash_G(P_j,ID_j_d);其中,Hash_G()为从所述椭圆曲线到其自身的哈希函数;
生成对应于真实汇款方的中间参数L_j_(m+1)、R_j_(m+1),包括:根据在所述椭圆曲线所处的数域Z_q中选取的随机数a_(m+1),计算中间参数L_j_(m+1)、R_j_(m+1),使得L_j_(m+1)=a_(m+1)×G、R_j_(m+1)=a_(m+1)×Hash_G(P”_j);
生成对应于虚假汇款方i的中间参数L_i_d、R_i_d、L_i_(m+1)、R_i_(m+1),包括:根据中间参数L_j_d、R_j_d的取值,生成中间参数L_i_d、R_i_d、L_i_(m+1)、R_i_(m+1),使得L_i_d=(s_i_d×G+c_i×P_i)mod p、R_i_d=(s_i_d×Hash_G(P_i,ID_i_d)+c_i×I_d)mod p、L_i_(m+1)=[s_i_(m+1)×G+c_i×P”_i]mod p、R_i_(m+1)=[s_i_(m+1)×Hash_G(P”_i)+c_i×I_(m+1)]mod p,I_d=x_j×Hash_G(P_j,ID_j_d)、I_(m+1)=r”×Hash_G(P”_j);其中,s_i_1~s_i_(m+1)为数域Z_q中的随机数,当i=1时c_1=Hash(M,L_n_1,R_n_1,……,L_n_(m+1),R_n_(m+1))、当i∈[2,j-1]∪[j+1,n]时c_i=Hash(M,L_(i-1)_1,R_(i-1)_1,……,L_(i-1)_(m+1),R_(i-1)_(m+1)),Hash()为从所述椭圆曲线到数域Z_q的哈希函数;
被选取的随机数和/或其衍生数值包括:随机数s_i_1~s_i_(m+1)、衍生数值c_1、衍生数值s_j_1~s_j_(m+1);其中,s_j_d=(a_d-c_j×x_j)mod p、s_j_(m+1)=[a_(m+1)-c_j×r”]mod p,当j的取值被确定为1时c_j=Hash(M,L_n_1,R_n_1,……,L_n_(m+1),R_n_(m+1))、当j的取值被确定为属于[2,n]时c_j=Hash(M,L_(j-1)_1,R_(j-1)_1,……,L_(j-1)_(m+1),R_(j-1)_(m+1))。
可选的,还包括:
资产删除单元1007,向区块链网络发起资产删除请求,以从区块链账本中删除所述真实汇款方对应账户内已花费的至少一部分资产。
图11是一示例性实施例提供的一种设备的示意结构图。请参考图11,在硬件层面,该设备包括处理器1102、内部总线1104、网络接口1106、内存1108以及非易失性存储器1110,当然还可能包括其他业务所需要的硬件。处理器1102从非易失性存储器1110中读取对应的计算机程序到内存1108中然后运行,在逻辑层面上形成采用环签名的机密区块链交易的实现装置。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图12,在软件实施方式中,该采用环签名的机密区块链交易的实现装置可以包括:
交易接收单元1201,接收汇款交易M,所述汇款交易M的每一参与者在区块链账本上存在对应的账户,账户内包括取值被记录为相应承诺值的收入余额、资产额被记录为资产承诺的若干资产;其中,所述汇款交易M由参与者中的真实汇款方根据自身对应账户内的待花费资产ID_j_1~ID_j_m、虚假汇款方i对应账户内的掩护资产ID_i_1~ID_i_m以及参与者中的各个收款方对应的转账额的承诺值组装生成;
镜像获取单元1202,获取所述汇款交易M的可链接环签名包含的密钥镜像I_1~I_m,所述密钥镜像I_1~I_m的取值与真实汇款方的私钥x_j、公钥P_j和资产标识ID_j_1~ID_j_m相关;
签名验证单元1203,验证所述可链接环签名,所述可链接环签名由真实汇款方根据自身所持的私钥x_j、公钥P_j和虚假汇款方i所持的公钥P_i而生成;其中,当所述可链接环签名通过验证时,所述汇款交易M被确认为输入与输出等额;
交易执行单元1204,当满足交易执行条件时,执行所述汇款交易M,使各个收款方对应账户内的收入余额增加相应的转账额;所述交易执行条件包括:所述密钥镜像I_1~I_m不属于历史密钥镜像集合、所述可链接环签名通过验证;其中,所述密钥镜像I_1~I_m在交易完成后被添加至所述历史密钥镜像集合,且所述待花费资产ID_j_1~ID_j_m在区块链账本上被保持记录为真实汇款方对应账户内的资产。
可选的,所述虚假汇款方包括:除真实汇款方和真实收款方之外的参与者;或者,所述虚假汇款方包括:除真实汇款方之外的参与者。
可选的,所述收款方包括真实收款方和虚假收款方;其中,虚假收款方对应的转账额为0。
可选的,当不存在找零时,所述真实收款方包括:初始汇款对象;当存在找零时,所述真实收款方包括:初始汇款对象和所述真实汇款方;其中,所述虚假收款方包括:除真实收款方之外的参与者。
可选的,
参与者对应账户内的资产包括:由对应账户内的收入余额的至少一部分划分而生成的资产;或者,
参与者对应账户内还包括主余额,所述主余额在区块链账本上被记录为相应的承诺值;其中,参与者对应账户内的资产包括:由对应账户内的主余额的至少一部分划分而生成的资产。
可选的,还包括:
余额合并单元1205,当参与者对应账户内包括主余额时,根据参与者发出的合并命令,将对应账户内的收入余额合并至对应账户内的主余额。
可选的,所述密钥镜像I_1~I_m由汇款方通过下述公式计算得到:
I_d=x_j×Hash_G(P_j,ID_j_d),d∈[1,m];
其中,Hash_G()为椭圆曲线到其自身的哈希函数。
可选的,还包括:
范围验证单元1206,根据汇款交易M所含的范围证明,验证各个收款方对应的转账额是否均不小于0;
其中,所述交易执行条件还包括:各个收款方对应的转账额均不小于0。
可选的,所述交易执行条件还包括:资产ID_k_d归属于公钥P_k的所有方,k∈[1,n]、d∈[1,m]、i∈[1,j-1]∪[j+1,n]。
可选的,所述可链接环签名由真实汇款方根据对应于自身的私钥x_j、公钥P_j、伪私钥r”和伪公钥P”_j,以及对应于虚假汇款方i的公钥P_i和伪公钥P”_i而生成,伪公钥P”_j=[PC(t_j_1,r_j_1)+…+PC(t_j_m,r_j_m)]-[PC(t’_1,r’_1)+…+PC(t’_u,r’_u)]、伪私钥r”=(r_j_1+...+r_j_m)-(r’_1+...+r’_u)、伪公钥P”_i=[PC{i,1}+…+PC{i,m}]-[PC(t’_1,r’_1)+…+PC(t’_u,r’_u)],i∈[1,j-1]∪[j+1,n];
其中,资产标识ID_j_1~ID_j_m对应于资产额t_j_1~t_j_m、随机数r_j_1~r_j_m和资产承诺PC(t_j_1,r_j_1)~PC(t_j_m,r_j_m),掩护资产ID_i_1~ID_i_m对应于资产承诺PC{i,1}~PC{i,m},收款方Q_1~Q_u对应于转账额t’_1~t’_u、随机数r’_1~r’_u和转账额承诺PC(t’_1,r’_1)~PC(t’_u,r’_u),u≥1。
可选的,所述可链接环签名还包括密钥镜像I_(m+1)=r”×Hash_G(P”_j);
其中,所述交易执行条件还包括:密钥镜像I_(m+1)不属于所述历史密钥镜像集合。
可选的,真实汇款方根据对应于自身的私钥x_j、公钥P_j、伪私钥r”、伪公钥P”_j,虚假汇款方i对应的公钥P_i、伪公钥P”_i,分别生成对应于真实汇款方的中间参数L_j_d、R_j_d、L_j_(m+1)、R_j_(m+1),以及对应于虚假汇款方i的中间参数L_i_d、R_i_d、L_i_(m+1)、R_i_(m+1),并根据与中间参数L_j_d、R_j_d、L_j_(m+1)、R_j_(m+1)、L_i_d、R_i_d、L_i_(m+1)、R_i_(m+1)的取值相关的随机数和/或其衍生数值而生成所述可链接环签名,d∈[1,m];签名验证单元1203具体用于:
根据所述环签名所含的随机数和/或其衍生数值,计算中间参数L_j_d、R_j_d、L_j_(m+1)、R_j_(m+1)、L_i_d、R_i_d、L_i_(m+1)、R_i_(m+1),以验证中间参数L_j_d与L_i_d之间是否符合环形取值规则、中间参数L_j_(m+1)与L_i_(m+1)之间是否符合环形取值规则、中间参数R_j_d与R_i_d之间是否符合环形取值规则、中间参数R_j_(m+1)与R_i_(m+1)之间是否符合环形取值规则。
可选的,
P_j=x_j×G,G为椭圆曲线的基点,|G|=p且p为素数,0<x_j<p;
所述环签名所含的随机数和/或其衍生数值包括:s_k_1~s_k_(m+1)、c_1,k∈[1,n];
中间参数L_j_d与L_i_d之间的环形取值规则包括:L_k_d=(s_k_d×G+c_k×P_k)mod p;其中,s_k_d属于所述椭圆曲线所处的数域Z_q,Hash()为从所述椭圆曲线到数域Z_q的哈希函数;
中间参数L_j_(m+1)与L_i_(m+1)之间的环形取值规则包括:L_k_(m+1)=[s_k_(m+1)×G+c_k×P”_k]mod p;其中,s_k_(m+1)属于数域Z_q;
中间参数R_j_d与R_i_d之间的环形取值规则包括:R_k_d=(s_k_d×Hash_G(P_k,ID_k_d)+c_k×I_d)mod p,I_d被包含于所述环签名中;
中间参数R_j_(m+1)与R_i_(m+1)之间的环形取值规则包括:R_k_(m+1)=[s_k_(m+1)×Hash_G(P”_k)+c_k×I_(m+1)]mod p,I_(m+1)被包含于所述环签名中;
其中,当h=1时c_1=Hash(M,L_n_1,R_n_1,……,L_n_(m+1),R_n_(m+1))、当h∈[2,n]时c_k=Hash(M,L_(h-1)_1,R_(h-1)_1,……,L_(h-1)_(m+1),R_(h-1)_(m+1))。
可选的,还包括:
资产删除单元1207,根据任一参与者向区块链网络发起的资产删除请求,从区块链账本中删除所述任一参与者对应账户内已花费的至少一部分资产。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。