DES算法学习笔记

Feistel 密码结构

Feistel 结构主要由以下五个参数决定:

  • 分组长度:分组长度越大,安全性越高,加密速度越慢。
  • 密钥长度:密钥长度越长,安全性越高,加密速度越慢。
  • 迭代轮数:多轮可以隐藏明文。
  • 子密钥产生算法:每轮迭代时,所使用的密钥必须都是不同的,解决办法就是通过一个子密钥和一个子密钥产生算法,得到每轮所需的密钥。
  • 轮函数F:轮函数F是整个Feistel 结构中最重要。因为解密时,不需要使用F的逆函数,而是使用F,所以F 通常是不可逆的函数。
    其中⊕是异或运算(相同为0;不同为1;1⊕1=0)
    DES算法学习笔记_第1张图片Feistel 结构的解密过程和加密过程完全相反,如最后一轮的加密,需要交换左右两边的位置;最后一轮的解密,也需要交换左右两边的位置。
    DES算法学习笔记_第2张图片

DES 概述

DES是典型的Feistel密码结构;解密过程与加密过程完全相反。
初始密钥长度为64bit;其中第8、16、24、32、40、48、56、64为奇偶检验位,所以实际的密钥长度为56bit;
DES 的加密过程大致如下:初始置换IP----->16轮迭代------>逆初始置换
DES算法学习笔记_第3张图片

加密过程

1. 初始置换IP:

重排明文分组的64bit数据,打乱明文中的排列顺序。下面的数字表示原数据的位置,如M58表示第58个bit。按行排列,所以左半部分是M58,M50,M42,M58…M16,M8
DES算法学习笔记_第4张图片

2. 具有相同功能的16轮迭代

每轮中都有置换和替换运算。64 bit的明文M经过初始置换 IP ,分成左右两部分,各32 bit,经过16 轮迭代后再输出。每轮迭代结构和Feistel 结构一样。
F(Ri-1,Ki)是第 i 轮的轮函数。Ki是第 轮加密的密钥;Ri-1是第 i-1 轮的右边32bit。
下图是完整的轮结构,完全遵循Feistel 结构。虚线框描述的是F函数,右半部分时子密钥生成算法。
DES算法学习笔记_第5张图片
子密钥Ki的生成算法
大概步骤:置换选择PC1------>循环左移LS------>置换选择PC2

  1. 置换选择PC1:初始输入密钥K为64 bit(实际为56 bit),通过下图的PC1置换,变为各28 bit的左右两部分,记为Ci-1(前4行)和Di-1(后四行),其中数字代表原数据的位置。
    DES算法学习笔记_第6张图片
  2. 循环左移LS:分别对上面得到的Ci-1和Di-1进行循环左移,并将移位后的结果作为下轮子密钥的输入,同时作为置换选择PC2的输入。
    DES算法学习笔记_第7张图片
  3. 置换选择PC2:将Ci-1和Di-1重新按照下图编排,将56bit置换成48bit,作为子密钥Ki,其中数字代表原数据的位置。
    DES算法学习笔记_第8张图片

轮函数结构
DES算法学习笔记_第9张图片

  1. 扩展置换E:将32 bit的Ri-1 扩展成48bit,中间为原数据的32bit,两边为扩展位,其中数字代表原数据的位置。将扩展后的48bit 于子密钥Ki进行异或运算,结果作为S盒的输入。
    DES算法学习笔记_第10张图片

  2. S盒代换:图中虚线框的部分是8个S盒,整个DES算法中,除了S盒是非线性变换外,其他变换都是线性变换;DES算法保密的关键在于S盒(可惜S盒的设计原理不清楚)。
    输入是异或后的48bit ,分为8组,每组6bit,每个S盒有6位输入,4位输出。第一位和第6位确定行数,中间四位确定列数。如01表示第1行,1100表示第12列,所以输出是9,既1001。
    非线性表现在根据输入是011001可以确定输出是1001,但是根据输出是1001不能确定输入是多少(每行都有9)。
    DES算法学习笔记_第11张图片
    DES算法学习笔记_第12张图片

  3. 置换P:将S盒的32bit 重新排列,排列后的结果就是轮函数输出的结果。
    DES算法学习笔记_第13张图片

3. 逆初始置换

第16轮迭代后,将左右两部分交换,并连接到一起,再进行逆初始置换,产生64bit 的密文。
DES算法学习笔记_第14张图片

你可能感兴趣的:(密码学)