1997年,美国国家标准技木研究所(NIST)发起征集AES算法的活动,并专门成立AES工作组,其目的是确定一个非保密的、公开的、全球免费使用的分组密码算法,用于保护下一世纪政府的敏感信息。
NIST规定候选算法必须满足下面的要求:
- 密码必须是没有密级的,绝不能像商业秘密那样来保护它;
- 算法的全部描述必须公开披露;
- 密码必须可以在世界范围内免费使用;
- 密码系统支持至少128比特长的分组;
- 密码支持的密钥长度至少为128、192和256比特。
参与AES的候选算法中,Rijndael 提供了安全性、软件和硬件性能、低内存需求以及灵活性的最好的组合,因此NIST确定选择Rijndael作为AES。
2000年选中比利时密码学家提出的密码算法Rijndael作为AES。2001年美国政府正式颁布AES为美国国家标准,目前AES已经被一些国际标准化组织采纳为标准。其被选中的原因是安全、性能好效率高、实用、灵活。
Rijndael算法是一个数据块长度和密钥长度都可变的分组加密算法,其数据块长度和密钥长度都可独立地选定为大于等于128位且小于等于256位的32位的任意倍数。美国颁布AES时规定数据块的长度为128位,密钥长度可分别选择为128位、192位或256位。
Rijndael算法采用分组密码的一种通用结构:对轮函数实施迭代的结构。
Rijndael的轮函数由以下三层组成:
- 非线性层:进行非线性S盒变换ByteSub,由16