Learning of two encryption algorithms: A5-1 and des

Source: Internet
Author: User

A5-1加密算法

1、基本原理

A5-1加密算法是一种流密码,通过密钥流对明文进行加密,然后用密钥流进行对密文的解密操作。

这种算法主要用于GSM加密,也就是我们平时打电话的时候,通信数据发送到基站,基站发送到另一个基站,基站发送到接收方。

每次通话的时候,基站会产生一个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

三个反馈多项式如上所示。


2、所用工具

根据上面所讲的,我们基本可以确定,如果要实现a5-1的加密算法,我们需要哪些工具:

首先是明文,其次是64位的密钥,三个LFSR,以及帧号。

算法的输入应该就是三个LFSR的初始值,算法的输出就是我们加密明文所需要的乱数。


3、实现步骤

算法总体来说分为三个部分,初始化,运算,输出乱数

A5-1加密算法实现的逻辑结构图如下:


首先是初始化部分:

(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的对应的寄存器将会移动。


根据上面的步骤就可以算出当我们把通讯数据切割成每一帧,然后对每一帧进行加密传输的时候,所需要的那个加密的乱数是怎么得来的。至于加密过程很简单,就是明文和乱数的异或操作。



DES加密算法

如果说A5-1是流密码的加密算法的话,那么DES就是分组密码体制中典型的一个算法。分组密码的主要思想,就是把明文和密钥都分成一定长度的许多断数据,为了保证每一个明文都仅仅只有一个密钥,需要做的就是分组的密钥长度要大于等于分组的明文长度。通过分组加密,每一组使用的密钥都不相同,这就是基本的分组密码。


分组密码的安全性除了收到一些密钥长度参数的影响之外,最重要的两个原则就是混乱原则和扩散原则。

混乱原则要求明文和密文在逻辑上的关系越复杂越好。为了保证混乱原则的实行,我们将尽可能使用非线性的变换。

扩散原则,我理解是这样的,在设计密码的时候,通过实行混乱原则,使得我们的密码会在整个序列的某基础发生混乱,那么扩散原则要做的,就是要通过移位的方式,将这种混乱最大化,让明文和密钥的变化尽可能多的影响密文的生成。这种思想最典型的体现,就是S-P网络。


分组密码中的一个很典型的例子就是DES算法:

DES算法也是分组密码的一个案例,它属于分组密码中的迭代分组密码,即用简单的加密措施先构造出一个加密函数来,之后不断的进行乘积迭代,两个简单的方式乘积在一起的话,会形成一个更加复杂的密码函数,DES正式利用这样的思想来实现。


DES加密算法的实现需要几个工具:

1.分组长度2.密钥长度3.迭代次数4.子密钥长度

DES默认分组长度为64bit,密钥长度也是64bit,迭代次数为16,子密钥的长度为48位

DES加密算法的输入是一组64bit的明文,输出是64bit的密文

算法执行过程中有3步:初始变换, 16轮迭代, 初始逆变换

要注意的是,DES的算法中的比特序号是从1开始,并且是从左边开始。



DES算法中的初始变换:

初始变化实际上就是对明文序列进行顺序打乱操作。他会按照一个特定的表格进行对照移动。

初始逆置换是对16次迭代后的结果序列进行移位操作,也是有一个对照表,告诉你移动的规则。


DES算法中的圈函数:

从上面的DES算法的逻辑结构图中可以看出,他李永乐Feistel模型进行迭代密码的实现。那么这个迭代有一个圈函数

Li = Ri-1  Ri = Li-1^f(Ri-1, ki)(i = 1, 2, ...)

在进行完初始置换之后,我们得到一个长度为2w的序列,也就是64位的明文序列。把他们一分为二,分为左半部分和右半部分,在进行第一次迭代的时候,右半部分变为下一次迭代的左半部分,左半部分与F函数的结果进行按位异或形成下一轮迭代的右半部分。最后在迭代到第16次的时候,不在进行这样的左右交换操作,直接转换为对应的部分。

那么很显然,整个算法的核心就在于F函数的内容



F函数:

F函数的输入有两部分,一个是这一轮的子密钥48bit,另外一个是序列的右半部分的32bit。

F(R,K) = P(S(E(Ri)^Ki))

上述表达式告诉我们F函数一共有四个步骤,先是对R进行E盒的变换,E盒又称为是扩展变换盒



1、E盒

E盒的作用就是把32位的数据扩展称为48位的数据,我觉得是因为密钥是48位,所以必须要扩展一下要变换的明文序列,因为分组密码的加密原则强调过,分组密码的加密,密钥是必须大于等于要加密的明文的。把32位的序列分成8组,每组序列在开头和结尾处分别添加开头和结尾元素相邻的元素,每一组添加2位,一共八组,田间16位,即扩展为48位,这是一种非线性的扩展。然后接下来就是与这一轮的子密钥Ki进行按位异或操作。


2、S盒

S盒宏观上的一个作用,是把刚刚异或生成的48位结果变换成32位。首先把48位的生成结果分成8组,每组6位。每6位分别作为S盒的输入,这样一共有8个S盒并行工作,将6位输入变为4位输出,最终得到32位的结果。

对于每一个S盒来说,有a1~~~a6的二进制比特输入,有这样的一个表格存在:



现在S盒一共有6位的输入,a0a1a2a3a4a5a6

我现在算的是S1盒的输出,首先计算2a1+a6最后的十进制结果是多少,这个结果代表了行数。

之后计算8a2+4a3+2a4+a5最后的十进制结果代表了列数,拿到行数和列数之后,在表格中找到对应的数字,这里注意,如果我算出来的是1 3,那么我在找的时候,也是找表格中对应的标号是1行3列的元素,因为我们可以看到表格中的标号是从0开始的。

例如,如果计算的s1,得出的结果是1行3列,那么结果应该是4.查表得到这个结果之后,表格可以保证,得出的结果4位二进制数十完全可以表示的,所以将这个十进制数化为4位二进制数就完成了S盒的一部分操作,之后每一个S盒都按照这样的原则操作,之前异或的48位结果就会顺利的变成32位。


3、P盒

P盒也是非常简单,就是根据一个表格进行一个移位操作,表格到时候会具体给出。


经过上述的计算,我们可以顺利的得到F函数的计算结果。F函数的计算过程图如下:



经过上述的计算我们可以准确的得到F函数的具体结果,那么下轮迭代的右半部分也就是R1就可以由上一层的左半部分和F函数的结果异或得到。不知道为什么的,可以翻上去看一下DES实现的逻辑框图。

DES的算法基本执行流程就是这样的,那么还有一个问题可能我们没有考虑到,我们拥有的是一个64位的初始密钥,那么每一次的子密钥是怎么生成的呢?



DES子密钥的生成:

DES的初始密钥一共有64位,其中密钥的每一个字节的最后一位都用作奇偶校验,所以说,实际的有效密钥长度为56位。

DES子密钥的生成逻辑框图如下:




首先,64位的初始密钥进来,最先要执行的就是置换选择操作1.

那么置换选择操作具体的内容是什么呢:

置换选择操作1有两个步骤:

(1)将64位中每一个密钥字节的最后一位丢弃

(2)将剩余的56位按照表格的规则打乱顺序,生成一个乱序的56位序列

之后将输出的56比特的有效密钥序列一分为二,分为D0和C0两部分(生成C0D0到此为止只能算是密钥生成算法的初始化操作,不能算作一次迭代)。之后从第一次开始的每一次的迭代中,分别要对上一次的Di-1 Ci-1两部分进行循环左移操作,循环左移的次数和所在的迭代次数有关,比如D0C0--->D1C1是第一次迭代要循环左移1位,D2C2--->D3C2要左移2两位,具体的移位次数会有个明确的表格告诉大家。

每一次迭代的循环移位操作之后得到的两部分DiCi,将进行置换选择2的操作,置换选择2与1类似,都是打乱顺序,丢掉一部分元素,最后形成一个48位的序列,就是上面DES算法中第i次迭代所需要的子密钥。但是本次迭代生成的Di和Ci不会改变,因为他们将会用于下一次子密钥的生成操作。由于DES需要16次的迭代,那么子密钥的生成自然也需要16轮的迭代。


也就是说,什么样算一次迭代操作呢,从循环位移,一直到置换选择2,再到最终生成第i次的子密钥ki算作是一次迭代,之前生成d0c0的部分不算。

A5-1和DES两个加密算法的学习

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.