林永菁 (福建儿童发展职业学院信息中心,福建 福州350007)
以密钥为标准,可将密码体制分为对称密码体制和非对称密码体制[1-3]。
在对称密码体制下,加密密钥与解密密钥相同或一个密钥由另一个密钥简单推导出来。在这种加密体制下,通信双方的解密密钥需要由发方经过安全信道传送给收方。密码体制的安全性完全取决于密钥的安全。对称密码体制的优点是:安全性高,加解密速度快,易于实现。其缺点是:随着网络规模的扩大,密钥管理及解决消息确认问题比较困难;缺乏自动检测密钥泄露的能力。
对称密码体制又可分为序列加密和分组加密。①序列加密。在序列加密中,将明文消息按字符逐位加密,加解密密钥序列是由密钥流生成器用确定性算法产生的伪随机序列。密钥流序列的安全可靠性决定序列密码体制的安全强度。②分组加密。在分组加密中,将明文消息分组,在密钥的作用下逐组进行加密。分组密码算法的应用范围较为广泛,它是许多密码系统的重要组成部分,如伪随机数生成器、流密码、认证码和Hash函数的构造等。分组密码具有高强度、高速率、便于软硬件实现的特点,也正是由于这些特点使它成为标准化进程的首选体制。在用分组加密时,为了便于实现,实际应用中常常将简单容易实现的密码系统组合成比较复杂、密钥量大的密码系统。最有效、最实际的分组密码一般都是采用乘积组合方法。它的基本思想是把几个简单运算合成为一个复杂的加密函数。这些简单运算可以是移位、异或运算、算术加减乘除运算、简单替换等。将加密函数循环多次形成迭代密码属于乘积密码中最简单的一种。
在分组密码设计中,为了能够最大程度地改变明文的统计分布,往往进行置乱和扩散操作。为了达到改变明文统计特性的目的,可以采用替代操作。一个安全性较高的密码系统往往综合使用替代、置乱、扩散等操作,并通过多次迭代获得好的加密效果和较高的安全性能。
下面,笔者使用分组密码体制完成语音加密算法的设计。
在进行算法设计时遵循了以下原则:①数据恢复后不影响语音的可懂度;②加密数据与明文数据比较,冗余要小;③尽可能保证密钥不重复。
以往的加解密算法具有算法固定、复杂度高的特点,笔者设计的加解密算法基于 “一次一密”加密思想,以数据包为单位,加密每个数据包所用的算法都不同,这样以算法的不断变化来代替复杂度提供的安全性。该算法需要在通信的2端分别建立1个加密算法库和1个数据库。其中,算法库中包含n种加解密算法,如加法、减法、移位、位置变换等。数据库中的数据用来与明文数据进行指定的运算,算法库及数据库的大小、包括的具体内容都可以由用户自行定义。
算法由如下元素构成:
{E(f1,f2,…,fn),Pc(Pc最大值不超过数据库中的数据个数),D(d1,d2,…,dm)}
式中,E表示算法库,算法库中的算法用fi表示;Pc表示加密密钥(指针),指针指到的算法为当次加密采用的算法;D表示数据库,dm为数据库中的第m位数据。下面具体介绍算法库、数据库的建立及密钥的产生。
1)算法库的构成 设计中构造的算法库以表的形式存放在S3C2440A存储区中,置加解密算法表E[i]=fi。算法库中包含有128个小算法,有加法、减法、移位及位置变换类算法,移位算法就是通过调整移位方向 (左移和右移)、移位位数形成不同的算法,为保证数据加密后可恢复,算法库中的移位算法均是循环移位。例如采用移位算法时,可以将明文数据左移,左移1位、2位,…,t(t<15)位,也可以右移,右移1~t位,这些均可构成不同的加密算法。数据位置变换就是对每包288bit编码数据的原始数据的位置重新排序。位置变换的方法有多种,如设原始数据位为A1A2A3…Ak,位置倒置后变换为AkAk-1Ak-2…A2A1;相邻位置数据交换:交换后的数据为A2A1A4A3…Ak-1Ak。其中,Ai为单字数据。
当加密算法选用加法和减法运算时,需要从数据库中选出一个数据与明文数据参与指定的运算。用式子表示为Cc=Mc±dmc,其中,Cc表示加密的密文数据;Mc表示明文数据;dmc为选用的数据库中的数据。为避免数据冗余,算法中的数据加减运算不考虑进位与借位。
由以上叙述可知,构成算法库的小算法种类众多,但一些算法过于简单不能满足保密需求。笔者从中选取了128种能较大程度改变明文数据结构的算法用于语音加解密。算法表中f1为加法,f2为减法,f3~f128分别表示各种移位、位置变换类算法,算法序号i与Pc的对应关系为:i=Pc%128+1。
2)密钥的产生 在对称加密算法中,密钥是关系算法安全的一个关键性因素。如果在加密过程中使用同一个密钥,会降低算法的安全性,因此应保证各分组加密时所用密钥的不同。
在加解密设计中,密钥由随机数产生函数生成,该函数以系统当前时钟作为种子值,其优势是:每次加密调用密钥生成函数的时间不同,种子值也就不同,从而生成不同的随机序列即密钥。
3)数据库的建立 与算法库的存放方式相同,数据库也以表的方式存放在存储区中,其表示形式为D[m]=dm(m<212),设计中取m值为4096,dm为95~4096+95之间的自然数。dm按由小至大的顺序在数据表中顺次存放,即D[0]=95,D[1]=96,…。Pc与m的对应关系为:m=Pc。
加密步骤如下:①由随机数产生函数生成加密密钥Pc;②根据i=Pc%128+1值选出当前加密算法fi,并判断是否需要从数据库中选择数据,若需要,根据Pc值从数据库中选取数据dm;③按选取的算法进行加密,加密后将密钥与加密数据存入预先设置的CPU加密缓冲区中等待下一步处理。缓冲区中存放的加密数据包格式如图1所示,图2为加密流程图。
图1 加密缓冲区中数据包格式
解密是加密的逆过程,解密步骤如下:①从解密缓冲区中提取出密钥Pc及需要解密的数据;②根据密钥值判定加密所用算法,而后选出加密算法对应的解密算法:加密时所用的加法、减法、左移、右移分别对应解密时的减法、加法、右移、左移 (采用位置变换类算法时,加解密用同一种算法);③解密,将解密后的数据存入解码缓冲区等待处理。
解密方式有以下2种。
1)加解密算法库独立 这种方式需要在通信的两端分别建立2个算法库:加密算法库E[i]和与之对应的解密算法库E′[i]。对应的算法fi与f′i互为反变换,如加密算法f1为加法,对应的解密算法f′1则为减法。解密时,提取出解密缓冲区中数据的前2字节即为密钥Pi,根据Pi值在解密算法库中选出解密算法,从而完成数据解密。
2)加解密共用一个算法库 此种方式不需要另建解密算法库,加解密共用1个算法库及数据库。接收端先根据密钥值判断发送端所用加密算法的类型,再采用相应的解密算法实现数据解密。
这2种解密方式各有优缺点,前者需要建立1个解密算法库,较繁琐;后者不用重新建立算法库,但要编写1个加密算法密钥到解密算法密钥的转换程序。笔者采用前者。解密具体流程如图3所示。
图2 加密流程图
图3 解密流程图
[1]韩纪庆,张磊,郑铁然 .语音信号处理 [M].北京:清华大学出版社,2004.
[2]冷丰麟 .基于声码化技术的数字语音加密系统的研究 [D].大连:大连海事大学,2009.
[3]刘洪林,蒋昌茂,张建永.IP语音通信原理、设计及组网应用 [M].北京:电子工业出版社,2009.