发明内容
有鉴于此,本发明提供了一种基于VoIP通话的方法及移动终端,以克服现有技术中由于对在Android操作系统的移动终端上使用的VoIP进行加密的方法通用性较差,且硬件改造导致Android操作系统的移动终端的成本较高,另外不同硬件改造方式造成了用户使用加密通话时的操作流程各异,同是Android操作系统打电话,操作方式却无法通用,极大地影响了用户在Android操作系统的移动终端上使用VoIP的感受的问题。
为实现上述目的,本发明提供如下技术方案:
一种基于网络电话VoIP通话的方法,通过对安卓Android操作系统底层软件进行改造,应用于运行Android操作系统的移动终端,所述方法包括:
获取初始实时传输协议RTP数据包,所述初始RTP数据包中包括初始RTP负载;
确定加密密钥段;
用所述加密密钥段对所述初始RTP负载进行加密,获取加密后的RTP负载,并用所述加密后的RTP负载替换所述初始RTP负载,生成加密后的RTP数据包;
将所述加密后的RTP数据包发送至接收方。
优选的,所述确定加密密钥段具体包括:
获取当前密钥组号;
读取所述初始RTP数据包中的序列号,所述序列号用于表示密钥段号;
计算所述初始RTP数据包中的序列号与在获取所述初始RTP数据包之前获取的上一初始RTP数据包中的序列号的差值;
判断所述差值是否在预设范围内;
当所述差值在预设范围内时,从所述当前密钥组号对应的密钥组中选取加密密钥段;
当所述差值不在预设范围内时,从所述当前密钥组号加一获得的新密钥组号对应的密钥组中选取加密密钥段。
优选的,在获取初始实时传输协议RTP数据包之前,所述方法还包括:
屏蔽Android操作系统底层原录音接口;
新建一个供应用层程序调用的专用录音接口;
判断调用所述专用录音接口的所述VoIP通话对应的应用程序是否为所述专用录音接口的合法应用程序;
当调用所述专用录音接口的所述VoIP通话对应的应用程序为所述专用录音接口的合法应用程序时,通过所述专用录音接口调用Android操作系统本地框架层中的录音功能,以生成所述初始RTP数据包。
优选的,所述判断调用所述专用录音接口的所述VoIP通话对应的应用程序是否为所述专用录音接口的合法应用程序,具体包括:
如果调用所述专用录音接口的所述VoIP通话对应的应用程序在所述专用录音接口的合法应用程序白名单内,则判断调用所述专用录音接口的所述VoIP通话对应的应用程序为所述专用录音接口的合法应用程序;
或,如果调用所述专用录音接口的所述VoIP通话对应的应用程序不在所述专用录音接口的不合法应用程序黑名单内,则判断调用所述专用录音接口的所述VoIP通话对应的应用程序为所述专用录音接口的合法应用程序。
一种基于网络电话VoIP通话的方法,通过对安卓Android操作系统底层软件进行改造,应用于运行Android操作系统的移动终端,所述方法包括:
接收发送方发送的加密后的RTP数据包;所述加密后的RTP数据包中包括加密后的RTP负载;
确定解密密钥段;
用所述解密密钥段对所述加密后的RTP负载进行解密,获取初始RTP负载,并用所述初始RTP负载替换所述加密后的RTP负载,将发送方的初始RTP数据包恢复。
优选的,所述确定解密密钥段具体包括:
获取当前密钥组号;
读取所述加密后的RTP数据包中的序列号,所述序列号用于表示密钥段号;
计算所述加密后的RTP数据包中的序列号与在接收所述加密后的RTP数据包之前接收的上一加密后的RTP数据包中的序列号的差值;
判断所述差值是否在预设范围内;
当所述差值在预设范围内时,从所述当前密钥组号对应的密钥组中选取解密密钥段;
当所述差值不在预设范围内时,从所述当前密钥组号加一获得的新密钥组号对应的密钥组中选取解密密钥段。
一种移动终端,应用安卓Android操作系统,所述移动终端包括:
初始RTP数据包获取单元,用于获取初始实时传输协议RTP数据包,所述初始RTP数据包中包括初始RTP负载;
加密密钥段确定单元,用于确定加密密钥段;
加密单元,用于用所述加密密钥段对所述初始RTP负载进行加密,获取加密后的RTP负载,并用所述加密后的RTP负载替换所述初始RTP负载,生成加密后的RTP数据包;
发送单元,用于将所述加密后的RTP数据包发送至接收方;
接收单元,用于接收发送方发送的加密后的RTP数据包;所述加密后的RTP数据包中包括加密后的RTP负载;
解密密钥段确定单元,用于确定解密密钥段;
解密单元,用于用所述解密密钥段对所述加密后的RTP负载进行解密,获取初始RTP负载,并用所述初始RTP负载替换所述加密后的RTP负载,将发送方的初始RTP数据包恢复。
优选的,所述加密密钥段确定单元具体用于:
获取当前密钥组号;
读取所述初始RTP数据包中的序列号,所述序列号用于表示密钥段号;
计算所述初始RTP数据包中的序列号与在获取所述初始RTP数据包之前获取的上一初始RTP数据包中的序列号的差值;
判断所述差值是否在预设范围内;
当所述差值在预设范围内时,从所述当前密钥组号对应的密钥组中选取加密密钥段;
当所述差值不在预设范围内时,从所述当前密钥组号加一获得的新密钥组号对应的密钥组中选取加密密钥段。
优选的,所述解密密钥段确定单元具体用于:
获取当前密钥组号;
读取所述加密后的RTP数据包中的序列号,所述序列号用于表示密钥段号;
计算所述加密后的RTP数据包中的序列号与在接收所述加密后的RTP数据包之前接收的上一加密后的RTP数据包中的序列号的差值;
判断所述差值是否在预设范围内;
当所述差值在预设范围内时,从所述当前密钥组号对应的密钥组中选取解密密钥段;
当所述差值不在预设范围内时,从所述当前密钥组号加一获得的新密钥组号对应的密钥组中选取解密密钥段。
优选的,所述移动终端还包括:
初始RTP数据包生成单元,用于屏蔽Android操作系统底层原录音接口;新建一个供应用层程序调用的专用录音接口;判断调用所述专用录音接口的所述VoIP通话对应的应用程序是否为所述专用录音接口的合法应用程序;当调用所述专用录音接口的所述VoIP通话对应的应用程序为所述专用录音接口的合法应用程序时,通过所述专用录音接口调用Android操作系统本地框架层中的录音功能,以生成所述初始RTP数据包;
所述判断调用所述专用录音接口的所述VoIP通话对应的应用程序是否为所述专用录音接口的合法应用程序,具体包括:
如果调用所述专用录音接口的所述VoIP通话对应的应用程序在所述专用录音接口的合法应用程序白名单内,则判断调用所述专用录音接口的所述VoIP通话对应的应用程序为所述专用录音接口的合法应用程序;
或,如果调用所述专用录音接口的所述VoIP通话对应的应用程序不在所述专用录音接口的不合法应用程序黑名单内,则判断调用所述专用录音接口的所述VoIP通话对应的应用程序为所述专用录音接口的合法应用程序。
经由上述的技术方案可知,与现有技术相比,本发明公开了一种基于VoIP通话的方法及移动终端,获取初始实时传输协议RTP数据包,所述初始RTP数据包中包括初始RTP负载;确定加密密钥段;用加密密钥段对初始RTP负载进行加密,获取加密后的RTP负载,并用加密后的RTP负载替换初始RTP负载,生成加密后的RTP数据包;将加密后的RTP数据包发送至接收方。上述基于VoIP通话的方法,无需对移动终端进行硬件改造,只通过对Android操作系统底层软件进行改造,将VoIP通话加密功能固化为Android操作系统的一部分,即可保障VoIP通话的安全,成本较低,而且,上述方法通用性较高,适用于所有的Android操作系统的移动终端。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本发明的实施例中对相同属性的对象在描述时所采用的区分方式。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,以便包含一系列单元的过程、方法、系统、产品或设备不必限于那些单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它单元。
由背景技术可知,现有技术中的,对在Android操作系统的移动终端上使用的VoIP进行加密的方法多是通过对Android操作系统的移动终端进行硬件改造,比如,添加加解密功能模块,但是,现有技术中Android操作系统的移动终端的种类繁多,对每种Android操作系统的移动终端来说,需要进行不同的硬件改造,因此,现有技术中对在Android操作系统的移动终端上使用的VoIP进行加密的方法通用性较差,且硬件改造导致Android操作系统的移动终端的成本较高,另外不同硬件改造方式造成了用户使用加密通话时的操作流程各异,同是Android操作系统打电话,操作方式却无法通用,极大地影响了用户在Android操作系统的移动终端上使用VoIP的感受。
因此,本发明公开了一种基于VoIP通话的方法及移动终端,获取初始实时传输协议RTP数据包,所述初始RTP数据包中包括初始RTP负载;确定加密密钥段;用加密密钥段对初始RTP负载进行加密,获取加密后的RTP负载,并用加密后的RTP负载替换初始RTP负载,生成加密后的RTP数据包;将加密后的RTP数据包发送至接收方。上述基于VoIP通话的方法,无需对移动终端进行硬件改造,只通过对Android操作系统底层进行软件改造,将VoIP通话加密功能固化为Android操作系统的一部分,即可保障VoIP通话的安全,成本较低,而且,上述方法通用性较高,适用于所有的Android操作系统的移动终端。
下面将通过以下实施例对本发明公开的基于VoIP通话的方法及移动终端进行详细描述。
请参阅附图1,为本发明实施例公开的一种基于VoIP通话的方法实施例1的流程示意图,该方法通过对安卓Android操作系统底层软件进行改造,应用于运行Android操作系统的移动终端,该方法具体包括如下步骤:
S101:获取初始实时传输协议RTP数据包,所述初始RTP数据包中包括初始RTP负载。
一段VoIP语音是由若干个语音数据包组成的,在执行本步骤之前,需要预先在Android操作系统源码的Java框架层和/或本地框架层中,确定截获RTP数据包的位置(下文称为截获点),对于加密过程来说,截获点一般应在将语音数据包编码生成RTP数据包与发送所述RTP数据包之间,对于解密过程来说,截获点一般应在加密后的RTP数据包接收与加密后的RTP数据包解码之间。不同的Android操作系统版本,截获点的位置可能有差别。例如,在Android 2.3版本中,一个优选的加/解密截获点位于Android源码目录\frameworks\base\voip\jni\rtp文件夹中。
在本步骤中,初始RTP数据包即在截获点处获取。请参阅附图2,为本步骤中所说的RTP数据包结构示意图,在该RTP数据包中包括Sequence Number(数据包序列号)、RTP负载(有效通信数据)等。
S102:确定加密密钥段。
对于每一个初始RTP数据包,在加密时会对应一段加密密钥段,在解密时也会对应一段解密密钥段。例如,初始RTP数据包A在发送方加密时使用了加密密钥段a~b,则到了接收方解密时使用的解密密钥段仍然为a~b。在本实施例中,主要就是确定采用哪个密钥段作为初始RTP数据包的加密密钥段。
S103:用所述加密密钥段对所述初始RTP负载进行加密,获取加密后的RTP负载,并用所述加密后的RTP负载替换所述初始RTP负载,生成加密后的RTP数据包。
在确定采用哪个密钥段作为初始RTP数据包的加密密钥段之后,只需用确定的加密密钥段对初始RTP数据包中的初始RTP负载进行加密,获取加密后的RTP负载,并用所述加密后的RTP负载替换所述初始RTP负载,初始RTP数据包中的其他部分不作任何更改,即可生成加密后的RTP数据包。
S104:将所述加密后的RTP数据包发送至接收方。
最后将所述加密后的RTP数据包通过移动网络发送至接收方。
本实施例公开了一种基于VoIP通话的方法,获取初始实时传输协议RTP数据包,所述初始RTP数据包中包括初始RTP负载;确定加密密钥段;用加密密钥段对初始RTP负载进行加密,获取加密后的RTP负载,并用加密后的RTP负载替换初始RTP负载,生成加密后的RTP数据包;将加密后的RTP数据包发送至接收方。上述基于VoIP通话的方法,无需对移动终端进行硬件改造,只通过对Android操作系统底层进行软件改造,将VoIP通话加密功能固化为Android操作系统的一部分,即可保障VoIP通话的安全,成本较低,而且,上述方法通用性较高,适用于所有的Android操作系统的移动终端。
请参阅附图3,为本发明实施例公开的一种确定加密密钥段的方法具体流程示意图,该方法具体包括如下步骤:
S201:获取当前密钥组号。
VoIP保密通话所需的加密密钥段的定位方式采用“密钥组号+密钥段号”的形式,也就是说,发送方和接收方只要每次都使用相同密钥组号和相同密钥段号所定位的同一小段密钥为同一个RTP数据包中的负载分别进行加解密,即可确保整个VoIP通话过程中的密钥使用正确。
密钥组号指的是存在发送方和接收方移动终端内密钥空间中的一个数字,发送方和接收方的密钥组号约定均从0开始自增,始终保持相同。在本实施例中,用一个16位的有符号数表示密钥组号,其表示范围为-32768到32767,这里取0-32767为有效的密钥组号,因此最多可以表示32768个密钥组。
密钥段号是对每一个密钥组所表示的密钥空间进一步进行细分,这里使用一个16位的无符号数表示密钥段,其表示范围为0-65535。因此,每个密钥组中最多可以容纳65536个密钥段。每一个密钥段可以用来对一个RTP数据包进行加解密。
请参阅附图4,为本实施例公开的一种密钥空间示意图,其中,第0组,第1组,……第32767组即为发送方和接收方的密钥组。每一个密钥组下又可以有第0个密钥段,……第65535个密钥段。这样,通过“密钥组号+密钥段号”的方式,就可以精确描述一个密钥段在整个密钥空间中的逻辑位置。这样的组合可以支持一个较为庞大的密钥空间,可以支撑较大通信数据量的保密通信应用需要。
同样,如果在一些其他应用场合,需要保密的通信数据不是太多。例如,在单一一个密钥组中,密钥空间的大小就可以满足要求,这样就可能不再需要密钥组号;或者也可以不采用本实施例中的RTP包序列号作为密钥段号,而是自行修改RTP包结构或内容来实现相似的作用;或是采用独立于RTP包的专门数据形式来表示类似于本方案中密钥段号的作用。这些变种方法,也应视作在本发明基础上的延伸。
本步骤就是获取发送方移动终端中存放的当前密钥组号。
S202:读取所述初始RTP数据包中的序列号,该序列号用于表示密钥段号。
为充分利用VoIP通话中的RTP数据包自带的信息,尽量不改动RTP数据包的格式和大小,本实施例使用RTP数据包中的序列号(Sequence Number)来表示所述密钥段号。
请参阅附图2,RTP数据包中序列号(即图中Sequence Number)占16个bit位,可直接来做为密钥段号使用。为进一步增强安全性,每次通话的第一个RTP包的序列号是随机产生而不是从0开始的,也就意味着通话时密钥的起始使用位置是从图4所示的第0组中随机动态产生的(因为起始密钥组号为0,密钥段号随机产生)。
S203:计算所述初始RTP数据包中的序列号与在获取所述初始RTP数据包之前获取的上一初始RTP数据包中的序列号的差值。
读取所述初始RTP数据包中的序列号之后,缓存该序列号,并从缓存中获取在所述初始RTP数据包之前获取的上一初始RTP数据包中的序列号,并计算二者的差值。比如,初始RTP数据包中的序列号为8,上一初始RTP数据包中的序列号为7,则二者的差值为1;特殊情况,如果本初始RTP数据包是本次通话的第一个初始RTP数据包,则这个差值视作为1。
S204:判断所述差值是否在预设范围内,当所述差值在预设范围内时,执行步骤S205,当所述差值不在预设范围内时,执行步骤S206。
在本步骤中,判断所述差值是否在预设范围内即判断所述差值是否过大,如果差值过大,意味着这一组密钥段已经用完,开始了一组新的密钥段的使用,即进入了下一个密钥组的逻辑空间。
一种优选的方式是将所述预设范围设为密钥段号取值范围0-65535的一半,32768。比如,初始RTP数据包中的序列号为0,而上一初始RTP数据包中的序列号为65535,则差值为65535,大于32768,则可判断差值过大;初始RTP数据包中的序列号为499,上一初始RTP数据包中的序列号为500,则差值为1,小于32768,则可判断差值过小。
之所以要设置一个预设范围用来判断密钥段的使用是否已经跨组,是因为真实VoIP通话中,由于网络原因,部分RTP包可能丢失。例如在网络质量不佳的情况下,移动终端收到的前一个RTP包的序列号可能为65523,而收到的后一个RTP包的序列号可能就到了12,并不一定是严格按照……65534、65535、0、1、2……这样规则的结果。
S205:从所述当前密钥组号对应的密钥组中选取加密密钥段。
当所述差值在预设范围内时,则说明加密初始RTP数据包的加密密钥段未递增到溢出,无需换到下一个密钥组,则从所述当前密钥组号对应的密钥组中选取加密密钥段。
S206:从所述当前密钥组号加一获得的新密钥组号对应的密钥组中选取加密密钥段。
当所述差值不在预设范围内时,则说明加密初始RTP数据包的加密密钥段递增到溢出,需要换到下一个密钥组,则从所述当前密钥组号加一获得新的密钥组号对应的密钥组中选取加密密钥段,并将这个新密钥组号保存在发送方移动终端的密钥空间中。
对于一段VoIP语音中的若干个RTP数据包,是采用一次一密的方式进行加密的。即从密钥组对应的密钥中选取与RTP负载长度等长的随机密钥作为加密密钥段,每个加密密钥段只用一次。
另外,由于木马是一个运行在Android操作系统应用层上的程序,它在后台隐蔽录取通话中的声音信号,并可以上传到网络上的指定邮箱/网站中。本发明实施例还公开了一种防止木马非法录音的方式,使攻击者无法借助木马对VoIP通话实施窃听。具体的,该方式可以在移动终端出厂前执行,也可以在获取初始实时传输协议RTP数据包之前执行。
请参阅附图5,图5为本发明实施例公开的一种防止木马非法录音的方式的流程示意图,该方式包括如下步骤:
S301:屏蔽Android操作系统底层原录音接口。
请参阅附图6,屏蔽Android操作系统底层原录音接口,即将附图6中的①②③④四个原有函数调用接口屏蔽掉,总是向调用者返回错误调用提示。
以Android 2.3为例,
①android_media_AudioRecord_start函数位于/frameworks/base/core/jni/android_media_AudioRecord.cpp中
②android_media_MediaRecorder_start函数位于/frameworks/base/media/jni/android_media_MediaRecorder.cpp中
③AudioRecord:start函数位于/frameworks/base/media/libmedia/AudioRecord.cpp中
④MediaRecorder::start函数位于/frameworks/base/media/libmedia/Mediarecorder.cpp中
①②位于JNI部分,③④位于C/C++本地框架部分。
需要说明的是,根据上述方式的思想屏蔽上述文件中的其他函数,或是Android版本升级后功能类似的其他文件名中的类似函数,达到无法使原录音程序执行的目的,也应视为在本发明的保护范围。
S302:新建一个供应用层程序调用的专用录音接口。
仍然以图6为例,在③处新建一个供应用层程序调用的专用录音接口。
S303:判断调用所述专用录音接口的所述VoIP通话对应的应用程序是否为所述专用录音接口的合法应用程序。
具体的,如果调用所述专用录音接口的所述VoIP通话对应的应用程序在所述专用录音接口的合法应用程序白名单内,则判断调用所述专用录音接口的所述VoIP通话对应的应用程序为所述专用录音接口的合法应用程序;
或,如果调用所述专用录音接口的所述VoIP通话对应的应用程序不在所述专用录音接口的不合法应用程序黑名单内,则判断调用所述专用录音接口的所述VoIP通话对应的应用程序为所述专用录音接口的合法应用程序。
S304:当调用所述专用录音接口的所述VoIP通话对应的应用程序为所述专用录音接口的合法应用程序时,通过所述专用录音接口调用Android操作系统本地框架层中的录音功能,以生成所述初始RTP数据包。
需要说明的是,如果攻击者编写一个伪造的应用层VoIP拨号程序,用该应用层程序依然能成功调用在③处新建的专用录音接口,导致出现安全漏洞。因此,在以上方法的基础上,可得另一种改进之后的优选方法:即在专用录音接口处进一步增加核实应用层的调用者的相关信息摘要的功能,例如,可以核实应用层调用者程序的MD5(Message DigestAlgorithm MD5,消息摘要算法第5版)、SHA1(安全哈希算法,Secure Hash Algorithm)、包名、签名等。以进一步确定调用所述专用录音接口的所述VoIP通话对应的应用程序的合法性,保证真正合法的应用层调用者才能通过专用录音接口调用下面的C/C++本地框架层中相应的录音功能。
这样做的好处,是确保了只有认定过的白名单中的合法程序才能调用录音功能,从根本上杜绝了任何其他针对手机终端的窃听可能。因为不管木马如何编写,始终是运行在Android应用层上,始终是需要调用下层的录音接口才能窃听,而原有的这个渠道已经被彻底掐断了。这样的话,我们不需要费心去针对层出不穷的各种木马病毒去防止窃听,而是一劳永逸。
上述实施例详细描述了VoIP通话时,发送方对RTP数据包进行加密的过程,接收方对加密后的RTP数据包进行解密的过程与所述加密过程基本类似,只不过是反向操作,用密钥将获得的RTP数据包中的密文解密而已。将通过以下实施例进行简要描述。
请参阅附图7,为本发明实施例公开的一种基于VoIP通话的方法实施例2的流程示意图,该方法通过对安卓Android操作系统底层软件进行改造,应用于运行Android操作系统的移动终端,该方法具体包括如下步骤:
S401:接收发送方发送的加密后的RTP数据包;所述加密后的RTP数据包中包括加密后的RTP负载。
S402:确定解密密钥段。
所述确定解密密钥段具体包括:
获取当前密钥组号;
读取所述加密后的RTP数据包中的序列号,该序列号用于表示密钥段号;
计算所述加密后的RTP数据包中的序列号与在接收所述加密后的RTP数据包之前接收的上一加密后的RTP数据包中的序列号的差值;
判断所述差值是否在预设范围内;
当所述差值在预设范围内时,从所述当前密钥组号对应的密钥组中选取解密密钥段;
当所述差值不在预设范围内时,从所述当前密钥组号加一获得的新密钥组号对应的密钥组中选取解密密钥段。
S403:用所述解密密钥段对所述加密后的RTP负载进行解密,获取初始RTP负载,并用所述初始RTP负载替换所述加密后的RTP负载,将发送方的初始RTP数据包恢复。
需要说明的是,接收方对加密后的RTP数据包进行解密的过程为发送方对RTP数据包进行加密的过程的逆过程,本实施例不再赘述,具体请参见以上描述的发送方对RTP数据包进行加密的过程的相关论述。
需要说明的是,防木马录音部分与VoIP的RTP包加解密部分相对独立,在保密通话的双方移动终端上,防木马录音功能都可以存在。即使不拨打VoIP电话而是普通电话时,防木马录音功能同样可以保护普通电话内容不被木马窃取。
RTP语音数据包加密从数据链路角度确保了VoIP端到端通话内容的安全,防木马录音部分从移动终端本身角度强化了通话安全。二者配合,使得本方法能够提供一种非常安全的VoIP保密通话方式。
请参阅附图8,为本发明实施例公开的一种移动终端实施例3的结构示意图,该移动终端应用安卓Android操作系统,具体包括如下单元:
初始RTP数据包获取单元11,用于获取初始实时传输协议RTP数据包,所述初始RTP数据包中包括初始RTP负载;
加密密钥段确定单元12,用于确定加密密钥段;
加密单元13,用于用所述加密密钥段对所述初始RTP负载进行加密,获取加密后的RTP负载,并用所述加密后的RTP负载替换所述初始RTP负载,生成加密后的RTP数据包;
发送单元14,用于将所述加密后的RTP数据包发送至接收方;
接收单元15,用于接收发送方发送的加密后的RTP数据包;所述加密后的RTP数据包中包括加密后的RTP负载;
解密密钥段确定单元16,用于确定解密密钥段;
解密单元17,用于用所述解密密钥段对所述加密后的RTP负载进行解密,获取初始RTP负载,并用所述初始RTP负载替换所述加密后的RTP负载,将发送方的初始RTP数据包恢复。
所述加密密钥段确定单元12具体用于:
获取当前密钥组号;
读取所述初始RTP数据包中的序列号,该序列号用于表示密钥段号;
计算所述初始RTP数据包中的序列号与在获取所述初始RTP数据包之前获取的上一初始RTP数据包中的序列号的差值;
判断所述差值是否在预设范围内;
当所述差值在预设范围内时,从所述当前密钥组号对应的密钥组中选取加密密钥段;
当所述差值不在预设范围内时,从所述当前密钥组号加一获得的新密钥组号对应的密钥组中选取加密密钥段。
所述解密密钥段确定单元16具体用于:
获取当前密钥组号;
读取所述加密后的RTP数据包中的序列号,该序列号用于表示密钥段号;
计算所述加密后的RTP数据包中的序列号与在接收所述加密后的RTP数据包之前接收的上一加密后的RTP数据包中的序列号的差值;
判断所述差值是否在预设范围内;
当所述差值在预设范围内时,从所述当前密钥组号对应的密钥组中选取解密密钥段;
当所述差值不在预设范围内时,从所述当前密钥组号加一获得的新密钥组号对应的密钥组中选取解密密钥段。
所述移动终端还包括:
初始RTP数据包生成单元,用于屏蔽Android操作系统底层原录音接口;新建一个供应用层程序调用的专用录音接口;判断调用所述专用录音接口的所述VoIP通话对应的应用程序是否为所述专用录音接口的合法应用程序;当调用所述专用录音接口的所述VoIP通话对应的应用程序为所述专用录音接口的合法应用程序时,通过所述专用录音接口调用Android操作系统本地框架层中的录音功能,以生成所述初始RTP数据包;
所述判断调用所述专用录音接口的所述VoIP通话对应的应用程序是否为所述专用录音接口的合法应用程序,具体包括:
如果调用所述专用录音接口的所述VoIP通话对应的应用程序在所述专用录音接口的合法应用程序白名单内,则判断调用所述专用录音接口的所述VoIP通话对应的应用程序为所述专用录音接口的合法应用程序;
或,如果调用所述专用录音接口的所述VoIP通话对应的应用程序不在所述专用录音接口的不合法应用程序黑名单内,则判断调用所述专用录音接口的所述VoIP通话对应的应用程序为所述专用录音接口的合法应用程序。
需要说明的是,上述各个单元的具体功能实现已在方法实施例部分进行详细描述,本实施例不再赘述,具体请参见方法实施例的相关部分。
综上所述:
本发明公开了一种基于VoIP通话的方法及移动终端,获取初始实时传输协议RTP数据包,所述初始RTP数据包中包括初始RTP负载;确定加密密钥段;用加密密钥段对初始RTP负载进行加密,获取加密后的RTP负载,并用加密后的RTP负载替换初始RTP负载,生成加密后的RTP数据包;将加密后的RTP数据包发送至接收方。上述基于VoIP通话的方法,无需对移动终端进行硬件改造,只通过对Android操作系统底层进行软件改造,将VoIP通话加密功能固化为Android操作系统的一部分,即可保障VoIP通话的安全,成本较低,而且,上述方法通用性较高,适用于所有的Android操作系统的移动终端。另外,本发明实施例还公开了一种防止木马非法录音的方式,使攻击者无法借助木马对VoIP通话实施窃听。
RTP数据包加密传输,解决了语音数据传输过程中的保密问题;防木马录音,解决了语音数据在终端的保密问题。二者结合,可以很好实现整个保密通话过程的信息安全。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
综上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照上述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对上述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。