IBM的MARS加密算法实现(上)2010-06-09吴真一、背景知识1977年颁布的数据加密标准DES算法。其56位长的密码空间在芯片技术和计算技术高速发展的今天,越来越不适应安全需求。1997年9月美国国家标准技术研究所(NIST)提出了征求新的加密标准---AES (Advanced Encryption Standard)的建议,作为一种取代DES的二十世纪加密标准技术。其目标是:(1)执行速度快;(2)易于设计;(3)从大型计算机到智能IC卡(CPU卡)都可实现。1998年8月第一次AES会议(AES1)上,宣布了来自12个国家的15种候选AES。于1999年8月第二次AES会议(ARD2)上,从中筛选出5个候选算法:Algorithm Author(s)(1) MARS IBM (US)(2) RC6 RSA Laboratories(US)(3) Rijndael John Danemen,Vincent Rijmen(Belgium)(4) Serpent Ross Anderson(UK),Eli Bihan(Israel),Lars Knudsen(Nornay)(5) Twofish Bruce Schneier,John Kelsey,Doug Whiting,David Wagner,Chris Hall,Nids Ferguson经过大量的分析及评估后,NIST队伍最终选择了Rijndael。这是在考虑安全,性能,效率,易用和灵活等诸多方面做的一种权衡选择,正如NIST在其报告中称:"所有这五种算法对AES都很安全".本文将介绍一下由IBM公司提出的MARS算法的原理和部分笔者编写的算法实现代码.二、算法原理密钥增加作为预白化处理,经8轮无密钥的向前混合,8轮有密钥的向前变换,8轮有密钥的向后变换,8轮无密钥的向后混合,以及作为后白化处理的密钥减法。16轮有密钥的转换称为密码核(cryptographic core),无密钥的迭代使用两个8x32 bit S-boxes、加、异或操作。此外,有密钥的迭代使用32-bit密钥乘法、数据相倚旋转和密钥加法。混合与核心迭代都被修改为Feistel结构的迭代,其中,1/4的数据块用于标识其它3/4的数据块。约定:D[] :存放4个32位明文的容器,在加密操作完成后用于存放密文K[]:存放40个32位密钥的容器S[]:s-box,512个32位的不同数组成,其中前256个由S0指出,后256个由S1指出所有的数组下标从0开始计数.本文中提及的加法是模232加,减法是模232减,乘法是模232乘<<<表示循环左移^ 表示按位异或%取模