针对目前网络电话语音加密的不足,我们使用一种对语音进行分组加密的动态加密方法,这种方法可以通过对加密算法的动态选择,以及密钥的动态分配来增加加密的复杂度,利用数字信封技术来保证密钥的安全传输,提高通话安全。
一、网络电话语音加密的方式
目前的电话安全系统,根据加密方式不同分为两种:一是端到端加密;一是网络加密。后者的代价较高,因此本文选择端到端加密,首先在发送端对数字语音进行分组,目的就是把信息量较大的语音分散成多个较小的分组,然后动态选择加密算法对分组分别加密,接收端收到密文后,利用约定好的方式对密文解密,最后还原信息。
1、网络电话加密算法的动态选择
应用表明单纯地使用一种加密算法不能提供很高的安全性,因此理想的加密方式应具有动态性,本文采用先对语音分组,然后用不同算法对分组分别加密的方式来实现动态性。首先在通信的两端分别建立一个加密算法库,库里包含有n种加密算法E,出于加密速度的考虑,算法库使用对称加密算法,并对这些算法编号,序号为f。由随机数产生器产生一个随机数Key,计算i= Key%n,根据i值来选择算法Ei,作为第一个分组的加密算法,其余的分组按照顺序分别使用算法Ei+1来加密。这样攻击者就无法猜测每次加密时具体使用的算法,达到了算法选择的不确定性要求。这些加密算法的执行是同步的,因此分组加密耗赞的最长时间就是整个加密过程所耗费的时间,对整体数据处理速度影响不大。
2、密钥的动态分配及传输
密钥是关系算法安全的一个关键性因素,利用随机数产生器产生密钥的方法应用较多,在本文中,由产生器产生的随机数并不直接作为加密的密钥,因为在多个分组中如果使用同一个随机数作为密钥,会降低算法的安全性,所以本文在建立算法库的同时,分别在通信两端建立一个移位函数库,库中包含有多种移位函数F,用于随机数Key的移位处理。类似上面加密算法的选择过程,选择多种移位函数对Key移位处理,K1=F1(Key),k2=f2(Key)……然后分配给相应的分组作为加密的密钥,由于对Key进行了移位处理,各分组之间的密钥不会出现雷同。不同的是,本文中每次密钥的产生是独立的,直接由随机数产生器产生,与明文及上次的密钥无关,分配简单,提高了执行效率。
由于算法库中使用对称加密算法,那么就存在一个Key的安全传输问题,数字信封技术则解决了这个问题:发送端使用接收端的公钥加密Key,得到密文Key’,然后将它和语音密文一同发送,接收端再用私钥解密Key’得到Key,最后对语音密文解密。
二、网络电话语音加密模块的设计
由图1可以看出,本文是在原有通话的基础上添加了加密功能,并通过动态选择加密算法、动态分配密钥来实现加密的动态性,但是也存在一个问题,即通话的实时性是否会受到影响。公用电话网的延时一般只有50~70 ms,IP电话的延时较大,通常为150~250 ms,如果延时超过250 ms,语音质量就较差,不符合通信标准的要求。造成延时的因素有很多,比如语音编码、网络传输、消抖动缓存器等,这里只讨论加密对通话造成的延时。
本文使用DES、AES、IDEA作为加密算法,对大小为244 K的数字音频进行处理,利用软件SJphone来模拟IP电话,并对加密所造成的延时进行测量。其中加密的过程是:
Group[O...m-I]=Division(Message)。
对于其中一个分组i,设其对应的加密算法、移位函数的序号分别为t、s。
则:Cipher[il=EI(Group[i],Fs(Key))
下一分组:Cipher[i+Il=E,*i(Group[i+1],Fs+l(Key))
Cipher_Key=RSA(Key)
Get Packet based on Cipher_Key and Cipher[O---m-1]
Send Packet
SJphonc跨网工作的延时较大,通常有1s以上,为了减少传输延时的影响,在这里实验在局域网内进行,对延时的评估使用一种比较简单的方法:
(1)准备两台安装有SJphone的PC,连接在一个局域网内;
(2)连接两台PC上的SJphone,一端播放音频文件,另一端接收;
(3)使用windows录音机记录声源和接收端的声音,并保存这个录音;
(4)利用COOLEDIT软件对录音进行波形分析,两个相同音频波形之间的时间差就是电话的延时。
经测量未加密前,SJphone的延时约为59 ms。以下是加密后造成的延时的实验结果(见表1):
从数据中可以看到明文分组适当增多,加密时间会有所减少,造成的延时也会减少,实验中的数据是由软件模拟得出,DES、IDEA、AES等加密算法在硬件中的运算速度是在软件中的几十倍、几百倍,甚至更多,那么加密的时间将会大大缩短。
小知识之数字信封
数字信封是将对称密钥通过非对称加密(即:有公钥和私钥两个)的结果分发对称密钥的方法。