(a1, a2,…, an)→(b1, b2,…, bn) 把ai 对应赋值给 bi
下面我们对部分符号进行实例讲解。
例 3: 对于任意两个字符串a和b,由a和b级联生成的字符串c的描述同样遵循在章节2.2中定义的规则。也就是说,最高有效位在左手边,最低有效位在右手边。例如,
a=0x12345,
b=0x67890,
于是我们有
c = a||b =0x1234567890.
例 4:假设
a=100111001100101100000001011000100102
于是我们有
aH=10011100110010112,
aL=00001011000100102.
例 5:假设
a=110010011001011000000010110100102.
于是我们有
a >> 1=11001001100101100000001011010012.
例 6:假设 a0, a1, …, a15, b0, b1, …, b15 都是整型变量,那么
(a0, a1, …, a15)→(b0, b1, …, b15)
结果是 bi=ai, 0≤i≤15。
三 算法描述
3.1 总体框架
ZUC是一个面向文字的,使用128位密钥和128位初始向量的序列密码。它由三个主要部分组成:线性反馈位移存储器(LFSR),比特重组(BR)和一个非线性函数F。一般该算法的总体框架如图3.1。
3.1
线性反馈位移存储器(LFSR):它由十751个31位存储器 s0, s1, . , s15,每个存储器是{1,2,……,232-1}中的一个整数, 在密码序列生成阶段,LFSR被更新如下:
LFSR更新():
1. s16 = (215s15 +217s13 +221s10 +220s4 + (1 + 28)s0)mod(231 −1);
2. If s16 = 0 then set s16 =231 −1;
3. ( s1,s2,.,s15,s16) → (s0,s1,.,s14,s15).
比特重组(BR):它提取128位来自LFSR的字符,形成4个32位字符X0,X1,X2和X3,如下:
1. X0 = s15H||s14L;
2. X1 = s11L||s9H;
3. X2 = s7L||s5H;
4. X3 = s2L||s0H;
非线性函数 F:它包含两个32位内存字符R1和R2。F 详细描述在下面给出。在函数F,S是S底层和L1和L2是线性变换。函数 F的输出为32位的字符 W。密码序列Z被赋予为Z = W⊕X3,
F(X0, X1, X2):
1. W =(X0 ⊕R1)R2;
2. W1 = R1 ⊞X1;
3. W2 = R2 ⊕X2;
4. R1 = S(L1(W1L||W2H));
5. R2 = S(L2(W2L||W1H));
3.1.1 S盒
32×32的S盒S是由4个并列的8×8 的S盒组成,也就是说,S=(S0,S1,S2,S3),这里S0=S2, S1=S3。S0 和 S1的定义分别在表3.1和表3.2中[3]。
假设x是S0 (或S1)的一个8位输入。把x像这样x=h||l写成两个十751进制数,那么表3.1(或表3.2)里第h行和l列相交的条目是S0 (或 S1)的输出。 祖冲之序列密码算法研究与实现(3):http://www.751com.cn/shuxue/lunwen_12699.html