Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

对称密码

流密码

分组密码(块密码)

分组密码工作模式

电子密码本模式(ECB)

  • 优点

    • 可以并行加密比特块
    • 块密码的简单实现方式
  • 缺点

    • 易受密码分析的攻击,因为明文与密文之间存在直接关系
    • 相同的明文块生成相同的密文块,这可能暴露出模式

密文反馈(CFB)

密码块链接(CBC)

加密算法的输入是明文分组和前一个密文分组的异或,同样均使用相同的密钥进行加密。其中第一个明文加密时,需先与初始向量 异或,再进入加密算法进行加密。

OFB

PCBC

DES

数据加密标准(Data Encryption Standard,简称 DES)是一种对称密钥加密算法,广泛用于电子数据保护。它是由 IBM 开发的,并在 1977 年被美国国家标准协会(ANSI)采用为联邦信息处理标准(FIPS PUB 46),后来成为一种广泛使用的加密标准。

加密流程图如下:

DES加密流程图

块密码:DES 将固定长度的明文(64 位)分为多个 64 位的块进行处理。

密钥长度:使用 56 位的密钥进行加密,虽然实际的密钥长度为 64 位,但每第 8 位用于奇偶校验。

轮数:DES 采用 16 轮的加密操作,每一轮包含选择、置换和混合步骤。

假设,明文为 M = Hello World!

转换为二进制

01001000 01100101 01101100 01101100 01101111 00100000 01010111 01101111 01110010 01101100 01100100 00100001

decimal_number = int(binary_string, 2)

按照 64 位分组

b1:

01001000
01100101
01101100
01101100
01101111
00100000
01010111
01101111

b2:

01110010
01101100
01100100
00100001
padding
padding
padding
padding

KEY:

00110100
00110101
10110101
10101000
00011101
11011011
10010000
00000100
  • 初始置换

DES初始置换表

即将输入的第 58 位换到第 1 位,第 50 位换到第 2 位,依此类推,最后一位是原来的第 7 位。

  • 终止置换

  • 扩展置换

S 盒压缩处理

使用了 8 个不同的 S-盒

S 盒

每个 S 盒接受 6 位输入,并返回 4 位输出

弱密钥

弱密钥的出现源于密钥调度算法中的循环左移操作。

  • 在生成子密钥时,56 位密钥被分成两个 28 位的半部分。
  • 如果初始的 C₀ 和 D₀ 全部由 0 或全部由 1 组成,那么无论进行多少次循环左移,C₀ 和 D₀ 的值都不会改变!
  • 这意味着:所有 16 轮的子密钥(K1 ~ K16)都将完全相同。

有 4 个明确的弱密钥

弱密钥(十六进制表示,含校验位) C₀ 状态 (28位) D₀ 状态 (28位) 原因
0x0101010101010101 全 0 全 0 全0的半部分
0xFEFEFEFEFEFEFEFE 全 1 全 1 全1的半部分
0x1F1F1F1F0E0E0E0E 全 0 全 1 一个全0,一个全1
0xE0E0E0E0F1F1F1F1 全 1 全 0 一个全1,一个全0

这意味着:加密函数和解密函数是同一个函数。E(K, E(K, P)) = P

示例:

https://github.com/VoidHack/write-ups/tree/master/SharifCTF%208/crypto/DES

3DES

参考资料

53616c7465645f5f0c160de825c4925b6543fa6c52dc91b4487b8252966d9de6aec8508b95522f879232bf89e3066440