基于神经网络的数据序列加密

时间: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.