图1S盒流程图
整个工程的输入是32bits的U,输出是一个32位字的密钥流。
1)第一个模块是线性移位寄存器,其主要输入输出端口如图2所示;实现的主要功能是根据。
LFSRWithIni
tialisationMode
(U) {
1.v=215S15+217S13+221S10+220S4+(1+28)S0 mod (231-1);
2. If v=0, then set v=231-1;
3. s16=v⊕u;
4. If s16=0, then set s16=231-1;
5. (s1,s2, …,s15,s16)→(s0,s1, …,s14,s15).
得到(s0,s1, …,s14,s15). LFSR的初始状态初始密钥是可以改变的。
2)第二个模块是位重组,其主要端口如图2所示;实现的主要功能是根据
Bitreorganization()
{
1. X0=s15H || s14L;
2. X1=s11L || s9H;
3. X2=s7L || s5H;
4. X3=s2L ||s0H.
}
形成4个32位字的X0,X1,X2,X3。
3)第三个模块是非线性函数,其主要端口如图2所示;实现的主要功能是函数F输出一个32位字W。这个模块的具体实现主要是利用ROM。
R1=S(L1(W1L||W2H));
R2=S(L2(W2L||W1H)).
上述的L1,L2是利用的线性变换:
L1(X)=X⊕(X<<<2)⊕(X<<<10)⊕(X<<<18)⊕(X<<<24),
L2(X)=X⊕(X<<<8)⊕(X<<<14)⊕(X<<<22)⊕(X<<<30).
而S变换则需要利用ROM,通过L1(W1L||W2H)对地址的选择进行输出。
图2FPGA工程设计
4:实现原理
1)线性移位寄存器的设计方案:
(1)初始化模式
在初始化模式,LFSR的接收一个31位的输入字U,这是由删除的F异或32位输出w和输出位的重组,即,U*3的最右边的位获得=(W⊕X3)>> 1。
(2)工作模式
LFSR的工作模式,在没有收到任何输入,它的工作原理为将S16代替v与U的异或。
2)位重组设计方案:
将从线性反馈移位寄存器得到的S(i),计算得出位重组数据X0=s15H || s14L; X1=s11L || s9H; X2=s7L || s5H; X3=s2L ||s0H.
3)非线性函数设计方案:
首先是通过32bit到32bit的线性变换,然后将得到的数据作为地址输入到ROM中,也即S盒中,输出得到非线性函数的值。再通过相关计算得到了函数F输出一个32位字W。4)4)可变模块的设计方案和整体衔接的设计方案:
将线性变换得到的数据作为地址输入到ROM中,也即S盒中,输出得到非线性函数的值。再通过相关计算得到了函数F输出一个32位字W。这就实现了可变模块与整体设计方案的衔接。