具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
一种基于区块链和权限管理的供应链数据共享方法的具体实施方式,该方法包括:
S1:系统初始化,并生成系统主公私钥;
S2:数据拥有者设置截取规则;根据截取规则对拥有的消息进行划分,得到子消息;获取签名密钥,根据签名密钥采用可截取签名算法对子消息签名;数据拥有者向区块链申请密钥,采用申请的密钥对签名的子消息进行加密;将加密后的子消息分布式存储在区块链上,并获取对应的存储地址;
S3:数据请求者向数据拥有者发送数据共享请求、数据共享凭证以及访问权限;
S4:系统和数据拥有者分别对数据请求者的访问权限进行检测,若检测失败,则数据共享失败,否则根据数据共享凭证和截取规则确定数据共享内容,并将数据共享内容发送给数据请求者,生成数据共享日志;数据共享内容包括:请求消息的可截取签名、截取规则以及数据请求者权限所对应的子消息地址集合;
S5:数据请求者校验可截取签名有效性,若验证失败,则数据共享失败,若验证成功,则向区块链提交数据共享日志,得到用于解密的密钥;
S6:数据请求者根据子消息地址集合获取对应的子消息密文,并采用解密密钥对子消息密文进行解密,采用截取规则对解密后的子消息进行恢复,得到共享消息;
S7:数据请求者对共享的消息进行截取转发。
一种基于区块链和权限管理的供应链数据共享方法的另一种实现方式,如图2所示,该方法包括:
系统初始化阶段,初始化系统参数及配置。
数据预处理阶段,数据拥有者划分数据消息,生成可截取签名,加密数据消息分希式存储并获得存储地址。
数据共享阶段,数据请求者发起请求,数据拥有者回复请求,并返回签名、地址。数据请求者上链请求记录获取解密密钥。
数据转发阶段,和数据请求阶段流程一致。数据拥有者角色换成已经获得数据的数据请求者即跋据转发者,进行数据共享。
仲裁阶段,当出现纠纷或者其他问题时,数据请求者区块链监管节点发起仲裁请求,可以通过区块链记录追溯数据共享,查找问题方。
系统初始化包括:系统参数配置、群组划分、分布式数据库技术选择以及数据预处理。初始化数据过程中用到的密钥对以及对应消息字段格式,为数据共享做好准备工作。
加密消息的密钥生成与恢复密钥过程采用秘密共享策略,由区块链节点负责生成。对应的过程包括:秘密共享策略包括秘密分发阶段和秘密重构阶段;秘密分发阶段包括节点计算秘密数据份额,对各个份额进行标记,将计算的输入与输出值以键值对形式存储到本地数据库;秘密重构阶段包括参与节点根据各个秘密数据份额的标记以及重构策略对秘密数据进行恢复,得到完整的秘密数据。
数据预处理阶段,数据拥有者划分数据消息,生成可截取签名,加密数据消息分希式存储并获得存储地址。数据拥有者需要完成数据共享的准备工作,需要对数据进行处理之后再共享;先是将数据划分,并为划分的数据生成一个可截取签名,再向区块链申请密钥然后加密划分的数据并将密文分布式存储,获得存储地址。
数据拥有者向区块链申请密钥的过程包括:数据拥有者向区块链节点发送密钥请求,区块链节点根据密钥请求采用可验证密钥共享策略生成数据拥有者的对称密钥;采用可验证密钥共享策略生成对称密钥的过程包括:
步骤1:区块链中节点i选择一个随机数ci,并计算将该计算结果发送给其他节点,其他节点亦如此选随机数并发送给除自己以外的节点;最终,每个节点都能收到n-1个Ci,根据Ci计算中间参数/>并将Q上传到系统公开;其中,n表示区块链节点数量,R表示群G的生成元,i表示节点编号且i∈[1,2,…,n];
步骤2:节点随机选择两个中的t-1次多项式fi(x)和fi′(x);其中,多项式的表达式为:
fi(x)=ai0+ai1x+ai2x2+…+ai(t-1)xt-1,i={1,2,…,n}
fi′(x)=bi0+bi1x+bi2x2+…+bi(t-1)xt-1,i={1,2,…,n}
步骤3:节点根据多项式fi(x)和fi′(x)中的系数计算并广播计算结果Bik;其中,Bik、/>都是G中的元素,/>是计算Bik的中间参数,Bik是用于验证密钥份额的中间参数。
步骤4:数据拥有者A向区块链发起密钥请求,并提交参数IDA||T;其中,IDA||T表示数据拥有者A身份标识符与消息编号的连接。
步骤5:节点以IDA||T作为之前选取的多项式的输入,根据IDA||T和多项式fi(x)和fi′(x)计算数据拥有者A的密钥请求的两个函数值siA和s′iA,将函数值siA和s′iA发给数据拥有者A;其中,siA和s′iA的计算表达式为:
siA=fi(IDA||T)mod p
s′iA=fi′(IDA||T)mod p
其中,IDA表示数据拥有者A的身份信息,T表示待加密的消息编号,mod p表示模数为素数p的模运算。
步骤6:数据拥有者A根据函数值siA和s′iA,验证是否成立,若成立,则A接受来自于区块链节点i的密钥份额;反之,A要求节点i重新生成并发送密钥份额;其中,siA表示密钥份额,s′iA表示用于校验密钥份额的第二秘密值,aik和bik分别表示多项式fi(x)和fi′(x)的系数,i表示节点编号且i∈[1,2,…,n],k表示多项式系数下标且k∈[0,1,2,…,t-1],R、Q、Bik都是校验密钥份额所需的中间参数。
步骤7:数据拥有者A收到t份正确验证的密钥份额siA后即可恢复出用于加密消息的对称密钥s。
数据拥有者向区块链获取密钥需要提供消息编号和可截取签名,区块链节点验证签名有效之后,计算密钥份额返回给数据拥有者,并将消息编号与密钥份额以键值对形式存储到本地数据库。数据拥有者获取足够的密钥份额后合成加密密钥。
数据共享阶段,数据请求者发起请求;数据拥有者回复请求,并返回签名、需要分享的部分消息对应的地址;数据请求者上链请求记录获取解密密钥,通过地址下载密文解密得到共享数据消息明文。
数据请求者发送请求包括:为了进行数据共享,数据请求者需要发送数据共享请求给数据拥有者,特别的,数据请求中需要有数据访问凭证(比如属性、合同的相关证明等),并对数据请求签名附带时间戳发给数据拥有者。
数据拥有者验证请求包括:数据拥有者验证数据请求者的签名及凭证之后,返回回复消息,回复消息包括对数据请求的批复、共享数据的可截取签名、共享数据消息的密文存储地址以及共享数据消息的截取规则。
数据请求者上链数据共享记录以及获取消息过程:数据请求者收到数据拥有者发的消息之后,先验证签名者公钥有效性,再验证签名正确性,然后根据获得的地址去分布式数据库获取消息密文,接着将数据请求消息及其签名上链,区块链节点返回给数据请求者解密密钥,从而数据请求者即可获得需要的数据消息明文。
一种基于SM9的无证书可截取签名机制,如图1所示,该机制包括:初始化算法、设置秘密值、广播用户秘密值证明、部分私钥生成、完整私钥生成、签名算法、截取算法以及验证算法。具体过程包括:
初始化算法:给定安全参数λ,KGC首先选择一个双线性群BP=(G1,G2,GT,e,N),N>2λ。并选择群G1和群G2的生成元P1和P2。三个密码杂凑函数H1:{0,1}*→{0,1}k,/>表示与N互素且小于N的正整数集合。。KGC选择随机数ks∈[1,N-1]作为系统主私钥,计算群G2中的元素Ppub=[ks]P2作为系统主公钥,计算g=e(P1,PA),接着选择用一个字节表示的签名私钥生成函数识别符hid。系统公开参数
pp={BP,P1,P2,Ppub,H1,H2,H3,hid}。
设置秘密值:用户A选择随机数ka∈[1,N-1]作为用户秘密值证明,计算PA=[ka]P2,将PA发给区块链主节点。
广播用户秘密值证明:区块链主节点校验用户A身份,并将用户标识符IDA和PA共识记录。
部分私钥生成:区块链智能合约提醒KGC有新用户申请密钥,KGC根据用户标识符IDA和用户秘密值证明PA,计算t1=H1(IDA||hid,N)+ks,为用户A生成部分私钥发给A。
完整私钥生成:用户A生成完整私钥dsA=[ka]DA。
签名算法:给定消息M,用户A对其进行签名。其具体的步骤包括:
步骤1:将消息M划分为n个子消息,设定截取规则CEAS,随机选取CEAS标记T。并计算hi=H2(mi||i||CEAS||T),然后计算这n个子消息哈希值的连接另外,签名者计算关于h1个哈希值hi的默克尔根root,并将root上链。
截取规则包括:标记划分后的子消息下标,得到标签集{1,2,...,n};根据子消息之间的关联性对标签集中的标签进行关联;关联性包括子消息的上下文关联含义、内容顺序以及消息类型;采用截取规则对信息进行恢复时根据标签的关联性进行子消息恢复,得到恢复后的消息。
步骤2:计算g=e(P1,PA),g表示循环群GT的一个元素,e表示双线性运算,P1表示G1的生成元,PA表示用户秘密值证明。
步骤3:随机选择r∈[1,N-1],计算w=gr;其中w表示中间参数。
步骤4:根据中间参数w计算其中,h表示哈希值。
步骤5:计算哈希值和随机选择的参数r计算l=(r-h)mod N,若l=0则返回步骤2,否则执行步骤6。其中,l表示中间参数。
步骤6:计算S=[l]dsA。
根据上述步骤输出签名,其签名的表达式为:σ=(h,S,CEAS,T)。
一种截取算法的具体实施方式,包括:截取者B收到签名之后,先校验消息完整性,然后根据验签过程对接收到的全签名进行验证,若验证通过,则进行后续的截取过程,否则验证失败拒绝截取。根据消息M和截取规则CEAS,选定截取规则中某个元素X∈CEAS,根据X选定截取子集CI(M),满足对于消息不属于截取子集的,计算hi=H2(mi||i||CEAS||T);输出截取签名/>
验证算法:验证者C收到截取签名之后,首先判断CI(M)是否为合法截取子集,再根据i∈CI(M)计算获取到的子消息哈希值hi=H2(mi||i||CEAS||T),然后结合收到的计算默克尔根root′,校验与发布的root是否相同,即校验消息完整性。若消息完整,计算/>
对签名进行验证的过程包括:
步骤1:对可截取签名的h和S进行验证,即判断h∈[1,N-1]、S∈G1是否成立,若成立,则执行步骤2,否则可截取签名无效;其中,N表示一个大素数,G1表示一个循环群;
步骤2:根据循环群的生成元计算g=e(P1,PA);其中,g表示循环群GT的一个元素,e表示双线性运算,P1表示G1的生成元,PA表示用户秘密值证明;
步骤3:根据g和哈希值h计算t=gh;其中,t表示中间参数;
步骤4:根据系统主公钥、签名私钥生成函数识别符、用户的身份信息意以及循环群G2的生成元计算P=[H1(IDA||hid,N)]P1+Ppub;其中,H1表示密码杂凑函数,IDA表示数据拥有者的身份信息,hid表示签名私钥生成函数识别符,P2表示G2的生成元,Ppub表示系统主公钥,P表示中间参数;
步骤5:根据P和S计算u=(S,P),其中,u表示中间参数;
步骤6:根据u和t计算w=u·t,其中w表示中间参数;
步骤7:根据w计算其中,/>表示n个子消息的哈希值连接;
步骤8:将计算出的h′与可截取签名中的哈希值h进行对比,若相等,则可截取签名有效,否则可截取签名无效。
数据转发阶段,和数据请求阶段流程一致。数据拥有者角色换成已经获得数据的数据请求者即数据转发者,进行数据共享。即是说,当数据请求者获得数据之后,对于其获得的数据消息来说,其角色可以变成数据转发者,数据转发者的权限只有其所拥有的数据本身,可以选择所拥有的消息中的一部分分享给向其发出共享该数据请求的数据请求者。具体的,数据请求者发起请求;数据转发者回复请求,并返回截取签名、所分享的部分消息对应的地址;数据请求者上链请求记录获取解密密钥,通过地址下载密文解密得到共享数据消息明文。
仲裁阶段,当出现纠纷或者其他问题时,数据请求者或者数据拥有者向区块链监管节点发起仲裁请求,可以通过区块链记录追溯共享过程中的问题方,协助请求仲裁者解决问题。
本发明适用于具有层级性质的实体间的数据共享与转发,以供应链中工艺文件共享为例。供应链核心企业对工艺文件签名发布之后,需要按照供应商的访问权限截取之后共享给可以直接交互的供应商,但很可能无法发给供应商的供应商,因为核心企业与很多下下级供应商是没有交互的。而供应商收到文件后,也可以截取转发给下级供应商,收到截取消息和截取签名的供应商还能校验消息来源与真实有效性。具体的步骤包括:
S1:初始化。部署分布式数据库IPFS,由供应链企业节点构成区块链。
S11:系统初始化,系统公私钥,公共参数等;区块链系统参数初始化,节点公私钥配置及其他参数配置。
S12:签名者密钥生成。签名者A选定秘密值ka∈[1,N-1]及其证明PA=[ka]P2,用户A将PA发给联盟主节点,共识记录;智能合约将PA发给KGC,KGC生成部分私钥DA=[H1(IDA||hid,N)+ks]-1P1;用户A计算完整私钥dsA=[ka]DA。
S13:数据共享参与方参数配置,包括数据共享参与方公私钥对等参数配置。
S2:数据预处理。数据拥有者对数据进行预处理,如图3中步骤①和②。
S21:数据拥有者A将需要分享的数据消息划分M={m1,m2,…mn}。设置截取规则CEAS,选取随机数T作为CEAS的标记同时也作为消息编号,计算并根据hi=H2(mi||i||CEAS||T)计算关于这n个哈希值hi的默克尔根root,然后为消息生成一个可截取签名σ并向主节点提交消息Begin=(root,σ,PA,IDA)。其中,σ=(h,S,CEAS,T),σ是签名者用私钥dsA对/>的签名。
S22:区块链节点收到Begin消息后,验证签名有效性以及签名正确性,若通过验证返回为消息生成的加密密钥份额zi并发给A,并以键值对形式存储(T,root,zi)。
S23:数据拥有者A先恢复密钥z加密mi得到ci,再将n个密文分布式存储并获得存储地址集合ADDR={addr1,addr2,…,addrn},其中addri为一个哈希值表示mi在IPFS中的存储地址。
S3:数据共享。数据请求者向数据拥有者发起请求,并从区块链获取密钥、从IPFS获取密文。如图3中步骤③、④和⑤。
S31:数据请求者一级供应商通过安全信道向核心企业发送数据共享请求消息,Request=(proof,δB(proof))。其中,proof是数据共享凭证,比如合同的证明;δB(proof)是一级供应商对凭证的签名。
S32:数据拥有者A收到Request之后先验证签名正确性,再校验凭证有效性,并根据凭证决定数据共享的范围,并结合截取规则确定截取子集CI(M′)。根据截取子集用M′={m′1,m′2,…,m′n}替代M={m1,m2,…mn},其中,若i∈CI(M′)则令m′i=mi,表示一级供应商有权限获得该子消息;否则,令m′i=H2(mi||i||CEAS||T),表示一级供应商没有权限获取该子消息;为截取后的子消息集合M′的生成截取签名同时用ADDR′={addr′1,addr′2,…,addr′l}记录对应的地址集合,其中l是一级供应商有权获取的子消息个数。然后核心企业A(即数据拥有者)回复一级供应商B(即数据请求者)
S33:一级供应商收到Reply消息后,验证签名公钥有效性以及签名正确性,若通过验证,向区块链提交
S34:区块链节点用PA验证签名即验证A是否同意共享请求;再验证δB(timestamp)来对B进行身份认证。若都通过验证,将数据共享记录消息Record共识上链,并返回给B对应消息M的解密密钥份额zi。
S35:一级供应商B根据ADDR′的记录去IPFS对应地址下载密文,并用区块链返回的密钥份额合成解密密钥z,解密密文获得消息明文,根据截取子集CI(M′)中子消息的顺序恢复出可以访问的文件消息。
S4:数据转发。如图3所示,当数据请求者获得数据之后,其角色可以转变为数据转发者,别的数据请求者可以向数据转发者发送数据共享请求。
S41:数据请求者二级供应商C通过安全信道向数据转发者一级供应商发送数据共享请求消息,Request=(proof′,δC(proof′))。其中,proof′是数据共享凭证如合同的证明;δC(proof′)是一级供应商对凭证的签名。
S42:一级供应商收到Request之后先验证签名正确性,再校验凭证有效性,并根据凭证决定数据共享的范围CI(M″)。根据共享范围M″={m″1,m″2,…,m″n}替代M′={m′1,m′2,…,m′n},其中,若i∈CI(M″)则m″i=m′i,表示二级供应商有权限获得该子消息;否则,m″i=H2(m′i||i||CEAS||T),表示二级供应商没有权限获取该子消息;为截取后子消息M″的生成截取签名同时生成对应的地址集合ADDR″={addr″1,addr″2,…,addr″b},其中b是二级供应商有权获取的子消息个数。然后一级供应商回复
S43:二级供应商收到Reply消息后,验证签名公钥有效性以及签名正确性,若通过验证,向区块链提交
S44:区块链节点用PB验证签名即验证B是否同意共享请求;再验证δC(timestamp)来对C进行身份认证。若都通过验证,将数据共享记录消息Record共识上链,并返回给C对应消息M的解密密钥份额zi。
S45:二级供应商C用ADDR″去IPFS对应地址下载密文,并用区块链返回的密钥份额合成解密密钥z,解密密文获得消息明文,根据截取子集CI(M″)中子消息的顺序恢复出可以访问的文件消息。
S5:仲裁。当数据共享出现纠纷或者问题时,数据请求者或者数据拥有者区块链监管节点发起仲裁请求,可通过区块链记录追溯数据共享,查找问题方。
S51:数据请求者二级供应商C若是对获得的工艺文件有疑问,可能是不符合生产实际、不符合通用性要求以及其他可能造成经济损失的疑点。二级供应商C可以向区块链提交追溯请求,包含问题证明比如质检报告、测试报告、国标文件对比等,
Trace=(M,T,ProblemProof,timestamp,δC(ProblemProof||timestamp))。
S52:区块链节点验证签名即验证来自于C以及验证问题凭证,且当超过2/3的节点同意问题追溯时,根据T找到对应数据共享操作记录,根据记录追溯,查找问题方。
一种基于SM9和区块链的供应链数据共享系统,如图4所示,该系统包括:程序加载模块、初始化模块、数据分享模块、数据预处理模块、数据共享模块、仲裁模块;
所述程序加载模块用于对系统相关的初始程序进行配置加载;
所述初始化模块用于初始化系统,初始化系统包括初始化系统密钥、区块链节点密钥、选定可验证秘密共享多项式、选定共识算法以及部署智能合约;
所述数据分享模块用于各个用户参与节点向系统或数据库申请并获取所需数据,并将获取数据的用户参与节点作为数据拥有者;
所述数据预处理模块用于对数据拥者的数据进行预处理,该预处理包括数据拥有者对拥有的数据进行划分,采用基于SM9的无证书可截取签名机制对划分的数据消息进行签名,采用密钥对签名后的子消息进行加密,并将加密后的子消息存储到分布式数据库中,并获取相应的存储地址;
所述数据共享模块用于数据请求者向数据拥有者之间的数据共享,利用区块链对数据请求日志进行存储;在数据共享过程中,数据拥有者需要对数据请求者进行权限验证,若验证成功,数据拥有着通过数据共享模块将数据请求者所请求的数据发送给数据请求者;
所述仲裁模块用于对有问题数据对应的数据拥有者进行检测。
本发明系统的具体实施方式与方法的具体实施方式相同。
以上所举实施例,对本发明的目的、技术方案和优点进行了进一步的详细说明,所应理解的是,以上所举实施例仅为本发明的优选实施方式而已,并不用以限制本发明,凡在本发明的精神和原则之内对本发明所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。