一种智能合约防篡改方法及装置、设备、存储介质与流程
未命名
07-14
阅读:124
评论:0
1.本技术涉及区块链技术领域,尤其涉及一种智能合约防篡改方法及装置、设备、存储介质。
背景技术:
2.相关技术中,在对智能合约的安全性进行检测时,只能保证该智能合约的静态安全,而对于将智能合约发送到区块链后被篡改的情况,相关技术中没有相应的检测方法。其中,智能合约发送到区块链后被篡改的情况可称为动态篡改。
技术实现要素:
3.本技术实施例为解决相关技术中存在的至少一个问题而提供一种智能合约防篡改方法及装置、设备、存储介质,能够对智能合约动态篡改的情况进行监测,从而避免智能合约被动态篡改。
4.本技术的技术方案是这样实现的:
5.第一方面,本技术实施例提供了一种智能合约防篡改方法,应用于第一节点,所述第一节点为第一区块链中的节点,所述方法包括:
6.确定智能合约的第一指纹;
7.获取第二指纹,所述第二指纹对应于所述智能合约的镜像;
8.将所述第一指纹和所述第二指纹进行比较,得到比较结果;
9.根据所述比较结果,确定所述智能合约是否被篡改。
10.第二方面,本技术实施例提供了一种智能合约防篡改方法,应用于第二节点,所述第二节点为第二区块链中的节点,所述方法包括:
11.发送第二指纹至第一节点;所述第二指纹对应于智能合约的镜像;所述第一节点为第一区块链中的节点,所述第二指纹用于辅助所述第一节点验证所述智能合约是否被篡改。
12.第三方面,本技术实施例提供一种智能合约防篡改装置,所述装置应用于第一节点,所述第一节点为第一区块链中的节点,所述装置包括:
13.第一确定单元,用于确定智能合约的第一指纹;
14.获取单元,用于获取第二指纹,所述第二指纹对应于所述智能合约的镜像;
15.比较单元,用于将所述第一指纹和所述第二指纹进行比较,得到比较结果;
16.第二确定单元,用于根据所述比较结果,确定所述智能合约是否被篡改。
17.第四方面,本技术实施例提供一种智能合约防篡改装置,所述装置应用于第二节点,所述第二节点为第二区块链中的节点,所述装置包括:
18.发送单元,用于发送第二指纹至第一节点;所述第二指纹对应于智能合约的镜像;所述第一节点为第一区块链中的节点,所述第二指纹用于辅助所述第一节点验证所述智能合约是否被篡改。
19.第五方面,本技术实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述智能合约防篡改方法。
20.第六方面,本技术实施例提供一种存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述智能合约防篡改方法。
21.本技术提供了一种智能合约防篡改方法及装置、设备、存储介质,应用于第一节点,所述第一节点为第一区块链中的节点,所述方法包括:确定智能合约的第一指纹;获取第二指纹,所述第二指纹对应于所述智能合约的镜像;将所述第一指纹和所述第二指纹进行比较,得到比较结果;根据所述比较结果,确定所述智能合约是否被篡改。其中,第一指纹是发送至第一节点的智能合约的指纹,第二指纹是第一节点所获取的智能合约的镜像的指纹,在检测智能合约是否被篡改时,是根据第一指纹和第二指纹进行比较后得到的比较结果所确定的,从而能够对智能合约发送到第一节点后被篡改的情况进行监测,进而可以避免智能合约在发送至第一节点后被篡改。
附图说明
22.图1a为本技术实施例提供的一种区块链系统的可选的结构示意图;
23.图1b为本技术实施例提供的一种区块链系统的结构示意图;
24.图2为本技术实施例提供的一种智能合约防篡改方法的可选的流程示意图;
25.图3a为本技术实施例提供的一种第一节点的可选的结构示意图;
26.图3b为本技术实施例提供的一种第一节点的可选的结构示意图;
27.图3c为本技术实施例提供的一种第一节点的可选的结构示意图;
28.图4为本技术实施例提供的一种智能合约防篡改方法的可选的流程示意图;
29.图5为本技术实施例提供的一种智能合约防篡改方法的可选的流程示意图;
30.图6为本技术实施例提供的一种智能合约防篡改方法的可选的流程示意图;
31.图7为本技术实施例提供的一种智能合约防篡改方法的可选的流程示意图;
32.图8为本技术实施例提供的一种区块链系统的结构示意图;
33.图9为本技术实施例提供的一种智能合约防篡改方法的可选的流程示意图;
34.图10为本技术实施例提供的一种智能合约防篡改方法的可选的流程示意图;
35.图11为本技术实施例提供的一种智能合约防篡改方法的可选的流程示意图;
36.图12为本技术实施例提供的一种智能合约防篡改方法的可选的流程示意图;
37.图13为本技术实施例提供的一种智能合约防篡改方法的可选的流程示意图;
38.图14为本技术实施例提供的一种第一节点的可选的结构示意图;
39.图15为本技术实施例提供的智能合约防篡改装置的可选的结构示意图;
40.图16为本技术实施例提供的智能合约防篡改装置的可选的结构示意图;
41.图17为本技术实施例提供的电子设备的可选的结构示意图。
具体实施方式
42.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对申请的具体技术方案做进一步详细描述。以下实施例用于说明本技术,但不用
来限制本技术的范围。
43.在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
44.在以下的描述中,所涉及的术语“第一\第二\第三”仅是为例区别不同的对象,不代表针对对象的特定排序,不具有先后顺序的限定。可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本技术实施例能够以除了在这里图示或描述的以外的顺序实施。
45.除非另有定义,本文所使用的所有的技术和科学术语与属于本技术的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本技术实施例的目的,不是旨在限制本技术。
46.对本技术进行进一步详细说明之前,对本技术实施例中涉及的名词和术语进行说明,本技术实施例中涉及的名词和术语适用于如下的解释。
47.1)、区块链(blockchain),区块以顺序相连的方式组合成的一种链式数据结构,在每个区块中引用前一个区块或者其子集的哈希值,从而以密码学的方式保证所记录交易的不可篡改和不可伪造。其中,区块为一种数据结构。
48.2)、智能合约,为部署在区块链网络中的合约。
49.本技术实施例提供的智能合约防篡改方法可应用于区块链系统,该区块链系统包括:第一节点和第二节点。其中,第一节点为第一区块链中的节点,第二节点为第二区块链中的节点。
50.这里,第一节点和第二节点可以部署于一个电子设备;或者,第一节点可以单独部署于一个电子设备,第二节点部署于另一个电子设备,本技术实施例对此不进行任何限定。
51.针对第一区块链而言,该第一区块链的数量可以为一个,也可以为多个,本技术实施例对此不进行限定。
52.作为一示例,区块链系统100的结构可如图1a所示,包括:部署在第一区块链101中的第一节点1011和部署在第二区块链102中的第二节点1021。其中,第一节点1011和第二节点1021之间可通过网络进行通信。
53.第一节点1011确定智能合约的第一指纹;获取第二指纹;将第一指纹和第二指纹进行比较,得到比较结果,并根据该比较结果,确定智能合约是否被篡改。其中,第二指纹对应于智能合约的镜像。
54.第二节点1021发送第二指纹至第一节点。其中,第二指纹对应于智能合约的镜像;第一节点为第一区块链中的节点。
55.本技术实施例中,区块链系统还可以包括:第三节点,该第三节点为智能合约的发布节点,第三节点可发送智能合约至第一节点。
56.作为一示例,区块链系统100的结构可如图1b所示,包括:第一节点101、第二节点102和第三节点103。其中,第一节点101和第二节点102之间可通过网络进行通信,第二节点102和第三节点103之间可通过网络进行通信,第一节点101和第三节点103之间可通过网络进行通信。
57.下面,将结合图1a或图1b所示的区块链系统的示意图,对本技术实施例提供的智
能合约防篡改方法及装置、设备和存储介质的各实施例进行说明。
58.本技术实施例提供一种智能合约防篡改方法,如图2所示,应用于第一节点,该第一节点为第一区块链中的节点,包括以下步骤:
59.s201、第一节点确定智能合约的第一指纹。
60.这里,第一指纹为发送至第一节点的智能合约的指纹,第一节点可根据该第一指纹确定智能合约。
61.第一节点可包括运行模块,该运行模块可运行发送至第一节点的智能合约。
62.在一示例中,如图3a所示,第一节点101包括运行模块301,该运行模块301可运行智能合约3011。
63.本技术实施例中,对于智能合约的数量,可以为一个智能合约,也可以为其他数量的智能合约,本技术实施例对此不进行限定。
64.这里,在智能合约的数量为多个的情况下,可根据多个智能合约中每一智能合约的标识(identity document,id),确定智能合约。
65.在一示例中,多个智能合约包括:智能合约1、智能合约2和智能合约3,其中,智能合约1的id为1,智能合约2的id为2,智能合约3的id为3,若id为1,则可根据该id 1,确定该多个智能合约中的智能合约为智能合约1。
66.第一节点还可以包括确定模块,该确定模块可在运行模块运行智能合约后,确定该智能合约的第一指纹。
67.在一示例中,如图3b所示,第一节点101包括:运行模块301和确定模块302。
68.s202、所述第一节点获取第二指纹。
69.这里,第二指纹对应于智能合约的镜像。
70.第一节点还可以包括获取模块,该获取模块可获取第二指纹。
71.在一示例中,如图3c所示,第一节点101包括:运行模块301、确定模块302和获取模块303。
72.s203、所述第一节点将所述第一指纹和所述第二指纹进行比较,得到比较结果。
73.这里,第一节点在确定第一指纹,获取第二指纹后,该第一节点可将第一指纹和第二指纹进行比较,得到比较结果。其中,比较结果可包括:第一指纹和第二指纹相同,或者,第一指纹和第二指纹不同。
74.s204、所述第一节点根据所述比较结果,确定所述智能合约是否被篡改。
75.这里,第一节点在得到比较结果后,该第一节点可根据该比较结果,确定智能合约是否被篡改。
76.若目标结果为第一指纹和第二指纹相同,则表示智能合约未被篡改,若目标结果为第一指纹和第二指纹不同,则表示智能合约被篡改了。
77.本技术实施例提供一种智能合约防篡改方法,应用于第一节点,所述第一节点为第一区块链中的节点,所述方法包括:确定智能合约的第一指纹;获取第二指纹,所述第二指纹对应于所述智能合约的镜像;将所述第一指纹和所述第二指纹进行比较,得到比较结果;根据所述比较结果,确定所述智能合约是否被篡改。其中,第一指纹是发送至第一节点的智能合约的指纹,第二指纹是第一节点所获取的智能合约的镜像的指纹,在检测智能合约是否被篡改时,是根据第一指纹和第二指纹进行比较后得到的比较结果所确定的,从而
能够对智能合约发送到第一节点后被篡改的情况进行监测,进而可以避免智能合约在发送至第一节点后被篡改。
78.在一些实施例中,上述s201包括:第一节点对所述智能合约的程序代码进行编译,生成所述智能合约的镜像;所述第一节点基于所述智能合约的镜像,得到所述第一指纹。
79.这里,在第三节点发送的是智能合约的程序代码的情况下,第一节点在接收智能合约后,可对该智能合约的程序代码进行编译,生成智能合约的镜像,再基于该智能合约的镜像,得到第一指纹。
80.其中,镜像是2进制字节流,基于智能合约的镜像,得到第一指纹包括:将2进制字节流作为输入,通过散列算法变换为固定长度的输出,该输出即为第一指纹。
81.在一些实施例中,如图4所示,所述方法还包括:
82.s401、第一节点接收第三节点发送的所述智能合约。
83.这里,所述第三节点为智能合约的发布节点。
84.第三节点在生成智能合约后,可将生成的智能合约发送至第一节点,该第一节点接收第三节点发送的智能合约。
85.其中,第三节点发送的智能合约,可以是该智能合约的程序代码,也可以是智能合约的镜像,本技术实施例对此不进行限定。
86.在一些实施例中,上述s201包括:基于所述智能合约的镜像,得到所述第一指纹。
87.这里,在第三节点发送的是智能合约的镜像的情况下,第一节点在接收到智能合约的镜像的情况下,该第一节点可直接基于智能合约的镜像,得到第一指纹。
88.在一些实施例中,所述方法还包括:第一节点接收第三节点发送的所述智能合约的镜像,所述第三节点为所述智能合约的发布节点。
89.这里,第一节点还可以接收第三节点发送的智能合约的镜像,在接收到智能合约的镜像后,可直接基于该智能合约的镜像,得到第一指纹。
90.在一些实施例中,如图5所示,所述方法还包括:
91.s501、第一节点发送第一请求至第二节点。
92.这里,第一请求用于请求第二节点发送第二指纹,第二节点为第二区块链中的节点。
93.第一请求包括以下至少一种信息:智能合约的标识;智能合约的版本的标识;第一区块链的标识;所述第一节点的标识。
94.在一示例中,第一请求包括:智能合约的标识。
95.在另一示例中,第一请求包括:智能合约的标识和智能合约的版本的标识。
96.在又一示例中,第一请求包括:智能合约的标识、智能合约的版本的标识和第一区块链的标识。
97.在又一示例中,第一请求包括:智能合约的标识、智能合约的版本的标识、第一区块链的标识和第一节点的标识。
98.对应的,所述获取第二指纹,包括:第一节点接收所述第二节点发送的响应所述第一请求的所述第二指纹。
99.这里,第一节点在向第二节点发送第一请求,第二节点在接收到该第一请求后,该第二节点可响应于该第一请求,向第一节点发送第二指纹,在第二节点发送第二指纹至第
一节点后,第一节点可获取该第二指纹。
100.在一些实施例中,如图6所示,所述方法还包括:
101.s601、第一节点接收第三节点发送的所述智能合约,并对所述智能合约进行编译,得到所述智能合约的镜像。
102.这里,在第三节点将智能合约的程序代码发送至第一节点时,可包括以下两种情况:
103.情况1:节点无关类,即第一节点对智能合约的程序代码进行编译所得到的镜像与该第一节点的环境无关。
104.针对情况1,由于得到的镜像与第一节点的环境无关,因此,可由第三节点直接对智能合约的程序代码进行编译,生成智能合约的镜像,并确定该智能合约的镜像的第二指纹,再将该第二指纹发送至第二节点。
105.情况2:节点依赖类,即第一节点对程序代码智能合约的程序代码进行编译所得到的镜像与该第一节点的环境有关。
106.针对情况2,由于得到的镜像与第一节点的环境有关,因此,将通过第一节点对智能合约的程序代码进行编译,得到智能合约的镜像。
107.s602、所述第一节点基于所述智能合约的镜像,确定所述第二指纹。
108.这里,第一节点在得到智能合约的镜像红藕,该第一节点可基于智能合约的镜像,确定第二指纹。
109.s603、所述第一节点将所述第二指纹发送至所述第三节点,使得所述第三节点将所述第二指纹发送至所述第二节点。
110.这里,第一节点在确定第二指纹后,可将该第二指纹发送至第三节点,从而可以使得第三节点将第二指纹发送至第二节点。
111.本技术实施例提供一种合约防篡改方法,如图7所示,应用于第二节点,所述第二节点为第二区块链中的节点,包括以下步骤:
112.s701、第二节点发送第二指纹至第一节点。
113.这里,第二指纹对应于智能合约的镜像;第一节点为第一区块链中的节点,第二指纹用于辅助第一节点验证智能合约是否被篡改。
114.本技术实施例中,本技术实施例提供一种智能合约防篡改方法,包括以下步骤:
115.步骤801、第一节点确定智能合约的第一指纹。
116.步骤802、第二节点发送第二指纹至所述第一节点。
117.步骤803、所述第一节点获取所述第二指纹。
118.步骤804、所述第一节点将所述第一指纹和所述第二指纹进行比较,得到比较结果。
119.步骤805、所述第一节点根据所述比较结果,确定所述智能合约是否被篡改。
120.其中,对于上述步骤801的解释,请参见上述实施例中s201的描述;对于上述步骤802的解释,请参见上述实施例中s701的描述;对于上述步骤803的解释,请参见上述实施例中s202的描述;对于上述步骤804的解释,请参见上述实施例中s203的描述;对于上述步骤805的解释,请参见上述实施例中s204的描述。
121.在一些实施例中,所述方法还包括:所述第二节点接收第一请求;所述第一请求用
于请求所述第二节点发送所述第二指纹;对应的,所述发送第二指纹至第一节点,包括:响应于所述第一请求,发送所述第二指纹至第一节点。
122.这里,第一节点在发送第一请求至第二节点后,该第二节点将接收第一请求,并响应于该第一请求,发送第二指纹至第一节点。
123.在一些实施例中,所述方法还包括:所述第二节点接收第三节点发送的所述第二指纹,并保存所述第二指纹;所述第三节点为所述智能合约的发布节点。
124.这里,第二节点在接收到第三节点发送的第二指纹后,该第二节点可对接收到的第二指纹进行保存。
125.本技术实施例中,当智能合约因版本过于陈旧需要下线时,可在第二节点上删除该智能合约的第二指纹,或者,可将该智能合约的第二指纹设置为无效状态。
126.在第二节点上删除该智能合约的第二指纹,包括:第三节点发送第三请求至第二节点,第三请求用于请求第二节点删除第二指纹;第二节点在接收到第三请求后,删除第二指纹,并将删除结果发送至第三节点,其中,删除结果用于指示第二节点对第二指纹进行了删除。
127.这里,第三请求包括以下至少一种信息:智能合约的id,智能合约的版本的id。
128.在一示例中,第三请求包括:智能合约的id。
129.在另一示例中,第三请求包括:智能合约的id和智能合约的版本的id。
130.本技术实施例中,当智能合约因版本过于陈旧需要下线时,可在第一节点上删除该智能合约的第一指纹,或者,可将该智能合约的第一指纹设置为无效状态。
131.在第一节点上删除该智能合约的第一指纹,包括:第三节点发送第四请求至第一节点,第四请求用于请求第一节点删除第一指纹;第一节点在接收到第四请求后,删除第一指纹,并将删除结果发送至第三节点,其中,删除结果用于指示第一节点对第一指纹进行了删除。
132.这里,第四请求包括以下至少一种信息:智能合约的id,智能合约的版本的id。
133.本技术实施例中,当智能合约因版本过于陈旧需要下线时,可以仅在第二节点删除第二指纹,或者,仅在第一节点删除第一指纹,或者,在第一节点删除第一指纹和在第二节点删除第二指纹,本技术实施例对此不进行任何限定。
134.智能合约是在区块链系统上定制、部署和运行应用逻辑的主要环节。区块链的使用范围日益广泛,需要依赖智能合约实现应用层逻辑。并且,在应用系统整体升级时,智能合约通常也需要进行升级。现有的区块链,比如:fabric、商用操作系统(enterprise operation system,eos)区块链均允许智能合约进行升级,fabric 2.x甚至允许不同的对等peer节点按照各自的节奏、各自选择时机进行智能合约的升级。
135.目前,智能合约的安全和防篡改面临新的挑战。即使在部署时被验证是安全的智能合约,如果有恶意程序或用户在智能合约被部署后对智能合约进行篡改,比如:以智能合约升级的名义或者升级过程的漏洞对智能合约进行篡改,这样将严重损害业务。
136.目前实现智能合约安全的方式主要是静态安全,该静态安全难以防范动态篡改。其中,动态篡改包括:在部署智能合约后以及运行智能合约的过程中所进行的篡改。
137.相关技术中,实现静态安全的方法包括以下三种:
138.第一、对智能合约进行安全测试。
139.对智能合约的程序的可执行代码进行安全性测试,测试通过后,将智能合约部署到区块链上。
140.对该智能合约进行安全测试的缺点包括:当智能合约处于静态时是安全的,但是一旦部署到区块链上后,区块链的节点将无条件地信任智能合约。此时,将不能发现和防范智能合约被篡改。
141.第二、对智能合约进行形式化验证。
142.对智能合约进行形式化验证,通过符号演算等方式论证智能合约的安全性。
143.对智能合约进行形式化验证的缺点包括:静态安全,不能防范部署到区块链后的智能合约被篡改。
144.第三、代码审计。
145.对智能合约进行代码审计的缺点包括:静态安全,不能防范部署到区块链后的智能合约被篡改。
146.目前智能合约安全的方案主要解决了静态安全,对于动态篡改的考虑相对不足。
147.本技术实施例提供一种智能合约防篡改方法,可以解决智能合约动态篡改的问题,在运行时如果发现动态篡改,可及时采取干预措施。
148.本技术的思路包括以下两种:
149.第一、建立一个镜像指纹区块链,该镜像指纹区块链用于维护所有业务区块链以及所有版本的智能合约镜像的指纹。
150.这里,业务区块链即为上述实施例中所描述的第一区块链。
151.镜像指纹区块链即为上述实施例中所描述的第二区块链。
152.第二、业务区块链的节点常驻有系统进程,该系统进程监测智能合约的镜像,计算该智能合约的镜像的指纹,并与镜像指纹区块链进行比对。若发现不匹配,则认为业务区块链的智能合约被篡改。
153.本技术实施例提供的智能合约防篡改方法,可应用于如图8所示的组网架构,下面将对本技术提供组网架构进行详细描述。
154.如图8所示,新增设备包括:镜像指纹区块链801;升级的设备包括:业务区块链802。
155.本技术实施例提供的智能合约防篡改方法包括以下步骤:
156.步骤1、发布智能合约。
157.当开发者完成智能合约的新版本时,将该智能合约的指纹上传到镜像指纹区块链上。
158.由于区块链技术的差异,因此,发布-部署智能合约的载体包括以下两种情况:
159.情况(a):所发布-部署的智能合约的载体是程序代码,该程序代码需要在区块链的节点上进行编译生成镜像。其中,程序代码是编程源代码或者由原代码衍生出的某种代码。
160.情况(b):所发布-部署的智能合约的载体是镜像。也就是说,先由开发者进行编译生成镜像,再发布-部署到区块链的节点上。
161.这里,针对情况(a),因区块链技术的差异,将导致智能合约在不同计算节点上编译生成的镜像可能相同,也可能不同。因此,本技术提供了2种流程。
162.情况(a1):针对一类区块链技术,比如:节点无关类技术而言,该节点无关类技术对于同一个智能合约程序代码,在不同计算节点上编译生成的镜像完全相同,也就是说,节点无关类技术的编译结果与节点计算环境无关。此时,可以选择下述流程(a1)或者流程(a2)进行处理。其中,流程(a1)的防篡改效果高于流程(a2)的防篡改效果。
163.这里,对于节点无关类技术而言,可采用下述流程(a1)或者流程(a2)中的方法防范智能合约动态篡改的问题。
164.情况(a2):针对另一类区块链技术,比如:节点依赖类技术而言,该节点依赖类技术对于同一个智能合约程序代码,在不同计算节点上编译成的镜像可能不同,也就是说,节点依赖类技术的编译结果与节点计算环境有关,即编译生成的镜像将受到节点计算环境的影响。此时,可选择下述流程(a2)进行处理。
165.这里,针对节点依赖类技术而言,可采用下述流程b中的方法防范智能合约动态篡改的问题。
166.本技术实施例中,将通过下述表1对上述情况进行总结。
167.表1
[0168][0169]
如图9所示,流程(a1)包括以下步骤:
[0170]
步骤a11、开发者开发智能合约程序代码。
[0171]
这里,开发者可以理解为开发者所使用的电子设备,即为上述实施例中所描述的第三节点。
[0172]
步骤a12、开发者进行编译生成镜像,计算镜像指纹。
[0173]
步骤a13、开发者将镜像指纹上传到镜像指纹区块链中。
[0174]
这里,镜像指纹携带有智能合约id和版本号等信息。
[0175]
步骤a14、部署智能合约(程序代码)。
[0176]
步骤a15、由业务区块链编译生成镜像。
[0177]
如图10所示,流程(a2)包括以下步骤:
[0178]
步骤a21、开发者开发智能合约程序代码。
[0179]
步骤a22、部署智能合约(程序代码)。
[0180]
步骤a23、在业务区块链中编译生成镜像,计算指纹。
[0181]
步骤a24、业务区块链向开发者反馈智能合约的镜像的指纹。
[0182]
步骤a25、开发者将智能合约镜像指纹上传到镜像指纹区块链中。
[0183]
这里,智能合约镜像的指纹携带有智能合约id、版本号、区块链id和节点id等信息。
[0184]
如图11所示,流程b中包括以下步骤:
[0185]
步骤b1、开发者开发智能合约程序代码。
[0186]
步骤b2、开发者进行编译生成镜像,计算镜像指纹。
[0187]
步骤b3、开发者将镜像指纹上传到镜像指纹区块链中。
[0188]
这里,镜像指纹携带有智能合约id和版本号等信息。
[0189]
步骤b4、部署智能合约(镜像)。
[0190]
步骤2、核查智能合约。
[0191]
业务区块链节点上的系统进程需定时或者按需核查镜像指纹区块链所部署的智能合约的镜像,计算本地部署的智能合约镜像的指纹,并从镜像指纹区块链中获取对应的指纹进行比对。若不匹配,则说明有篡改。
[0192]
如图12所示,核查智能合约的方法包括以下步骤:
[0193]
s1201、业务区块链计算本地部署的智能合约镜像的指纹。
[0194]
s1202、业务区块链向镜像指纹区块链发送查询镜像指纹的请求。
[0195]
这里,发送查询镜像指纹的请求包括:智能合约id和版本id等信息。
[0196]
针对节点依赖类业务区块链,还需要携带业务区块链id和节点id等信息。
[0197]
s1203、镜像指纹区块链向业务区块链反馈镜像指纹。
[0198]
s1204、业务区块链将本地部署的智能合约镜像的指纹与镜像指纹区块链反馈的镜像指纹进行比较。
[0199]
步骤3、智能合约下线。
[0200]
当某个智能合约因版本过于陈旧需要下线时,需要在镜像指纹区块链上删除对应的指纹。这里,删除对应的指纹可以理解为将对应的指纹设置为无效状态。
[0201]
如图13所示,智能合约下线的方法包括以下步骤:
[0202]
s1301、开发者向镜像指纹区块链请求删除指纹,携带智能合约id、版本id。
[0203]
s1302、镜像指纹区块链删除指纹。
[0204]
s1303、镜像指纹区块链向开发者反馈删除结果。
[0205]
s1304、开发者向业务区块链发送请求下线智能合约。
[0206]
s1305、业务区块链下线对应的智能合约、对应的版本。
[0207]
s1306、业务区块链向开发者反馈下线结果。
[0208]
下面将对本技术实施例提供的业务区块链节点的内部结构进行详细描述。
[0209]
如图14所示,业务区块链节点包括:智能合约运行环境141和系统进程运行环境142,其中,智能合约运行环境141包括:智能合约1411和智能合约1412,系统进程运行环境142包括防篡改检测1421、计算本地指纹1422和查询云端指纹1423。
[0210]
如图14所示,在系统进程运行环境中,新增如下系统级的软件模块:
[0211]
计算本地指纹:负责计算部署本地的智能合约镜像的指纹。
[0212]
查询云端指纹:负责从镜像指纹区块链查询与本地智能合约对应的镜像的指纹。
[0213]
从镜像指纹区块链返回结果中提取开发者签名,验证该签名。
[0214]
这里,开发者签名及验证签名,目的是为了确认智能合约是由事先约定的开发者开发的,而不是其他人冒充开发者开发的。
[0215]
如果是其他人冒充,他开发的可能就是恶意程序。
[0216]
防篡改监测:负责调度“计算本地指纹”、“查询云端指纹”两个模块,完成智能合约镜像的指纹与镜像指纹区块链的云端指纹进行比对,以便确认是否发生篡改。
[0217]
下面将对本技术实施例提供的镜像指纹区块链进行详细描述。
[0218]
针节点无关类业务区块链,镜像指纹区块链的账本的数据结构如表2所示。
[0219]
表2
[0220][0221]
针对节点依赖类业务区块链,镜像指纹区块链的账本的数据结构如下述表3所示。
[0222]
表3
[0223]
[0224][0225]
本技术实施例中,当开发者开发完成新版本智能合约时,需要将新版本智能合约镜像的指纹输入到镜像指纹区块链中。
[0226]
其中,输入参数为结构化数据。
[0227]
比如:对于“节点无关类”业务区块链,输入参数可包括:智能合约id、版本id、指纹,状态(可用),开发者签名
[0228]
对于“节点依赖类”业务区块链,输入参数可包括:智能合约id、版本id、业务区块链id、节点id、指纹,状态(可用),开发者签名
[0229]
在账本中追加上述结构化数据,并验证开发者签名。
[0230]
输出:写入结果(是否成功)
[0231]
业务区块链的节点请求查询智能合约和版本的镜像指纹。
[0232]
场景:业务区块链的节点请求查询某智能合约、某版本的镜像指纹。
[0233]
输入:输入参数是个结构化数据。
[0234]
比如:对于“节点无关类”业务区块链,输入参数可包括:智能合约id、版本id。
[0235]
对于“节点依赖类”业务区块链,输入参数可包括:智能合约id、版本id、业务区块链id、节点id。
[0236]
在账本中查询述结构化数据,可验证开发者签名。
[0237]
输出:结构化数据。
[0238]
场景:当开发者决定将某智能合约、某版本下线时,需要将指纹从该区块链下线,即记录为“已下线状态”。
[0239]
输入:输入参数是个结构化数据,该结构化数据可包括:智能合约id、版本id,开发者签名
[0240]
逻辑:在账本中将对应的智能合约、版本的指纹的状态记录为已下线状态,验证开发者签名。其中,可以验证开发者签名,也可以不验证开发者签名,本技术实施例对此不进行任何限定。
[0241]
输出:写链的结果,即是否成功的结果。
[0242]
针对智能合约id,智能合约id需要保证全局唯一。本技术不限定智能合约id的编码方法,比如:业务区块链id、智能合约id或者版本id。
[0243]
在计算指纹时,输入参数可包括以下至少一种:智能合约镜像的代码、智能合约id、智能合约版本id、业务区块链id、节点id。其中,针对智能合约镜像的代码,该智能合约镜像的代码是必选的参数;针对节点id,对于节点无关类业务区块链,无需此参数;对于节点依赖类业务区块链,此参数为可选。
[0244]
算法:本发明不限定智能合约镜像指纹的计算方法。如sha-256。
[0245]
本技术的要点在于:支持动态核验智能合约是否被篡改。
[0246]
本技术的关键点包括以下几点:
[0247]
(1)、建立一个镜像指纹区块链,维护所有业务区块链的、所有版本的智能合约镜像的指纹。
[0248]
(2)、维护镜像指纹的设备本身是区块链,具备防篡改可追溯的特点,提升了指纹核验的安全可信性。
[0249]
(3)、业务区块链节点的系统进程监测本地部署的智能合约镜像,计算指纹;并从镜像指纹区块链查询对应的指纹,进行比对。如果发现不匹配,则认为业务区块链的智能合约被篡改。
[0250]
本技术实施例提供的智能合约防篡改方法具有的有益效果包括:支持动态核查智能合约是否被篡改。通过镜像指纹区块链在云侧部署智能合约指纹,使得部署指纹与部署智能合约分离,避免由于业务区块链被攻击导致无法验证智能合约的真伪。
[0251]
图15为本技术实施例提供的一种智能合约防篡改装置,如图15所示,合约防篡改装置1500应用于第一节点,所述第一节点为第一区块链中的节点,所述装置1500包括:
[0252]
第一确定单元1501,用于确定智能合约的第一指纹;
[0253]
获取单元1502,用于获取第二指纹,所述第二指纹对应于所述智能合约的镜像;
[0254]
比较单元1503,用于将所述第一指纹和所述第二指纹进行比较,得到比较结果;
[0255]
第二确定单元1504,用于根据所述比较结果,确定所述智能合约是否被篡改。
[0256]
在一些实施例中,第一确定单元1501,还用于:
[0257]
对所述智能合约的程序代码进行编译,生成所述智能合约的镜像;
[0258]
基于所述智能合约的镜像,得到所述第一指纹。
[0259]
在一些实施例中,装置还包括:第一接收单元,用于:
[0260]
接收第三节点发送的所述智能合约,所述第三节点为所述智能合约的发布节点。
[0261]
在一些实施例中,第一确定单元1501,还用于:
[0262]
基于所述智能合约的镜像,得到所述第一指纹。
[0263]
在一些实施例中,第一接收单元,还用于:
[0264]
接收第三节点发送的所述智能合约的镜像,所述第三节点为所述智能合约的发布节点。
[0265]
在一些实施例中,装置还包括:处理单元,用于:
[0266]
发送第一请求至第二节点;所述第一请求用于请求所述第二节点发送所述第二指纹;所述第二节点为第二区块链中的节点;
[0267]
获取单元1502,还用于:
[0268]
接收所述第二节点发送的响应所述第一请求的所述第二指纹。
[0269]
在一些实施例中,第一接收单元,还用于:
[0270]
接收第三节点发送的所述智能合约,并对所述智能合约进行编译,得到所述智能合约的镜像;
[0271]
基于所述智能合约的镜像,确定所述第二指纹;
[0272]
将所述第二指纹发送至所述第三节点,使得所述第三节点将所述第二指纹发送至所述第二节点。
[0273]
图16为本技术实施例提供的一种智能合约防篡改装置,如图16所示,智能合约防篡改装置1600应用于第二节点,所述第二节点为第二区块链中的节点,所述装置1600包括:
[0274]
发送单元1601,用于发送第二指纹至第一节点;所述第二指纹对应于智能合约的镜像;所述第一节点为第一区块链中的节点,所述第二指纹用于辅助所述第一节点验证所述智能合约是否被篡改。
[0275]
在一些实施例中,装置还包括:第二接收单元,用于:
[0276]
接收第一请求;所述第一请求用于请求所述第二节点发送所述第二指纹;
[0277]
发送单元1601,还用于响应于所述第一请求,发送所述第二指纹至第一节点。
[0278]
在一些实施例中,第二接收单元,还用于:
[0279]
接收第三节点发送的所述第二指纹,并保存所述第二指纹;所述第三节点为所述智能合约的发布节点。
[0280]
需要说明的是,本技术实施例提供的信息处理装置所包括的各单元,可以通过电子设备中的处理器来实现;当然也可通过具体的逻辑电路实现;在实施的过程中,处理器可以为中央处理器(cpu,central processing unit)、微处理器(mpu,micro processor unit)、数字信号处理器(dsp,digital signal processor)或现场可编程门阵列(fpga,field-programmable gate array)等。
[0281]
以上装置实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本技术实施例装置实施例中未披露的技术细节,请参照本技术实施例方法实施例的描述而理解。
[0282]
需要说明的是,本技术实施例中,如果以软件功能模块的形式实现上述的信息处理方法,并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本技术实施例各个实施例所述方法的全部或部分。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read only memory,rom)、磁碟或者光盘等各种可以存储程序代码的介质。这样,本技术实施例不限制于任何特定的硬件和软件结合。
[0283]
本技术实施例还提供一种电子备,包括存储器、处理器及存储在存储器上并可在
处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一节点或第二节点实施的智能合约防篡改方法。
[0284]
本技术实施例还提供了一种存储介质,存储有计算机程序,所述计算机程序被处理器执行时,实现上述第一节点或第二节点实施的智能合约防篡改方法。
[0285]
这里需要指出的是:以上对存储介质实施例的描述,与上述方法实施例的描述是类似的,具有同方法实施例相似的有益效果。对于本技术实施例存储介质和设备实施例中未披露的技术细节,请参照本技术实施例方法实施例的描述而理解。
[0286]
需要说明的是,图17为本技术实施例电子设备的一种硬件实体示意图,如图17所示,所述电子设备1700包括:一个处理器1701、至少一个通信总线1702、至少一个外部通信接口1704和存储器1705。其中,通信总线1702配置为实现这些组件之间的连接通信。在一示例中,电子设备1700还包括:用户接口1703、其中,用户接口1703可以包括显示屏,外部通信接口1704可以包括标准的有线接口和无线接口。
[0287]
存储器1705配置为存储由处理器1701可执行的指令和应用,还可以缓存待处理器1701以及电子设备中各模块待处理或已经处理的数据(例如,图像数据、音频数据、和通信数据),可以通过闪存(flash)或随机访问存储器(random access memory,ram)实现。
[0288]
应理解,说明书通篇中提到的“一个实施例”或“一实施例”意味着与实施例有关的特定特征、结构或特性包括在本技术实施例的至少一个实施例中。因此,在整个说明书各处出现的“在一个实施例中”或“在一些实施例中”未必一定指相同的实施例。此外,这些特定的特征、结构或特性可以任意适合的方式结合在一个或多个实施例中。应理解,在本技术实施例的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。上述本技术实施例序号仅仅为了描述,不代表实施例的优劣。
[0289]
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
[0290]
在本技术实施例所提供的几个实施例中,应该理解到,所揭露的设备和方法,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
[0291]
上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元;既可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
[0292]
另外,在本技术实施例各实施例中的各功能单元可以全部集成在一个处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式
实现。
[0293]
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储设备、rom、磁碟或者光盘等各种可以存储程序代码的介质。
[0294]
或者,本技术实施例上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器、或者网络设备等)执行本技术实施例各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储设备、rom、磁碟或者光盘等各种可以存储程序代码的介质。
[0295]
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
技术特征:
1.一种智能合约防篡改方法,其特征在于,应用于第一节点,所述第一节点为第一区块链中的节点,所述方法包括:确定智能合约的第一指纹;获取第二指纹,所述第二指纹对应于所述智能合约的镜像;将所述第一指纹和所述第二指纹进行比较,得到比较结果;根据所述比较结果,确定所述智能合约是否被篡改。2.根据权利要求1所述的方法,其特征在于,所述确定智能合约的第一指纹,包括:对所述智能合约的程序代码进行编译,生成所述智能合约的镜像;基于所述智能合约的镜像,得到所述第一指纹。3.根据权利要求1所述的方法,其特征在于,所述方法还包括:接收第三节点发送的所述智能合约,所述第三节点为所述智能合约的发布节点。4.根据权利要求1所述的方法,其特征在于,所述确定智能合约的第一指纹,包括:基于所述智能合约的镜像,得到所述第一指纹。5.根据权利要求4所述的方法,其特征在于,所述方法还包括:接收第三节点发送的所述智能合约的镜像,所述第三节点为所述智能合约的发布节点。6.根据权利要求1所述的方法,其特征在于,所述方法还包括:发送第一请求至第二节点;所述第一请求用于请求所述第二节点发送所述第二指纹;所述第二节点为第二区块链中的节点;对应的,所述获取第二指纹,包括:接收所述第二节点发送的响应所述第一请求的所述第二指纹。7.根据权利要求1所述的方法,其特征在于,所述方法还包括:接收第三节点发送的所述智能合约,并对所述智能合约进行编译,得到所述智能合约的镜像;基于所述智能合约的镜像,确定所述第二指纹;将所述第二指纹发送至所述第三节点,使得所述第三节点将所述第二指纹发送至所述第二节点。8.一种智能合约防篡改方法,其特征在于,应用于第二节点,所述第二节点为第二区块链中的节点,所述方法包括:发送第二指纹至第一节点;所述第二指纹对应于智能合约的镜像;所述第一节点为第一区块链中的节点,所述第二指纹用于辅助所述第一节点验证所述智能合约是否被篡改。9.根据权利要求8所述的方法,其特征在于,所述方法还包括:接收第一请求;所述第一请求用于请求所述第二节点发送所述第二指纹;对应的,所述发送第二指纹至第一节点,包括:响应于所述第一请求,发送所述第二指纹至第一节点。10.根据权利要求8所述的方法,其特征在于,所述方法还包括:接收第三节点发送的所述第二指纹,并保存所述第二指纹;所述第三节点为所述智能合约的发布节点。11.一种智能合约防篡改装置,其特征在于,所述装置应用于第一节点,所述第一节点
为第一区块链中的节点,所述装置包括:第一确定单元,用于确定智能合约的第一指纹;获取单元,用于获取第二指纹,所述第二指纹对应于所述智能合约的镜像;比较单元,用于将所述第一指纹和所述第二指纹进行比较,得到比较结果;第二确定单元,用于根据所述比较结果,确定所述智能合约是否被篡改。12.一种智能合约防篡改装置,其特征在于,所述装置应用于第二节点,所述第二节点为第二区块链中的节点,所述装置包括:发送单元,用于发送第二指纹至第一节点;所述第二指纹对应于智能合约的镜像;所述第一节点为第一区块链中的节点,所述第二指纹用于辅助所述第一节点验证所述智能合约是否被篡改。13.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时,实现权利要求1至7任一项所述的智能合约防篡改方法,或者,实现权利要求8至10任一项所述的智能合约防篡改方法。14.一种存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现权利要求1至7任一项所述的智能合约防篡改方法,或者,实现权利要求8至10任一项所述的智能合约防篡改方法。
技术总结
本申请公开了一种智能合约防篡改方法,应用于第一节点,所述第一节点为第一区块链中的节点,所述方法包括:确定智能合约的第一指纹;获取第二指纹,所述第二指纹对应于所述智能合约的镜像;将所述第一指纹和所述第二指纹进行比较,得到比较结果;根据所述比较结果,确定所述智能合约是否被篡改。另外,本申请还公开了一种智能合约防篡改装置、设备、存储介质。本申请提供的智能合约防篡改方法及装置,设备、存储介质,能够对智能合约动态篡改的情况进行监测,从而避免智能合约被动态篡改。从而避免智能合约被动态篡改。从而避免智能合约被动态篡改。
技术研发人员:董文宇 杭小勇 杨林 粟栗 何申
受保护的技术使用者:中国移动通信集团有限公司
技术研发日:2021.12.30
技术公布日:2023/7/13
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
