RING-512密码杂凑算法
黄金龙(QQ1435271638)
什么是Hash算法?
Hash算法,又称为哈希算法、杂凑函数、散列函数、消息摘要算法。它可以将相当长(一般不大于2^64Bit)的输入数据经过计算生成固定长度的Hash值,不同的输入数据对应不同的Hash值(产生碰撞的概率很小)。同时Hash计算的过程是不可逆的,也就是说,由Hash值无法逆推出输入数据。
Hash算法的应用非常多,分别是安全加密、唯一标识、数据校验、散列函数、负载均衡、数据分片、分布式存储、区块链等。
RING-512密码杂凑算法描述
RING-512密码杂凑算法采用类分组密码算法结构,消息分组长度为512bit,摘要长度为512bit。压缩函数状态大小为512bit,共64步,每步更新全部16个寄存器,这加快了算法的雪崩效应。
RING-512密码杂凑算法的初始值IV共512bit,由16个32bit字(IV0∽IV15)串联而成,具体值如下:
RING-512密码杂凑算法的常量
RING-512密码杂凑算法的常量为64个32bit字(CN0∽CN63),具体值如下:
RING-512密码杂凑算法的消息填充
对长度为l(l<264)比特的消息m,RING-512密码杂凑算法首先将比特“1”添加到消息的末尾,再添加k个“0”,k是满足(l+k+1)=448Mod512的最小非负整数。然后再添加一个64位比特串,该比特串是消息长度的二进制表示。填充后的消息m`的长度是512 的倍数。
RING-512密码杂凑算法的迭代压缩过程
将填充后的消息m`按512bit进行分组:m`=B(0)B(1)…B(n-1),其中n=(l+k+65)/512。对m`按如下方式迭代:
FOR i=0 TO (n-1)
M(i)=MsgMix(B(i))
V(i+1)=CF(V(i),M(i))
ENDFOR
其中CF是压缩函数,V(0)为512 bit初始值IV,B(i)为填充后的消息分组,迭代压缩的结果为V(n)。
MsgMix为消息混乱函数,描述如下:
FOR i=0 TO 15
M[i]=((B[i]+CN[4*i])⊕CN[4*i+1]+ CN[4*i+2])⊕CN[4*i+3];
ENDFOR
RING-512密码杂凑算法的压缩函数
状态更新过程描述如下:
ABCDEFGHIJKLMNOP←V(i);
FOR j=0 TO 63
T0=FFFF0(A,B,C,D);
E=E⊕T0+M[0]⊕A;
F=F⊕T0+M[1]⊕B;
G=G⊕T0+M[2]⊕C;
H=H⊕T0+M[3]⊕D;
T1=FFFF1(E,F,G,H);
I=I⊕T1+M[4]⊕E;
J=J⊕T1+M[5]⊕F;
K=K⊕T1+M[6]⊕G;
L=L⊕T1+M[7]⊕H;
T2=FFFF2(I,J,K,L);
M=M⊕T2+M[8]⊕I;
N=N⊕T2+M[9]⊕J;
O=O⊕T2+M[10]⊕K;
P=P⊕T2+M[11]⊕L;
T3=FFFF3(M,N,O,P);
A=A⊕T3+M[12]⊕M;
B=B⊕T3+M[13]⊕N;
C=C⊕T3+M[14]⊕O;
D=D⊕T3+M[15]⊕P;
Temp=A;A=B;B=C;C=D;D=E;E=F;F=G;G=H;
H=I;I=J;J=K;K=L;L=M;M=N;N=O;O=P;P=Temp;
ENDFOR
杂凑值为
ABCDEFGHIJKLMNOP←ABCDEFGHIJKLMNOP⊕V(i)
4个混淆扩散函数(FFFF0,FFFF1,FFFF2,FFFF3)
Y=FFFF0(X0,X1,X2,X3)
{
}
Y= FFFF1(X0,X1,X2,X3)
{
}
Y= FFFF2(X0,X1,X2,X3)
{
}
Y= FFFF3(X0,X1,X2,X3)
{
}
SBOX32(Z)=SBOX32(z3||z2||z1||z0)=SBOX(z3)||SBOX(z2)||SBOX(z1)|| SBOX(z0)
SBOX查找表
RING-512密码杂凑算法的特点
RING-512密码杂凑算法压缩函数整体结构为类分组密码结构,除了没有消息扩展函数外,还增加了多种新的设计技术,包括使用S盒作为非线性变换、使用了4个不同的加快雪崩效应的混淆扩散函数、每步更新16个寄存器的值等。这样能够有效地避免高概率的局部碰撞,有效地抵抗强碰撞性的差分分析、弱碰撞性的线性分析和比特追踪法等密码分析。