基于神經網絡的數據序列加密

時間:2022-10-08 03:57:00

導語:基于神經網絡的數據序列加密一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。

基于神經網絡的數據序列加密

摘要本文基于神經網絡算法,訓練了一個能產生隨機函數的神經網絡算法,對重要明文數據進行序列加密。

關鍵詞數據加密序列加密神經網絡

1引言

對于一些重要數據,為了保證其安全性,我們需要對其進行加密。當前,數據加密算法有多種,本文采用了序列加密算法對重要數據進行加密,一是因為序列加密算法的加密密鑰與解密密鑰相同,操作相對簡單;二是序列加密算法是基于比特流或字符流的;三是序列加密算法的保密性取決于密鑰序列的隨機性。由于神經網絡能根據不同的訓練情況,對輸入空間與輸出空間進行非線性的函數映射,因此,我們可以用神經網絡的方法作為密鑰序列產生器來進行數據加密。

2數據加密概述

2.1數據加密原理

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

加密階段解密階段

截取者

明文X明文X

密文Y=E(Ke,X)

加密密鑰Ke解密密鑰Kd

圖1一般數據加密解密模型[1]

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

2.2數據加密技術分類

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

2.3序列加密算法

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

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

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

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

隨機種子I加密隨機種子I解密

KiKi

Xiyixi

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

圖2序列加密[1]

2.4基于神經網絡方法的序列加密算法模型

目前人們常用偽隨機序列作為密鑰,但是要求序列的周期要長,隨機性要好。

神經網絡經過訓練后,網絡就會進入到某一種穩定的狀態,對于一個已定的輸入,神經網絡會按照某種非線性運算規則,輸出一個確定值。由此,可以利用神經網絡方法來產生偽隨機數,同時,神經網絡每次產生輸出值經過發散函數處理后,作為下一次的隨機種子輸入到神經網絡中去。

對于一個初始的隨機種子,神經網絡會產生一個與明文相匹配的偽隨機數列。利用這種方法,可以實現一次一個密鑰。用戶在使用時,只需要知道初始隨機種子就可以進行加密解密。而且在每次加密解密時,初始隨機種子不同,產生的密文也不同。如圖3所示。

隨機種子I隨機種子I

KiKi

Xiyixi

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

圖3用神經網絡進行序列加密模型

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

3神經網絡加密算法描述

利用神經網絡方法進行加密分為兩個階段,即準備階段和加密階段。

3.1準備階段

在利用神經網絡方法對數據進行加密之前,首先要設計或者選擇某一個神經網絡,包括其隱含層的層數,隱含層及輸入層,輸出層的神經元個數,每個神經元的初始權值以及樣本值。然后對該網絡進行訓練,使之具有一定的分類能力。

目前,神經網絡的設計和學習算法可以借助于編程語言實現,也可以借助于相應的工具,如Matlab,使用起來非常方便。經過學習后,網絡中的層數,各層的神經元個數,以及每個神經元的權值等數據寫入到加密盤或者數據庫文件中去,為后面加密解密所用,操作過程如圖4所示。

圖4操作過程框圖

3.1加密階段

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

加密過程解密過程

是是

結束

結束

圖5加密解密流程圖

4程序實現

本文對一個輸入層為三個節點,輸出層為一個節點的神經網絡用Delphi對上述算法的主要部分進行了實現。在Delphi中自定義一個類TneuralNet,該類的屬性有神經網絡層數、每一層的節點個數、每一個節點輸出函數和初始隨機種子樹。

其中要用到的函數有:

PROCEDUREReadDataToNet(Filename:String;net:TneuralNet);//從文件讀入數據到網絡

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

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

FUNCTIONNetOutput(input1,input2,input3:integer;net:TneuralNet):integer;//經過神經網絡計算輸出一個值

PROCEDUREFx(int:integer;VarOut1:integer;VarOut2:integer;VarOut3:integer);//發散函數

加密函數:

PROCEDUREJiaMi(Str1:String;VarStr2:String)//對一串數據進行加密str1為任意長度的

//字符串以’#0’結束

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;

//上述初始隨機種子也可以根據日期,時間,姓名等用隨機函數產生

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()//對一串數據進行解密

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結束語

用神經網絡方法加密的優點是,1)實現了“一次一密”,安全性高。2)產生的偽隨機數列的隨機性高。3)加密后,密文數據量沒有增加。4)密文截獲者要想破譯密文,必須同時知道網絡結構,網絡參數以及初始化隨機種子,否則很難破譯。但是,加密成功的好壞關鍵在于如何去設計一個好的網絡和發散函數。

參考文獻

1黃叔武,楊一平,計算機網絡工程教程,北京,清華大學出版社,1999

2尹朝慶,尹皓,人工智能與專家系統,北京,中國水利水電出版社,2001

3袁曾任,人工神經元網絡及其應用,北京,清華大學出版社,1992.