常用流密码算法 RC4 A6
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常用流密码算法(RC4算法与A5算法)
流密码(Stream Cipher),是对称密码算法的一种。序列密码具有实现简单、便于硬件实施、加解密处理速度快、没有或只有有限的错误传播等特点,因此在实际应用中,特别是专用或机密机构中保持着优势,典型的应用领域包括无线通信、外交通信。 1949年Shannon证明了只有一次一密的密码体制是绝对安全的,这给序列密码技术的研究以强大的支持,序列密码方案的发展是模仿一次一密系统的尝试,或者说“一次一密”的密码方案是序列密码的雏形。如果序列密码所使用的是真正随机方式的、与消息流长度相同的密钥流,则此时的序列密码就是一次一密的密码体制。若能以一种方式产生一随机序列(密钥流),这一序列由密钥所确定,则利用这样的序列就可以进行加密,即将密钥、明文表示成连续的符号或二进制,对应地进行加密,加解密时一次处理明文中的一个或几个比特。
RC4算法:
RC4算法非常简单,易于描述:用从1到256个字节(8到2048位)的可变长度密钥初始化一个256个字节的状态矢量S,S的元素记为S[0],S[1],⋯,S[255],从始至终置换后的S包含从0到255的所有8比特数.对于加密和解密,字节K由S 中256个元素按一定方式选出一个元素而生成.每生成一个K的值,S中的元素就被重新置换一次.
1 初始化S
开始时,S中元素的值被置为按升序从0到255,即s[0]=0,S[1]=1,⋯,
S[255]=255.同时建立一个临时矢量T.如果密钥K的长度为256字节,则将K赋给T.否则,若密钥长度为keylen字节,则将K的值赋给T的前keylen个元素,并循环重复用K的值赋给T剩下的元素,直到T的所有元素都被赋值.这些预操作可概括如下:
/*初始化*/
for i=0 to 255 do
S[i]=i;
T[i]=K[i mod keylen]
然后用T产生S的初始置换.从S[0]到S[255],对每个S[i],根据由T[i]确定的方案,将S[i]置换为S中的另一字节:
/*S的初始序列*/
j=0
for i=O to 255 do
j=(j+s[i]+T[i])mod 256
swap(s[i],s[j]);
因为对S的操作仅是交换,所以惟一的改变就是置换.S仍然包含所有值为0到255的元素.
2 密钥流的生成
矢量S一旦完成初始化,输人密钥就不再被使用.密钥流的生成是从s[0]到S[255],对每个S[i],根据当前S的值,将S[i]与S中的另一字节置换.当S[255]完成置换后,操作继续重复,从S[0]开始:
/*密钥流的产生*/
i,j=0
while(true)
i=(i+1)mod 256
j=(j+S[i])mod 256
swap(sEi],s[j])
t=(sEi]+s[j])mod 256;
k=S[t]
加密中,将k的值与下一明文字节异或;解密中,将k的值与下一密文字节异或.A5算法
A5/1方案用于GSM蜂窝电话网络中的数据机密性加密。这个算法有其数学表达,但是也可以通过相对比较简单的接线图予以说明。
A5/1算法使用3个线性反馈移位寄存器(linear feedback shift register),或简称为LFSR,我们分别将其标识为X、Y和Z。寄存器X有19位,可以表示为(x0, x1, ... ,x18);寄存器Y有22位,可以表示为(y0, y1, ... ,y21);而寄存器Z 有23位,可以表示为(z0, z1,... ,z22)。当然,并非像大部分计算机极客(geek,意指技术不一定很好的电脑发烧友)所热衷的两极对立场景那样随意,这里要使用三个共包含64位二进制的线性反馈移位寄存器,这个设计绝非偶然。A5/1算法的密钥K也是64位。该密钥用于三个线性反馈移位寄存器的初始填充,也就是说,该密钥用于充当三个寄存器的初始值。这三个寄存器用密钥填充之后,就可以开始生成密钥流了。
A5/1算法就是一个密钥流生成器,其生成密钥与明文(或密文)进行异或运算,从而实现加密(或解密)功能,工作原理如图1所示。其中Kc为64比特的密钥,Fn为22bit的帧号。
A5/1算法的基本工作原理如图2所示。其由3个长度分别为19、22和23级的线性反馈移位(LFSR)组成R1、R2、R3。它们的反馈多项式分别为:1817161321202221207
++++++++++
1;1;1
x x x x x x x x x x
3个LFSR以“停-走”的方式按照多数原则工作:每个LFSR都有一个时间判决抽头,R1的接头位于寄存器的第9级、R2、R3的接头都位于寄存器的第11级;在每个时钟周期,3个抽头的输出用于进行大数判决,与判决结构相同的LFSR在时钟控制下进行移位,与判决结果不同的LFSR则保持不变。这样,在每个时钟周期至少有两个LFSR进行移位,有可能3个LFSR都进行移位。
A5/1算法的工作过程可以分为两个阶段:初始化阶段和密钥生成阶段。在初始化阶段中,3个LFSR首先清零,然后加密密钥Kc的每一比特(从最低位开始)分别与3个LFSR的最低位进行异或,并在64个时钟控制下与加密密钥Kc初始化3个LFSR(此时停-走判决器不工作);以同样方式,在22个时钟控制下再用帧号累加器Fc初始化3个LFSR。接下来的100个时钟内,3个LFSR在“停-走”判决器的控制下工作,但不输出。之后在密钥生成阶段的228个时钟控制下,3个LFSR的最高位输出进行异或,作为密钥输出。输出的228bits密钥分成两个114bits的密钥流,分别用于加/解密上行和下行链路的数据。
A5/1算法的安全性不高,1999年12月,以色列的密码研究人员AlexBiryukov 和美国的DavidWagner宣布攻破A5/1算法,他们的攻击方法比较简单,只需要一台个人计算机,如果他们获得两分钟的A5/1算法输出,那么他们就可以用1s获得加密密钥Kc;如他们获得2s的A5/1输出,则可以在几分钟内获得加密密钥。