针对现有加密方法实现复杂、资源消耗大、仅适用于特定场合的弊端,一种适合于实时数据传输、易实现、安全系数较大、能在非高安全度环境下使用的轻量级的加密算法——HW-F加密算法应运而生,接下来,我就来给大家简单介绍一下这种加密算法。

HW-F加密算法

一、HW-F加密算法的核心思想

HW-F加密算法的核心思想是“一次一密”,改变了以往的加密算法以算法复杂度提供安全性和算法固定的特点。

该加密算法以数据包为单位,加密每个数据包时算法都变化一次,以算法的不断变化提供的“一次一密”特性来代替加密算法的复杂度提供的安全性,这对VoIP音频数据包的传输尤其有意义。因为根据RFC1889中关于RTP协议的介绍(RTP是基于UDP或TCP的VoIP传输的基本传输协议,目前几乎所有运营商所用的VoIP传输协议都是RTP协议或它的修改),在每个VoIP数据包中都有协议部分,包含有重要的PT、SEQ、TimeStamp以及SSRC等关键字(在标准协议中总共是12字节,各字段的详细含义请参照文献[2-4]),给这些数据文件加密是抵御黑客插音、干扰、重放攻击等影响VoIP运营的关键所在。

二、HW-F加密算法的特点

HW-F加密算法在每个数据包中都包含了变化算法的完整参数,且这些参数没有前后关联性,因而非常适合VoIP这种丢包率较大的应用场合(目前最好的VoIP音频编码算法甚至能容忍30%的丢包率),而在该场合中,有些序列密码是不适用的,很多序列密码需要收发双方的严格同步。

HW-F加密算法本质上也是一种数轮迭代算法,但不同的是每轮的算法都是不固定的。该算法在每轮预置的包含n种小算法的算法库中临时选择一种小算法,总的算法就是每轮选择的小算法之和。根据排列组合的原理,经过m轮之后,所有各轮算法之和即总的算法就可能有nm种。配以适当的策略,可以使这种组合的数量进一步大幅增长,并且对每一个数据包的加密都能从这些算法的组合中选择一种,从而达到近似“一次一密”的能力。另外,因为每一轮算法都仅仅是一种小算法,所以可以大大提高算法的加解密速度。

HW-F加密算法在上述特点的基础上,不需要密钥的协商、分配和安全传送部分,大大降低了实现的难度,简化了算法的实现复杂度,节约了实现、维护的成本,可充分满足商业实现的各项要求。

三、HW-F加密算法的加密过程

因为目前在我国的VoIP实际运营中,都是通过专门的媒体网关实现互联互通,可以不考虑运营商之间的算法兼容性问题。加密算法每一轮由如下元素构成:

HW-F加密算法

式中 _Ej表示算法的第 j 轮的算法库;算法库的大小n可以按照具体的算法进行取值;Pjd表示一个指针,指针指到的算法才是该轮采用的算法;Dj表示指针的偏移距离,在加密一条流之前,Dj与该轮的密钥Kj(1≤j≤m,m表示轮数)进行有限域n内的加运算。总的算法结构如图所示:

HW-F加密算法

图中,明文数据M共经历了m轮运算,每轮运算的计算过程为该轮的指针初始偏移距离Dj与该轮的密钥Kj 在有限域n内相加,得出偏移距离jD,指针Pj根据jD指示的数值在算法库中找到算法fi(i=Di),然后采用该算法与明文M进行计算,该轮的偏移距离Dj被永久地更改为iD,经过m轮之后,得出最后的密文Mm,并且所有轮的偏移距离都被更新;Kci是一个随机数,其用途是作为次密钥,每个数据包都传递次值,每个数据包都不同。

需要指出的是,偏移距离D本质上就是密钥,称为密钥D。密钥D与密钥K相加得出某一轮要选择的算法,并用该相加值对D进行更新,密钥K在会话过程中传递而D不传递;密钥D有一个初始值,该初始值应固化在软件或硬件中,或伴随软件硬件的售出而分发,不同的客户端初始值不同,决定了对于不同的客户端,即便采用相同的密钥K,最终选择的算法不一样,加密结果也不一样。客户端和服务器端需要同时存储初始密钥D和不断被更新的密钥D′,一旦出现密钥D′不同步的情况,需要利用初始密钥D重置。

由上可以看出,每次用来选择算法的密钥其实是初始密钥D和之前所有传送过的密钥K在有限域n上的总和,因此攻击者即便截获了当前的密钥K,因为难以获知初始密钥D和之前所有传送过的密钥K,因而也无法解析密文,从而免去了保障密钥安全传送的考虑。

因为密钥K比较大,所以在每次会话中只在会话建立阶段传递一次,即在会话开始时从每个算法库中采用何种算法就已确定。为了保证在每个数据包中都采用不同的算法,还可以在每个数据包的负载中设置一个次密钥Kc,该密钥用来决定在已经确定的算法组合中,那一轮真正参与加密当前数据包的运算。例如在8轮的算法中,数据包包含的次密钥Kc如果为00101101(二进制),则表示经过密钥K和D的选择之后,真正参与当前数据包加密的只有第3、5、6、8轮算法,从而保证了每个数据包的算法都不一致。当然,在实际应用中,轮数应该足够多,以避免选择重复的情况出现。

对算法轮数的选择要求如下:

(1) 为保证算法的随机性,轮数要足够多;

(2) 因为每8轮用一个字节表示取舍,所以轮数应是8的整数倍;

(3) 因为每个数据包都要传送属于自己的Kc,因此Kc不宜过长,以避免增加额外的带宽;

(4) Kc应是随机的。

最后,算法库中的算法可以是任意简单的小算法,甚至可以仅仅是与某个数异或的算法。但算法的分组长度应至少为4字节,从而能够覆盖RTP协议中4字节长度的标志位。

四、HW-F加密算法性能分析

下面我们以采用64 bit分组、32轮的HW-F加密算法为例来说明其性能。假设每轮算法库中都有259个小算法,每个小算法都与某个数进行异或(每个数都是0~264数中的随机一个,且不重复,正好平均地分布在32轮算法中)。

1、HW-F加密算法的安全性分析

(1)HW-F加密算法采用32轮,在密钥Kc的取舍作用下,从理论上讲,经历每232个包算法才能重复一次,而这么多的包需要一次通话11 930 h(G.729编码算法、1帧/包)~71 582 h (G.723.1编码算法、2帧/包) 才有可能重复,因此随机性较好。

(2)攻击者即便知道了密钥库中的算法、密钥K和密钥Kc,因为不知道保密的密钥D和之前的所有密钥,因此仍然不能对明文进行解密。

(3)因为实际使用的密钥是密钥K和密钥D的和,而密钥D是初始密钥和之前所有会话密钥的总和,因此仅截获当前的密钥并不能对数据进行解密,所以无需考虑密钥安全传送问题,HW-F加密算法安全性大大增加。

(4)每轮2的59次方个小算法,一共32轮,每轮不重复,因此理论上讲64 bit的分组可以随机地与0~264中的任意数异或。

(5)即便是对于同样的明文采用完全相同的密钥K和密钥Kc,算法的组合仍然不同,因此得到的密文也不相同,有利于掩盖明文的统计特性。

(6)在RTP协议中,最长的标志字段是4字节且不变化,因此为了增加安全性,应采用64 bit以上长度的分组。

2、HW-F加密算法的易实现性

(1) HW-F中的小算法可以由用户自定义,且HW-F的结构决定了用户无须太在意算法的复杂性和数学理论,可以自由地定义简单易行的小算法(可以是异或、位移等一步完成的小算法)。

(2)简单的小算法运算量小、速度快,相比于目前的以分组密码算法结合密钥分配或协商为基础的方法来讲,计算复杂度大幅下降,因此对它们实现加解密不必但心系统性能的下降。

(3)因为不必担心密钥的安全传送问题,可简化系统构成,使其能够成为商业运营所能接受的VoIP加密算法。

(4)实现加密算法,每个数据包只需增加几个字节(次密钥),增加的字节数对带宽的额外消耗非常小。

(5)算法的每个数据包变化一次,包与包的算法之间没有关联性,因此适用于丢包较大的VoIP的应用场合。

综上所述,HW-F加密算法算法具有较好的安全性,实现复杂度小、成本低,系统性能消耗小、抗丢包,易于后期维护。

小知识之VoIP

VoIP(Voice over Internet Protocol)简而言之就是将模拟信号(Voice)数字化,以数据封包(Data Packet)的形式在IP网络(IP Network)上做实时传递。VoIP最大的优势是能广泛地采用Internet和全球IP互连的环境,提供比传统业务更多、更好的服务。VoIP可以在IP网络上便宜的传送语音、传真、视频、和数据等业务,如统一消息业务、虚拟电话、虚拟语音/传真邮箱、查号业务、Internet呼叫中心、Internet呼叫管理、电视会议、电子商务、传真存储转发和各种信息的存储转发等。