基于神经网络的数据序列加密
时间: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.