对称加密是密码学体系中最基础也最核心的分支之一。在软设与信息安全工程师考试中,对称加密算法的设计原理、工作模式以及安全性分析历年都是命题重点。理解对称加密,首先要从它的数学模型入手。
从形式化定义来看,对称加密体制可以用五元组来描述。明文空间P是所有合法明文的集合,密文空间C是所有合法密文的集合,密钥空间K由所有合法密钥构成。加密算法E将明文和密钥映射为密文,解密算法D将密文和密钥映射回明文。二者满足核心约束:对任意密钥k和明文m,先用k加密再用同一密钥解密,结果必须等于m。这个可逆性约束是衡量对称加密正确性的基本判据。
在通信模型中,对称加密的运作流程非常直观。发送方和接收方事先通过安全信道协商好一个共享密钥,发送方用这个密钥对明文执行加密操作,得到密文后在公开信道上传输。接收方收到密文后,使用同一个共享密钥执行解密操作,还原出原始明文。攻击者虽然可以完整截获公开信道上的密文,但由于不知道密钥,无法有效恢复明文内容。这就是对称加密保障机密性的基本逻辑。
对称加密之所以得名,正是因为加密和解密使用同一个密钥,这种对称性带来了极高的运算效率,通常比非对称加密快上几个数量级。但同时它也带来了密钥分发这一棘手的难题。在通信双方没有预先共享密钥的情况下,如何安全地将密钥送达对方,是实际应用中必须解决的问题。通常的做法是将对称加密与非对称加密结合使用,用非对称加密传输会话密钥,再用对称加密保护批量数据的机密性。这种混合密码体制在TLS协议等现代安全通信协议中被广泛采用。
现代对称加密遵循柯克霍夫原则,安全性完全依赖于密钥的保密而非算法保密。即使攻击者完全知晓算法的每一个细节,只要密钥未泄露,系统就应当是安全的。这种开放性使得算法能被公开审查,经受密码学界长期攻击检验从而建立可信的安全性。
现代对称加密算法按处理数据的方式可以划分为两大类。流密码每次处理一个比特或一个字节的数据,典型代表有RC4算法和国密ZUC算法。分组密码则将明文划分为固定长度的块,逐块进行加密处理。DES算法和AES算法都属于分组密码,分组长度分别是六十四比特和一百二十八比特。分组密码的设计核心在于,如何在有限轮次的迭代中,将明文分组的每一个比特与密钥的每一个比特充分混合,使得输出密文呈现出统计上的随机性。
Feistel网络是分组密码领域最经典的结构范式,由霍斯特·费斯特尔在二十世纪七十年代为IBM公司设计Lucifer密码系统时提出,后被广泛应用于DES及其衍生算法。
Feistel网络的核心操作单元是一轮变换。每一轮将输入数据等分为左右两半L和R。本轮输出左半直接取输入右半的值,输出右半则由输入左半与轮函数的输出进行异或得到,轮函数的输入是输入右半和本轮子密钥。轮函数F是整个结构中决定混淆和扩散能力的关键组件。
Feistel网络有两个巧妙的特性。第一是加解密同构,加密和解密使用完全相同的结构,仅子密钥使用顺序相反。这一特性在硬件实现上大幅节省了芯片面积。第二是F函数无需可逆,因为每轮输入完整保留在另一半中,即使F函数不可逆,整个网络仍然可逆,给了算法设计者极大的自由度来增加混淆能力。
Feistel网络的安全强度与轮数密切相关。轮数越多,明文和密钥之间经过的混合次数越多,输出的随机性越强。但同时轮数的增加也带来了性能开销。密码设计者需要在安全性和性能之间寻找平衡。DES算法选择了十六轮,这是综合当时攻击手段的评估结果。后来随着差分密码分析和线性密码分析等攻击技术的发展,DES的十六轮被证明刚好处于安全边界,暴力搜索五十六比特密钥空间也随着计算能力的增长变得可行,这是DES最终被AES替代的根本原因。
替代置换网络简称SPN结构,是另一种主流的分组密码设计范式。与Feistel网络不同,SPN结构并不将数据对半分,而是将整个分组作为一个整体在前向路径上逐层变换。AES算法是SPN结构最著名的应用实例,此外Serpent算法、PRESENT算法等也都采用了SPN结构。
SPN结构的一轮变换通常由三个核心操作层堆叠而成。替代层使用S盒对数据的每个字节或半字节进行非线性替换,提供密码算法所需的混淆特性。S盒本质上是一个查找表,输入若干比特,查表得到对应的输出比特。一个好的S盒必须具备高非线性度、低差分均匀性和良好的代数免疫度。扩散层通过行移位和列混合等操作将单个字节的变化扩散到整个分组上,这是香农提出的扩散原则在分组密码中的具体实现。轮密钥加层将当前轮的子密钥与数据状态进行异或操作,将密钥信息注入到加密过程中。
SPN结构相比Feistel网络有一个显著优势,就是天然的并行性。由于每一轮都对整个数据分组进行操作,不存在左右半数据依赖,硬件实现可以获得更高的吞吐率。AES算法之所以能够在现代处理器上通过AES-NI指令集达到极高的加解密速率,很大程度上得益于SPN结构的并行特性。在软件实现方面,SPN结构的S盒替换可以预先计算为查找表,行列混合可以通过一系列查表和异或操作高效完成,无需逐比特处理。
但SPN结构要求解密时为每一层提供逆操作:逆S盒、逆行移位、逆列混合。这意味着需要为加解密分别验证正确性。不过在集成电路资源充裕的当下,这已不是实质性瓶颈。AES的S盒基于有限域GF括号二八次方的乘法逆元加仿射变换构造,使得逆S盒同样具有优秀的密码学性质。
DES算法全称数据加密标准,由IBM公司在二十世纪七十年代基于Lucifer密码系统改进而来,一九七七年被美国国家标准局采纳为联邦信息处理标准。尽管DES已经不再被推荐用于实际的安全通信,但它在密码学史上的地位无可替代,学习DES的详细工作流程对于理解分组密码的设计原理具有不可替代的教学价值。
DES的输入输出均为六十四比特分组,密钥名义六十四比特但含八位奇偶校验位,有效长度仅五十六比特。加密分三个阶段:初始置换按固定表重排六十四比特;十六轮Feistel变换,每轮用四十八比特子密钥;逆初始置换恢复数据自然顺序。初始置换不提供密码强度,更多是历史硬件考量。
每轮Feistel变换分四步。第一步扩展置换,将三十二比特右半扩展为四十八比特,通过固定表将部分比特重复使用,使每个比特至少影响两个S盒的输入。第二步轮密钥加,扩展数据与四十八比特子密钥异或。第三步S盒替换,四十八比特分为八个六比特组,经八个S盒各自替换为四比特,合计输出三十二比特。第四步P盒置换,将三十二比特按固定表重新排列。
S盒是DES算法安全性的基石。DES八个S盒的设计规范在很长一段时间内都是保密的,这引发了密码学界对NSA可能在S盒中嵌入后门的广泛猜测。直到二十世纪九十年代,差分密码分析技术被公开发表后,人们才发现DES的S盒对差分攻击具有极强的抵抗能力,其设计者早在差分分析被发现之前就已经预见到了这种攻击手段。这一发现极大地提升了DES设计团队在密码学界的声誉,也让S盒的设计从神秘的艺术转变为一门有章可循的科学。
DES的子密钥生成算法同样值得一提。五十六比特有效密钥首先经过一个称为PC1的压缩置换,分为左右两个二十八比特的半密钥。每一轮根据轮号对左右两半分别进行循环左移,移位的位数在多数轮次中为两位。移位后将左右两半拼回五十六比特,再经过称为PC2的压缩置换,选出四十八比特作为当前轮的子密钥。十六轮生成十六个不同的子密钥,每个子密钥是五十六比特密钥的一个四十八比特子集。这种设计使得密钥的每一个比特在多个子密钥中以不同的组合出现,增加了密钥恢复的难度。
AES算法全称高级加密标准,是美国国家标准与技术研究院在二零零一年发布的新一代对称加密标准,用于替代已经不再安全的DES。AES的诞生经历了公开的国际竞赛,最终由比利时密码学家设计的Rijndael算法胜出。AES采用SPN结构,分组长度固定为一百二十八比特,密钥长度支持三种规格,分别是AES-128用一百二十八比特密钥和十轮加密,AES-192用一百九十二比特密钥和十二轮加密,AES-256用二百五十六比特密钥和十四轮加密。
AES将一百二十八比特的明文分组组织为一个四行四列的字节矩阵,每个格
本篇完!