发明内容
为解决上述现有技术所存在的问题,本发明提出了一种基于区块链的智能合约供应链可信服务方法,包括:
当检测到新的智能合约被创建时,为新的智能合约生成公私钥对;
使用智能合约的公钥加密与所述智能合约相关联的数据;
将与新智能合约相关联的加密数据编码到区块链的第一区块中;
将所述第一区块分配至区块链多个验证节点,以形成对所述区块链的更新的共识;
接收由区块链的合约节点的访问请求,以请求将新智能合约相关联加密数据发送至所述合约节点;
判断所述供应链节点是否具有相关联的许可,所述许可指示允许所述供应链节点访问与所述新智能合约相关联的加密数据;
如果所述供应链节点具有相关联的许可,确定与所述合约节点相关联的访问等级;
如果所述访问等级表示允许所述合约节点访问与新的智能合约相关联的加密数据,则将所述新智能合约的私钥传输到所述合约节点。
优选地,所述验证节点使用所述供应链节点的公钥来解密由所述供应链节点在请求中包括的水印签名,验证所述水印签名,以确定与所述供应链节点相关联的许可。
优选地,所述验证节点从所述合约节点接收加入所述区块链的请求。
优选地,所述验证节点用于为所述合约节点生成公私钥对。
优选地,所述验证节点通过区块链外的信道向所述合约节点发送所述合约节点的私钥。
优选地,所述验证节点为所述合约节点分配许可,所述许可关联于允许所述合约节点的多种数据类型。
本发明相比现有技术,具有以下优点:
本发明提出了一种基于区块链的智能合约供应链可信服务方法,在保持区块链开放性的基础上,基于智能合约机制,通过授权控制实现单个节点对区块链所存储的机密交易信息的访问,有效实现了供应链的可信数据隐私保护。
具体实施方式
下文与图示本发明原理的附图一起提供对本发明一个或者多个实施例的详细描述。结合这样的实施例描述本发明,但是本发明不限于任何实施例。本发明的范围仅由权利要求书限定,并且本发明涵盖诸多替代、修改和等同物。在下文描述中阐述诸多具体细节以便提供对本发明的透彻理解。出于示例的目的而提供这些细节,并且无这些具体细节中的某些或者所有细节也可以根据权利要求书实现本发明。
本发明的一方面提供了一种基于区块链的智能合约供应链可信服务方法。图1是根据本发明实施例的基于区块链的智能合约供应链可信服务方法流程图。
本发明在基于区块链的供应链可信账本***中实现安全存储机密信息并保护数据隐私。使用加密技术来保证只有授权方能够查看存储在区块链的机密信息,从而允许任何数量的节点参与区块链,而与节点各自的权限无关。区块链的每个节点保护其自己的分布式账本副本。将与一个节点相关联的隐私数据存储在区块链的多个其他节点上,但是仅向具有相应权限的节点提供令牌而解密个人数据。
在建立新区块时,将生成的哈希值和随机数作为密码难题的输入,通过求解该密码难题来验证新区块。区块生成节点利用所述哈希值,并循环改变随机数的值,直到获取所述难题的令牌。当找到密码难题的令牌时,区块生成节点发布该令牌,然后其他节点验证该令牌是否为正确的令牌。
由于该令牌依赖于区块链内每个交易的特定哈希值,所以当区块生成节点试图修改任何交易时,该令牌将不会被其他节点验证。
具体地,如果单个节点试图修改区块链内的先前交易,则生成不同哈希值的组合。由修改节点生成的令牌不能求解未修改的任何节点的密码难题。因此,由修改节点生成的新区块的版本可被标识为包括非法的修改,并被一致拒绝。无法修改过去交易的特点导致区块链成为可信和安全的。
本发明公开的方法通过智能合约来执行分布式共识的动作。智能合约包括多个触发条件,当满足触发条件时对应于多个动作。对于某些智能合约,基于多个决策条件来确定执行多个动作中的其中一个动作。供应链节点订阅多个数据流,包括与触发条件或决策条件相关的数据流。供应链节点将数据流路由到智能合约,使智能合约检测触发条件的发生或分析决策条件,以指导节点执行多个动作。
其中,对个人数据的访问动作通过创建智能合约来控制。当创建智能合约时,监管节点使用任一种非对称公钥加密技术。与智能合约相关联的个人数据只能在首次使用智能合约的公钥加密后存储在分布式账本中。监管节点保证只有授权的节点接收智能合约的私钥。只有拥有智能合约私钥的一方才能解密个人数据。
为防止仿冒授权节点来获得对隐私信息的访问,当节点加入区块链时,监管节点为该节点生成公私钥对。节点的公钥存储在公钥字典中,允许区块链的所有节点都可以访问。当该节点向区块链的另一节点发送消息时,该节点包括使用该节点的私钥加密的水印签名。
当第二节点从该节点接收消息时,第二节点检索对应于该消息所指示的发起节点的公钥。第二节点使用公钥解密水印签名以验证消息是否由所指示的发送者发送。因为仿冒节点不能访问该节点的私钥,所以第二节点不能使用该节点的公钥对仿冒节点应用的水印签名进行解密。因此第二节点容易检测到仿冒者并屏蔽该消息。
所述个人数据使用智能合约的公钥加密后存储在分布式账本中,进一步包括:
建立原始映射表UE,所述原始映射表保存源偏移量到目标偏移量的映射;利用智能合约公钥将该原始映射表初始化为密钥映射表LP;根据预先定义的码字与偏移量的关系表NW,将输入码字序列转换为偏移量序列的明文;利用密钥映射表LP对偏移量序列明文进行映射,得到偏移量序列的密文;逆向查找码字与偏移量关系表NW,将偏移量密文序列转换为码字序列密文。其中所述原始映射表UE包括随机生成的N个原始映射表UE1-UEN。
所述密钥映射表LP1-LPN通过以下过程建立:对于第i=1个原始映射表;获取密钥的第j=1位,计算第j位的偏移量offset;将原始映射表从第j位开始将第j位增加offset,然后获取密钥的第j+1位重复以上处理,直到所有的密钥位处理完成;得到第i张密钥映射表LPi,重复获取第i+1个原始映射表,直到i=N,即所有的密钥映射表LP初始化完成。
其中所述映射通过以下过程实现:以第ε=1位为起点,映射所述偏移量序列明文的其它所有位,并与ε位偏移量求和取模Z作为映射结果,得到偏移量序列密文的第ε位,Z为所述码字与偏移量关系表中的码字个数;以第m=lth位为参考,映射所述偏移量序列明文的其它所有位,lth为偏移量序列明文的长度,并与m位偏移量求和取模Z作为映射结果,得到偏移量序列密文的第m位;ε增1,m减1并重复上述步骤,直到ε≥m。
通过上述密钥映射表和基于偏移量的公钥加密,简化了密钥管理过程,大大提高了将个人数据加密存储在分布式账本搜索的效率。
在本发明的供应链可信账本***中,每个节点保存分布式账本的副本,并随着对分布式账本的改变而更新其分布式账本的副本。当某运算节点(记为节点A)生成交易T时,交易T使用存储在分布式账本中的数据,或者使用由节点从分布式账本外部接收的数据。节点A通过供应链网络将生成的交易传输到监管节点,记为节点C。
节点C接收交易T,并确认交易T的信息是正确的。如果包含在交易T中的信息不正确,节点C拒绝该交易并且不传播交易T。如果包含在交易T中的信息是正确的,节点C可以将交易T传输到其邻居的验证节点B。类似地,节点B接收交易T,并且确认或拒绝交易T,直到网络中的所有节点已经接收到交易T。任何节点将确认的交易T加入自身的分布式账本的副本,或者加入存储在分布式账本中的交易块。
在某些实施例中,确认交易包括检查交易中涉及的参与者的加密令牌对。
其中,当节点C确认交易T有效时,该节点将该交易加入新生成的区块。作为将交易T加入新区块的一部分,节点C解决所述密码难题,并将密码难题的令牌包括在新区块中。或将交易T加入交易池中,直到存在足够的交易可叠加以创建区块。节点C将所述新区块加入其区块链的副本。节点B在接收节点C新创建的区块后,通过检查新区块中提供的密码难题的令牌来验证交易新区块是否有效。如果令牌是正确的,则节点B可以将新区块加入自身的区块链,并将所述新区块发送到全网。
当区块链监管节点将交易路由到特定智能合约时,提取交易的身份信息,并利用身份信息来查询多个智能合约,确定与身份信息匹配的智能合约。然后,区块链监管节点指示执行所匹配的智能合约的动作。例如,响应于指示需要发生资金转移的状态,特定智能合约指示。
在接收新的智能合约之后,区块链监管节点为新的智能合约生成公私钥对。区块链监管节点在所述公钥字典中存储新智能合约的新生成的公钥,或通过生成将新智能合约与其公钥相关联的新交易来向区块链发布新智能合约的公钥。因此,每个节点都可以访问新智能合约的公钥。
然后区块链监管节点使用智能合约的公钥来加密与智能合约相关联的数据。通过使用智能合约的公钥加密数据,只有拥有智能合约私钥的节点才能解密数据。因此,区块链监管节点只向被授权查看数据的节点发送私钥。在一种情况下,区块链监管节点在接收新的智能合约之后接收个人数据。
区块链监管节点然后生成包括加密数据的交易。具体地,区块链监管节点将加密数据包括在交易的交易信息中。所述交易信息中的身份信息保持不被加密,以指示应用哪个加密令牌来解密交易信息。在某些实施例中,区块链监管节点在交易中包括水印签名。所述水印签名基于区块链监管节点的私钥。
可选地,区块链监管节点将交易编码到区块链的新区块中。然后可以将该区块以及对应的密码难题的令牌传输到区块链的多个节点。多个节点然后验证密码难题的令牌,并形成将新区块加入区块链的共识。
当供应链节点向区块链监管节点发送请求以获得对与新智能合约相关联的数据的访问时,新的智能合约与文档存储相关联。因此,新的智能合约指示文档的存储日期。当新智能合约检测到当前日期是提交日期时,新智能合约请求区块链监管节点提供对文档的访问。
其中,区块链监管节点预先验证该请求是否为有效请求。例如区块链监管节点查询许可数据库,确定与发出请求的供应链节点相关联的多个许可,从而尝试验证请求的发送者是否为发送请求的合法方。如果发出请求的供应链节点没有足够的许可来授予对与新智能合约相关联的数据的访问,则区块链监管节点屏蔽该请求。
类似地,区块链监管节点还可验证供应链节点是否具有访问与新智能合约相关联的数据的许可。因此,区块链监管节点查询许可数据库以确定与供应链节点相关联的访问等级。如果供应链节点没有足够的许可来接收对与新智能合约相关联的数据的访问,则区块链监管节点屏蔽该请求。
在发出请求的供应链节点在请求中包括水印签名的情况下,区块链监管节点进一步验证水印签名的真实性。区块链监管节点从请求中提取发出请求的供应链节点的身份,以从公钥字典中检索发出请求的供应链节点的公钥。区块链监管节点利用发出请求的供应链节点的公钥来解密水印签名。如果解密的水印签名与期望值不匹配,则区块链监管节点屏蔽该请求。
在验证请求之后,区块链监管节点向供应链节点发送新智能合约的私钥。区块链监管节点在区块链之外或在区块链内传输新智能合约的私钥。在此之前,区块链监管节点使用供应链节点的公钥来加密新智能合约的私钥。
区块链监管节点从公钥字典中检索供应链节点的公钥,或发出请求的供应链节点在请求中包括供应链节点的公钥的指令。通过使用供应链节点的公钥加密新智能合约的私钥,只有供应链节点能够解密该令牌以访问与新智能合约相关联的数据。
然后,区块链监管节点生成包括新智能合约的加密私钥的交易。在某些实施例中,区块链监管节点在交易中包括水印签名。然后可以将交易编码到区块链的新区块中。区块链监管节点然后将该区块以及对应的密码难题的令牌传输到区块链的多个供应链节点。多个节点然后验证密码难题的令牌,并形成将新区块加入区块链的共识。
当监管节点检测到已创建新的智能合约时,还可将预定义策略与所述智能合约相关联,然后为所述智能合约生成公私钥对,并将新的智能合约的公钥存储在公钥字典中。所述监管节点使用新的智能合约的公钥来加密与所述智能合约相关联的策略数据。例如,策略数据可以包括原材料订单数据。在供应链流程发生变化时,如果监管节点接收到追加的策略数据,实时地将所述追加策略数据使用新智能合约的私钥进行加密。
然后,监管节点将与所述智能合约相关联的策略数据编码到区块链的第一区块中。其中,将加密的策略数据写入交易中,在一个实施例中,监管节点将加密的策略数据与利用监管节点的私钥所加密的水印签名相关联。当该交易被写入区块中时,其他交易也可被编码到该区块中。
监管节点将所述第一区块分发到区块链的多个节点。所述多个节点分别尝试基于第一区块的头部和随机数来解决密码难题。当一个节点解决密码难题时,该节点将令牌传送给其他节点以验证令牌。如果超过阈值比例的节点验证了该令牌,则指示将第一区块加入区块链的共识。
在第一区块通过共识之后,监管节点检测向区块链的合约节点提供对与新智能合约相关联的策略数据的访问请求。所述合约节点与策略相关联的特定特征相关联。在一个实施例中,监管节点响应于新智能合约本身的指示来生成所述访问请求。此外,区块链的另一节点也可向监管节点发送提供对策略数据的访问请求。
其中,监管节点验证所述访问请求以提供对策略数据的访问。所述验证包括,确定与发送请求的节点或接收访问的合约节点相关联的许可等级。如果所述节点不与正确的许可等级相关联,则监管节点屏蔽该请求。当所述请求还包括与发送节点相关联的水印签名时,监管节点尝试使用发送节点的公钥来解密水印签名。如果监管节点无法解密水印签名,则屏蔽该请求。
如果所述节点关联于正确的许可等级,监管节点生成交易,指示接收对策略数据的访问的合约节点和新智能合约的私钥。监管节点在交易中包括新智能合约的私钥之前,使用合约节点的公钥来加密新智能合约的私钥。在一个实施例中,监管节点还可以在交易中包括基于监管节点私钥的水印签名。
然后,监管节点将包括新智能合约的私钥的交易编码到区块链的第二区块中。在某些实施例中,第二区块与第一区块相同。监管节点将第二区块分发到区块链的多个节点。所述多个节点分别尝试基于第二区块的头部和随机数来解决密码难题。当一个节点解决密码难题时,该节点将令牌传送给其他节点以验证令牌。如果多于阈值比例的节点验证了该令牌,则指示了第二区块被加入区块链的共识。
对于上述多个智能合约的访问管理,本发明的方法将多个智能合约存储于应用于供应链的区块链基础设施中,并经由多个应用接口访问所述智能合约,向给定参与方的特定智能合约输入数据,并从给定参与方的特定智能合约中检索数据;基于所述多个智能合约数据,生成表示给定参与方的交易订单的模型;在每个参与方的整个生命周期中,更新相应参与方的特定智能合约。
其中所述智能合约被单独分配至特定的参与方;其中所述多个参与方至少包括嵌入式客户端,所述嵌入式客户端用于向所述多个应用接口提供所述参与方的交易数据。
为改进现有技术中令牌创建时无法保证分布式账本地址的一致性的缺陷,在为供应链节点提供所述密码难题的令牌之前,该方法进一步包括令牌创建过程,具体地:
提供第一预定义密钥对,包括第一对称公钥和相对应的第一对称私钥,其中所述第一对称私钥对应于与分布式账本地址相关联的第一公钥;并且其中第一对称私钥存储在通过互联网连接到分布式公共交易账本的第一验证节点;
提供第二预定义密钥对,包括第二对称公钥和相对应的第二对称私钥,其中第二对称私钥对应于与分布式账本地址相关联的第二公钥;并且其中第二对称私钥存储在第二验证节点,该第二验证节点与第一验证节点物理分离;
提供所述令牌的对应智能合约指令,所述智能合约指令与分布式账本地址的第一合约地址相关联,其中所述智能合约指令包括令牌的创建、令牌的转移、令牌的销毁、用于第一预定义密钥对的授权指令;以及用于第二预定义密钥对的授权指令;
由供应链可信账本***接收许可获取请求,用于通过令牌的第一组合以获取第二组合的许可,其中所述许可获取请求来自具有第一运算节点密钥对的请求用户,包括第一运算节点公钥和对应的第一运算节点私钥;
将令牌的第一组合转移到第一公共地址:由供应链可信账本***生成从第一公共地址到合约地址的第一指令,以获得令牌的第一组合并将第一组合转移到第一公共地址;从供应链可信账本***向第一运算节点发送第一指令;由第一验证节点使用所述第一对称私钥对第一指令进行签名,以生成第一签名指令;从第一验证节点向令牌***发送第一签名指令;从令牌***向多个验证节点发送第一签名指令;其中所述第一签名指令由所述多个验证节点根据所述第一合约指令来执行;由供应链可信账本***确认已经获得令牌的第一组合,并基于对区块链的引用将其转移到第一公共地址。
可选地,所述方法进一步包括,提供第三预定义密钥对,包括第三对称公钥和相应的第三对称私钥;其中所述第三对称私钥存储在第三验证节点上,所述第三验证节点与所述第一验证节点和所述第二验证节点物理分离;并且其中所述智能合约指令还包括:用于第三预定义密钥对的授权指令;将令牌的第三组合转移到第二公共地址:由供应链可信账本***生成从第三公共地址到第一合约地址的第三指令,以获得令牌的第三组合,并将所述第三组合转移到第二公共地址;向第三验证节点传送第三指令;由第三验证节点使用第三对称私钥对第三指令进行签名,以生成第三签名指令;其中多个验证节点根据所述第一合约指令执行第三签名。
综上所述,本发明提出了一种基于区块链的智能合约供应链可信服务方法,在保持区块链开放性的基础上,基于智能合约机制,通过授权控制实现单个节点对区块链所存储的机密交易信息的访问,有效实现了供应链的可信数据隐私保护。
显然,本领域的技术人员应该理解,上述的本发明的各模块或各步骤可以用通用的计算***来实现,它们可以集中在单个的计算***上,或者分布在多个计算***所组成的网络上,可选地,它们可以用计算***可执行的程序代码来实现,从而,可以将它们存储在存储***中由计算***来执行。这样,本发明不限制于任何特定的硬件和软件结合。
应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。