欢迎光临散文网 会员登陆 & 注册

密码学之资料加密标准(DES)

2021-05-19 08:21 作者:刹那-Ksana-  | 我要投稿

前言

接着前文的SPN,但是和前文的关系不大,所以不看前文也照样可以阅读本文。

一、Feistel Network

Feistel Network 分为balanced 和 unbalanced 两种。balanced 的情况下,我们把输入的长度为 l 的bits分成长度相等的左右两个部分(叫做LR);unbalanced 的情况下,左右两个部分长度不等。

Feistel network 一共有多轮组成,每一轮中,我们通过一个key schedule从我们的master key k中抽出我们的round key k_i ,然后我们将右半部分R_i和我们的k_i一同输入到我们预设的round function 中f_i%3D%5Chat%7Bf_i%7D(k_i%2CR_i). 然后做一个XOR运算:R_%7Bi%2B1%7D%3DL_i%5Coplus%20f_i ,L_%7Bi%2B1%7D%3DR_i.

Feistel Network(引用来源:https://en.wikipedia.org/wiki/Feistel_cipher)

二、Data Encryption Standard (DES)

DES是一个运用Feistel Network来进行加密的流程,输入的比特序列的长度(同时也是block length)为64 bits, master key的长度为56 bits,一共进行16轮Feistel运算。

因为是20世纪70年代提出来的加密标准,现在看来56 bits的master key太短了,所以已经不再被推荐使用。

*注意,DES是一个严格加密流程,很多函数、矩阵都有预设值,但由于篇幅原因,这些预设值不在本文中列举出来。

DES的具体流程如下,首先我们有一个初始的permutation叫做IP ,以及它的逆运算IP%5E%7B-1%7D%20IP定义了我们输入序列的shuffle方式,比方说——IP%3D%5B4%2C3%2C1%2C2%5D%20,代表了输入值的第4个bit移动到输出值的第1个bit的位置上,输入值的第3个bit移动到输出值的第2个bit的位置上,以此类推下去。所以,其逆运算 IP%5E%7B-1%7D%3D%5B3%2C4%2C2%2C1%5D .

Permutation 示意图 IP=[4,3,1,2]

我们在最开始的时候用IP来对输入的plaintext的所有bit切换顺序,在最末尾的时候,用IP%5E%7B-1%7D 对我们的block再一次切换顺序然后输出我们的ciphertext.

DES流程示意图

然后,我们进行Feistel加密运算,只不过在这里,我们的round function是一个SPN block.

SPN Block(引用来源:https://csrc.nist.gov/csrc/media/publications/fips/46/3/archive/1999-10-25/documents/fips46-3.pdf)

如图所示,我们给出一个32-bit的序列R ,然后进行一个扩张运算R'%3DE(R) ,E是一个预设的表格,比方说,给出一个4-bit的序列,E%3D%5B1%2C2%2C1%2C2%2C3%2C4%5D 将输出一个6-bit的序列。其中,原输入值的第1位的bit和第2位的bit重复出现了1次,以此来实现扩张。

扩张运算示例

接下来我们做一个xor运算:%20R_i''%3DR_i'%5Coplus%20k_i%20(显然我们的round key长度为48 bits)。然后我们将 R_i''%20切分为8个长度为6 bits的值,每一个6-bit的子序列都输入到一个S-Box:%20%5Cleft%5C%7B%200%2C1%20%5Cright%5C%7D%5E6%5Crightarrow%5Cleft%5C%7B%200%2C1%20%5Cright%5C%7D%5E4%20中。

我们的S-Box由一个416列的表格组成。

比方说,我们的输入的序列如下:

序列

绿色位置的比特将决定我们的行,橘红色位置的比特将决定我们的列,所以在此情况下,我们绿色位置的两个比特00,和橘红色位置的4个比特1101,决定了我们是第0行第13列。我们在我们的S-Box表格中检索第0行第13列后,返回的那个值就是我们的输出值。

在这里,我们8个小块,每一个小块的S-box都是不同的,所以我们一共有8种不同的S-box。

最后我们将我们S-box的输出值合并起来,用一个permutation函数%20P再将合并后的值进行shuffle.

三、Triple Data Encryption Algorithm (TDEA)

TDEA(或者也叫做3-DES、TDES)是利用DES作为一个基本模块,我们依旧使用长度为56 bits的key和64 bits的输入值,但在这里我们有3个master key Key_1%2C%20Key_2%2C%20Key_3%20.我们对输入的plaintext m做如下的运算:

ciphertext%20%3D%20F_%7Bk1%7D(F%5E%7B-1%7D_%7Bk2%7D(F_%7Bk3%7D(m)))%20

其中%20F%20为DES加密运算,F%5E%7B-1%7D%20%20F%20的逆向运算(即解密运算)。

还有一个版本是使用2个master key的TDEA,公式和上述公式差不多,只是把Key_3替换为Key_1,该版本已经不再被推荐使用。

后记

下一篇文章介绍AES。

参考资料:

Jonathan Katz; Yehuda Lindell - Introduction to Modern Cryptography; Third Edition

FIPS 46-3, Data Encryption Standard

使用工具:Drawio: https://app.diagrams.net/

THE END.

密码学之资料加密标准(DES)的评论 (共 条)

分享到微博请遵守国家法律