主要成员
runxiaofei的标识图片 runxiaofei [管理员
充电ing
cocolt的标识图片 cocolt [管理员
zhanghe901126的标识图片 zhanghe901126 [管理员
专业FPGA开发
答案-2049083的标识图片 答案-2049083 [管理员
Lighting-2048333的标识图片 Lighting-2048333 [创建者
行动,期待
xiabodan的标识图片 xiabodan [未验证
summer spinage
申请参加这个项目
了解该团队的信息
帮助文档
 
项目信息
项目名称:【HLS】3GPP-LTE 加密算法  
项目信息:
应用领域:无线通信
设计摘要:
2004年 3GPP开 始 启 动 长 期 演 进 LTE(Long Term Evolution),旨在确保3GPP未来在电信领域的持续竞争力。该计划已于2010年底被指定为第四代移动通信标准,简称4G 通信标准。LTE是下一代无线通信的主要技术之一,安全技术是LTE的关键技术。3GPP已经选择了两套加密算法,即美国的高级加密标准AES和欧洲的SNOW 3G。
ZUC算法,即祖冲之算法,是3GPP加密算法EEA3和完整性算法EIA3的核心,是中国自主设计的加密算法。2009年5月ZUC算法获得3GPP安全算法组 SA立项,正式申 请参加3GPP LTE第三套机密性和完整性算法标准的竞选工作,历时两年多的时间,ZUC算法经过包括3GPP SAGE内部评估,两个邀请付费的学术团体的外部评估以及公开评估等在内的3 个阶段的安全评估工作后,于2011年 9月正式被 3GPP SA全会通过,成为3GPP LTE第三套加密标准核心算法。

系统原理和技术特点:

1.Snow 3G算法

1.1.功能函数说明

加密算法主要包括以下7个功能函数:

1MULxVc)。该函数用于将16 bit映射成为8 bit。映射过程为:如果V的最高位为1,则MULxVC=(V<<81^C)^表示按位异或;否则MULxVC=(V<<81)。其中,VC均为十六进制数0xXX(8 bit)<<nt表示在n bit寄存器中左移t bit^表示按位异或。

2MULxPOW(V,i,c)。该函数用于将16 bit和一个正整数i映射成8 bitVc8 bit输入。映射过程为:如果i0MULxPOW (Vic)=V;否则,MULxPOW (Vic)= MULxMULxPOW (Vi-1c)c),(i>1,该函数递归)

3S-boxex S1。该函数映射一个32 bit输入成为一个32 bit输出,w=w0||wl||w2||w3||代表连接符)32 bit输入以w0开头,w3结尾。

4S-boxex S2。功能与S-boxex S1类似。

5MULac)。该函数映射8 bit成为32 bitc8 bit输入。定义为:MULac= MULxPOW (c230xA9)||MULxPOW(c480xA9)||MULxPOW(c2390xA9)

6DIVac)。该函数映射8 bit成为32 bitc8 bit输入,定义为:DIVac= MULxPOW (c160xA9)|| MULxPOW (c60xA9)|| MULxPOW (c640xA9)

7FSM(Finite State Machine)。该函数有2个输入字S5S15,其来自LFSR,产生一个32 bit输入字F

2.1.2 实现结构说明。

1)线性反馈移位寄存器(LFSR)LFSR包括s0s1s2s15,每部分32 bit

2)有限状态机(FSM)FSM包含R1R2R3三个32 bit寄存器。S-boxex S1S-boxex S2更新寄存器R2R3

1.2.Snow 3G加密算法实现过程

    SNOW3G是一种面向字的流加密算法。根据输入的128 bit密钥key和初始变量IV来计算密钥流。密钥流由一系列的字组成,每个字为32 bit,产生的密钥流与明文进行异或,从而达到对明文进行加密的目的。该算法主要由功能函数、LFSRFSM和计时操作组成。实现过程主要包括初始化过程和密钥流生成过程。初始化过程框图如图1所示。

 

    初始化过程主要完成对LFSRFSM的赋值。在初始化过程之前,LFSRS0-S15的值均为0,有限状态机R1R2R3也为0。在初始化过程开始后.有限状态机的状态均设置为0,而LFSR各个部分的状态由输入参数KIV来决定,其计算过程为:

LFSR_S15 = k[3] ^ IV[0];

   LFSR_S14 = k[2];

   LFSR_S13 = k[1];

   LFSR_S12 = k[0] ^ IV[1];

   LFSR_S11 = k[3] ^ 0xffffffff;

   LFSR_S10 = k[2] ^ 0xffffffff ^ IV[2];

   LFSR_S9 = k[1] ^ 0xffffffff ^ IV[3];

   LFSR_S8 = k[0] ^ 0xffffffff;

   LFSR_S7 = k[3];

   LFSR_S6 = k[2];

   LFSR_S5 = k[1];

   LFSR_S4 = k[0];

   LFSR_S3 = k[3] ^ 0xffffffff;

   LFSR_S2 = k[2] ^ 0xffffffff;

   LFSR_S1 = k[1] ^ 0xffffffff;

   LFSR_S0 = k[0] ^ 0xffffffff;

    初始化过程完毕后进入密钥流生成过程,在此过程中FSM的输出不再进入LFSR,而是作为整体的输出。输出就作为密钥流参加明文的加密过程(即密钥流与明文进行异或运算)。密钥流也以32 bit字的形式输出,输出字的个数由参数LENGTH来决定,LENGTH为一个输入值。密钥流生成过程如下图2所示。

 

 

    程序主要包括3个部分:头文件、用户函数文件和主函数。其中头文件主要声明自定义的数据类型和用户函数;用户函数文件主要用于定义自定义函数的函数体;主函数完成算法的密钥流生成。密钥流生成后与明文进行异或运算,即可完成加密功能。该算法的函数调用框图如图3所示(参考软件流程介绍),大括号后的函数为被调用的用户自定义函数。

 

ZUC算法

2.ZUC算法简介

 

    ZUC是一个同步流密码算法, 128 位初始密钥k128 位的初始向量iv 作为输人, 输出32 位字的密钥流(32 位称为一个密钥字)"ZUC 算法逻辑上采用三层结构, 即线性反馈移位寄存器(LFSR)、比特重组(BR)和非线性函数F, 其整体结构如图4所示。

 

(1)线性反馈移位寄存器(LFSR)

    线性反馈移位寄存器(LFSR)16 31 位的单元(S0,……,S15,每个单元Si仅在集合 { 1,2,.........231-1}中取值,LFSR有两个操作模式:初始化模式和工作模式。具体实现函数分别为:

FSRWithInitialisationMode(u32 u)

{

}

FSRWithWorkMode()

{

}

(2) 比特重组(BR

    比特重组是算法的中间层, LFSR 8个单元 S0 S2 S5 S7 S9 S11 S15里按照下面的方式形成432 位的字, 在非线性函数F 和产生密钥流中使用。具体步骤为:

BitReorganization()

{

1,X0=S15H || S14L

2,X1=S11L || S9H;

...........

}

其中||表示级联。

(3)非线性函数F

    非线性函数F包括232 位的记忆单元RlR2, 输人为X0XlX2, 输出为一个32 位的字W , 其作用是破坏LFSR 的线性结构, 具体步骤为:

F(X0,X1,X2)

{

1,W=(X0⊕R1)+R2mod232

2,w1=R1+X1mod232

3,W2=R2X2

4,R1=S(L1 (W1L || W2H))

5,R2=S(L2 (W2L || W1H))

}

上述线性变换L1L2分别为:

L1(X)=X⊕(X<<322)⊕(X<<3210)⊕(X<<3218)⊕(X<<3224);

L2(X)=X⊕(X<<328)⊕(X<<3214)⊕(X<<3222)⊕(X<<3230);


    S表示S盒运算, 32 X 32 S盒由4个并列的8X8S盒组成, S= (S0S1, S2 ,S3), 其中S0= S2, S1 = S3, 因此只需定义两个SS0 S1 , 这样的结构化的设计方法, 降低了硬件实现的代价。

(4)密钥加载

    假设128 位的初始密钥K, 128 位的初始向量IV240 位的长整型常量字符串D 分别为:

K=K0 || K1 || .........|| K15

IV=IV0 || IV1 || .........|| IV15

D=d0 || d1 || .........|| d15

K,IVD 被加载到LFSRS0S1……S15

2.2.ZUC算法实现过程

    ZUC算法的执行过程主要有四个步骤:密钥加载, 初始化阶段, 工作阶段和密钥流产生阶段,具体过程如下图5所示(参考软件流程介绍)。

 

1)密钥加载阶段:

    在密钥加载阶段, 128位的初始密钥和128 位的初始化向量载人LFSR, 同时设置32 位的记忆单元R1,R20值。

2)初始化阶段

    在初始化阶段,执行下面的操作32次:

1BitReorganization()

2,W=F(X0,X1,X2);

3FSRWithInitialisationMode(W>>1);

(3) 工作阶段

    在工作阶段, 算法执行下面的操作1, 并弃掉 F的输出W

1BitReorganization()

2F(X0,X1,X2)

3FSRWithWorkMode()

4)密钥流产生阶段

    在密钥流产生阶段, 每次迭代执行以下操作 1, Z是一个32位的输出:

1BitReorganization()

2,Z=F(X0,X1,X2)X3

3FSRWithWorkMode()

 

 

 

 

 

 

 

图1Snow3G初始化过程.jpg
系统框图:图1Snow3G初始化过程.jpg
图2Snow3G算法密钥流生成过程框图.jpg
系统框图:图2Snow3G算法密钥流生成过程框图.jpg
图4ZUC算法整体结构框图.jpg
系统框图:图4ZUC算法整体结构框图.jpg
软件流程介绍: HLS挑战赛流程介绍.doc [492 KB]
计划书:HLS挑战赛计划书.doc [711 KB]
当前项目状态:
参赛信息:
指导老师姓名: 仲元红
指导老师职称: 讲师
学校: 重庆大学
研究方向: 主要研究图像信息处理
参赛情况: OpenHW2014开源硬件与嵌入式计算大赛
需求信息:
拟采用的平台:挑战赛目标器件Kintex7-325T
是否需要设计扩展板?
需要的基本功能:
最新版本:
暂无发布的版本信息   了解目前项目的开发进度
相关评论:  
添加评论  更多评论
正在读取数据……
关于OpenHW | OpenHW使用说明 | FAQ | 相关法律 | 版权声明 | 网站地图
联系邮件:aimei@eefocus.com  联系电话: 0512-80981663-8069    Fax:0512-80981279
Powered by eefocus.com