祖冲之序列密码算法研究与实现(3)
时间:2018-04-09 20:34 来源:毕业论文 作者:毕业论文 点击:次
(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):它由十优尔个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写成两个十优尔进制数,那么表3.1(或表3.2)里第h行和l列相交的条目是S0 (或 S1)的输出。 (责任编辑:qin) |