美国分组加密算法SkipJack
Skipjack算法是由美国国家安全局(NSA)设计的一款用于Clipper芯片的分组密码算法。在Skipjack算法设计之初,其整个算法都是保密的,历经近十年之后才解密。Skipjack
算法采用两类非平衡Feistel结构作为其密码结构,分别称为RuleA和RuleB。
Skipjack算法简介
Skipjack算法迭代轮数为32轮分组长度为64比特,分为4个16比特字,密钥长度为80比特。Skipjack算法基于RuleA和RuleB两类非平衡Feistel结构交叉迭代生成。具体地,首先迭代8轮的RuleA结构,然后迭代8轮的RuleB结构,再迭代8轮的RuleA结构,最后迭代8轮的RuleB结构,共计迭代32轮。下面给出RuleA结构和RuleB结构的定义。
则1轮RuleA结构加密的圈函数定义为:
其中F为轮函数。1轮RuleA结构加密的圈函数的示意图如下图所示。
则1轮RuleB结构加密的圈函数的定义为:
其中F为轮函数。1轮RuleB结构加密的圈函数的示意图如下图所示。
与Feistel结构不同,为保证加解密的一致性,RuleA结构和RuleB结构需要轮函数F均为可逆双射。32轮Skipjack结构为先迭代8轮RuleA结构,再迭代8轮RuleB结构,再迭代8轮RuleA结构,最后再迭代8轮RuleB结构。
F函数是Skipjack算法轮函数中唯一的非线性组件,如下图所示。F函数采用4轮Feistel网络,轮函数为一个8x8的S盒,如图,其中x=(xL,xR)∈F28XF28和y=(yL,yR)∈F28XF28分别是F的输入和输出状态。令K∈F280表示80比特的种子密钥,则K=K0K1K2K3K4K5K6K7K8K9表示对应的10个8比特字,其中Ki∈F28。设RKi表示第(i+1)轮轮密钥,轮密钥由种子密钥循环生成,即RKi=RKimod5,其中RK0=K0K1K2K3,RK1=K4K5K6K7,RK2=K8K9K0K1,RK3=K2K3K4K5,和RK4=K6K7K8K9。因此密钥扩展算法实质上是5轮轮密钥的循环。
ShipJack的S盒如下图所示: