已阅读5页,还剩39页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学号:20031122aes和camellia算法的软、硬件实现application of aes and camellia on softwareand hardware系 别: 电子信息工程系专 业: 电子信息工程班 级: 0311班学生姓名: 指导教师: 日 期: 年 月 至 年 月北京电子科技学院 aes和camellia算法的软、硬件实现【摘 要】对于一个密码算法的评估不仅在于算法的安全性,还在于算法的实现性能。密码算法的实现性能评估主要依据三个标准:实现的难度、占用的资源、实现的速度。本次设计通过实现aes和camellia两个分别采用sp结构和feistel结构的著名密码算法,分析其实现性能,研究算法结构、实现平台对算法实现性能的影响。【关键词】aes camellia sp结构 feistel结构 fpga vhdl【abstract】evaluation of a cipher arithmetic includes not only security but also performance of application which is evaluated mainly according difficulty, resource and throughput of application. in this design, arithmetic of aes and camellia, the two famous cipher arithmetic which are respectively application of sp net and feistel net, are implemented to analyze their performance and study the influence of the two different arithmetic nets and application platforms.【keywords】aes camellia spn feistel fpga vhdl北京电子科技学院 aes和camellia算法的软、硬件实现目 录前 言11 概述21.1密码学简介21.2 已发表的aes与camellia的研究结果21.3 本论文研究意义31.4 本论文的组织结构32 aes与camellia算法描述42.1符号约定42.2 feistel网络与sp网络的介绍与比较42.2.1 feistel网络42.2.2 sp网络52.2.3 feistel网络与sp网络的比较52.3 aes算法描述52.3.1 输入输出和中间状态与密钥52.3.2 aes的加密算法62.3.3 aes的解密算法82.3.4 aes的密钥扩展92.4 camellia算法描述92.4.1 camellia的加密算法92.4.2 camellia的解密算法122.4.3 camellia的密钥扩展133 开发语言与开发环境介绍163.1 软件开发语言与开发环境的选择163.2 硬件开发语言与开发环境的选择163.2.1 开发环境163.2.2 开发语言173.3 硬件器件的选择183.3.1 asic与fpga之间的选择183.3.2 器件选择与介绍194 aes与camellia算法的实现214.1 软件实现214.1.1 aes软件实现的关键环节分析214.1.2 camellia软件实现的关键环节分析224.1.3软件实现结果比较与分析234.2 硬件实现254.2.1 硬件实现系统分析254.2.2 aes的硬件实现284.2.3 camellia的硬件实现324.2.4 系统测试与比较33结 论37致 谢38参考文献39北京电子科技学院 aes和camellia算法的软、硬件实现前 言2000年10月2日,美国的nist宣布采用rijndael算法作为aes(advanced encryption standard),并于2001年11月26日发布正式的197号标准aes标准。随后欧洲的nessie也选出了camellia和aes作为128bit分组算法的标准。camellia和aes都旨在被推广用于加密公共敏感、秘密信息。camellia和rijndael的安全性在其参与标准的评选过程中都已经通过了许多密码专家的测试和评估,在未来的一段时间内能够保证其抵抗各类已知的、未知的攻击和分析。就其良好的安全性和可实现性,这两个密码算法在我国也大受欢迎,并正在逐步取代des等密码算法成为信息安全应用中密码算法的主流。选用一个密码算法,不仅要考虑到其安全性,还要考虑到其实现的速度和资源消耗。本次毕业设计内容涉及camellia和aes的实现优化,分别做成两个模块,可用于以后的研究测试和应用。另外,比较二者实现的资源消耗和运行速度,为密码系统设计时算法的选用和实现提供依据。特别在fpga实现方面,选用有不同特性的芯片比较实现结果,找出不同芯片适合的实现风格,为以后的算法硬件实现提供参考。aes和camellia分别是sp结构和feistel结构的代表性密码算法。通过研究aes和camellia总结出sp结构和feistel结构的特性、实现优势,为新的密码设计选用结构提供参考。40北京电子科技学院 aes和camellia算法的软、硬件实现1 概述1.1密码学简介密码学是一门古老而又年青的科学。从公元前五世纪的皮带卷筒密码器发展到现代的公钥密码、椭圆曲线密码,密码学随着科技的发展不断向前并衍生出新的分支。在这过程中,密码学的应用领域也在不断扩大,从当初运用于军事发展到现在运用于百姓日常交流中的敏感信息加密。随着现代网络通信的快速发展,信息安全越来越受人重视,密码学也就发挥着越来越重要的作用。许多国家都投入了大量的人力物力进行密码研究,其中有为国防军事安全的,也有为保护政府敏感信息和民众私人通信的。由于处理器处理速度的迅速提高,des无法继续保证其加密安全性,美国国家标准和技术研究所(nist)于1997年1月1日发布公告征集新的加密标准,即aes,用于替代des和3des。nist的目标是确定一种保护敏感(无密级的)信息的、公开的、免费的并且全球通用的算法作为aes。在征集公告中,nist对算法作了最低要求:算法必须是对称密钥体制的分组密码,并且支持128位的分组长度和128、192、256位的密钥长度。2000年10月2日,nist正式宣布rijndael算法作为aes并开始征集公众评议,并于2001年11月26日发布了正式的197号标准aes标准。而欧洲委员会也于2001年1月开始支持一项称为nessie(new european schemes for signatures, integrity, and encryption)的工程,希望推出一套不仅包括分组密码,还包括流密码、hash函数、消息认证码、数字签名和公钥加密等在内的强安全性的密码标准。其中选用了camellia 和 aes 作为128bit 分组密码算法的标准。1.2 已发表的aes与camellia的研究结果aes和camellia都是近几年出现的全球瞩目的两个安全性较高、结构较为简单的密码算法,并且由此引来了全球包括我国的许多密码研究者和实现者的研究兴趣,到现在为止,已经产生了大量的研究成果。以下是对aes和camellia研究的部分发表成果:1 j. daemen and v. rijmen, aes proposal: rijndael, aes algorithm submission, september 3, 1999.2 tim good and mohammed benaissa, aes on fpga form the fastest to the smallest, 2005.3 kazumaro aoki and tetsuya ichikawa masayuki kanda, camellia: a 128-bit block cipher suitable for multiple platforms, september 26, 2001.4 final report of european project number ist-1999-12324, named new european schemes for signatures, integrity, and encryption, april 19, 2004.5 冯登国,林东岱,吴文玲,欧洲信息安全算法工程,2003年8月。6 胡予濮,张玉清,肖国镇,对称密码学,2002年8月。1.3 本论文研究意义camellia和rijndael的安全性在其参与标准的评选过程中都已经通过了许多密码专家的测试和评估,在未来的一段时间内能够保证其抵抗各类已知的、未知的攻击和分析。就其良好的安全性和可实现性,这两个密码算法在我国也大受欢迎,并正在逐步取代des等密码算法成为信息安全应用中密码算法的主流。选用一个密码算法,不仅要考虑到其安全性,还要考虑到其实现难度、实现的速度和资源消耗。本次毕业设计内容涉及camellia和aes的实现优化,并可分别作成两个模块,可用于以后的研究测试和应用。另外,比较二者实现的资源消耗和运行速度,为密码系统设计时算法的选用和实现提供参考。1.4 本论文的组织结构本文分共5部分,正文四个章节和结论。第一章 概述,对本文讨论对象和研究的意义进行简单的介绍;第二章 aes与camellia算法描述,详细描述本文所研究的两个算法;第三章 开发语言与开发环境介绍,介绍本文对应的算法设计所用的语言和环境,解释选择的原因;第四章 aes与camellia算法的实现,这是本次研究的主要工作也即是本文的主要内容,详细描述设计过程、算法实现细节和技巧,最后还对实现结果进行比较;结论,总结本次设计。2 aes与camellia算法描述2.1符号约定表示比特串的连接 表示比特异或运算表示有限域上的乘法,模数为表示系数在有限域上的多项式乘法,模数为 表示比特串循环向左移位 表示比特串循环向右移位表示比特与运算表示比特或运算表示特比位取补操作的下标表示是bits长表示的左半部分表示的右半部分 用于函数输入输出表示式中,表示一个bits长的输入或输出2.2 feistel网络与sp网络的介绍与比较feistel网络和sp网络是分组密码设计中的两种不同的整体结构类型,也是使用最多的结构类型。特别地,aes使用的是sp网络,而camellia使用的是feistel网络,本次研究即是通过研究这两个具体的具有代表性的密码算法研究feistel网络和sp网络之间的联系和区别。2.2.1 feistel网络feistel网络(又称feistel结构)把某一函数(通常称为f函数,又称轮函数)转化为一个置换。由于是horst feistel在设计分组密码时发明的,所以用了这位发明者的名字,并且因为des的使用而流行。当前世界上著名密码中还有twofish、mars、feal、gost、loki、e2 、blowfish、camellia 和rc6等是采用feistel结构的。(feistel结构还分平衡feistel和非平衡feistel,这里只讨论平衡feistel。)对于一个分组长度为bits的轮feistel型分组密码,其加密过程如下:step1:给定明文,记,其中是的左边bits,是的右边bits。step2:进行轮循环运算。根据下列规则计算,:这里,是轮函数,是由种子密钥生成的子密钥,为子密钥的长度。step3:输出密文在加密的最后一轮,为了使算法同时用于加密盒解密,略去“左右交换”。2.2.2 sp网络sp网络(又称sp结构,substitution & permutation net,spn)是feistel网络的一种推广,rijndael、safer和shark等著名密码算法都采用此结构。在这种密码结构中,每轮的输入首先经过一个由子密钥控制的可逆函数s,然后再被作用于一个置换(或一个可逆的线性变换)p。s被称为混淆层,主要起混淆的作用;p被称为扩散层,主要起扩散的作用。2.2.3 feistel网络与sp网络的比较由以上的介绍可知,feistel型密码具有“加解密相似”的实现优点,在硬件实现中能够节省硬件空间;而sp型密码在加解密中使用的是相逆的函数,无法共用模块。但是,feistel型密码的扩散一般较慢,例如算法需要两轮才能改变输入的每一比特;而sp型密码可以得到更快速的扩散,一轮即可改变输入的每一比特。另,为了抵抗密码分析,迭代密码一般会在第一轮加一个密钥控制的前期变换,在最后一轮加一个密钥控制的后期变换,例如aes、camellia、mars和e2等算法都采用了这样的措施。2.3 aes算法描述2.3.1 输入输出和中间状态与密钥aes是一个密钥迭代分组密码,分组长度为128bits,包含了轮变换对状态(aes中将轮变换的处理结果称为状态)的反复作用,用表示轮数,它依赖于密钥长度。表2.1 aes的轮数与密钥长度密钥长度(个字)468轮数()101214状态:aes的输入输出和中间的状态都是128bits,这里以标识,其中,。从左到右将划分为16个字节,将这16个字节排成一个二维数组密钥:aes的密钥可取128bits、192bits或256bits。密钥长度以4字节的字为单位来表示,密钥长度记为,。那么,将bits种子密钥从左到右划分为个字节,将这个字节排成一个二维数组2.3.2 aes的加密算法aes加密算法的c伪代码描述如下:aes(state, cipherkey)keyeexpansion(cipherkey, expandedkey);addroundkey(state, expandedkey0);for(i=1;inr;i+) round(state, expandedkeyi);finalround(state, expandedkeynr); round(state, kr)subbytes(state);shiftrows(state);mixcolumns(state);addroundkey(state, kr); finalround(state, kr)subbytes(state);shiftrows(state);addroundkey(state, kr); 这里round为中间轮变换,finalround为最后轮变换,二者区别在于finalround少了mixcolumns步骤。1、步骤subbytes步骤subbytes是aes密码中唯一的非线性变换,是一个砖匠置换。它将状态中的每个字节非线性地变换为另一个字节。每个字节做如下两个变换:step1:将每个字节都变换为有限域中的乘法逆元素,规定00的逆元为00;step2:对step1中的结果作仿射变换,仿射变换得定义如下:subbytes满足可逆性,且不存在不动点或相反的不动点。subbytes同样可以通过查表的方式实现。(subbytes表在有关aes的书都有介绍,这里不再赘述。)2、步骤shiftrows步骤shiftrows是一个字节换位,它将状态中的行按照不同的偏移量进行循环移位。如下:3、步骤mixcolumns步骤mixcolumns对一个状态逐列进行变换。4、步骤addroundkey状态序列与对应的子密码的每一比特按顺序进行位异或运算。2.3.3 aes的解密算法aes解密算法的c伪代码描述如下:aes(state, cipherkey)keyeexpansion(cipherkey, expandedkey);addroundkey(state, expandedkey0);for(i=1;inr;i+) invround(state, expandedkeyi);invfinalround(state, expandedkeynr); invround(state, kr)invshiftrows(state); invsubbytes(state);addroundkey(state, kr);invmixcolumns(state); invfinalround(state, kr)invshiftrows(state);invsubbytes(state);addroundkey(state, kr); 1、步骤invshiftrows步骤invshiftrows是步骤shiftrows 的逆移位。2、步骤invsubbytes步骤invsubbytes是步骤subbytes的逆变换. 3、步骤addroundkey同2.3.2的第4部份,只是轮子密钥按逆顺序取自扩展密钥。4、步骤invmixcolumns步骤invmixcolumns是步骤mixcolumns的逆变换。以矩阵乘法表示,即为:2.3.4 aes的密钥扩展加解密所需的总共个字的轮密钥都由个字的种子密钥扩展生成。其中 ,step1:,为个字种子密钥step2:for(i=1;i6 and i mod nk =4)temp = subword(temp);end if;= xor temp; 其中,rotword()的返回值为一个4字节的字,它是输入的4个字节字循环左移1字节的结果。rcon是常数,rconj=(,00,00,00), ,2.4 camellia算法描述2.4.1 camellia的加密算法camellia的分组长度亦为128bits,密钥长度为128bits、192bits或256bits,根据不同的密钥长度,加密轮数有略微不同。密钥长度为128bits时,使用3次6轮处理,需要18个轮密钥;密钥长度为192bits或256bits时,使用4次6轮处理,需要24个轮密钥。camellia的加密过程见图2.1、图2.2。图2.1 camellia的加密过程(密钥为128bits)图2.2 camellia的加密算法(密钥为192bits或256bits)1、子密钥camillia中子密钥都是由种子密钥扩展生成,请见2.4.3 camellia的密钥扩展。2、函数函数如图2.3所示。图2.3 camellia的轮函数函数定义如下:其中、为4个盒,它们和有限域上的逆函数在方式意义下等价,它们的代数式如下:、均可用查表实现。(这四个表在关于camellia的书中都有介绍,在此不再赘述。)其中、和定义如下:在有限域中约定,是中的一个元素,且满足;是中满足的一个元素。3、函数其中, 图2.4函数4、函数 其中, 图2.5函数 2.4.2 camellia的解密算法camellia的解密结构与加密结构类似,不同之处在于子密钥的使用顺序,见图2.6、图2.7。图2.6 camellia的解密过程(密钥为128bits)图2.7 camellia的解密过程(密钥为192或256bits)2.4.3 camellia的密钥扩展camellia的密钥扩展首先又密钥编排过程生成中间序列,并由种子密钥和中间序列通过移位生成子密钥,密钥编排算法如图2.8所示,输入为、,当密钥长度为128bits时输出,当密钥长度为192bits或256bits时输出和。当密钥为128bits时,种子密钥为 当密钥为192bits时,种子密钥为当密钥为256bits时,种子密钥为图2.8 camellia密钥编排算法 在密钥编排过程中,用到了6个64bits的常数,它们是表2.2 密钥为128bits时的子密钥表2.3 密钥为192/256bits时的子密钥3 开发语言与开发环境介绍本论文的目的在于,讨论aes、camellia在实际运用中各方面性能的对比,以得出一个可参考的结论,为两个算法的实际运用的选择提供参考。因而在设计中会采用实际开发中常用的开发语言和开发环境,特别在硬件方面会选用时下开发较常用的和最近推出的芯片类型。3.1 软件开发语言与开发环境的选择在软件方面,本次设计选用了microsoft visual c+6.0编译软件和c语言进行软件的编译和测试。c语言应用广泛,优点众多,易于理解,移植性强,接近伪码。另外,应用c语言进行算法测试具有以下优点:l 容易实现;l 有助于算法的理解;l 容易转换为其他软件硬件语言;l 为算法的其他实现方式提供测试向量。3.2 硬件开发语言与开发环境的选择3.2.1 开发环境本设计选用了quartus ii7.0 软件作为硬件开发环境。quartus ii 软件是altera公司推出的综合开发工具,集成了altera 的fpga/cpld 开发流程中所涉及的所有工具和第三方软件接口。通过使用此综合开发工具,设计者可以创建、组织和管理自己的设计。而quartus ii version 7.0 完全版本发布于2007年2月,是较新的一个版本。1、quartus ii具有的优点quartus ii 7.0软件对altera新的stratix iii、cyclone iii器件以及其他cpld、fpga和结构化asic系列提供软件支持。其性能和效能改进的其它亮点包括:l 多处理器支持:支持多处理器计算机在编译时进行并行处理,从而缩短了编译时间。quartus ii软件首次实现了由fpga供应商提供的多处理器支持,发挥了新的多核处理器的优势。l 分离窗口支持:quartus ii软件gui用户可以在桌面上独立移动各个工具窗口,方便了设计分析和管理。l 芯片规划器:新的集成平面规划器和芯片编辑器进行详细地设计平面分析和工程更改单(eco)编辑。l 高级i/o时序:支持设计人员在quartus ii软件中输入电路板走线参数,实现更精确的i/o分析,更迅速地达到时序逼进。l 引脚规划改进:从引脚规划器结果中自动建立顶层设计文件,实现更彻底的i/o分析,加速实现电路板设计。l windows 64位版本:quartus ii软件64位版本运行在microsoft windows xp professional x64上,设计人员可以充分利用计算机的4gbytes内存优势。l 扩展linux支持:除了red hat enterprise linux外,quartus ii软件还支持suse linux enterprise 9。 quartus ii软件7.0性能和效能在业界首屈一指,支持最新的cyclone iii系列,包括含有120,000个le、4mbits存储器以及288个乘法器的ep3c120器件在所有fpga供应商免费软件包所支持的器件中,它是密度最大的。其特性包括快速方便实现时序逼近的timequest时序分析器,缩短了编译时间的渐进式编译以及基于团队的设计,降低了功耗的powerplay功耗分析和优化工具,以及可进行系统级设计的sopc builder和dsp builder工具。2、quartus ii 7.0支持的器件quartus ii 7.0软件支持的器件,有 stratix iii 和 stratix ii gx、 stratix ii、 stratix gx、 stratix、 max7000s、 max7000b、 max7000ae、 max7000a、 max ii、 hardgopy ii、 flex6000、 flex10ke、 flex10ka、 flex10k、 cyclone iii、 cyclone ii、 cyclone、 apex20ke、 apex20kc、 apex ii、 acex1k。3.2.2 开发语言电子系统的设计主要有原理图输入法和硬件描述语言设计两种方法。原理图输入法是设计规模较小的电路时经常采用的方法,这种方法直接法设计的系统用原理图的方式表现出来,具有直观、形象的优点,尤其对表现层次结构、模块化结构更为方便。但原理图方式不够灵活,并且不利于将设计方案移植到asic中,所以原理图输入方法越来越少用,逐渐被hdl描述语言设计所取代。硬件描述语言(hdl,hardware description language)是一种用文本形式来描述和设计电路的语言。到目前,已有数十种硬件描述语言,但只有vhdl和verilog hdl以强大的功能和通用性适应于多领域、多层次,被普遍认同为标准hdl语言,先后成为ieee标准。它们都能形式化的、抽象的表式电路的结构和行为,支持逻辑设计中层次与领域的描述,可借用高级语言的特点来简化电路的描述,具有电路仿真与验证机制以保证设计的正确,支持电路描述由高层到低层的综合和转换,便于文档管理,易于理解和移植重用。本设计中选用vhdl语言,它具有较高的通用性,拥有广泛的设计群体,语法架构自由,也相对容易掌握。3.3 硬件器件的选择3.3.1 asic与fpga之间的选择硬件器件有专用集成电路(asic)或现场可编程逻辑阵列(fpga)两种。专用集成电路实现起来耗时较多,同时所需的费用也比较昂贵,而现场可编程逻辑阵列则能提供弹性的设计方式,并允许多次清除和重新烧录,可以反复地编程、擦除、使用或者在外围电路不动的情况下用不同软件就可实现不同的功能。表3.1是在数据处理性能、功能、设计开发过程三方面特性指标的比较。表3.1 fpga与asic特性比较fpga asic 数据处理性能特性并行处理数据能力支持支持流水线方法支持支持字长可变可变速度快非常快功能特性功能的配置性能不能抗干扰能力有限强对密钥访问的控制一般强开发设计过程硬件描述语言vhdl,verilog hdlvhdl,verilog hdl设计周期较长长开发工具成本较贵非常昂贵测试成本较贵昂贵维护及更新成本较贵昂贵从设计开发的工程来看,这两种方法系统设计和编程可以采用相同的硬件描述语言,只是在设计周期、设计所需工具的费用、测试及维护更新的费用上,asic方法要比fpga方法昂贵。在应用方面,fpga速度越来越高,综合其他方面的优势,已经有开始取代asic的趋势,所以在本次研究中只选用fpga 作为测试器件。这里的加密主要是指对数据进行的加密,硬件加密最突出的优点是速度比软件加密快很多,因此经常用于大量的存储数据的加密和对速度有较高要求的通信数据的加密。因此,在本次研究中将依照以下标准选用测试的器件:l 当前运用较广泛的fpga器件;l 有发展前景的fpga器件;l 厂商新推出的fpga器件。3.3.2 器件选择与介绍由于当前altera的fpga运用较为广泛,且具有代表性,所以在本次测试中只选用了altera推出的芯片系列。但是可以由此将测试结果推广到其他fpga芯片中。以下对选用的altera的fpga器件做一个简单的介绍。1、stratix ii系列ep2s15f484c3 器件stratix ii器件的突出特点是90nm+alm(自适应逻辑模块),可实现最大化的集成度,和以往的大容量体系相比,大大降低了成本,并且支持128位aes加密。stratix ii器件的市场一直在扩大,成为主流器件,并将继续保持较长的一段时间。表3.2 ep2s15器件的性能表器件m512s ram块m4ks ram块ram总容量dsp块嵌入式硬件乘法器()锁相环(pll)最大用户i/o引脚逻辑单元(les)ep2s151047841932812966343124802、stratix系列ep1s10f780c5器件stratix在2002年初推向市场刚开始就以其突出的性价比占领了高端fpga市场。表3.2 ep1s10器件的性能表器件m512s ram块m4ks ram块mega ram块ram总容量dsp块嵌入式硬件乘法器()锁相环(pll)最大用户i/o引脚逻辑单元(les)ep1s10946019204486486426105703、cyclone 系列ep1c20f400c6器件cyclone fpga基于stratix 的工艺构架,重新定义它的特性和规格,以降低成本,其应用只要是定位在终端市场,如消费类电子、计算机、工业和汽车等领域。表3.3 ep1c20器件的性能表器件m4ks ram块ram总容量锁相环(pll)最大用户i/o引脚逻辑单元(les)ep1c20642949122301200604、cyclone ii 系列ep2c20f484c6器件cyclone ii fpga 是基于stratix ii 的90nm 工艺推出的低成本的fpga,在芯片总体性能上要优于cyclone 系列器件。表3.4 ep2c20器件的性能表器件m4ks ram块ram总容量嵌入式硬件乘法器()锁相环(pll)最大用户i/o引脚逻辑单元(les)ep2c2052239616524315187524 aes与camellia算法的实现4.1 软件实现4.1.1 aes软件实现的关键环节分析方法1:aes的软件实现,将按aes原理每一步骤分别实现,不进行步骤整合。主要影响aes实现结果的是subbytes(),mixcolumns()的实现。1、s-盒的实现s-盒的实现中包含8bits数在上求逆的步骤,这是s-盒实现的一个关键点。如果采用直接计算的方式实现上求逆,需要消耗大量的时间,从而影响到整个算法的实现速度。因此,拟采用查表的方式一次性实现s-盒中的所有运算。在本设计中以一个256个字节表的方式实现s-盒。2、mixcolumns()和inmixcolumns()的实现mixcolumns()和inmixcolumns()的实现关键在于上乘法的步骤。在本设计中同样以查表方式实现上乘法,即mul(a,b) = alogtable(logtablea + logtableb)%255。方法2:依32位处理器特性,以更适合32位处理器的数据处理方式,使实现速度达到更快。记轮输入的状态阵列为,对应轮输出的状态阵列为,该轮子密钥的状态阵列为。设、各自表示输入、输出、子密钥的状态阵列上行列元素。于是轮函数可以表示为;定义4个真值表、,它们都是8比特输入/32比特输出的函数,即都是4字节字的256阶阵列表。定义如下:;。4个真值表共占用4k字节的空间。利用这4个表将轮函数写为:;进一步,即可以将4个真值表缩减为1个真值表,只占用1k字节的空间,但每个列需要3次额外的循环移位操作为代价。轮函数写为:4.1.2 camellia软件实现的关键环节分析camellia的软件实现中,难点在于移位环节,关键点在于s-盒、函数p实现。1、移位在camellia中的移位位数不满足8的整数倍数,实现起来比较复杂。在中用到32位数据的循环移位;在密钥扩展中用到128位数据的循环移位。本次设计中将二者分别实现。32位数据的循环移位实现如下,其中n为移位的位数:step1:完成8的整数倍移位n8 = n/8;m8 = n%8;k=1;for(;n8=1;n8/=2)if(n8%2)for(h=0;h-1;j-=k)tmp2 = sj+h;sj+h = tmp1;tmp1=tmp2;k=k*2;step2:完成剩下的小于8的移动位数k1 = s0/bm8-1; for(j=3;j=0;j-)k2 = sj/bm8-1;sj = sj*b7-m8+k1;k1 = k2; 128位数据的循环移位以类似的方式实现。2、s-盒camellia中有4个s-盒,但都是由同一个s盒通过输出移位或输入移位产生的。为保证实现的速度,本设计中编辑了4个s-盒表,以查表方式实现s-盒。3、函数p编辑8行8列矩阵,p88 = 1,0,1,1,0,1,1,1, 1,1,0,1,1,0,1,1, 1,1,1,0,1,1,0,1, 0,1,1,1,1,1,1,0, 1,1,0,0,0,1,1,1, 0,1,1,0,1,0,1,1, 0,0,1,1,1,1,0,1, 1,0,0,1,1,1,1,0;for(i=0;i8;i+)ti = zi;zi = 0; for(i=0;i8;i+)for(j=0;j8;j+)if(pij=1)zi = tj; 4.1.3软件实现结果比较与分析aes与camellia的软件实现比较主要还是关注其实现速度的比较。密钥安装时间是指完成一次密钥扩展的时间;加解密的时间是指完成一次加密或解密的时间,其中加解密的速度(也即是吞吐量)以每秒处理的数据量为评估对象,。表4.1 32bits处理器(visual c+,pentium 4,1.69ghz,256mb内存)算法密钥安装(us)加密解密(us)(mbits/sec)(us)(mbits/sec)aes方法118373.46572.25方法24.80.43200.4320camellia23225.82225.82aes/camellia20.87%1.82%5500%1.82%5500%表4.1中aes和camellia的比较都是以方法2实现的aes与camellia的比较,以下的比较也一样。1、aes与camellia的比较其中,aes方法1的解密比加密慢的原因在于mixcolumns和inmixcolumns的区别。在mixcolumns中需要进行bij = mul(2,aij) mul(3,a(i + 1) % 4j) a(i + 2) % 4j a(i + 3) % 4j,其中包含6次查表;而在inmixcolunms中需要进行bij = mul(0xe, aij) mul(0xb, a(i+1) % 4j) mul(0xd, a(i+2) % 4j) mul(0x9, a(i+3) % 4j),其中包含12次查表。camellia的加密和解密的速度相同,是由于camellia加解密的对称性。在表4.1中可以看到aes方法2的速度明显比aes方法1和camellia快出两个数量级。首先,在恰当的方式下aes的软件实现比camellia快;其次,一个算法的实现不仅和算法结构有关,还与实现方式有关,在软件编程方式下,编程风格将大大影响到算法的实现性能。2、结构的比较结构的比较是指输入的每一比特都发生改变的速度,即sp结构一轮的速度与feistel结构两轮的速度比较。由以下公式得到两个结构实现速度: 表4.2 sp结构与feistel结构软实现实例比较sp结构feistel结构(us)0.042.444.2 硬件实现4.2.1 硬件实现系统分析1、性能参数一个系统结构的优劣需要通过参数指标来衡量,在密码算法的硬件实现上,最关键的参数是速度和面积。同时这两个参数又是互相矛盾的,在面积一定的情况下,速度将受到限制,也就是说速度的增加要义牺牲面积为代价。与速度有关的参数主要有吞吐量、带宽和加解密时延。一般将单位时间内完成加密或解密的数据量称为加密或解密的吞吐量,记为throughput,单位为mbit/s;称单位时间内完成加密或解密过程的次数为带宽,即为bandwidth;把完成一个分组加密或解密所需的时间称为加密或解密时延,记为latency。由以上定义可以看出,吞吐量可以很好的反映数据处理的速度。这里的面积指的是电路面积,在硬件实现中电路面积直接关系到系统实现的成本。对fpga而言,可以从所消耗的资源来衡量,如逻辑单元、存储单元功耗等。2、实现整体结构与输入输出端口定义由于算法实现的各项性能与算法有关也同样与实现方式有关,为了能够真正体现算法的比较,本次设计中两个算法将使用相同的整体结构,而其中具体细节将按算法特性进行调整,因此也将使用统一的输入输出端口和信号的定义。(1)同时实现加解密与密钥扩展aes和camellia的密钥扩展过程、加密过程、解密过程三个之间都有可以共享的部分,因此本设计中都将三个过程做在一个模块中,以方便共享模块的调用,节省整体实现空间。采用思路是:模块整合、时间分段的方式。也即是三个过程整合在一个模块中,但是运行哪种过程由输入信号控制,三个过程的实现时间是完全分离的。这种方式的密码实现将适合于无反馈模式和反馈模式:电子密本模式(ecb)、计数器模式、密码分组链接模式(cbc)、密码反馈模式(cfb)、输出反馈模式(ofb)。(2)输入输出端口信号的定义依照以上(1)的思路,规定顶层模块的输入有:l 时钟信号clkl 复位信号reset(低电平有效)l 输入序列x(128bits)l 加密选择信号crypt(低电平为加密,高电平为解密)l 密钥扩展选择信号kc(低电平为加解密,高电平为密钥扩展)l 开始信号en(闲状态时在时钟上升沿为高电平,开始处理过程)输出有:l 输出序列y(128bits)l 密钥扩展过程信号k_en(高电平)l 加解密过程信号c_en(高电平)总共需要263个端口。图4.1 输入输出端口信号时序定义由k_en 和c_en可以判断出忙闲状态,当两个信号都为低电平时表示模块处于闲状态;当其中有一个电平为高电平时(当然两个信号不可能同时处于高电平),表示模块处于忙状态。当模块处于忙状态时,en信号无效。当模块处于闲状态,en在时钟上升沿为高电平,且该时刻kc为高电平,开始密钥扩展过程。在密钥扩展过程中,x作为种子密钥输入,不产生输出,扩展结果储存在模块中用于接下来的加解密过程,并在reset信号为低电平时清除或被下一次密钥扩展结果覆盖。这有利于密钥的保护,增加算法实现的安全性。密钥扩展过程中,信号k_en保持高电平。当模块处于闲状态,en在时钟上升沿为高电平,且该时刻kc为低电平,此时若crypt为低电平则开始加密过程,高电平则开始解密过程。加解密过程中,x作为初始序列(明文或密文)输入;y作为处理结果输出。加解密过程中,信号c_en保持高电平。(3)轮实现两个算法的加解密都是通过轮循环的方式实现的,在实现时只实现一轮的逻辑电路,再通过循环的方式实现整个的加解密过程,这便是以时间换空间原则,使算法占用较少的硬件空间。轮循环处理大体结构如图4.2。寄存器图4.2 轮循环结构图可以看出,一个时钟要完成一次处理,最大时延由轮处理电路决定,多路选择和轮函数的输入选择,由系统控制信号决定。在循环结构中,引入寄存器有利于信号的稳定,避免反馈环路。其中的复位信号(reset)提高整个密码实现的安全性。3、关键技术(1)并串转换并串转换技术即是采用以时间换空间原则,对于一组128bits数据将要分成多组数据时间上串行通过其中部分子模块。首先,将输入数据以寄存器方式储存,在不同时段以赋值方式subin = priin(m downto n)将数据分组输入子模块中处理,再将结果存入寄存器中等待处理完毕并行输出。 (2)模块复用在硬件中的模块复用有有两种情况:a、长序列分组后进行相同的模块处理。如在aes中,subbytes过程128bits序列分为
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年榆林职业技术学院外聘兼课教师招聘(15人)笔试备考题库及答案解析
- 2026中俄数字经济研究中心(厦门市人工智能创新中心)多岗位招聘考试备考题库及答案解析
- 2026四川绵阳市西南科技大学人才招聘考试备考题库及答案解析
- 地基施工基础支护结构施工方案
- 2025年黑龙江林业职业技术学院单招综合素质考试题库及答案解析
- 2026年新余职业技术学院春季招聘临聘教师27人笔试参考题库及答案解析
- 高校教室空间优化设计方案
- 锤击预制桩沉桩施工方案
- 2026甘肃中材科技(酒泉)风电叶片有限公司招聘144人笔试备考题库及答案解析
- 2026北京市丰台区玉泉营街道社区卫生服务中心招聘3人笔试参考题库及答案解析
- 小小科学家物理(初中组)课时力学一
- 《森林培育学》第二章 森林立地
- 四川大学化工复试资料 四川大学化工原理(I)教学大纲
- GB/T 8464-2023铁制、铜制和不锈钢制螺纹连接阀门
- 万物皆数读后感10篇
- 【《中国近现代史纲要》教学案例】第七章+为新中国而奋斗
- GB/T 25384-2018风力发电机组风轮叶片全尺寸结构试验
- GB/T 19215.1-2003电气安装用电缆槽管系统第1部分:通用要求
- GB/T 18271.3-2017过程测量和控制装置通用性能评定方法和程序第3部分:影响量影响的试验
- 群论及其在晶体学中的应用电子教案课件
- 淮阴侯列传(使用)课件
评论
0/150
提交评论