序列密码算法ShanLooog512设计原理详解
序列密码算法ShanLooog512设计原理详解
ShanLooog512(闪龙512)为序列密码算法,内部状态为512比特,密钥长度为128或256比特,轮函数为FFFFFFFF,循环轮数为24轮,输出密钥流为512比特的状态。与Salsa20类似,内部状态为4X4的矩阵形式排列,字大小为32比特。
当密钥长度为256比特,密钥K=k0||k1||k2||k3||k4||k5||k6||k7;当密钥长度为128比特,(k4,k5,k6,k7)=(k0,k1,k2,k3) ,密钥K=k0||k1||k2||k3||k4||k5||k6||k7。其中ki(i=0,…,7)为32位字。
(1)初始化阶段
ShanLooog512算法内部状态初始化如下所示:
其中,(k0,...,k7)为256比特的密钥,(v0,v1)为初始IV,(i0,i1)为分组标号,(c0,c1,c2,c3)为固定的常数。如果密钥长度是128比特,则(k4,k5,k6,k7)=(k0,k1,k2,k3)。其中(c0,c1,c2,c3)=(0xccd696e5,0xa8f4e504,0xeb19cf63,0xf708b2cd)或者(c0,c1,c2,c3)=(0xbc42e727,0xe138f70f4,0xc2b3a0d9,0xbd485fdc)。
(2)密钥流产生过程
ShanLooog512为基于ARX(模加、循环移位、异或)混合运算设计的类分组结构流密码算法。其密钥流生成过程如下所示:
轮函数FFFFFFFF如下图所示:
其中GGGGGGGG1如下图所示:
其中GGGGGGGG2如下图所示:
其中Transformation (类似矩阵转置操作)如下图所示:
其中M8X1(矩阵变换操作)如下图所示:
对应的二元矩阵为:
其中M8X2(矩阵变换操作)如下图所示:
对应的二元矩阵为:
综上所述,密钥流(K[0],…,K[15])= ShanLooog512(X0)+X24。