Loading

「学习笔记」DES加密

DES

博文学习链接: CSDN 十分钟读懂DES(虽然并不是十分钟……)

介绍

DES 是一种对称加密算法, 使用 \(56\) 位密钥和 \(64\) 位明文进行加密, 明文长度不足 \(64\) 位要进行补齐, 超过 \(64\) 位则要进行分组模式加密(ECB, CBC, CTR).

加密过程

整个加密过程要分成两个部分: 明文加密与密钥产生.

明文加密

我们得到了 \(64\) 位的明文块, 首先进行一次初始置换(相当于打乱顺序), 得到置换后的明文块, 之后对明文块分为左右两半, 每一半个 \(32\) 位, 记为 \(L_0, R_0\).
之后会进行 \(16\) 次迭代, 每一次迭代过程大致相同, 对于每一次迭代过程, 我们将右半块作为下一次迭代过程的左半块, 而我们的左半块, 会与在这次迭代中 \(F\) 函数输出的子密钥进行异或, 作为下一次迭代的右半块, 即:

\[L_{i + 1} = R_{i}\\ R_{i + 1} = L_{i} \oplus F_i\\ \]

在经过 \(16\) 轮迭代后, 得到 \(L_{16}, R_{16}\), 之后左右交换, 进行一次逆置换, 最终输出.

密钥产生

我们有 \(64\) 位的密钥, 经过第一轮置换, 会舍弃掉其中 \(8\) 位(位置都是 \(8\) 的倍数), 置换后得到 \(56\) 位密钥, 之后将其分成左右两半 \(C_0, D_0\), 之后每一轮迭代, 先对 \(C_{i-1}, D_{i-1}\) 进行循环左移, 在第 \(1, 2, 9, 16\) 轮左移一位, 其他情况下左移两轮.
\(C_{i-1}, D_{i-1}\) 经过左移后得到 \(C_i, D_i\), 然后进行第二轮置换, 将 \(56\) 位压缩到 \(48\) 位, 得到了本轮子密钥, 同时将明文的右半块 \(R\) 通过 \(E\) 盒置换扩展到 \(48\) 位, \(E(R)\) 与本轮子密钥 \(K_i\) 进行异或, 得到的输出放入 \(S\) 盒, \(S\) 盒中有 \(8\) 个 \(S\) 块, 每个 \(S\) 块接受 \(6\) 位, 输出 \(4\) 位, \(S\) 盒输出 \(32\) 位, 再将其放入 \(P\) 盒进行置换, 最终的输出为 \(F\) 函数的输出.(\(F\) 函数包括将 \(R\) 扩展到 \(48\) 位, 与 \(K_i\) 进行异或, \(S\) 盒置换, \(P\) 盒置换).

由此一个迭代过程相当于:

\[L_{i + 1} = R_{i}\\ R_{i + 1} = L_{i} \oplus F(R_i, K_i)\\ \]

以上的置换都有固定模式, 并不是随机置换.

解密过程

先将密文进行初始置换, 得到最后一轮输出, 之后按照

\[R_{i} = L_{i + 1}\\ L_{i} = R_{i + 1} \oplus F(L_{i + 1}, K_{i})\\ \]

将子密钥倒序使用,得到 \(L_0, R_0\), 然后再进行一次逆置换就可得到明文.

衍生

2DES

使用两个密钥, 把 DES 的加密过程重复两次, 2DES 有很大概率被中途相遇攻击破解(复杂度 \(O(2^{57})\)), 安全性与单次 DES 相当.

3DES

使用三个密钥, 把 DES 的加密过程重复三次, 3DES 密钥长度为 \(168\), 安全性更高.

曾经也存在过双密钥的 3DES 加密, 密钥长度为 \(112\) 位, 但安全性较低, 已被弃用.

相关攻击

  • 穷举攻击: 枚举所有可能的密钥, \(O(2^{56})\) 的时间复杂度.
  • 差分密码分析攻击: 通过分析明文与密文的差异、比较相同明文的密文、分析加密算法的行为推断出密钥.
  • 线性密码分析攻击: 通过线性近似计算找到密钥, 通过构造线性逼近, 以及计算相应的概率, 从而推导出密钥.
  • 已知明文攻击: 通过足够的已知明文与密文, 推导密钥.
  • 生日攻击: 通过生日攻击可以找到两个密钥, 它们都可以加密相同的明文得到相同的密文.
posted @ 2026-08-18 18:07  yi_fan0305  阅读(32)  评论(0)    收藏  举报