周 鵬,黃永峰
(1.清華大學 電子工程系 信息認知與智能系統(tǒng)研究所,北京100084;2.清華大學 信息科學與技術國家實驗室,北京100084)
以即時通信的實時流媒體作為隱藏載體實現(xiàn)隱蔽通信,攻擊者在進行檢測時,很難找到原始的流媒體數(shù)據(jù)進行分析比對,檢測難度很大,提高了隱秘信息的安全性[1]。
如何截獲這些即時通信的語音流以及在通信過程中哪個階段截獲適合于隱寫的不同編碼格式語音 (即掛接點選擇問題)是目前研究的難點技術。文獻綜述了基于語音流為載體進行隱蔽通信的常用實現(xiàn)方法,包括采用HOOK 技術,但回避了上述兩個關鍵問題。袁鍵[2]等采用HOOK 技術實現(xiàn)了對Cool Sip的語音流截獲具體方法,并實現(xiàn)了基于G723.1語音編碼的隱寫。但是該方法截獲的是G.723.1編碼器壓縮編碼后比特流,不是很適合隱寫,因此,該方法實現(xiàn)隱寫算法的隱蔽性較差,而且,由于通信軟件版本差異,HOOK 過程的穩(wěn)定性較差。楊俊[3]在文獻 [2]的基礎上,提出了自適應的套接字函數(shù)截獲方法,雖然提高HOOK 過程的穩(wěn)定性,但仍然截獲的是Bol SipPhone通信軟件中語音編碼后的比特流,隱寫性能還是不理想。上述方面在進行隱蔽通信時,通話音質(zhì)下降較大。因此,本文針對目前存在的問題,提出了一種新的采用2次HOOK 機制實現(xiàn)以即時通信語音流為隱寫載體的隱寫模型,解決了掛機點選擇問題。同時,建立了高效的基于iSAC語音編碼下的語音流隱寫算法。
HOOK 是Windows消息處理機制的一個平臺,本質(zhì)是一段用以處理系統(tǒng)消息的程序,通過系統(tǒng)調(diào)用,將其掛入到系統(tǒng)。鉤子機制允許應用程序截獲并處理發(fā)往指定目標的消息或事件,其監(jiān)視的目標可以是本進程內(nèi)的線程,也可以是由其它進程所創(chuàng)建的。在被監(jiān)視的消息產(chǎn)生并在到達目標之前,鉤子程序先行截獲此消息并對此消息享有處理權。這樣,在鉤子程序中就可以對截獲的消息進行修改或處理,甚至終止該消息的傳遞[4]。
在使用HOOK 機制截獲即時通信的語音流時,需要解決的關鍵技術是掛接點選擇問題,因為掛接點選擇會受到版本差異影響,而且截獲語音格式不同也會影響到隱寫算法的設計。因此,本文通過分析Windows音頻處理特點,建立一種適合于Windows操作下即時通信語音流HOOK的方法,設計了相應的隱寫模型。
在Windows操作系統(tǒng)上,基本上都是對麥克風輸入的采集使用WaveIn系列API函數(shù)。音頻采集設備采集到音頻數(shù)據(jù)后,會調(diào)用在waveInOpen中設置的回調(diào)函數(shù)。其中參數(shù)包括一個消息類型,根據(jù)其消息類型就可以進行相應的操作。需要特別關注的是,在從聲卡采集音頻數(shù)據(jù)的過程中,程序在waveInOpen ()開啟音頻采集設備以后,調(diào)用waveInPrepareHeader()函數(shù)準備好緩存空間,然后調(diào)用waveInStart()控制音頻采集設備開始采集音頻數(shù)據(jù)。當設備寫滿一個緩存空間時,系統(tǒng)會發(fā)出消息MM_WIM_DATA,應用程序收到這個消息即可得到該緩存區(qū)的指針,并且應用程序必須調(diào)用一次waveInUnprepareHeader(),用以對該緩存區(qū)的屬性進行修改。當調(diào)用過waveInUnprepareHeader()后,程序會調(diào)用waveInAddBuffer()將該緩存區(qū)加入緩存隊列里,用以等待存入音頻數(shù)據(jù) (基本過程如圖1所示)。針對Windows語音采集過程和相關API函數(shù)的特點,本文提出了一種針對waveInUnprepareHeader()的HOOK 方法。該方法不同于現(xiàn)有文獻在語音編碼后的HOOK 方法。
圖1 waveIn系列函數(shù)處理錄音流程
文獻 [2,3]均是在發(fā)送端的sendto ()函數(shù)使用HOOK 技術,其實質(zhì)是對語音數(shù)據(jù)壓縮編碼并封裝之后的數(shù)據(jù)進行攔截,然后再依據(jù)隱寫算法對低速率語音編碼后的數(shù)據(jù)進行改寫。采用在語音編碼過程中進行信息隱寫的算法時,數(shù)據(jù)截獲仍按上述文獻操作,則需要在sendto ()函數(shù)中對編碼后的數(shù)據(jù)先進行語音解碼器解碼,然后再將隱秘信息通過編碼算法嵌入,影響數(shù)據(jù)的實時傳輸。通過實驗驗證,由于語音數(shù)據(jù)在發(fā)送端經(jīng)過了兩次編碼、一次解碼,在接收端再進行一次解碼后,語音數(shù)據(jù)與原始語音數(shù)據(jù)相比音質(zhì)下降較大。因此該方法有使用上的限制。
通過以上分析,本文提出針對waveInUnprepareHeader()的每一次調(diào)用采用HOOK 技術進行編碼前語音流截獲。獲取該函數(shù)調(diào)用時的LPWAVEHDR->lpData,這個指針指向了音頻數(shù)據(jù)的緩存地址,由此,我們就可以獲取到即時通信軟件從聲卡采集到的原始pcm 數(shù)據(jù)。
通信軟件從聲卡采集到原始pcm 數(shù)據(jù)后,會對語音數(shù)據(jù)進行一系列的操作,包括活動幀的檢測、信號處理、語音編解碼等操作。語音編碼結束后,調(diào)用sendto()函數(shù)將壓縮編碼后的數(shù)據(jù)封裝成RTP數(shù)據(jù)包,然后發(fā)送給接收方。
通信語音數(shù)據(jù)處理流程如圖2所示。
圖2 通信語音數(shù)據(jù)處理流程
為了實現(xiàn)隱蔽通信,需要將嵌入了隱秘信息的數(shù)據(jù)掛接到即時通信過程中。嵌入隱秘信息的載體數(shù)據(jù)是對waveInUnprepareHeader()采用HOOK 技術而獲得的語音數(shù)據(jù)。第二個 “鉤子”是在通信軟件調(diào)用sendto ()函數(shù)的時候進行掛接,將載體數(shù)據(jù)與待嵌入隱秘信息進行語音壓縮編碼,并將嵌入隱秘信息的編碼后數(shù)據(jù)替換到原sendto ()中的RTP數(shù)據(jù)包,最后將這個修改后的RTP 包發(fā)送給接收方。這樣,通過掛接兩個 “鉤子”,可以減少調(diào)用語音編碼器的次數(shù),提高隱寫模型的實時性和語音質(zhì)量。
采用HOOK 機制實現(xiàn)以即時通信語音流為隱寫載體的隱寫模型如圖3所示。
圖3 采用HOOK 機制實現(xiàn)以即時通信語音流為隱寫載體的隱寫模型
iSAC是GIPS公司推出的為在高速率和低速率下傳送寬帶語音質(zhì)量的一種自適應的語音編碼器,能自動在低速率傳輸?shù)那闆r下,在比特率和語音質(zhì)量之間尋找最佳平衡,具有超強的抗丟包強健性[5]。iSAC 基于專利技術,獨特地把預測性編碼和無損耗編碼方法結合起來,以降低編解碼器的比特率,同時維持語音的高質(zhì)量。還有一項專利則是以統(tǒng)計方法為基礎的創(chuàng)新技術,用于檢測語音活動,這個高質(zhì)量和低復雜性的解決方案,只在模塊感測到用戶講話時,才傳送數(shù)據(jù)。其最突出的特點是在最惡劣的網(wǎng)絡下能提供優(yōu)秀的聲音質(zhì)量,回聲消除算法可以最大限度的消除聲音傳輸過程中形成的回音現(xiàn)象。iSAC 語音編碼器被很多公司應用,包括Google Talk,AIM,QQ 等。但是,由于iSAC的編碼技術還沒有公開,目前沒有文獻具體其編碼過程,因此,針對該語音編碼的隱寫方法還沒有公開發(fā)表。本文在充分分析編碼器代碼的基礎上,首先提出了一種基于LPC系數(shù)量化的隱寫算法。
iSAC在處理音頻數(shù)據(jù)時,首先通過正交鏡像濾波器(QMF)將音頻數(shù)據(jù)分解成低頻 (0~16kHz)數(shù)據(jù)和高頻(高于16kHz)數(shù)據(jù),然后分別進行編碼處理,最后將低頻和高頻編碼出的數(shù)據(jù)使用雙路混合過濾器,從而得到最后的編碼數(shù)據(jù)[6]。
iSAC編碼過程模塊如圖4所示。
圖4 iSAC編碼過程模塊
iSAC 語 音 編 碼 器 采 用 了CELP (code excited linear prediction)二元激勵分析技術。CELP 編碼算法用從碼本中搜索出來的最佳碼矢量,乘以最佳增益,代替LP余量信號作為激勵信源[7]。所以,iSAC 在編碼時,短時合成濾波器主要是通過LPC 分析得到LPC 參數(shù),然后進行基音搜索,得到基音周期和增益,最后進行固定碼本搜索,得到固定碼本的序號和增益。CELP 解碼中時,自適應碼本和固定碼本分別被乘以各自的增益,加起來構成激勵。通過激勵LP合成濾波器來重構語音。
通過分析iSAC 的編碼過程以及LPC 的特點,本文重點研究了基于LPC 系數(shù)量化的隱寫算法。圖5是iSAC 低頻分量的LPC Coef編碼計算過程[8]。
圖5 iSAC低頻分量LPC參數(shù)編碼過程
在對LPC系數(shù)進行編碼時,iSAC 并不是直接對LPC系數(shù)直接進行編碼,而是將LPC 系數(shù)轉(zhuǎn)換成LAR (log area ratio)系數(shù),然后再對LAR 系數(shù) (共108 個)進行KLT (karhuner-loeve transform)變換后再進行量化,具體的實現(xiàn)過程是通過LPC 參數(shù)量化過程中的LAR 域所涉及到的LPC參數(shù)的量化值index_s[k]進行的。根據(jù)隱秘信息數(shù)據(jù)是 “1”還是 “0”來對量化值index_s[k]進行相應的更改??紤]到對量化值修改的均衡性,本文方法對這個量化器按索引值的奇偶性劃分成兩部分,當要隱寫的隱秘信息為 “0”時,我們在偶數(shù)部分進行最優(yōu)搜索,當要隱寫的隱秘信息為 “1”時,在奇數(shù)部分進行最優(yōu)搜索。解碼時,根據(jù)量化索引值的奇偶來判斷隱寫的隱秘信息是1還是0。由于LPC參數(shù)量化器中相鄰的兩個值相差并不是很大,但索引必有一個為奇數(shù),一個為偶數(shù),這樣我們無論是取最優(yōu)索引還是取次最優(yōu)索引對語音影響并不是很大。
為了減少載體文件PESQ 的退化值,增加隱寫的隱蔽性,本文并沒有把iSAC 編碼器中的108個LPC 參數(shù)量化值全部用來信息隱寫,而是通過測試,選擇了其中的31個量化值來進行信息隱寫,這樣保證了使用該方法進行信息隱寫時,載體文件PESQ 的退化值保持在0.3 左右。將本方法選取的31個量化值的標號依次記下,記為j(j=0,1,…,30)。
設隱秘信息Embed經(jīng)過隱秘信息預處理轉(zhuǎn)化為隱秘信息比特流S= [S(0),S(1),S(2),S(i),…S(L)],L 為隱秘信息比特流的長度,N=0,量化器為U。
步驟1 根據(jù)S(i)(i=0,1,2…)將量化器U 調(diào)整為U′,U′= {x|x∈U,x≡S(i)Mod2};搜索找到次最優(yōu)索引S`_index [j],N=N+1;
步驟2 重復步驟1,直到得到所有S`_index [j],j=0,1,…30;
步驟3 如果N>=L,則嵌入結束,否則,跳到步驟1。
步驟1 將N 置成0,j置成0;
步驟2 利用公式S(N)=S`_index [j]Mod2,可以提取隱秘信S(N),N=N+1;
步驟3 如果N>=L,則提取結束,否則,跳到步驟2。
本文提出的隱寫方法每幀可隱寫31bit隱秘信息,若對隱寫方法的音質(zhì)影響要求稍微降低一些,本方法可以適當調(diào)整用于隱寫的LPC參數(shù),從而提升隱寫方法的容量。
為了驗證本文提出的隱蔽通信方法適用,在實驗階段對使用較為廣泛的Gtalk通信軟件按照本文的截獲和替換的方法進行了代碼實現(xiàn),并進行了測試。為了便于觀測方法是否可靠,本測試將一段從音頻庫里的VoIP對話文件作為Gtalk語音會話其中一方的輸入數(shù)據(jù),采用常用的Wireshark軟件捕獲Gtalk會話過程中所產(chǎn)生的網(wǎng)絡數(shù)據(jù)包,通過分析網(wǎng)絡數(shù)據(jù)包中語音活動幀的數(shù)據(jù)長度,來驗證本方法是否具有可行性。
通過測試,本文提到的方法在Gtalk 客戶端所產(chǎn)生出的數(shù)據(jù)包進行統(tǒng)計,從捕捉到第一幀語音活動幀開始,到最后一幀語音活動幀結束,兩種通信模式所捕捉到的靜音幀數(shù)量和語音活動幀數(shù)量均相同。圖6 (a)是正常語音通信過程中產(chǎn)生的語音活動幀的長度統(tǒng)計,圖6 (b)是采用本文提出的隱寫模型所產(chǎn)生出的網(wǎng)絡數(shù)據(jù)包中的語音活動幀長度統(tǒng)計。通過對通信過程中的語音活動幀進行比對,可以發(fā)現(xiàn),兩種方法在網(wǎng)絡層所觀察到的數(shù)據(jù)包長度特征吻合,這也就驗證了,本文所提出的以即時通信語音流為隱寫載體的隱寫模型具有可行性。事實上,我們在采用本文提出的方案進行Gtalk 的語音會話中,從主觀判斷上,幾乎感覺不到異常。
圖6 Gtalk網(wǎng)絡數(shù)據(jù)包分析
為了驗證本文提出的隱寫算法具有較好的適用性,本文在進行測試時,選擇不同人物的多個語音片段組成語音測試樣本庫。本次測試語音片段樣本包含英文女聲 (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 語音文件在未進行隱寫和進行信息隱寫后的時域幅度對比。從圖上可以看到,隱寫信息前后幅度譜沒有較大改變,整個幅度譜的包絡曲線幾乎與原始語音一樣,說明本文提出的隱寫算法,對合成語音質(zhì)量影響很小。
圖7 隱寫前后語音文件時域幅度對比
3.2.2 PESQ 測試與分析
本次測試將語音樣本庫里的語音片段分別進行隱秘信息的嵌入,并使用PESQ工具對隱寫后的語音數(shù)據(jù)與原始語音數(shù)據(jù)進行評定[12],得到圖8所示結果。從圖8的4幅圖中我們可以看到,隱寫前后中文男聲和英文男聲的PESQ 值惡化較小,說明本文隱寫算法對男聲的影響很小。而相比較而言,女聲的PESQ 值惡化稍微大一些,這可能與iSAC 語音編碼對女聲的LPC量化值更敏銳有關。表1是我們對4類樣本庫中的語音片段的PESQ值進行的統(tǒng)計與計算。
圖8 隱寫前后PESQ 取值對比
通過計算,我們可以看到,中文男聲PESQ 值惡化最小,僅有0.001,惡化率為0.03%,惡化值最大的是英文女聲,平均惡化值為0.320,惡化率為7.89%,總體來講,4種類型的語音樣本平均惡化值為0.176,惡化率為4.33%,可以看到,本隱寫算法的實際測試結果惡化率均低于8%,對語音質(zhì)量的影響較小,也驗證了本隱寫算法的適用性。
表1 隱寫前后PESQ 值變化統(tǒng)計
由于本隱寫算法具體實現(xiàn)是每幀的108個LPC 參數(shù)中選取對語音質(zhì)量影響較小的31個參數(shù)進行改寫嵌入隱秘信息,所以,本隱寫算法的隱寫容量為31bit/幀,隱寫速率可以達到1.03kbps,具有很好的實用性。
本文針對目前基于即時通信的隱蔽通信方法存在的問題,提出了一種基于2次HOOK 機制的以即時通信語音流為隱寫載體的隱寫模型,解決HOOK 的掛機點選擇的問題,提高了HOOK 機制的適用性;并選擇目前還處于研究空白的iSAC語音編碼進行了隱寫方法研究,首次建立了一種基于iSAC語音編碼的LPC 系數(shù)的隱寫算法。本文提出的以即時通信語音流為載體的隱寫模型具有良好的普適性,能夠適用于大多數(shù)的即時通信軟件,本文提出的隱寫算法隱寫速率能夠達到1.03kbps,具有很好的實用價值。后續(xù)工作主要改善隱蔽通信的同步和可靠性機制,減少丟包對隱秘信息丟失的影響,開發(fā)出一套具有實用價值的隱蔽通信系統(tǒng)軟件。
[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 技術在網(wǎng)絡隱蔽通信中的應用 [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語音流為載體的信息隱寫方法實現(xiàn) [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). [姚天任.數(shù)字語音編碼 [M]北京:電子工業(yè)出版社,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 即時通訊協(xié)議的隱蔽通道研究 [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.