语音加密解密算法研究及仿真和实现项目木设计方案.docx
《语音加密解密算法研究及仿真和实现项目木设计方案.docx》由会员分享,可在线阅读,更多相关《语音加密解密算法研究及仿真和实现项目木设计方案.docx(18页珍藏版)》请在冰豆网上搜索。
语音加密解密算法研究及仿真和实现项目木设计方案
语音加密解密算法研究及仿真和实现项目木设计方案
1引言(或绪论)
现代信息通信技术的发展迅速,已经实现设备的移动化,功能的智能化,传输的无线化,对语音的应用也向着这些方面发展,语音传输设备的可移动性,语音传输质量的可控性,语音传输介质的无线性。
同时也对语音传输的便利性,传输过程中的安全性提出了更高要求。
因此本课题要求针对语音信息如何进行安全传输进行的研究,设计出一种切实可行的方案,并对方案做出改进。
主要工作有语音采集、语音信号预处理,语音信息的数制转换及逆转换,语音信号逆处理,语音信号加解密处理,以完成一次较完整的语音安全传输过程。
1.1课题来源及意义
由于信息具有开放性的特征不可避免的产生信息安全问题,信息安全问题层出不穷,每天威胁着网络用户的安全[1],语音的安全问题在手机通讯中并不被关注,因为目前的安全措施已基本满足,而在军队或商业安全领域等安全性需求高的地方需要更高的安全保障。
这就需要在语音的传输过程中对语音信号进行加密保护,通过对语音进行加密措施使其成为一段与噪声相似的信号,在没有获知解密方法的前提下,即使语音信号被截获,也因为不能将其变换为原来的语音数据而窃取信息。
由此可以看出,加密方法的选取直接影响到语音信号的保密性。
据此选择近几年来的流行加密方法混沌加密。
1.2混沌加密简介及研究现状
1.2.1混沌简介
混沌是非线性动力系统所特有的一种运动形式,它广泛存在于自然界。
混沌系统是一个对初始值和系统参数都非常敏感的确定性系统,其确定性表现在其动力学方程是确定的即系统状态可以重现.但是两个完全相同的混沌系统,如果初始值或系统参数只存在微小差异,经过多次迭代以后,两个系统的差别会非常明显,毫无规律性可言,因此保密程度很高。
对于语音加密的研究过程中,最关键的就是确保语音传输的安全性。
上文中已经提到混沌系统有良好的密码学特性。
原语音信号在用混沌系统产生的密钥流进行加密以后所得到的密文流信号是宽带白噪声频谱。
即使被窃听者截获也会因为被误认为是噪声信号。
并且由于混沌对于初始特征值以及系统参数的敏感性更加加强了加密信号被破解的难度,这样就起到了增加信号安全性的效果。
使用混沌系统对语音信号进行加密就是把语音信号在幅度和频率上的特征进行改变,使其原有特性消失来防止窃听者截获语音信号,以此来实现对语音信号进行加密的的目的。
1.2.2混沌加密研究现状
将混沌应用于通信领域的思想始于1990年Pecora和Carroll的L.M.Pecora发现。
混沌加密的过程是动态加密的过程,因此经过混沌系统的加密后语音信号可以有很高的保密性[2][3]。
混沌信号的特点有:
长时间不可预知性、对初始值的高度敏感性、非周期性,连续宽带频谱,类噪声,可重现、冲击式的自相关性[16]。
这些特点十分适合其在保密通信中应用。
以混沌系统作为加密手段的通信从最开始的混沌调制、混沌键控、混沌掩盖等模拟方式转变为频谱效率高、仪器参数易于调节的数字方式。
如今的研究重点转向全数字的混沌加密和扩频技术,提出了很多基于离散混沌映射的加密系统[6]。
现在,研究者们都看到了传统密码学存在的不足,而混沌作为一种非线性现象,有许多值得利用的性质,或许能够为密码学的发展提供新的思路,为保密通信提供更好的手段。
同时,目前的研究也发现,传统的密码方法中存在着与混沌的联系。
与此同时,混沌现象也具有密码的某些特征,因此,研究混沌保密通信,不仅对构造新的更安全的加密[10]方法和加密体系有帮助,同时,对进一步深入地理解现有的密码与密码体制也有帮助,这无论是在理论上还是在实际应用中,都十分有益。
用混沌对实时的语音信号进行加密,加密信息很难破译,语音信号的安全性得到了加强,具有很强的实用性。
尽管对混沌的研究才进行初始阶段,目前仅是对实时语音进行加密研究,加密时的隐蔽性、加密手段的复杂性等问题还有待于加强,但相信随着对混沌研究工作的不断开展,基于混沌的加密手段将更加成熟,混沌在通信安全中能发挥更重要作用。
[10][11]
1.3加密解密介绍
(1)在密码学中,还未经过加密过程的信息称为明文,而已经经过加密过程的信息称为密文。
从明文到密文的变换称为加密,从密文到明文的变换称为解密,加密和解密都是在密钥的控制下进行的,给定一个密钥就可确定一对具体的加密变换和解密变换。
(2)加密解密加密作为保障数据安全的一种方式,不是现在才有的,它产生的历史非常久远。
就加密技术而言,一般来说分成两大类,“对称式”和“非对称式”。
所谓的“对称式”是指在加密和解密过程当中使用的是同一个密钥,而“非对称式”加密就是指加密和解密所使用的不是同一个密钥,通常有两个密钥,称为“公钥”和“私钥”,这两个密钥需要配对使用,否则就不能打开加密文件。
目前,“对称式”的加密技术被广泛采用。
用算法产生加密密钥{Xn}依据一定方式加载到由信源产生的需要被加密的明文{Sn}上形成密文{Fn},这时加密过程完成,密文可以在信道中安全地被传输;而解密过程是把由算法产生的解密钥{Yn}作用于加密产生的密文{Fn}中,其作用的结果输出至信宿。
解密完成后,信宿接收到的应是明文{Sn}。
从实质上来说,解密过程是加密过程的逆运算,它的目的是为了从密文中剔除加密钥,使得密文仅余下明文信息。
[2]
1.4本论文的主要工作及内容安排
该课题要求对读取的语音信号用matlab进行算法编程来完成语音的预处理、加密、解密等操作并分析仿真结果。
优化设计方案,根据仿真中出现的问题对算法进行改进,最终得出较好的语音加密效果。
本课题研究的是语音信号在发送端经过预处理变成易于变换成二进制的整数并最终生成明文流,同时由混沌系统的logistic映射经过迭代产生密钥流。
然后将明文流与密钥流进行异或得出密文流,并各自画出三种序列流的频谱图与倒谱图作为对照。
在接收端根据对称密码体制将密文流与密钥流异或恢复出明文流,将明文流转换成十进制后画出波形图、频谱图和倒谱图。
最后将原语音信号,加密后的语音信号与恢复后的语音信号的三个图进行对比,观察加密解密效果。
研究工作:
(1)掌握用matlab程序读取语音信号,对语音信号进行离散化取整预处理,绘出语音信号的波形图,频谱图以及倒谱图。
(2)实现将语音连续信号进行离散取整,并将十进制的信号(有正有负)转换成为二进制的序列流,注意序列变换的行列顺序。
也要实现将一维二进制的序列流变换成为指定二维序列流并最终转换成为十进制的信号。
(3)学会应用对称密码体制的加密解密原理对语音信号变换成的明文流进行加密解密。
(4)研究混沌系统基于logistic映射的加密原理,设计出一种能够自由赋值给系统参数和初始值的产生密钥流的方法。
2语音信号读取与预处理
2.1语音信号的特点与选取
频率特点:
语音信号是随时变化的一维信号,它的频率范围可达10KHz以上,
但是对于语音的清晰度和可懂性有明显影响的频率成分,最高约为5.7KHz。
语音信号的频谱分量集中在300~3400Hz的范围内,电话语音的频率范围大概是60~3400Hz左右。
时域特点:
语音信号是一种典型的非平稳随机信号。
从时域波形的展开图中可以发现,有些时间内具有很强的周期性,有些段落中又具有噪声特性,而且周期性语音和噪声的特征也在不断变化之中。
在5~50ms的范围内,语音的频谱特性和一些物理特征参数(短时能量、平均幅度、短时平均过零率)基本保持不变或者变化很缓慢,这就是语音信号的短时平稳性。
这样,我们用平稳过程的处理方法和理论引入到语音信号的短时处理中,每个短时的语音段称为一个分析帧,分析帧的既可以是连续的,也可以是交叠的,一般帧的长度为10ms~30ms,这一特点是语音信号数字处理的基础。
[17]
用matlab可以对语音文档进行读取,写入和播放。
声音文件大都以(.wav)的格式储存,matlab处理此类文件的格式为:
WAV文件的读取:
[y,fs,nbits]=wavread(‘*.wav’)
WAV文件的写入:
wavwrite(y,fs,nbits,’*.wav’)
WAV文件的播放:
wavpla(y,fs)
y代表(.wav)格式的语音文件,有效取值为[-1.0,1.0],若y是N×2的矩阵,则为立体声;fs为取样频率;nbits是每个样本位数,通常取8或16。
例:
读取并播放声音文件“tada.wav”,截取其左声道中第二秒钟的语音数据,将它重复三遍后再播放,然后显示比较这两组语音数据的波形图,最后将处理后的数据以单声道写入文档“al.wav”并保存。
最后结果如图2.1。
[8]
[y,fs]=wavread(‘c:
\windows\media\tada.wav’);%读取语音文档数据
wavplay(y,fs);%播放语音文档
x=y(22051:
44100,1);%截取左声道中第二秒钟的语音数据
x=[x;x;x];%将语音数据段重复三遍
wavplay(x);%播放语音
subplot(2,1,1);%确定显示位置1
plot(y);%画原文件完整数据语音波形图
subplot(2,1,2);%确定显示位置2
plot(x);%画处理后数据语音波形图
wavwrite(x,fs,‘e:
\desktop\al.wav’);%将处理后的数据写入文档
分析:
为了使图形简单且突出语音信号特点截取了单声道的声音波形,并将其重复三遍,以便于观察在进行混沌加密时对于相同的声音信号加密后的波形的变化。
事实上由于密钥的不同即使相同的明文信息得到的密文也不相同,这样的保密通信不会因为明文而泄露信息,保证了语音信号的通信安全。
2.2语音信号的预处理
2.2.1语音信号的频谱与倒频谱分析
(1)语音信号的频谱分析过程:
傅里叶频谱分析是语音信号频域分析中广泛采用的一种方法。
语音波是一个非平稳过程,因此适用于周期、瞬变或平稳随机信号的标准傅里叶变换不能直接表示语音信号,而应该用短时傅里叶变换对语音信号的频谱进行分析,相应的频谱称为“短时谱”。
进行频谱分析时,在时域数据进行短时FFT处理之前都要进行加窗处理。
(2)短时傅里叶变换(频谱分析):
傅里叶频谱分析的基础是傅里叶变换,用傅里叶变换及其反变换可以求得傅里叶谱、自相关函数、功率谱、倒谱。
由于语音信号的特性是随着时间缓慢变化的,由此引出语音信号的短时分析。
如同在时域特征分析中用到的一样,这里的傅里叶频谱分析也采用相同的短时分析技术。
信号x(n)的短时傅里叶变换定义为
(2-1)
式中,ω(n)为窗口函数。
可以从两个角度理解函数
的物理意义:
第一种解释是,当n固定时,如n=n0,则
是将窗函数的起点移至n0处截取信号x(n),再做傅里叶变换而得到的一个频谱函数。
这是直接将频率轴方向来理解的。
另一种解释是从时间轴方向来理解,当频率固定时,例如ω=ωk,则
可以看作是信号经过一个中心频率为ωk的带通滤波器产生的输出。
这是因为窗口函数ω(n)通常具有低通频率响应,而指数
对语音信号x(n)有调制的作用,使频谱产生移位,即将x(n)频谱中对应于频率ωk的分量平移到零频。
[13]
(3)短时傅里叶反变换(倒谱分析):
傅里叶变换建立了信号从时域到频域的变换桥梁,而傅里叶反变换则建立了信号从频域到时域的变换桥梁这两个域之间的变换为一对一映射关系。
倒频谱,就是对功率谱的对数值进行傅立叶逆变换,将复杂的卷积关系变为简单的线性叠加,从而在其倒频谱上可以较容易地识别信号的频率组成分量,便于提取所关心的频率成分,较准确地反映故障特性。
在语音识别中中可采用倒谱变换来观察语音信号的各种特点如基频,从而来区别两种语音信号。
倒频谱分析是一种二次分析技术,是对功率谱的对数值进行傅立叶逆变换的结果。
其计算公式为:
(2-2)
该分析方法受传感器的测点位置及传输途径的影响小,能将原来频谱图上成族的边频带谱线简化为单根谱线,以便提取、分析原频谱图上肉眼难以识别的周期性信号。
但是进行多段平均的功率谱取对数后,功率谱中与调制边频带无关的噪声和其他信号也都得到较大的权系数而放大,降低了信噪比。
我们知道,
以看作是加窗后函数的傅里叶变换,为了实现反变换,将
进行频率采样,即令ωk=2πk/L,则有
(2-3)
其中,L为频率采样点数。
将
在时域n上每隔R个样本采样,则可令
(2-4)
用这些
求出其离散傅里叶反变换yr(n)如下:
(2-5)
而
(2-6)
可以证明,x(n)和y(n)之间只相差一个比例因子,它们的关系如下:
[13][14][15][16](2-7)
2.2.2语音信号的matlab分析
根据以上分析及相应公式,用matlab进行数据分析和处理,画出语音信号的频谱图,倒谱图作为加密以后图形的对照,以及与解密后信号的频谱倒谱做比较,观察信号的恢复情况。
如图2.2程序如下:
[y,fs]=wavread('e:
\desktop\al.wav',(65000));%读入一段语音数据
t=(0:
length(y)-1)/fs;%计算样本时刻
subplot(3,1,1);%确定显示位置
plot(t,y);%画波形图
legend('波形图');
xlabel('时间(s)');
ylabel('幅度');
x=fft(y.*hamming(length(y)));%作加窗傅立叶变换
fm=5000*length(x)/fs;%限定频率范围
f=(0:
fm)*fs/length(x);%确定频率刻度
subplot(3,1,2);
plot(f,20*log10(abs(x(1:
length(f)))+eps));%画频谱图
legend('频谱图');
xlabel('频率(Hz)');
ylabel('频谱幅度(dB)');
c=fft(log(abs(x)+eps));%倒频谱计算
ms1=fs/1000;
ms20=fs/50;
q=(ms1:
ms20)/fs;%确定倒频刻度
subplot(3,1,3);
plot(q,abs(c(ms1:
ms20)));%画倒谱图
legend('倒谱图');
xlabel('倒频(s)');
ylabel('倒频谱幅度');
(2)在将语音信号读入时matlab就已将连续的语音信号时间离散化并存入文件,要将该时间离散化的信号变成数字化信号还需将各个时间离散化信号值取整,以便于将信号转换成为二进制数据流进行加密解密等一系列操作。
又因为matlab记录的文档中语音信号的数值有效取值为[-1.0,1.0],也就是说记录的语音信号的值都为小数,但在小数点后第三位就可以区分出每个数值的大小,因此为了便于转换可先将其扩大1000倍后再取整,这样就可以从十进制整数转换为二进制,使得程序简捷了许多。
f2=ceil(y*1000);%将原语音信号扩大后取整
wavplay(f2,fs);%播放语音文档
变换后的图形如下:
将该信号与原语音信号的波形做对比由图2.3与图2.4对比可以看出,经过预处理的语音信号和原语音信号大致相同,即可以用图2.3代替原语音信号,因为经过加密传输解密之后正确恢复的语音信号也只能和图2.3一致,不能再恢复成原语音信号,但是丢失的这些语音数据并不影响用户对声音的判断,这是语音信号能够传输的基础。
3语音信号加密解密设计
3.1加密方案设计
语音语音加密原理框图在对语音信号进行预处理、加密解密分析之后,将各个步骤联系起来绘出了语音加密原理框图如下:
3.1.1加密方案的选用分析
加密方法选用混沌加密方案,基于离散混沌映射的加密系统有Logistic(罗切斯特)映射、Henon(埃农)映射、帐篷映射、kent(肯特)映射。
Logistic映射被公认为是能体现混沌特点的最简单的离散混沌系统映射,它来源于对人口增长模型的研究,其表达式可表示为:
(3-1)
其中,x(n)、x(n+1)为Logistic映射的状态值,μ为系统参数。
图3-1是Logistic映射分岔图。
当μ超过3时,其解轨迹出现分岔,而且一分再分,分岔点出现得越来越快,当μ=3.569945672时,进入混沌状态。
将Logistic映射应用于保密通信时,通常将初始状态值和参数μ作为密钥,但遇到一个周期窗口问题。
当μ=1+
=3.828到μ=3.841037时,Logistic映射存在周期3解,紧接着有周期6、周期12等窗口。
[6]周期3窗口及邻接系列窗口如图2所示。
周期窗口有可能泄露密钥。
例如,当μ=3.830时,通过对x(n)进行多次的迭代,最后都是(0.504666…,0.957416…,0.156419…)和(0.494514…,0.958634…,0.156149…),后面再进行迭代也只会出现这三个值,这是典型的短周期,存在一定的安全风险。
为了避免周期窗口和问题短周期,采用两个不同参数的Logistic映射,两个映射初始值不同,通过动态比较两个映射每次迭代的状态值产生二进制伪混沌序列的方案,取得了一定的效果。
在此基础上,提出先让两个映射进行次数不等(在50到100次之间)的初始迭代,然后再同时迭代[6]的方案,并基于此方案,进行语音采集、压缩、实时加/解密等功能的实现。
上图绘出了当x在[0,1]之间取值,
在[2.8,3.99]之间取值时logistic映射分岔图,当μ=3.569945672时,进入混沌状态。
因此将Logistic映射应用于保密通信时,通常将初始状态值和参数μ作为密钥。
3.1.2混沌加密方案的具体流程
基于流加密思想,实现对明文的逐位加密。
加密过程表示成:
c=c1c2…=es
(1)(p1)es
(2)(p2)…(3-2)
其中,p={p1,p2…}是明文位串,{s
(1),s
(2)…}是伪混沌位序列,c={c1,c2…}是密文位串。
加密函数es(i)进行模2加运算,用伪混沌位序列掩盖明文信息。
在伪混沌位序列产生方法上,采取不同μ值、不同初始状态值的两个不同Logistic混沌映射进行迭代,先让它们分别初始迭代m、n次(m≠n),再同时迭代,通过动态比较两个映射每次迭代的状态值,产生二进制伪混沌序列。
具体算法是:
①在区间[3.57,4]中,选择两个不同的μ值,分别作为两个映射参数;
②在区间[0,1]中,选择两个不同的实数,分别作为两个映射迭代的初始状态值;
③在区间[50,100]中,选择两个不同的整数m和n,分别作为两个映射的初始迭代次数。
两个映射先分别迭代m和n次,得到两个状态值xm和yn,然后再开始同时迭代,每次
迭代后,比较两个映射的状态值。
如果两个映射分别表示为f1和f2,如果f1(xm)>f2(yn),产生二进制位‘1’;否则,产生二进制位‘0’。
如此类推,形成伪混沌二进制位序列;
④读入明文信息,对每一个明文信息位,依据第③步算法,将两个映射迭代,比较每次迭代后的状态值,产生二进制位0或1,并与明文信息位进行模2加运算,实现加密。
该操作一直持续到将所有明文信息位加密完为止
由于μ、初始状态值、初始迭代次数皆可选择,因此,即使在明文信息中出现的重复字符,加密后也会产生不同的密文。
不同的μ值、不同的初始状态值以及不同的初始迭代次数的组合大大地减少了周期窗口出现的几率,提升了伪混沌二进制位序列的不可预测性,在扩大密钥空间的同时,提高了算法的安全性。
为了进一步提高保密性能,本方案可让用户每次通信前自行设置密码,方案依据特定的算法,根据密码生成μ值、初始状态值以及初始迭代次数值,达到“一次一密”的效果。
[6]
3.2解密方法
对称密码体制是一种传统的密码体制,也称为私钥密码体制,根据能否由加密过程推导出解密过程(或由解密过程推导出加密过程)而将密码体制分为对称密码体制和非对称密码体制。
在对称加密体制中,加密和解密采用相同的密钥或者可由其中的一个很方便的推导出另外一个,这样一来能够加密就能够解密[12][13]。
该算法的计算量小,加密的方式简单,但是有很强的保密能力,是现在信息加密采用的主要方法。
本课题即采用对称密码体制进行解密,在已设计出的混沌logistic映射加密钥的基础上,解密时只需将加密钥与密文流异或即可恢复明文序列,也就完成了对语音信号的解密过程。
4语音信号加密解密算法程序设计
4.1算法步骤
第一步:
读取已处理声音文件,并画出其频谱图、倒谱图,以便于跟之后的结果作对比。
第二步:
调用函数来自定义两个系统的初始迭代次数、初始值与系统参数,并将赋值结果送给混沌系统的logistic映射的表达式进行初始迭代,最终得出生成密钥流的初始值。
第三步:
两个系统同时进行logistic映射迭代,并动态比较两个系统的对应值得到一维密钥流序列。
第四步:
将原语音信号扩大一千倍后取整,为将其简单的转换成二进制明文流做准备。
并画出其波形图,频谱图以及倒谱图作为对照。
第五步:
将一维有正有负的十进制整数信号转换成为七位带符号的二维二进制数据流,再将二维的二进制数据流转换成为一维的明文流序列,以便于进行按位加密。
第六步:
将第三步生成的一维密钥流序列与第五步生成的一维明文流序列按位进行异或生成一维的密文流序列。
第七步:
画出密文流序列的波形图,频谱图以及倒谱图,以便于观察混沌logistic映射加密的效果。
第八步:
将第六步生成的一维密文流序列与第三步生成的一维密钥流序列按位异或得到恢复后的一维明文流序列。
第九步:
将此一维明文流序列连续七个数据为一组转换成二维的二进制数据流,注意转换时的顺序。
然后将每行七位带符号的二进制数转换成为有正有负的一维十进制整数。
第十步:
将得到的一维十进制整数缩小一千倍就得到量化后的语音信号数据流,即恢复后的语音信号。
画出该数据流的波形图,频谱图以及倒谱图来与原量化的语音信号做比较,并将其与原语音信号对比差异。
4.2算法流程图
其中第二三步的整体的混沌流加密方案的流程图如下:
图3-3混沌加密方案流程图
图3-3混沌加密方案程序设计流程图
结论
根据第四章的语音信号加密解密算法的程序设计来编写matlab程序,程序见附录,由程序得出来四幅图,分别是:
原语音信号波形图、频谱图及其倒谱图,量化后语音信号波形图、频谱图及其倒谱图,加密后语音信号波形图、频谱图及其倒谱图,解密后语音信号波形图、频谱图及其倒谱图。
现将四幅图列出以观察对比结果。
由图1和图2可以观察出在量化前后语音信号的声音波形幅度、频谱大小以及倒谱幅度大致相同,由此我们可以用量化的语音信号代替原语音信号进行一系列变换,这样使得数据的变换更简洁。
图3是图2经过混沌系统的logistic映射生成的密钥进行加密之后得到的,由两图对比可知,加密后的语音信号的时域波形已经接近白噪声的特性,频域幅值是在0~5000Hz内平均分布,已经没有语音信号的特点了,倒频谱特性图3也与图2的完全不同,即使该信号在信息传输中被截获,也不能识别出它所携带的信息了,说明混沌系统的logistic映射加密可行。
图4是图3经过混沌系统的logistic映射生成的相同密钥进行解密密之后得到的,由图4与图2对比可知图4与图2除去时域与频域波形幅度值的差异外完全相同,而倒谱图则完全相同。
事实上这种完全相同一般是不会发生的,因为本课题设计的没有传输过程,所以恢复的语音信号与量化后的语音信号无误差,而实际中信号会在传输过程中或多或少的都出现误差,因此不会有完全相同的恢复信号。
图4与图1比较得知,时域与频域的赋值几乎一样,