具体实施方式
下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中的一些或者所有细节也可以根据权利要求书实现本发明。
本发明的一方面提供了一种去中心化交易验证方法。图1是根据本发明实施例的去中心化交易验证方法流程图。
本发明基于智能合约的金融交易凭证处理系统包括交易数据生成单元、凭证文件存储单元、智能合约管理单元和联盟链网络。
所述交易数据生成单元,用于实现金融交易凭证的形成管理过程,包括交易凭证发布模块、收款方加密模块、中间方加密模块、付款方加密模块;所述交易凭证发布模块用于接收交易凭证,访问联盟链网络,将原始交易凭证及杂凑值记录在基于智能合约的交易数据联盟链上,在凭证文件存储单元中记录原始交易凭证和杂凑值,并创建交易凭证T生成交易数据联盟链;所述收款方加密模块用于接收收款方使用自己的私钥对交易凭证T进行的加密,形成加密后的交易凭证TC,使用联盟链网络,通知联盟链网络的各对等节点通过算力比较,确定生成新交易区块的对等节点Xi,Xi为构成联盟链网络的对等节点的第i个节点,在对等节点Xi上的交易数据联盟链上生成创始区块,形成交易凭证TC的加密杂凑值TCx,将交易凭证摘要、收款方加密信息和交易凭证TC的加密杂凑值TCx写入到交易数据联盟链的创始区块上,协调节点将交易数据联盟链的创始区块自动同步到其他所有的对等节点,并将加密杂凑值TCx返回到交易数据生成单元,在凭证文件存储单元中记录交易凭证TC及加密杂凑值TCx;所述中间方加密模块用于接收交易监控方使用自己的私钥对交易凭证TC进行的加密,形成加密后的交易凭证TCM,使用联盟链网络,通知联盟链网络的各对等节点通过算力比较,确定生成新交易区块的对等节点Xj,Xj为构成联盟链网络的对等节点第j个节点,在对等节点Xj上的交易数据联盟链上生成头区块,形成交易凭证TCM的加密杂凑值TCx,将交易凭证摘要、交易监控方加密信息和交易凭证TCM的加密杂凑值TCx写入到交易数据联盟链的头区块上,协调节点将交易数据联盟链的头区块自动同步到其他所有的对等节点,并将交易凭证TCM的加密杂凑值返回到交易数据生成单元,在凭证文件存储单元中记录交易凭证TCM及交易凭证TCM的加密杂凑值TCMx;所述付款方加密模块用于接收第n个付款方加密,形成加密后的交易凭证TCM_P,使用联盟链网络,通知联盟链网络的各对等节点通过算力比较,确定生成新交易区块的对等节点Xk,Xk为构成联盟链网络的对等节点第k个节点,在对等节点Xk上的交易数据联盟链上生成第n个区块,形成交易凭证TCM_P的加密杂凑值TCM_Px,将交易凭证摘要、付款方加密信息和交易凭证TCM的加密杂凑值TCMx写入到交易数据联盟链的第n个区块上,协调节点将交易数据联盟链的第n个区块自动同步到其他对等节点,并将交易凭证TCM_P的加密杂凑值返回到交易数据生成单元,在凭证文件存储单元中记录交易凭证TCM_P及TCM_P的加密杂凑值TCM_Px。
所述凭证文件存储单元,用于将交易凭证的加密信息和区块杂凑值信息持久化到凭证文件存储单元中;所述联盟链网络中除对等节点外,进一步包括区块检验模块、运行监控模块和协调节点;所述区块检验模块,用于各类用户检验存储在区块链的各区块的交易数据信息;所述运行监控模块用于监控联盟链网络各对等节点的运行情况;所述协调节点用于协调各对等节点上的模块统一运行以及各对等节点间的交易数据同步。使用区块链作为交易数据的副本存储方式,原交易处理系统仅需生成交易数据相应的密文数据,然后存储到对应的区块链中生成联盟链备份数据即可,确保交易数据不可被修改。
其中,在生成所述交易凭证的密文数据时,先提取交易凭证中确定的特征数据如交易双方ID、时间、金额,然后针对这些特征数据生成密文数据,将多种不同的交易凭证抽离出共同的特征数据,简化密文数据的源数据,快速生成密文数据,提高数据处理效果。当所述交易凭证缺少至少一项所述特征数据时,根据所述交易凭证的交易类型确定缺少的特征数据的默认值。
相应地,在交易凭证的一致性验证过程中,从存储的联盟链交易凭证中获取与所述交易凭证相关联的联盟链备份数据;所述联盟链备份数据包括根据交易凭证的密文数据生成并存储在区块链中的数据信息,所述联盟链备份数据中存储相邻的上一个节点联盟链备份数据中的密文数据;计算所述交易凭证的第一密文数据,并获取所述联盟链备份数据中的与所述交易凭证相对应的第二密文数据;比较所述第一密文数据与所述第二密文数据是否相同,若相同,则确认所述交易数据未被改动。
根据一个具体的实施例,联盟链系统的交易参与双方设为收款方L和付款方V,初始化交易凭证数据为C,由n个节点构成中间方P。参数设置如下:
设置收款方L的私钥为Ks1=xL.Ks2=zL;l<xL,zL<q,收款方L的公钥为KpL=(p,g,yL,uL),
其中g∈Zp*:
yL=gxL modp;
uL=gzLmodp。
p和q为预设大素数。
付款方V的私钥为xV∈Zq;V的公钥为yV=gxV modp
每个中间方Pi的私钥为zi∈Zq,公钥为yi=hzi(mod q),并选择一个公开参数xi∈Zq,n个xi之间各不相同。
对于交易凭证杂凑值m∈Zq,首先收款方L生成m的不可伪造水印。选择一个[1,q-l]之间的随机数t,计算T=gt modp和m’=T mod q,然后再对交易凭证杂凑值m'进行水印加密。
选择一个随机数R使得R小于(p-1)且与(p-1)互素,计算r=gRmodp,并计算s,使得m'=rx+(Rs mod q),得到交易凭证杂凑值m’的水印密钥为(r,s),验证形式为gm’=yLrs(modp),对交易凭证杂凑值m的不可伪造水印δL为(r,s,T)。
当收款方L对外公布参数t时,将收款方L的不可伪造水印δL转换为普通的水印δL0:(r,s,T,t),即验证是否有T=gt(mod p),以及{uLmT)'=yLrs(modp)成立。
收款方L将参数t’=t+m(mod q)进行广播,共享给n个中间方。收款方L随机的选取Zq上的k-1次多项式:
令f
0=t’,公布S=g
t’modp和F
j=g
fjmodp,令子密钥为
但s
i是用中间方P
i的公钥y
i加密之后发送给付款方V,同时制作验证令牌(C,D
i):
收款方L用中间方Pi的公钥yi对si进行加密,即收款方L选择随机数α∈Zq,得到令牌(C,Di)=(hα,si -1,yi α)(mod q),其中C=hα(mod q),Di=(si -1,yi α)(modq)。具体过程描述如下:
1)收款方L发送对交易凭证m的不可伪造水印δL(r,s,T)和验证令牌(C,Di)以及对每个si的可验证加密密文si -1,yi α给付款方V;
2)付款方V验证令牌(C,Di)的有效性,即付款方V利用已知的参数验证下式是否成立:
Tgm=S
如果成立,则说明(C,Di)确实是用Pi的公钥对si的加密,且收款方L对n个Pi分享的秘密确实是参数t,因此可以确定当有大于等于k个中间方Pi对密文(C,Di)解密时,就可以重构参数t'得到t,使得收款方L的不可伪造水印转变成普通水印。然后付款方V与收款方L进行交互式验证δL,过程如下:
(1)付款方V产生两个随机数a和b,计算ch=TTmagb mod p,同时把它发送给收款方L。
(2)收款方L产生一个随机数k,并计算h1=ch·gk modp和h2=h1rsa modp,同时把这两个数发送给付款方V。
(3)付款方V把a和b发送给收款方L。
(4)收款方L验证ch=TTmagb modp,把k发送给付款方V。
(5)付款方V验证h1=ch·gk mod p和h2=h1rsa mod p。如果验证通过,则付款方V发送自己的水印δV给收款方L。
收款方L收到验证其有效性,然后将确认其水印有效性的参数t发送给付款方V。
付款方V收到t,验证是否有T=gt(modp),如果成立,整个过程完成,若不成立,得到收款方L的普通水印δL(r,s,T,t)。
所述智能合约管理单元用于交易方之间通过协同加密来生成智能合约,根据智能合约进一步生成交易用户之间的可靠区块数据更新信息并加入联盟链中。智能合约请求方根据预设的合约生成可靠性指标值确定协同加密的一个或多个合约签订方,智能合约请求方、合约签订方分别对应一个权限参量值,智能合约请求方和一个或多个合约签订方对应的权限参量值之和不小于预设的合约生成可靠性指标值;生成交易凭证的交易凭证区块更新信息;交易凭证区块更新信息是基于智能合约请求方的私钥对原始交易凭证的区块数据信息进行加密后得到的;原始交易凭证的区块数据信息包括:智能合约请求方ID、合约签订方链表或合约签订方的公钥;发送交易凭证区块更新信息至合约签订方请求协同加密;接收来自合约签订方的加密确认信息;根据加密确认信息进行交易凭证区块数据更新。
当智能合约请求方为多个时,表示该交易访问由多个交易主体发起。智能合约请求方或合约签订方向所在系统提交注册请求时,获得唯一的用户ID及公私钥信息。用户注册成功后对用户类型、用户相关数据信息进行初始化。根据用户的评估结果为每个用户分配相应的交易凭证数据更新操作的权限参量值。交易凭证数据更新操作类型以及各交易凭证数据更新操作类型的所需的可靠性指标值可以预先设置。
在确定合约签订方的过程中,除了满足智能合约请求方和合约签订方的权限参量值之和不小于预设的合约生成可靠性指标值之外,智能合约请求方还可以自主选择协同加密的一个或多个合约签订方,生成合约签订方链表,选择的依据可以是需要共同完成交易操作的用户。
智能合约请求方生成交易凭证区块更新信息后,可以发送至合约签订方链表中首位合约签订方请求协同加密,首位合约签订方完成加密处理后,由该首位合约签订方向下一个用户发送包含智能合约请求方的加密信息和合约签订方链表中首位合约签订方的加密处理结果的交易凭证区块更新信息,请求协同加密。第N-1位用户完成加密处理后,向第N位合约签订方发送包含智能合约请求方的加密信息、前N-1位合约签订方的协同加密处理结果的交易凭证区块更新信息请求协同加密,直至协同加密完成。
另一种情况下,智能合约请求方生成交易凭证区块更新信息后,也可以向合约签订方链表中的所有合约签订方发送交易凭证区块更新信息请求协同加密,接收来自合约签订方加密处理后得到的加密确认信息。每个合约签订方完成加密处理后,向智能合约请求方反馈加密确认信息;或合约签订方链表中的所有合约签订方均完成加密处理后,由最后一位合约签订方向智能合约请求方反馈加密确认信息。
本发明的交易凭证区块数据更新的方法根据合约签订方的加密确认信息进行交易凭证区块数据更新,提升协同加密的交易凭证区块数据更新的可扩展性。
对于交易凭证数据更新操作链表中的每个更新操作,都需要根据预设的操作可靠性指标值选择相应的合约签订方形成合约签订方链表,以达到交易凭证数据更新操作的可靠性指标值要求。如果交易凭证数据更新操作O1的可靠性指标值为T1,智能合约请求方U1的权限参量值为W1,如果W1>T1,则智能合约请求方U1自己拥有满足交易凭证数据更新操作O1的可靠性指标值,则无需进行协同加密,数据修改历史中仅需智能合约请求方U1加密即可。如果W1<T1,智能合约请求方U1无权单独进行交易凭证数据更新操作O1,则需要得到一个或多个合约签订方的协同加密,以使智能合约请求方的权限参量值和一个或多个合约签订方对应的权限参量值之和不小于预设的交易凭证数据更新操作O1可靠性指标值T1,完成交易凭证数据更新操作O1。
除了要求智能合约请求方的权限参量值和一个或多个合约签订方对应的权限参量值之和不小于预设的合约生成可靠性指标值之外,还可以限制协同加密必须在协同加密期限内完成。若超出协同加密期限,仍有一个或几个合约签订方没有完成加密处理或者拒绝进行加密时,此次交易凭证区块数据更新的协同加密结束,结果为失败。智能合约请求方可以向已选定的合约签订方链表中的合约签订方重新发起一次交易凭证区块数据更新的协同加密请求,也可以重新选择合约签订方进行交易凭证区块数据更新的协同加密,以保证协同加密实现的效率。
在根据加密确认信息进行交易凭证区块数据更新之后,还包括:由智能合约请求方在完成交易凭证区块数据更新之后,利用区块数据广播数据修改历史,也可以由最后完成加密处理的合约签订方广播数据修改历史。
具体实施中,对交易凭证区块数据的验证包括两个步骤,一是验证所有完成加密用户的加密有效性,即判断智能合约请求方和所有合约签订方的公钥是否可以完成交易凭证区块更新信息的解密;二是交易凭证数据更新操作可靠性指标值验证,即判断即所有智能合约请求方和所有合约签订方的权限参量值之和是否不小于交易凭证数据更新操作的可靠性指标值。对于交易凭证区块数据的验证还可以根据交易凭证区块数据中已存在的交易凭证对交易凭证区块数据进行验证。若区块数据通过验证,可以依据工作量证明算法进行共识。如果区块数据通过共识,则标识交易凭证区块更新信息合法,区块数据可被纳入交易凭证区块数据中。
如果交易方将密文数据上传至联盟链后允许第三方用户对交易凭证进行访问,则交易方将加密私钥的第一子串上传至联盟链对应的联盟链访问接口。然后交易方从联盟链访问接口接收所述交易凭证密文数据对应的许可标识。具体的,联盟链访问接口按交易凭证数据的上传用户对应的规则来生成许可标识。当允许第三方用户访问所述加密交易数据时,交易方将所述许可标识和私钥的第二子串发送给第三方用户,所述私钥的第二子串包括所述私钥中除第一子串之外的剩余部分,以使第三方在发送针对交易凭证密文数据的访问请求至联盟链访问接口时,在所述访问请求中追加所述许可标识和所述私钥的第二子串。
这样,联盟链访问接口在确定所述许可标识可用时根据所述私钥的第一子串和第二子串生成所述私钥,根据所生成的私钥对从联盟链获取的密文数据进行解密处理,并将解密得到的交易凭证明文数据提供给第三方。
联盟链访问接口将私钥的第一子串和第二子串拼接起来即可组合成完整的私钥。如果联盟链访问接口从第三方获得的私钥的第二子串与从交易方获得的私钥的第一子串不属于同一个私钥,则无法拼接成一个正确的私钥,进而解密失败,第三方则无法获得交易凭证明文,不能成功访问到数据的内容,从而有效保障了交易双方上传的交易凭证数据的安全。
当第三方通过联盟链访问接口请求访问相应的交易凭证数据时,联盟链访问接口可首先验证许可标识是否可用,在许可标识可用的情况下,再利用从交易方和第三方分别获得的私钥第一子串和第二子串获得完整私钥,如果第三方的提供的不完整私钥有误,则无法获得正确的完整私钥,就无法对密文数据成功解密,从而保障了数据的安全。在此方案中,二者都不具有访问密文数据的权限,从而有效保障了数据安全和用户隐私。此时,只有联盟链访问接口通过访问得出的数据是解密的交易凭证明文数据,如果某个用户直接在区块链上访问,所得的是交易凭证密文数据,无法得到明文数据。
此外,交易方在收到许可标识之后,可进一步生成交易凭证密文数据的访问口令,该访问口令包含所述许可标识和所述私钥的第二子串。所述将许可标识和所述私钥的第二子串发送给所述第三方的步骤具体可包括:将所述访问口令发送给所述第三方,以使所述第三方在所述访问请求中携带所述访问口令。这样,交易方就将许可标识和私钥的第二子串发送给第三方。在此实例中,交易方通过向第三方发放口令来允许相应的用户来访问其上传的交易凭证密文数据,并且所发放的口令中并没有完整私钥,需要到联盟链访问接口中做进一步验证才能获得完整私钥而进行解密处理。
所述智能合约管理单元还用于,在将所述私钥的第一子串上传至访问接口时,接收交易方上传的智能合约文件名和交易用户名,以使联盟链访问接口根据所述交易用户名对应的规则生成许可标识,并将所述许可标识与所述私钥的第一子串、所述智能合约文件名和所述交易用户名相关联。联盟链访问接口在收到所述访问请求时可根据其中包含的智能合约文件名和所述交易用户名获取相关联的许可标识和所述私钥的第一子串,以便根据获取的许可标识确定所述访问请求包含的许可标识是否可用,根据获取的私钥的第一子串和所述访问请求包含的第二子串生成所述私钥。
当交易方上传私钥的第一子串时,访问接口可以根据同时上传的密文数据交易用户名确定生成许可标识所用的规则。之后,联盟链访问接口在收到访问请求时,从本地查询到当前请求访问的密文数据对应的智能合约文件名和交易用户名关联的许可标识,如果访问请求中包含的许可标识与从本地查询到的许可标识一致,则说明访问请求中包含的许可标识是合法的,进一步验证当前请求访问的密文数据的地址是否属于许可标识对应的允许访问的数据地址。在验证通过时,确定许可标识可用。
在确定许可标识可用时,采用获取的与智能合约文件名和交易用户名相关联的私钥的第一子串与访问请求包含的私钥的第二子串来组合成完整的私钥。
对于上述访问口令,交易方维护一个或多个访问口令,交易方上传的每一份交易区块数据都会对应一个访问口令,每一个智能合约文件名也关联一个访问口令。这样,当第三方向交易方请求数据访问时,如果交易方许可并确定对应的访问口令,并将此访问口令发放给第三方。
综上所述,本发明提出了一种去中心化交易验证方法,每个交易凭证都会记录数据的变化及其唯一对应的密文区块数据;实现了加密交易凭证的不可伪造,而且实现了交易凭证数据的零丢失,并保证交易数据变化过程可追溯。
显然,本领域的技术人员应该理解,上述的本发明的各模块或各步骤可以用通用的计算系统来实现,它们可以集中在单个的计算系统上,或者分布在多个计算系统所组成的网络上,可选地,它们可以用计算系统可执行的程序代码来实现,从而,可以将它们存储在存储系统中由计算系统来执行。这样,本发明不限制于任何特定的硬件和软件结合。
应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。