一种基于区块链技术的工业控制系统操作记录的存储方法转让专利

申请号 : CN201810864858.0

文献号 : CN109040235B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 余臻叶韩军刘利军

申请人 : 厦门大学

摘要 :

一种基于区块链技术的工业控制系统操作记录的存储方法,涉及工业控制系统中操作记录的存储。在计算机中进行OPC环境配置,在组态软件中新建相关变量,并设置为OPC服务器;利用Java和Tomcat构建Java Web服务器作为中继系统并实现组态软件与区块链网络通信;利用开源的公共区块链平台——以太坊在工业控制系统所在的网络中搭建区块链私链网络;使用以太坊的Truffle框架构建分布式应用,编写代码实现智能合约部署以及与星际文件系统交互。利用区块链技术的去中心化以及数据永久性和不可篡改性,将操作记录信息存储到区块链网络中,从而解决了传统工业控制系统中对操作记录容易被篡改以及破坏的问题。

权利要求 :

1.一种基于区块链技术的工业控制系统操作记录的存储方法,其特征在于其具体步骤如下:步骤一:在计算机中进行OPC环境配置,在组态软件中新建相关变量,并设置为OPC服务器,具体方法为:

1)在计算机中安装OPC驱动,并对计算机进行OPC服务器所需环境配置;

2)在组态软件中新建字符串类型的变量record,用来存储操作记录数据,并将组态软件设置为OPC服务器;

步骤二:利用Java和Tomcat构建Java Web服务器作为中继系统并实现组态软件与区块链网络通信,具体方法为:

1)利用Java和Tomcat搭建Java Web服务器;

2)在Java Web中调用Utgard与OPC服务器通信;

3)在Java Web中定义WebSocket服务器,使其与区块链网络分布式应用通信;

4)设置Java Web项目部署的网络端口号;

5)与分布式应用通信;

步骤三:利用开源的公共区块链平台——以太坊在工业控制系统所在的网络中搭建区块链私链网络,具体方法为:

1)在计算机中安装区块链开发平台以太坊所需环境;

2)新建区块链创世区块;

3)启动区块链私链节点;

4)在需要作为区块链节点的每一台计算机中都执行步骤1)~3),至此完成区块链本地私链网络的搭建;

步骤四:使用以太坊的Truffle框架构建分布式应用,编写代码实现智能合约部署以及与星际文件系统交互,具体方法为:

1)使用Truffle框架编写代码实现分布式应用通过Websocket接口接收步骤二中继系统中发送来的操作记录字符串数据;

2)编写代码将该操作记录字符串数据存入星级文件系统,返回一个唯一的Hash值作为寻址地址;

3)编写智能合约并部署在步骤三中搭建的区块链私链上,将步骤2)中的Hash存入到该智能合约中;

4)通过存储在智能合约中唯一的Hash值,在星级文件系统中进行寻址查询到相应的操作记录数据。

说明书 :

一种基于区块链技术的工业控制系统操作记录的存储方法

技术领域

[0001] 本发明涉及工业控制系统中操作记录的存储,具体涉及一种基于区块链技术的工业控制系统操作记录的存储方法。

背景技术

[0002] 工业控制系统(ICS)涵盖了多种类型的控制系统,包括监控系统、数据采集系统、分布式控制系统以及可编程逻辑控制器等。工业控制系统大量应用于电力、水利、石油、化工、运输以及各种制造业等领域。而在工业控制系统通常会涉及到操作人员对设备以及系统进行操作。对操作记录信息进行存储是一个非常重要的功能,因为一旦系统发生故障甚至是事故,通过查看操作记录信息来分析故障以及事故发生的原因是一个重要的依据。传统的存储方法一般是在本地服务器建立一个数据库,将操作记录信息存储在数据库中。但是本地的数据库中的数据极易受到篡改甚至破坏,影响故障或者事故的原因分析,会对整个系统的安全性带来严重的威胁。
[0003] 区块链具有去中心化、时序数据、集体维护、可编程和安全可信等特点(袁勇,王飞跃.区块链技术发展现状与展望[J].自动化学报,2016,42(4):481-494)。首区块链本质上是一个去中心化的数据库,是由一串使用密码学方法产生的数据块组成的,每一个区间都包含上一个区块的哈希值,从创始区块开始连接到当前区块,形成块链。每一个区块都确保按照时间顺序在上一个区块之后产生,否则前一个区块的哈希值是未知的。同时所有的数据在网路中的每个节点都有备份,所以保证了区块链中的数据永久保存,而且无法篡改。所以利用该特点对工业控制系统中操作记录信息进行存储是一个解决操作记录被篡改甚至破坏的有效解决方法。
[0004] 由于在区块链直接存储数据有大小限制,而且存储大文件时消耗算力过大,同时由于在区块链主网上存储的数据是全网公开的,所以直接将工业控制系统中的操作记录存储到区块链中并不合适,考虑利用星际文件系统(IPFS)进行数据存储。星际文件系统是一个是永久的、去中心化保存和共享文件的点对点超媒体的分布式协议,而且内容可寻址。

发明内容

[0005] 本发明的目的在于解决现有技术对工业控制系统中操作记录的存储易被篡改和破坏的问题,提供一种基于区块链技术的工业控制系统操作记录的存储方法。
[0006] 本发明的具体步骤如下:
[0007] 步骤一:在计算机中进行OPC环境配置,在组态软件中新建相关变量,并设置为OPC服务器;
[0008] 在步骤一中,所述在计算机中进行OPC环境配置,在组态软件中新建相关变量,并设置为OPC服务器的具体方法可为:
[0009] 1)在计算机中安装OPC驱动,并对计算机进行OPC服务器所需环境配置;
[0010] 2)在组态软件中新建字符串类型的变量record,用来存储操作记录数据,并将组态软件设置为OPC服务器。
[0011] 步骤二:利用Java和Tomcat构建Java Web服务器作为中继系统并实现组态软件与区块链网络通信;
[0012] 在步骤二中,所述利用Java和Tomcat构建Java Web服务器作为中继系统并实现组态软件与区块链网络通信的具体方法可为:
[0013] 1)利用Java和Tomcat搭建Java Web服务器;
[0014] 2)在Java Web中调用Utgard与OPC服务器(即组态软件)通信;
[0015] 3)在Java Web中定义WebSocket服务器,使其与区块链网络分布式应用(DAPP)通信;
[0016] 4)设置Java Web项目部署的网络端口号;
[0017] 5)与分布式应用(DAPP)通信。
[0018] 步骤三:利用开源的公共区块链平台——以太坊在工业控制系统所在的网络中搭建区块链私链网络;
[0019] 在步骤三中,所述利用开源的公共区块链平台——以太坊在工业控制系统所在的网络中搭建区块链私链网络的具体方法可为:
[0020] 1)在计算机中安装区块链开发平台以太坊所需环境;
[0021] 2)新建区块链创世区块;
[0022] 3)启动区块链私链节点;
[0023] 4)在需要作为区块链节点的每一台计算机中都执行上述1)、2)和3)的步骤,至此完成区块链本地私链网络的搭建。
[0024] 步骤四:使用以太坊的Truffle框架构建分布式应用(DAPP),编写代码实现智能合约部署以及与星际文件系统(IPFS)交互。
[0025] 在步骤四中,所述使用以太坊的Truffle框架构建分布式应用(DAPP),编写代码实现智能合约部署以及与星际文件系统(IPFS)交互的具体方法可为:
[0026] 1)使用Truffle框架编写代码实现分布式应用(DAPP)通过Websocket接口接收步骤二中继系统中发送来的操作记录字符串数据;
[0027] 2)编写代码将该操作记录字符串数据存入星级文件系统(IPFS),返回一个唯一的Hash值作为寻址地址;
[0028] 3)编写智能合约并部署在步骤三中搭建的区块链私链上,将步骤2)中的Hash存入到该智能合约中;
[0029] 4)通过存储在智能合约中唯一的Hash值,可以在星级文件系统(IPFS)中进行寻址查询到相应的操作记录数据。
[0030] 本发明是通过以下技术方案实现的:
[0031] 用户使用工业控制系统中的组态软件对系统进行操作后形成操作记录信息,使用Java编程语言和Tomcat搭建Java Web服务器作为数据的中继系统,组态软件通过Jopc接口将操作记录信息发送至Java Web服务器。利用以太坊平台在网路中搭建区块链和分布式应用(DAPP),中继系统将接收到的数据转发到分布式应用(DAPP),实现了工业控制系统操作记录与区块链分布式应用的数据交互。然后分布式应用将收到的操作记录数据存储到星际存储系统(IPFS)中,星级存储系统会返回一个唯一的Hash值作为寻址地址,再将该Hash值存储到区块链的智能合约中,凭借该Hash值读取相应的操作记录信息,从而实现了工业控制系统中操作记录在区块链上的存储。
[0032] 本发明利用Java搭建的Java Web服务器作为工业控制系统中的组态软件和区块链中分布式应用(DAPP)通信的中继系统,实现工业控制系统中操作记录数据到区块链网络的数据交互。由于直接在区块链的网络中存储数据有大小限制以及透明性问题,因此将操作记录存储在数据星际文件系统(DAPP)中,并返回一个唯一的Hash值,将Hash存储到区块链的智能合约中。这样实现了工业控制系统中操作记录的存储,同时也保证了该数据的永久性和不可篡改。
[0033] 与现有的技术相比,本发明的有益效果为:
[0034] 传统的工业控制系统大多是在本地服务器建立数据库来存储操作记录信息,存在被不法分子篡改或破坏的问题。而本发明利用区块链技术的去中心化以及数据永久性和不可篡改性,将操作记录信息存储到区块链网络中,从而解决了传统工业控制系统中对操作记录容易被篡改以及破坏的问题。

附图说明

[0035] 图1为基于区块链技术的工业控制中操作记录的存储系统框图;
[0036] 图2为本发明实施流程图;
[0037] 图3为本发明实施例步骤二中搭建的中继系统程序执行流程图;
[0038] 图4为本发明实施例步骤四中搭建的分布式应用DAPP程序执行流程图。

具体实施方式

[0039] 以下实施例将结合附图对本发明作进一步的说明。
[0040] 参见图1和2,本发明针对基于区块链技术的工业控制系统中的操作记录的存储方法具体按照以下步骤实施:
[0041] 步骤一:在计算机中进行OPC环境配置,在组态软件中新建相关变量,并设置为OPC服务器。
[0042] 1)首先在计算机中安装OPC驱动,并对计算机进行OPC服务器所需环境配置。
[0043] 在计算机中安装OPC驱动OPC Core Components Redistributable。对DCOM进行如下配置:
[0044] a)在Windows防火墙管理界面上配置允许组态软件访问权限以及开放OPC通讯135端口;
[0045] b)运行dcomcnfg服务器,进入“我的电脑”属性配置,进入默认属性页面,勾选“在这台计算机上启用分布式COM”,将默认身份级别改为“无”,进入默认安全机制页面,确认访问权限和默认启动权限中的默认值无EveryOne;
[0046] c)在DCOM配置中进入对应OPC软件的属性配置,将常规页面中的身份验证级别改为“无”、勾选“在这台计算机上运行应用程序”、勾选“在这台计算机上运行应用程序”,身份标识页面中,选择“交互式用户”。
[0047] 2)在组态软件中新建字符串类型的变量record,用来存储操作记录数据,并将组态软件设置为OPC服务器:
[0048] a)在组态软件中新建字符串类型的变量,变量名为record,当用户使用组态软件对操作系统进行操作时,组态软件便会生成一条操作记录字符串数据存入变量record。该数据包含日期、时间、操作员以及操作事件,如“某年某月某日10时20分15秒,张三手动启动1#泵房2#水泵”。
[0049] b)在组态软件将自身设置为OPC服务器,设置其读写方式为“异步读”和“异步写”,设置当通信故障时恢复策略等,使a)中的record数据可以通过OPC通信被外部应用实时读取。
[0050] 步骤二:参见图3,利用Java和Tomcat构建Java Web服务器作为中继系统并实现组态软件与区块链网络通信。
[0051] 1)利用Java和Tomcat搭建Java Web服务器。
[0052] 在Eclipse编程环境下,利用Java编程语言新建Java Web项目,并将该项目部署在Tomcat服务上,利用该服务器作为组态软件和区块链网络的中继系统,完成数据交互的作用。
[0053] 2)在Java Web中调用Utgard与OPC服务器(即组态软件)通信:
[0054] a)项目中新建OPC服务器的配置文件,该文件包含该OPC服务器所在主机的IP地址、用户名、密码以及OPC服务器(即组态软件)的clsId,该clsId是windows系统对于不同应用程序分配一个唯一表示他的ID代码,用于对其身份的标示和与其他对象进行区分。
[0055] b)加载a)中新建的配置文件,获取主机IP、用户名、密码和clsId等基础的连接信息,然后连接对应的OPC服务器(即组态软件);
[0056] c)新建OPC分组group,把组态软件中的操作记录变量record添加到分组group中;
[0057] d)判断与OPC服务器连接是否成功,如成功,则读取record的值;如未连接成功,则尝试再次连接。
[0058] 3)在Java Web中定义WebSocket服务器,使其与区块链网络分布式应用(DAPP)通信:
[0059] a)在项目中使用注解@ServerEndPoint定义一个WebSocket服务器,注解的值作为监听用户连接的终端(本发明即区块链分布式应用DAPP)访问的URL地址;
[0060] b)在项目中使用注解@OnOpen、@OnClose和@OnMessage分别定义连接成功调用的方法、连接关闭调用的方法和收到客户端(DAPP)发送的消息后调用的方法。
[0061] 4)设置Java Web项目部署的网络端口号。
[0062] 在Eclipse编译环境中对本Web项目的网络端口后进行设置,本实施例中将其设置为11111。
[0063] 5)与分布式应用(DAPP)通信。
[0064] 判断与客户端分布式应用是否连接成功,如连接成功,则将变量record的值发送给分布式应用;如未连接成功,则不发送。
[0065] 步骤三:利用开源的公共区块链平台——以太坊在工业控制系统所在的网络中搭建区块链私链网络:
[0066] 1)在计算机中安装区块链开发平台以太坊所需环境。
[0067] 所有需要连入区块链网络的计算机称为区块链的节点,在每个节点的计算机中安装区块链开源平台以太坊以及智能合约开发所需环境,有git、go、ethereum、nodejs、npm、geth、truffle和rpc等;
[0068] 2)新建区块链创世区块:
[0069] a)在计算机中新建一个genesis.json文件,作为创世区块,它是区块链的起点,该文件中定义了这个区块链网络的属性,该文件包含以下信息:
[0070] ①Mixhash、Nonce:配合来证明在区块链上已经做了足够的计算量;
[0071] ②Difficulty:定义挖矿难度;
[0072] ③Alloc:预先填入一些余额;
[0073] ④Coinbase:钱包地址;
[0074] ⑤Timestamp:时间戳;
[0075] ⑥ParentHash:上一个区块的hash值(创世区块没有上一个区块,所以一般设为0);
[0076] ⑦ExtraData:可以为私链存放一些额外信息;
[0077] ⑧GasLimit:一个区块能消耗的gas上限。
[0078] b)在console控制台中使用语句“geth--datadir"./"init genesis.json”初始化创始区块,将会在当前目录下新增两个文件夹geth和keystore。
[0079] 3)启动区块链私链节点。
[0080] 启动geth就可以启动以太坊的区块链私链,但在启动需要在启动命令中加入一些参数,保证区块链正常运行。参数包含如下:
[0081] ①datadir:当前区块链网络文件存放路径;
[0082] ②identity:区块链的标示,随便填写,用于标示目前网络的名字;
[0083] ③rpc:启动rpc通信,可以进行智能合约的部署和调试;
[0084] ④rpcapi:设置允许连接的rpc的客户端,一般为db,eth,net,web3;
[0085] ⑤networkid:当前区块链的网络ID,同一个区块链中所有节点的ID号必须相同;
[0086] ⑥console:启动命令行模式,可以在Geth中执行命令;
[0087] ⑦rpccorsdomain:指定可以访问APi的domain地址,设置为“*”则任何地址都可以访问。
[0088] 因此,在console控制台中使用语句“geth--datadir"./"-identity"mydev"--rpc--rpcapi"db,eth,net,web3,admin,miner,personal,rpc"--rpccorsdomain"*"--networkid 100console”启动本节点的区块链。
[0089] 4)在需要作为区块链节点的每一台计算机中都执行上述步骤1)~3),至此完成区块链本地私链网络的搭建。
[0090] 步骤四:参见图4,使用以太坊的Truffle框架构建分布式应用(DAPP),编写代码实现智能合约部署以及与星际文件系统(IPFS)交互。
[0091] 1)使用Truffle框架编写代码实现分布式应用(DAPP)通过Websocket接口接收步骤二中继系统中发送来的操作记录字符串数据:
[0092] a)使用WebSocket创建实例对象,其参数为分布式应用要访问的WebSocket服务器,在本实例中即为步骤二中搭建的中继系统,所以参数的形式为:ws://主机IP:端口号/项目名/注解参数。其中主机名为步骤二中的Java Web部署的计算机的IP地址,端口号为步骤二4)中设置的端口号:11111,项目名为Java Web项目名称,注解参数为步骤二3)中的注解的值;创建该对象的过程即为连接WebSocket服务器;
[0093] b)在项目中定义WebSocket的监听器,如在a)中与WebSocket服务器连接成功,监听器便会接收到中继系统发来的操作记录数据record;
[0094] 2)编写代码将该操作记录字符串数据存入星级文件系统(IPFS),返回一个唯一的Hash值作为寻址地址:
[0095] a)启动IPFS节点服务器,设置相关的参数,如主机ID、端口和协议,本实施例中端口为5001,协议为http;
[0096] b)使用a)中的参数连接IPFS网络;
[0097] c)将接收的的操作记录数据record转化成IPFS系统可以处理的数据类型,然后将其存入IPFS系统,如存储成功,则会返回一个唯一的Hash作为寻址地址;如存储失败,则会报错,并尝试再次存储。
[0098] 3)编写智能合约并部署在步骤三中搭建的区块链私链上,将2)中的Hash存入到该智能合约中:
[0099] a)在项目中编写智能合约代码并编译;
[0100] b)将a)中的智能合约部署在步骤三中搭建的区块链私链上,使得区块链上的所有节点都可以获取到该智能合约;
[0101] c)向智能合约发送一笔交易是,将2)中的Hash值存入该智能合约。
[0102] 通过存储在智能合约中的唯一的Hash值,可以在星级文件系统(IPFS)中进行寻址查询到相应的操作记录数据。本发明的突出技术效果如下:利用区块链的数据永久性和不可篡改性的特点,针对工业控制系统中操作记录数据易被篡改和破坏带来的安全问题,构建了基于区块链技术的工业控制系统中操作记录的存储系统。利用Java和Tomcat搭建Java Web服务器作为组态软件和区块链网络的中继系统,实现了工业控制系统与区块链网络的数据交互。同时考虑不适合直接在区块链网络中存储操作记录数据,所有将操作记录数据存储到IPFS中,而将返回的唯一Hash值存储到部署在区块链网络上的智能合约中。通过该Hash值可在IPFS中寻址查询到对于的操作记录数据。而传统的存储方法一般是在本地的服务器建立一个数据库,将操作记录存储到该数据库中,相比而言,本发明的方法可以实现操作记录的永久和不可篡改性,对整个工业控制系统也更加安全。
[0103] 本发明针对工业控制系统中操作记录本地服务器存储情况下易被篡改和破坏的问题,提出一种将操作记录信息存储到区块链网络中的方法,从而解决了传统工业控制系统中对操作记录容易被篡改以及破坏的问题。