CAST-128加密算法

【CAST-128加密算法】本备忘录的状态
本备忘录为Internet社区提供信息,但没有定义任何类型的Internet标准 。本备忘录的
发布没有限制 。
摘要
Internet社区需要一种不受限制的加密算法,这种算法的密码长度应该答应在较大范围
内变动,以便用于各种不同的加密应用程序和协议中提供安全性 。
本文档描述了一种已经存在的算法,可以满足这些要求 。内容包括:密码和密钥安排算
法(第二节)的描述,置换箱(附录A)以及一组测试向量(附录B) 。
目录
1 简介 1
2 算法的描述 2
2.1 循环密钥对 2
2.2 不同的循环 2
2.3 置换箱(SubstitutionBoxes) 3
2.4 密钥表 3
2.4.1.掩码子钥与旋转子钥 4
2.5 可变的密钥长度 5
2.6 CAST5对象标识符 5
2.7 讨论 6
3 知识产权的问题 6
4 安全性的问题 6
5 参考 6
6 作者地址 7
7 附录A置换箱(S-Boxes) 7
8 附录B.测试向量 13
1 简介
本文档描述了CAST-128加密算法,这是一种类似于DES的置换组合网路
(Substitution-PermutationNetwork,SPN)加密系统,对于微分密码分析、线性密码分析、
密码相关分析具有较好的反抗力 。这种加密还有其他的几个理想的特点,包括雪崩、严格的
雪崩标准(SAC)、位独立标准(BIC)、没有互补属性也不存在软弱或者半软弱的密钥 。因
此对于整个Internet社区——要求密码强壮、轻易获取的加密算法——而言,这是一种能够
满足一般应用的很好的选择 。
Adams[Adams]具体地讨论了CAST设计过程,对于这种算法的分析也可以在网上找到
(比如,[Web1]或[Web2]) 。
2 算法的描述
CAST-128属于称为Feistel加密的一类加密算法,因此所有的操作都类似于数据加密标
准(DES) 。完整的加密算法分下面四步给出 。
输入:明文m1...m64;密钥K=k1...k128
输出:密文c1...c64
1)(密钥表)从K计算出16对子钥(Kmi,Kri)(参见2.1到2.4节);
2)(L0,R0)<--(m1...m64)(把明文分为左右两半,L0=m1…m32,R0=m33…m64);
3)(循环16次)对于i从1到16,按下述方法计算Li和Ri:
Li=Ri-1;
Ri=Li-1^f(Ri-1,Kmi,Kri),其中f在第2.2节中定义 。(f根据i的不同,可以是
Type1、Type2或者Type3)
4)c1...c64<--(R16,L16)(交换最终得到的L16和R16并连接在一起构成密文 。)
解密算法与上述加密算法一致,只不过循环(因此还有子钥对)是按照相反的顺序从
(R16,L16)计算出(L0,R0) 。
可以使用附录B中的测试向量验证该算法的正确性 。
2.1 循环密钥对
CAST-128在每次循环中使用以对子钥:32位量Km作为“掩码”,5位量Kr用作“旋
转码” 。
2.2 不同的循环
CAST-128使用三种不同的循环函数,如下所示(其中“D”是输入函数f的数据,“Ia”
到“Id”分别表示I中从高到低的4个字节) 。注重“ ”和“-”是以2**32为模的加减法,
“^”是位异或,“<<<”表示循环左移操作 。
Type1:I=((Kmi D)<< f=((S1[Ia]^S2[Ib])-S3[Ic]) S4[Id]
Type2:I=((Kmi^D)<< f=((S1[Ia]-S2[Ib]) S3[Ic])^S4[Id]
Type3:I=((Kmi-D)<< f=((S1[Ia] S2[Ib])^S3[Ic])-S4[Id]
循环1、4、7、10、13和16使用f函数Type1;
循环2、5、8、11和14使用f函数Type2;
循环3、6、9、12和15使用f函数Type3 。
2.3 置换箱(SubstitutionBoxes)
CAST-128使用8个置换箱:置换箱(s-box)S1、S2、S3和S4是循环置换箱,S5、S6、
S7和S8是密钥表置换箱 。尽管8个置换箱总共需要8K字节的内存,但是要注重在实际加

推荐阅读