微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 基于FPGA的可变祖冲之(ZUC)算法的设计与实现

基于FPGA的可变祖冲之(ZUC)算法的设计与实现

时间:10-02 整理:3721RD 点击:

码力分享基于FPGA的可变祖冲之(ZUC)算法的设计与实现

1:概述

基于FPGA的可变祖冲之(ZUC)算法的设计与实现

软件:ISE              语言:Verilog HDL,C语言

2:功能

通过加入可配置模块(如S盒等),设计并实现参数可重配置的可变祖冲之算法。

3:实现方法

S盒设计流程如图1所示:


图1S盒流程图

整个工程的输入是32bits的U,输出是一个32位字的密钥流。

1)第一个模块是线性移位寄存器,其主要输入输出端口如图2所示;实现的主要功能是根据。

LFSRWithInitialisationMode(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 > 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。这就实现了可变模块与整体设计方案的衔接。


详细点感觉更好 啊

我现在也在写ZUC,能交流一下吗?QQ244816711

我现在也在写ZUC,能交流一下吗?QQ244816711

这个算法是什么呢?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top