A5/1流密码算法详解
2017-11-27 04:37
127 查看
A5/1
A5 / 1是用于在GSM蜂窝电话标准中提供无线通信隐私的流密码。它是为GSM使用指定的七种算法之一。最初是保密的,但通过泄漏和逆向工程成为公众的知识。 密码中存在一些严重的弱点。算法步骤:
A5/1算法使用3个线性反馈移位寄存器,简称为LFSR。三个寄存器的分别为19位、22位、23位。这里要使用三个共包含64位二进制的线性反馈移位寄存器,这个设计绝非偶然。绝非巧合的是,A5/1算法的密钥K也是64位。该密钥用于三个线性反馈移位寄存器的初始填充,也就是说,该密钥用于充当三个寄存器的初始值。这三个寄存器用密钥填充之后,就可以开始生成密钥流了。
每个回合步骤可以拆分为:取KEY,反馈多项式(Feedback Polynomial),位移
取Key:
取三个寄存器的最后一位,也就是19位、22位、23位,进行XOR操作,得到的结果为这一轮Key的一位。反馈多项式(Feedback Polynomial):
LFSR进行位移的前置操作,具体可以分成两步:判定是否需要进行位移,判定新的充填的值。判定是否需要进行位移:
这里使用的是择多原则,三个寄存器中选择三个钟控信号,19位中的第8位,22位,23位中皆为第10位,两种二进制0,1,必定有0或1数量居多,居多的寄存器需要进行位移操作。
判定新的充填的值:
这里需要用到反馈多项式:
XOR后得到的值是充填到第0位的值。
位移:
三个寄存器,由上一步的判定后进行位移,空出第0位用于充填反馈多项式得到的值。安全性
针对A5 / 1的攻击已经被公布了很多,美国国家安全局能够按照公布的内部文件对A5 / 1信息进行例行解密。A5 / 1的第一次攻击是由罗斯·安德森在1994年提出的。安德森的基本思想是猜测寄存器R1和R2的全部内容以及大约一半的寄存器R3。这样,所有三个寄存器的时钟都被确定,并且R3的后一半可以被计算出来。
Golic在1997年提出了一个基于求解时间复杂度为240.16的线性方程组的攻击方法(单位根据线性方程组的解的个数)。
在2000年,Alex Biryukov,Adi Shamir和David Wagner证明A5 / 1可以基于Jovan Golic的早期工作,使用时间记忆折衷攻击实时进行密码分析。一个权衡使得攻击者可以在一秒钟内从已知明文的两分钟内重新构造密钥,或者在已知纯文本的两秒钟之内在几分钟内重建密钥,但是他必须首先完成昂贵的预处理阶段,需要248个步骤来计算大约300GB的数据。预处理,数据需求,攻击时间和内存复杂度之间的几个折衷是可能的。
同一年,Eli Biham和Orr Dunkelman也发表了一个攻击A5 / 1的算法,其总工作复杂度为239.91个A5 / 1个时钟,给出了220.8位已知明文。在238的预计算阶段之后,攻击需要32 GB的数据存储。
Ekdahl和Johannson发表了一个关于初始化程序的攻击,它使用两到五分钟的对话明文在几分钟内打破A5 / 1。这种攻击不需要预处理阶段。 2004年,Maximov等人将此结果改进为“不到一分钟计算,几秒钟已知会话”的攻击。 Elad Barkan和Eli Biham在2005年进一步改善了这次袭击。
相关文章推荐
- 用ASP编写的加密和解密类
- 解密网页加密的两个方法
- VBS脚本加密/解密VBS脚本(简易免杀版1.1)
- C#编写DES加密、解密类
- C#使用DES和AES实现加密解密功能示例
- C#实现对文件进行加密解密的方法
- C#实现数据包加密与解密实例详解
- C#最简单的字符串加密解密方法
- 基于C#对用户密码使用MD5加密与解密
- PHP加密解密字符串汇总
- php实现的三个常用加密解密功能函数示例
- PHP加密解密实例分析
- php zend解密软件绿色版测试可用
- php结合md5实现的加密解密方法
- ASP.NET web.config中 数据库连接字符串加密解密
- asp.net的加密解密技巧
- .NET MD5加密解密代码解析
- C#编写的Base64加密和解密类
- 教你如何解密js/vbs/vbscript加密的编码异处理小结
- jQuery实现base64前台加密解密功能详解