位元压缩加密方法及其器件 本发明属于计算机和数字通讯等技术领域,是一种集数据压缩和加密于一体的数据处理方法及其器件。
本发明的基础是P.Elias在六十年代提出的算术编码,其原理是用一个单独的浮点输出数值代替一段数据的整体编码信息。对于较长的复杂数据,输出数值需要更多的浮点位数。
具体地说,若某一数据段中含有n个不同符号s1,s2,…,sn,各符号的出现频次分别为P1,P2,…,Pn.引进记号c0=0,ci=Σj=1iPj/Σj=1nPj---(1)]]>
首先构造n个半开区间[ci-1,ci)显然这n个半开区间互不相交且正好覆盖区间[0,1)。其次,建立符号si与[ci-1,ci)之间的一一对应关系。这种对应关系可以这样理解:对于[0,1)中的任意一个实数,若落在区间[ci-1,ci),则它就代表了符号si;同样给定符号si,则区间[ci-1,ci)中的任何实数都可以表示它。于是,算术编码就是通过这种对应关系,找出所编码数据的一个表示区间,即区间下限low和区间上限high,它可由如下迭代完成:
·初始化:对于空数据,low=0,high=1.
·编码符号:当符号s,加入到当前数据中,则
得到新的区间[lou,high),它精确地表示了前面所编码的数据。
·结束:当数据结束时,在[low,high)中选择一个最短的有理二进制浮
点数,去掉前面的小数点就得到当前数据的编码比特流。
表达式(2)是顺序执行的计算机程序,并且所有的计算都是实数运算。显然当编码数据长且复杂时range将变得非常小。存储这个位数很长的浮点数据,用有限精度地计算机将是非常困难的。这正是算术编码提出多年而无法实用的原因所在。
七十年代,由于Rissanen和Pasco的工作,人们才对算术编码的实用性有了初步的认识。直到八十年代,Langdon和Rissanen在一系列工作中提出了模型的概念,并使用有限精度数学把算术编码成功地应用于黑白二值图象的压缩编码。在此基础上,Witten等人详细地展示了多符号算术编码的有限精度处理技术,并给出了一个完善的C语言程序。
有限精度处理技术是把high=1写成0.1111…,并删除前缀0.,这样可以用有限长整数,譬如8位,把high表成11111111.编码过程中,一旦有位输出,high的后续位就拌随着移入。当编码一个有n个符号的数据段,必须有一个频率统计表fi;i=0,1,…,n,其中fi-fi-1表示第i个符号的统计频率。编码第i个符号,使用如下公式调整low和high。表达式(3)是顺序执行的计算机程序,并且所有的计算都是整数运算。一旦计算完成,还需要作一些位移出工作。这些实质性修改,已经被IBM等申请了专利。
上述模型也常称为固定概率模型,因为编码器必须存储编码使用的频率表,以便通知解码器采用相同的频率表,因此其编码效率往往不高,为此实际中常采用自适应统计模型。自适应模型的初始频率表为fi=i,若当前编码第i个符号,则编码后,fi,j=i,…,n都加1.对于文本数据,每编码一个符号平均需要大约128次加法运算,对于12比特的图象数据,每编码一个辉度符号,则需要大约2K次加法运算,这显然需要非常大的计算开销。
本发明的目的在于提供一种能够大量减少计算工作开销,且性能安全的数据压缩加密方法及其器件。
本发明提出的数据压缩加密技术,包括数据压缩编码方法和数据加密处理方法。数据压缩编码方法是根据自适应统计模型设计的,它把数据分解为二进制位元序列,每次编码一个位元。因此,我们称之为自适应位元压缩编码算法,简称位元编码算法。这个编码算法摒弃了数据的媒体特性,其接口简单,自适应频率表调整自由,计算方便,具有很强的通用性。
具体地说,自适应位元压缩编码算法,需要一个m位的移位寄存器和两个2m字节的频率统计表f1[i],f0[i],i=0,1… ,2m-1.其具体实现如下:(1)编码初始化:
区间上限置0,下限置2n-1,即low=0,high=2n-1,
移位寄存器量0,即r=0,
频率统计表各分量置1,即f0[i]=f1[i]=1;i=0,1,…,2m-1;
位溢出控制置0,即ov=0.(2)数值计算:
temp=low+(high-low+1)*f0[r]/(f0[r]+f1[r]).(3)编码判断:
(a)如果当前编码的符号为1,则f1[r]加1,即f1[r]=f1[r]+1;调整
low,即low=temp,high不调整;移位寄存器左移一位,即r=
r<<1,并把当前编码符号1,置于移位寄存器末位,即r=r+1.
(b)如果当前编码的符号为0,则f0[r]加1,即f0[r]=f0[r]+1;调整
high,即high=temp-1,low不调整;移位寄存器左移一位,即
r=r<<1.(4)循环移位:
(a)如果low和high的最高二进位相同,则输出其最高二进位,low
和high左移一位,即low=low<<1,high=high<<1,且high
末位置1,即high=high+1.
(b)high-low≥2n-2,则返回步骤(2).
(c)上述两情况都不满足,位溢出控制符加1,即ov=ov+1.low和
high左移一位,即low=low<<1,high=high<<1,且high末
位置1,即high=high+1.返回步(4)中步(a).
这里的位输出过程,视溢出控制而定。若ov=0,则输出是正向的;否则,为反向输出。所谓反向输出是:若当前输出1,则实际输出0;若当前输出0,则实际输出1.例如:
·ov=2,若当前输出为1,则实际输出2个0(反向).
·ov=3,若当前输出为0,则实际输出3个1(反向).
·ov=0,若当前输出为1,则实际输出1个1(正向).
·ov=0,若当前输出为0,则实际输出1个0(正向).
关于移位寄存器的位数m作如下说明:如果m小,则需要较少的统计内存,但压缩效率不高;如m较大,则需要较大的统计内存,但有更高的压缩效率。一般1≤m≤32,通常我们使用16位移位寄存器,即m=16,这时需要128K字节的内存开销,用于两个64K字节的频率统计表f0,f1.
关于初始区间限2n中的n作如下说明:n表示区间上限使用的二进位数,一般4≤n≤16,通常取为8,视计算过程中使用的计算精度而定。这些选择对压缩效率的影响不大。
另外,在上述以及下面的算法描述过程中,我们已经使用或即将使用C语言中的一些位计算符号,现说明如下:a<<k表示a左移k位。a^k表示a与k作异或运算。a&k表示a与k作与运算。a|k表示a与k作或运算。
对应于上述自适应位元压缩编码算法,本发明也给出相应的自适应位元压缩解码算法,简称位元解码算法,其算法具体步骤如下:(1)解码初始化:
区间上限置0,下限置2n-1,即low=0,high=2n-1,
移位寄存器置0,即r=0,
频率统计表各分量置1,即f0[i]=f1[i]=1;i=0,1,…,2m-1;
压缩比特流输入,code=前n个输入位。(2)数值计算:{value=(code-low+1)*(f0[r]+f1[r])/(high-low+1).temp=low+(high-low+1)*f0[r]/(f0[r]+f1[r]).]]>(3)输出判断:
(a)若value≥f0[r],输出符号1.f1[r]加1,即f1[r]=f1[r]+1;调整
low,即low=temp,high不调整;移位寄存器左移一位,即r=
r<<1,并把当前编码符号1,置于移位寄存器末位,即r=r+1.
(b)若value<f0[r],输出符号0,f0[r]加1,即f0[r]=f0[r]+1;调整
high,即high=temp-1.low不调整;移位寄存器左移一位,即
r=r<<1(4)循环移位:
(a)如果low和high的最高二进位相同,则low和high左移一位,即
low=low<<1,high=high<<1,且high末位置1,即high=
high+1.
(b)high-low≥2n-2,则返回步骤(2).
(c)上述两情况都不满足,则code与2n-2作异或运算,即code=code
^2n-2;low与2n-2-1作与运算,即low=low&(2n-2-1);high
与2n-2作或运算,即high=high|2n-2.low,code和high同时左
移一位,即low=low<<1,high=high<<1,且high末位置1,
即high=high+1.返回步(4)中步(a).
在上述位元解码算法中,code存放的是编码输出的数据,称为压缩比特流;m和n的含义与位元编码算法中的含义相同,且m和n的取值,在编解码中必须一致。
本发明提出的数据压缩加密技术是结合自适应位元压缩编码算法和加密处理方法实现的。加密处理方法就是在位元编码初始化过程中,利用密匙引进随机噪声,从而达到隐藏数据的作用。我们称相应的算法为自适应位元加密算法,具体实现如下:
输入密匙和密表,并按位处理密匙和密表如下:
·若当前密匙位为1,则f1[r]=f1[r]+1,编码密表中的相应位,即依次
执行位元编码算法的(2)、(3)、(4)步。
·若当前密匙位为0,则f0[r]=f0[r]+1,编码密表中的相应位,即依次
执行位元编码算法的(2)、(3)、(4)步。
·循环执行上述两个过程,直到编完密表中的所有位。
在位元加密算法中,密匙和密表是任意给定的等长二进制数字。加密者必须记住密匙,以便解码时使用;但加密者不需要知道密表的内容,因为它主要用来扰乱位元编码器的编码状态。也就是说,当密表编码结束后,区间上限low,区间下限high,位溢出控制ov,移位寄存器r和频率统计表f0[i],f1[i],i=0,1,…,2m-1的当前值对不掌握密匙者是不透明的。从这种混乱状态出发编码明文,就可以隐藏明文的真正含义,达到加密目的,因为攻击者不掌握密匙就无法消除这种混乱状态。如果单靠猜测编码器的当前状态,需要枚举至少种可能性;当m>8时,这是一个庞大的天文数字,即使用现在最快的计算机也无法在数百年之内枚举所有可能性。因此,本发明提出的加密算法是非常安全的。
针对上述自适应位元压缩加密算法,本发明也给出相应的自适应位元解密算法,具体步骤如下:
输入加密使用的密匙,并按位处理密匙和密表如下:
·若当前密匙位为1,则f1[r]=f1[r]+1,解码密表中的相应位,即依次
执行位元解码算法的(2)、(3)、(4)步,并扔掉输出位。
·若当前密匙位为0,则f0[r]=f0[r]+1,解码密表中的相应位,即依次
执行位元解码算法的(2)、(3)、(4)步,并扔掉输出位。
·循环执行上述两个过程,直到解出密表中的所有二进位。
根据上述位元压缩加密技术,本发明研制了相应的器件一自适应位元加解密器,该器件包括加密器和解密器两个部分。加密器由产生密匙位的密匙盘,产生密表的随机数发生器和用于编码密表和明文的自适应位元编码器构成,其中的编码器实现自适应位元编码算法。解密器由产生密匙位的密匙盘和用于解码密表和明文的自适应位元解码器构成,其中的解码器实现自适应位元解码算法。加解密器的系统框图如附图所示,其工作原理如下:
·加密过程:在密匙的输入过程中,每输入一个密匙位,随机数生成
器就产生一个随机二进位,密匙位被用于初始化位元算术编码器的计
数器一次,算术编码器编码相应的随机位并输出比特流。当密匙位输
入结束,编码器再用当前的编码参数和计数器状态压缩并编码明文。
·解密过程:依次输入密匙,每输入一个密匙位,密匙位被用于初始
化算术解码器一次,算术解码器解出密表中相应的随机二进位并扔掉。
当密匙位输入结束,解码器再用当前的解码参数和计数器状态解码明
文。
加密器的操作过程如下:(1)编码初始化:
区间上限置0,下限置2n-1,即low=0,high=2n-1,
移位寄存器置0,即r=0,
频率统计表各分量置1,即f0[i]=f1[i]=1;i=0,1,…,2m-1;
位溢出控制置0,即ov=0.(2)引进噪声:输入有限长密匙,譬如010110110.随机产生等长个二进
位表达的随机数(密表),譬如,111010001.按位处理密匙和密表如下:
(a)若当前密匙位为1,则f1[r]=f1[r]+1,编码密表中的相应位,即
依次执行位元编码算法的(2)、(3)、(4)步。
(b)若当前密匙位为0,则f0[r]=f0[r]+1,编码密表中的相应位,即
依次执行位元编码算法的(2)、(3)、(4)步。
(c)循环执行上述两个过程,直到编完密表中的所有位。(3)编码明文:对明文实施位元编码算法的(2)、(3)、(4)步。
解密器操作过程如下:(1)解码初始化:
区间上限置0,下限置2n-1,即low=0,high=2n-1,
移位寄存器置0,即r=0,
频率统计表各分量置1,即f0[i]=f1[i]=1;i=0,1,…,2m-1;
密文比特流输入,code=前n个输入位。(2)消除噪声:输入加密使用的有限长密匙,譬如010110110.按位处理
密匙和密表如下:
(a)若当前密匙位为1,则f1[r]=f1[r]+1,解码密表中的相应位,即
依次执行位元解码算法的(2)、(3)、(4)步。
(b)若当前密匙位为0,则f0[r]=f0[r]+1,解码密表中的相应位,即
依次执行位元解码算法的(2)、(3)、(4)步。
(c)循环执行上述两个过程,直到解出密表中的所有随机二进位。(3)解码明文:对密文实施位元解码算法的(2)、(3)、(4)步。
随机数发生器的引用使攻击者无法猜测所用密匙的长度,又能扰乱攻击者对密文的理解。当使用几十个字的密匙时,不会对压缩效率带来多大的影响。
根据前面对加密算法的分析,脱密一份用位元加密器加密过的密文,首先必须脱密密表中的随机位,随后明文才能逐个译出。因为哪怕密表中的任意一个比特位发生错误,都会改变算术解码器的原始状态,从而影响随后的解码工作。但是攻击者不知密匙长度就无法知道密表的大小。另一方面,即使知道密表的长度,也无法知道密表的内容,因为它是随机数发生器产生的一个随机二进数。因此只有使用准确的密匙才能准确地解出密表从而得到明文。
利用长密文的统计特性来猜测密匙,也是非常困难的,因为明文的统计特性被密表和压缩按盖了。因此用上述加密器不管对长明文还是对短明文加密同样安全有效。
由于加密器按比特位编码,本发明可用于加密和压缩包括文本,图象和声音在内的多媒体数据,特别适用于高度保密的机要档案和军事资料的存储和传输。可作成器件实现电报和电话的加密传输,甚至可以在交互网上实现保密通讯。