APP下载

商用密码算法在PLC固件完整性校验中的应用

2021-07-07金先涛李丹钟晶谭淑慧

电子产品可靠性与环境试验 2021年2期
关键词:编辑器固件完整性

金先涛,李丹,钟晶,谭淑慧

(工业和信息化部电子第五研究所,广东 广州 511370)

0 引言

可编程逻辑控制器(PLC:Programing Logic Controller)是一种很常见的工业控制系统(ICS:Industrial Control System)设备,用于接收和处理输入设备的数据,以及对输出设备进行控制。用户通过通用操作系统(如Windows、Linux等),使用编辑器编写梯形图程序、ST程序等,然后将程序通过通讯接口、Web接口或移动存储设备装载到PLC设备内部运行。由于PLC和编辑器平台分离,若将不可信的PLC程序装载进PLC运行,必然引发不可预知的后果。密码技术是保障网络安全的核心技术,是构建网络信任的基石。利用密码在安全认证、加密保护和信任传递等方面的作用,能够确保PLC装载的是可信任的固件,避免发生安全问题。

1 商用密码算法

商用密码,是指采用特定变换的方法对不属于国家秘密的信息等进行加密保护、安全认证的技术、产品和服务。商用密码技术是商用密码的核心,国家将商用密码技术列入国家秘密,任何单位和个人都有责任和义务保护商用密码技术的秘密。商用密码的应用领域十分广泛,主要用于对不涉及国家秘密内容但又具有敏感性的内部信息、行政事务信息和经济信息等进行加密保护。比如:各种安全认证、网上银行和数字签名等。但在PLC固件完整性保护方面,其研究和实践并不多见。

为了保障商用密码安全,国家密码管理局制定了一系列的密码标准,包括SSF33、SM1(SCB2)、SM2、SM3、SM4、SM7、SM9和祖冲之密码算法等等。其中,SSF33、SM1、SM4、SM7和祖冲之密码是对称算法;SM2、SM9是非对称算法;SM3是哈希算法。

目前已经公布了算法文本的包括SM2椭圆曲线公钥密码算法、SM3密码杂凑算法、SM4分组密码算法和SM9标识密码算法等。

2 PLC固件完整性校验研究

本文选取的PLC对象为OpenPLC,OpenPLC作为第一个全功能标准化的开源PLC,其作用是为自动化研究提供低成本的工业解决方案[3]。OpenPLC项目是根据IEC-61131-3标准创建的,该标准支持5种编程语言。

2.1 OpenPLC运行过程

OpenPLC项目包括3个部分:运行系统(Run time)、编辑器(Editor)和HMIBuilder(ScadaBR)。运行系统应安装在设备上,并负责执行PLC程序。编辑器是在计算机上运行的软件,用于创建PLC程序。最后,ScadaBR是HMI Builder。使用ScadaBR可以创建漂亮的基于Web的动画,以反映对象的过程状态。ScadaBR通过Modbus/TCP与OpenPLC Runtime通信[4]。

2.1.1 编辑器运行过程

PLC程序的创建和编译过程如图1所示。在将st文件翻译为C语言文件的过程中,使用到了MATIEC开源软件,这是一款开源的IEC 61131-3编译器,能够将st文本翻译为C程序文件[1-2],最后通过平台编译器生成共享库。

图1 Editor编辑器运行过程

2.1.2 Runtime运行过程

Openplc Runtime对外提供的管理交互接口是http,基于flask框架开发。

在Web界面中,用户可以上传PLC程序、配置扩展从设备(如modbus、dnp3协议设备)、监控PLC运行状态等。由于用户上传的是st文件,Runtime需要编译链接为可执行文件openplc.elf,并保存在core/目录下,这点与Editor仿真时的编译目标不同,如图2所示。

图2 Runtime运行过程

2.2 PLC固件完整性实现设计

OpenPLC固件的生命周期为:梯形图程序->ST程序->C语言程序->目标二进制代码(固件)->向PLC刷入固件。 根据OpenPLC固件的生命周期,选取目标二进制代码(固件)为完整性计算起点,通过国密算法,对固件做hash计算和SM2私钥签名;在OpenPLC端,对带签名的PLC程序进行验签,验签通过则存入数据库,否则拒绝该PLC程序的上传[5]。如图3所示。

图3 Runtime运行过程

3 验证

为了验证固件的完整性,选取GMSSL国密算法库作为签名和验签工具。GmSSL是一个开源的密码工具箱,支持SM2/SM3/SM4/SM9/ZUC等国密(国家商用密码)算法、SM2国密数字证书及基于SM2证书的SSL/TLS安全通信协议,支持国密硬件密码设备,提供符合国密规范的编程接口与命令行工具,可以用于构建PKI/CA、安全通信和数据加密等符合国密标准的安全应用。

在本次验证中,首先使用GMSSL库生成SM2公私钥对,其中私钥命名为skey.pem,公钥命名为vkey.pem。在Editor编辑器中,利用私钥对st文件签名,合成签名文件signed_file.st;Runtime运行系统通过http接口收到signed_file.st后,首先调用公钥vkey.pem对签名文件进行验签,验签通过才将st文件保存,否则报错返回。

3.1 signed_file.st文件格式设计

signed_file.st文件里不仅包含原st内容,还包含签名数据,为了保证验签准确性,为signed_file.st文件设计了文件格式,如图4所示。

图4 签名文件格式

3.2 验签验证

3.2.1 验证系统的网络架构

OpenPLC通过Modbus/TCP协议接口,扩展远程IO从站,其网络架构如图5所示。

图5 OpenPLC网络架构

针对该网络架构,通过编辑器,编写了梯形图程序,用于控制线圈Q100.0,同时带有自锁功能,如图6所示。

图6 梯形图程序

按钮I100.0为启动开关,按钮I100.1为停止开关。IQ100地址映射到Modbus/TCP从站,如图7所示。

图7 Modbus从站设备配置

3.2.2 验证过程

通过Editor,对以上程序进行编译,生成带签名的st文件;在OpenPLC runtime端,通过http接口接收st文件,并对st文件进行验签,只有验签通过,才能保存st文件,并编译为可执行代码,如图8所示。

图8 验签成功与编译过程

加载非法签名的st文件时,将被OpenPLCruntime拒绝提交。

图9 验签失败

4 结束语

本文通过对OpenPLC的源码分析,选取了合适的签名与验签的时机,并应用GMSSL国密算法库,对PLC的固件进行了签名和验签,保证了PLC固件的完整性。经过实际测试,验证了国密算法在PLC固件完整性应用上的可行性。

猜你喜欢

编辑器固件完整性
石油化工企业设备完整性管理
你距离微信创作达人还有多远?
车辆段收发车运行图编辑器的设计与实现
莫断音动听 且惜意传情——论音乐作品“完整性欣赏”的意义
基于固件的远程身份认证
精子DNA完整性损伤的发生机制及诊断治疗
提取ROM固件中的APP
基于VLIW目标机的ELF二进制编辑器设计与实现
一种通过USB接口的可靠固件升级技术
多路手机固件升级工具设计