一次一密,DES

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

个人学习整理笔记,希望能对后来者有所帮助。


提示:以下是本篇文章正文内容,下面案例可供参考

一、一次一密(One-time password)

一个序列密码称为一次一密必须满足以下条件:

  1. 通过真随机数生成器得到**序列s0,s1,s2,…
  2. 只有合法的通信方才知道**序列;
  3. 每个**序列位si仅适用一次。这意味着每个明文位都需要一个**位,因此,一次一密的**长度必须和明文长度一样

一次一密是无条件安全的。

实例:假设发送方要发送“short"这个单词给接收方。

发送方:

  1. 使用ASCII编码来转换 “short”这个词,转换后会得到下面这一串二进制信息:
    0111001101101000011011110111001001110100

  2. 接下来你需要一个和上面二进制串长度完全一致的**,如:
    0110010101101010001110010010011101100100

  3. 我们将这两组字符串进行XOR 运算,得到:
    0001011000000010010101100101010100010000
    发送方将这串数据发送给接收方

接收方:

接收方得到数据后将其与**进行XOR运算,得到发送方的数据,再利用ascii编码即可得到正确的信息。

二、分组密码(Block cipher)

1.DES

DES(Data Encryption Standard,数据加密标准)是一种使用56位**对64位长分组进行加密的密码。它是一种对称密码,即加密过程和解密过程使用相同的**。DES对明文中的每个分组的加密过程都包含16轮,且每轮操作完全相同,每轮采用的子**不同,并且所有子**ki都是从主**k中推到出来的。

DES加密过程:

  1. 64位**经过子**产生算法产生出16个子**:K1,K2,…,K16,分别供第一次,第二次,…,第十六次加密使用。

以下为子**产生流程图:
一次一密,DES

一次一密,DES

子**产生需经过置换选择1、循环左移、置换选择2等变换,产生出16个48位长的子**。

(1)置换选择1
64位的**为8个字节,每个字节的前七位是真正的**位,第8位为奇偶校验位,因此DES真正**位56位。
置换选择1的作用:从64位中去除8个奇偶校验位;剩余56位打乱重排,且将前28位作为C0,后28位作为D0。
一次一密,DES
上图表示置换选择1结束后,C0、D0的值是由原**中的哪几位构成。

(2)置换选择2

将Ci和Di合并成一个56位的中间数据,置换选择2从中选择一个48位的子**Ki。
一次一密,DES

2.16轮迭代
一次一密,DES
(1)初始置换IP

初始置换的作用是将64位明文打乱重排,并分成左右两部分L0和R0,每部分32位。

一次一密,DES
(2)加密部分

上一轮的Ri将作为下一轮的Li+1,而Li则通过加密运算成为下一轮的Ri+1。

加密函数f:

  • 首先将输入分成8个4位的分组

  • 通过E-盒将4位的分组扩展成6位的分组,此时得到48位的输入长度。一次一密,DES

  • 将得到48位与轮**Ki进行XOR操作,并将8个6位长的分组送入8个S-盒中,得到8个4位长的分组,即得到了32位的输出。
    -(S-盒可以将6位的输入映射为4位的输出,按照6位中首尾两位组成的二进制位行,中间四位组成的二进制位列,从S盒中进行查询,得到4位输出)
    例:100101,首尾两位为11,则表示数字3,则第4行,中间四位0010,则表示数字2,则为第3列(行列均从0开始计数)

  • 32位的输出进行P置换一次一密,DES
    最后得到的32位输出则为下一轮的Ri+1

注意:最后一轮得到的Ri和Li不进行交换

(3)逆初始置换IP-1

逆初始置换是初始置换IP的逆置换,它把十六次加密迭代的结果打乱重排,形成64位密文。
一次一密,DES
以上便是DES的加密过程。

DES解密

由于DES的运算时对合运算,所以加密和解密可用同一个运算,只是子**使用顺序不同。
把64位密文当做明文输入,而且第一次解密迭代使用子**K16,第二次解密迭代使用子**K15,…,第十六次解密迭代使用子**K1,最后输出的就是64位明文。

解密过程可用如下数学公式表示:
一次一密,DES


总结

本文主要介绍了一次一密的概念和DES算法。