基于神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)序列加密

時(shí)間:2022-10-08 03:57:00

導(dǎo)語:基于神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)序列加密一文來源于網(wǎng)友上傳,不代表本站觀點(diǎn),若需要原創(chuàng)文章可咨詢客服老師,歡迎參考。

基于神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)序列加密

摘要本文基于神經(jīng)網(wǎng)絡(luò)算法,訓(xùn)練了一個(gè)能產(chǎn)生隨機(jī)函數(shù)的神經(jīng)網(wǎng)絡(luò)算法,對(duì)重要明文數(shù)據(jù)進(jìn)行序列加密。

關(guān)鍵詞數(shù)據(jù)加密序列加密神經(jīng)網(wǎng)絡(luò)

1引言

對(duì)于一些重要數(shù)據(jù),為了保證其安全性,我們需要對(duì)其進(jìn)行加密。當(dāng)前,數(shù)據(jù)加密算法有多種,本文采用了序列加密算法對(duì)重要數(shù)據(jù)進(jìn)行加密,一是因?yàn)樾蛄屑用芩惴ǖ募用苊荑€與解密密鑰相同,操作相對(duì)簡(jiǎn)單;二是序列加密算法是基于比特流或字符流的;三是序列加密算法的保密性取決于密鑰序列的隨機(jī)性。由于神經(jīng)網(wǎng)絡(luò)能根據(jù)不同的訓(xùn)練情況,對(duì)輸入空間與輸出空間進(jìn)行非線性的函數(shù)映射,因此,我們可以用神經(jīng)網(wǎng)絡(luò)的方法作為密鑰序列產(chǎn)生器來進(jìn)行數(shù)據(jù)加密。

2數(shù)據(jù)加密概述

2.1數(shù)據(jù)加密原理

一般的數(shù)據(jù)加密解密模型如圖1,在加密階段,明文X用加密算法和加密密鑰Ke得到密文Y=E(X,Ke)。

加密階段解密階段

截取者

明文X明文X

密文Y=E(Ke,X)

加密密鑰Ke解密密鑰Kd

圖1一般數(shù)據(jù)加密解密模型[1]

在保密階段,密文截取者有可能盜取密文,但由于沒有解密密鑰Kd而無法將其還原成明文,從而保證數(shù)據(jù)的安全性。

2.2數(shù)據(jù)加密技術(shù)分類

數(shù)據(jù)加密的技術(shù)可分為兩類,即對(duì)稱加密和非對(duì)稱加密。對(duì)稱加密的加密密鑰和解密密鑰相同,非對(duì)稱加密的加密加密密鑰和解密密鑰不相同,加密密鑰可以公開而解密密鑰需要保密。在對(duì)稱加密算法中,主要有序列密碼加密法和分組密碼加密法[2]。

2.3序列加密算法

這種加密算法將明文X看成連續(xù)的比特流(或字符流)x1,x2,x3,…..,在加密過程中用密鑰序列K=K1,K2,…中的第i個(gè)元素,對(duì)明文中的xi進(jìn)行加密。如圖2所示。

加密過程yi=E(Ki,xi)=xiXORKi

解密過程D(Ki,yi)=(xiXORKi)XORKi

從上述分析可得,序列密碼加密算法的保密性取決于密鑰的隨機(jī)性。如果密鑰是真正的隨機(jī)數(shù),則在理論上是不可破的,但是這種算法需要的密鑰大得驚人,很難在實(shí)際中應(yīng)用。

隨機(jī)種子I加密隨機(jī)種子I解密

KiKi

Xiyixi

明文序列密文序列明文序列

圖2序列加密[1]

2.4基于神經(jīng)網(wǎng)絡(luò)方法的序列加密算法模型

目前人們常用偽隨機(jī)序列作為密鑰,但是要求序列的周期要長(zhǎng),隨機(jī)性要好。

神經(jīng)網(wǎng)絡(luò)經(jīng)過訓(xùn)練后,網(wǎng)絡(luò)就會(huì)進(jìn)入到某一種穩(wěn)定的狀態(tài),對(duì)于一個(gè)已定的輸入,神經(jīng)網(wǎng)絡(luò)會(huì)按照某種非線性運(yùn)算規(guī)則,輸出一個(gè)確定值。由此,可以利用神經(jīng)網(wǎng)絡(luò)方法來產(chǎn)生偽隨機(jī)數(shù),同時(shí),神經(jīng)網(wǎng)絡(luò)每次產(chǎn)生輸出值經(jīng)過發(fā)散函數(shù)處理后,作為下一次的隨機(jī)種子輸入到神經(jīng)網(wǎng)絡(luò)中去。

對(duì)于一個(gè)初始的隨機(jī)種子,神經(jīng)網(wǎng)絡(luò)會(huì)產(chǎn)生一個(gè)與明文相匹配的偽隨機(jī)數(shù)列。利用這種方法,可以實(shí)現(xiàn)一次一個(gè)密鑰。用戶在使用時(shí),只需要知道初始隨機(jī)種子就可以進(jìn)行加密解密。而且在每次加密解密時(shí),初始隨機(jī)種子不同,產(chǎn)生的密文也不同。如圖3所示。

隨機(jī)種子I隨機(jī)種子I

KiKi

Xiyixi

明文序列密文序列明文序列

圖3用神經(jīng)網(wǎng)絡(luò)進(jìn)行序列加密模型

為了提高密鑰序列的周期性,本文引進(jìn)了發(fā)散函數(shù)Fx。其作用是:1)使得任何兩個(gè)函數(shù)乘積的周期都大于等于其中一個(gè)函數(shù)的周期,即T(f(x)*g(x))>=T(f(x)),T(f(x)*g(x))>=T(g(x)),2)若神經(jīng)網(wǎng)絡(luò)的輸入與輸出不一致,則需要將神經(jīng)網(wǎng)絡(luò)的輸出轉(zhuǎn)換為相匹配的輸入,3)盡可能使輸入值不重復(fù)。T為獲得函數(shù)周期的函數(shù),f(x)、g(x)為函數(shù)。

3神經(jīng)網(wǎng)絡(luò)加密算法描述

利用神經(jīng)網(wǎng)絡(luò)方法進(jìn)行加密分為兩個(gè)階段,即準(zhǔn)備階段和加密階段。

3.1準(zhǔn)備階段

在利用神經(jīng)網(wǎng)絡(luò)方法對(duì)數(shù)據(jù)進(jìn)行加密之前,首先要設(shè)計(jì)或者選擇某一個(gè)神經(jīng)網(wǎng)絡(luò),包括其隱含層的層數(shù),隱含層及輸入層,輸出層的神經(jīng)元個(gè)數(shù),每個(gè)神經(jīng)元的初始權(quán)值以及樣本值。然后對(duì)該網(wǎng)絡(luò)進(jìn)行訓(xùn)練,使之具有一定的分類能力。

目前,神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)和學(xué)習(xí)算法可以借助于編程語言實(shí)現(xiàn),也可以借助于相應(yīng)的工具,如Matlab,使用起來非常方便。經(jīng)過學(xué)習(xí)后,網(wǎng)絡(luò)中的層數(shù),各層的神經(jīng)元個(gè)數(shù),以及每個(gè)神經(jīng)元的權(quán)值等數(shù)據(jù)寫入到加密盤或者數(shù)據(jù)庫文件中去,為后面加密解密所用,操作過程如圖4所示。

圖4操作過程框圖

3.1加密階段

加密前,從加密盤或者數(shù)據(jù)庫文件將神經(jīng)網(wǎng)絡(luò)層數(shù),神經(jīng)網(wǎng)絡(luò)權(quán)系數(shù)據(jù)讀入到神經(jīng)網(wǎng)絡(luò)中去,生成一個(gè)用于加密的神經(jīng)網(wǎng)絡(luò)。對(duì)于初始給定的隨機(jī)種子和相同的神經(jīng)網(wǎng)絡(luò),該神經(jīng)網(wǎng)絡(luò)都會(huì)生成一個(gè)相同的偽隨機(jī)數(shù)列。加密開始時(shí),神經(jīng)網(wǎng)絡(luò)接受初始隨機(jī)種子,產(chǎn)生第一個(gè)偽隨機(jī)數(shù)作為加密密鑰與明文的第一個(gè)數(shù)進(jìn)行異或運(yùn)算,生成第一個(gè)密文數(shù)。然后,將第一個(gè)偽隨機(jī)數(shù)經(jīng)過發(fā)散函數(shù)處理,生成下一個(gè)送入到網(wǎng)絡(luò)的隨機(jī)種子——如此反復(fù),直到所有的明文數(shù)據(jù)處理完畢。所有的明文數(shù)據(jù)處理完畢后,將初始給定的隨機(jī)種子保存到文件中去。至此,整個(gè)數(shù)據(jù)加密才算完畢,其流程如圖5所示。

加密過程解密過程

是是

結(jié)束

結(jié)束

圖5加密解密流程圖

4程序?qū)崿F(xiàn)

本文對(duì)一個(gè)輸入層為三個(gè)節(jié)點(diǎn),輸出層為一個(gè)節(jié)點(diǎn)的神經(jīng)網(wǎng)絡(luò)用Delphi對(duì)上述算法的主要部分進(jìn)行了實(shí)現(xiàn)。在Delphi中自定義一個(gè)類TneuralNet,該類的屬性有神經(jīng)網(wǎng)絡(luò)層數(shù)、每一層的節(jié)點(diǎn)個(gè)數(shù)、每一個(gè)節(jié)點(diǎn)輸出函數(shù)和初始隨機(jī)種子樹。

其中要用到的函數(shù)有:

PROCEDUREReadDataToNet(Filename:String;net:TneuralNet);//從文件讀入數(shù)據(jù)到網(wǎng)絡(luò)

PROCEDURESaveSeedToFile(Filename:String);//從隨機(jī)種子寫入到文件

FUNCTIONReadSeedFromFile(Filename:String);//從文件中讀出隨機(jī)種子

FUNCTIONNetOutput(input1,input2,input3:integer;net:TneuralNet):integer;//經(jīng)過神經(jīng)網(wǎng)絡(luò)計(jì)算輸出一個(gè)值

PROCEDUREFx(int:integer;VarOut1:integer;VarOut2:integer;VarOut3:integer);//發(fā)散函數(shù)

加密函數(shù):

PROCEDUREJiaMi(Str1:String;VarStr2:String)//對(duì)一串?dāng)?shù)據(jù)進(jìn)行加密str1為任意長(zhǎng)度的

//字符串以’#0’結(jié)束

VAR

InitSeed1,InitSeed2,InitSeed3:Integer

I,Seed1,Seed2,Seed3:Integer;

Pass,C:Char

BEGIN

ReadDataToNet(‘net.dat’,Net);

InitSeed1:=Strtoint(editmask1.text);

InitSeed2:=Strtoint(editmask1.text);

InitSeed3:=Strtoint(editmask1.text);

Seed1:=InitSeed1;

Seed2:=InitSeed2;

Seed3:=InitSeed3;

//上述初始隨機(jī)種子也可以根據(jù)日期,時(shí)間,姓名等用隨機(jī)函數(shù)產(chǎn)生

Pass:=NetOutput(InitSeed1,InitSeed2,InitSeed3,Net);

I:=0;

While(I<>length(str1))

BEGIN

Str2:=Char(byte(pass)xorbyte(Str1));

Fx(Pass,Seed1,Seed2,Seed3);

Pass:=NetOutput(Seed1,Seed2,Seed3,Net);

I:=I+1;

END;

Savedatatofile(‘seed.dat’);

END;

PROCEDUREJieMi()//對(duì)一串?dāng)?shù)據(jù)進(jìn)行解密

BEGIN

VAR

I,Seed1,Seed2,Seed3:Integer;

Pass,C:Char

BEGIN

ReadDataToNet(‘net.dat’,Net);

ReadSeedFromFile(‘seed.dat’);

Pass:=NetOutput(Seed1,Seed2,Seed3,Net);

I:=0;

While(I<>length(str1))

BEGIN

Str2:=Char(byte(pass)xorbyte(Str1));

Fx(Pass,Seed1,Seed2,Seed3);

Pass:=NetOutput(Seed1,Seed2,Seed3,Net);

I:=I+1;

END;

END;

5結(jié)束語

用神經(jīng)網(wǎng)絡(luò)方法加密的優(yōu)點(diǎn)是,1)實(shí)現(xiàn)了“一次一密”,安全性高。2)產(chǎn)生的偽隨機(jī)數(shù)列的隨機(jī)性高。3)加密后,密文數(shù)據(jù)量沒有增加。4)密文截獲者要想破譯密文,必須同時(shí)知道網(wǎng)絡(luò)結(jié)構(gòu),網(wǎng)絡(luò)參數(shù)以及初始化隨機(jī)種子,否則很難破譯。但是,加密成功的好壞關(guān)鍵在于如何去設(shè)計(jì)一個(gè)好的網(wǎng)絡(luò)和發(fā)散函數(shù)。

參考文獻(xiàn)

1黃叔武,楊一平,計(jì)算機(jī)網(wǎng)絡(luò)工程教程,北京,清華大學(xué)出版社,1999

2尹朝慶,尹皓,人工智能與專家系統(tǒng),北京,中國(guó)水利水電出版社,2001

3袁曾任,人工神經(jīng)元網(wǎng)絡(luò)及其應(yīng)用,北京,清華大學(xué)出版社,1992.