A5-1算法
基本原理
A5-1算法用于蜂窝式移动电话系统中的语音加密,主要用于用于的手机到基站之间的加密通信。通信内容到基站后先脱密变成明文,然后在进行基站到基站之间、以及基站到用户手机之间的信息加密,完成通信内容在通信过程的加密保护。
每次通话的时候,基站会产生一个64比特的随机数,与我们手机sim卡内本身带的一个密码利用一种加密算法生成一个密钥,这个密钥就是这次通话过程中使用的主密钥,此密钥的生命周期为这一次通话的开始到结束。一旦通话完成,那么这个密钥也就没有用了。
该加密算法把整个通讯的数据划分为每一帧来进行加密。每一帧是有228比特,其中发送端给接收端的数据114比特,接收端反馈给发送端的数据有114比特。除了上面提出的基站给出的64比特的总密钥,针对每一帧的加密,还有一种叫做会话密钥,这种会话密钥每加密一帧都会改变,会话密钥的生成是由帧号来决定的。每一次的会话密钥都会产生一个228比特的乱数来加密这一帧的数据。加密的方式是异或。帧号一共用22比特的二进制数来表示,也就是说一次通话只能传递2^22次方的通讯数据,因为每一次通话只有这么多帧可以进行加密数据并且传递。
A5-1算法基于三个线性移位反馈寄存器实现的。三个LFSR的级数分别是19 22 23。
f1(x) = x^19 + x^18 + x^17 + x^14 + 1
f2(x) = x^22 + x^21 + 1
f3(x) = x^23 + x^22 + x^21 + x^8 + 1
三个反馈多项式如上所示。
所用工具
根据上面所讲的,如果要实现a5-1的加密算法,我们需要哪些工具:首先是明文,其次是64位的密钥,三个LFSR,以及帧号。
算法的输入应该就是三个LFSR的初始值,算法的输出就是我们加密明文所需要的乱数。
实现步骤
算法总体来说分为三个部分,初始化,运算,输出乱数
首先是初始化部分:
(1)将三个寄存器内的所有位全都赋值为0
(2)将三个寄存器做64次的移位操作,每第i次操作,寄存器的反馈内容都先与密钥中的第i位进行异或,然后把这样异或的结果作为寄存器此次的反馈内容。三个LSFR都要并行的做这样的工作64次。
(2)将三个寄存器做22次的移位操作,没第i次操作,寄存器的反馈项都先与帧序号的第i位进行异或,将异或的结果作为寄存器的最终反馈内容,同样,三个LSFR也都要并行做22次。
上述三步做完,A5-1加密算法的初始化操作也就做完了。另外需要注意的是,A5-1加密算法的LSFR是左移操作,并且,密钥和帧号都是从最低位到最高位编号。
当初始化步骤完成的时候,此时三个LSFR的状态合称为S0状态。
接下来是计算和输出部分:
大家可以看到,上面的逻辑结构图中,有一个叫做钟控的部分,他有三个输出三个输入,三个输入是分别来三个LSFR的某一个固定位,输出0或者1, 输出0表示此次这个LSFR不会工作,也就是不会发生移动等等,输出的是1的话,那么这个LSFR此次就会移动一位并且得出反馈的结果。也就是说这个钟控在控制着三个LSFR的工作与否。
首先根据钟控的方式三个LSFR连续移动100次,但是不输出乱数,此时应该只是做一个混乱的操作。因为LSFR在移动过程中,每一位寄存器内的数值都会不一样,所以在钟控决定每个寄存器运行与否的结果时也会不相同。
接下来会三个LSFR会接着进行连续的114次的移动,也是根据钟控的方式。这一次的移动过程中,三个寄存器将分别把最高位寄存器的值输出,然后三个值做异或运算,形成第i个乱数。这次114次移动会生成一个114位的乱数,用于对手机到基站这一段的数据加密。
之后再进行一次100次的移动和114次的移动,结果和上面说的相同,最终产生的114位密钥用于基站到手机这段的通讯数据加密。
关于钟控:
钟控将第一个寄存器的第八位,第二个寄存器的第10位,第三个寄存器的第10位。抽取这三个位用于控制三个LSFR的动作与否。他们决定的原则类似少数服从多数,三位一共有8种排列方式,当三位中1的个数多余0的个数时,那么这三位是1的对应的寄存器将会移动, 为0的不会,如果三位数中0的个数多余1的个数时,那么三位之中是0的对应的寄存器将会移动。
根据上面的步骤就可以算出当我们把通讯数据切割成每一帧,然后对每一帧进行加密传输的时候,所需要的那个加密的乱数是怎么得来的。至于加密过程很简单,就是明文和乱数的异或操作。