密码学 一文读懂ZUC密码
这次在来聊一个国产密码, 祖冲之算法(ZUC)是中华人民共和国政府采用的一种序列密码标准,由国家密码管理局于2012年3月21日发布,相关标准为“GM/T 0001-2016 祖冲之序列密码算法”,2016年10月成为中国国家密码标准(GB/T 33133-2016)。祖冲之算法于2011年9月被3GPP采纳为国际加密标准(TS 35.221),可供LTE移动终端选用。【维基百科】
算法简介
祖冲之算法结构分为三层, 第一层是线性反馈移位寄存器(LFSR), 第二层是比特重组(BR), 最后一层是非线性函数F, 下图参考参考资料当中的pdf。
线性反馈移位寄存器LFSR
初始化模式
在初始化模式下,LFSR接受一个31bit的字u, u是通过非线性函数F的32bit舍弃最低bit得到, 主要计算过程如下:
- v = 2 15 S 15 + 2 17 S 13 + 2 21 S 10 + 2 20 S 4 + ( 1 + 2 8 ) S 0 m o d ( 2 31 − 1 ) v=2^{15} S_{15}+2^{17} S_{13}+2^{21} S_{10}+2^{20} S_{4}+\left(1+2^{8}\right) S_{0} \bmod \left(2^{31}-1\right) v=215S15+217S13+221S10+220S4+(1+28)S0mod(231−1)
- S 16 = ( v + u ) m o d ( 2 31 − 1 ) S_{16}=\left(v + u\right) \bmod \left(2^{31}-1\right) S16=(v+u)mod(231−1)
- 如果 S 16 = 0 S_{16} = 0 S16=0, 则令 S 16 = 2 31 − 1 S_{16} = 2^{31} - 1 S16=231−1
- ( S 1 S_1 S1, S 2 S_2 S2, …, S 16 S_{16} S16) -> ( S 0 S_0 S0, S 1 S_1 S1, …, S 15 S_{15} S