DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1261|回复: 0
打印 上一主题 下一主题

[待整理] 3GPP 内核算法KASUMI的IP设计与测试

[复制链接]
跳转到指定楼层
楼主
发表于 2015-4-26 17:37:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
第三代移动通信系统是一个能在全球范围无线接入使用的网络系统,它提供了传统的语音业务和无线高速的数据业务。作为3G系统中信息安全的核心技术,相关的密码算法在第三代移动通信技术中占有重要的地位。
           
          本文基于第三代伙伴关系计划标准化组织(3GPP)制定和实施的标准,介绍了第三代移动通信系统的安全算法KASUMI,分析了其应用背景和结构原理。本文同时详细描述了基于FPGA的KASUMI IP核的实现过程。设计出了对64位数据进行加密的KASUMI算法的IP核。在此基础上,进一步完成了f8算法的软核。其中KASUMI算法都通过串口完成了硬件数据的测试。
           
          1  系统的功能和指标

           
  •                                          本系统主要完成了KASUMI 的IP核设计及测试,可在硬件上实现对数据的加密。并在此基础上设计出了f8算法的软核,通过了软件仿真测试。
           
  •                                          最大时钟频率:141.54MHZ
           
  •                                          吞   吐   量:3019.58Mbps
           
  •                                          密  钥 大 小:128比特

         

          2  系统的理论基础
          主要阐述KASUMI算法的结构原理,分析了其整体结构及各个组成部分。
           
          2.1  KASUMI算法分析
          KASUMI算法是基于日本三菱公司的分组密码MISTY1算法,是一个采用Feistel结构的分组加密算法,采用128比特的密钥输入和64比特的明文输入,产生64比特的密文输出,在此过程中要进行8轮迭代。KASUMI算法的设计遵循了三条原则:⑴安全性有足够的数学基础;⑵算法的软件实现在任何处理器上要足够的快,硬件实现也足够的快;⑶算法能够对抗差分和线性密码分析,流程图如图1所示。
           

        图1 KASUMI算法

         

          输入数据I被分为32比特的左右两部分L0和R0,即I= L0 || R0 ,对于整数i控制加密轮数,限定其值为1≤i≤8,定义:Ri = Li-1 ,Li = Ri-1 fi(Li-1 , RKi) 。即每轮KASUMI算法的操作: 将第i-1轮的输出的左半部Li-1作为第i轮的右半部Ri ; 而第i轮的左半部由第i-1轮输出的右半部Ri-1与第i轮的轮函数fi 的结果进行异或运算得到。(RKi为第i轮的子密钥)经过8轮迭代后得到64比特字符串的输出(L8 || R8)。
           
        2.1.1  KASUMI算法中的函数

          2.1.1.1  第i轮的轮函数fi
          轮函数fi对32比特的输入I,在32比特的轮密钥RK的控制下,得到32比特的输入。而轮密钥由三个一组的子密钥(KLi,KOi,KIi)组成。轮函数自身由两个子函数FL和FO构成,与之相关的子密钥分别为KLi和KOi ,KIi 。
           
          轮函数在奇数轮与偶数轮有不同的表达式:
          对于1,3,5,7轮:fi(I,RKi)= FO(FL(I,KLi),KOi,KIi)
          对于2,4,6,8轮:fi(I,Ki)= FL(FO(I,KOi,KIi),KLi)
          ⑴ 函数FL:FL函数是一个线性函数,但是这并不意味着算法的安全性要依赖于它,也不能依赖于它。它的目的是通过一个简单的方式增加附加干扰,使得单个的比特位在传输过程中更难被追踪。FL函数还有一个特性,就是FL输入的微小变化在输出端也只引起微小的变化,这对FL函数正向或反向的计算都是有用的。流程图如图2:
           
       

        图2 FL函数算法

        ⑵ 函数FO:KASUMI的循环函数的非线性部分是由FO函数构成的。在统一分配使用子密钥的情况下,FO的平均线性差分来率小于2-28 。对于任意一个固定的密钥,FO可以看   作是32比特的分组置换,但是由于它只有3轮结构,容易被四选择的随机明文排列辨别出。不过可以象FI函数的结构那样,通过在FO函数中增加一轮来改进它的扩散性能。但这样是以增加实现复杂性和能耗为代价来使算法安全得到改进。然而目前还没有任何证据表明3轮结构FO函数的缺点能被用来对整个8轮的KASUMI进行攻击。流程图如图3:
           
         

        图3 FO函数算法

         

          ⑶ 函数FI: FI函数是KASUMI的基本随机函数,有16比特的输入和16位的输出。它由两个非线性S7和S9盒进行4次循环组成。如果子密钥统一分配使用,那么,FI的平均线性差分概论小于(2-9+1)(2-7+1)=2-14 。设计S7和S9盒的目的是为了避免FI中出现线性结构,使算法的安全性更高。流程图如图4:
           
       

        图4 FI函数算法

         

        ⑷ S盒KASUMI算法中有两个S盒:7比特输入7比特输出的S7 以及 9比特输入9比特输出的S9。它们也是算法的核心部分之一,用来构成FI函数。它们可以通过联合逻辑实现,也可以通过查表实现。在本设计中是使用逻辑算法实现的。设输入数据X(7比特或9比特)的每一位分别为:

         

        (X8 || X7 ||)X6 || X5 || X4 || X3 || X2 || X1 || X0

             输出数据Y(7比特或9比特)的每一位分别为:
        (Y8 || Y7 ||)Y6 || Y5 || Y4 || Y3 || Y2 || Y1 || Y0

         

             则S7的逻辑表达式定义如下:
       

                  则S9的逻辑表达式定义如下
       

         

          2.1.1.2  子密钥的生成
          KASUMI算法输入一个128比特的密钥,而在算法中的每一轮所使用的子密钥都是由这个128比特的密钥衍生而来的。每轮的密钥都通过两组16比特的数组Kj和Kj(j=1…8),以如下的方法生成:
           
          128比特的密钥被分为每组16比特的8组:
        K = K1 || K2 || K3 || K4 || K5 || K6 || K7 ||K8

         

        第二组密钥Kj由Kj 以如下方法生成:

        Kj = Kj Cj(j=1…8,Cj为表1所示的16进制的常量)

         

        表1 密钥扩展时的常量

        Tab.1 The constant used for the expander of the key

                                                                         C1
                       
                                                                         C2
                       
                               
                                        C3

                       
                                                                         C4
                       
                                                                         C5
                       
                                                                         C6
                       
                                                                         C7
                       
                                                                         C8
                       
                               
                                        0x0123

                       
                               
                                        0x4567

                       
                                                                         0x89AB
                       
                                                                         0xCDEF
                       
                                                                         0xFEDC
                       
                                                                         0xBA98
                       
                               
                                        0x7654

                       
                               
                                        0x3210

                       
        继而子密钥(KL、KO和KI)如表2所定义的那样,通过循环移位得到,其中有如下的定义:

        D <<< n   数据D循环左移n位(特别指出D <<< 1 = ROL(D)。)

         

        表2 子密钥的计算

        Tab.2 The calculation of the subkey

                               
                                         

                       
                               
                                        1

                       
                               
                                        2

                       
                               
                                        3

                       
                               
                                        4

                       
                               
                                        5

                       
                               
                                        6

                       
                               
                                        7

                       
                               
                                        8

                       
                               
                                        KLi,1

                       
                               
                                        K1<<<1

                       
                               
                                        K2<<<1

                       
                               
                                        K3<<<1

                       
                               
                                        K4<<<1

                       
                               
                                        K5<<<1

                       
                               
                                        K6<<<1

                       
                               
                                        K7<<<1

                       
                               
                                        K8<<<1

                       
                               
                                        KLi,2

                       
                               
                                        K3

                       
                               
                                        K4

                       
                               
                                        K5

                       
                               
                                        K6

                       
                               
                                        K7

                       
                               
                                        K8

                       
                               
                                        K1

                       
                               
                                        K2

                       
                               
                                        KOi,1

                       
                               
                                        K2<<<5

                       
                               
                                        K3<<<5

                       
                               
                                        K4<<<5

                       
                               
                                        K5<<<5

                       
                               
                                        K6<<<5

                       
                               
                                        K7<<<5

                       
                               
                                        K8<<<5

                       
                               
                                        K1<<<5

                       
                               
                                        KOi,2

                       
                               
                                        K6<<<8

                       
                               
                                        K7<<<8

                       
                               
                                        K8<<<8

                       
                               
                                        K1<<<8

                       
                               
                                        K2<<<8

                       
                               
                                        K3<<<8

                       
                               
                                        K4<<<8

                       
                               
                                        K5<<<8

                       
                               
                                        KOi,3

                       
                               
                                        K7<<<13

                       
                               
                                        K8<<<13

                       
                               
                                        K1<<<13

                       
                               
                                        K2<<<13

                       
                               
                                        K3<<<13

                       
                               
                                        K4<<<13

                       
                               
                                        K5<<<13

                       
                               
                                        K6<<<13

                       
                               
                                        KIi,1

                       
                               
                                        K5

                       
                               
                                        K6

                       
                               
                                        K7

                       
                               
                                        K8

                       
                               
                                        K1

                       
                               
                                        K2

                       
                               
                                        K3

                       
                               
                                        K4

                       
                               
                                        KIi,2

                       
                               
                                        K4

                       
                               
                                        K5

                       
                               
                                        K6

                       
                               
                                        K7

                       
                               
                                        K8

                       
                               
                                        K1

                       
                               
                                        K2

                       
                               
                                        K3

                       
                               
                                        KIi,3

                       
                               
                                        K8

                       
                               
                                        K1

                       
                               
                                        K2

                       
                               
                                        K3

                       
                               
                                        K4

                       
                               
                                        K5

                       
                               
                                        K6

                       
                               
                                        K7

                       
         

         
          2.2  f8流加密模式
          保密性算法f8是用保密性密钥(CK)来加密和解密数据块的流加密算法,数据块的长度可以从1—20000位。该算法使用的是OFB模式下的KASUMI作为密钥流发生器。
           
          基于块密码操作的标准流密码模式有计数器模式和OFB模式,而f8算法并不只是其中之一。计数器模式下的密钥流发生器用计数器作为它的一个输入,该计数器作用于每一个密钥流块时都需要更新。F8流加密模式可以看作是两种标准模式的结合,并且利用了反馈数据的预白化。输出反馈,计数器和预白化3个特征按如下方式共同作用:首先,新产生的密钥流块被计数器值和预白化数据块按位异或进行修正,然后在送回发生器函数作为其输入。如图5所示:
           
       

           图5 f8算法

         

          2.3  f8算法的描述
        f8算法利用KASUMI密钥相关函数,在128位密钥的控制下将输入的64位数据块转化为输出的64位数据块。

        f8算法使用了两个64位寄存器:静态寄存器A和计数器BLKCNT寄存器。寄存器A用64位初始值IV进行初始化:

        IV = COUNT || BEARER || DIRECTION ||0…0

         

        IV由32位的COUNT,5位的BEARER,1位的DIRECTION和26位全0串连接而成,其中计数器BLKCNT设为0 。f8算法使用密钥修正值KM,KM是由8位字节0x55=01010101重复16次构成。首先,用修正过的CK值和KASUMI函数算出一个预白化值:

         

       

        它被存入寄存器A 。当密钥流发生器以这种方式启动后,它就做好了产生密钥流的准备。被加密/解密的明文/密文中包含LENGTH位,LENGTH的值在1—20000之间,粒度为1,而密钥流发生器按64位的整数倍产生密钥流位。最后一个密钥流块中,从0—63之间最低有效的若干位将根据LENGTH的值所要求的总比特数而舍掉。

        所需要的密钥流位的数量由BLOCKS表示。BLOCKS的值由LENGTH的值决定,方式如下:LENGTH的值被64除后向上取整作为BLOCKS的值。密钥流块用 来表示。设KSB0 = 0 ,n为整数且1&le;n&le;BLOCKS,则n=BLKCNT+1,且:

       

        密钥流中的个别位KS[0],KS[1],……,KS[LENGTH-1]是从左到右依次从密钥流块KSB1到KSBn中提取的,具体方法如下:对于n=1,……,BLOCKS和任意的整数i(0&le;i&le;64),可得:

       

        加密和解密的操作相同,都是用输入数据和产生的密钥流按位异或得到的。

         

          2.4  f8算法的输入定义

           
  •                                          密钥索引(CK)

          CK的长度是128位。如果产生的密钥长度k小于128位,CK的最大有效位携带额定密钥信息,而剩余位重复密钥信息,具体如下:
        CK=CK[0],CK[1] ,……,CK[127]

        其中,CK[0],……CK[k-1]携带密钥信息,对于所有的n(k&le;n&le;128),CK[n]=CK[n mod k]。

         


           
  •                                          基于时间的输入(COUNT)

        count参数的长度是32比特。密钥流同步是基于物理层帧计数器和超帧计数器结合的使用,这样可以避免密码流的重复使用。计数器(count)在建立连接时初始化。

         


           
  •                                          无线承载标识(BEARER)

        BEARER的长度是5位。相同密钥可能被一个用户的多个无线承载同时使用,为了避免使用相同的密钥流加密多个承载,算法根据无线承载标识来产生不同的密钥流。

         


           
  •                                          传输方向(DERECTION)

        上行时(信息从UE到RNC)DIRECTION的数值是0,下行为1 。由于上行和下行的信道有可能使用相同的密钥,DIRECTION位的目的就是避免上下行传输时使用相同的密钥流。

         


           
  •                                          密钥流长度(LENGTH)

        LENGTH是一个1—20000之间的整数,共16位。

         


           
  •                                          密钥流

        密钥流块的长度等于输入参数LENGTH的值。

         


           
  •                                          明文

        明文块的长度等于输入参数LENGTH的值。这里设计中一次输入的明文长度为256位。

         


           
  •                                          密文

        密文块的长度等于输入参数LENGTH的值。

         
          3  KASUMI IP核的实现方案
        主要阐述整个系统的原理和设计过程。

         

          3.1  IP核及其优点
        IP(知识产权intellectual property rights)核将一些在电路中常用,但比较复杂的功能块设计成可修改参数的模块。IP核的重用是设计人员赢得迅速上市时间的主要策略。随着CPLD/FPGA的规模越来越大,设计越来越复杂,设计者的主要任务是在规定的时间周期内完成复杂的设计。调用IP核能避免重复劳动,大大减轻工程师的负担,因此使用IP核是一个发展趋势。

         

        IP核包括硬IP与软IP。可配置IP是参数化后的可重定目标IP,其优点是可以对功能加以裁剪,以符合特定的应用。这些参数包括总线宽度、存储器容量、使能或禁止功能块。

         

        硬IP最大的优点是确保性能,如速度、功耗等。然而,硬IP难以转移到新工艺或集成到新结构中,是不可重配置的。

         

        软IP是以综合形式交付的,因而必须在目标工艺中实现,并由系统设计者验证。其优点是源代码灵活,可重定目标于多种制作工艺,在新功能级中重新配置。

         

          3.2  KASUMI IP核设计方案论证
          3.2.1  方案一
          KASUMI算法的加密过程共经过8轮迭代,所以首先想到的方案是设计一个状态机,通过8个状态来实现8轮迭代加密。定义如下:
        type d_state is (s0,s1,s2,s3,s4,s5,s6,s7,s8);

         

        通过这种方法可以很方便的实现KASUMI的加密过程,经测试能够得到正确的结果。但是,由于状态机用到了8个状态,而且每个状态的过程都很复杂,所以使用8个状态的状态机占用了很大的资源,编译速度很慢。

         

          3.2.2  方案二
        由于KASUMI的加密过程有真严格的要求,必须顺序执行。所以,此次设计的状态机只分3个状态:空闲状态,加密状态,输出状态。定义如下:

         

        type d_state is (nothing,kasumi,done);

         

        其中,加密状态中进行KASUMI的8轮迭代加密,完成整个数据加密过程。通过改进,使得算法由原来的8个状态缩减为3个状态,节省了很大一部分资源,使得编译速度提升了近13倍 。

         

          3.2.3  方案资源占用比较
        经过ISE仿真,可以得到两种设计方案的资源占用情况。如图6、图7所示。由图中的数据可以看出:方案一中,slice寄存器占用7%、slice占用95%、4输入逻辑查找表占用89%、整个设计的等效门数为55671;方案二中,slice寄存器占用6%、slice占用81%、4输入逻辑查找表占用75%、整个设计的等效门数为47788。通过比较可以发现,第二种设计方案的资源占用情况有明显的减少,在编译时,速度也有了明显的提升。

         

       

        图6 方案一资源占用表

         

       

        图7 方案二资源占用表

         
          3.3  KASUMI IP核的引脚定义及模型
          KASUMI模块的设计中包含5个输入和2个输出。以下为输入输出端口说明:
           
          ·  时钟信号      clk
          ·  复位信号      reset          高电平有效
          ·  使能信号      en            高电平有效
          ·  加密密钥      key           128bit
          ·  明    文      plaintext       64bit
          ·  完成信号      rdy           高电平有效

           
  •                                           密    文      ciphertext      64bit

           
        KASUMI IP核如图8所示:

       

        图8 KASUMI的IP核

         

          3.4  f8软核的实现方案论证
          f8算法的基础是KASUMI算法,他根据明文的长度来决定调用KASUMI加密模块的次数,从而生成与明文等长的密钥流。所以设计f8算法首先要解决的问题是决定调用KASUMI加密模块的次数。
           
          3.4.1  方案一
           调用2次KASUMI加密模块。首先,生成寄存器A中的初始值时调用一次,然后根据输入的明文的长度进行状态循环,在循环中再调用一次KASUMI加密模块,从而输出密钥流。由于KASUMI模块是以函数的形式进行调用的,占用很多资源,调用次数越多,编译速度越慢。经测试,调用2次KASUMI加密模块资源占用率超过了100% 。
           
          3.4.2  方案二
           只调用1次KASUMI加密模块。通过判断输入的值是否为初始化值,成功的省去了生成寄存器A中的值时调用的那一次KASUMI加密模块,只调用一次KASUMI加密模块,减小了资源占用率,使其降至89% 。这样即可实现f8算法的软核。
           
          3.5  f8核的引脚定义及模型
          f8模块的设计中包含9个输入和2个输出。以下为输入输出端口说明:
          ·  时  钟  信  号      clk
          ·  复  位  信  号      reset          高电平有效
          ·  使  能  信  号      en            高电平有效
          ·  加  密  密  钥      key           128bit
          ·  明          文      plaintext       64bit
          ·  计    数    器      blkcnt         64bit
          ·  方  向  控  制      directions      1bit
          ·  无  线  承  载      bearer         5bit
          ·  基于时间的输入      count         32bit
          ·  完  成  信  号      rdy           高电平有效
          ·  密          文      ciphertext      64bit
           f8核如图所示:

        图9 f8的IP核

         

          4  KASUMI及f8算法的FPGA优化设计及仿真
          主要阐述KASUMI算法以及f8算法的FPGA实现及优化的过程。
           
          4.1  开发环境ISE
        FPGA设计工具的种类繁多,在本设计中使用的是Xilinx的FPGA,ISE是其必备的设计工具。ISE可以完成FPGA开发全部的流程,包括设计输入、仿真、综合、布局布线、生成BIT文件、配置以及在线调试等,功能非常强大。同时ISE继承了大量的实用工具,包括HDL编辑器HDL Editor、IP核生成器CORE Generator System、约束编辑器Constraints Editor、静态时序分析工具Static Timing Analyzer、布局规划工具FloorPlanner、FPGA编辑工具FPGA Editor和功耗分析工具Xpower等,这些工具可以帮助设计人员完成设计任务并提高工作效率。

         

          4.2 对模块的描述及仿真
          4.2.1  KASUMI模块的ISE仿真及测试
          图10为KASUMI加密系统的电路图:
       

         图10 KASUMI的加密系统

         
          图11为测试数据:
          加密密钥:key=8CE33E2CC3C0B5FC1F3DE8A6DC66B1F3
          明    文:plaintext=D3C5D592327FB11C
          说    明:复位信号保持0状态,使其无效。在第3个时钟时,令使能信号en有效,这时明文和密钥被送入加密系统中进行加密。在第6个时钟时,加密完成,rdy信号给出指示,同时输出密文。
           
       

            图11 KASUMI加密结果

           
          4.2.2  f8模块的ISE仿真及测试
          使用控制器来控制f8,即可一次性输入256比特的数据,对数据进行加密,f8控制器和f8共同构成了f8加密系统,系统电路图如图12所示:
           
       

        图12 f8的加密系统

         

          f8加密系统的测试数据如下图13所示:
          输入控制信号:reset = 0       en = 1
          输入数据信号:dir = 1
                        bearer = 01100
                        count = 72A4F20F
                        key = 2BD6459F82C5B300952C49104881FF48
                         pm = 4286346CEF130F92  66F6CA76EB543004  4726446A6C38CED1
          7EC61272743BF161
           
          说明:以上明文是输入到f8控制器中,f8模块还是只能一次性加密64比特的数据,通过控制其后可以一次性加密256比特的数据。复位信号reset保持无效状态,使能信号en保持有效状态。数据接收完之后,大约在第760纳秒时数据加密完成,提示信号ready输出一个高电平,同时输出加密结果。
       

        图13 f8加密结果

         

          5  KASUMI算法硬件测试
          主要阐述KASUMI算法在Xilinx开发板上进行测试时的结果。
           
          5.1  UART介绍
          UART(Universal Asynchronous Receiver Transmitter 通用异步收发器)是广泛使用的串行数据传输协议。UART允许在串行链路上进行全双工的通信。在硬件上进行数据测试时,KASUMI IP核与计算机之间的串行外设用的是RS232 &ndash;C串行接口。但一般的UART器件都增加了很多的辅助功能,使得芯片十分复杂。所以在设计中使用的是自行设计的UART器件,只将所需的UART功能集成到FPGA内部。使用VHDL将UART的核心功能集成,从而使整个设计更加紧凑、稳定且可靠。图14为UART的设计原理图 。
           
       

        图14 UART原理图

         

          5.1.1  UART器件模块功能介绍
          ⑴ UART发送器
          发送器每隔16个BCLK时钟周期输出1位,次序遵循1位起始位、8位数据位、无校验位、1位停止位。
          串口逻辑给出Xt_cmd信号,通过发送移位寄存器tbuf[7..0]发送串行数据至串行数据输出端txd。在数据发送过程中用输出信号t_done作为标志信号,当一帧数据发送完毕时,t_done信号为1,通知串口控制逻辑在下个时钟装入新数据。
           
          ⑵ UART接收器
          串行数据帧和接收时钟是异步的,发送来的数据由逻辑1变为逻辑0可以视为一个数据帧的开始。接收器先要捕捉起始位,确定rxd输入由1到0,逻辑0要15个Bclk时钟周期,才认定是正常的起始位,然后在每隔16个bclk时钟周期采样接收数据,移位输入接收移位寄存器rbuf,数据接收完后输出一个数据接收标志信号标志r_done。
           
          ⑶ 波特率发生器
          UART的接收和发送是按照相同的波特率进行收发的。波特率发生器产生的时钟频率不是波特率时钟频率,而是波特率时钟频率的16倍,目的是为在接收时进行精确地采样,以提取出异步的串行数据。
         
          5.1.2  UART器件FPGA实现
          串口通讯模块是位于FPGA内部的负责与计算机进行数据传输的一个控制逻辑模块,因此它所要实现的主要任务是从计算机接收数据以及将数据发送到计算机。在设计中,有一个顶层的串口通讯控制单元uart,它向下调用了baud、receive、transter元件设置了数据传输的波特率并控制了数据的收发进程。根据我们的设计,上位机与下位机之间以通讯速率9600bps/s传输数据,无奇偶校验,八位数据位和一位停止位。具体的实体定义和程序如下所示:
           
          ------------------------------------串口通讯模块实体定义---------------------------------------
          entity uart is
                 generic (xbit: integer:=64;                         --明文长度
                           ybit: integer:=64;                        --密文长度
                           kbit: integer:=128;                        -密钥长度
                           div:integer:=325                      --波特率分频比
          );
                 Port(     
                               clk50mhz,                                  --时钟
                               reset,                                     --复位
                               rxd,                               --rxd数据接收线
                               xt_en   :in std_logic;    --数据流向线,1为发送,0为接收
                               Y_reg  :in std_logic_vector(ybit-1 downto 0) ; --密文输入
                          txd,                                          --txd数据发送线
                               txd_ok,                                                                        --数据发送完毕信号
                               rxd_ok   : out std_logic;                           --数据接收完毕信号
                               X_reg    : out std_logic_vector(xbit-1 downto 0);       --明文
                               K_reg        : out std_logic_vector(kbit-1 downto 0)    --密钥
                        );
          end uart;
          -----------------------------------------串口通信处理程序----------------------------------------------
          r:process(r_re,reset,xt_en)                                                                --接收进程
          ……接收进程处理程序
          xt:process(b,xt_en,reset)                                                                  --发送命令产生进程
            ……发送命令产生进程处理程序
          t:process(b,reset,t_re,xt_en,Y_reg(ybit-1 downto ybit-8))       --发送进程
            ……发送进程处理程序
          --顶层映射
          u1:baud  generic map (div=>div) port map(      clock => clk50mhz,    reset       =>reset,clk=>b);  --调用波特率设置模块
          u2:reciever port map(bclkr=>b,resetr=>reset,rxdr      =>rxd,r_ready     =>r_re,rbuf=>r_data);  --调用接收数据模块
          u3:transfer port map(bclkt=>b,resett=>reset,      xmit_cmd_p=>xt_cmd,txdbuf=>t_data,     txd=>txd,       txd_done=>t_re);         --调用发送数据模块
           
          5.2  KASUMI加密系统的原理
          KASUMI加密系统主要由两部分组成:其一是串口控制器,用来控制计算机与Xilinx开发板之间的数据传递,它一方面将从计算机接收到的数据传送给开发板,另一方面又可将开发板加密好的数据返回给计算机;其二是KASUMI加密模块,用来对接收的数据进行加密。图15为加密系统的原理框图:
           
       

        图15 KASUMIIP核测试系统

        Fig.15 The testing system of the KASUMI IP Core

         

          5.3  串口测试结果
          在串口调试助手的数据输入框中,首先输入128比特的密钥,然后输入64比特的明文,然后点击手动发送数据选项,将加密密钥和待加密的数据发送给Xilinx开发板。当开发板接受完数据后,会有一个指示灯亮来提示数据接收完成,可以进行下一步的操作。然后拨动使能端的开关,使其有效,使用KASUMI算法进行加密,加密完成后拨回使能开关,停止加密,然后通过串口将数据返回给计算机。此时在串口调试助手上就可以看到加密后的数据。图16为测试数据:
           
          密钥:8CE33E2CC3C0B5FC1F3DE8A6DC66B1F3   明文:D3C5D592327FB11C
           
          说明:在串口调试助手中,请选中十六进制发送和十六进制接收,按照“密钥明文”的方式输入,如测试数据1则应当以“8CE33E2CC3C0B5FC1F3DE8A6DC66B1F3D3C5D592327FB11C”格式输入,点“手动发送按钮”即可发送,发送完毕后,可以看到LD1亮,说明接收数据完毕,这时将开关SW1拨向高,LD2亮后,说明加密完毕,再将SW1拨回低电平,然后拨开关SW0到高电平,可见LD0亮,串口调试助手中显示出十六进制的一组数据,如:“DE 55 19 88 CE B2 F9 B7”,说明芯片向计算机发送数据(即加密后的密文)成功。
           
       

        图16 KASUMI的硬件加密结果

          Fig.16 The encrypt result of KASUMI when using hardware
         
          6  器件资源分析
          此处主要阐述KASUMI算法在Xilinx开发板上进行测试时的资源利用情况。
          说明:吞吐量指单位时间内该过程处理的数据量,其计算方法为:吞吐量=加密数据长度(单位:bit)/ 加密时间。
           
          6.1  KASUMI IP核的资源利用
          本设计通过了功能仿真测试,验证了该系统的加密功能的正确性,加密过程使用的是KASUMI算法。设计中使用的开发板型号是:初级板-Spartan-3E,50万门,Flash,SDRAM,USB2.0,Ethernet,VGA,A/D, D/A。根据ISE的综合编译结果得到的资源利用情况如图17所示: 4输入逻辑查找表占71%、KASUMI IP核等效门的个数为41642个。
           
       

        图17 KASUMIIP核加密结果

          Fig.17 The encrypt result of KASUMI IP Core
           
          6.2  KASUMI IP核测试系统的资源利用
          KASUMI IP核测试系统包括串口控制器和KASUMI IP核,经ISE编译后的资源利用结果如图18所示:
           
       

          图 18 KASUMI IP核测试系统的设备利用

         

          Fig.18 The Device Utilization Summary of the KASUMI IPCore testing system
           
          6.3  KASUMI IP核实现性能的分析
          本设计中KASUMI的实现方法与[5-7]参考文献中的KASUMI算法的实现性能比较如表3所示:
          表3 KASUMI 算法的性能比较
           
          Tab.3 The performance comparison of different KASUMI algorithm
                               
                                         

                       
                                                                         This  paper
                       
                                                                         KASUMI Enc.1[7]
                       
                                                                         KASUMI Enc.2[7]
                       
                                                                         2_rounds_
                                                                          LUT[6]
                       
                                                                         8_rounds_
                                                                         LUT[6]
                       
                                                                         8R [5]
                       
                                                                         Fmax
                                                                         (MHz)
                       
                                                                         141.54
                       
                                                                         68.13
                       
                                                                         33.14
                       
                                                                         61.30
                       
                                                                         40.50
                       
                                                                         56
                       
                                                                         Throughput
                                                                         (Mbps)
                       
                                                                         3019.58
                       
                                                                         77.86
                       
                                                                         265.12
                       
                                                                         122.60
                       
                                                                         3221.12
                       
                                                                         3580
                       
          分析说明:KASUMI Enc.1的Fmax是参考文献[7]中的最大频率,而KASUMI Enc.2的throughput是参考文献[7]中的最大吞吐量。2_rounds_LUT的Fmax是参考文献[6]中的最大频率,而8_rounds_LUT的throughput是参考文献[6]中的最大吞吐量。8R的最大频率Fmax和吞吐量throughput在参考文献[5]中都是最大。通过表5的比较,很明显,本文所述的KASUMI的实现方法在时钟频率fmax和吞吐量throughput方面都要高于或接近于这些参考文献中的实现方法。
           
          结  论
        随着第三代移动通信技术的发展与普及,如何保证通信的安全就显得越来越重要。所以信息安全无疑是通信技术中的核心,而加密算法的IP 核设计就是信息安全技术中的核心。结合国内外对3G移动通信的研究现状来看,本文具有一定的实际意义。

         

        本设计实现了KASUMI 算法的IP硬核,具有功耗低,速度快等优点。在KASUMI算法的基础上,还进一步完成了f8算法的软核设计,采用状态机和函数调用的方法,使得整个系统结构清晰,操作灵活,可以根据不同功能需求,对软核进行更改,适用于多种场合。

         

        安全性研究是一项巨大的工程。如何设计出快速高效的加密硬核以及结构清晰操作灵活的软核将是一项长期的工作,在以后的道路上还有很多问题等着我们去解决。

         
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-12-31 06:12 , 耗时 0.098901 秒, 22 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表