孙彦棨,张正道,2+
(1.江南大学 物联网工程学院,江苏 无锡 214122;2.江南大学 教育部物联网技术应用工程中心,江苏 无锡 214122)
工业控制系统(Industrial Control System, ICS)是工业物联网的主要形式之一,已广泛应用于航天、能源、运输等领域[1-3]。随着ICS的开放性与日俱增,其面临的安全隐患也大大增加,主要是攻击者通过内部攻击破坏数据的完整性以达到操控工业过程的目的。因此,与其他工业物联网系统相比,工业控制系统受到攻击后,不仅会造成其信息系统部分的破坏,还将导致其物理系统部分出现严重故障,进而造成人员和财产损失[4]。因此,工业控制系统的安全性保护是一个值得研究的问题。
目前,数据完整性攻击包括:虚假数据注入攻击(False Data Injection attack, FDI)、拒绝服务攻击(Denial-of-Service attack, DoS)、中间人攻击(Man-in-the-Middle attack, MITM)和重放攻击(Replay Attacks),是工业控制系统面临的主要攻击类型[5]。现有的数据完整性保护方案则可以分为基于模型的方案、基于数据的方案和基于密码学的方案3类。其中基于模型的方案需要对ICS建立精确的数学模型;基于数据的方案一般需要大量精确而有效的系统采样数据,易受系统和环境噪声的影响;而基于密码学的方案则要求设备具有足够的计算资源以执行复杂的密码学运算。而ICS不但精确建模困难,数据受噪声影响大,而且计算资源有限。现有方案在应用时均存在局限性。
区块链技术是一种全新的去中心化基础架构和分布式计算范式[6],且具有不可篡改的特性,因此可实现数据完整性保护[7]。文献[8]将区块链与车辆和电网(V2G)相结合,提出一种能源交易认证方案。通过哈希函数与非对称密钥对交易实体进行多方认证。文献[9]提出一种私有的区块链架构管理工业物联网数据,将数据通过非对称密钥进行加密并存储在区块链上以保证数据的完整性。然而,上述方案需要大量计算资源,难以在ICS中进行部署。文献[10]结合区块链与无证书密码学技术提出一种物联网数据分布式存储方案,利用区块链矿工存储与审计物联网数据,消除了传统的中心服务器,避免了单点故障问题。文献[11]提出一种名为ICS-BlockOpS的新型区块链架构,以保护智能工厂中历史数据的安全性,并通过完整性检查机制和数据冗余提高了历史数据的安全性与鲁棒性。然而上述方案没有考虑数据传输过程中的安全性,无法保证数据在存储到区块链分类账之前的真实性。文献[12]提出一种基于区块链的移动边缘计算物联网数据存储与共享方案,通过边缘节点管理区块链网络,采用链上链下双重存储模式,将数据存储地址与其数字签名存储在区块链中,数据以分布式的方式存储在链下数据库中,提高了数据的安全性与容错性。结合基于属性的数字签名算法,文献[13]提出一种雾环境下的基于区块链的物联网数据安全分享方案,通过将区块链操作卸载到雾节点上,提高了方案的可用性与可拓展性,增强了数据传输过程中的可信性。上述方案虽然考虑了物联网设备资源的受限性并作了相应的改进,然而方案所需的通信量较大,在达成共识时存在较大的延迟,难以满足工业生产的实时性要求。
目前区块链在工业控制系统安全的研究主要集中于控制台到服务器的网络级,很少涉及从控制台到现场单元的现场级。相比较而言,从控制台到现场单元的部分具有以下特点:①计算资源更为受限。工业控制系统中的设备普遍存在计算资源受限问题。而在现场级,参与运行的主要是传感器、智能仪表、可编程逻辑控制器和少量工业控制计算机,它们拥有的计算资源无法支持复杂计算。②通信能力受限。现场级的通信一般依托现场总线完成,不但缺乏安全性措施,而且通信速率低、通信延时大。因此,现有区块链方案难以满足ICS中的安全性需求与可用性需求。为此,本文提出一种用于保护ICS数据完整性的区块链方案。首先,为降低系统的计算与通信开销,提出一种随机验证机制,从网络中随机选择部分节点参与区块链共识过程。该机制利用随机局部节点取代了全体节点参与共识过程,在降低计算与通信开销的同时还给攻击者带来了不确定性。其次,提出一种新型共识模型,按照共识节点的状态采用不同的共识策略。该模型进一步节约了系统通信资源,有效避免了节点之间的无效通信,最大程度降低了共识过程的延迟与通信量。通过安全分析以及在半实物仿真平台进行性能仿真验证了本文方案对于ICS的有效性。
本文讨论的工业控制系统模型如图1所示,其中现场级主要包括现场仪表与传感器、控制器和控制台3类实体。具体描述如下:
(1)现场仪表与传感器 由各种控制仪表或传感器组成,用于获取实时工业数据并上传控制器。
(2)控制器(Control Unit, CU) 如可编程逻辑控制器(Programmable Logic Controller, PLC)等,获取现场仪表与传感器的测量数据,并进行数据预处理。
(3)控制台(Industrial Control Console, ICC) 一般为工业控制计算机,是拟议模型的中心节点。通过现场总线网络与控制器相连接,并接收控制器预处理测量数据与下达控制命令。
由于传统区块链方案资源要求高、通信量大,不适用于资源有限、实时性要求高的工业生产环境。对此,本文基于授权的方式构建了一个许可的私有区块链网络[14]。根据设备资源的多少,设置资源较少的控制器作为轻节点,资源较强的控制台作为全节点。现场仪表与传感器仅用于采集工业数据,并不实现区块链逻辑。在许可的私有区块链网络中,轻节点负责将所属现场仪表与传感器上传的数据生成区块链交易并在网络中广播,同时验证网络中广播的区块链交易。全节点负责验证网络中广播的区块链交易,并生成区块链账本。
本文提出的基于区块链数据完整性保护方案主要包括区块链网络初始化、区块链交易生成、动态随机验证、共识过程以及区块链分类账更新5个阶段,方案的具体执行逻辑如算法1所示。
算法1拟议方案的执行逻辑。
1:for all CUs, ICC do
2: 执行区块链网络初始化过程
3:end for
4:for CUs do
5: 执行区块链交易生成过程
6: for VNs, ICC do//验证节点(VNs)
7: 执行动态随机验证过程与共识过程
8: for ICC do
9: 执行区块链账本更新过程
10: end for
11: end for
12:end for
拟议方案首先需要初始化。ICC为注册中心,节点在加入区块链网络之前,需要在ICC进行注册以获取数字证书。假设网络中有N个节点,即{ICC,CU1,CU2,…,CUN-1}。采用文献[15]的密钥分发机制,每个节点需要一对非对称密钥来收发信息。因此,在初始化之前,网络中的节点在本地生成一对公私钥,其中CUi的密钥对表示为(PKi,SKi),ICC密钥对表示为(ICCPK,ICCSK)。
首先,CUi(i=1,…,N-1)利用自身MAC地址和随机数组合的哈希值生成唯一的身份标识符OIDi。然后,CUi向ICC发送注册请求(Mi),即
Mi=EncICCPK{signSKi(OIDi,TS,noncei)}。
(1)
式中:EncICCPK表示Mi通过ICC的公钥ICCPK进行加密;signSKi表示CUi的私钥签名;TS表示时间戳;noncei表示随机值,其用于发起回应挑战,如果ICC可以回应正确的随机值,则认为ICC已经成功解密了Mi。随后,ICC接收Mi并解密。若CUi尚未注册,则ICC将为CUi生成数字证书Certi=ICCSK(OIDi);否则,ICC将忽略CUi的注册请求。ICC在完成所有CUi注册后,基于各CUi的Mi和Certi生成白名单Whitelist。如表1所示,其主要包括OIDi,Certi,Timei,其中Timei表示CUi生成的最新区块链交易的时间戳。在初始化阶段,由于区块链交易还未生成,因此Timei设置为0。ICC的数字证书设置为Cert0=ICCSK(OID0),其中OID0为ICC的身份标识符,生成机制与OIDi相同。由于ICC不参与生成区块链交易,白名单中ICC对应的Timei设为null。
表1 白名单
接着,ICC发送AMi到网络中的CUi,即
AMi=EncPKi{signICCSK(Whitelist,noncei,
TS,nonceb)}。
(2)
式中nonceb同样是一个回应挑战。CUi解密AMi并从中提取白名单,白名单将保存在CUi的本地,并随着区块链交易的生成而实时更新。之后,CUi通过FMi向ICC反馈nonceb以完成初始化,其中
FMi=EncICCPK{signSKi(TS,nonceb)}。
(3)
由于初始化仅执行一次,其中涉及到的密码学操作也仅执行一次,不会影响拟议方案整体性能。
CUi依据数据采集周期从现场仪表与传感器获取测量数据并进行预处理。之后,CUi基于测量数据生成区块链交易。区块链交易结构为:
TXi={OIDi,indexk,TStx,data,
HASH(OIDi,indexk,TStx,data,Certi)}。
(4)
式中:indexk为交易索引,TStx为交易时间戳,data为测量数据,HASH(OIDi,indexk,TStx,data,Certi)为交易哈希值,HASH()表示MD5哈希函数。CUi将TXi在区块链网络中广播。
接收到广播的区块链交易之后,轻节点将执行验证过程。为了降低验证过程的计算与通信开销,本文提出一种动态随机验证机制。具体来说,每个轻节点在本地维护一个定时器。当节点执行验证过程时,若在定时器时间范围内完成验证,则节点被视为验证节点;若超出了定时器时间范围,节点没有完成验证,则节点直接丢弃交易。由于节点的验证速度与区块链交易传输时间和节点实时可用资源有关,上述机制可以动态地随机选择部分节点参与交易验证过程,节约开销的同时也给攻击者引入了不确定性。
由于网络中所有数据都需要发送至ICC。因此,ICC将验证网络中广播的所有交易且不受定时器的约束。区块链交易校验规则如下:
规则1交易中的时间戳(TStx)与白名单中的Timei之差应大于预设的阈值Te,即
TStx-Whitelist(Timei)>Te。
(5)
规则2交易中的时间戳(TStx)与验证节点的系统当前时间戳(TSC)之差小于系统最大延迟ΔT,即
TSC-TStx<ΔT。
(6)
规则3交易中的哈希值应满足:
RHash=HASH(OIDi,indexk,TStx,
data,Certi)。
(7)
式中RHash为验证节点重新计算的交易哈希值。
规则1用于限制CUi生成交易的速度,防止攻击者不断生成虚假的交易而淹没网络;规则2规定了交易广播的最大延迟时间,可防止攻击者发起重放攻击;规则3通过重新计算交易哈希值RHash以验证交易完整性。验证节点检索白名单获取CUi的数字证书Certi,并利用交易中的信息重新计算RHash。若RHash与交易中的哈希值相等,则验证通过。若区块链交易满足以上验证规则,则交易有效;否则,交易无效。
假设验证过程中验证节点的数量为P,则验证节点集表示为{VN1,VN2,…,VNi,…,VNP-1,ICC}。ICC依据多数节点的验证结果判定交易合法性以达成共识。根据区块链交易验证结果,共识过程可分为以下4种情况,根据不同的情况将采取不同的策略。
情况1验证节点集{VN1,VN2,…,VNi,…,VNP-1,ICC}中的节点均验证成功。
此时,{VN1,VN2,…,VNi,…,VNP-1}无需向ICC反馈验证结果。ICC等待预设时间阈值TW后,未收到验证失败的结果反馈,则执行交易更新过程。
情况2ICC验证失败,{VN1,VN2,…,VNi,…,VNP-1}验证成功。
此时,ICC在等待预设时间阈值TW之后,未收到反馈。因此,ICC广播一则交易转发请求Req,即
Req={TSm,OIDi,indexk,Oid=1,
HASH(TSm,OIDi,indexk,Oid=1,Cert0)}。
(8)
式中:TSm为时间戳,Oid表示操作标识符,1表示转发操作。
VNi接收Req并验证其合法性。首先,VNi生成当前时间戳(TSC)并与Req中的时间戳TSm做差。若两者之差小于系统最大延迟ΔT,即TSC-TSm<ΔT,则验证通过。接着,VNi利用Req中的信息重新计算哈希值RHash,即
RHash=HASH(TSm,OIDi,
indexk,Oid=1,Cert0)。
(9)
式中Cert0为ICC的数字证书,可通过检索本地白名单获得。若RHash与Req中的哈希值相等,则验证通过。若Req满足以上两条验证规则,则Req有效;否则,Req无效。本文中所有信息的验证均遵循上述规则。
若Req验证成功,VNi根据其中的身份标识符OIDi和交易索引indexk转发对应的区块链交易;否则,VNi忽略Req。当VNi执行转发操作时,将构建一则反馈信息(Feedback)发送给ICC。Feedback数据结构如下:
Feedback={TSm,TXi,
(10)
Stop={TSm,OIDi,indexk,Oid=0,
HASH(TSm,OIDi,indexk,Oid=0,Cert0)}。
(11)
式中Oid=0表示停止转发操作。VNi接收并验证Stop的有效性。若验证通过,VNi停止转发交易到ICC;否则,验证节点忽略Stop。若Feedback验证失败,ICC忽略Feedback,等待其余的验证节点转发交易。
情况3ICC验证成功,{VN1,VN2,…,VNi,…,VNP-1}中存在节点验证失败。
此时,验证失败的节点将验证结果(Fail)反馈给ICC。Fail的数据结构如下:
Fail={TSm,OIDi,indexk,VR=00,
(12)
式中:VR表示验证结果,00表示验证失败。ICC接收并验证Fail。若验证通过,ICC广播一则信息(Report),要求其余验证节点反馈验证结果,即
Report={TSm,OIDi,indexk,Rt=01,
HASH(TSm,OIDi,indexk,Rt=01,Cert0)}。
(13)
式中Rt=01表示验证节点需要向ICC报告验证结果。验证节点接收Report并验证。若验证通过,则验证节点发送信息(Success1)到ICC,即
Success1={TSm,OIDi,indexk,VR=11,
(14)
式中VR=11代表交易验证成功。ICC验证Success1的有效性并统计验证节点的数量P,即
P=number(Fail)+number(Success1)+1。
(15)
式中:number(Fail)和number(Success1)分别表示ICC接收并验证通过的Fail与Success1的数量,1表示ICC自身的验证结果。若满足number(Success1)>P/2,则交易合法,ICC执行交易更新过程;否则,ICC将丢弃该交易。
情况4ICC验证失败,{VN1,VN2,…,VNi,…,VNP-1}中也存在节点验证失败。
与情况3类似,唯一不同的地方在于验证节点向ICC报告验证结果时,报告信息Success2的结构变化如下:
Success2={TSm,OIDi,indexk,VR=11,TXi,
(16)
ICC接收并验证Success2。与式(15)类似,验证节点的数量
P=number(Fail)+number(Success2)+1。
(17)
式中number(Success2)表示ICC验证通过的Success2的数量。若满足number(Success2)>P/2,则交易合法。ICC从Success2中提取TXi以执行交易更新过程。
ICC判定区块链交易为合法交易之后,将其放入交易池中,并执行交易更新过程。首先,ICC广播一则更新信息(Update),即
Update={OIDi,TStx,TSm,
HASH(OIDi,TStx,TSm,Cert0)}。
(18)
网络中所有轻节点接收Update并验证。若Update有效,轻节点从中提取TStx,以更新白名单中OIDi对应的Timei;若验证失败,则直接忽略Update。同时,ICC也利用TXi中的TStx更新其本地白名单。
当交易池中的交易数量达到预设的阈值时,ICC将交易池中的交易打包成一个区块,其结构如图2所示。区块由头与主体组成。区块头中包含5个参数,即区块版本号(version number)、前一个区块的哈希值(PreHASH)、区块哈希值(BlockHASH)、时间戳(TSBlock)和区块签名(SignSK=ICCSK(Block))。区块体用于存储交易列表。生成区块之后,ICC将区块添加到区块链中,并清空交易池,完整的区块链将存储在ICC的本地磁盘中。
现有区块链技术都存在51%攻击的问题[14]。本文方案中,攻击者可对网络中广播的信息进行恶意操作,如拦截并篡改验证节点反馈给控制台的验证结果,重放控制台的转发请求等。但是受攻击的信息将被合法节点识别而不会被计入共识过程。然而,若攻击者对广播的区块链交易进行恶意攻击而导致其无法通过合法节点的验证,此时被攻击的区块链交易的验证结果将计入区块链交易的投票过程,从而干扰区块链共识。为此,若网络中的区块链节点接收到的交易无法通过其合法性校验,则认为该交易为虚假交易。此时,该区块链节点为受损节点。若验证节点集{VN1,VN2,…,VNi,…,VNP-1,ICC}中超过一半的节点为受损节点,区块链方案将失效。
若区块链网络中节点数量为N,受损节点数量为CA,验证节点数量为P,受损验证节点的数量为PA,则:
PA≤CA≤N,PA≤P≤N。
(19)
区块链失效的下限可以表示为:
P*=P/2。
(20)
式中P/2为上取整函数。若满足PA≥P*,此时区块链方案将失效。利用离散概率分布中的超几何分布原理,区块链方案失败率fd可由以下4种情况计算得出:
(1)CA
由式(19)可知PA≤CA,因此有PA
(2)P*≤CA
在该情况下,区块链失效所需的受损验证节点数最小为P*。又因为CA
(21)
(3)P≤CA≤N-P*
此时,受损验证节点数最大为P。区块链方案失败率
(22)
(4)N-P* 由于N-P* 对于大规模的ICS网络,其满足P≤CA 表2 区块链方案成功率sd % (1)虚假数据注入攻击(FDI)和中间人攻击(MITM) 攻击者通过向ICS中注入虚假数据或截获并篡改测量数据达到破坏工业过程的目的。例如,在拟议方案中,攻击者可能会通过构建虚假区块链交易以将恶意数据注入到网络中,或拦截并篡改网络中广播的Req,Feedback,Stop,Verify,Report和Update信息以干扰方案共识过程。 本文中,网络中广播的交易和信息都包含唯一的哈希值,该哈希值是通过将交易或信息与数字证书拼接在一起获得的。例如,区块链交易的哈希值为HASH(OIDi,indexk,TStx,data,Certi),Req的哈希值为HASH(TSm,OIDi,indexk,Oid=1,Cert0)。由于节点的数字证书(Certi)保存在本地白名单中,攻击者无法获取,也就无法计算有效的哈希值。攻击者对交易或信息的任何更改都将造成哈希值变化,从而被合法节点识别。因此,拟议方案可有效防止虚假数据注入与中间人攻击。 (2)拒绝服务攻击(DoS) 攻击者可能会在网络中广播大量无效区块链交易,消耗节点的计算与通信资源,致使其无法处理合法的区块链事务,从而使网络瘫痪。在拟议方案中,区块链网络中每个节点均在本地维护一份白名单,其中包含区块链节点生成的最新交易的时间戳(Timei)。当区块链节点执行交易验证过程时,首先检查当前交易的时间戳(TStx)与白名单(Whitelist)中对应的最新交易时间戳Timei的差是否大于预设的阈值Te,若满足TStx-Whitelist(Timei)>Te,节点继续执行验证过程;否则,节点将直接忽略该交易。该规则规定了节点广播交易的频率,可防止攻击者不断生成虚假的区块链交易而淹没网络。因此拟议方案可有效缓解DoS攻击。 (3)重放攻击 攻击者可能记录并重放网络中广播的交易或信息。例如,攻击者可能会假扮CUi在网络中重放先前记录的区块链交易,假扮ICC重放Req,Stop,Report和Update,假扮VNi重放Feedback,Fail,Success1和Success2,从而使节点接收不准确的结果,降低ICS性能。然而,时间戳的存在将有效地防止重放攻击。在拟议方案中,网络中广播的每条交易和信息中都包含时间戳,只有当交易或信息中的时间戳与当前系统时间戳的差小于系统最大延迟ΔT时,验证节点才认定该交易或信息是正常状态;否则,即认为发生了重放攻击。 为了检测本文方案的性能,在一个半实物仿真平台上进行了区块链部署。仿真平台由1台笔记本计算机和6个树莓派Raspberry 3B组成,模拟了一个锅炉控制系统。其中,6个树莓派分别作为6个控制器,笔记本模拟控制台,其主要配置Intel(R) Core(TM) i5-5200U处理器,4 GB RAM。现场总线协议为Modbus-TCP协议。仿真中1次数据采集的数据量为32字节。 半实物仿真平台测量不同区块链操作的时间如表3所示。从表中可以看出,区块链操作的时间成本与区块链操作中需要传输的数据量有关。传输数据量越大,其操作所需的时间成本越高。例如,Req操作包含的数据量较少,其时间成本约为68.57 ms;Success2操作需要传输的数据量较大,其时间成本高达141.35 ms;而Verify操作无需通信,其时间成本最低,为1.43 ms。 表3 不同区块链操作的时间成本 设置仿真中验证节点的个数为3,表4列举了本文4种共识过程情况的时间开销。在情况1中,共识过程需要执行1次TXi,1次Verify和1次Update,时间成本约为167.42 ms;在情况2中,共识过程比情况1增加1次Req,1次Feedback和1次Stop,时间开销为417.59 ms;对于情况3,设置验证节点集中有1个受损验证节点,与情况1相比,共识过程需增加1次Fail,1次Report和1次Success1,时间开销为377.05 ms;对于情况4,仿真过程中除设置控制台为受损节点之外,还设置1个受损验证节点,此时共识过程比情况1增加了1次Fail,1次Report和1次Success2,时间开销为446.87 ms。从仿真结果可以看出,共识过程中包含的区块链操作越复杂,传输的数据量越多,时间成本就越高。 表4 不同共识过程情况下的时间开销 为评估拟议方案性能,与文献[9]、文献[11]和文献[12]所提方案的安全性能、时间与通信成本进行比较。 (1)安全性能 表5展示了4种方案的安全性能比较。文献[9]和文献[11]仅可防御拒绝服务攻击,对于其余的攻击类型不提供防御机制。而文献[12]除可抵御拒绝服务攻击外还可抵御虚假数据注入攻击与中间人攻击。本文方案除了可抵御工控系统中常见的4种攻击类型之外,还有可能抵御51%攻击。因此,本文方案安全性能优于现有方案。 表5 安全性能比较 (2)时间和通信成本 利用仿真平台模拟采集1次数据后执行相应区块链操作并达成共识的时间成本,并与文献[9]、文献[11]和文献[12]方案的时间成本比较,结果如图3所示。文献[11]采用轻量级的数据验证框架,其系统延迟较低,为569.41 ms。而文献[9]利用非对称密钥对数据进行加密并存储到区块链,计算复杂,时间成本最高,为837.53 ms。本文方案采用动态随机验证机制和新型共识模型,减少了共识过程中的验证开销与通信次数,共识过程最高时间成本为446.87 ms,最低时间成本为167.42 ms。时间开销低于同类方法,且区块链网络规模越大,本文方案的时间成本优势越明显。 如图4所示为不同区块链方案中共识过程的通信成本。本文定义共识过程中节点广播的数据包的数量为其通信成本。仿真过程中节点总数量N=7,拟议方案验证节点的数量P=3。本文采用一种新型共识模型,根据共识节点的状态选择不同的共识策略。由于共识情况1中没有数据包传输,ICC仅需等待预定时间之后执行交易更新过程,其通信成本为0;共识情况2中需要执行1次Req,1次Feedback和1次Stop,因此其通信成本为3;共识情况3与4中仅有广播的数据包数据结构不同,其余均相同,因此,其通信成本为P,即共识情况3与共识情况4的通信成本验证节点数均为3。然而,文献[9]、文献[11]和文献[12]中均采用了传统的区块链共识机制,即网络中的所有节点都参与共识,因此其通信成本节点总数为7。显然,本文方案相较于同类型方法,具有较低的通信成本。而且,新型共识模型保证了拟议方案的通信成本不会随着区块链网络规模的增加而显著增加,进一步保证了拟议方案的可用性。 本文针对计算资源与通信带宽有限的工业控制系统提出一种基于区块链的数据完整性保护方案。为降低设备计算与通信开销,采用一种私有区块链网络,并根据节点的计算资源与通信能力分配不同的区块链职能。采用一种动态随机验证机制和一种新型共识机制,很大程度上降低了拟议区块链方案达成共识的计算开销与通信延迟。安全分析与仿真结果表明,本文方案在满足工业控制系统安全性的前提下,与同类型方法相比具有较低的时间成本与较少的通信量。未来将探讨工业控制系统中现场级与网络级交互的区块链方案,以构建完整的工业控制系统区块链架构,为工业数据完整性提供更加完善的保护机制。3.2 抗攻击能力分析
4 仿真实验分析
4.1 拟议方案性能
4.2 性能比较
5 结束语