一种区块链交易数据的隐私保护方法及区块链系统
技术领域
本发明涉及区块链技术领域,特别是涉及一种区块链交易数据的隐私保护方法及区块链系统。
背景技术
区块链(Blockchain)是一个由不同节点共同参与的分布式数据库系统,是开放式的账簿系统(ledger);它是由一串按照密码学方法产生的数据块或数据包组成,即区块(block),对每一个区块数据信息都自动加盖时间戳,从而计算出一个数据加密数值,即哈希值(hash)。每一个区块都包含上一个区块的哈希值,从创始区块(genesis block)开始链接(chain)到当前区域,从而形成区块链。在区块链的世界中,世界各地的节点们共同参与了这个网络的记账。例如:比特币通过工作量证明机制,矿工对打包生成的区块求解哈希谜题,并将结果提交至网络,等待其他节点验证并确认区块。节点们通过公钥来表示他们的身份,而通过私钥行使自己转账的权利。
无论在比特币,还是以太坊,以及后来出现的各种各样的公链中,所有的交易数据都是以明文方式公开在区块链上的。虽然仅仅通过公钥无法判断一个人的身份,但是交易数据的公开,使得账户追踪具有了一定可行性,从而也无法保护账户的交易行为隐私。
目前,区块链的隐私保护通常引入第三方可信机构,由于第三方可信机构掌握了整个账本的私钥,使得区块链失去了去中心化的特性。如果机构私钥丢失或泄露,则整个区块链将永远瘫痪。如果用户不知道余额的情况下必须机构申请查询,极大地增加了用户使用成本。
发明内容
本发明实施例旨在提供一种区块链交易数据的隐私保护方法及区块链系统,通过隐藏交易金额的方式,其解决了目前区块链的隐私保护依赖第三方可信机构的技术问题,保护了用户交易数据隐私。
为解决上述技术问题,本发明实施例提供以下技术方案:
第一方面,本发明实施例提供一种区块链交易数据的隐私保护方法,应用于区块链系统,所述区块链系统包括普通节点、矿工节点以及验证节点,所述方法包括:
步骤S1,分别根据交易的发送者A的私钥SA关联生成附属密钥对(PAh,SAh),以及根据接收者B的私钥SB关联生成附属密钥对(PBh,SBh);
步骤S2,发送者A向接收者B发送转账意向,所述转账意向包括:A账户余额、交易金额、发送者A使用私钥SA对转账意向的签名以及发送者A的附属公钥PAh;
步骤S3,接收者B接收所述转账意向,并向矿工节点发送交易信息,所述交易信息包括:发送者A发送的转账意向、B账户余额、接收者B使用私钥SB对交易的签名以及接收者B的附属公钥PBh;
步骤S4,矿工节点接收到所述交易信息后,通过所述发送者A的附属公钥PAh分别对A账户余额和交易金额进行加密,以及,通过所述接收者B的附属公钥PBh分别对B账户余额和交易金额进行加密,并对所述交易信息进行验证后,将所述交易信息加入到区块中;
步骤S5,验证节点对所述区块进行验证,验证成功后将所述交易信息写入区块链;
步骤S6,普通节点接收所述区块,并更新自身的状态树。
在一些实施例中,所述步骤S1,分别根据交易的发送者A的私钥SA关联生成附属密钥对(PAh,SAh),以及根据接收者B的私钥SB关联生成附属密钥对(PBh,SBh),具体包括:
对所述发送者A的私钥SA关联生成所述发送者A的具有加法同态加密属性的附属密钥对(PAh,SAh),以及对所述接收者B的私钥SB关联生成所述接收者B的具有加法同态加密属性的附属密钥对(PBh,SBh)。
在一些实施例中,所述步骤S2中所述的发送者A向接收者B发送转账意向,还包括:
在状态树中新建一个账户C;
由发送者A将需要发送给接收者B的转账意向中的交易金额发送到所述账户C,并由账户C将其全部余额发送到接收者B的账户。
在一些实施例中,所述步骤S4中所述的对所述交易信息进行验证,具体包括:
判断发送者A的附属公钥PAh对A账户余额进行加密后的密文与状态树中A账户的余额密文是否一致,以及接收者B的附属公钥PBh对B账户余额进行加密后的密文与状态树中B账户的余额密文是否一致;
判断交易金额是否为正,并且交易金额是否不大于A账户余额;
通过发送者A的公钥PA验证发送者A使用私钥SA对转账意向的签名,以及,通过接收者B的公钥PB验证接收者B使用私钥SB对交易的签名。
在一些实施例中,所述步骤S4中所述的将所述交易信息加入到区块中,具体包括:
将发送者A的附属公钥PAh对交易金额进行加密后的密文以及接收者B的附属公钥PBh对交易金额进行加密后的密文,作为交易信息加入到区块中。
在一些实施例中,所述步骤S5中所述的验证节点对所述区块进行验证,具体包括:
验证所述区块中的所有交易的合法性,以及,
对所述矿工节点的工作量证明进行验证。
在一些实施例中,所述步骤S5中所述的普通节点接收所述区块之前,所述方法还包括:
根据拜占庭容错协议,验证所述区块中验证节点的签名数量是否超过阈值,若是,则接收所述区块。
在一些实施例中,所述步骤S6中所述的普通节点接收所述区块,并更新自身的状态树,具体包括:
通过发送者A的附属公钥PAh对交易金额进行加密后的密文,对A账户余额进行同态加法,更新A账户余额;
通过接收者B的附属公钥PBh对交易金额进行加密后的密文,对B账户余额进行同态加法,更新B账户余额。
在一些实施例中,所述区块链系统中的用户通过自身的公钥作为身份的唯一标识,并且,所述区块链系统为每一用户的私钥关联生成附属密钥对,每一所述附属密钥对均包括附属公钥以及附属私钥,所述附属私钥用于解密其对应的附属公钥加密后的密文。
第二方面,本发明实施例提供一种区块链系统,应用上述的区块链交易数据的隐私保护方法,所述区块链系统包括:普通节点、矿工节点以及验证节点,其中,所述区块链系统为每一节点的私钥关联生成附属密钥对。
本发明实施例的有益效果是:区别于现有技术的情况下,本发明实施例提供的一种区块链交易数据的隐私保护方法,应用于区块链系统,所述区块链系统包括普通节点、矿工节点以及验证节点,所述方法包括:步骤S1,分别根据交易的发送者A的私钥SA关联生成附属密钥对(PAh,SAh),以及根据接收者B的私钥SB关联生成附属密钥对(PBh,SBh);步骤S2,发送者A向接收者B发送转账意向,所述转账意向包括:A账户余额、交易金额、发送者A使用私钥SA对转账意向的签名以及发送者A的附属公钥PAh;步骤S3,接收者B接收所述转账意向,并向矿工节点发送交易信息,所述交易信息包括:发送者A发送的转账意向、B账户余额、接收者B使用私钥SB对交易的签名以及接收者B的附属公钥PBh;步骤S4,矿工节点接收到所述交易信息后,通过所述发送者A的附属公钥PAh分别对A账户余额和交易金额进行加密,以及,通过所述接收者B的附属公钥PBh分别对B账户余额和交易金额进行加密,并对所述交易信息进行验证后,将所述交易信息加入到区块中;步骤S5,验证节点对所述区块进行验证,验证成功后将所述交易信息写入区块链;步骤S6,普通节点接收所述区块,并更新自身的状态树。通过上述方式,本发明实施例能够解决目前区块链的隐私保护依赖第三方可信机构的技术问题,保护了用户交易数据隐私。
附图说明
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1是本发明实施例提供的一种区块链系统的架构示意图;
图2是本发明实施例提供的一种区块链交易数据的隐私保护方法的流程示意图;
图3是本发明实施例提供的一种生成附属密钥对的示意图;
图4是本发明实施例提供的一种交易的流程示意图;
图5是本发明实施例提供的现有PBFT算法的工作流程示意图;
图6是本发明实施例提供的状态树的更新流程示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
区块链系统具有去中心化特点,其不同于传统中心化服务器,由于区块链系统没有中心化节点,其需要共识机制维持正常运作,例如,共识机制包括工作量证明算法(Proofof Work,POW),即POW算法,基于POW算法,区块链系统能够实现区块的共识验证。
POW算法是一种应对拒绝服务攻击和其他服务滥用的一种策略,一个工作量证明是指满足特定条件的一个数据计算,其产生正确结果比较困难,但是验证正确结果比较简单。正确结果的产生只能通过不断的枚举随机数来进行验证试错,从而最终找到正确答案。其中,该验证试错是采用哈希(hash)算法来实现。哈希算法是一种单向散列算法,计算出哈希值的过程比较简单,但是要获得符合要求的哈希值,则只能通过枚举试错来进行。
在一些虚拟加密货币系统中,在进行随机散列运算时,POW算法引入了对某一个特定值的扫描工作,比方说,在SHA-256下,随机散列值以一个或多个0开始,随着0的数量逐步增加,遍历出与此情况下的随机散列值对应的解所需要的工作量将呈指数增长,而对结果进行检验则仅需要一次随机散列运算。
一些虚拟加密货币系统的区块中增补了一个随机数(Nonce),该随机数需要满足使得给定区块的哈希值出现所需的规定数量个0的条件。由于哈希运算的不可逆特性,只能通过反复尝试以遍历出满足条件的随机数。
只要区块链节点遍历出满足条件的随机数,该区块链节点就完成了工作量的证明,从而获得了区块的打包记账权。
在区块链的世界中,世界各地的节点们共同参与了区块链网络的记账。例如比特币通过工作量证明机制,矿工对打包生成的区块求解哈希谜题,并将结果提交至网络,等待其他节点验证并确认区块。节点们通过公钥来表示他们的身份,而通过私钥行使自己转账的权利。
无论在比特币,还是以太坊,以及后来出现的各种各样的公链中,所有的交易数据都是以明文方式公开在区块链上的。虽然仅仅通过公钥无法判断一个人的身份,但是交易数据的公开,使得账户追踪具有了一定可行性,从而也无法保护账户的交易行为隐私。
在ChainStack区块链的设计中,采用了独创的确定性POW的共识机制,在这个共识机制中,有矿工和验证者两种角色。矿工需要进行哈希计算求解数学难题,验证者们则通过实用拜占庭容错共识算法对矿工的区块进行验证,并最终提交至网络中。其他的节点们接受区块只需要对验证者的签名进行验证便可以接受一个区块,且这样的接受是确定性的,而不是像比特币这样概率性的确认。
在ChainStack区块链中,本发明引入了一种区块链交易数据的隐私保护办法,使得在区块链上以密文的方式保存用户的交易数据。
请参阅图1,图1是本发明实施例提供的一种区块链系统的架构示意图;如图1所示,该区块链系统100包括:普通节点11、矿工节点12及验证节点13三种区块链节点。其中,所述区块链系统中的全部区块链节点均具有普通节点的功能,即全部的区块链节点均可以成为交易的发送者,也可以成为交易的接收者。
普通节点11、矿工节点12及验证节点13中任意两个节点之间支持点对点通讯(Point to point communication,P2P),并且,普通节点11、矿工节点12及验证节点13皆可以作为区块链系统中的区块链节点,各自在区块链系统中承担不同的责任,共同维护区块链系统的工作、稳定及安全。
普通节点11持有流通的电子货币,在区块链系统中拥有投票选举的权利。普通节点11可以进行相关交易操作,但是没有区块的打包记账权。普通节点11只能从拥有打包记账权的相关节点处同步记录区块数据。所述普通节点11可以是交易的发送者,也可以是交易的接收者。
矿工节点12负责计算哈希难题,查找出区块。其中,该区块为基于满足预设条件的随机数生成的区块。在一些实施例中,区块由矿工节点12采用工作量证明算法(Proof ofWork,POW)生成的,亦即,基于区块的随机数计算出的待验证哈希值是小于目标哈希值的。其中,所述矿工节点12由普通节点11开启挖矿模式转化而来。
验证节点13用于共识验证区块,并将验证通过的区块记录到区块链上。其中,所述验证节点13由普通节点11提交注册申请,并经过投票当选之后产生。
可以理解的是,上述普通节点11、矿工节点12及验证节点13可以是一个物理服务器或者多个物理服务器虚拟而成的一个逻辑服务器。服务器也可以是多个可互联通信的服务器组成的服务器群,且各个功能模块可分别分布在服务器群中的各个服务器上。
请参阅图2,图2是本发明实施例提供的一种区块链交易数据的隐私保护方法的流程示意图;
如图2所示,该区块链交易数据的隐私保护方法,应用于区块链系统,所述区块链系统包括普通节点、矿工节点以及验证节点,所述方法包括:
步骤S1:分别根据交易的发送者A的私钥SA关联生成附属密钥对(PAh,SAh),以及根据接收者B的私钥SB关联生成附属密钥对(PBh,SBh);
具体的,所述区块链系统中的全部区块链节点通过椭圆曲线加密算法生成密钥对,所述密钥对包括公钥和私钥,其中,所述区块链系统中的全部节点或全部用户通过自身的公钥作为身份的唯一标识,并通过自身的私钥对交易进行签名,而区块链系统中的其他节点或用户则通过使用用户的公钥对其签名进行验证。
在本发明实施例中,所述区块链系统为所述区块链系统中的全部区块链节点(包括普通节点、矿工节点以及验证节点)的私钥关联生成附属密钥对,每一所述附属密钥对均包括附属公钥以及附属私钥,所述附属公钥用于加密账户余额和交易金额,所述附属私钥用于解密其对应的附属公钥加密后的密文,以生成密文对应的明文。
请再参阅图3,图3是本发明实施例提供的一种生成附属密钥对的示意图;
如图3所示,区块链系统中的所有区块链节点的私钥通过加法同态算法生成附属密钥对,而私钥用于某一节点或用户对转账意向进行签名,区块链系统中的其余节点或用户通过该节点或用户对应的公钥对所述签名进行验证。
具体的,所述步骤S1,分别根据交易的发送者A的私钥SA关联生成附属密钥对(PAh,SAh),以及根据接收者B的私钥SB关联生成附属密钥对(PBh,SBh),具体包括:
对所述发送者A的私钥SA关联生成所述发送者A的具有加法同态加密属性的附属密钥对(PAh,SAh),以及对所述接收者B的私钥SB关联生成所述接收者B的具有加法同态加密属性的附属密钥对(PBh,SBh),使得所述发送者A的附属密钥对(PAh,SAh)以及接收者B的附属密钥对(PBh,SBh)满足加法同态特性,即满足PAh(X+Y)=PAh(X)+PAh(Y)以及PBh(X+Y)=PBh(X)+PBh(Y)。在本发明实施例中,通过Pailliers算法生成Pailliers密钥对,所述Pailliers密钥对具有加法同态性,即满足对于任意明文X1和X2,PAh(X1+X2)=PAh(X1)+PAh(X2)以及PBh(X1+X2)=PBh(X1)+PBh(X2)。其中,所述发送者A的附属公钥PAh用于矿工节点对A账户余额和交易金额进行加密;所述接收者B的附属公钥PBh用于矿工节点对B账户余额和交易金额进行加密。
具体的,所述基于加法同态算法,对所述发送者A的私钥SA关联生成所述发送者A的附属密钥对(PAh,SAh)以及对所述接收者B的私钥SB关联生成所述接收者B的附属密钥对(PBh,SBh),具体包括:
对所述发送者A的私钥SA进行哈希,以生成第一种子,通过所述第一种子生成所述发送者A的附属密钥对(PAh,SAh);对所述接收者B的私钥SA进行哈希,以生成第二种子,通过所述第二种子生成所述接收者B的附属密钥对(PBh,SBh)。由于Pailliers密钥对的生成依赖于大素数,通过种子生成唯一的大素数,从而实现随机生成附属密钥对,由于随机性的存在,通过种子的方式生成附属密钥对,并不会泄露私钥的任何信息,从而保证了发送者和接收者的隐私安全。
步骤S2:发送者A向接收者B发送转账意向,所述转账意向包括:A账户余额、交易金额、发送者A使用私钥SA对转账意向的签名以及发送者A的附属公钥PAh;
具体的,由于在发送者A向接收者B发送的转账意向中包含A账户余额以及交易金额,当发送者A不希望接收者B知晓其账户余额时,为了进一步保证发送者A的隐私安全,因此所述步骤S2中所述的发送者A向接收者B发送转账意向,具体包括:
在状态树中新建一个账户C,由发送者A将需要发送给接收者B的转账意向中的交易金额发送到所述账户C,并由账户C将其全部余额发送到接收者B的账户。其中,所述账户C为临时账户,所述账户C为状态树中临时生成的账户,所述账户C用于将转账意向中的交易金额转发到接收者B,由于经过临时账户C的转发,接收者B并不会知晓发送者A的账户余额,从而保证了发送者A的隐私信息不被泄露。其中,所述账户C在接收到所述发送者A发送的转账意向中的交易金额后,所述账户C的账户余额将从0变为交易金额,可以理解的是,在交易完成后,所述账户C将被清零,并且,此时所述账户C可以从状态树中删除,从而清除状态树的冗余数据。
其中,发送者A通过自身的公钥PA作为身份的唯一标识,并通过自身的私钥SA对所述转账意向进行签名。
步骤S3:接收者B接收所述转账意向,并向矿工节点发送交易信息,所述交易信息包括:发送者A发送的转账意向、B账户余额、接收者B使用私钥SB对交易的签名以及接收者B的附属公钥PBh;
具体的,所述接收者B接收发送者A发送的转账意向,或者,所述接收者B接收临时账户C发送的转账意向,并向矿工节点发送交易信息,其中,所述矿工节点由普通节点进入挖矿模式后产生,所述矿工节点用于接收所述接收者B发送的交易信息。
请再参阅图4,图4是本发明实施例提供的一种交易的流程示意图;
如图4所示,发送者A向接收者B发送转账意向,所述转账意向包括:A账户余额、交易金额、发送者A使用私钥SA对转账意向的签名以及发送者A的附属公钥PAh,例如:A的账户余额是20元、A想向B转账5元、这是A的签名、A的附属公钥是X;
其中,所述接收者B接收到所述发送者A发送的转账意向后,将所述发送者A发送的转账意向以及自身的信息打包成交易信息,发送到矿工节点,其中,所述交易信息包括:发送者A发送的转账意向、B账户余额、接收者B使用私钥SB对交易的签名以及接收者B的附属公钥PBh,例如:所述发送者A发送的转账意向为:A的账户余额是20元、A想向B转账5元、这是A的签名、A的附属公钥是X,所述B账户信息为:B的账户余额是8元、这是B的签名、B的附属公钥是Y。
步骤S4:矿工节点接收到所述交易信息后,通过所述发送者A的附属公钥PAh分别对A账户余额和交易金额进行加密,以及,通过所述接收者B的附属公钥PBh分别对B账户余额和交易金额进行加密,并对所述交易信息进行验证后,将所述交易信息加入到区块中;
其中,区块链是由一个个区块组成的链式结构,而每个区块则是由区块头和区块体两部分组成。区块体的最主要的组成元素就是交易,矿工节点会将网络中的许许多多的交易打包并写入到区块体中,然后将区块体的交易通过某种方式串联组成的哈希值写入到区块头中。
具体的,所述矿工节点接收到所述交易信息后,通过所述交易信息中的发送者A的附属公钥PAh对A账户余额和交易金额进行加密,分别生成A账户余额的密文以及交易金额的密文,以及,通过所述交易信息中的接收者B的附属公钥PBh对B账户金额和交易金额进行加密,分别生成B账户余额的密文以及交易金额的密文,需要说明的是,所述A账户余额以及B账户余额分别为A账户和B账户的当前余额,即交易尚未完成之前的账户余额,所述发送者A发送的转账意向中的交易金额则分别被发送者A的附属公钥PAh以及接收者B的附属公钥PBh进行加密。
具体的,所述步骤S4中所述的将所述交易信息加入到区块中,具体包括:
将发送者A的附属公钥PAh对交易金额进行加密后的密文以及接收者B的附属公钥PBh对交易金额进行加密后的密文,作为交易信息加入到区块的区块体中。具体的,所述矿工节点通过所述发送者A的附属公钥PAh对交易金额进行加密后,生成交易金额对应的密文,并且,所述矿工节点通过所述接收者B的附属公钥PBh对交易金额进行加密后,生成交易金额对应的密文,相当于所述交易金额被加密了两次,两者的区别在于,分别是通过发送者A的附属公钥PAh以及接收者B的附属公钥PBh进行加密,而原因在于:状态树对A的账户余额进行变动的时候需要使用经过A的附属公钥PAh加密后的密文进行同态加法,而状态树对B的账户余额进行变动的时候需要使用经过B的附属公钥PBh加密后的密文进行同态加法。
具体的,所述矿工节点对所述交易信息进行验证,具体包括:
判断发送者A的附属公钥PAh对A账户余额进行加密后的密文与状态树中A账户的余额密文是否一致,以及接收者B的附属公钥PBh对B账户余额进行加密后的密文与状态树中B账户的余额密文是否一致;
判断交易金额是否为正,并且交易金额是否不大于A账户余额;
通过发送者A的公钥PA验证发送者A使用私钥SA对转账意向的签名,以及,通过接收者B的公钥PB验证接收者B使用私钥SB对交易的签名。
具体的,通过判断发送者A的附属公钥PAh对A账户余额进行加密后的密文与状态树中A账户的余额密文是否一致,由于状态树中A账户的账户余额以密文的形式进行保存,其加密方式同样是通过发送者A的附属公钥进行加密,因此通过判断发送者A的附属公钥PAh对A账户余额进行加密后的密文与状态树中A账户的余额密文是否一致,能够验证A账户的当前余额,若不一致,则矿工对该交易的验证失败,则矿工不将该交易写入到区块中;
同理,通过判断接收者B的附属公钥PBh对B账户余额进行加密后的密文与状态树中B账户的余额密文是否一致,由于状态树中B账户的账户余额以密文的形式进行保存,其加密方式同样是通过接收者B的附属公钥进行加密,因此通过判断接收者B的附属公钥PBh对B账户余额进行加密后的密文与状态树中B账户的余额密文是否一致,能够验证B账户的当前余额,若不一致,则矿工对该交易的验证失败,则矿工不将该交易写入到区块中;
通过判断交易金额是否为正,并且交易金额是否不大于A账户余额,确定所述交易是否为合理交易,若所述交易金额不为正,或者,所述交易金额大于所述A账户余额,则确定所述交易为不正常交易,则验证失败,所述矿工节点不将所述交易写入区块上;
通过发送者A的公钥PA验证发送者A使用私钥SA对转账意向的签名,以及,通过接收者B的公钥PB验证接收者B使用私钥SB对交易的签名,从而能够确定交易是由发送者A本人发出,以及,确定交易是由接收者B接收,若通过发送者A的公钥PA验证发送者A使用私钥SA对转账意向的签名失败,或者,通过接收者B的公钥PB验证接收者B使用私钥SB对交易的签名失败,则确定转账对象异常,此时验证失败,矿工节点不将所述交易写入所述区块上。
矿工节点在接收到交易后,通过多重验证,例如:判断发送者A的附属公钥PAh对A账户余额进行加密后的密文与状态树中A账户的余额密文是否一致,以及接收者B的附属公钥PBh对B账户余额进行加密后的密文与状态树中B账户的余额密文是否一致;判断交易金额是否为正,并且交易金额是否不大于A账户余额;通过发送者A的公钥PA验证发送者A使用私钥SA对转账意向的签名,以及,通过接收者B的公钥PB验证接收者B使用私钥SB对交易的签名,若出现任意一个验证步骤发生验证失败的情况,则所述矿工节点放弃将所述交易写入区块上,若全部的验证步骤均正确,则将该交易加入到区块上,从而保证交易的有效性。
在本发明实施例中,所述将该交易加入到区块中,具体包括:所述矿工节点将所述交易加入到所述区块的区块体中,并与其他验证合格的交易一起打包,具体的,所述矿工节点在接收到交易后,还将所述交易与更多的其他交易共同打包入同一个区块,并对所述区块执行工作量证明的哈希证明,所述矿工节点在求解出哈希谜题之后将所述区块传送给验证节点进行验证。其中,所述矿工节点加入到所述区块体中的交易不包括所述发送者A和接收者B的附属公钥,而是将所述发送者A的附属公钥PAh对交易金额进行加密后的密文以及接收者B的附属公钥PBh对交易金额进行加密后的密文存储到所述区块体中,从而保证区块链中的所有交易金额均为密文形式,保证节点或用户的信息安全。
可以理解的是,所述发送者A的附属公钥PAh对A账户余额进行加密后的密文以及接收者B的附属公钥PBh对B账户余额进行加密后的密文不会保存在区块中,而是保存在区块链节点的状态树中,并根据区块中的交易的不断累加而不断更新,从而保证区块链系统的稳定运行。
步骤S5:验证节点对所述区块进行验证,验证成功后将所述交易信息写入区块链;
具体的,所述矿工节点将交易写入到区块后,将所述区块提交给验证节点进行验证,所述验证节点共识验证区块,并将验证成功的区块记录到区块链上。
具体的,所述的验证节点对所述区块进行验证,具体包括:
验证所述区块中的所有交易的合法性,以及,对所述矿工节点提交的工作量证明进行验证。
具体的,所述验证所述区块中的所有交易的合法性,包括:
检查所有交易的签名,所述签名包括:发送者的签名以及接收者的签名,并且,检查所述区块的合法性,默克尔根是否正确。
具体的,所述对所述矿工节点提交的工作量证明进行验证,包括:根据拜占庭容错算法,共识验证区块。
其中,所述验证节点通过确定性工作量证明算法(Deterministic Proof ofWork,DPoW)对所述矿工节点生成的区块进行验证,DPoW由工作量证明算法(Proof ofWork,POW)和实用拜占庭容错算法(Practical Byzantine Fault Tolerance,PBFT)两个阶段组成,结合了两者的安全性。POW保证了矿工不可能不付出计算能力就生成合法区块,PBFT则保证了网络处理结果的一致性,矿工节点生成的区块最终要经过验证节点PBFT共识的检验才能被区块链网络接受。
其中,实用拜占庭容错算法(Practical Byzantine Fault Tolerance,PBFT)是一种状态机副本复制算法,即服务作为状态机进行建模,状态机在分布式系统的不同节点进行副本复制。每个状态机的副本都保存了服务的状态,同时也实现了服务的操作。将所有的副本组成的集合使用大写字母R表示,使用0到|R|-1的整数表示每一个副本。为了描述方便,假设|R|=3f+1,这里f是有可能失效的副本的最大个数。尽管可以存在多于3f+1个副本,但是额外的副本除了降低性能之外不能提高可靠性。
所有的副本在一个被称为视图(View)的轮换过程(succession ofconfiguration)中运作。在某个视图中,一个副本作为主节点(primary),其他的副本作为备份(backups)。视图是连续编号的整数。主节点由公式p=v mod|R|计算得到,这里v是视图编号,p是副本编号,|R|是副本集合的个数。当主节点失效的时候就需要启动视图更换(view change)过程。
基于拜占庭将军问题,PBFT一致性的确保主要分为这三个阶段:预准备(pre-prepare)、准备(prepare)和确认(commit)。
下面,本发明实施例结合图5详细阐述PBFT主要工作流程:
在图5中,C为发送请求端,0123为服务端,3为宕机的服务端,具体步骤如下:
1.Request:发送请求端C发送请求到任意一节点,这里是0。
2.Pre-Prepare:服务端0收到C的请求后进行广播,扩散至服务端1、2及3。
3.Prepare:服务端1、2及3收到后记录并再次广播,1->023,2->013,3因为宕机而无法广播。
4.Commit:服务端0123节点在Prepare阶段,若收到超过一定数量的相同请求,则进入Commit阶段,广播Commit请求。
5.Reply:服务端0123节点在Commit阶段,若收到超过一定数量的相同请求,则对C进行反馈。
当服务端的节点数大于100时,网络带宽压力会越来越大,因此,单纯的PBFT共识是无法满足节点数量很多的公有链网络。
在本发明实施例中,所述验证节点对所述区块进行验证之前,所述方法还包括:
选取若干个验证节点,每一所述验证节点用于对矿工节点产生的区块进行验证。当每一所述验证节点对所述矿工节点产生的区块进行验证通过后,则所述验证节点对所述区块进行签名,若验证不通过,则所述验证节点不会对所述区块进行签名。
当所述验证节点对所述区块进行验证成功通过后,所述验证节点将所述交易信息写入区块链,例如:将A账户余额和B账户余额写入区块链。其中,所述A账户余额和B账户余额均以密文形式保存在区块链上,所述A账户余额的密文为矿工节点通过A账户的附属公钥PAh对A账户余额进行加密后的密文,所述B账户余额的密文为矿工节点通过B账户的附属公钥PBh对B账户余额进行加密后的密文。通过密文的形式,区块链上的用户无法获知别的用户的账户余额,保护了用户的隐私,并且,由于附属密钥对的附属私钥能够解密其对应的附属公钥加密后的密文,因此,当用户忘记或者想要查询自身的账户余额时,能够在区块链上获知自身的账户余额,在保证隐私性的前提下能够进一步满足用户的需求。
步骤S6:普通节点接收所述区块,并更新自身的状态树。
具体的,当区块链新增区块后,则新的交易生成,区块链系统中的全部区块链节点需要更新自身的状态树,当普通节点接收到新区块时,将执行如下操作:
(1)、依据拜占庭容错协议,验证所述区块的验证节点的签名数量是否达到了所述区块链系统的验证节点总数的2/3,如果达到则接收所述区块。具体的,根据拜占庭容错协议,验证所述区块中验证节点的签名数量是否超过阈值,若是,则接收所述区块,其中,所述阈值为所述验证节点的数量的2/3,若所述区块通过验证节点的验证,则所述验证节点将对所述区块进行签名,普通节点判断所述验证节点对所述区块进行签名的签名数量是否超过所述区块链系统中全部验证节点的数量的三分之二,若是,则接收所述区块。
(2)、根据区块中的交易,使用加法同态,更新状态树中所述交易相关的账户的余额密文,包括发送者的余额密文以及接收者的余额密文。例如:如果状态树中B账户余额为X1,区块链交易中B账户收到的金额密文为X2,则将B账户的余额密文更新为X1+X2。
在本发明实施例中,所述普通节点接收所述区块,并更新自身的状态树,具体包括:
通过发送者A的附属公钥PAh对交易金额进行加密后的密文,对A账户余额进行同态加法,更新A账户余额;
通过接收者B的附属公钥PBh对交易金额进行加密后的密文,对B账户余额进行同态加法,更新B账户余额。
具体的,在状态树中,所有的区块链节点的账户余额均以余额密文的形式保存,例如:发送者A以及接收者B的账户余额均通过余额密文进行保存,发送者A的账户余额对应的余额密文为A余额密文,接收者B的账户余额B的账户余额对应的余额密文为B余额密文。由于状态树中的所有的区块链节点的余额密文均通过加法同态算法生成,其具有加法同态性,因此可以对余额密文进行同态加法,更新所述余额密文,即相当于更新所述账户余额。
具体的,请参阅图6,图6是本发明实施例提供的状态树的更新流程示意图;
如图6所示,当区块链节点接收到区块后,根据区块中的交易的发送者和接收者,以及交易金额,其中,所述交易金额通过附属公钥进行加密,以密文的形式保存在区块上,其中,所述交易金额可以保存有两个,分别为发送者A的附属公钥PAh对交易金额进行加密后的密文,以及接收者B的附属公钥PBh对交易金额进行加密后的密文。具体的,当普通节点接收到区块后,将根据交易的双方以及交易金额的密文,基于加法同态,更新自身的状态树。当交易发布到区块链上之后,区块链系统上的所有区块链节点均会各自更新自身的状态树,通过加法同态,如果某一区块链节点不更新自身的状态树,则其状态树与其他节点的状态树数据不一致,可能会导致该区块链节点发出的数据错误,从而不被全网承认。
如图6所示,所述区块中包含的交易信息为:A传给B的交易金额为MIWEN,当区块链节点接收到所述区块后,将根据所述交易信息,更新自身的状态树,例如:所述状态树在更新前为:A账户余额为MIWENA,B账户余额为MIWENB,当接收到所述区块后,根据所述交易信息:A传给B的交易金额为MIWEN,将所述A账户余额更新为MIWENA-MIWEN,以及将B账户余额更新为MIWENB+MIWEN,从而维持状态树的实时性,保证区块链节点能够合法地参与交易。
可以理解的是,本发明实施例提供的区块中的交易仅为一个,在实际情况下,所述区块中的交易可以为多个,当所述区块中的交易为多个时,其操作方式同上,同样也在本发明的保护范围之内。
可以理解的是,虽然区块链上的数据以及状态树中的数据都通过密文的形式进行保存,但是矿工节点和验证节点仍然可以验证交易的合法性,从而不会影响共识协议的正常运行。
在本发明实施例中,区块链节点包括一个或多个处理以及存储器。其中,处理器和存储器可以通过总线或者其他方式连接。
存储器作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。处理器通过运行存储在存储器中的非易失性软件程序、指令以及模块,从而执行各种功能应用以及数据处理。
存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
本发明实施例的区块链节点以多种形式存在,包括但不限于:
(1)塔式服务器
一般的塔式服务器机箱和我们常用的PC机箱差不多,而大型的塔式机箱就要粗大很多,总的来说外形尺寸没有固定标准。
(2)机架式服务器
机架式服务器是由于满足企业的密集部署,形成的以19英寸机架作为标准宽度的服务器类型,高度则从1U到数U。将服务器放置到机架上,并不仅仅有利于日常的维护及管理,也可能避免意想不到的故障。首先,放置服务器不占用过多空间。机架服务器整齐地排放在机架中,不会浪费空间。其次,连接线等也能够整齐地收放到机架里。电源线和LAN线等全都能在机柜中布好线,可以减少堆积在地面上的连接线,从而防止脚踢掉电线等事故的发生。规定的尺寸是服务器的宽(48.26cm=19英寸)与高(4.445cm的倍数)。由于宽为19英寸,所以有时也将满足这一规定的机架称为“19英寸机架”。
(3)刀片式服务器
刀片服务器是一种HAHD(High Availability High Density,高可用高密度)的低成本服务器平台,是专门为特殊应用行业和高密度计算机环境设计的,其中每一块“刀片”实际上就是一块系统母板,类似于一个个独立的服务器。在这种模式下,每一个母板运行自己的系统,服务于指定的不同用户群,相互之间没有关联。不过可以使用系统软件将这些母板集合成一个服务器集群。在集群模式下,所有的母板可以连接起来提供高速的网络环境,可以共享资源,为相同的用户群服务。
(4)云服务器
云服务器(Elastic Compute Service,ECS)是一种简单高效、安全可靠、处理能力可弹性伸缩的计算服务。其管理方式比物理服务器更简单高效,用户无需提前购买硬件,即可迅速创建或释放任意多台云服务器。云服务器的分布式存储用于将大量服务器整合为一台超级计算机,提供大量的数据存储和处理服务。分布式文件系统、分布式数据库允许访问共同存储资源,实现应用数据文件的IO共享。虚拟机可以突破单个物理机的限制,动态的资源调整与分配消除服务器及存储设备的单点故障,实现高可用性。
本发明实施例还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行。
在本发明实施例中,通过提供的一种区块链交易数据的隐私保护方法,应用于区块链系统,所述区块链系统包括普通节点、矿工节点以及验证节点,所述方法包括:步骤S1,分别根据交易的发送者A的私钥SA关联生成附属密钥对(PAh,SAh),以及根据接收者B的私钥SB关联生成附属密钥对(PBh,SBh);步骤S2,发送者A向接收者B发送转账意向,所述转账意向包括:A账户余额、交易金额、发送者A使用私钥SA对转账意向的签名以及发送者A的附属公钥PAh;步骤S3,接收者B接收所述转账意向,并向矿工节点发送交易信息,所述交易信息包括:发送者A发送的转账意向、B账户余额、接收者B使用私钥SB对交易的签名以及接收者B的附属公钥PBh;步骤S4,矿工节点接收到所述交易信息后,通过所述发送者A的附属公钥PAh分别对A账户余额和交易金额进行加密,以及,通过所述接收者B的附属公钥PBh分别对B账户余额和交易金额进行加密,并对所述交易信息进行验证后,将所述交易信息加入到区块中;步骤S5,验证节点对所述区块进行验证,验证成功后将所述交易信息写入区块链;步骤S6,普通节点接收所述区块,并更新自身的状态树。由于区块链上的交易金额以及状态树中的账户余额均为密文存储,保证了交易的安全性和隐私性,解决目前区块链的隐私保护依赖第三方可信机构的技术问题,保护了用户交易数据隐私。
以上所描述的装置或设备实施例仅仅是示意性的,其中所述作为分离部件说明的单元模块可以是或者也可以不是物理上分开的,作为模块单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络模块单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用直至得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;在本发明的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本发明的不同方面的许多其它变化,为了简明,它们没有在细节中提供;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。