区块链账户余额的存证、恢复方法及装置
技术领域
本说明书一个或多个实施方式涉及区块链技术领域,尤其涉及一种区块链账户余额的存证、恢复方法及装置。
背景技术
为保护用户的数据隐私,区块链上的账户余额信息可以被加密的隐私状态存储,具体的加密方式可以包括同态加密等,以使区块链账户可以在被加密的隐私状态下进行链上转账交易;各区块链用户可在相应的节点设备或客户端的链下的本地数据库(或称为私有数据库)中保管与自身账户余额相关的加密或解密参数,以方便随时获知自身链上的账户余额对应的明文。
然而,本地化存储的上述账户余额的明文、与账户余额相关的加密或解密参数,易被删除、修改,或在遇到节点设备或客户端系统失效、存储介质损坏时发生丢失,此时,区块链用户将很难获知自身链上的账户余额所对应的明文。
发明内容
有鉴于此,本说明书一个或多个实施方式提供一种区块链账户余额的存证、恢复方法、装置和计算机设备。
为实现上述目的,本说明书一个或多个实施方式提供了一种区块链账户余额的存证方法,所述区块链上存储的用户账户的账户余额均被采用第一加密算法进行了加密处理,所述方法包括:
区块链的节点设备接收区块链用户客户端基于预设的发送周期发送的存证交易;所述存证交易包括当时区块高度和当时恢复参数;其中,所述当时区块高度为所述存证交易构建时刻的区块高度,所述当时恢复参数为所述客户端本地存储的、可对所述区块链用户在所述存证交易的构建时刻的被加密的账户余额的明文进行恢复的多个参数,且所述当时恢复参数的至少部分参数被加密处理;
将所述存证交易发布至所述区块链,以使所述区块链对所述存证交易进行共识处理;
当所述存证交易共识通过,将所述存证交易存储至所述区块链的分布式账本,并将所述当时区块高度和当时恢复参数对应更新在所述区块链用户的状态数据库。
在又一示出的实施方式中,所述存证交易基于所述区块链客户端的存储快照构建,所述存储快照包括所述当时区块高度和当时恢复参数。
在又一示出的实施方式中,所述区块链上存储的用户账户的账户余额均被采用第一加密算法进行了加密处理,包括:所述区块链上存储的用户账户的账户余额被采用第一加密算法、将随机数作为加密因子进行了加密处理;
所述当时恢复参数包括所述构建时刻的被加密的账户余额对应的当时随机数,和所述区块链用户在所述存证交易的构建时刻的被加密的账户余额;其中,所述当时随机数被加密处理。
在又一示出的实施方式中,所述区块链上存储的用户账户的账户余额均被采用第一加密算法进行了加密处理,包括:所述区块链上存储的用户账户的账户余额被采用第一加密算法、将随机数作为加密因子进行了加密处理;
所述当时恢复参数包括所述构建时刻的被加密的账户余额对应的当时随机数,和所述区块链用户在所述存证交易的构建时刻的被加密的账户余额的明文;其中,所述当时随机数、所述构建时刻的被加密的账户余额的明文被加密处理。
在又一示出的实施方式中,所述第一加密算法为同态加密算法,所述当时随机数为所述构建时刻的被加密的账户余额对应的加密随机数;
所述区块链用户相关的转账交易的转账金额也被采用所述同态加密算法、基于转账金额随机数作为加密因子进行了加密,且所述转账金额和所述转账金额随机数被与所述区块链用户的公钥相关的密钥加密。
相应地,本说明书还提供了一种区块链账户余额的恢复方法,所述区块链上存储的用户账户的账户余额均被采用第一加密算法进行了加密处理,所述方法包括:
区块链用户客户端基于预设的发送周期向区块链的节点设备发送存证交易,以使所述存证交易被共识通过后,将所述存证交易包括的当时区块高度和当时恢复参数对应更新在所述区块链账户的状态数据库中;其中,所述当时区块高度为所述客户端同步的区块链在所述存证交易构建时刻的区块高度,所述当时恢复参数为所述客户端本地存储的、可对所述区块链用户在所述存证交易的构建时刻的被加密的账户余额的明文进行恢复的多个参数,且所述当时恢复参数的至少部分参数被加密处理;
获取所述区块链账户的状态数据库中的与所述存证交易最新构建时刻对应的最新当时恢复参数和最新当时区块高度;
解密所述最新当时恢复参数的至少部分参数,并基于解密所得的最新当时恢复参数获得所述最新构建时刻的被加密的账户余额的明文;
基于所述最新构建时刻的被加密的账户余额的明文,从与所述最新当时区块高度之后的区块开始,基于所述区块链上存储的与所述区块链用户相关的转账交易,恢复得到所述区块链用户的当前的账户余额的明文。
在又一示出的实施方式中,所述存证交易基于所述区块链客户端的存储快照构建,所述存储快照包括所述当时区块高度和当时恢复参数。
在又一示出的实施方式中,所述区块链上存储的用户账户的账户余额均被采用第一加密算法进行了加密处理,包括:所述区块链上存储的用户账户的账户余额被采用第一加密算法、将随机数作为加密因子进行了加密处理;
所述当时恢复参数包括所述构建时刻的被加密的账户余额对应的当时随机数,和所述区块链用户在所述存证交易的构建时刻的被加密的账户余额;其中,所述当时随机数被加密处理。
在又一示出的实施方式中,所述区块链上存储的用户账户的账户余额均被采用第一加密算法进行了加密处理,包括:所述区块链上存储的用户账户的账户余额被采用第一加密算法、将随机数作为加密因子进行了加密处理;
所述当时恢复参数包括所述构建时刻的被加密的账户余额对应的当时随机数,和所述区块链用户在所述存证交易的构建时刻的被加密的账户余额的明文;其中,所述当时随机数、所述构建时刻的账户余额的明文被加密处理。
在又一示出的实施方式中,所述第一加密算法为同态加密算法,所述当时随机数为对所述构建时刻的被加密的账户余额同态加密时所使用的随机数;
所述区块链用户相关的转账交易的转账金额也被采用所述同态加密算法、基于转账金额随机数作为加密因子进行了加密,且所述转账金额和所述转账金额随机数被与所述区块链用户的公钥相关的密钥加密;
所述基于所述最新构建时刻的被加密的账户余额的明文,从与所述最新当时区块高度开始,基于所述区块链上存储的与所述区块链用户相关的转账交易,恢复得到所述区块链用户的当前的账户余额的明文,包括:
基于所述最新构建时刻的被加密的账户余额的明文,从与所述最新当时区块高度之后的区块开始,使用与所述区块链用户的私钥相关的密钥逐个解密与所述区块链用户相关的转账交易,以逐个获得所述转账交易的转账金额和转账金额随机数;
基于所述转账交易的转账金额和转账金额随机数,逐个恢复与所述转账交易对应的所述区块链用户的账户余额的明文,直至恢复得到所述区块链用户的当前的账户余额的明文。
相应地,本说明书还提供了一种区块链账户余额的存证装置,所述区块链上存储的用户账户的账户余额均被采用第一加密算法进行了加密处理,所述装置应用于区块链的节点设备,包括:
接收单元,接收区块链用户客户端基于预设的发送周期发送的存证交易;所述存证交易包括当时区块高度和当时恢复参数;其中,所述当时区块高度为所述存证交易构建时刻的区块高度,所述当时恢复参数为所述客户端本地存储的、可对所述区块链用户在所述存证交易的构建时刻的被加密的账户余额的明文进行恢复的多个参数,且所述当时恢复参数的至少部分参数被加密处理;
发布单元,将所述存证交易发布至所述区块链,以使所述区块链对所述存证交易进行共识处理;
存储单元,当所述存证交易共识通过,将所述存证交易存储至所述区块链的分布式账本,并将所述当时区块高度和当时恢复参数对应更新在所述区块链用户的状态数据库。
在又一示出的实施方式中,所述存证交易基于所述区块链客户端的存储快照构建,所述存储快照包括所述当时区块高度和当时恢复参数。
在又一示出的实施方式中,所述区块链上存储的用户账户的账户余额均被采用第一加密算法进行了加密处理,包括:所述区块链上存储的用户账户的账户余额被采用第一加密算法、将随机数作为加密因子进行了加密处理;
所述当时恢复参数包括所述构建时刻的被加密的账户余额对应的当时随机数,和所述区块链用户在所述存证交易的构建时刻的被加密的账户余额;其中,所述当时随机数被加密处理。
在又一示出的实施方式中,所述区块链上存储的用户账户的账户余额均被采用第一加密算法进行了加密处理,包括:所述区块链上存储的用户账户的账户余额被采用第一加密算法、将随机数作为加密因子进行了加密处理;
所述当时恢复参数包括所述构建时刻的被加密的账户余额对应的当时随机数,和所述区块链用户在所述存证交易的构建时刻的被加密的账户余额的明文;其中,所述当时随机数、所述构建时刻的被加密的账户余额的明文被加密处理。
在又一示出的实施方式中,所述第一加密算法为同态加密算法,所述当时随机数为所述构建时刻的被加密的账户余额对应的加密随机数;
所述区块链用户相关的转账交易的转账金额也被采用所述同态加密算法、基于转账金额随机数作为加密因子进行了加密,且所述转账金额和所述转账金额随机数被与所述区块链用户的公钥相关的密钥加密。
相应地,本说明书还提供了一种区块链账户余额的恢复装置,所述区块链上存储的用户账户的账户余额均被采用第一加密算法进行了加密处理,所述装置应用于区块链用户客户端,包括:
发送单元,基于预设的发送周期向区块链的节点设备发送存证交易,以使所述存证交易被共识通过后,将所述存证交易包括的当时区块高度和当时恢复参数对应更新在所述区块链账户的状态数据库中;其中,所述当时区块高度为所述客户端同步的区块链在所述存证交易构建时刻的区块高度,所述当时恢复参数为所述客户端本地存储的、可对所述区块链用户在所述存证交易的构建时刻的被加密的账户余额的明文进行恢复的多个参数,且所述当时恢复参数的至少部分参数被加密处理;
获取单元,获取所述区块链账户的状态数据库中的与所述存证交易最新构建时刻对应的最新当时恢复参数和最新当时区块高度;
解密及恢复单元,解密所述最新当时恢复参数的至少部分参数,并基于解密所得的最新当时恢复参数获得所述最新构建时刻的被加密的账户余额的明文;基于所述最新构建时刻的被加密的账户余额的明文,从与所述最新当时区块高度之后的区块开始,基于所述区块链上存储的与所述区块链用户相关的转账交易,恢复得到所述区块链用户的当前的账户余额的明文。
在又一示出的实施方式中,所述存证交易基于所述区块链客户端的存储快照构建,所述存储快照包括所述当时区块高度和当时恢复参数。
在又一示出的实施方式中,所述区块链上存储的用户账户的账户余额均被采用第一加密算法进行了加密处理,包括:所述区块链上存储的用户账户的账户余额被采用第一加密算法、将随机数作为加密因子进行了加密处理;
所述当时恢复参数包括所述构建时刻的被加密的账户余额对应的当时随机数,和所述区块链用户在所述存证交易的构建时刻的被加密的账户余额;其中,所述当时随机数被加密处理。
在又一示出的实施方式中,所述区块链上存储的用户账户的账户余额均被采用第一加密算法进行了加密处理,包括:所述区块链上存储的用户账户的账户余额被采用第一加密算法、将随机数作为加密因子进行了加密处理;
所述当时恢复参数包括所述构建时刻的被加密的账户余额对应的当时随机数,和所述区块链用户在所述存证交易的构建时刻的被加密的账户余额的明文;其中,所述当时随机数、所述构建时刻的被加密的账户余额的明文被加密处理。
在又一示出的实施方式中,所述第一加密算法为同态加密算法,所述当时随机数为对所述构建时刻的被加密的账户余额同态加密时所使用的随机数;
所述区块链用户相关的转账交易的转账金额也被采用所述同态加密算法、基于转账金额随机数作为加密因子进行了加密,且所述转账金额和所述转账金额随机数被与所述区块链用户的公钥相关的密钥加密;
所述解密和恢复单元,进一步基于所述最新构建时刻的被加密的账户余额的明文,从与所述最新当时区块高度之后的区块开始,使用与所述区块链用户的私钥相关的密钥逐个解密与所述区块链用户相关的转账交易,以逐个获得所述转账交易的转账金额和转账金额随机数;
基于所述转账交易的转账金额和转账金额随机数,逐个恢复与所述转账交易对应的所述区块链用户的账户余额的明文,直至恢复得到所述区块链用户的当前的账户余额的明文。
相应地,本说明书还提供了一种计算机设备,包括:存储器和处理器;所述存储器上存储有可由所述处理器运行的计算机程序;所述处理器运行所述计算机程序时,执行如上述各实施方式所述的、节点设备所执行的区块链账户余额存证方法。
本说明书还提供了一种计算机设备,包括:存储器和处理器;所述存储器上存储有可由所述处理器运行的计算机程序;所述处理器运行所述计算机程序时,执行如上述各实施方式所述的、客户端所执行的区块链账户余额的恢复方法。
本说明书各个实施方式提供的区块链的账户余额存证、恢复方法、装置和计算机设备在本实施方式中,客户端可基于预设的发送周期向所述区块链的节点设备发送存证交易,以使所述存证交易包括的当时区块高度和当时恢复参数对应更新在所述区块链账户的状态数据库中,基于区块链的防篡改机制为上述当时区块高度和当时恢复参数存证;客户端从上述存证交易存证的最新当时区块高度开始,针对上述最新当时区块高度以后的区块上的转账交易,对客户端用户的区块链账户余额的明文在链外进行恢复,直至追上区块链的当前区块高度,获得客户端用户的当前的账户余额的明文;相较于从账户余额初始值和创世区块开始,进行所有区块上与用户相关的转账交易的回访和计算,本实施方式提供的账户余额的恢复方法极大降低了处理时间和计算量。
附图说明
图1是一示例性实施方式提供的区块链的账户余额存证和恢复方法的流程示意图;
图2是一示例性实施方式提供的对被同态加密的区块链账户余额进行存证和恢复方法的流程的示意图;
图3是一示例性实施方式提供的应用于节点设备端的区块链的账户余额存证装置的示意图;
图4是一示例性实施方式提供的应用于客户端的区块链的账户余额恢复装置的示意图;
图5是运行本说明书所提供的账户余额存证或恢复装置实施方式的一种硬件结构图。
具体实施方式
这里将详细地对示例性实施方式进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施方式中所描述的实施方式并不代表与本说明书一个或多个实施方式相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本说明书一个或多个实施方式的一些方面相一致的装置和方法的例子。
需要说明的是:在其他实施方式中并不一定按照本说明书示出和描述的顺序来执行相应方法的步骤。在一些其他实施方式中,其方法所包括的步骤可以比本说明书所描述的更多或更少。此外,本说明书中所描述的单个步骤,在其他实施方式中可能被分解为多个步骤进行描述;而本说明书中所描述的多个步骤,在其他实施方式中也可能被合并为单个步骤进行描述。
本说明书一个或多个实施方式所述的区块链或区块链网络,具体可指一个各节点设备通过共识机制达成的、具有分布式数据存储结构的P2P网络系统,该区块链内的账本数据分布在时间上相连的一个个“区块(block)”之内,后一区块可包含前一区块的数据摘要,且根据具体的共识机制(如POW、POS、DPOS或PBFT等)的不同,达成全部或部分节点的数据全备份。上述区块链内的账本数据可以以交易的格式存储在区块之内。区块链的节点设备或客户端对于物理世界产生的真实数据,可以将其构建成区块链所支持的标准的交易(transaction)格式,然后发布至区块链,由区块链中的节点设备对收到的交易进行共识处理,并在达成共识后,由区块链中作为记账节点的节点设备,将这笔交易打包进区块,在区块链的区块中进行持久化存证。
为了容易地获取到账本数据的当前值,区块链还设置有状态数据库(或称为worldstate)来存储账本数据的当前值,省去了节点设备遍历整个区块链去计算账本数据当前的状态的值,而可以直接从状态数据库中读取。在上述交易被存储至区块链的区块中时,各个节点设备可依据上述交易中的数据,在状态数据库中相应地更新其当前值。
本领域的技术人员熟知,由于区块链网络系统在相应共识机制下运行,已收录至区块链数据库内的数据很难被任意的节点篡改,例如采用Pow共识的区块链,至少需要全网51%算力的攻击才有可能篡改已有数据,因此区块链系统有着其他中心化数据库系统所无法比拟的保证数据安全、防攻击篡改的特性。由此可知,被收录至区块链的分布式数据库中的数据不会被攻击或篡改,而且,即使部分节点设备发生系统故障或存储介质损坏,由于其他节点设备已存储了全局的区块链数据,上述部分节点设备仍可以从其他节点设备处恢复全局的区块链数据,从而保证了存证入区块链的分布式数据库的数据信息的真实可靠性。
区块链网络的示例类型可以包括公有区块链网络、私有区块链网络和联盟区块链网络。尽管术语区块链通常与加密货币网络相关联,但是本文使用的区块链可指代不参考任何特定用例的DLS(分布式账本系统)。
在公有区块链网络中,共识过程由共识网络的节点控制。例如,数百、数千、甚至数百万个实体可以在公有区块链网络中协作,每个实体在公有区块链网络中操作至少一个节点。因此,公有区块链网络可以被认为是相对于参与实体的公有网络。通常,公有区块链网络支持公有交易。公有交易与公有区块链网络内的所有节点共享,并存储在全局区块链中。全局区块链是跨所有节点复制的区块链。也就是说,对于全局区块链,所有节点处于完全一致的状态。为了达成共识(例如,同意向区块链添加块),在公有区块链网络内实施共识协议。示例共识协议包括但不限于,工作量证明(proof-of-work,POW)。
通常,私有区块链网络提供给特定实体,特定实体集中控制读取和写入权限。该实体控制哪些节点能够参与区块链网络。因此,私有区块链网络通常被称为许可网络,其对允许谁参与网络及其参与水平(例如,仅在某些交易中)施加限制。可以使用各种类型的访问控制机制(例如,现有参与者投票添加新实体,监管机构可以控制准入)。
通常,联盟区块链网络在参与实体中是私有的。在联盟区块链网络中,共识过程由授权的一组节点(联盟成员节点)控制,一个或多个节点由相应的实体(例如,企业)操作。例如,由十(10)个实体(例如,企业)组成的联盟可以操作联盟区块链网络,每个实体在该联盟区块链网络中操作至少一个节点。因此,就参与实体而言,联盟区块链网络可以被认为是私有网络。在一些示例中,每个实体(节点)必须对每个块进行签名,以使该块有效并将有效的块添加到区块链。在一些示例中,至少实体(节点)的子集(例如,至少7个实体)必须对每个块进行签名以使该块有效,并且将有效的块添加到区块链。
可以预期,本说明书所提供的实施方式能够在任何合适类型的区块链网络中实现。
区块链的状态数据库(或“world state”)内可为不同的区块链用户设置相应的用户账户,以存储区块链用户的账户余额等状态信息。为保护用户的数据隐私,区块链上的账户余额信息可以被加密的隐私状态存储,具体的加密方式可以包括同态加密等,以使区块链账户可以在被加密的隐私状态下进行链上转账交易;各区块链用户可在相应的节点设备或客户端的链下的本地数据库(或称为私有数据库)中保管与自身账户余额相关的加密或解密参数,以方便随时获知自身链上的账户余额对应的明文。
然而,本地化存储的上述账户余额的明文、与账户余额相关的加密或解密参数,易被删除、修改,或在遇到节点设备或客户端系统失效、存储介质损坏时发生丢失,此时,区块链用户将很难获知自身链上的账户余额所对应的明文。
鉴于以上的问题,本说明书的一个或多个实施方式提供了区块链账户余额的存证和恢复方法,用于区块链用户基于其所在的客户端恢复其账户余额所对应的明文。
值得注意的是,在本说明书提供的一个或多个实施方式中所述的区块链客户端,可以是与区块链的节点设备连接的独立设备端,也可以是集成于节点设备内部的功能化插件,对此不作限定。
在区块链领域,有一个重要的概念就是账户(Account);以以太坊为例,以太坊通常将账户划分为外部账户和合约账户两类;外部账户就是由用户直接控制的账户;而合约账户则是由用户通过外部账户创建的,包含合约代码的账户(即智能合约),本说明书所述的用户账户可以包括上述外部账户或合约账户。
当然,对于一些基于以太坊的架构而衍生出的区块链模型(比如蚂蚁区块链),还可以对区块链支持的账户类型,进行进一步的扩展,在本说明书中不进行特别限定。
对于区块链中的账户而言,通常会通过一个结构体,来维护账户的账户状态。当区块中的交易被执行后,区块链中与该交易相关的账户的状态通常也会发生变化。以以太坊为例,账户的结构体通常包括Balance,Nonce,Code和Storage等字段。其中的Balance字段,用于维护账户目前的账户余额。由于账户余额为涉及用户隐私的信息,一些区块链会采用加密的方式处理区块链上的账户余额。
图1示意了本说明书一示例性实施方式提供的区块链账户余额的存证和恢复方法的流程步骤,上述区块链上存储的用户账户的账户余额均被采用第一加密算法进行了加密处理。
步骤102,区块链客户端基于预设的发送周期向所述区块链的节点设备发送存证交易,所述存证交易包括当时区块高度和当时恢复参数;其中,所述当时区块高度为所述客户端同步的区块链在所述存证交易构建时刻的区块高度,所述当时恢复参数为所述客户端本地存储的、可对所述区块链用户在所述存证交易的构建时刻的被加密的账户余额的明文进行恢复的多个参数,且所述恢复参数的至少部分参数被加密处理。
本说明书所述的“本地存储”是相对于区块链的链上存储(可包括区块账本和状态数据库)而言的链下的私有存储。随着与区块链用户相关的转账交易被不断收录至区块链,区块链用户的被加密账户余额被相应地不断更新在客户端存储的状态数据库中。区块链客户端可在本地存储(链下的私有存储)中保存当时恢复参数,用于恢复上述区块链用户在存证交易构建时刻的区块链上的被加密的账户余额的明文,或解密登陆该客户端的区块链用户在区块链上的被加密的账户余额,以获得对应的明文。
随着区块链上区块高度的增加,区块链状态数据库会发生相应的更新;而且该区块链用户的账户余额可能会随着与其相关的转账交易被收录入区块中而发生更新。区块链客户端至少存储有登陆上述客户端的区块链用户的链上账户信息(该账户信息中包括被加密的账户余额),并随着区块链状态数据库的更新,更新该区块链用户的链上账户信息。客户端基于预设的发送周期向与其连接的节点设备定时发送存证交易,以将存证交易构建时刻的当时区块高度和对被加密的账户余额的明文的当时恢复参数存证到区块链上。
由于在上述存证交易构建时刻,客户端上的区块高度可能与节点设备同步的区块高度有时差,上述当时区块高度和当时恢复参数均是基于客户端上同步的区块链信息而生成的。
在一示出的实施方式中,上述区块链客户端可在存储器中定时到多个预设位置分别读取当时恢复参数所包含的各个参数的内容,基于读取到的当时恢复参数的各个参数构建存证交易。在又一示出的实施方式中,上述当时恢复参数的内容和当时区块高度被区块链客户端存储,客户端可基于预设的发送周期定时获取包括上述当时恢复参数和当时区块高度的存储快照,基于该存储快照构建上述存证交易。
为了防止区块链上其他节点设备获知上述当时恢复参数的明文而恢复或解密该区块链用户的账户余额明文,上述恢复参数的至少部分参数被加密处理。
在又一示出的实施方式中,上述区块链上存储的用户账户的账户余额被采用第一加密算法、将随机数作为加密因子进行了加密处理;当在已知账户余额的密文的前提下,可以基于第一加密算法和随机数逆向计算出账户余额的明文时,上述当时恢复参数可包括存证交易构建时刻的被加密的账户余额对应的当时随机数,和所述区块链用户在所述存证交易的构建时刻的被加密的账户余额;由于基于上述当时随机数和被加密的账户余额可以逆向计算出与被加密的账户余额的明文,为了在区块链上保护用户账户余额的隐私,上述客户端至少应将上述当时随机数进行加密处理。
例如,客户端可基于自身持有的公钥对上述最新当时随机数进行加密,或者,客户端可基于口令密钥对上述最新当时随机数进行加密,具体的加密方式在本实施方式中不作限定。
在又一示出的实施方式中,上述区块链上存储的用户账户的账户余额被采用第一加密算法、将随机数作为加密因子进行了加密处理;当在已知账户余额的密文的前提下,基于第一加密算法和随机数无法逆向计算出账户余额的明文时,上述当时恢复参数可包括存证交易构建时刻的被加密的账户余额对应的当时随机数,和所述区块链用户在所述存证交易的构建时刻的被加密的账户余额对应的明文;为了在区块链上保护用户账户余额的隐私,所述当时随机数、和所述构建时刻的被加密的账户余额的明文均应被加密处理。
本实施方式中并不限定客户端对上述当时恢复参数所包含的当时随机数和账户余额的明文的具体加密方式,而且,上述客户端对上述当时恢复参数所包含的随机数和账户余额的明文可以采用相同的加密方式加密,也可以采用不同的加密方式加密,在此也不作限定。
步骤104,所述区块链的节点设备接收上述存证交易,并将上述存证交易发布至区块链,以使所述区块链对所述存证交易进行共识处理。
其中,区块链中支持的共识算法可以包括:
第一类共识算法,即节点设备需要争夺每一轮的记账周期的记账权的共识算法;例如,工作量证明(Proof of Work, POW)、股权证明(Proof of Stake,POS)、委任权益证明(Delegated Proof of Stake,DPOS)等共识算法;
第二类共识算法,即预先为每一轮记账周期选举记账节点(不需要争夺记账权)的共识算法;例如,实用拜占庭容错(Practical Byzantine Fault Tolerance,PBFT)等共识算法。
在采用第一类共识算法的区块链网络中,争夺记账权的节点设备,都可以在接收到交易后执行该笔交易。争夺记账权的节点设备中可能有一个节点设备在本轮争夺记账权的过程中胜出,成为记账节点。记账节点可以将收到的交易与其它交易一起打包以生成最新区块,并将生成的最新区块或者该最新区块的区块头发送至其它节点设备进行共识。
在采用第二类共识算法的区块链网络中,具有记账权的节点设备在本轮记账前已经商定好。因此,节点设备在接收到交易后,如果自身不是本轮的记账节点,则可以将该交易发送至记账节点。对于本轮的记账节点,在将该交易与其它交易一起打包以生成最新区块的过程中或者之前,可以执行该交易。记账节点在生成最新区块后,可以将该最新区块或者该最新区块的区块头发送至其它节点设备进行共识。
如上所述,无论区块链采用以上示出的哪种共识算法,本轮的记账节点都可以将接收到的交易打包以生成最新区块,并将生成的最新区块或者该最新区块的区块头发送至其它节点设备进行共识验证。如果其它节点设备接收到最新区块或者该最新区块的区块头后,经验证没有问题,可以将该最新区块追加到原有的区块链末尾,从而完成区块链的记账过程。其它节点验证记账节点发来的新的区块或区块头的过程中,也可以执行该区块中的包含的交易。
步骤106,当所述存证交易共识通过,所述节点设备将所述存证交易存储至所述区块链的分布式账本,并将所述当时区块高度和当时恢复参数对应更新在所述区块链用户的状态数据库。
本实施方式并不限定上述当时区块高度和当时恢复参数在区块链的状态数据库的存储位置,例如,可以将区块链用户账户(包括外部账户或合约账户等)的内容进行扩展,以收录上述存证交易构建时刻的当时区块高度和当时恢复参数。
当上述存证交易被共识通过后,可以向上述客户端返回通知消息;而客户端在将上述存证交易发布至区块链后,可以确定是否接收到节点设备返回的该存证交易被共识通过的通知消息,并在收到上述通知消息后,将上述构建时刻的当时区块高度和当时恢复参数对应更新到客户端存储的用户的状态数据库中。
在上述客户端由于可能的原因丢失了本地存储的现在时刻的区块链账户余额的明文,或对现在时刻的账户余额的明文的恢复参数时,用户将无法获知自身区块链账户中的当前的账户余额(Balance)的明文。此时,客户端可基于上述区块链状态数据库中存证的与所述存证交易最新构建时刻对应的最新当时恢复参数和最新当时区块高度,和区块链区块中与该用户相关的转账交易,对区块链上存储的用户账户内的当前的账户余额(Balance)的明文进行恢复。
恢复的具体过程可包括:
步骤108,上述区块链客户端获取所述区块链账户的状态数据库中与所述存证交易最新构建时刻对应的最新当时恢复参数和最新当时区块高度。
上述区块链客户端可同步更新区块链数据库,从更新所得的自身账户的状态数据库中获取上述与所述存证交易最新构建时刻对应的最新当时恢复参数和最新当时区块高度。
步骤110,所述区块链客户端解密所述最新当时恢复参数的至少部分参数,并基于解密所得的最新当时恢复参数获得与所述最新构建时刻的被加密的账户余额的明文。
在一示出的实施方式中,上述区块链上存储的用户账户的账户余额被采用第一加密算法、将随机数作为加密因子进行了加密处理,且在已知账户余额的密文的前提下,可以基于第一加密算法和随机数逆向计算出账户余额的明文,此时上述最新当时恢复参数可包括存证交易最新构建时刻的被加密的账户余额对应的最新当时随机数,和所述区块链用户在所述存证交易的最新构建时刻的被加密的账户余额,上述最新当时随机数被使用客户端已知的算法加密。
例如,客户端可基于自身持有的公钥对上述最新当时随机数进行加密,相应地,应基于自身持有的私钥对从区块链中获取的最新当时随机数进行解密。或者,客户端可基于口令密钥对上述最新当时随机数进行加密,相应地,应基于上述口令密钥对从区块链中获取的最新当时随机数进行解密。
在解密获得上述最新当时随机数后,客户端可基于上述最新当时随机数和所述存证交易的最新构建时刻的被加密的账户余额,逆向计算出与被加密的账户余额对应的、所述存证交易的最新构建时刻的账户余额的明文。
在又一示出的实施方式中,上述区块链上存储的用户账户的账户余额被采用第一加密算法、将随机数作为加密因子进行了加密处理;当在已知账户余额的密文的前提下,基于第一加密算法和随机数无法逆向计算出账户余额的明文时,上述最新当时恢复参数可包括存证交易最新构建时刻的被加密的账户余额对应的最新当时随机数,和所述区块链用户在所述存证交易最新构建时刻的被加密的账户余额对应的明文;为了在区块链上保护用户账户余额的隐私,所述最新当时随机数、和所述最新构建时刻的被加密的账户余额的明文均应被加密处理。客户端可通过解密而获得上述最新当时恢复参数包含的最新当时随机数和与所述最新构建时刻的被加密的账户余额对应的账户余额的明文。
步骤112,基于所述最新构建时刻的被加密的账户余额对应的账户余额的明文,从与所述最新当时区块高度开始,基于所述区块链上存储的与所述区块链用户相关的转账交易,恢复得到所述区块链用户的当前的账户余额的明文。
在本实施方式中,客户端可从上述存证交易存证的最新当时区块高度开始,针对上述最新当时区块高度及其以后的区块上的转账交易,对客户端用户的区块链账户余额的明文在链外进行恢复,直至追上区块链的当前区块高度,获得客户端用户的当前的账户余额的明文;相较于从账户余额初始值和创世区块开始,进行所有区块上与用户相关的转账交易的回访和计算,本实施方式提供的账户余额的恢复方法极大降低了处理时间和计算量。
以下,如图2所示,本说明书以区块链的账户余额被使用同态加密算法加密为例,详细叙述基于上述一个或多个实施方式所述的方法恢复区块链用户的账户余额的步骤。
在本实施方式中,区块链用户A的链上账户余额被使用同态加密算法加密:
PC(X,R) = G^X*H^R
其中,X为余额的明文金额,R为随机数,G和H为同态加密算法的全局公开参数,PC即为同态加密后的余额密文。用户A的客户端本地存储有与其账户余额PC值对应的余额明文X和随机数R。
如图2所示,本实施方式所述的区块链余额的存证和恢复方法包括:
步骤201,用户A客户端基于预设的发送周期向区块链的节点设备发送存证交易,该存证交易包括用户A客户端同步的区块链在上述存证交易构建时刻的当时区块高度h,和所述客户端本地存储的、可对所述区块链用户在所述存证交易的构建时刻的被加密的账户余额的明文进行恢复的多个参数:账户余额的明文X和当时随机数R,且上述X和R均被加密处理。
由于在本实施方式所使用的同态加密算法中,在已知PC和R的前提下,较难逆向计算出X,因此对被加密的账户余额的明文进行恢复的恢复参数,可包含上述X和R值;通过X和R正向加密计算得出PC值,并验证得出的PC值是否与链上的用户账户内的被加密的账户余额相同,可以验证上述明文X是否与链上的用户账户内的被加密的账户余额对应,从而恢复出正确的明文X。
步骤202,上述节点设备将所述存证交易发布至所述区块链,以使所述区块链对所述存证交易进行共识处理;当所述存证交易共识通过,将所述存证交易存储至所述区块链的分布式账本,并将所述当时区块高度h和当时恢复参数(X,R)对应更新在所述区块链用户的状态数据库。
随着上述客户端不断地发送存证交易,该存证交易中的当时区块高度h和当时恢复参数(X,R)不断地被对应更新在所述区块链用户的状态数据库。客户端通过与区块链同步,可将客户端用户的状态数据库内容同步至客户端存储器,并在客户端本地数据库(链下的私有数据库)中存储与区块链上用户账户的被加密的账户余额PC’对应的明文X’和加密随机数R’。某时刻,上述客户端可能发生系统失效或硬件损坏,其本地存储的与区块链上用户账户的被加密的账户余额PC’对应的明文X’和加密随机数R’发生遗失,上述客户端无法得知该用户此时的区块链账户的账户余额X’。
为了恢复得知上述账户余额X’,客户端可执行以下操作步骤:
步骤203,获取所述区块链账户的状态数据库中的与所述存证交易最新构建时刻t0对应的最新当时恢复参数(X0,R0)和最新当时区块高度h0;
步骤204,解密所述最新当时恢复参数中的X0和R0,以获得所述最新构建时刻的被加密的账户余额的明文X0;
步骤205,基于所述最新构建时刻的被加密的账户余额的明文X0,从与所述最新当时区块高度之后的区块开始,基于所述区块链上存储的与所述区块链用户相关的转账交易,恢复得到所述区块链用户的当前的账户余额的明文:
在区块高度为h0的区块被收录后,该区块链用户A的账户余额的明文为X0,且对应的加密随机数为R0,此时:账户余额PC0(X0,R0) = G^X0*H^R0;
逐一遍历区块高度为h0之后的区块内收录的交易,逐一获取与该区块链用户A相关的转账交易:交易1,交易2……交易N。
例如,交易1为用户A向用户B转账x1的转账交易,在该交易中,转账金额x1也被使用相同的同态加密算法、并基于随机数r1作为加密因子进行了加密:PC1(x1,r1)= G^ x1*H^r1;此时,区块内收录的交易1的内容可包括[用户A地址,用户B地址,encypt(x1),encrypt(r1)],其中,x1和r1被使用了与用户A的公钥相关的密钥进行加密。
客户端使用与用户A的私钥相关的密钥分别解密encypt(x1)、encrypt(r1)以获得转账金额x1和转账随机数r1,并基于同态加密算法的同态特性,从而获得交易1后用户A的账户余额的密文PC01,明文X01和随机数R01:
PC01=PC0-PC1;X01=X0-x1;R01=R0-r1。
交易2为用户C向用户A转账x2的转账交易,在该交易中,转账金额x2也被使用相同的同态加密算法、并基于随机数r2作为加密因子进行了加密:PC2(x2,r2)= G^ x2*H^ r2;此时,区块内收录的交易2的内容可包括[用户C地址,用户A地址,encypt(x2),encrypt(r2)],其中,x2和r2被使用了与用户A的公钥相关的密钥进行加密。
客户端使用与用户A的私钥相关的密钥分别解密encypt(x2)、encrypt(r2)以获得转账金额x2和转账随机数r2,并基于同态加密算法的同态特性,从而获得交易2后用户A的账户余额的密文PC12,明文X12和随机数R12:
PC12=PC01+PC2;X12=X01+x2;R12=R01+r2。
……
直至在现在的区块内,获得与用户A相关的转账交易,使用与所述区块链用户的私钥相关的密钥解密与所述用户相关A的转账交易内的被加密的转账金额和转账随机数;从而基于同态加密算法的同态特性,恢复所述区块链用户的当前的账户余额的密文、明文和相应的随机数:PC’、X’和R’。
值得注意的是,当客户端的计算速度不能匹配上述区块链的成块速度时,客户端最终恢复所得的区块链用户的当前的账户余额的X’和R’可能并非是客户端当初遗失的X’和R’,但是基于上述实施方式所提供的账户余额恢复方法,客户端可以恢复出与区块链现在的最高区块匹配的账户余额的明文X’和随机数R’,再基于上述明文X’、随机数R’,和链上不断新收录的转账交易,更新其本地存储的恢复参数。
与上述流程实现对应,本说明书的实施方式还提供了区块链账户余额的存证装置30和区块链账户余额的恢复装置40。装置30和40可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为逻辑意义上的装置,是通过所在设备的CPU(Central Process Unit,中央处理器)将对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,除了图5所示的CPU、内存以及存储器之外,上述装置所在的设备通常还包括用于进行无线信号收发的芯片等其他硬件,和/或用于实现网络通信功能的板卡等其他硬件。
如图3所示,本说明书还提供了一种区块链账户余额的存证装置30,所述区块链上存储的用户账户的账户余额均被采用第一加密算法进行了加密处理,所述装置30应用于区块链的节点设备,包括:
接收单元302,接收区块链用户客户端基于预设的发送周期发送的存证交易;所述存证交易包括当时区块高度和当时恢复参数;其中,所述当时区块高度为所述存证交易构建时刻的区块高度,所述当时恢复参数为所述客户端本地存储的、可对所述区块链用户在所述存证交易的构建时刻的被加密的账户余额的明文进行恢复的多个参数,且所述当时恢复参数的至少部分参数被加密处理;
发布单元304,将所述存证交易发布至所述区块链,以使所述区块链对所述存证交易进行共识处理;
存储单元306,当所述存证交易共识通过,将所述存证交易存储至所述区块链的分布式账本,并将所述当时区块高度和当时恢复参数对应更新在所述区块链用户的状态数据库。
在又一示出的实施方式中,所述存证交易基于所述区块链客户端的存储快照构建,所述存储快照包括所述当时区块高度和当时恢复参数。
在又一示出的实施方式中,所述区块链上存储的用户账户的账户余额均被采用第一加密算法进行了加密处理,包括:所述区块链上存储的用户账户的账户余额被采用第一加密算法、将随机数作为加密因子进行了加密处理;
所述当时恢复参数包括所述构建时刻的被加密的账户余额对应的当时随机数,和所述区块链用户在所述存证交易的构建时刻的被加密的账户余额;其中,所述当时随机数被加密处理。
在又一示出的实施方式中,所述区块链上存储的用户账户的账户余额均被采用第一加密算法进行了加密处理,包括:所述区块链上存储的用户账户的账户余额被采用第一加密算法、将随机数作为加密因子进行了加密处理;
所述当时恢复参数包括所述构建时刻的被加密的账户余额对应的当时随机数,和所述区块链用户在所述存证交易的构建时刻的被加密的账户余额的明文;其中,所述当时随机数、所述构建时刻的被加密的账户余额的明文被加密处理。
在又一示出的实施方式中,所述第一加密算法为同态加密算法,所述当时随机数为所述构建时刻的被加密的账户余额对应的加密随机数;
所述区块链用户相关的转账交易的转账金额也被采用所述同态加密算法、基于转账金额随机数作为加密因子进行了加密,且所述转账金额和所述转账金额随机数被与所述区块链用户的公钥相关的密钥加密。
上述装置30中各个单元的功能和作用的实现过程具体详见上述区块链节点设备所执行的区块链账户余额的存证方法中对应步骤的实现过程,相关之处参见方法实施方式的部分说明即可,在此不再赘述。
如图4所示,本说明书还提供了一种区块链账户余额的恢复装置40,所述区块链上存储的用户账户的账户余额均被采用第一加密算法进行了加密处理,所述装置40应用于区块链用户客户端,包括:
发送单元402,基于预设的发送周期向区块链的节点设备发送存证交易,以使所述存证交易被共识通过后,将所述存证交易包括的当时区块高度和当时恢复参数对应更新在所述区块链账户的状态数据库中;其中,所述当时区块高度为所述客户端同步的区块链在所述存证交易构建时刻的区块高度,所述当时恢复参数为所述客户端本地存储的、可对所述区块链用户在所述存证交易的构建时刻的被加密的账户余额的明文进行恢复的多个参数,且所述当时恢复参数的至少部分参数被加密处理;
获取单元404,获取所述区块链账户的状态数据库中的与所述存证交易最新构建时刻对应的最新当时恢复参数和最新当时区块高度;
解密及恢复单元406,解密所述最新当时恢复参数的至少部分参数,并基于解密所得的最新当时恢复参数获得所述最新构建时刻的被加密的账户余额的明文;基于所述最新构建时刻的被加密的账户余额的明文,从与所述最新当时区块高度之后的区块开始,基于所述区块链上存储的与所述区块链用户相关的转账交易,恢复得到所述区块链用户的当前的账户余额的明文。
在又一示出的实施方式中,所述存证交易基于所述区块链客户端的存储快照构建,所述存储快照包括所述当时区块高度和当时恢复参数。
在又一示出的实施方式中,所述区块链上存储的用户账户的账户余额均被采用第一加密算法进行了加密处理,包括:所述区块链上存储的用户账户的账户余额被采用第一加密算法、将随机数作为加密因子进行了加密处理;
所述当时恢复参数包括所述构建时刻的被加密的账户余额对应的当时随机数,和所述区块链用户在所述存证交易的构建时刻的被加密的账户余额;其中,所述当时随机数被加密处理。
在又一示出的实施方式中,所述区块链上存储的用户账户的账户余额均被采用第一加密算法进行了加密处理,包括:所述区块链上存储的用户账户的账户余额被采用第一加密算法、将随机数作为加密因子进行了加密处理;
所述当时恢复参数包括所述构建时刻的被加密的账户余额对应的当时随机数,和所述区块链用户在所述存证交易的构建时刻的被加密的账户余额的明文;其中,所述当时随机数、所述构建时刻的被加密的账户余额的明文被加密处理。
在又一示出的实施方式中,所述第一加密算法为同态加密算法,所述当时随机数为对所述构建时刻的被加密的账户余额同态加密时所使用的随机数;
所述区块链用户相关的转账交易的转账金额也被采用所述同态加密算法、基于转账金额随机数作为加密因子进行了加密,且所述转账金额和所述转账金额随机数被与所述区块链用户的公钥相关的密钥加密;
所述解密和恢复单元,进一步基于所述最新构建时刻的被加密的账户余额的明文,从与所述最新当时区块高度之后的区块开始,使用与所述区块链用户的私钥相关的密钥逐个解密与所述区块链用户相关的转账交易,以逐个获得所述转账交易的转账金额和转账金额随机数;
基于所述转账交易的转账金额和转账金额随机数,逐个恢复与所述转账交易对应的所述区块链用户的账户余额的明文,直至恢复得到所述区块链用户的当前的账户余额的明文。
上述装置40中各个单元的功能和作用的实现过程具体详见上述区块链客户端所执行的区块链账户余额的恢复方法中对应步骤的实现过程,相关之处参见方法实施方式的部分说明即可,在此不再赘述。
以上所描述的装置实施方式仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部单元或模块来实现本说明书方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
上述实施方式阐明的装置、单元、模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
与上述方法实施方式相对应,本说明书的实施方式还提供了一种计算机设备,如图5所示,该计算机设备包括存储器和处理器。其中,存储器上存储有能够由处理器运行的计算机程序;处理器在运行存储的计算机程序时,执行本说明书实施方式中节点设备所执行的区块链账户余额的存证方法的各个步骤。对上述节点设备所执行的区块链账户余额的存证方法的各个步骤的详细描述请参见之前的内容,不再重复。
与上述方法实施方式相对应,本说明书的实施方式还提供了一种计算机设备,如图5所示,该计算机设备包括存储器和处理器。其中,存储器上存储有能够由处理器运行的计算机程序;处理器在运行存储的计算机程序时,执行本说明书实施方式中上述区块链客户端所执行的区块链账户余额的恢复方法的各个步骤。对上述区块链客户端所执行的区块链账户余额的恢复方法的各个步骤的详细描述请参见之前的内容,不再重复。
以上所述仅为本说明书的较佳实施方式而已,并不用以限制本说明书,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本说明书保护的范围之内。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。
计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书的实施方式可提供为方法、系统或计算机程序产品。因此,本说明书的实施方式可采用完全硬件实施方式、完全软件实施方式或结合软件和硬件方面的实施方式的形式。而且,本说明书的实施方式可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。