伽罗瓦域GF(2^128)乘法器的设计.doc_第1页
伽罗瓦域GF(2^128)乘法器的设计.doc_第2页
伽罗瓦域GF(2^128)乘法器的设计.doc_第3页
伽罗瓦域GF(2^128)乘法器的设计.doc_第4页
伽罗瓦域GF(2^128)乘法器的设计.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

伽罗瓦域GF(2128)乘法器的设计2011年1月22日摘要伽罗瓦域GF(2128)乘法器是Ghash算法(一种用于加解密系统散列算法)的核心部件,其速度与硬件开销决定着整个Ghash模块的整体性能。本文通过Arash Reyhani-Masoleh 提出的一种算法,进行分析设计,然后用Verilog编程进行仿真,最后用Synplify 进行综合。最后,通过与一些其他的乘法器实现方法相比较,可以知道,本文提供的伽罗瓦域乘法的算法比较简单易懂,依现在的硬件来看也是很容易实现。关键词乘法器,伽罗瓦域,系统优化,Verilog语言,综合,Model Sim,Xilinx ISE,仿真AbstractA finite filed multiplier architecture is the central part of the Ghash Algorithm (an algorithm for an outstanding encryption system), whose speed and cost determine the property of the whole Ghash module. In this paper, we use the Verilog language to implement the GF(2128) multiplier with the algorithm proposed by Arash Reyhani-Masoleh. Then, we use the Model Sim for simulation and Synplify for Synthesis. And, through the comparison between several other ways to implement this multiplier, we can draw the conclusion that our way is quite easy to understand and its wont occupy too much hardware resources.KeywordMultiplier, Finite Yield, Galois Field, Arash Reyhani-Masoleh, Verilog, Simulation, System Optimization, GF(2128),Model Sim,Xilinx ISE目录摘要2关键词2Abstract3Keyword3目录41 题目71.1 内容71.2 设计要求72 背景介绍72.1 伽罗瓦域72.2 GCM加密解密82.2.1 加密82.2.2 解密82.3 Arash Reyhani-Masoleh 算法93 设计思路103.1 初步构想103.2 程序流程图114 功能模块124.1 乘法器主程序124.1.1 计算Q矩阵124.1.2 计算Q矩阵的转置Qt134.1.3 计算L矩阵134.1.4计算U矩阵134.1.5 计算Qt与U的乘积QtU134.1.6 计算QtU和L的和LQtU144.1.7 计算LQtU和dinb的乘积:144.2 测试模块144.2.1 initial块144.2.2 always 块155 Model Sim仿真155.1 仿真步骤155.1.1创建工程155.1.2添加verilog文件165.1.3编译工程185.1.4仿真运行185.2 波形分析215.2.1 仿真后主要信号、变量的波形图215.2.2 mul_128模块的输入信号和输出信号215.2.3 dina和dinb输入215.2.4 Q126:0127:0的值225.2.5 Q的转置Qt127:0126:0的值225.2.6 dina_old, dinb_old信号的波形图235.2.7 说明236 综合236.1 综合步骤236.2 结果分析247 源码与注释247.1 主程序247.2 测试程序278 几种乘法器的比较288.1 Montgomery乘法器288.2 Mastrovito乘法器288.3 Karatsuba乘法器298.4 正规基乘法器309 致谢与心得309.1 组内分工309.2 心得319.3 致谢3310 参考文献331 题目1.1 内容伽罗瓦域GF(2128)乘法器是Ghash算法(一种用于加解密系统散列算法)的核心部件,其速度与硬件开销决定着整个Ghash模块的整体性能。本题目的最终目的是:完成伽罗瓦域GF(2128)乘法器的设计。1.2 设计要求1) 用verilog语言进行编程,语法要符合可综合设计的要求;2) 用modelsim完成系统功能仿真;3) 用synplify 或ISE进行综合;4) 完成设计报告。(设计报告中要对现有的几种伽罗瓦域GF(2128)乘法器实现方法进行比较,分析优劣)2 背景介绍2.1 伽罗瓦域 有限域(或伽罗华域)包含有限个元素,并定义了两种操作加法与乘法,这两种操作都是针对二元的操作。GF(2)是最小的有限域,它只含有两个域元素0和1。加法和乘法都进行模2操作,因此加法等效与逻辑异或,而乘法等效于逻辑与。有限域可以用非可约多项式来定义,令GF(2m)是的根,即。则称为多项式基或标准基,GF(2m)中的每个元素都可以根据多项式基来表示。比如,对于,,可以表示为,其中即为基下的坐标。假设,则。2.2 GCM加密解密2.2.1 加密令n和u表示一对特殊的非负整数,因此,明文的总位数为:(n1)128+u,1u128.明文包括n个位字符串,最后一个字符串的位数是u位,其他字符串都是128位。这些字符串分别表示为:P1,P2,,Pn-1,P+n,我们称这些位字符串为数据块,即使最后一个位字符串可能不是一个完整的数据块。类似的,密文分别表示为:C1,C2,,Cn-1,C+n,最后一块数据块 C+n的位数为u。冗余验证数据A分别表示为A1,A2,,Am-1,A+m,最后一个位字符串A+m可能不是整块且长度为v,m和v表示一对特殊的非负整数,因此A的总位数为:(m1)128+v,1v128。验证加密操作定义如下:连续计数值由函数incr()产生。把该函数变量值最右边32位当做非负整数,并且最低有效位在右边,加法操作主要是针对这最右边的32位。准确地说,incr(F|I)的值为F|I+1 mod 232)。函数GHASH的定义是GHASH(H,A,C)=Xm+n+1,A和C的格式如前所述,变量Xi,i=0,m+n+1,定义如下:2.2.2 解密 验证解密操作与加密操作相类似,不同的是算散列值和加密的顺序颠倒了。具体定义如下面方程所示: 比较由解密操作计算出的标签T与标签T。如果两者相等(包括长度和值),那么密文将被返回。否则,返回特殊标识符FALL。2.3 Arash Reyhani-Masoleh 算法 对于有限域GF(2m)乘法C=AB,Arash Reyhani-Masoleh等人证明,乘积C的坐标可以通过一个带矩阵Q的方程计算出来。该方程为:,其中是的根,而T表示矩阵的转置。矩阵Q的准确定义与证明可以在1中找到,矩阵Q仅取决非可约多项式。Ghash的多项式。下面我们直接给出GF(2128)中的矩阵Q。 对于域GF(2m),矩阵L如下: (1)对于域GF(2m),矩阵U如下: (2) 由(1)(2)可知,在已知输入A的情况下,可以很容易地得到矩阵L,U,因此,根据,我们即可算出有限域乘法的乘积。3 设计思路3.1 初步构想伽罗瓦域乘法器的核心是这个公式:所以,我们要做的工作就是如何实现一步一步地按照这个公式把输入的两个128位并行数据计算得出结果。根据背景介绍里面的算法描述,我们知道,Q矩阵是只与GF(2m)中的m有关,而本文的m是固定的,为128,所以,Q矩阵的所有值都是固定了的。那么,我们可以在初始化语句里面就把Q矩阵计算出来。另外,考虑到计算的时候用的是Q矩阵的转置,那么,在初始化程序断里面就可以把Qt也一并求出来。还是根据算法描述可以知道,L矩阵和U矩阵是只与输入的dina有关,那么,我们可以设置一个always语句,检测dina的输入,任何时候只要dina有输入,那么程序就立即计算出对应的L矩阵和U矩阵。当然,还需要编写一段复位语句,使程序的所有变量、参数等等复位。另外,由于仿真一般最开始都是先复位,也相当于初始化,那么,可以把计算Q和Qt两个矩阵的代码放到复位语句块里面。考虑到为了降低芯片的计算量,我们可以是在每个时钟周期的上升沿检测复位信号rst和使能信号en,当复位信号rst为低电平的时候,进行复位操作,如果不是低电平,再检测使能信号en,如果en为高电平(表明允许计算)才继续下一步。这时可以设置一个标志位flag,以检测本次的输入与上次的输入是否一样(假设相等的时候flag=0),如果flag=0,表明上次输入的dina和dinb与本次的相等,那么,也不继续进行下面的运算;只有当flag=1时,才进行伽罗瓦域乘法。根据,我们应该先计算Qt与U的乘积QtU,然后计算QtU和L的和LQtU,最后计算LQtU和dinb的乘积,即为dina和dinb的伽罗瓦域乘积。同时,考虑到verilog不支持类似于C语言的二维数组这种数据类型,只能使用存储器类型,即,不能对存储器的每一个字节单独操作,那么,必须使用一些中间变量来获取存储器的值,计算出结果之后再写回到存储器,这部分会占程序的大部分,而且很容易出错。由以上分析可知,只有在每个时钟周期的上升沿时候,检测到(rst=0)&(en=1)&(flag=1)的时候,才计算dina和dinb的伽罗瓦域乘积。计算出dout之后,置ready_o为高电平,表明dout线上的信号为有效值。最后,由于这仿真的波形比较复杂,手工设置输入信号太麻烦,也达不到要求,所以,我们需要编写一段testbench文件来测试主程序。Testbench文件应该达到以下要求:1, 标准的时钟方波信号,可以通过always #50 clk=clk; 实现;2,复位操作可以使在initial里面加入以下语句:rst=1;#20 rst=0;#60 rst=1;3,使能位置高电平,通过#60 en=1; 实现;4,dina和dinb的输入。3.2 程序流程图 根据初步构想,我画出以下的程序流程图,简单地描述程序的运行状态。 4 功能模块4.1 乘法器主程序4.1.1 计算Q矩阵Q0127:0=128he1000000000000000000000000000000; for(i=1;i1; Q121127:0=128he1000000000000000000000000000070; Q122127:0=Q121127:01; Q123127:0=Q122127:01; Q124127:0=Q123127:01; Q125127:0=Q124127:01; Q126127:0=128he6080000000000000000000000000003;4.1.2 计算Q矩阵的转置Qt for(i=0;i128;i=i+1) begin for(j=0;j127;j=j+1) begin temp127:0=Qj127:0; temp4126-j=temp127-i; if(j=126) Qti126:0=temp4126:0; end end4.1.3 计算L矩阵always(dina)begin L127127:0=dina127:0; for(i=0;i127;i=i+1) L126-i127:0=L127-i127:01; for(j=1;j1;end4.1.5 计算Qt与U的乘积QtUfor(i=0;i128;i=i+1) begin temp4126:0=Qti126:0; for(j=0;j128;j=j+1) begin for(k=0;k127;k=k+1) begin temp127:0=Uk127:0; temp1127-j=temp1127-j(temp4126-k&temp127-j); end if (j=127) QtUi127:0=temp1127:0; end end4.1.6 计算QtU和L的和LQtU for(i=0;i128;i=i+1) begin temp127:0=Li127:0; temp1127:0=QtUi127:0; for(j=0;j128;j=j+1) begin temp2j=tempjtemp1j; if(j=127) LQtUi127:0=temp2127:0; end end4.1.7 计算LQtU和dinb的乘积: for(i=0;i128;i=i+1) begin temp1127:0=LQtUi127:0; for(j=0;j128;j=j+1) temp2127-i=temp2127-i(temp1127-j&temp127-j); end4.2 测试模块4.2.1 initial块initial begin clk=0; en=0; rst=1; dout127:0=0; #20 rst=0; #60 rst=1; en=1; #100 dina=128b0; dinb=128b0; #200 dina=128h4283_1ec2_2177_7424_4b72_21b7_84d0_d49c; dinb=128hb83b533708bf535d0aa6e52980d53b78; #70 dout=128h9e2213794cbee38902b8e6ae8cd41a9f; #130 dina=128h90000000000000000000000000000012; dinb=128h00000000000000000000000000000002; #70 doutStart Simulate选择testbench文件,此处为test_mul_128,点击“”单击右键,选择将所有信号(或你希望观察的信号)添加到wave窗口中选择simulaterunrun all,出现如下波形:5.2 波形分析5.2.1 仿真后主要信号、变量的波形图5.2.2 mul_128模块的输入信号和输出信号 由图可以看出,最开始的时候rst置低电平进行复位操作,然后为高电平,同时使能信号en也变高,表示现在可以接受输入了。dina和dinb最开始输入全是0,dout大概延迟一个时钟周期之后输出,同时ready_o信号变为高电平,表明dout线上的数据时dina和dinb的伽罗瓦域乘积。5.2.3 dina和dinb输入dina=128h42831ec2217774244b7221b784d0d49c;dinb=128hb83b533708bf535d0aa6e52980d53b78;时的输出dout:dout = 128h9e2213794cbee38902b8e6ae8cd41a9f。得到的值与理论计算值相等,表明程序应该是正确的。(理论计算值是使用matlab编写的一段GF(2128)域内的乘法运算,由于matlab自带维度低的伽罗瓦域乘法、并且矩阵运算及其方便,所以编写m=128的有限域乘法的算法比较容易)这是输入为:dina=128h90000000000000000000000000000012;dinb=128h000000000000000000000000000000002;时的输出dout:dout = 128h200000000000000000000000000000a3。依然是与理论计算值相等。5.2.4 Q126:0127:0的值通过验证一些截图给出的15组Q的值,可知Q与理论值相等。5.2.5 Q的转置Qt127:0126:0的值通过验证给出的15组Qt的值可以知道Qt与理论值相等。5.2.6 dina_old, dinb_old信号的波形图有图可以看出每次计算出dout的值之后,dina_old和dinb_old都成功地立即获得了当前的dina和dinb,为了与下次输入的dina和dinb相比较,当二者相等的时候程序不进行计算,只是保持原来的输出。5.2.7 说明 其他的一些中间变量,比如 L、 U、 temp等等,由于光看波形不好验证是否正确,所以我没有把这些信号的波形拿来验证,只取了一些简单的来验证。当然,最主要的是输出dout正确,那中间的过程不出意外应该是没有问题的,所以也就不必去一一验证了。6 综合6.1 综合步骤 (由于时间问题、程序编写不规范等等问题,最终没有完成综合)6.2 结果分析 估计是一大片一大片的门门门门门门门门门门门门门门门门门门7 源码与注释7.1 主程序主程序:mul_128(clk, rst, en, dina, dinb, dout, ready_o)/*乘法器主程序输入两个128位并行数a和b、以及功能信号,可得到乘法结果c*/module mul_128(clk, /时钟信号,方波 rst, /复位信号,低电平有效 en, /使能信号,高电平有效 dina, /a输入口 dinb, /b输入口 dout, /输出端口 ready_o); /输出有效端,高电平有效input clk,rst,en; /输入信号input 127:0 dina,dinb; /输入信号output ready_o; /输出信号output 127:0 dout; /输出信号reg 127:0 dout; reg 127:0 dina_old,dinb_old; /保存上一次输入的a和b的值,防止重复计算reg ready_o; reg 127:0 L127:0,QtU127:0,LQtU127:0; /伽罗瓦域reg 127:0 U126:0,Q126:0; /乘法器实reg 126:0 Qt127:0; /现过程中reg 127:0 temp,temp1,temp2; /的一些中reg 126:0 temp4; /间变量integer i,j,k; /循环变量 integer flag; /标志位,表示本次输入的a和b与上次的相同always(dina) /a端一旦有输入,就立即计算出a对应的L矩阵begin L127127:0=dina127:0; for(i=0;i127;i=i+1) L126-i127:0=L127-i127:01; for(j=1;j1;endalways(posedge clk) /每个时钟上升沿检测a和b输入端begin if(rst) /在程序最开始,是复位信号有效,进行一定初始化操作 begin for(i=0;i127;i=i+1) /初 begin /始 Qti126:0=0; /化 QtUi127:0=0; /程 LQtUi127:0=0; /序 end /运 /行 QtU127127:0=0; /过 LQtU127127:0=0; /程 dout127:0=0; /中 temp127:0=0; /的 temp1127:0=0; /一 temp2127:0=0; /些 temp4126:0=0; /变 ready_o=0; /量 Q0127:0=128he1000000000000000000000000000000; /计 for(i=1;i1; /算 Q121127:0=128he1000000000000000000000000000070; /Q Q122127:0=Q121127:01; /矩 Q123127:0=Q122127:01; /阵 Q124127:0=Q123127:01; /所 Q125127:0=Q124127:01; /有 Q126127:0=128he6080000000000000000000000000003; /值 for(i=0;i128;i=i+1) /计 begin /算 for(j=0;j127;j=j+1) /Q begin /矩 temp127:0=Qj127:0; /阵 temp4126-j=temp127-i; /的 if(j=126) Qti126:0=temp4126:0; /转 end /置 end /值 end else if(en) /使能信号高电平有效 begin flag=0; /使标志位置0,如果此次输入与上次不一致,则flag=1 if(dina!=dina_old)|(dinb!=dinb_old) flag=1; if(flag=1) /此次输入的a和b的值与上次不同 begin temp127:0=0; /一些初始化语句 temp1127:0=0; temp2127:0=0; temp4126:0=0; for(i=0;i128;i=i+1) /计算Q的转置Qt矩阵与U矩阵的乘积QtU begin temp4126:0=Qti126:0; for(j=0;j128;j=j+1) begin for(k=0;k127;k=k+1) begin temp127:0=Uk127:0; temp1127-j=temp1127-j(temp4126-k&temp127-j); end if (j=127) QtUi127:0=temp1127:0; end end temp127:0=0; /一些初始化语句 temp1127:0=0; temp2127:0=0; temp4126:0=0; for(i=0;i128;i=i+1) /计算QtU与L的和LQtU begin temp127:0=Li127:0; temp1127:0=QtUi127:0; for(j=0;j128;j=j+1) begin temp2j=tempjtemp1j; if(j=127) LQtUi127:0=temp2127:0; end end temp127:0=0; /一些初始化语句 temp1127:0=0; temp2127:0=0; temp4126:0=0; temp127:0=dinb127:0; for(i=0;i128;i=i+1) /计算LQtU与dinb的乘积,即为a和b的乘积dout begin temp1127:0=LQtUi127:0; for(j=0;j128;j=j+1) temp2127-i=temp2127-i(temp1127-j&temp127-j); end dout127:0=temp2127:0; dina_old127:0=dina127:0; /dina_old获取本次输入的a的值 dinb_old127:0=dinb127:0; /dinb_old获取本次输入的b的值 ready_o=1; /计算出结果后,把dout送到线上,并用ready_o高电平表示数据有效 end endendendmodule7.2 测试程序测试程序:test_mul_128()/*testbench 测试文件主程序为 mul_128(clk,rst,en,dina,dinb,dout,ready_o)每个变量、输入、输出等都与主程序的命名一致*/module test_mul_128();reg clk,rst,en; /时钟信号、复位信号、使能信号reg 127:0 dina,dinb; /两个128位的并行输入端wire 127:0 dout; /128位并行输出端wire ready_o; /输出有效端 mul_128 mul(.clk(clk),.rst(rst),.en(en),.dina(dina), .dinb(dinb),.dout(dout),.ready_o(ready_o); /调用mul_128模块 initial /初始化语句块beginclk=0; /时钟初始化为低电平 en=0; /使能信号端初始化为低电平 rst=1; /复位信号端初始化为高电平 #20 rst=0; /20ns后,复位信号置高电平 #60 rst=1; en=1; /60ns后,复位信号置低电平,使能信号置高电平 #100 dina=128b0; /100ns后,a口输入0 dinb=128b0; /b口输入0 #200 dina=128h42831ec2217774244b7221b784d0d49c; /200ns后,a口输入第二个数据 dinb=128hb83b533708bf535d0aa6e52980d53b78; /b口输入第二个数据 #200 dina=128h90000000000000000000000000000012; /200ns后,a口输入第三个数据 dinb=128h00000000000000000000000000000002; / b口输入第三个数据 #400 $stop; /400ns后,停止仿真endalways #50 clk=clk; /每隔50ns,时钟信号翻转一次,形成周期性方波 endmodule8 几种乘法器的比较8.1 Montgomery乘法器目前最为学界熟知和广泛研究的有限域乘法器是Montgomery算法乘法器。Montgomery算法是1985年由Montgomery发表在著名的“ModularMultiplication without Trim Division”一文中【3J,由于它用乘法运算替代运算复杂度高的乘逆运算,大大降低了除法的复杂度,因而受到了广泛的应用。早期设计的Montgomery乘法器沿用了经典的Montgomery乘法的定义,只针对素数域。1996年,Koc和Acar成功地将Montgomery乘法算法移植到二元域上。这以后,大量高效的二元域上Montgomery乘法和指数运算的软件实现被提出来,同时利用稍稍对Koc和Acar方法加以扩展的位并行乘法器和平方器也被设计得到,主要针对某一类特殊的有限域。8.2 Mastrovito乘法器二元域并行多项式基底乘法器由Bartee和Schneider首先提出。基于不可约多项式,这一应用需要m3一m个异或门。由于如此高的电路复杂度和结构上的低规则性,使得早期并行结构的乘法并不具有优势。Mastrovito接着提出了一种算法和乘法器结构(后来被称为Mastrovito算法乘法器)用于PB乘法。该乘法器由f-network和IP(m)两部分构成,其对应的硬件体系结构见图一和图二。因为f(x)GF(2)x,所以f-network的复杂性与使用的不可约多项式有关,因此我们仅根据BSP模型分析IP(m)部分的空间复杂性和时间复杂性。在IP(m)部分,首先是Bj,和Fij(J=o,m-1)相乘,需要m个与门在一个Ta时间步内完成,其中乃表示一个与门的时间延迟:接着用(m-1)个异或门在log2m步内完成m个乘积的加法,该计算过程的计算时间为log2mTx,其中,Tx表示一个异或门的时间延迟。8.3 Karatsuba乘法器 大多数有限域上的乘法运算算法都是两步完成:第一步是多项式乘法,第二步是取模运算。即假设A(x),B(x)GF(2m),首先计算多项式乘法:C(x)=A(x)B(x)接下来计算:C(x)=C(x)modP(x)第一步通常采用经典(Classic)的多项式乘法算法,Karatsuba算法,以及二者的混合运用算法。第二步通常采用的取模多项式有:等距多项式(Equal lysapced Polynomial),三项式和五项式。Karatsuba算法由Karatsuba在1962年提出,它是第一个能够在低于O(m2)个操作内完成的多项式乘法,其基本思想为:假设则最好的结果是结合经典算法和Karatsuba策略而得到,该PB乘法器的空间复杂度和时间复杂度如下:8.4 正规基乘法器 在域元素的正规基表示下,域元素的平方运算仅需对该元素的坐标进行简单循环移位即可,在硬件实现平方运算时,其开销可以忽略不计,因此,基于正规基表示的乘法运算及其乘法器设计得到了大量研究。一般的,ai表示A的第i个座标。另 和 分别对应域元素 和 的行向量,表示它们的乘积,则9 致谢与心得9.1 组内分工嗯,组内分工这个事呢,这个怎么说呢,我考虑到,我观察了很久组内分工,分工这个现象呢,怎么说呢,他是,分工从这个,我认为啊,咱们从严格意义上,这课程设计基本上全是我一个人做的,当然它说分工它肯定是,我是想说,这个分工这个现象呢,可以这么说,分工是个心理问题。毛新宇少将这课程设计我原来建议是第18周我们比较轻松的时候一起做,不过组内另两位成员倾向于看书准备考试,所以就只有我一个人在查阅资料、熟悉软件、编程设计。期末考试(20号下午考完)之后,一位同学立即坐车回家了,另一位是考完试才开始看基本的算法描述,还不怎么看得懂。在这种情况下,我不可能等着他们俩,我只有先做着走,我想早点回家所以到我把这乘法器的设计做完、并且报告都完成之后,他们俩还在看算法描述。我也不是怪他们,只是说实话,我确实有点不高兴,毕竟一个人做这课程设计工作量还不小、压力也不小、心里一直很忐忑,而且这导致我们组的课程设计完成质量不高,毕竟就只有我一个人,那我的思维定势必然造成我考虑问题不全面,甚至有一些错误。另外不得不说,这个课设的时间安排也确实有点不适合,搞得我们系大部分人都是考完试之后留校两三天来做这设计,一个个可爱可怜的孩子心中怀着急切的思乡之情,却必须呆在冰冷的寝室不断调试、修改、写报告,个别同学秋裤都没有,冷得手脚冰凉、涕泪泗流,多么悲催啊!坐在开着空调的办公室的老师们,你们感受得到么?() TT9.2 心得记得17周抽到这道伽罗瓦域乘法器设计题目时,完全不懂,看着题目就有点害怕,不过我也知道既然老师会布置,那必然不会很难,或者说不会是看起来那么难,所以刚开始时也没有什么压力,凭着我一贯的惰性,就想把这往后推,推到快到交作业的期限前几天才会有很大的动力来做。后来等到火车票买了之后,心里一下就有点紧张了,害怕在上车之前做不完,于是也就开始慢慢查阅资料了,那时大概是从19周末开始的。最开始,我是打算先上网搜搜资料,大概了解一下,那么在答疑的时候也有问题可以针对性地提出来,不过后来不知怎么回事到答疑前还什么都没看,甚至错误地把题目记成是GCM加密问题。而那几次答疑由于种种原因一次都没去成,同组的两位成员去了也只是打酱油,跑过去看一下什么都没做就回来了,甚至都没有和助教说过话、问过问题。这就导致一个很严重的问题:助教是准备了资料给大家的,而我们没有得到这些资

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论