亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Modbus協(xié)議的數(shù)據(jù)采集與并行加密通信系統(tǒng)

        2017-04-14 00:47:25張紅梅張向利
        關(guān)鍵詞:設(shè)備系統(tǒng)

        黃 劍 張紅梅 張向利 陳 達(dá)

        (桂林電子科技大學(xué)廣西高校云計(jì)算與復(fù)雜系統(tǒng)重點(diǎn)實(shí)驗(yàn)室 廣西 桂林 541004)

        基于Modbus協(xié)議的數(shù)據(jù)采集與并行加密通信系統(tǒng)

        黃 劍 張紅梅 張向利 陳 達(dá)

        (桂林電子科技大學(xué)廣西高校云計(jì)算與復(fù)雜系統(tǒng)重點(diǎn)實(shí)驗(yàn)室 廣西 桂林 541004)

        為了高效、集中地監(jiān)控工業(yè)設(shè)備的運(yùn)行情況,設(shè)計(jì)了基于Modbus的數(shù)據(jù)采集監(jiān)控系統(tǒng)。提出將設(shè)備管理從數(shù)據(jù)采集系統(tǒng)分離出來(lái),降低動(dòng)態(tài)更改設(shè)備對(duì)數(shù)據(jù)采集系統(tǒng)的影響,提高設(shè)備管理的便捷性。該系統(tǒng)引入斷線自動(dòng)重連機(jī)制,提升了系統(tǒng)的穩(wěn)定性。探討傳統(tǒng)SM4加密算法的優(yōu)缺點(diǎn),提出改進(jìn)的SM4加密算法,提高了安全性。結(jié)合算法的結(jié)構(gòu)特點(diǎn)與GPU的并行計(jì)算能力,設(shè)計(jì)了基于GPU的SM4并行數(shù)據(jù)加密算法,并將該算法應(yīng)用到數(shù)據(jù)采集系統(tǒng)中,提高了數(shù)據(jù)傳輸過(guò)程中的實(shí)時(shí)性。

        數(shù)據(jù)采集 SM4 并行計(jì)算

        0 引 言

        隨著物聯(lián)網(wǎng)的發(fā)展,越來(lái)越多的企業(yè)需要將生產(chǎn)及運(yùn)營(yíng)的設(shè)備接入網(wǎng)絡(luò)并對(duì)其進(jìn)行遠(yuǎn)程實(shí)時(shí)監(jiān)控,大量的設(shè)備監(jiān)控?cái)?shù)據(jù)往往需要通過(guò)互聯(lián)網(wǎng)傳輸?shù)竭h(yuǎn)處的監(jiān)控中心。但是,由于互聯(lián)網(wǎng)的開(kāi)放性,一旦監(jiān)控?cái)?shù)據(jù)被截獲并被用于破壞活動(dòng),其帶來(lái)的損失將會(huì)非常嚴(yán)重。因此,工業(yè)數(shù)據(jù)傳輸?shù)陌踩詥?wèn)題亟待解決。此外,隨著設(shè)備數(shù)量的增加。數(shù)據(jù)量的增加,如何確保數(shù)據(jù)傳輸實(shí)時(shí)性、采集系統(tǒng)的穩(wěn)定性和設(shè)備管理的便捷性也將成為一個(gè)難題。

        基于以上問(wèn)題,本文提出了基于Modbus的數(shù)據(jù)采集與并行加密通信系統(tǒng)。將設(shè)備管理從數(shù)據(jù)采集系統(tǒng)分離出來(lái),降低了動(dòng)態(tài)更改設(shè)備對(duì)數(shù)據(jù)采集程序的影響,提高了管理設(shè)備的便捷性。該系統(tǒng)引入斷線自動(dòng)重連機(jī)制,提升了系統(tǒng)的穩(wěn)定性。雖然,利用SM4加密算法[1]可以確保數(shù)據(jù)傳輸一定的安全,但是,由于SM4密鑰擴(kuò)展算法與加密算法結(jié)構(gòu)相似性,輪密鑰生成算法參數(shù)的固定,都導(dǎo)致其安全性降低[2]。本文提出改進(jìn)的SM4加密算法,并結(jié)合算法的結(jié)構(gòu)特點(diǎn)與GPU的并行計(jì)算能力,設(shè)計(jì)了基于GPU的SM4并行數(shù)據(jù)加密算法,提高了數(shù)據(jù)傳輸過(guò)程中的安全性和實(shí)時(shí)性。

        1 系統(tǒng)總體設(shè)計(jì)方案

        設(shè)備數(shù)據(jù)監(jiān)控系統(tǒng)采用分布式架構(gòu),分為中心控制系統(tǒng)、采集控制系統(tǒng)和通信系統(tǒng)等3個(gè)主要部分,如圖1所示。

        圖1 設(shè)備數(shù)據(jù)監(jiān)控系統(tǒng)架構(gòu)圖

        中心控制系統(tǒng)實(shí)現(xiàn)對(duì)下屬子區(qū)域各個(gè)設(shè)備的監(jiān)控功能,采集控制系統(tǒng)實(shí)現(xiàn)對(duì)設(shè)備數(shù)據(jù)信息的采集及對(duì)采集到的數(shù)據(jù)進(jìn)行加密轉(zhuǎn)發(fā)功能,通信系統(tǒng)實(shí)現(xiàn)在中心控制系統(tǒng)與采集控制系統(tǒng)的通信。為保證監(jiān)控系統(tǒng)的可靠性,系統(tǒng)需要全天24小時(shí)不間斷地運(yùn)行并傳輸著大量實(shí)時(shí)數(shù)據(jù)。因此,對(duì)數(shù)據(jù)傳輸過(guò)程的實(shí)時(shí)性、穩(wěn)定性和安全性要求都非常高。隨著業(yè)務(wù)的增加,設(shè)備的增加,對(duì)設(shè)備的動(dòng)態(tài)管理提出了更高的要求。

        采集控制系統(tǒng)是整個(gè)系統(tǒng)的核心,其系統(tǒng)組成示意如圖2所示,系統(tǒng)主要包括主應(yīng)用程序、數(shù)據(jù)采集模塊、控制模塊、數(shù)據(jù)加解密模塊、數(shù)據(jù)轉(zhuǎn)發(fā)與存儲(chǔ)顯示模塊、站點(diǎn)配置模塊,以及Modbus協(xié)議、TCP/IP協(xié)議和MySQL數(shù)據(jù)庫(kù)。

        圖2 數(shù)據(jù)采集系統(tǒng)示意圖

        由于采集的站點(diǎn)數(shù)據(jù)信息量大,不適宜用單線程實(shí)現(xiàn)各個(gè)功能,因此采取多線程機(jī)制,把整個(gè)工作細(xì)化為若干個(gè)獨(dú)立的模塊,在多核的服務(wù)器上實(shí)現(xiàn)多線程并發(fā)操作,減少每次的采集時(shí)間。

        當(dāng)設(shè)備數(shù)量達(dá)到一定規(guī)模后,設(shè)備的配置信息的管理成為一個(gè)急需解決的問(wèn)題。使用配置文件或程序中指定的方法不具有良好的交互性和易操作性。本文提出基于MySQL數(shù)據(jù)庫(kù)的配置應(yīng)用程序,根據(jù)實(shí)際的需求,產(chǎn)生配置信息表,存儲(chǔ)在數(shù)據(jù)庫(kù)中。將站點(diǎn)配置和數(shù)據(jù)采集分開(kāi),可以很方便地增加或刪除站點(diǎn),擴(kuò)展性強(qiáng)、便捷性好。另外,該配置應(yīng)用程序操作簡(jiǎn)單、交互性強(qiáng)、具有容錯(cuò)能力,可以預(yù)防因誤操作引起的數(shù)據(jù)采集系統(tǒng)的崩潰。

        數(shù)據(jù)采集應(yīng)用程序根據(jù)配置表信息,創(chuàng)建并協(xié)調(diào)各個(gè)線程。數(shù)據(jù)采集模塊根據(jù)主應(yīng)用程序的采集信息,填充Modbus協(xié)議的各個(gè)字段,并組裝成TCP/IP幀,發(fā)送出采集請(qǐng)求命令。該模塊還從接收到的TCP/IP幀中提取出采集到的數(shù)據(jù)。該模塊引入斷線自動(dòng)重連的機(jī)制。一旦建立的鏈接發(fā)生斷開(kāi)情況,就會(huì)立刻刷新并重新建立鏈接,繼續(xù)發(fā)送采集請(qǐng)求,提高系統(tǒng)的穩(wěn)定性。

        為了提升數(shù)據(jù)在互聯(lián)網(wǎng)上傳輸?shù)陌踩裕跀?shù)據(jù)發(fā)送前采用改進(jìn)的SM4加密算法對(duì)數(shù)據(jù)進(jìn)行加密。在數(shù)據(jù)量較大的情況下,數(shù)據(jù)加密的耗時(shí)成為了實(shí)時(shí)傳輸?shù)钠款i。本文利用GPU的并行計(jì)算能力,設(shè)計(jì)了基于GPU的并行加解密模塊。將數(shù)據(jù)采集過(guò)來(lái)的實(shí)時(shí)數(shù)據(jù)送給GPU,GPU把加密后的結(jié)果送給數(shù)據(jù)轉(zhuǎn)發(fā)模塊。數(shù)據(jù)轉(zhuǎn)發(fā)模塊負(fù)責(zé)把采集到的數(shù)據(jù)利用TCP/IP轉(zhuǎn)發(fā)出去。數(shù)據(jù)存儲(chǔ)模塊負(fù)責(zé)把采集到的實(shí)時(shí)數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中。

        2 配置模塊應(yīng)用程序

        為了方便管理大規(guī)模站點(diǎn)設(shè)備的信息,并且各個(gè)站點(diǎn)的配置信息往往是隨需求而改變的,因此單獨(dú)設(shè)計(jì)了一個(gè)基于MySQL數(shù)據(jù)庫(kù)的配置應(yīng)用程序,如圖3所示,可以便捷、靈活、直觀地管理各個(gè)設(shè)備。站點(diǎn)的配置信息主要包括設(shè)備的IP地址、端口號(hào)、起始地址、采集數(shù)量等。

        圖3 站點(diǎn)配置管理應(yīng)用程序

        首先,通過(guò)調(diào)用MySQL數(shù)據(jù)庫(kù)的接口mysql_real_connect()函數(shù)連接modbus_db數(shù)據(jù)庫(kù),若返回調(diào)用失敗,說(shuō)明還沒(méi)有該modbus_db數(shù)據(jù)庫(kù),則調(diào)用mysql_real_query()函數(shù)創(chuàng)建modbus_db數(shù)據(jù)庫(kù)和modbus_configure_table配置表,并初始化配置表的各個(gè)字段。

        然后,打印顯示菜單欄,提示用戶功能選項(xiàng)(配置、插入、更改、刪除、退出),并等待用戶輸入。

        1) 當(dāng)選擇查看配置時(shí),通過(guò)mysql_real_query()函數(shù)調(diào)用查詢SQL語(yǔ)句,把當(dāng)前所有的配置表信息打印出來(lái)。

        2) 當(dāng)選擇更改配置時(shí),提示用戶選擇需要更改的站點(diǎn)號(hào),當(dāng)正確輸入站點(diǎn)號(hào)之后,打印當(dāng)前的配置信息,并等待用戶輸入需要修改的配置項(xiàng)。正確輸入需要修改的選項(xiàng)后,提示輸入新的配置值,并通過(guò)mysql_real_query()接口函數(shù)調(diào)用更改SQL語(yǔ)句,更改配置為當(dāng)前的輸入值。若沒(méi)有需要修改的項(xiàng)了,則輸入q退出,返回主菜單欄。反之,若輸入站點(diǎn)號(hào)或者配置選項(xiàng)號(hào)出錯(cuò),則提示出錯(cuò),并重新提示輸入。

        3) 當(dāng)選擇插入選項(xiàng)時(shí),循環(huán)輸出需要配置的選項(xiàng),等待輸入,并通過(guò)mysql_real_query()接口函數(shù)調(diào)用插入SQL語(yǔ)句,插入輸入的配置值。全部配置項(xiàng)配置完成后,返回到主菜單項(xiàng)。

        4) 當(dāng)選擇刪除選項(xiàng)時(shí),打印輸出要?jiǎng)h除的站點(diǎn)號(hào),正確輸入站點(diǎn)號(hào)后,通過(guò)mysql_real_query()接口函數(shù)調(diào)用刪除SQL語(yǔ)句,刪除相應(yīng)的配置表,并返回主菜單。錯(cuò)誤時(shí),提醒出錯(cuò),并重新刪除操作。

        5) 若選擇退出,通過(guò)調(diào)用mysql_close()函數(shù)斷開(kāi)數(shù)據(jù)庫(kù)連接。

        3 基于Modbus協(xié)議的數(shù)據(jù)采集

        3.1 Modbus協(xié)議介紹

        Modbus通信采用主/從通信方式,主站點(diǎn)發(fā)出數(shù)據(jù)請(qǐng)求消息,從站點(diǎn)接收到正確的消息后就可以發(fā)送數(shù)據(jù)到主站點(diǎn)以響應(yīng)請(qǐng)求;主站點(diǎn)也可以直接發(fā)送控制消息修改從站點(diǎn)的數(shù)據(jù),實(shí)現(xiàn)雙向讀寫。目前工業(yè)中將 Modbus通過(guò)以太網(wǎng)結(jié)合TCP/IP協(xié)議組成Modbus TCP/IP網(wǎng)絡(luò)進(jìn)行通信[3]。該Modbus幀格式如圖4 所示。

        圖4 Modbus幀格式

        Modbus幀在TCP/IP上傳輸?shù)膽?yīng)用數(shù)據(jù)單元(ADU)包括供TCP/IP專用的Modbus應(yīng)用協(xié)議報(bào)文頭(MBAP)和通用的協(xié)議數(shù)據(jù)單元(PDU)組成[4]。整個(gè)Modbus幀的大小不能超過(guò) 256字節(jié)。該幀的具體含義:

        事務(wù)處理標(biāo)識(shí)符用來(lái)標(biāo)識(shí) Modbus 幀的順序,每發(fā)送一個(gè) Modbus 幀,該值加1;協(xié)議標(biāo)識(shí)符用來(lái)表明應(yīng)用層協(xié)議是不是 Modbus 協(xié)議,固定取值為0;長(zhǎng)度用來(lái)表示單元標(biāo)識(shí)符和數(shù)據(jù)域的字節(jié)數(shù);單元標(biāo)識(shí)符用來(lái)標(biāo)識(shí)Modbus總線上所連接的從機(jī)設(shè)備的地址碼;功能碼指出了要求進(jìn)行的操作;數(shù)據(jù)域具體格式與功能碼密切相關(guān),是一個(gè)可變長(zhǎng)字段??偟恼f(shuō)來(lái),主站點(diǎn)發(fā)送請(qǐng)求數(shù)據(jù)時(shí),數(shù)據(jù)域給出要操作的寄存器的起始地址和個(gè)數(shù)。而從站點(diǎn)發(fā)送應(yīng)答數(shù)據(jù)時(shí),數(shù)據(jù)域給出被操作的寄存器個(gè)數(shù)以及n個(gè)寄存器的狀態(tài)值[5]。

        3.2 數(shù)據(jù)采集實(shí)現(xiàn)

        數(shù)據(jù)采集模塊是采集系統(tǒng)的核心,為了提高數(shù)據(jù)采集的速度,該模塊設(shè)計(jì)成多線程的結(jié)構(gòu),每個(gè)設(shè)備的采集都用一個(gè)線程來(lái)控制采集,這樣在多核的Linux服務(wù)器上可以實(shí)現(xiàn)并發(fā)采集的功能。為了確保上傳數(shù)據(jù)的完整性,在采集模塊中引入了斷線重連的機(jī)制。一旦建立的TCP/IP套接字發(fā)生斷開(kāi)情況,采集系統(tǒng)如果采集不到數(shù)據(jù),就會(huì)馬上刷新連接,重新建立TCP/IP套接字,繼續(xù)發(fā)送采集請(qǐng)求。

        為了更好便捷的操作,設(shè)計(jì)了一個(gè)modbus_info_t結(jié)構(gòu)體,用來(lái)保存線程在采集過(guò)程中需要的信息,具體定義如下:

        typedef struct _modbus_info {

        modbus_t *md;

        //modbus協(xié)議結(jié)構(gòu)體

        MYSQL *mysql;

        // 保存數(shù)據(jù)庫(kù)操作過(guò)程中用到的句柄

        modbus_configure_t *modbus_configure_info;

        //站點(diǎn)配置信息結(jié)構(gòu)體

        modbus_data_t *modbus_data;

        //站點(diǎn)數(shù)據(jù)信息結(jié)構(gòu)體

        pthread_mutex_t rw_mutex;

        //線程鎖

        int modbus_stat;

        //狀態(tài)標(biāo)志

        }modbus_info_t;

        該結(jié)構(gòu)體中的md成員是一個(gè)modbus_t結(jié)構(gòu)體的指針變量,該結(jié)構(gòu)體負(fù)責(zé)Modbus協(xié)議的相關(guān)操作,比如用于保存建立TCP/IP連接時(shí)套接字的成員表變量,用來(lái)協(xié)調(diào)實(shí)現(xiàn)Modbus的傳輸?shù)囊幌盗谐蓡T函數(shù)指針,以及用來(lái)保存?zhèn)鬏斶^(guò)程中需要的數(shù)據(jù)等;mysql成員變量用于保存MySQL數(shù)據(jù)庫(kù)操作過(guò)程中用到的句柄;modbus_configure_info成員保存了該線程所要采集的站點(diǎn)的配置信息;modbus_data成員則用來(lái)保存采集過(guò)后的數(shù)據(jù)信息,包括站點(diǎn)ID、地址、數(shù)據(jù)類型、數(shù)據(jù)值等;rw_mutex成員是線程間操作的互斥鎖,用來(lái)實(shí)現(xiàn)各個(gè)線程之間訪問(wèn)公共數(shù)據(jù)的互斥操作;modbus_stat成員用來(lái)記錄當(dāng)前采集過(guò)程中的狀態(tài)。

        Modbus通信基于TCP/IP。首先,查看modbus_info結(jié)構(gòu)體里面的modbus_stat變量,獲取狀態(tài)信息,如果處于未連接狀態(tài),則調(diào)用connect_site()函數(shù)進(jìn)行TCP/IP連接,并更改狀態(tài)為采集狀態(tài)。當(dāng)處于采集狀態(tài)時(shí),通過(guò)調(diào)用read_site_register()和read_site_bit()函數(shù)進(jìn)行數(shù)據(jù)采集。若采集返回出錯(cuò),則重新設(shè)置連接狀態(tài),等待下次循環(huán)重新建立連接并采集數(shù)據(jù)。當(dāng)處于關(guān)閉狀態(tài)是,通過(guò)調(diào)用close_site()函數(shù)關(guān)閉TCP/IP連接并釋放相應(yīng)的資源。同樣需要重新設(shè)置連接狀態(tài)。具體代碼如下:

        while(1){

        switch(modbus_info->modbus_stat){

        case 0:

        if(-1!= connect_site(modbus_info))

        //連接modbus設(shè)備

        modbus_info->modbus_stat = 1;

        break;

        case 1:

        if(-1==read_site_register(modbus_info,&modbus_mutex)‖-1== read_site_bit(modbus_info,&modbus_mutex))

        //采集數(shù)據(jù)

        modbus_info->modbus_stat=0;

        break;

        case 2:

        close_site(modbus_info);

        //斷開(kāi)modbus連接

        modbus_info->modbus_stat=0;

        break;}}

        read_site_register()函數(shù)和read_site_bit()函數(shù)分別用來(lái)采集設(shè)備的寄存器值和線圈值,背后實(shí)現(xiàn)的過(guò)程大同小異。采集的狀態(tài)通過(guò)函數(shù)值返回,若采集返回出錯(cuò),則重新設(shè)置連接狀態(tài),等待下次循環(huán)重新建立連接并采集數(shù)據(jù)。采集的流程,如圖5所示。

        圖5 Modbus數(shù)據(jù)采集流程圖

        Modbus協(xié)議規(guī)定報(bào)文幀的大小不能超過(guò)256字節(jié),因此,每次采集的數(shù)目不能超過(guò)上限值。若傳入的請(qǐng)求數(shù)量超過(guò)最大值時(shí),則返回錯(cuò)誤。若沒(méi)有超過(guò)最大值,則根據(jù)傳入的地址、數(shù)量、功能碼等參數(shù)構(gòu)造Modbus幀的各個(gè)字段,填充請(qǐng)求報(bào)文的頭部。利用建立的TCP/IP連接把該Modbus幀數(shù)據(jù)發(fā)送至設(shè)備端。根據(jù)返回值判斷是否發(fā)送成功,如果發(fā)送失敗,則刷新Modbus連接,并重新發(fā)送。如果發(fā)送成功,則監(jiān)聽(tīng)是否有數(shù)據(jù)到來(lái)。當(dāng)發(fā)現(xiàn)有數(shù)據(jù)到來(lái),同樣利用TCP/IP連接接收Modbus幀數(shù)據(jù)。如果接收失敗,說(shuō)明TCP/IP鏈路出現(xiàn)問(wèn)題,需要重新建立連接并返回錯(cuò)誤碼。如果接收成功,則檢驗(yàn)接收到的數(shù)據(jù)是不是本次請(qǐng)求的所期望的數(shù)據(jù)。如果是,則提取接收到的Modbus幀的數(shù)據(jù)部分,并保存到內(nèi)存中,如果不是,則返回錯(cuò)誤碼。

        4 基于GPU的SM4并行加密

        SM4 是一種分組密碼算法,其分組長(zhǎng)度和密鑰長(zhǎng)度均為128 bit。加解密算法與密鑰擴(kuò)張算法都采用32輪非線性迭代結(jié)構(gòu)[6]。雖然利用SM4加密算法可以確保數(shù)據(jù)傳輸一定的安全。但是,由于SM4加密算法的公開(kāi)性,密鑰擴(kuò)展算法與加密算法結(jié)構(gòu)的相似性,輪密鑰生成算法參數(shù)的固定,都導(dǎo)致其安全性降低。在數(shù)據(jù)量較大的情況下,使用SM4串行加密的耗時(shí)成為了采集系統(tǒng)實(shí)時(shí)傳輸?shù)钠款i。

        4.1 改進(jìn)SM4加密算法設(shè)計(jì)

        本文中對(duì)SM4的特點(diǎn)設(shè)計(jì)出一種改進(jìn)的SM4算法,提高了安全性,與傳統(tǒng)算法相比改進(jìn)之處主要體現(xiàn)在以下兩點(diǎn):

        (1) 用AES-128密鑰擴(kuò)展算法替換SM4密鑰擴(kuò)展算法。

        本文提出通過(guò)利用AES-128密鑰擴(kuò)展算法[9]生成SM4加密算法需要的32個(gè)輪密鑰。新的密鑰擴(kuò)展算法,具有透明簡(jiǎn)潔、實(shí)現(xiàn)速度快、安全性高等優(yōu)勢(shì)。

        (2) 將加解密算法中的32迭代所用輪函數(shù)由“固定函數(shù)”改為“動(dòng)態(tài)選擇”。

        研究表明[8]將原輪函數(shù):

        Xi=4=F(Xi,Xi+1,Xi+2,Xi+3,rki)

        =Xi⊕T(Xi+1⊕Xi+2⊕Xi+3⊕rki)

        (1)

        改為:

        Xi=4=F(Xi,Xi+1,Xi+2,Xi+3,rki)

        =Xi⊕T(Xi+1+Xi+2+Xi+3⊕rki)

        (2)

        將原算法中Xi+1,Xi+2,Xi+3的“⊕”運(yùn)算替換為“+”運(yùn)算是可行的、正確的、線性復(fù)雜度高,從而提高了整個(gè)算法的安全性。本文提出將32迭代所用輪函數(shù)由“固定函數(shù)”改為“動(dòng)態(tài)選擇”,即對(duì)每輪使用的輪函數(shù)在使用“⊕”還是 “+”運(yùn)算時(shí)進(jìn)行動(dòng)態(tài)隨機(jī)選擇。改進(jìn)后算法的輪函數(shù)如圖6所示。

        圖6 基于動(dòng)態(tài)選擇的加密輪函數(shù)流程圖

        在對(duì)密碼進(jìn)行迭代之前以時(shí)間為隨機(jī)種子,使用隨機(jī)函數(shù)K(time)生成一個(gè)4字節(jié)32位的隨機(jī)數(shù)G,G的每一位作為每一輪迭代時(shí)選擇“⊕”還是“+”運(yùn)算的輪函數(shù)。當(dāng)G的某位為0選擇使用Xi+4=F(Xi,Xi+1,Xi+2,Xi+3,rki)=Xi⊕T(Xi+1⊕Xi+2⊕Xi+3⊕rki)的輪函數(shù),為1選擇使用Xi+4=F(Xi,Xi+1,Xi+2,Xi+3,rki)=Xi⊕T(Xi+1+Xi+2+Xi+3+rki)的輪函數(shù)。

        4.2 改進(jìn)SM4并行加密算法實(shí)現(xiàn)

        雖然動(dòng)態(tài)SM4算法的安全性得到提高,但是數(shù)據(jù)加密耗時(shí)依然是采集系統(tǒng)傳輸實(shí)時(shí)性的瓶頸。本文利用GPU的并行計(jì)算能力與SM4算法的結(jié)構(gòu)特點(diǎn),設(shè)計(jì)了基于GPU的動(dòng)態(tài)SM4并行數(shù)據(jù)加密模塊。將采集到的實(shí)時(shí)數(shù)據(jù)送給GPU,GPU把加密后的結(jié)果送給數(shù)據(jù)轉(zhuǎn)發(fā)模塊,提高了加密運(yùn)算的實(shí)時(shí)性。如圖7所示。

        圖7 SM4并行算法整體框架

        首先,在CPU執(zhí)行一次密鑰擴(kuò)展,生成輪密鑰。然后,將輸入數(shù)據(jù)和擴(kuò)展密鑰存儲(chǔ)到GPU全局存儲(chǔ)空間內(nèi)。在加密的初始階段,輸入數(shù)據(jù)將被分成每塊128bit的數(shù)據(jù)分組,每個(gè)GPU線程負(fù)責(zé)加密一個(gè)數(shù)據(jù)分組。最后,加密輸出的密文數(shù)據(jù)將再次被寫到全局設(shè)備存儲(chǔ)器內(nèi),隨后,CPU程序?qū)⑤敵鰯?shù)據(jù)結(jié)果從GPU的全局設(shè)備存儲(chǔ)器內(nèi)取回,整個(gè)加密過(guò)程完成。

        密鑰擴(kuò)展在CPU上執(zhí)行一次,生成32組44字節(jié)的密鑰分組,存儲(chǔ)于全局存儲(chǔ)區(qū)。cudaMalloc()函數(shù)是用來(lái)申請(qǐng)指定大小的GPU設(shè)備存儲(chǔ)空間。cudaMemcpy()函數(shù)用來(lái)實(shí)現(xiàn)內(nèi)存到GPU設(shè)備的數(shù)據(jù)的傳遞,第四個(gè)參數(shù)用來(lái)指定方向,cudaMemcpyHostToDevice表示從主機(jī)內(nèi)存到GPU設(shè)備,cudaMemcpyDeviceToHost表示從GPU設(shè)備到主機(jī)內(nèi)存[10,11]。具體代碼如下:

        unsigned char *d_sk;

        //定義設(shè)備擴(kuò)展密鑰指針

        sm4_setkey(sk, key);

        //生成擴(kuò)展密鑰

        cudaMalloc((void**)&d_sk, 128 * sizeof(unsigned char));

        //分配設(shè)備擴(kuò)展密鑰空間

        cudaMemcpy(d_sk, ctx.sk, 128 * sizeof(unsigned char), cudaMemcpyHostToDevice);

        //復(fù)制密鑰

        將采集到的明文數(shù)據(jù)傳入GPU全局存儲(chǔ)空間內(nèi),供每個(gè)線程將會(huì)從該全局存儲(chǔ)空間里提取自己需要處理的數(shù)據(jù)。同樣,對(duì)于S盒Sbox的處理也是存儲(chǔ)于全局存儲(chǔ)區(qū)。具體代碼如下:

        unsigned char *d_input;

        //定義明文指針

        for(int i=0;i

        cudaMalloc((void**)&d_input, size * sizeof(unsigned char));

        //在設(shè)備上為明文分配空間

        cudaMemcpy(d_input, input, size * sizeof(unsigned char), cudaMemcpyHostToDevice);

        //將明文數(shù)據(jù)從主存?zhèn)髦猎O(shè)備

        通過(guò)調(diào)用cryptKernel <<< dmgrid, 256 >>>(d_sk, d_input, d_output)核函數(shù)實(shí)現(xiàn)每個(gè)GPU線程對(duì)數(shù)據(jù)塊的并行加密。其中d_sk表示擴(kuò)展密鑰,d_input表示明文,d_output表示加密后的密文。核函數(shù)提供對(duì)數(shù)據(jù)分組的加密處理,由多個(gè)塊并行執(zhí)行。具體代碼如下:

        __global__ void cryptKernel(unsigned long *d_sk, unsigned char *d_input, unsigned char *d_output)

        { int tid = threadIdx.x + blockDim.x * blockIdx.x;

        //計(jì)算線程id號(hào)

        unsigned char input[16],output[16];

        unsigned long b, x[36];

        memcpy(input,&d_input[tid *16],16);

        //獲取該線程要處理的數(shù)據(jù)

        get_ulong(x[0],x[1],x[2],x[3],input);

        //把16字節(jié)數(shù)據(jù)轉(zhuǎn)換成44字節(jié)的形式

        for(int i=0;i<32;i++)

        //循環(huán)

        {b=sm4Sbox(x[i+1]^x[i+2]^x[i+3]^d_sk[i]);

        //S盒變換

        x[i+4] = x[i]^sm4L(b);}

        //線性變換

        put_ulong(x[35],x[34],x[33],x[32],output);

        //輸出密文數(shù)據(jù)

        memcpy(&d_output[i*16],output,16);}

        5 系統(tǒng)性能測(cè)試與分析

        本文設(shè)計(jì)的獨(dú)立于數(shù)據(jù)采集系統(tǒng)的配置應(yīng)用程序,將站點(diǎn)配置和數(shù)據(jù)采集分開(kāi),可以很便捷地增加或刪除站點(diǎn),降低動(dòng)態(tài)更改設(shè)備對(duì)數(shù)據(jù)采集系統(tǒng)的影響;另外,該配置應(yīng)用程序操作簡(jiǎn)單、交互性強(qiáng)、具有容錯(cuò)能力,可以預(yù)防因誤操作引起的數(shù)據(jù)采集系統(tǒng)的崩潰。

        本文實(shí)現(xiàn)的斷線重連機(jī)制,能夠確保數(shù)據(jù)采集系統(tǒng)穩(wěn)定性。為了測(cè)試該系統(tǒng)的斷線重連機(jī)制,在運(yùn)行該采集系統(tǒng)后,人為手動(dòng)斷開(kāi)設(shè)備的網(wǎng)絡(luò)連接,隨機(jī)重新恢復(fù)網(wǎng)絡(luò)連接,如此反復(fù)10次。通過(guò)查看日志文件,發(fā)現(xiàn)發(fā)生10次斷線,自動(dòng)重連10次,自動(dòng)重連率100%。自動(dòng)重連后系統(tǒng)依然運(yùn)行正常,具有很好的斷線重連功能,從而具有很好的穩(wěn)定性。

        加密算法的安全性,主要從擴(kuò)散性[8]的角度對(duì)改進(jìn)SM4的算法進(jìn)行安全性測(cè)試分析。取100組明文數(shù)據(jù),對(duì)每組明文改變?nèi)我槐忍貢r(shí)測(cè)試其密文比特改變個(gè)數(shù),取其均值測(cè)試改進(jìn)算法的擴(kuò)散性。算法安全性指標(biāo)的對(duì)比實(shí)驗(yàn)數(shù)據(jù)如表1所示,可見(jiàn)改進(jìn)后的算法可達(dá)到很好的擴(kuò)散效果,具有較好的安全性。

        表1 動(dòng)態(tài)SM4算法與原算法安全性比較

        在采集數(shù)據(jù)量較大的情況下,使用SM4加密的耗時(shí)成為了實(shí)時(shí)傳輸?shù)钠款i。將基于GPU的并行SM4加密算法與傳統(tǒng)的串行SM4加密算法進(jìn)行實(shí)驗(yàn)對(duì)比,測(cè)試的數(shù)據(jù)長(zhǎng)度從16 B到64 MB遞增,每種大小的明文均運(yùn)行100次,取平均值以減少數(shù)據(jù)誤差,得到執(zhí)行時(shí)間對(duì)比如圖8所示。

        圖8 串行SM4和并行SM4執(zhí)行時(shí)間比較

        隨著明文大小成倍增加,串行SM4的計(jì)算時(shí)間也成倍增加,但并行SM4的執(zhí)行總時(shí)間以緩慢的速度增長(zhǎng),加速比高達(dá)40.6倍,說(shuō)明在數(shù)據(jù)量較大的情況下,并行算法的耗時(shí)更少,加密的實(shí)時(shí)性更高。

        6 結(jié) 語(yǔ)

        在兩臺(tái)不同IP地址的主機(jī)上運(yùn)行Modbus數(shù)據(jù)模擬器應(yīng)用程序作為客戶端,用來(lái)產(chǎn)生Modbus寄存器和線圈數(shù)據(jù),如圖9所示。運(yùn)行本數(shù)據(jù)采集系統(tǒng)對(duì)其數(shù)據(jù)進(jìn)行采集,通過(guò)數(shù)據(jù)顯示模塊,讀取并顯示采集到的數(shù)據(jù),如圖10所示。

        圖9 Modbus數(shù)據(jù)模擬器

        圖10 Modbus數(shù)據(jù)采集顯示程序

        本文實(shí)現(xiàn)了工業(yè)設(shè)備監(jiān)控系統(tǒng)中最重要的數(shù)據(jù)采集子系統(tǒng),典型應(yīng)用在電廠設(shè)備和機(jī)房設(shè)備數(shù)據(jù)采集。數(shù)據(jù)采集采用與TCP/IP協(xié)議結(jié)合緊密的Modbus協(xié)議,方便數(shù)據(jù)的傳輸。將設(shè)備管理從數(shù)據(jù)采集系統(tǒng)分離出來(lái),降低了動(dòng)態(tài)更改設(shè)備對(duì)數(shù)據(jù)采集程序的影響,提高了管理設(shè)備的便捷性。該系統(tǒng)引入斷線自動(dòng)重連機(jī)制,提升了系統(tǒng)的穩(wěn)定性。為了確保數(shù)據(jù)傳輸過(guò)程中的安全性,將實(shí)時(shí)數(shù)據(jù)進(jìn)行加密后傳輸。為了提高安全性,對(duì)標(biāo)準(zhǔn)SM4加解算法進(jìn)行了改進(jìn),提出改進(jìn)的SM4算法。為了提升改進(jìn)算法的加密、解密速度,提高數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性,提出基于GPU并行計(jì)算的SM4加解密基本架構(gòu)。最終,實(shí)現(xiàn)了對(duì)設(shè)備數(shù)據(jù)進(jìn)行實(shí)時(shí)采集與加密傳輸?shù)墓δ?,為工業(yè)監(jiān)控系統(tǒng)提供了核心模塊。

        [1] 國(guó)家商用密碼管理辦公室.國(guó)家密碼管理局公告(第23號(hào))[OL].(2012-02-21).http://www.oscca.gov.cn/News/201204/News_1227.htm.

        [2] Hu Z, Liao X. SMS4 algorithm algebra fault attack[C]//2010 Third International Symposium on Electronic Commerce and Security (ISECS). IEEE, 2010:118-120.

        [3] 張偉. 基于Modbus現(xiàn)場(chǎng)總線技術(shù)的智能配電系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D]. 南京:南京郵電大學(xué), 2012.

        [4] 高秀蘭. 基于Modbus TCP/IP通訊綜合監(jiān)控系統(tǒng)的實(shí)現(xiàn)[J]. 儀表技術(shù)與傳感器, 2015(10):104-106,110.

        [5] 翁建年, 張浩, 彭道剛, 等. 基于嵌入式ARM的Modbus/TCP協(xié)議的研究與實(shí)現(xiàn)[J]. 計(jì)算機(jī)應(yīng)用與軟件, 2009, 26(10):36-38,68.

        [6] Wang K, Peng D, Song L, et al. Implementation of Modbus communication protocol based on ARM Coretx-M0[C]//2014 IEEE International Conference on System Science and Engineering (ICSSE). IEEE, 2014:69-73.

        [7] Wang S, Gu D, Liu J, et al. A power analysis on SMS4 using the chosen plaintext method[C]//2013 9th International Conference on Computational Intelligence and Security (CIS). IEEE, 2013:748-752.

        [8] 鄭秀林, 李敏. SMS4算法的一種改進(jìn)[J]. 北京電子科技學(xué)院學(xué)報(bào), 2007, 15(4):16-18.

        [9] Harrison O, Waldron J. AES encryption implementation and analysis on commodity graphics processing units[C]//Proceedings of the 9th International Workshop on Cryptographic Hardware and Embedded Systems, 2007:209-226.

        [10] Iwai K, Nishikawa N, Kurokawa T. Acceleration of AES encryption on CUDA GPU[J]. International Journal of Networking and Computing, 2012,2(1):131-145.

        [11] Shane Cook. CUDA并行程序設(shè)計(jì)GPU編程指南[M]. 蘇統(tǒng)華, 李東, 李松澤, 等, 譯. 北京:機(jī)械工業(yè)出版社, 2014.

        A DATA COLLECTION AND PARALLEL ENCRYPTION COMMUNICATION SYSTEMBASED ON MODBUS PROTOCOL

        Huang Jian Zhang Hongmei Zhang Xiangli Cheng Da

        (GuangxiCollegesandUniversitiesKeyLaboratoryofCloudComputingandComplexSystems,GUILINUniversityofElectronicTechnology,Guilin541004,Guangxi,China)

        A data acquisition monitoring system based on Modbus is designed to monitor the running condition of industrial plant efficiently and centrally. The device management is separated from the data acquisition system in order to reduce the effects of dynamically changing equipment for data acquisition program and improve the convenience of equipment management. When this system is off line, it will be reconnected automatically, which improves its stability. Then, the advantages and disadvantages of traditional SM4 encryption algorithm are discussed and an improved SM4 encryption algorithm is proposed, which improves the security. Combining the structure characteristics of algorithm with the GPU parallel computing ability, an improved SM4 parallel data encryption algorithm based on GPU is designed. And the algorithm is applied to the data acquisition system, improving the real-time performance of data transmission.

        Data acquisition SM4 Parallel computing

        2015-10-19。國(guó)家自然科學(xué)

        61461010,61363031);廣西高校云計(jì)算與復(fù)雜系統(tǒng)重點(diǎn)實(shí)驗(yàn)研究課題(14101)。黃劍,碩士生,主研領(lǐng)域:信息安全,嵌入式應(yīng)用系統(tǒng)。張紅梅,教授。張向利,教授。陳達(dá),碩士生。

        TP309.2

        A

        10.3969/j.issn.1000-386x.2017.03.047

        猜你喜歡
        設(shè)備系統(tǒng)
        諧響應(yīng)分析在設(shè)備減振中的應(yīng)用
        Smartflower POP 一體式光伏系統(tǒng)
        WJ-700無(wú)人機(jī)系統(tǒng)
        ZC系列無(wú)人機(jī)遙感系統(tǒng)
        基于PowerPC+FPGA顯示系統(tǒng)
        半沸制皂系統(tǒng)(下)
        基于VB6.0+Access2010開(kāi)發(fā)的設(shè)備管理信息系統(tǒng)
        基于MPU6050簡(jiǎn)單控制設(shè)備
        電子制作(2018年11期)2018-08-04 03:26:08
        連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
        500kV輸變電設(shè)備運(yùn)行維護(hù)探討
        人禽杂交18禁网站免费| 国产亚洲真人做受在线观看| 99精品国产99久久久久久97| 中文字幕无码人妻丝袜| 中文字幕一区,二区,三区| 蜜桃精品视频一二三区| 玩弄少妇人妻中文字幕| 男女下面进入的视频| 国内成人精品亚洲日本语音| av在线不卡一区二区三区| 中文字幕亚洲乱码熟女1区2区| 老女老肥熟女一区二区| 国产伦久视频免费观看视频| 欧美大香线蕉线伊人久久| 伊人狠狠色j香婷婷综合| 一区二区三区国产视频在线观看| 日本久久久免费观看视频| 国产自国产自愉自愉免费24区 | 国内成+人 亚洲+欧美+综合在线 | 淫秽在线中国国产视频| 欧美疯狂性受xxxxx喷水| 亚洲图片日本视频免费| 在线精品免费观看| 亚洲AV无码国产精品久久l| 人妻少妇久久精品一区二区| 色婷婷精品大在线视频| 一本久久精品久久综合| 亚洲综合欧美色五月俺也去| a级毛片内射免费视频| 欧美日韩中文制服有码| 偷拍一区二区三区在线观看| 午夜视频在线观看一区二区小| 国产三级av在线播放| 无码中文字幕加勒比一本二本 | 岛国视频在线无码| 偷拍一区二区三区黄片| 中文字幕一区二区三区的| 日本19禁啪啪吃奶大尺度| 影音先锋每日av色资源站| 美女视频很黄很a免费国产| 亚洲中文字幕高清在线视频一区|