对称密码学:02 数据加密标准(DES)

来源:互联网 发布:最强大脑 小度 知乎 编辑:程序博客网 时间:2024/06/05 20:07

密码学

什么是DES

数据加密标准,即DES(Data Encryption Standard)。在发音时,DES作为缩写按字母来读的话:(/ˌdiːˌiːˈɛs/);作为一个单独的词来读的话:(/ˈdɛz/)。

对称算法有两种类型:块密码和流密码。而DES算法就是采用了块密码,每一次处理固定长度输入块,每一个输入块,有生成了一个输出块。对于DES来说,它的块长度为64位。

DES算法结构

DES算法要进行16次相同过程的处理,叫做“回次”。而在初始和结尾处各有一次置换的处理,分别称为IP和IP-1(也叫做FP,即反函数).

DES-main-network-coskimo

初始置换IP

DES会对64位明文分组操作。这64位的明文通过初始置换IP产生64 位置换后的置换文x0,置换表格如下

58504234261810260524436282012462544638302214664564840322416857494133251791595143352719113615345372921135635547393123157

初始置换把明文的第58位换到了第1位,把50放到了第2位,后面依次类推。

 

紧接着,这个64位的数据块,被分成2个32位的半块,并且分别处理;这种交叉的方式叫做費斯妥结构。斯妥结构可以保证加密和解密过程可以足够相似,而唯一的区别在于子密钥在解密是逆向的,其余的一样。这种设计理念简化了算法。

图片中的⊕符号表示异或(XOR)处理。F函数把数据半块和某一个子密钥进行处理。然后,一个F函数的输出与另一个半块异或,在把原来的半块组合交换顺序。进入后面一回的处理。在完成最后一次回次后,两个半块交换顺序。

費斯妥函数(F函数)

DES-f-function

1. 扩展置换(E)

把数据的友半块从32位扩展到48位。扩展置换表如下

3212345456789891011121312131415161716171819202120212223242524252627282928293031321

32位的半块扩展到了48位后,以8个6位的块输出。每块包含4位对应的输入位,加上两个邻接的块中紧邻的位。

2. 异或

扩展后的输出与一个密钥通过异或结合。

3. S盒

在和子密钥混合后48位被分成8份6位的块,然后使用S盒置换处理。8个S盒都使用查找表方式提供非线性的变换把6位输出变成了4位的输出。S盒提供了DES的核心安全性—如果没有S盒,密码会是线性的,很容易破解。

S盒的具体置换如下:某一个Si盒的6位输入的第一位和第六位形成了一个2位的二进制数(即0~3),对应表中的某一行;而中间4位构成的4位二进制数(即0~15)对应表中的某一列(PS:行和列从0开始计数)。

S盒如下

S1 x0000xx0001xx0010xx0011xx0100xx0101xx0110xx0111xx1000xx1001xx1010xx1011xx1100xx1101xx1110xx1111x0yyyy014413121511831061259070yyyy101574142131106121195381yyyy041148136211151297310501yyyy11512824917511314100613S2 x0000xx0001xx0010xx0011xx0100xx0101xx0110xx0111xx1000xx1001xx1010xx1011xx1100xx1101xx1110xx1111x0yyyy015181461134972131205100yyyy131347152814120110691151yyyy001471110413158126932151yyyy11381013154211671205149S3 x0000xx0001xx0010xx0011xx0100xx0101xx0110xx0111xx1000xx1001xx1010xx1011xx1100xx1101xx1110xx1111x0yyyy010091463155113127114280yyyy113709346102851412111511yyyy013649815301112125101471yyyy11101306987415143115212S4 x0000xx0001xx0010xx0011xx0100xx0101xx0110xx0111xx1000xx1001xx1010xx1011xx1100xx1101xx1110xx1111x0yyyy071314306910128511124150yyyy113811561503472121101491yyyy010690121171315131452841yyyy13150610113894511127214S5 x0000xx0001xx0010xx0011xx0100xx0101xx0110xx0111xx1000xx1001xx1010xx1011xx1100xx1101xx1110xx1111x0yyyy021241710116853151301490yyyy114112124713150151039861yyyy042111101378159125630141yyyy11181271142136150910453S6 x0000xx0001xx0010xx0011xx0100xx0101xx0110xx0111xx1000xx1001xx1010xx1011xx1100xx1101xx1110xx1111x0yyyy012110159268013341475110yyyy110154271295611314011381yyyy091415528123704101131161yyyy14321295151011141760813S7 x0000xx0001xx0010xx0011xx0100xx0101xx0110xx0111xx1000xx1001xx1010xx1011xx1100xx1101xx1110xx1111x0yyyy041121415081331297510610yyyy113011749110143512215861yyyy014111312371410156805921yyyy16111381410795015142312S8 x0000xx0001xx0010xx0011xx0100xx0101xx0110xx0111xx1000xx1001xx1010xx1011xx1100xx1101xx1110xx1111x0yyyy013284615111109314501270yyyy111513810374125611014921yyyy071141912142061013153581yyyy12114741081315129035611

 

4. P盒置换

最后,把8个S盒的输出和在一起成为32位的输出,在通过P置换进行重组。这个设计是为了将每个S盒的4位输出在下一回次的扩张后,使用4个不同的S盒进行处理。P盒如下

1672021291228171152326518311028241432273919133062211425

经过这4个步骤,F函数就操作完成了。

子密钥

DES的加密算法为那64位的密钥使用选择置换PC-1从中选出56位的密钥,剩下的8位要么直接丢弃,要么作为奇偶性检验;再将56位分成2份28位的部分。

DES-key-schedule

密钥置换PC-1如下

PC-1左5749413325179158504234261810259514335271911360524436右6355473931231576254463830221466153453729211352820124

 

轮次12345678位数11222222

接下来根据轮数,下面两部分分别循环左移1位或2位.具体每轮移位见下表

轮次910111213141516位数12222221

移动后,将两个部分合并成56位后再通过压缩置换PC-2得到48位的子密钥。

压缩置换PC-2如下

1417112415328156211023191242681672720132415231374755304051453348444939563453464250362932

末尾置换IP-1

末尾的置换和初始的置换为逆交换。前面经过了16轮的处理,得到的两部分32位的块,通过末尾的置换函数得到64位的密文。

末尾置换IP-1如下

40848165624643239747155523633138646145422623037545135321612936444125220602835343115119592734242105018582633141949175725

 DES算法用C语言实现

代码就不显示出来,提供代码下载地址

DES_C_Source_Code.7z

版权声明

Moriarty_221为本文的CSDN博客

如未注明,均为原创,转载请注明出处

转载请注明:coskimo » 对称密码学:02 数据加密标准(DES)

版权所有 © 科斯基摩 | 本网站采用cc by-nc-sa 3.0协议进行授权

0 0
原创粉丝点击