区块链中生成和验证多层可链接环签名的方法及装置
技术领域
本说明书一个或多个实施例涉及区块链技术领域,尤其涉及一种区块链中生成和验证多层可链接环签名的方法及装置。
背景技术
区块链技术(也被称之为,分布式账本技术)是一种去中性化的分布式数据库技术,具有去中心化、公开透明、不可篡改、可信任等多种特点,适用于诸多对数据可靠性具有高需求的应用场景中。但是,由于区块链账本完全公开,导致信息隐私性无法得到保障。
发明内容
有鉴于此,本说明书一个或多个实施例提供一种区块链中生成和验证多层可链接环签名的方法及装置。
为实现上述目的,本说明书一个或多个实施例提供技术方案如下:
根据本说明书一个或多个实施例的第一方面,提出了一种区块链中生成多层可链接环签名的方法,包括:
确定签名方数组(P_j,ID_j_1,……,ID_j_m),所述签名方数组(P_j,ID_j_1,……,ID_j_m)包含签名方的公钥P_j=x_j×G和所述签名方所持的m份待花费资产的唯一标识ID_j_1~ID_j_m,其中G为椭圆曲线的基点,|G|=p且p为素数,x_j为签名方的私钥且0<x_j<p;
根据所述签名方的私钥x_j和所述签名方数组(P_j,ID_j_1,……,ID_j_m)生成密钥镜像组(I_1,……,I_m);
在针对与所述待花费资产相关的交易M生成多层可链接环签名时,将所述密钥镜像组(I_1,……,I_m)添加至所述多层可链接环签名中。
根据本说明书一个或多个实施例的第二方面,提出了一种区块链中验证多层可链接环签名的方法,包括:
获取交易M的多层可链接环签名包含的密钥镜像组(I_1,……,I_m),所述密钥镜像组(I_1,……,I_m)由签名方根据所持有的私钥x_j和签名方数组(P_j,ID_j_1,……,ID_j_m)生成,所述签名方数组(P_j,ID_j_1,……,ID_j_m)包含所述签名方的公钥P_j=x_j×G和与所述交易M相关的m份待花费资产的唯一标识ID_j_1~ID_j_m,其中G为椭圆曲线的基点,|G|=p且p为素数,0<x_j<p;
根据保存的历史密钥镜像,对所述密钥镜像组(I_1,……,I_m)进行验证,以确定所述多层可链接环签名的有效性。
根据本说明书一个或多个实施例的第三方面,提出了一种区块链中生成多层可链接环签名的装置,包括:
确定单元,确定签名方数组(P_j,ID_j_1,……,ID_j_m),所述签名方数组(P_j,ID_j_1,……,ID_j_m)包含签名方的公钥P_j=x_j×G和所述签名方所持的m份待花费资产的唯一标识ID_j_1~ID_j_m,其中G为椭圆曲线的基点,|G|=p且p为素数,x_j为签名方的私钥且0<x_j<p;
第一生成单元,根据所述签名方的私钥x_j和所述签名方数组(P_j,ID_j_1,……,ID_j_m)生成密钥镜像组(I_1,……,I_m);
第二生成单元,在针对与所述待花费资产相关的交易M生成多层可链接环签名时,将所述密钥镜像组(I_1,……,I_m)添加至所述多层可链接环签名中。
根据本说明书一个或多个实施例的第四方面,提出了一种区块链中验证多层可链接环签名的装置,包括:
获取单元,获取交易M的多层可链接环签名包含的密钥镜像组(I_1,……,I_m),所述密钥镜像组(I_1,……,I_m)由签名方根据所持有的私钥x_j和签名方数组(P_j,ID_j_1,……,ID_j_m)生成,所述签名方数组(P_j,ID_j_1,……,ID_j_m)包含所述签名方的公钥P_j=x_j×G和与所述交易M相关的m份待花费资产的唯一标识ID_j_1~ID_j_m,其中G为椭圆曲线的基点,|G|=p且p为素数,0<x_j<p;
验证单元,根据保存的历史密钥镜像,对所述密钥镜像组(I_1,……,I_m)进行验证,以确定所述多层可链接环签名的有效性。
根据本说明书一个或多个实施例的第五方面,提出了一种电子设备,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器通过运行所述可执行指令以实现如第一方面或第二方面所述的方法。
根据本说明书一个或多个实施例的第六方面,提出了一种计算机可读存储介质,其上存储有计算机指令,该指令被处理器执行时实现如第一方面或第二方面所述方法的步骤。
附图说明
图1是一示例性实施例提供的一种示例环境的示意图。
图2是一示例性实施例提供的一种概念架构的示意图。
图3是一示例性实施例提供的一种区块链中生成多层可链接环签名的方法的流程图。
图4是一示例性实施例提供的一种区块链中验证多层可链接环签名的方法的流程图。
图5是一示例性实施例提供的一种生成多层可链接环签名的流程图。
图6是一示例性实施例提供的一种验证多层可链接环签名的流程图。
图7是一示例性实施例提供的一种设备的结构示意图。
图8是一示例性实施例提供的一种区块链中生成多层可链接环签名的装置的框图。
图9是一示例性实施例提供的另一种设备的结构示意图。
图10是一示例性实施例提供的一种区块链中验证多层可链接环签名的装置的框图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本说明书一个或多个实施例相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施例的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施例中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施例中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施例中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施例中也可能被合并为单个步骤进行描述。
图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)。此外,还有多种类型的结合,比如私有链+联盟链、联盟链+公有链等不同组合形式。其中去中心化程度最高的是公有链。公有链以比特币、以太坊为代表,加入公有链的参与者可以读取链上的数据记录、参与交易以及竞争新区块的记账权等。而且,各参与者(即节点)可自由加入以及退出网络,并进行相关操作。私有链则相反,该网络的写入权限由某个组织或者机构控制,数据读取权限受组织规定。简单来说,私有链可以为一个弱中心化系统,参与节点具有严格限制且少。这种类型的区块链更适合于特定机构内部使用。联盟链则是介于公有链以及私有链之间的区块链,可实现“部分去中心化”。联盟链中各个节点通常有与之相对应的实体机构或者组织;参与者通过授权加入网络并组成利益相关联盟,共同维护区块链运行。
通过区块链网络所采用的分布式架构,以及区块所采用的链式结构,使得信息可以永久、无篡改地记录在各个区块链节点统一维护的区块链账本中。但是,由于区块链账本完全公开,导致信息隐私性无法得到保障。例如,当用户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(Unspent TransactionOutput,未花费的交易输出)模型进行资产管理:用户持有的区块链资产均被记录为相应交易的输出,每笔交易以一个或多个未花费的交易输出作为其输入,并相应产生一个或多个输出。典型的,UTXO被应用于比特币及其衍生的密码货币所采用。当环签名方案被应用在基于UTXO模型的区块链网络时,同一笔资产可能被多笔交易分别引用,但由于签名方的身份被环签名方案所隐藏,使得验证方无法检查出同一笔资产被重复引用,从而造成“双花”问题。
因此,相关技术中提出了对上述环签名方案的改进方案,称为可链接环签名(Linkable Spontaneous Anonymous Group Signature,LSAG),可以生成用于对签名方进行标记的key-image(密钥镜像),但并不会暴露该签名方在签名所用的一组环签名中所对应的公钥,从而既能够确保对签名方的身份隐藏,又能够基于key-image解决“双花”问题。
以门罗币(Monero)为例,当签名方持有的私钥为x_j、公钥为P_j时,可以将公钥P_j隐藏于一组公钥(P_1,……,P_n)中,并且所采用的key-image可以为I=x_j×Hash(P_j)。那么,即便签名方将公钥P_j隐藏于多组公钥而实施可链接环签名,也会由于每次产生的key-image相同,使得验证方可以据此识别出“双花”问题,从而限制相关交易的执行。
但是,由于门罗币所用的上述方案中,key-image取值与签名方所持有的私钥x_j、公钥P_j相关,导致同一组公私钥对在不同交易中生成的key-image取值相同,因而仅能够使用一次。相应地,签名方需要维护很多公私钥对,每次交易都需要换用一组新的公私钥对,从而增加了对公私钥对的维护成本。
尤其是,上述方案中根据私钥x_j和公钥P_j生成的key-image取值仅能够用于花费一份资产的交易,而针对一笔交易包含多份资产的情况,门罗币提出了一种多层可链接环签名的处理方案:当一笔交易包含m份资产时,上述可链接环签名中的每个公钥被替换为m维的公钥向量,以用于生成多层可链接环签名(此时为m层),使得签名方需要维护的公私钥对的数量呈m倍上升。
为此,本说明书提出了新的多层可链接环签名的解决方案,使得签名方仅需要维护一组公私钥对,便可针对该签名方的所有交易生成多层可链接环签名,以及支持对多层可链接环签名的有效验证,即本说明书的技术方案与层数无关。
图3是一示例性实施例提供的一种区块链中生成多层可链接环签名的方法的流程图。如图3所示,该方法可以包括以下步骤:
步骤302,确定签名方数组(P_j,ID_j_1,……,ID_j_m),所述签名方数组(P_j,ID_j_1,……,ID_j_m)包含签名方的公钥P_j=x_j×G和所述签名方所持的m份待花费资产的唯一标识ID_j_1~ID_j_m,其中G为椭圆曲线的基点,|G|=p且p为素数,x_j为签名方的私钥且0<x_j<p。
在一实施例中,本说明书中的签名方可以为任意能够实施签名操作的用户,而并不特指某一用户,本说明书并不对此进行限制。
在一实施例中,签名方在区块链中持有的资产可以包括区块链资产(比如签名方通过竞争记账权得到的区块链奖励,或者通过交易获得)、链外资产等一种或多种类型。签名方对资产的持有信息可以记录在区块链账本中;由于区块链账本的内容处于公开状态,因而签名方对资产的持有信息可以采用加密形式进行记录,例如可以将资产的数值转换为相应的承诺数值(比如可以基于Pedersen承诺算法进行转换),再例如可以在区块链节点上以密文形式存储上述持有信息、该密文形式的持有信息可以为区块链节点上的可信执行环境(Trusted Execution Environment,TEE)中被解密读取,总之可以通过上述或其他方式来保护签名方对资产的持有信息,以避免泄露签名方的隐私。
在一实施例中,每一用户在区块链上存在对应的一组公私钥对,一组公私钥对仅唯一对应于一个用户,因而可以通过公钥或私钥来表征相关用户的身份信息。比如上述签名方可以持有私钥x_j和公钥P_j组成的公私钥对,其中私钥x_j由签名方保管,而公钥P_j向其他用户、区块链节点等公开,使得该公钥P_j可以用于表征签名方的身份信息。
在一实施例中,生成私钥x_j、公钥P_j的方式包括:选取数域Z_q和该数域上的一条椭圆曲线,比如该椭圆曲线可以为Ed25519或其他;令选取的椭圆曲线的基点(或称生成元)为G,其中|G|=p且p为一个大素数(例如取值不小于预设数值的某个素数);随机选取私钥x_j,使得0<x_j<p,那么公钥P_j=x_j×G。其他用户的公私钥对的生成过程可以参考以上描述。当然,各个用户同样可以采用其他生成公私钥对的算法,本说明书并不对此进行限制。
在一实施例中,签名方所持有的每一份资产均存在对应的唯一标识,而区块链账本上可以记录有签名方的公钥P_j与该签名方所持资产的唯一标识之间的对应关系,使得各个区块链节点均可以基于该对应关系确定签名方对相关资产的持有情况。例如,当区块链账本上记录有公钥P_j与标识ID_j_1~ID_j_m之间的对应关系时,表明公钥P_j对应的用户(在上述实施例中,该用户为签名方)持有上述标识ID_j_1~ID_j_m分别对应的资产。类似地,当区块链账本上记录有公钥P_i与标识ID_i_1~ID_i_m之间的对应关系时,表明公钥P_i对应的用户持有上述标识ID_i_1~ID_i_m对应的资产。
在一实施例中,资产对应的唯一标识可以通过任意形式生成,只要能够保证唯一性即可。例如,唯一标识可以包括资产的数字摘要(如哈希值)。再例如,当资产之间可能存在内容重复的情况下,可以进一步添加资产的创建时间戳、创建顺序、所处区块的区块高度等信息,并将这些信息与资产的内容一并生成数字摘要,以作为该资产的唯一标识。
在一实施例中,当签名方希望花费的m份资产对应于唯一标识ID_j_1,……,ID_j_m时,可以将该签名方的公钥P_j与相应的m个唯一标识ID_j_1,……,ID_j_m组成上述的签名方数组(P_j,ID_j_1,……,ID_j_m)。当然,签名方数组也可以采用诸如(ID_j_1,……,ID_j_m,P_j)或其他形式,本说明书并不对此进行限制。
步骤304,根据所述签名方的私钥x_j和所述签名方数组(P_j,ID_j_1,……,ID_j_m)生成密钥镜像组(I_1,……,I_m)。
在一实施例中,根据签名方的私钥x_j、签名方数组(P_j,ID_j_1,……,ID_j_m)生成密钥镜像组(I_1,……,I_m),使得该密钥镜像组除了与私钥x_j和公钥P_j相关之外,还与资产的唯一标识ID_j_1~ID_j_m相关,而由于每一资产的唯一标识都必然不同、具有唯一性,使得即便签名方仅持有一组私钥x_j与公钥P_j构成的公私钥对,只要确保所涉及的资产不同,就可以确保资产的唯一标识ID_j_1~ID_j_m存在差异,从而生成不同的key-image。换言之,本说明书通过在生成密钥镜像组(I_1,……,I_m)的过程中,加入了对资产的唯一标识ID_j_1~ID_j_m的考量,使得签名方仅需维护一组公私钥对,即可针对采用不同资产的交易分别生成不同的key-image(即本说明书中的密钥镜像组),并且不论交易中包含多少资产,都仅需使用一组公私钥对,即公私钥对的数量与可链接环签名的层数无关,从而在解决“双花”问题的同时,使得公私钥对能够无限制地使用,无需维护多组公私钥对,免去了每次交易后对公私钥对的更换。
在一实施例中,基于上述的椭圆曲线,可以选取一从该椭圆曲线到其自身的哈希函数Hash_G(),以用于计算上述的密钥镜像组(I_1,……,I_m)。例如,根据签名方的私钥x_j和签名方数组(P_j,ID_j_1……,ID_j_m),可以计算密钥镜像组(I_1,……,I_m),其中:I_t=x_j×Hash_G(P_j,ID_j_t),t∈[1,m]。当然,可以选取其他哈希函数,同样可以基于私钥x_j和签名方数组(P_j,ID_j_1……,ID_j_m)计算上述的密钥镜像组(I_1,……,I_m),本说明书并不对此进行限制。
步骤306,在针对与所述待花费资产相关的交易M生成多层可链接环签名时,将所述密钥镜像组(I_1,……,I_m)添加至所述多层可链接环签名中。
通过将密钥镜像组(I_1,……,I_m)添加至多层可链接环签名中,使得每一区块链节点在收到交易M后,可以通过从交易M的多层可链接环签名中提取出密钥镜像组(I_1,……,I_m),以针对该密钥镜像组(I_1,……,I_m)进行验证。下面结合图4来介绍相关验证过程。
图4是一示例性实施例提供的一种区块链中验证多层可链接环签名的方法的流程图。如图4所示,该方法可以包括以下步骤:
步骤402,获取交易M的多层可链接环签名包含的密钥镜像组(I_1,……,I_m),所述密钥镜像组(I_1,……,I_m)由签名方根据所持有的私钥x_j和签名方数组(P_j,ID_j_1……,ID_j_m)生成,所述签名方数组(P_j,ID_j_1……,ID_j_m)包含所述签名方的公钥P_j和与所述交易M相关的m份待花费资产的唯一标识ID_j_1~ID_j_m。
步骤404,根据保存的历史密钥镜像,对所述密钥镜像组(I_1,……,I_m)进行验证,以确定所述多层可链接环签名的有效性。
在一实施例中,每一区块链节点可以分别作为验证方,对所收到的交易M的多层可链接环签名进行验证,以确定多层可链接环签名的有效性。对密钥镜像组(I_1,……,I_m)的验证,属于对多层可链接环签名的验证操作之一;换言之,对于多层可链接环签名的验证还可以包括其他操作。当任一操作被确认为验证失败后,可以终止验证过程并确定验证失败;当所有操作均被确认为验证成功后,可以确定多层可链接环签名被验证为有效。
在一实施例中,验证方维护有历史密钥镜像,即验证方先前已经验证过的密钥镜像。验证方可以将密钥镜像组(I_1,……,I_m)与该历史密钥镜像进行比较:如果密钥镜像组(I_1,……,I_m)中的任一密钥镜像I_t与某一历史密钥镜像相同,则表明对应于标识ID_j_t的资产已经被花费,交易M存在对该资产的“双花”问题,那么多层可链接环签名必然无效;如果密钥镜像组(I_1,……,I_m)中的密钥镜像与区块链节点维护的所有历史密钥镜像均不相同,则表明不存在“双花”问题,可以结合其他验证操作确定多层可链接环签名的有效性。
其中,当密钥镜像组(I_1,……,I_m)与区块链节点维护的所有历史密钥镜像均不相同时,在确认对应于标识ID_j_1~ID_j_m的资产被花费后,区块链节点将该密钥镜像组(I_1,……,I_m)中的所有密钥镜像均添加为历史密钥镜像,以用于检查后续可能出现的针对这些资产的“双花”问题。
由于本说明书中采用了数组的形式,例如上述的签名方数组(P_j,ID_j_1……,ID_j_m),因而需要相应确定出掩护方数组(P_i,ID_i_1,……,ID_i_m),从而将签名方数组(P_j,ID_j_1……,ID_j_m)隐藏于掩护方数组(P_i,ID_i_1,……,ID_i_m)中,实现对签名方身份信息的隐藏。因此,本说明书中对于多层可链接环签名的生成和验证过程也在一定程度上区别于门罗币,下面将对此进行介绍。
下面结合图5介绍本说明书中一种生成多层可链接环签名的方案,如图5所示,可以包括以下步骤:
步骤502,签名方确定数组集合[(P_1,ID_1_1,……,ID_1_m),……,(P_n,ID_n_1,……,ID_n_m)]。
在一实施例中,由于j∈[1,n],使得签名方数组(P_j,ID_j_1……,ID_j_m)被包含于上述数组集合中,而其余的掩护方数组(P_i,ID_i_1,……,ID_i_m)可以用于对该签名方数组(P_j,ID_j_1……,ID_j_m)进行掩护,其中i∈[1,j-1]∪[j+1,n]。相应地,签名方可以根据自身持有的私钥x_j和该数组集合[(P_1,ID_1_1,……,ID_1_m),……,(P_n,ID_n_1,……,ID_n_m)]生成多层可链接环签名。
在一实施例中,由于每一用户的公钥均对外公开,因而签名方可以随机选取n-1个用户,以作为上述的掩护方。同时,由于每一用户所持有资产的唯一标识均被记录于区块链账本上,因而签名方可以根据选取的n-1个掩护方,从区块链账本上查询出这些掩护方分别持有的m份资产的唯一标识,以构成相应的掩护方数组(P_i,ID_i_1,……,ID_i_m)。
步骤504,签名方计算密钥镜像组(I_1,……,I_m)。
在一实施例中,对密钥镜像组(I_1,……,I_m)的计算过程,可以参考上述图3所示的实施例,此处不再赘述。
步骤506,签名方计算中间参数L_j_t、R_j_t。
在一实施例中,数组集合[(P_1,ID_1_1,……,ID_1_m),……,(P_n,ID_n_1,……,ID_n_m)]所含的签名方数组(P_j,ID_j_1……,ID_j_m)和掩护方数组(P_i,ID_i_1,……,ID_i_m)可以分别用于计算对应的中间参数L、R,比如签名方数组(P_j,ID_j_1……,ID_j_m)对应于中间参数L_j_t、R_j_t,掩护方数组(P_i,ID_i_1,……,ID_i_m)对应于中间参数L_i_t、R_i_t,其中t∈[1,m]。而不同数组对应的中间参数之间存在一定的依赖关系,例如中间参数L_j_t与L_i_t之间符合环形取值规则、中间参数R_j_t与R_i_t之间符合环形取值规则,且中间参数L_j_t、R_j_t、L_i_t、R_i_t的取值与至少一个被选取的随机数和/或其衍生数值相关,而签名方可以根据被选取的随机数和/或其衍生数值,生成针对交易M的多层可链接环签名,该交易M用于花费标识ID_j_1~ID_j_m对应的m份资产。
在分别生成各个数组对应的中间参数L、R的过程中,签名方首先生成签名方数组(P_j,ID_j_1……,ID_j_m)对应的中间参数L_j_t、R_j_t,并进一步通过后续步骤依次生成各个掩护方数组(P_i,ID_i_1,……,ID_i_m)对应的中间参数L_i_t、R_i_t。虽然签名方在生成中间参数L_j_t、R_j_t的过程中,并未依赖于其他数组对应的中间参数L_i_t、R_i_t,但最终可以在取值上确保该中间参数L_j_t、R_j_t与其他中间参数L_i_t、R_i_t之间的保持依赖关系,从而形成上述的环形取值规则。
在一实施例中,签名方可以从上文所述的数域Z_q中选取随机数a_1~a_m,并按照下述公式计算中间参数L_j_t、R_j_t:
L_j_t=a_t×G
R_j_t=a_t×Hash_G(P_j,ID_j_t)
其中,G为上述的椭圆曲线的生成元、Hash_G()为上述的从椭圆曲线到其自身的哈希函数。
进一步地,签名方可以生成对应于掩护方i的中间参数L_i_t、R_i_t,包括:根据中间参数L_j_t、R_j_t的取值,分别生成中间参数L_i_t、R_i_t;下面结合步骤508~512进行描述。
步骤508,签名方计算中间参数L_(j+1)_t~L_n_t、R_(j+1)_t~R_n_t。
在一实施例中,中间参数L_i_t、R_i_t的计算过程符合下述公式:
L_i_t=(s_i_t×G+c_i×P_i)mod p
R_i_t=(s_i_t×Hash_G(P_i,ID_i_t)+c_i×I_t)mod p
在计算过程中,涉及到s_(j+1)_t~s_n_t,均为数域Z_q中的随机数。以及,在计算过程中,涉及到c_(j+1)~c_n,其计算过程符合下述公式:c_i=Hash(M,L_(i-1)_1,R_(i-1)_1,……,L_(i-1)_m,R_(i-1)_m),Hash()为从上述所述的椭圆曲线到数域Z_q的哈希函数。
因此,在步骤506中已经计算得到L_j_t、R_j_t的情况下,基于L_j_t、R_j_t计算得到i∈[j+1,n]时的中间参数L_i_t、R_i_t,即上述的L_(j+1)_t~L_n_t、R_(j+1)_t~R_n_t。具体的,首先根据L_j_t、R_j_t的取值计算得到c_(j+1)=Hash(M,L_j_1,R_j_1,……,L_j_m,R_j_m),并根据随机数s_(j+1)_t和计算得到的c_(j+1)计算L_(j+1)_t、R_(j+1)_t,即:根据随机数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)_t、R_(j+1)_t的取值计算得到c_(j+2),并根据随机数s_(j+2)_t和计算得到的c_(j+2)计算L_(j+2)_t、R_(j+2)_t;以此类推,直至计算得到L_n_t、R_n_t。
步骤510,签名方计算中间参数L_1_t、R_1_t。
在一实施例中,中间参数L_1_t、R_1_t的计算过程符合下述公式:
L_1_t=(s_1_t×G+c_1×P_1)mod p
R_1_t=(s_1_t×Hash_G(P_1,ID_1_t)+c_1×I_t)mod p
其中,s_1_t为数域Z_q中的随机数、c_1=Hash(M,L_n_1,R_n_1,……,L_n_m,R_n_m)。由于各个中间参数之间符合环形取值规则,因而虽然为了便于描述而将中间参数表达为L_1_t~L_n_t、R_1_t~R_n_t,但是L_1_t、R_1_t并非排列在首位,L_n_t、R_n_t也并非排列在末位,实际上应当认为L_1_t与L_n_t之间相邻、R_1_t与R_n_t之间相邻。所以,当c_1=Hash(M,L_n_1,R_n_1,……,L_n_m,R_n_m)时,实质上也符合上述步骤508所描述的c_i=Hash(M,L_(i-1)_1,R_(i-1)_1,……,L_(i-1)_m,R_(i-1)_m),即c_1与c_(j+1)~c_n的计算公式一致。
步骤512,签名方计算中间参数L_2_t~L_(j-1)_t、R_2_t~R_(j-1)_t。
在一实施例中,中间参数L_i_t、R_i_t的计算过程符合下述公式:
L_i_t=(s_i_t×G+c_i×P_i)mod p
R_i_t=(s_i_t×Hash_G(P_i,ID_i_t)+c_i×I_t)mod p
在计算过程中,涉及到s_2_t~s_(j-1)_t,均为数域Z_q中的随机数。以及,在计算过程中,涉及到c_2~c_(j-1),其计算过程符合下述公式:c_i=Hash(M,L_(i-1)_1,R_(i-1)_1,……,L_(i-1)_m,R_(i-1)_m)。
因此,在步骤510中已经计算得到L_1_t、R_1_t的情况下,基于L_j_t、R_j_t计算得到i∈[2,j-1]时的中间参数L_i_t、R_i_t,即上述的L_2_t~L_(j-1)_t、R_2_t~R_(j-1)_t。具体的,首先根据L_1_t、R_1_t的取值计算得到c_2,并根据随机数s_2_t和计算得到的c_2计算L_2_t、R_2_t,即:根据随机数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_t、R_2_t的取值计算得到c_3,并根据随机数s_3_t和计算得到的c_3计算L_3_t、R_3_t;以此类推,直至计算得到L_(j-1)_t、R_(j-1)_t。
步骤514,签名方生成多层可链接环签名(I_1,…,I_m,c_1,s_1_1,…,s_1_m,…s_n_1…s_n_m)。
在一实施例中,基于上述步骤的处理过程,可以得到密钥镜像组(I_1,……,I_m)、c_1、s_1_t~s_(j-1)_t、s_(j+1)_t~s_n_t,而s_j_t需要签名方按照下述公式进行计算得到:
s_j_t=(a_t-c_j×x_j)mod p
其中,虽然上述公式中将c_j的取值划分为2种情况,但首先参数j的取值实际上是固定的,比如参数j的取值固定为1或者固定为[2,n]中的某一数值,这一点应当与上述的参数i、t区分开(参数i存在n个取值,分别为1~n,参数t存在m个取值,分别为1~m);同时,与上文对c_1的描述相类似的:由于各个中间参数之间符合环形取值规则,因而虽然为了便于描述而将中间参数表达为L_1_t~L_n_t、R_1_t~R_n_t,但是L_1_t、R_1_t并非排列在首位,L_n_t、R_n_t也并非排列在末位,实际上应当认为L_1_t与L_n_t之间相邻、R_1_t与R_n_t之间相邻。所以,当c_1=Hash(M,L_n_1,R_n_1,……,L_n_m,R_n_m)时,实质上也符合c_j=Hash(M,L_(j-1)_1,R_(j-1)_1,……,L_(j-1)_m,R_(j-1)_m)。
因此,多层可链接环签名(I_1,…,I_m,c_1,s_1_1,…,s_1_m,…s_n_1…s_n_m)包含密钥镜像组(I_1,……,I_m)、随机数s_i_t(其中,i∈[1,j-1]∪[j+1,n],t∈[1,m])、衍生数值s_j_t和c_1(基于随机数s_i_t、a_t等计算得到)。
针对图5中生成的多层可链接环签名(I_1,…,I_m,c_1,s_1_1,…,s_1_m,…s_n_1…s_n_m),下面结合图6介绍本说明书中一种验证多层可链接环签名的方案,如图6所示,可以包括以下步骤:
步骤602,验证方验证标识ID_k_t对应的资产是否归属于公钥P_k的持有方,k∈[1,n]、t∈[1,m]。
在一实施例中,验证方可以为区块链网络中的区块链节点,该区块链节点在收到签名方提交的交易M后,可以对该交易M的多层可链接环签名进行验证;类似地,每一区块链节点均会收到该交易M,并作为验证方而实施验证。其中,交易M可以由客户端发送至验证方,或者交易M可由某一验证方从客户端收到后转发至其他验证方,或者交易M可由某一验证方从另一验证方处收到后转发至其他验证方。
在一实施例中,验证方维护有每一用户的资产持有情况,可以据此分别验证每一公钥P_k与相应数组中的标识ID_k_t之间的对应关系是否成立,即公钥P_k的持有者是否拥有标识ID_k_t对应的m份资产。如果每一公钥P_k与相应数组中的标识ID_k_t之间的对应关系均成立,可以继续执行后续步骤;如果某一标识对应的资产并不属于相应数组(P_k,ID_k_t)中的公钥P_k的持有方,验证方可以判定多层可链接环签名无效,而无需继续执行后续的步骤604~608。
步骤604,验证方根据s_1_t…s_n_t依次计算L_1_t~L_n_t、R_1_t~R_n_t。
步骤606,验证方根据L_n_t、R_n_t计算c_1’,验证c_1’是否等于c_1。
在一实施例中,验证方可以根据多层可链接环签名所含的随机数和/或其衍生数值,计算中间参数L_j_t、R_j_t、L_i_t、R_i_t,以验证中间参数L_j_t与L_i_t之间是否符合环形取值规则、中间参数R_j_t与R_i_t之间是否符合环形取值规则。
例如,当多层可链接环签名所含的随机数和/或其衍生数值包括:s_1_t~s_n_t、c_1时,中间参数L_j_t与L_i_t之间的环形取值规则可以包括:
L_d_t=(s_d_t×G+c_d×P_d)mod p,d∈[1,n]
中间参数R_j_t与R_i_t之间的环形取值规则包括:
R_d_t=(s_d_t×Hash_G(P_d,ID_d_t)+c_d×I_t)mod p
那么,验证方可以首先根据s_1_t、c_1、G、P_1和p生成L_1_t,以及根据s_1_t、c_1、P_1、ID_1_t、I_t和p生成R_1_t;然后,验证方可以根据M、L_1_t和R_1_t生成c_2,并根据s_2_t、c_2、G、P_2和p生成L_2_t,以及根据s_2_t、c_2、P_2、ID_2_t、I_t和p生成R_2_t;以此类推,直至验证方根据M、L_(n-1)_t和R_(n-1)_t生成c_n,并根据s_n_t、c_n、G、P_n和p生成L_n_t,以及根据s_n_t、c_n、P_n、ID_n_t、I_t和p生成R_n_t。
进一步地,验证方可以按照上述针对c_m的计算公式,计算得到c_1’=Hash(M,L_n_1,R_n_1,……,L_n_m,R_n_m)。之所以此处采用c_1’,是为了区分于多层可链接环签名所含的c_1,那么验证方可以将该c_1’与多层可链接环签名所含的c_1进行比较:如果c_1’与c_1相等,表明上述的环形取值规则被满足,多层可链接环签名确实是由签名方根据私钥x_j与数组集合[(P_1,ID_1_1,……,ID_1_m),……,(P_n,ID_n_1,……,ID_n_m)]所生成,继续执行后续步骤;如果c_1’与c_1不相等,表明上述的环形取值规则未被满足,多层可链接环签名被确认为无效,无需继续执行下述步骤608。
步骤608,验证方验证密钥镜像组(I_1,……,I_m)是否已存在。
在一实施例中,可以参考图4所示的实施例,使得验证方可以将密钥镜像组(I_1,……,I_m)与历史密钥镜像进行比较,从而确定该密钥镜像组(I_1,……,I_m)包含的各个密钥镜像是否已存在,以验证是否存在“双花”问题。如果密钥镜像组(I_1,……,I_m)包含的任一密钥镜像已存在对应的历史密钥镜像,可以判定为存在“双花”问题、密钥镜像组(I_1,……,I_m)被验证为无效;如果密钥镜像组(I_1,……,I_m)包含的所有密钥镜像均不存在对应的历史密钥镜像,可以判定为不存在“双花”问题、密钥镜像组(I_1,……,I_m)被验证为有效。
图7是一示例性实施例提供的一种设备的示意结构图。请参考图7,在硬件层面,该设备包括处理器702、内部总线704、网络接口706、内存708以及非易失性存储器710,当然还可能包括其他业务所需要的硬件。处理器702从非易失性存储器710中读取对应的计算机程序到内存708中然后运行,在逻辑层面上形成区块链中生成多层可链接环签名的装置。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图8,在软件实施方式中,该区块链中生成多层可链接环签名的装置可以包括:
确定单元801,确定签名方数组(P_j,ID_j_1……,ID_j_m),所述签名方数组(P_j,ID_j_1……,ID_j_m)包含签名方的公钥P_j=x_j×G和所述签名方所持的m份待花费资产的唯一标识ID_j_1~ID_j_m,其中G为椭圆曲线的基点,|G|=p且p为素数,x_j为签名方的私钥且0<x_j<p;
第一生成单元802,根据所述签名方的私钥x_j和所述签名方数组(P_j,ID_j_1……,ID_j_m)生成密钥镜像组(I_1,……,I_m);
第二生成单元803,在针对与所述待花费资产相关的交易M生成多层可链接环签名时,将所述密钥镜像组(I_1,……,I_m)添加至所述多层可链接环签名中。
可选的,所述第一生成单元802通过下述公式计算所述密钥镜像组(I_1,……,I_m):
I_t=x_j×Hash_G(P_j,ID_j_t),t∈[1,m];
其中,Hash_G()为所述椭圆曲线到其自身的哈希函数。
可选的,所述第二生成单元803具体用于:
确定签名方数组(P_j,ID_j_1……,ID_j_m)对应的掩护方数组(P_i,ID_i_1,……,ID_i_m),所述掩护方数组(P_i,ID_i_1,……,ID_i_m)包含掩护方i的公钥P_i和所述掩护方i所持m份资产的唯一标识ID_i,i∈[1,j-1]∪[j+1,n];
根据所述签名方的私钥x_j和数组集合[(P_1,ID_1_1,……,ID_1_m),……,(P_n,ID_n_1,……,ID_n_m)],生成所述多层可链接环签名。
可选的,所述第二生成单元803具体用于:
根据所述签名方的私钥x_j和数组集合[(P_1,ID_1_1,……,ID_1_m),……,(P_n,ID_n_1,……,ID_n_m)],分别生成对应于所述签名方的中间参数L_j_t、R_j_t,以及对应于掩护方i的中间参数L_i_t、R_i_t;其中,中间参数L_j_t与L_i_t之间符合环形取值规则、中间参数R_j_t与R_i_t之间符合环形取值规则,且中间参数L_j_t、R_j_t、L_i_t、R_i_t的取值与至少一个被选取的随机数和/或其衍生数值相关;
根据被选取的随机数和/或其衍生数值,生成针对所述交易M的多层可链接环签名。
可选的,
所述第二生成单元803通过下述方式生成对应于所述签名方的中间参数L_j_t、R_j_t:根据所述椭圆曲线所处的数域Z_q中选取的随机数a_t,计算中间参数L_j_t、R_j_t,其中L_j_t=a_t×G、R_j_t=a_t×Hash_G(P_j,ID_j_t),G为所述椭圆曲线的生成元、Hash_G()为从所述椭圆曲线到其自身的哈希函数;
所述第二生成单元803通过下述方式生成对应于掩护方i的中间参数L_i_t、R_i_t:根据中间参数L_j_t、R_j_t的取值,分别生成中间参数L_i_t、R_i_t,使得L_i_t=(s_i_t×G+c_i×P_i)mod p、R_i_t=(s_i_t×Hash_G(P_i,ID_i_t)+c_i×I_t)mod p;其中,s_i_t为数域Z_q中的随机数,当i=1时c_1=Hash(M,L_n_1,R_n_1,……,L_n_m,R_n_m)、当i∈[2,j-1]∪[j+1,n]时c_i=Hash(M,L_(i-1)_1,R_(i-1)_1,……,L_(i-1)_m,R_(i-1)_m),Hash()为从所述椭圆曲线到数域Z_q的哈希函数;
其中,被选取的随机数和/或其衍生数值包括:随机数s_i、衍生数值c_1、衍生数值s_j_t;其中,s_j_t=(a_t-c_j×x_j)mod p,当j的取值被确定为1时c_j=Hash(M,L_n_1,R_n_1,……,L_n_m,R_n_m)、当j的取值被确定为属于[2,n]时c_j=Hash(M,L_(j-1)_1,R_(j-1)_1,……,L_(j-1)_m,R_(j-1)_m)。
可选的,第二生成单元803根据中间参数L_j_t、R_j_t的取值,分别生成中间参数L_i_t、R_i_t,包括:
针对i∈[j+1,n],分别生成中间参数L_i_t、R_i_t,使得L_i_t=(s_i_t×G+c_i×P_i)mod p、R_i_t=(s_i_t×Hash_G(P_i,ID_i_t)+c_i×I_t)mod p,其中s_i_t为数域Z_q中的随机数、c_i=Hash(M,L_(i-1)_1,R_(i-1)_1,……,L_(i-1)_m,R_(i-1)_m);
针对i=1,生成中间参数L_1_t、R_1_t,使得L_1_t=(s_1_t×G+c_1×P_1)modp、R_1_t=(s_1_t×Hash_G(P_1,ID_1_t)+c_1×I_t)mod p,其中s_1_t为数域Z_q中的随机数、c_1=Hash(M,L_n_1,R_n_1,……,L_n_m,R_n_m);
针对i∈[2,j-1],分别生成中间参数L_i_t、R_i_t,使得L_i_t=(s_i_t×G+c_i×P_i)mod p、R_i_t=(s_i_t×Hash_G(P_i,ID_i_t)+c_i×I_t)mod p,其中s_i_t为数域Z_q中的随机数、c_i=Hash(M,L_(i-1)_1,R_(i-1)_1,……,L_(i-1)_m,R_(i-1)_m)。
图9是一示例性实施例提供的一种设备的示意结构图。请参考图9,在硬件层面,该设备包括处理器902、内部总线904、网络接口906、内存908以及非易失性存储器910,当然还可能包括其他业务所需要的硬件。处理器902从非易失性存储器910中读取对应的计算机程序到内存908中然后运行,在逻辑层面上形成区块链中验证多层可链接环签名的装置。当然,除了软件实现方式之外,本说明书一个或多个实施例并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
请参考图10,在软件实施方式中,该区块链中验证多层可链接环签名的装置可以包括:
获取单元1001,获取交易M的多层可链接环签名包含的密钥镜像组(I_1,……,I_m),所述密钥镜像组(I_1,……,I_m)由签名方根据所持有的私钥x_j和签名方数组(P_j,ID_j_1……,ID_j_m)生成,所述签名方数组(P_j,ID_j_1……,ID_j_m)包含所述签名方的公钥P_j=x_j×G和与所述交易M相关的m份待花费资产的唯一标识ID_j_1~ID_j_m,其中G为椭圆曲线的基点,|G|=p且p为素数,0<x_j<p;
第一验证单元1002,根据保存的历史密钥镜像,对所述密钥镜像组(I_1,……,I_m)进行验证,以确定所述多层可链接环签名的有效性。
可选的,所述多层可链接环签名由所述签名方根据私钥x_j和数组集合[(P_1,ID_1_1,……,ID_1_m),……,(P_n,ID_n_1,……,ID_n_m)]生成;其中,所述签名方数组(P_j,ID_j_1……,ID_j_m)对应的掩护方数组(P_i,ID_i_1,……,ID_i_m)包含掩护方i的公钥P_i和所述掩护方i所持m份资产的唯一标识ID_i_1~ID_i_m,i∈[1,j-1]∪[j+1,n];所述装置还包括:
第二验证单元1003,验证标识ID_k_t对应的资产是否归属于公钥P_k的持有方,k∈[1,n]、t∈[1,m]。
可选的,所述多层可链接环签名由所述签名方根据私钥x_j和数组集合[(P_1,ID_1_1,……,ID_1_m),……,(P_n,ID_n_1,……,ID_n_m)]分别生成对应于所述签名方的中间参数L_j_t、R_j_t,以及对应于掩护方i的中间参数L_i_t、R_i_t后,根据与中间参数L_j_t、R_j_t、L_i_t、R_i_t的取值相关的随机数和/或其衍生数值而生成,t∈[1,m];所述装置还包括:
第三验证单元1004,根据所述多层可链接环签名所含的随机数和/或其衍生数值,计算中间参数L_j_t、R_j_t、L_i_t、R_i_t,以验证中间参数L_j_t与L_i_t之间是否符合环形取值规则、中间参数R_j_t与R_i_t之间是否符合环形取值规则。
可选的,
所述多层可链接环签名所含的随机数和/或其衍生数值包括:s_1_t~s_n_t、c_1;
中间参数L_j_t与L_i_t之间的环形取值规则包括:L_d_t=(s_d_t×G+c_d×P_d)mod p,d∈[1,n],当d=1时c_1=Hash(M,L_n_1,R_n_1,……,L_n_m,R_n_m)、当d∈[2,n]时c_d=Hash(M,L_(d-1)_1,R_(d-1)_1,……,L_(d-1)_m,R_(d-1)_m);其中,s_d_t属于所述椭圆曲线所处的数域Z_q,Hash()为从所述椭圆曲线到数域Z_q的哈希函数;
中间参数R_j_t与R_i_t之间的环形取值规则包括:R_d_t=(s_d t×Hash_G(P_d,ID_d_t)+c_d×I_t)mod p,Hash_G()为从所述椭圆曲线到其自身的哈希函数。
上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
在一个典型的配置中,计算机包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带、磁盘存储、量子存储器、基于石墨烯的存储介质或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书一个或多个实施例使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本说明书一个或多个实施例。在本说明书一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本说明书一个或多个实施例可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本说明书一个或多个实施例范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以上所述仅为本说明书一个或多个实施例的较佳实施例而已,并不用以限制本说明书一个或多个实施例,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书一个或多个实施例保护的范围之内。