围绕结构展开的密码设计
琼·达门(Joan Daemen)是研究密码算法设计与分析的密码学家,Rijndael分组密码的共同设计者之一。他与文森特·赖门署名的AES提案初版提交于1998年,1999年修订。提案不仅给出加密步骤,也说明设计目标:抵抗已知攻击、适应多种硬件和软件平台,并使算法结构便于理解与分析。
Rijndael把非线性替换、线性扩散和轮密钥结合起来。字节替换提供非线性,行位移与列混合让局部变化传播,密钥通过异或进入状态。其宽轨迹策略研究如何使跨轮路径包含足够多的活跃非线性部件,从而约束差分与线性分析中的路径。这是具体设计中的组合与论证,不意味着替换、扩散等一般密码学原则都由达门一人提出。
参考:[1]
公开竞赛中的共同成果
NIST在1997年发起高级加密标准的制定工作,1998年公布15个候选算法。经过第一轮公开分析,Rijndael进入5个决赛方案之列。评估并不只比较加密速度,还包括密码分析、实现问题及知识产权等方面;候选算法接受来自设计团队之外的持续检验。
2000年10月2日,NIST宣布选定Rijndael作为拟议AES的算法。此后仍需起草标准、征求意见和履行批准程序,FIPS 197直到2001年11月26日才正式发布。因此,1998年的技术提案、2000年的评选结果和2001年的标准发布不是同一事件。达门与赖门负责共同设计,NIST负责标准化组织,研究共同体提供了独立评估。
参考:[2]
算法家族与标准实例
Rijndael原提案中的分组长度和密钥长度可以分别选择,其讨论范围比最终AES更广。AES固定使用128位分组,允许128、192或256位密钥;密钥位数不同,轮数分别为10、12、14。名称AES-192表示192位密钥,不能读成192位数据分组。
标准还把状态、轮变换、密钥扩展和逆变换规定为可复现的操作。初始轮密钥加法之后执行各轮,最后一轮省去列混合步骤。某个实现即使使用了Rijndael思想,只要采用标准之外的分组参数,也不能因此称为符合AES。区分这些层次,才能准确描述达门的设计被标准采用的范围。
从分组密码到海绵函数
达门后续的合作并未止于Rijndael。2010年的Keccak主文档由Guido Bertoni、达门、Michaël Peeters和Gilles Van Assche共同署名,说明这一函数家族作为SHA-3候选方案的结构与分析。这里的合作团队不同于Rijndael,不能把两项工作的全部成果归给同一位个人或同一对作者。
Keccak采用海绵构造:输入分块进入内部状态的一部分,每次结合后调用置换;输入处理完毕,再交替取出输出和应用置换。状态分为速率与容量两部分,使吞吐量与安全分析之间形成明确的参数关系。它不是简单地把AES换一个名称,而是围绕散列及其他用途采用不同的构造。文档同时讨论参数选择、攻击分析和软硬件实现,体现了达门在不同合作中将设计理由与可检验结构结合的研究方式。
参考:[4]