• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      商用密碼算法在PLC固件完整性校驗中的應用

      2021-07-07 06:30:04金先濤李丹鐘晶譚淑慧
      關(guān)鍵詞:國密編輯器固件

      金先濤,李丹,鐘晶,譚淑慧

      (工業(yè)和信息化部電子第五研究所,廣東 廣州 511370)

      0 引言

      可編程邏輯控制器(PLC:Programing Logic Controller)是一種很常見的工業(yè)控制系統(tǒng)(ICS:Industrial Control System)設備,用于接收和處理輸入設備的數(shù)據(jù),以及對輸出設備進行控制。用戶通過通用操作系統(tǒng)(如Windows、Linux等),使用編輯器編寫梯形圖程序、ST程序等,然后將程序通過通訊接口、Web接口或移動存儲設備裝載到PLC設備內(nèi)部運行。由于PLC和編輯器平臺分離,若將不可信的PLC程序裝載進PLC運行,必然引發(fā)不可預知的后果。密碼技術(shù)是保障網(wǎng)絡安全的核心技術(shù),是構(gòu)建網(wǎng)絡信任的基石。利用密碼在安全認證、加密保護和信任傳遞等方面的作用,能夠確保PLC裝載的是可信任的固件,避免發(fā)生安全問題。

      1 商用密碼算法

      商用密碼,是指采用特定變換的方法對不屬于國家秘密的信息等進行加密保護、安全認證的技術(shù)、產(chǎn)品和服務。商用密碼技術(shù)是商用密碼的核心,國家將商用密碼技術(shù)列入國家秘密,任何單位和個人都有責任和義務保護商用密碼技術(shù)的秘密。商用密碼的應用領(lǐng)域十分廣泛,主要用于對不涉及國家秘密內(nèi)容但又具有敏感性的內(nèi)部信息、行政事務信息和經(jīng)濟信息等進行加密保護。比如:各種安全認證、網(wǎng)上銀行和數(shù)字簽名等。但在PLC固件完整性保護方面,其研究和實踐并不多見。

      為了保障商用密碼安全,國家密碼管理局制定了一系列的密碼標準,包括SSF33、SM1(SCB2)、SM2、SM3、SM4、SM7、SM9和祖沖之密碼算法等等。其中,SSF33、SM1、SM4、SM7和祖沖之密碼是對稱算法;SM2、SM9是非對稱算法;SM3是哈希算法。

      目前已經(jīng)公布了算法文本的包括SM2橢圓曲線公鑰密碼算法、SM3密碼雜湊算法、SM4分組密碼算法和SM9標識密碼算法等。

      2 PLC固件完整性校驗研究

      本文選取的PLC對象為OpenPLC,OpenPLC作為第一個全功能標準化的開源PLC,其作用是為自動化研究提供低成本的工業(yè)解決方案[3]。OpenPLC項目是根據(jù)IEC-61131-3標準創(chuàng)建的,該標準支持5種編程語言。

      2.1 OpenPLC運行過程

      OpenPLC項目包括3個部分:運行系統(tǒng)(Run time)、編輯器(Editor)和HMIBuilder(ScadaBR)。運行系統(tǒng)應安裝在設備上,并負責執(zhí)行PLC程序。編輯器是在計算機上運行的軟件,用于創(chuàng)建PLC程序。最后,ScadaBR是HMI Builder。使用ScadaBR可以創(chuàng)建漂亮的基于Web的動畫,以反映對象的過程狀態(tài)。ScadaBR通過Modbus/TCP與OpenPLC Runtime通信[4]。

      2.1.1 編輯器運行過程

      PLC程序的創(chuàng)建和編譯過程如圖1所示。在將st文件翻譯為C語言文件的過程中,使用到了MATIEC開源軟件,這是一款開源的IEC 61131-3編譯器,能夠?qū)t文本翻譯為C程序文件[1-2],最后通過平臺編譯器生成共享庫。

      圖1 Editor編輯器運行過程

      2.1.2 Runtime運行過程

      Openplc Runtime對外提供的管理交互接口是http,基于flask框架開發(fā)。

      在Web界面中,用戶可以上傳PLC程序、配置擴展從設備(如modbus、dnp3協(xié)議設備)、監(jiān)控PLC運行狀態(tài)等。由于用戶上傳的是st文件,Runtime需要編譯鏈接為可執(zhí)行文件openplc.elf,并保存在core/目錄下,這點與Editor仿真時的編譯目標不同,如圖2所示。

      圖2 Runtime運行過程

      2.2 PLC固件完整性實現(xiàn)設計

      OpenPLC固件的生命周期為:梯形圖程序->ST程序->C語言程序->目標二進制代碼(固件)->向PLC刷入固件。 根據(jù)OpenPLC固件的生命周期,選取目標二進制代碼(固件)為完整性計算起點,通過國密算法,對固件做hash計算和SM2私鑰簽名;在OpenPLC端,對帶簽名的PLC程序進行驗簽,驗簽通過則存入數(shù)據(jù)庫,否則拒絕該PLC程序的上傳[5]。如圖3所示。

      圖3 Runtime運行過程

      3 驗證

      為了驗證固件的完整性,選取GMSSL國密算法庫作為簽名和驗簽工具。GmSSL是一個開源的密碼工具箱,支持SM2/SM3/SM4/SM9/ZUC等國密(國家商用密碼)算法、SM2國密數(shù)字證書及基于SM2證書的SSL/TLS安全通信協(xié)議,支持國密硬件密碼設備,提供符合國密規(guī)范的編程接口與命令行工具,可以用于構(gòu)建PKI/CA、安全通信和數(shù)據(jù)加密等符合國密標準的安全應用。

      在本次驗證中,首先使用GMSSL庫生成SM2公私鑰對,其中私鑰命名為skey.pem,公鑰命名為vkey.pem。在Editor編輯器中,利用私鑰對st文件簽名,合成簽名文件signed_file.st;Runtime運行系統(tǒng)通過http接口收到signed_file.st后,首先調(diào)用公鑰vkey.pem對簽名文件進行驗簽,驗簽通過才將st文件保存,否則報錯返回。

      3.1 signed_file.st文件格式設計

      signed_file.st文件里不僅包含原st內(nèi)容,還包含簽名數(shù)據(jù),為了保證驗簽準確性,為signed_file.st文件設計了文件格式,如圖4所示。

      圖4 簽名文件格式

      3.2 驗簽驗證

      3.2.1 驗證系統(tǒng)的網(wǎng)絡架構(gòu)

      OpenPLC通過Modbus/TCP協(xié)議接口,擴展遠程IO從站,其網(wǎng)絡架構(gòu)如圖5所示。

      圖5 OpenPLC網(wǎng)絡架構(gòu)

      針對該網(wǎng)絡架構(gòu),通過編輯器,編寫了梯形圖程序,用于控制線圈Q100.0,同時帶有自鎖功能,如圖6所示。

      圖6 梯形圖程序

      按鈕I100.0為啟動開關(guān),按鈕I100.1為停止開關(guān)。IQ100地址映射到Modbus/TCP從站,如圖7所示。

      圖7 Modbus從站設備配置

      3.2.2 驗證過程

      通過Editor,對以上程序進行編譯,生成帶簽名的st文件;在OpenPLC runtime端,通過http接口接收st文件,并對st文件進行驗簽,只有驗簽通過,才能保存st文件,并編譯為可執(zhí)行代碼,如圖8所示。

      圖8 驗簽成功與編譯過程

      加載非法簽名的st文件時,將被OpenPLCruntime拒絕提交。

      圖9 驗簽失敗

      4 結(jié)束語

      本文通過對OpenPLC的源碼分析,選取了合適的簽名與驗簽的時機,并應用GMSSL國密算法庫,對PLC的固件進行了簽名和驗簽,保證了PLC固件的完整性。經(jīng)過實際測試,驗證了國密算法在PLC固件完整性應用上的可行性。

      猜你喜歡
      國密編輯器固件
      國密技術(shù)在智能燃氣表系統(tǒng)的應用與分析
      煤氣與熱力(2021年7期)2021-08-23 01:11:14
      Hyperledger Fabric平臺的國密算法嵌入研究
      你距離微信創(chuàng)作達人還有多遠?
      自助終端設備國密改造方法探究
      車輛段收發(fā)車運行圖編輯器的設計與實現(xiàn)
      基于國密算法的銀行移動營銷終端安全系統(tǒng)研究
      電子測試(2018年9期)2018-06-26 06:45:40
      基于固件的遠程身份認證
      提取ROM固件中的APP
      電腦愛好者(2015年7期)2015-04-09 08:54:02
      基于VLIW目標機的ELF二進制編輯器設計與實現(xiàn)
      一種通過USB接口的可靠固件升級技術(shù)
      惠州市| 荔波县| 黔西县| 洛阳市| 易门县| 桂阳县| 虎林市| 陕西省| 兴宁市| 枣庄市| 辰溪县| 昭觉县| 徐州市| 新河县| 吴江市| 中江县| 离岛区| 延川县| 小金县| 景东| 灵川县| 武宣县| 黔江区| 陵川县| 都安| 阳曲县| 青神县| 永嘉县| 离岛区| 波密县| 花莲县| 得荣县| 天长市| 英超| 元朗区| 镇坪县| 昆明市| 平遥县| 沁水县| 盐亭县| 五河县|