0x01 A5/1流密码算法的基本用法
作用:
用于蜂窝式移动电话系统语言和数字加密
过程:
A5/1算法用于用户的手机到基站之间的通信加密,通信内容到基站后先解密变成明文,然后再进行基站到基站之间,以及基站到用户手机之间的信息加密,完成通信内容在通信过程的加密保护。
应用环节:
只需考察用户A到基站1之间通信内容的加解密,中间消息的传送由基站到基站之间的加密完成,而接受方B对消息的加解密与用户A到基站1之间的通信完全类似,只不过用户B先解密消息
基本密钥KA1
预置在SIM卡中,与基站1共享。
•生存期:一旦植入SIM卡将不再改变。
•用途:用来分配用户和基站之间的会话密钥。
会话密钥k:
在每次会话时,基站产生一个64比特的随机数k。仅用于一次通话时间。
加密方式
一次通话使用一个会话密钥,对每帧使用不同的帧密钥。按每帧228比特分为若干帧后逐帧加密,每帧处理方式相同,其中114比特为发送,114比特用来接收数据。明文密钥流结合方式:逐位异或
0x02 密钥流产生步骤
A5/1算法使用3个线性反馈移位寄存器,简称为LFSR。三个寄存器的分别为19位、22位、23位。这里要使用三个共包含64位二进制的线性反馈移位寄存器,这个设计绝非偶然。绝非巧合的是,A5/1算法的密钥K也是64位。该密钥用于三个线性反馈移位寄存器的初始填充,也就是说,该密钥用于充当三个寄存器的初始值。这三个寄存器用密钥填充之后,就可以开始生成密钥流了。
每个回合步骤可以拆分为:取KEY,反馈多项式(Feedback Polynomial),位移
1、取key
取三个寄存器的最后一位,也就是19位、22位、23位,进行XOR操作,得到的结果为这一轮Key的一位。
2、反馈多项式
LFSR进行位移的前置操作,具体可以分成两步:判定是否需要进行位移,判定新的充填的值
2.1 判断是否需要移位
这里使用的是择多原则,三个寄存器中选择三个钟控信号,19位中的第8位,22位,23位中皆为第10位,两种二进制0,1,必定有0或1数量居多,居多的寄存器需要进行位移操作。就是上图的黄色部分
2.2 判定新的充填的值:
这里需要用到反馈多项式:
XOR后得到的值是充填到第0位的值。
3、移位
三个寄存器,由上一步的判定后进行位移,空出第0位用于充填反馈多项式得到的值。
0x03 密钥产生例子
1、假设有以下三个初始移位寄存器(先只要知道有三个移位寄存器(就是普通寄存器),分别有19位,22位,23位)
2、然后是如何开始生成秘钥的,假设有三个寄存器目前的状态是这样:
3、接下来开始进行规定的流程
取key,得到第一个密钥值为1
(1)首先找到X8=1,Y10=0,Z10=1
(2)取数量最多的作为结果M=Maj(X8,Y10 , Z10 )= Maj(1,0, 1)=1;(如果是M=Maj(0,0,1)=0)
(3)因为M=1,且X8=1,M=X8,所以X寄存器需要左移一位,那么因为左移,第一位就空出来了,则 X0=1, 所以最后X寄存器变为
同理:
所以最后得到的三个移位寄存器是
秘钥是S0=1,
就这样得到了另一位秘钥,如果需要64位秘钥,则按照上述进行循环64次操作即可。
0x04 A5/1算法弱点
移位寄存器太短容易遭受穷举攻击,A5/1算法把主密钥作为算法中三个寄存器的初始值,长度为64比特。如果利用已知明文攻击,只需要知道其中两个寄存器的初始值,就可以计算出另一个寄存器的初始值,这只需要240步就可以得出寄存器LFSR-1和LFSR-2的结构。
利用了GSM通信加密中的两个安全漏洞,可以通过离线迭代计算生成一个彩虹表,它包含有密钥和其相对应的输出密码。这个彩虹表的大小为984GB。得到了彩虹表之后,安全专家就可以在短短的九秒内确定用于加密通信数据的密钥。
参考:
https://www.cnblogs.com/gambler/p/9074356.html
https://blog.csdn.net/jerry81333/article/details/78641362
https://www.bilibili.com/video/av58596164?p=17