以即时通信语音流为载体的隐写模型与方法

2015-12-23 01:05黄永峰
计算机工程与设计 2015年2期
关键词:调用数据包音频

周 鹏,黄永峰

(1.清华大学 电子工程系 信息认知与智能系统研究所,北京100084;2.清华大学 信息科学与技术国家实验室,北京100084)

0 引 言

以即时通信的实时流媒体作为隐藏载体实现隐蔽通信,攻击者在进行检测时,很难找到原始的流媒体数据进行分析比对,检测难度很大,提高了隐秘信息的安全性[1]。

如何截获这些即时通信的语音流以及在通信过程中哪个阶段截获适合于隐写的不同编码格式语音 (即挂接点选择问题)是目前研究的难点技术。文献综述了基于语音流为载体进行隐蔽通信的常用实现方法,包括采用HOOK 技术,但回避了上述两个关键问题。袁键[2]等采用HOOK 技术实现了对Cool Sip的语音流截获具体方法,并实现了基于G723.1语音编码的隐写。但是该方法截获的是G.723.1编码器压缩编码后比特流,不是很适合隐写,因此,该方法实现隐写算法的隐蔽性较差,而且,由于通信软件版本差异,HOOK 过程的稳定性较差。杨俊[3]在文献 [2]的基础上,提出了自适应的套接字函数截获方法,虽然提高HOOK 过程的稳定性,但仍然截获的是Bol SipPhone通信软件中语音编码后的比特流,隐写性能还是不理想。上述方面在进行隐蔽通信时,通话音质下降较大。因此,本文针对目前存在的问题,提出了一种新的采用2次HOOK 机制实现以即时通信语音流为隐写载体的隐写模型,解决了挂机点选择问题。同时,建立了高效的基于iSAC语音编码下的语音流隐写算法。

1 基于HOOK 机制的隐写模型

1.1 HOOK 的基本原理

HOOK 是Windows消息处理机制的一个平台,本质是一段用以处理系统消息的程序,通过系统调用,将其挂入到系统。钩子机制允许应用程序截获并处理发往指定目标的消息或事件,其监视的目标可以是本进程内的线程,也可以是由其它进程所创建的。在被监视的消息产生并在到达目标之前,钩子程序先行截获此消息并对此消息享有处理权。这样,在钩子程序中就可以对截获的消息进行修改或处理,甚至终止该消息的传递[4]。

在使用HOOK 机制截获即时通信的语音流时,需要解决的关键技术是挂接点选择问题,因为挂接点选择会受到版本差异影响,而且截获语音格式不同也会影响到隐写算法的设计。因此,本文通过分析Windows音频处理特点,建立一种适合于Windows操作下即时通信语音流HOOK的方法,设计了相应的隐写模型。

1.2 以即时通信语音流为隐写载体的隐写模型

在Windows操作系统上,基本上都是对麦克风输入的采集使用WaveIn系列API函数。音频采集设备采集到音频数据后,会调用在waveInOpen中设置的回调函数。其中参数包括一个消息类型,根据其消息类型就可以进行相应的操作。需要特别关注的是,在从声卡采集音频数据的过程中,程序在waveInOpen ()开启音频采集设备以后,调用waveInPrepareHeader()函数准备好缓存空间,然后调用waveInStart()控制音频采集设备开始采集音频数据。当设备写满一个缓存空间时,系统会发出消息MM_WIM_DATA,应用程序收到这个消息即可得到该缓存区的指针,并且应用程序必须调用一次waveInUnprepareHeader(),用以对该缓存区的属性进行修改。当调用过waveInUnprepareHeader()后,程序会调用waveInAddBuffer()将该缓存区加入缓存队列里,用以等待存入音频数据 (基本过程如图1所示)。针对Windows语音采集过程和相关API函数的特点,本文提出了一种针对waveInUnprepareHeader()的HOOK 方法。该方法不同于现有文献在语音编码后的HOOK 方法。

图1 waveIn系列函数处理录音流程

文献 [2,3]均是在发送端的sendto ()函数使用HOOK 技术,其实质是对语音数据压缩编码并封装之后的数据进行拦截,然后再依据隐写算法对低速率语音编码后的数据进行改写。采用在语音编码过程中进行信息隐写的算法时,数据截获仍按上述文献操作,则需要在sendto ()函数中对编码后的数据先进行语音解码器解码,然后再将隐秘信息通过编码算法嵌入,影响数据的实时传输。通过实验验证,由于语音数据在发送端经过了两次编码、一次解码,在接收端再进行一次解码后,语音数据与原始语音数据相比音质下降较大。因此该方法有使用上的限制。

通过以上分析,本文提出针对waveInUnprepareHeader()的每一次调用采用HOOK 技术进行编码前语音流截获。获取该函数调用时的LPWAVEHDR->lpData,这个指针指向了音频数据的缓存地址,由此,我们就可以获取到即时通信软件从声卡采集到的原始pcm 数据。

通信软件从声卡采集到原始pcm 数据后,会对语音数据进行一系列的操作,包括活动帧的检测、信号处理、语音编解码等操作。语音编码结束后,调用sendto()函数将压缩编码后的数据封装成RTP数据包,然后发送给接收方。

通信语音数据处理流程如图2所示。

图2 通信语音数据处理流程

为了实现隐蔽通信,需要将嵌入了隐秘信息的数据挂接到即时通信过程中。嵌入隐秘信息的载体数据是对waveInUnprepareHeader()采用HOOK 技术而获得的语音数据。第二个 “钩子”是在通信软件调用sendto ()函数的时候进行挂接,将载体数据与待嵌入隐秘信息进行语音压缩编码,并将嵌入隐秘信息的编码后数据替换到原sendto ()中的RTP数据包,最后将这个修改后的RTP 包发送给接收方。这样,通过挂接两个 “钩子”,可以减少调用语音编码器的次数,提高隐写模型的实时性和语音质量。

采用HOOK 机制实现以即时通信语音流为隐写载体的隐写模型如图3所示。

图3 采用HOOK 机制实现以即时通信语音流为隐写载体的隐写模型

2 基于iSAC语音编码的隐写算法的研究

iSAC是GIPS公司推出的为在高速率和低速率下传送宽带语音质量的一种自适应的语音编码器,能自动在低速率传输的情况下,在比特率和语音质量之间寻找最佳平衡,具有超强的抗丢包强健性[5]。iSAC 基于专利技术,独特地把预测性编码和无损耗编码方法结合起来,以降低编解码器的比特率,同时维持语音的高质量。还有一项专利则是以统计方法为基础的创新技术,用于检测语音活动,这个高质量和低复杂性的解决方案,只在模块感测到用户讲话时,才传送数据。其最突出的特点是在最恶劣的网络下能提供优秀的声音质量,回声消除算法可以最大限度的消除声音传输过程中形成的回音现象。iSAC 语音编码器被很多公司应用,包括Google Talk,AIM,QQ 等。但是,由于iSAC的编码技术还没有公开,目前没有文献具体其编码过程,因此,针对该语音编码的隐写方法还没有公开发表。本文在充分分析编码器代码的基础上,首先提出了一种基于LPC系数量化的隐写算法。

iSAC在处理音频数据时,首先通过正交镜像滤波器(QMF)将音频数据分解成低频 (0~16kHz)数据和高频(高于16kHz)数据,然后分别进行编码处理,最后将低频和高频编码出的数据使用双路混合过滤器,从而得到最后的编码数据[6]。

iSAC编码过程模块如图4所示。

图4 iSAC编码过程模块

iSAC 语 音 编 码 器 采 用 了CELP (code excited linear prediction)二元激励分析技术。CELP 编码算法用从码本中搜索出来的最佳码矢量,乘以最佳增益,代替LP余量信号作为激励信源[7]。所以,iSAC 在编码时,短时合成滤波器主要是通过LPC 分析得到LPC 参数,然后进行基音搜索,得到基音周期和增益,最后进行固定码本搜索,得到固定码本的序号和增益。CELP 解码中时,自适应码本和固定码本分别被乘以各自的增益,加起来构成激励。通过激励LP合成滤波器来重构语音。

通过分析iSAC 的编码过程以及LPC 的特点,本文重点研究了基于LPC 系数量化的隐写算法。图5是iSAC 低频分量的LPC Coef编码计算过程[8]。

图5 iSAC低频分量LPC参数编码过程

2.1 隐写算法的实现原理

在对LPC系数进行编码时,iSAC 并不是直接对LPC系数直接进行编码,而是将LPC 系数转换成LAR (log area ratio)系数,然后再对LAR 系数 (共108 个)进行KLT (karhuner-loeve transform)变换后再进行量化,具体的实现过程是通过LPC 参数量化过程中的LAR 域所涉及到的LPC参数的量化值index_s[k]进行的。根据隐秘信息数据是 “1”还是 “0”来对量化值index_s[k]进行相应的更改。考虑到对量化值修改的均衡性,本文方法对这个量化器按索引值的奇偶性划分成两部分,当要隐写的隐秘信息为 “0”时,我们在偶数部分进行最优搜索,当要隐写的隐秘信息为 “1”时,在奇数部分进行最优搜索。解码时,根据量化索引值的奇偶来判断隐写的隐秘信息是1还是0。由于LPC参数量化器中相邻的两个值相差并不是很大,但索引必有一个为奇数,一个为偶数,这样我们无论是取最优索引还是取次最优索引对语音影响并不是很大。

为了减少载体文件PESQ 的退化值,增加隐写的隐蔽性,本文并没有把iSAC 编码器中的108个LPC 参数量化值全部用来信息隐写,而是通过测试,选择了其中的31个量化值来进行信息隐写,这样保证了使用该方法进行信息隐写时,载体文件PESQ 的退化值保持在0.3 左右。将本方法选取的31个量化值的标号依次记下,记为j(j=0,1,…,30)。

2.2 隐秘信息隐写步骤

设隐秘信息Embed经过隐秘信息预处理转化为隐秘信息比特流S= [S(0),S(1),S(2),S(i),…S(L)],L 为隐秘信息比特流的长度,N=0,量化器为U。

步骤1 根据S(i)(i=0,1,2…)将量化器U 调整为U′,U′= {x|x∈U,x≡S(i)Mod2};搜索找到次最优索引S`_index [j],N=N+1;

步骤2 重复步骤1,直到得到所有S`_index [j],j=0,1,…30;

步骤3 如果N>=L,则嵌入结束,否则,跳到步骤1。

2.3 隐秘信息提取步骤

步骤1 将N 置成0,j置成0;

步骤2 利用公式S(N)=S`_index [j]Mod2,可以提取隐秘信S(N),N=N+1;

步骤3 如果N>=L,则提取结束,否则,跳到步骤2。

本文提出的隐写方法每帧可隐写31bit隐秘信息,若对隐写方法的音质影响要求稍微降低一些,本方法可以适当调整用于隐写的LPC参数,从而提升隐写方法的容量。

3 实验结果与分析

3.1 基于Gtalk的语音截获的测试与分析

为了验证本文提出的隐蔽通信方法适用,在实验阶段对使用较为广泛的Gtalk通信软件按照本文的截获和替换的方法进行了代码实现,并进行了测试。为了便于观测方法是否可靠,本测试将一段从音频库里的VoIP对话文件作为Gtalk语音会话其中一方的输入数据,采用常用的Wireshark软件捕获Gtalk会话过程中所产生的网络数据包,通过分析网络数据包中语音活动帧的数据长度,来验证本方法是否具有可行性。

通过测试,本文提到的方法在Gtalk 客户端所产生出的数据包进行统计,从捕捉到第一帧语音活动帧开始,到最后一帧语音活动帧结束,两种通信模式所捕捉到的静音帧数量和语音活动帧数量均相同。图6 (a)是正常语音通信过程中产生的语音活动帧的长度统计,图6 (b)是采用本文提出的隐写模型所产生出的网络数据包中的语音活动帧长度统计。通过对通信过程中的语音活动帧进行比对,可以发现,两种方法在网络层所观察到的数据包长度特征吻合,这也就验证了,本文所提出的以即时通信语音流为隐写载体的隐写模型具有可行性。事实上,我们在采用本文提出的方案进行Gtalk 的语音会话中,从主观判断上,几乎感觉不到异常。

图6 Gtalk网络数据包分析

3.2 基于iSAC的隐写算法的测试与分析

为了验证本文提出的隐写算法具有较好的适用性,本文在进行测试时,选择不同人物的多个语音片段组成语音测试样本库。本次测试语音片段样本包含英文女声 (English speech woman,ESW)、中 文 男 声 (Chinese speech man,CSM)、中文女声 (Chinese speech woman,CSW)、英文男声 (English speech man,ESM)4种类别每一类包含不少于500个10s长的语音片段,每个语音片段采样率为16kHz,对每个采样点用16比特进行量化,保存为PCM格式文件。

3.2.1 音频文件时域幅度分析

图7所示的是任意选取了一段PCM 语音文件在未进行隐写和进行信息隐写后的时域幅度对比。从图上可以看到,隐写信息前后幅度谱没有较大改变,整个幅度谱的包络曲线几乎与原始语音一样,说明本文提出的隐写算法,对合成语音质量影响很小。

图7 隐写前后语音文件时域幅度对比

3.2.2 PESQ 测试与分析

本次测试将语音样本库里的语音片段分别进行隐秘信息的嵌入,并使用PESQ工具对隐写后的语音数据与原始语音数据进行评定[12],得到图8所示结果。从图8的4幅图中我们可以看到,隐写前后中文男声和英文男声的PESQ 值恶化较小,说明本文隐写算法对男声的影响很小。而相比较而言,女声的PESQ 值恶化稍微大一些,这可能与iSAC 语音编码对女声的LPC量化值更敏锐有关。表1是我们对4类样本库中的语音片段的PESQ值进行的统计与计算。

图8 隐写前后PESQ 取值对比

通过计算,我们可以看到,中文男声PESQ 值恶化最小,仅有0.001,恶化率为0.03%,恶化值最大的是英文女声,平均恶化值为0.320,恶化率为7.89%,总体来讲,4种类型的语音样本平均恶化值为0.176,恶化率为4.33%,可以看到,本隐写算法的实际测试结果恶化率均低于8%,对语音质量的影响较小,也验证了本隐写算法的适用性。

表1 隐写前后PESQ 值变化统计

由于本隐写算法具体实现是每帧的108个LPC 参数中选取对语音质量影响较小的31个参数进行改写嵌入隐秘信息,所以,本隐写算法的隐写容量为31bit/帧,隐写速率可以达到1.03kbps,具有很好的实用性。

4 结束语

本文针对目前基于即时通信的隐蔽通信方法存在的问题,提出了一种基于2次HOOK 机制的以即时通信语音流为隐写载体的隐写模型,解决HOOK 的挂机点选择的问题,提高了HOOK 机制的适用性;并选择目前还处于研究空白的iSAC语音编码进行了隐写方法研究,首次建立了一种基于iSAC语音编码的LPC 系数的隐写算法。本文提出的以即时通信语音流为载体的隐写模型具有良好的普适性,能够适用于大多数的即时通信软件,本文提出的隐写算法隐写速率能够达到1.03kbps,具有很好的实用价值。后续工作主要改善隐蔽通信的同步和可靠性机制,减少丢包对隐秘信息丢失的影响,开发出一套具有实用价值的隐蔽通信系统软件。

[1]Huang Y,Tang S,Bao C,et al.Steganalysis of compressed speech to detect covert voice over Internet protocol channels[J].Information Security,IET,2011,5 (1):26-32.

[2]YUAN Jian,ZHOU Xuesi,HUANG Yongfeng.Application of HOOK technology in network covert communication [J].Journal of Sichuan University (Natural Science Edition),2011,48 (3):539-545 (in Chinese). [袁 键,周 学 思,黄 永 峰.HOOK 技术在网络隐蔽通信中的应用 [J].四川大学学报,2011,48 (3):539-545.]

[3]YANG Jun,BAI Sen,HUANG Yongfeng,et al.Realization of stegnography based on speech of Bol SipPhone[J].Application Research of Computers,2011,28 (5):1901-1913 (in Chinese). [杨俊,柏森,黄永峰,等.以Bol SipPhone语音流为载体的信息隐写方法实现 [J].计算机应用研究,2011,28 (5):1901-1913.]

[4]Sridhar S.Method of intercepting VoIP communications:U.S.Patent 20,130,039,226[P].2013-02-14.

[5]Google.WebRTC FAQ [EB/OL]. [2014-01-11].http://www.webrtc.org/faq#TOC-What-is-the-iSAC-audio-codec.

[6]Introduce of iSAC [EB/OL].[2012-02-14].http://www.cnblogs.com/gaozehua/archive/2012/02/14/2350477.html.

[7]YAO Tianren.Digital speech coding [M].Beijing:Publishing House of Electronics Industry,2011:228-230 (in Chinese). [姚天任.数字语音编码 [M]北京:电子工业出版社,2011:228-230.]

[8]Google.WebRTC code package [CP/OL].[2014-01-11].https://code.google.com/p/webrtc/source/checkout.

[9]Oskycar.About windows API record [EB/OL].[2013-06-13].http://www.360doc.com/content/13/0613/18/2036337_292631223.shtml.

[10]XU Rong,WU Hao,ZHANG Hang.Research of covert channel based on Gtalk instant messenger protocol[J].Computer Engineering and Design,2012,33 (12):4471-4475(in Chinese).[许蓉,吴灏,张航.基于GTALK 即时通讯协议的隐蔽通道研究 [J].计算机工程与设计,2012,33(12):4471-4475.]

[11]Google.Google talk for developers[CP/OL].[2013-05-15].https://developers.google.com/talk/?hl=zh-CN.

[12]Liu Y,Shen Y,Liu Q,et al.Performance evaluation and accuracy upgrading of PESQ in Chinese environment[C]//IEEE 77th Vehicular Technology Conference.IEEE,2013:1-5.

猜你喜欢
调用数据包音频
核电项目物项调用管理的应用研究
必须了解的音频基础知识 家庭影院入门攻略:音频认证与推荐标准篇
LabWindows/CVI下基于ActiveX技术的Excel调用
基于Daubechies(dbN)的飞行器音频特征提取
SmartSniff
音频分析仪中低失真音频信号的发生方法
基于系统调用的恶意软件检测技术研究
Pro Tools音频剪辑及修正
视觉注意的数据包优先级排序策略研究
利用RFC技术实现SAP系统接口通信