轻量级分组加密算法RECTANGLE
轻量级分组加密算法RECTANGLE
RECTANGLE轻量级分组密码算法是Wentao Zhang,Zhenzhen Bao,Dongdai Lin等学者于2014年提出的,该算法是SPN结构的,采用了线性移位的置换层以及4×4bit的S盒。RECTANGLE是一个迭代分组密码,分组长度为64比特,密钥长度可选80比特或者128比特。
设B=(b4l-1,…,b3l,…,bl-1,…,b0)是一个4l比特的分块,我们总是把它看成一个4×16的矩形:
向量B的第j列就是这个矩形的第j列,记为B(j)=(bj,bj+l,bj+2l,bj+3l),其中0≤j≤l-1。用B(i,j)表示矩形的第i行第j列,即B(i,j)=bj+il.例如,一个64比特的明文或中间状态(w63,w62,⋯,w0)均可以看成4×16的矩形:
同样地,80比特的主密钥或者轮子密钥(k79,k78,⋯,k0)可以看成4X20的矩形。
分组密码RECTANGLE包含了25轮的迭代,每次迭代都包含三个步骤:异或轮密钥AddRoundkey、S盒变换SubColumn和行移位ShiftRow,见下图.
第一步AddRoundKey,用轮子密钥的最右边64比特和明文或中间状态异或。
第二步SubColumn中用到的S盒是4比特到4比特的置换,具体描述如下:
第三步ShiftRow中,第0行不移位,第1行循环左移1位,第2行循环左移12位,第3行循环左移13位。经过25轮迭代后,再异或一个轮子密钥。
密钥扩展算法
密钥的编排也包含三个步骤,见下图。其中,用到的S盒和轮函数中的一样,第0、1、2和3行分别循环左移7、9、11和13位。后一步异或的轮常数RC[i](0≤i≤24)始状态为RC[0]=(0,0,0,0,1)的5级线性反馈移位寄存器生成的,轮的轮常数RC[i]=(ri,4,ri,3,ri,2,ri,1,ri,0)等于(ri-1,3,ri-1,2,ri-1,1,ri-1,0,ri-1,4⊕ri-1,2).
在第i轮(i=0,1,2,3,…,24),64比特轮密钥Ki包含计数器中每一行密钥的右边16个比特数据。即Ki=(k3,15||k3,14||…||k3,0)||(k2,15||k2,14||…||k2,0)||(k1,15||k1,14||…||k1,0)||(k0,15||k0,14||…||k0,0)。在调用子密钥之前,密钥计数器要按以下方式更新数据:
1.将第0列元素用S盒进行混淆运算。
k3,0||k2,0||k1,0||k0,0=S(k3,0||k2,0||k1,0||k0,0)
2.对计数器中的每一行进行权值不同的左移位运算,第0行左移7比特,第1行左移9比特,第2行左移11比特,第3行左移13比特。
3.对计数器第1行的最右边5比特进行异或轮常量RC[i]运算。
k0,4||k0,3||k0,2||k0,1||k0,0=(k0,4||k0,3||k0,2||k0,1||k0,0)⨁RC[i]
轮常量RC[i]由一个5比特线性反馈移位寄存器生成,每经过一轮,5比特数据(rc4rc3rc2rc1rc0)便左移一位,同时将新的rc0位置为第5位和第3位的异或值。初始值RC[0]定义为:RC[0]=0x1。