目录:
1. 简介
2. 非线性 S-box
3. 加密函数 Cipher function
4. Sub-Key 的产生
5. 整个加密流程
这里,我们是将整个算法拆解, 以 bottom-up 的方式, 逐一介绍它的原理与其 Verilog 的写法
简介
DES, Data Encryption Standard, 是一个相当普遍, 流传相当久远的算法,现在网络上常用的 SET, SSL, SSH 都是以 DES 为基础来执行加解密的动作
DES 加密函数可以用函数表示:
cipher[1:64] = des(plaintext[1:64], key[1:56])
它将 64bits 的输入用一个类似洗牌的交错动作产生 64bits 的输出, 与洗牌不同的是, 它还可以洗的回来
plaintext[1:64] = des_inverse(cipher[1:64], key[1:56])
也就是将 64bit 的输出再还原回原先的那 64bit,而这个洗牌动作的控制就在于那个 56bits 的 key
非线性 S-box
S-box 是整个算法唯一非线性的部分, 也被怀疑是美国政府留下后门的地方
在整个加密过程中, 会用到 8 个类似的 S-box, (如下图)
其函数可表示为
Out[4] = S(In[6])
以 S1 为例子, 输出的 4bit, 由下表决定 由{In[1],In[6]}决定列数, {In[2:5]}决定行数
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
0 |
14 |
4 |
13 |
1 |
2 |
15 |
11 |
8 |
3 |
10 |
6 |
12 |
5 |
9 |
0 |
7 |
1 |
0 |
15 |
7 |
4 |
14 |
2 |
13 |
1 |
10 |
6 |
12 |
11 |
9 |
5 |
3 |
8 |
2 |
4 |
1 |
14 |
8 |
13 |
6 |
2 |
11 |
15 |
12 |
9 |
7 |
3 |
10 |
5 |
0 |
3 |
15 |
12 |
8 |
2 |
4 |
9 |
1 |
7 |
5 |
11 |
3 |
14 |
10 |