• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 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ù)
    射洪县| 保康县| 濮阳县| 南昌县| 鄂托克前旗| 石景山区| 东至县| 东宁县| 韶关市| 泸溪县| 皮山县| 革吉县| 平罗县| 锦屏县| 台北市| 南和县| 米脂县| 廊坊市| 南皮县| 永济市| 运城市| 阿克苏市| 黄冈市| 专栏| 咸阳市| 赤城县| 新野县| 且末县| 漳州市| 东方市| 井陉县| 临桂县| 梨树县| 台山市| 东明县| 龙口市| 镇平县| 措美县| 文山县| 银川市| 隆德县|