1. 引言
网络电话依托现有的互联网,利用协议来实现语音的实时传递,这成为了新一代网络时代最具代表性和发展前途的应用技术之一。网络电话在使用时处于开放的网络环境下,用户的信息容易暴露在外界环境中,对于银行、政府等一些对数据安全性要求较高的行业,更要保证数据不被窃取,因此网络电话的安全性引起了人们的高度重视。为了保证传输信息的安全性,采用不同于加密技术的信息隐藏技术,结合网络电话和信息隐藏技术两方面的技术优点,实现在进行实时语音通话的同时传输秘密信息 [1] 。传统的加密技术在保护秘密信息的同时也暴露了秘密信息传输的存在,被加密的信息很容易引起攻击者的注意,而信息隐藏技术隐藏了秘密信息的“存在性”,即使窃听者监听到了传输的语音数据,也无法直接判断其中是否有秘密信息的存在,这在一定程度上提高了秘密信息的隐蔽性 [2] 。同时,基于流媒体的信息隐藏技术引起了国内外专家学者的普遍重视,它作为一种实时传输载体,将会给信息安全传递提供更好的隐蔽性以降低秘密信息被攻击的概率 [3] 。
从现有的文献来看,目前信息隐藏的载体已经从静态媒体如文本、图像等转向动态流媒体如语音、视频等 [4] 。本文是以VoIP (Voice over Internet Protocol)语音为载体,在语音数据编码后进行插入隐藏信息进而将隐藏信息发送到接收端。基于VoIP语音通话采用的是IP分组封装,当秘密信息被提取后,语音信息在播放后将会被后面紧随的语音信息覆盖,因此攻击者只能对整个通话信息进行盲检测,难度很大,因而在很大程度上提高了秘密信息的安全性。在VoIP中应用较多的隐藏算法有LSB (Least Significant Bit)算法和DWT (Discrete Wavelet Transform)算法。为了增强LSB算法的鲁棒性,Kratzer等人 [5] 提出在LSB信息隐藏后再进行加密,虽然有效的提高了信息的安全性但是由于加密技术的影响也带来了很大的通信延迟,一定程度上也损伤了语音的质量,这也容易暴露隐藏信息的存在。为增强语音载体信息隐藏的容量及鲁棒性,Wu等人提出一种基于小波变换的音频隐藏新方法,通过调节语音段小波变换的中高频系数,进而改变每级小波变换高频系数前后两部分的能量状态来隐藏二进制机密信息 [6] 。虽然算法具有良好的隐蔽性和鲁棒性,但是由于算法实现复杂,也会对实时语音通信造成一定影响。本文使用G.711语音编解码结合LSB算法,按照每八位二进制流进行替换最不重要位的原则,算法实现简单,实验结果表明本方法对实时语音传输影响小。
2. Sipdroid信息隐藏功能分析与设计
2.1. 整体需求分析
基于Sipdroid系统要实现的主要功能:在现有Sipdroid系统的基础上,为了提高传输信息的隐蔽性和安全性,在语音通话模块加入信息隐藏模块。在不影响语音通话质量的前提下,实现秘密信息的传输。本文实现基于的载体是语音,要传输的秘密信息是文本。
发送端:SIP账号的登录,根据当时的网络环境以及对要传输秘密信息的安全性和其他条件选择调用的信息隐藏算法,本文实现以LSB算法为例。SIP账号的拨打,建立连接,语音通话,在通话界面输入秘密信息。
传输过程:对采集编码之后的语音流调用隐藏嵌入算法,把要传输的秘密信息隐藏在实时的语音流中,对带有秘密信息的语音流进行封装,使其随语音流的传输到达接收方。
接收端:接受方收到来自网络的数据包之后调用信息隐藏提取算法,提取出嵌入在语音流中的秘密信息,并保存在相应的位置提示接收方进行查看。
其相应的处理流程如图1所示。
2.1.1. 用户界面
信息隐藏算法的选择界面。
在设置界面增加信息隐藏算法的选择功能。用户可以根据所在网络环境的状况、发送信息的容量、信息隐藏算法实现的难易、要传输的秘密信息的形式等,来选择相应的隐藏算法来实现秘密信息的隐藏和提取功能。
界面如图2所示。
2.1.2. 通话界面
发送方在语音通话界面点击“发送消息”完成秘密信息的输入,要发送的秘密信息随着语音流到达接收方,以震动的形式提醒用户收到信息,用户可以点击菜单选项,在弹出的界面上点击“收到信息”,查看提取出的秘密信息。
通话界面如图3所示。
2.2. 信息隐藏功能需求分析与设计
用户在使用Sipdroid之前要根据不同的使用情况,在用户界面去选择相应的隐藏算法来实现秘密信息的嵌入和提取。信息隐藏算法主要有基于时间域信息隐藏和基于变换域的信息隐藏两类。
时间域信息隐藏算法的特点是算法复杂度低容易实现,但是鲁棒性差;变换域信息隐藏算法是对语音载体进行频域变换之后得到的系数进行修改实现信息隐藏,其具有较好的鲁棒性,但是提高了算法的
![](//html.hanspub.org/file/2-2690280x9_hanspub.png)
Figure 1. Information hiding process flow chart
图1. 信息隐藏处理流程图
复杂度 [7] 。由于语音载体对实时性要求比较高,与变换域相比LSB信息隐藏算法有较高的嵌入容量 [8] 。因此,本文选择经典时间域信息隐藏LSB算法的进行实现信息隐藏功能。
3. Sipdroid信息隐藏功能实现
3.1. Sipdroid信息隐藏功能的实现
1、在用户界面的设置界面下增加“信息隐藏算法设置”选项,用于实现信息隐藏算法的选择。
信息隐藏算法选择界面实现主要代码如下:
android:entries设置的内容是用户通过界面看到的内容。
android:entryValues即保存在preferences.xml中的值。
在values/strings.xml添加定义的属性信息和键值对:
信息隐藏算法设置
信息隐藏算法选择:
-
LSB信息隐藏算法
-
DWT信息隐藏算法
-
DWT信息隐藏算法
-
...
2、在实时语音通话界面实现秘密信息的输入和查看。在原有通话界面选项的基础上增加“发送消息”和“接收消息”选项。用户点击发送消息,弹出“发送秘密信息”文本框,在文本框中输入要传输的秘密信息,点击“发送”按钮发送要传输的秘密信息。
发送消息其具体的实现过程如下:
在packageorg.sipdroid.sipua.ui.callscreen.java里面添加如下代码在通话界面生成发送消息按钮。
public static final int SEND_MENU_ITEM = FIRST_MENU_ID + 11;
private static EditTexttransferText;
private EditTextScrectText; //要保存的文件名
private String fileName =send secret
以下代码实现的是将文本框中输入的隐藏信息以键值对的方式保存:
public void onClick(DialogInterface dialog, int which) {
String in= ScrectText.getText().toString();
然后在RtpStreamSender中调用键值对的值传入到隐藏信息info中,进行lsb算法的插入。
String info=pref.getString(Secretinfo, );
byte[] msg=info.getBytes();
接收消息具体的实现过程如下:
在RtpStreamReceiver类中开始秘密信息的提取,并以震动的形式提醒用户收到秘密信息。
rtp_socket.receive(rtp_packet);/*提取信息*/
mess +=GetInfo.getInfo(rtp_packet.getPayload());
if(mess.endsWith(*%*%*%)){
editor.putString(receiver_Info, mess.substring(0, mess.length()-6));
editor.commit();
mess=
VibratorUtil.Vibrate(Receiver.mContext,1000); //震动100ms}
在package org.sipdroid.sipua.ui.callscreen.java里面添加如下代码在通话界面生成“接收消息”按钮,对提取的信息进行查看,主要代码如下:
case RECEIVER_MENU_ITEM:
finalAlertDialog.Builder dialog = new AlertDialog.Builder(this);
String receive_info=pref.getString(receiver_Info, );
receiveText.setText(receive_info);
dialog.setCancelable(true)
.setTitle(接收秘密信息)
.setView(receiveText)
.setPositiveButton(确定, new DialogInterface.OnClickListener()
.setNegativeButton(取消, new DialogInterface.OnClickListener()
其中重新定义了一个Vibrate手机工具类来实现震动提醒。
根据使用要求和所处于的环境,本文在经典的时间域信息隐藏-LSB算法的基础上对其进行改进来实现信息隐藏功能。信息隐藏算法的实现分为秘密信息的嵌入和秘密信息的提取。
秘密信息的嵌入步骤:
步骤1:设置一byte数组data1存放同步码 + 前标识 + 秘密信息data0+后标识
步骤2:判断载体音频长度是否大于嵌入数据的位数,即radio.length>data1.length*8。
步骤3:将data1和radio的每个字节转换成8位二进制的形式存储,分别存储到一维数组ch和二维数组chars2当中。
步骤4:用ch的每一个元素替换chars2每个元素的最低位。
步骤5:将chars2转换成一个十进制数组,再转换成Byte数组,进行传输。
秘密信息的提取步骤:
步骤1:将音频的每个字节转换成8位二进制的形式存进二维数组chars3中。
步骤2 :提取chars3每个元素的最低位保存进chars4中,并转换成字符串d6中。
步骤3:循环判断,从下标i(0-d6.length-1)处开始,判断第i项字符是否为0。
步骤4:在前一步的基础上,如果第i项字符为0,则判断判断i-(i + 47)是否为同步码(000011111111 000011111111000011111111000011111111),若为真,则继续判断(i + 48)-(i + 55)是否为前标识(10010001)。
步骤5:在步骤4的基础上若为真,则开始提取信息,每次循环提取8bit,并且判断是否是后标识符(10010001)。
步骤6:在步骤5的基础上判断为真,则停止提取,将字符串d6转换成字节数组,再转换成字符串info返回即为隐藏信息。
3.2. Sipdroid信息隐藏功能测试结果分析
首先从语音通话质量、电话使用的流畅度来测试实现的效果。主要从主观角度对实现信息隐藏功能的Sipdroid进行整体评价即通过主观感知质量评价标准:通过人耳对获得语音质量的主观感觉来判断语音隐藏功能实现的好坏,比较语音信号嵌入秘密信息前后人耳对语音质量的感觉是否发生变化。采用的方法是:随机选取若干实验者分别对语音信号的质量进行评分,多次进行测试然后求其平均值得到主观平均分(MOS: Mean Opinion Source)。MOS是一种绝对等级打分方法采用五级评分标准。MOS评分方法的标准详见表1。
进行主观测试的人员为5组共10人,男、女各5人,每组分别进行语音通话且每组通话时间不少于3分钟,计算各自的得分并求其平均值,如表2所示,每隔20 s记录测试数据,对比加入信息隐藏算法前后其中一组延迟率和丢包率变化情况,结果如图4、图5所示,通过加入高斯噪声测试系统的鲁棒性,分析噪声加入前后语音质量的变化。加入噪声前后其中一组的丢包率、延迟率变化情况如图6、图7所示,嵌入的秘密信息与提取的秘密信息内容如表2所示。
因为Sipdroid系统处于开放的网络环境下,所以其使用情况与当时所处于的网络环境有关,在使用
表1. MOS评分标准
![](Images/Table_Tmp.jpg)
Table 2. Information Hiding Implementing MOS Values Table
表2. 信息隐藏实现MOS值表
![](//html.hanspub.org/file/2-2690280x12_hanspub.png)
Figure 4. Change chart in the delay rate before and after the algorithm is added
图4. 加入算法前后延迟率变化图
![](//html.hanspub.org/file/2-2690280x13_hanspub.png)
Figure 5. Change chart of the packet loss rate before and after the algorithm is added
图5. 加入算法前后丢包率变化图
![](//html.hanspub.org/file/2-2690280x14_hanspub.png)
Figure 6. Change chart of the packet loss rate before and after the noise is added
图6. 加入噪声前后丢包率变化图
![](//html.hanspub.org/file/2-2690280x15_hanspub.png)
Figure 7. Change chart of the delay rate before and after the noise is added
图7. 加入噪声前后延迟率变化图
![](Images/Table_Tmp.jpg)
Table 3. Information Hiding Interactive Data Sheets
表3. 信息隐藏交互数据表
时可能具有不稳定性。通过表3的结果可以得出加入信息隐藏功能的Sipdroid系统仍然具有良好的语音质量,对比图4、图5的丢包率和延迟率,加入信息隐藏功能之后的Sipdroid系统其丢包率和延迟率变化较小,说明加入信息隐藏算法之后对语音通话的质量影响较小,说明了算法达到了不可感知性的要求。由图6和图7得到,加入噪声前后丢包率和延迟率的变化较大说明该隐藏算法的鲁棒性需要进一步的改进。由表3可以看出不管是使用汉字、英文、数字或者符号,都能保证嵌入的信息与提取的信息相同,在保证语音通话质量的同时实现了秘密信息的传递。
4. 结论
本文在开源的Sipdroid的基础上,在语音通话模块中进行信息隐藏功能需求分析、设计、实现。相关功能测试的结果表明:在进行语音通话的同时完成秘密信息的隐藏、传输,保证了信息的安全性。在加入信息隐藏功能之后该软件仍然具有很好的使用性,说明本文研究的内容具有一定的现实意义。
基金项目
河南省高等学校大学生实践创新项目。