在加密中:它是什么以及它是如何工作的? 我们承诺了单字母替换密码的解决方案。见下文:
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ | ↓ |
I | Z | S | G | K | B | X | J | F | E | R | T | U | Q | A | W | O | H | M | Y | N | C | V | L | D | P |
密文: ITT VAHR IQG QA WTID UIRKM EISR I GNTT ZAD
明文:全是工作,不玩耍,让杰克成为一个沉闷的男孩
在这篇博客中,我们将介绍一些众所周知的对称加密算法。对称算法类是指所涉及的每一方都必须访问相同的密钥,因此它们关于密钥的信息是相同或对称的。在我们的下一篇博客中,我们将介绍非对称算法,其中所有参与者之间有关密钥的信息并不相同。让我们首先研究一个众所周知的,但现在大部分已停用的对称算法:DES。
数据加密标准 (DES) 是由 IBM 开发并于 1977 年标准化的对称加密算法。尽管它已被AES取代(我们将在下面进行研究),但DES的设计选择为关键空间问题提供了一个极好的真实示例。虽然对这些算法如何工作的完整描述远远超出了本文的范围,但让我们看一下它们设计中举例说明对称加密算法重要属性的部分。
DES 算法在 64 位输入数据块上运行,并通过称为 Feistel 网络的结构处理每个块(如右图所示)。由于该算法在 64 位块的固定大小输入上运行,我们稍后需要引入不同的操作模式:将较大的输入拆分为块并组合输出以形成最终密文的方法。正如我们将看到的,它并不像简单地连接对应于每个块的 64 位密文那么简单!
明文输入首先是排列的,但由于排列是固定的并且是公开的,因此它不会为设计增加安全性——它只是为了减慢缺乏算法硬件实现的对手的速度。需要注意的是,现代加密算法的安全性不依赖于算法任何部分的保密性。相反,只有密钥被假定为对手不知道。现代密码设计中的这一重要概念被称为Kerckhoffs原理。
然后将数据拆分为左 (L0) 和右 (R0) 的一半,右半部分与子键 K1(通过算法从主键派生)组合。右半部分和子键通过函数“f”组合在一起,以红色突出显示。
f被称为Feistel函数,是使DES成为一个难题的重要组成部分。有趣的是,我们将看到,与本文开头的一般难题示例 f(x) 不同,DES 中的 Feistel 函数 f 实际上不是可逆的!相反,可逆性属性(使用 DES 解密的能力)来自 Feistel 网络结构:使用密文块和子密钥以相反的顺序运行网络会产生原始明文。
Feistel 函数 f(如下图所示)的结构是通过扩展和独占 or 运算符将正确的 32 位数据与子键 K 组合在一起来操作的。然后将此组合结果分成 8 个 6 位块,每个块通过替换盒或“S-box”。这些 S 盒中的每一个都实现了众所周知的非线性转换,将 6 位输入映射到 4 位输出。选择这些映射中的每一个对于DES的安全性至关重要,在标准化之前,NSA用自己的映射替换了原始映射。当时被广泛认为是恶意的,后来发现NSA的映射可以抵抗一种(当时公开未知的)称为差分密码分析的攻击。
不幸的是,并非所有国家安全局对DES的贡献都是无私的。最初的设计要求使用64位密钥,这在1970年代的安全性绰绰有余。然而,NSA强烈主张使用更弱的48位密钥,该标准最终确定为56位。当时的公开理由是使用每个字节的一个位作为奇偶校验位(导致只有 64 个有意义位的“56 位”密钥)来验证 DES 密钥是否“有效”。当然,尝试使用错误的密钥解密将达到相同的目标。如今,56 位 DES 密钥不提供安全性,因此不应使用 DES 算法。相反,对称加密算法应该至少使用128位密钥,这是我们研究的下一个算法满足的属性:高级加密标准AES。
AES
1997年,美国国家标准与技术研究院(NIST)宣布了一项开发高级加密标准(AES)的竞赛,这是一种将取代DES的对称加密算法。2001年,Rijndael算法(比利时设计师Vincent Rijmen和Joan Daemen的姓氏组合)被选为获胜者,并被标准化为AES。它定义为 128、192 和 256 位的密钥大小,远大于 DES 使用的 56 位密钥。
AES 算法使用替换-置换网络,该网络类似于 DES 使用的 Feistel 网络,但不同之处在于替换盒 (S-box) 是可逆的。AES执行四个基本操作:
添加圆键
为了混合密钥材料,从主密钥派生一个子密钥以形成 AES 圆形密钥。状态数组 s 初始化为 128 位明文输入块,并通过 exclusive-or 与 round 键的单词 w 组合以形成更新的状态。
子字节
与 DES 类似,状态随后通过非线性 S 盒进行转换,在 AES 中,S-box 以可逆的方式将字节映射到字节。根据 Kerckhoffs 原理,这种转换和 AES 算法的整个描述是众所周知的。
移位行
此步骤在当前状态下循环移动最后三行。此操作与 MixColumns 操作一起提供扩散:在整个生成的密文输出中传播明文输入中的微小变化。这种“雪崩效应”可以防止攻击者知道明文-密文对的攻击:多次扩散操作,加上每次迭代中添加圆形密钥的混乱,使得即使知道明文和密文也难以恢复密钥。
混合列
最终操作将信息混合在一列中,从而提供进一步的扩散效果。
然后,根据所选的密钥大小,对这些操作组进行多次迭代。
我们已经看到,DES 和 AES 都是分别处理 64 位和 128 位明文块的对称加密算法。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !