当前位置:文档之家› 密码学课程设计报告(文件加密解密系统)

密码学课程设计报告(文件加密解密系统)

密码学课程设计实验报告实验题目:文件加密/解密系统实验任务书第一章、AES加密解密原理由于DES已经无法满足高保密性的要求,美国于1997年1月开始征集新一代数据加密标准(即高级数据加密标准,Advanced Encryption Standard,AES)。

2000年10月2日,正式宣布选择比利时密码学家所开发的Rijndael算法成为AES的最终算法。

AES(The Advanced Encryption Standard)是美国国家标准与技术研究所用于加密电子数据的规范。

它被预期能成为人们公认的加密包括金融、电信和政府数字信息的方法。

AES 是一个新的可以用于保护电子数据的加密算法。

明确地说,AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。

与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。

通过分组密码返回的加密数据的位数与输入数据相同。

迭代加密使用一个循环结构,在该循环中重复置换(permutations )和替换(substitutions)输入数据。

1.1AES算法设计及性能研究现状:目前在理论上对于AES算法的研究主要集中在算法设计和性能分析上。

1.1.1算法设计主要研究算法设计遵循的原则和整体结构。

研究算法设计的目的一方面为性能分析提供了一条途径,从算法的结构上分析算法性能是简单有效的,研究算法整体结构上的缺陷为提出新的密码分析方法提供新的手段。

另一方面,研究AES的算法设计对研发新的分组密码提供了设计原则和参考。

目前分组数据加密算法的整体结构有两大类:Festiel 网络、非平衡网络和SP网络。

作为AES选择的Rijndael算法遵循分组密码的安全性和实现性原则,在整体结构上采用的是SP网络结构。

1.1.2 性能分析主要研究算法的各项特性,主要可以分为实现分析和密码分析两类。

(1)实现分析主要研究AES算法可实现的能力,即算法的实现性分析。

当前实现性分析主要集中在AES的硬、软件实现的难易度和实现算法的效率等领域中。

(2)密码分析主要研究AES算法抵抗现有己知密码攻击的能力,即算法的安全性分析。

除此之外,由于S-盒是AES算法的唯一非线性变换器件,S-盒的性能在很大程度上决定了AES算法的安全性。

因此,出现了许多分析和研究S-盒代数性质的研究成果。

在这些成果中分析了S-盒的代数特征或是表达S-盒的线性方程组,以达到求解S-盒或是研究S-盒安全性的目的。

1.2AES算法基础:1.2.1AES算法的数学基础定义一一个由b7b6b5b4b3b2b1b0组成的字节b可表示成系数为{0,1}的二进制多项式b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x1+b0x0定义二在GF(28)上加法的定义为二进制多项式的加法,且其系数模2。

定义三在GF(28)上乘法(用符号·表示)定义为二进制多项式的乘积模一个次数为8的不可约多项式.此不可约多项式为(十六进制为‘11B’)m(x) = x8+x4+x3+x+1上面定义的乘法在GF(28)上满足结合律,且有一个本原元(01)。

例如:(57)16(83)16 = (x6+x4+x2+x+1)( x7+x+1)=x13+x11+x9+x8+x7+x7+x5+x3+x2+x+x6+x4+x2+x+1= (x13+x11+x9+x8 +x6+x5+ x4+x3 +x+1) mod (x8+x4+x3+x+1)= x7+x6+1= (C1) 16定义四在GF(28)上的二进制多项式b(x)的乘法逆为满足下面方程式的二进制多项式a(x),记为b-1(x).a(x)b(x) mod m(x) = 1.b-1(x) = a(x) mod m(x).00除外,00的逆元还是00。

定义五 GF(28)上的多项式加法定义为相应项系数相加。

因为在域GF(28)上的加是简单的按位异或,所以在域GF(28)上的两向量的加也就是简单的按位异或.定义六 GF(28)上的多项式a(x) = a3x3+a2x2+a1x1+a0x0和b(x) = b3x3+b2x2+b1x1+b0x0相乘模x4 + 1 的积(表示为c(x) = a(x)⊕b(x))为c(x) = c3x3+c2x2+c1x1+c0x0,其系数由下面4个式子得到:c0 = a0·b0⊕a3·b1⊕a2· b2⊕a1·b3,c1 = a1·b0⊕a0·b1⊕a3· b2⊕a2·b3,c2 = a2·b0⊕a1·b1⊕a0· b2⊕a3·b3,c3 = a3·b0⊕a2·b1⊕a1· b2⊕a0·b3,利用定义六,有x×b(x) = b2x3+b1x2+b0x1+b3。

如果再与x相乘后模x4+1,得b1x3+b0x2+b3x1+b2,由此可得:多项式每乘上一次x的运算结果,相当于多项式系数的一次左移操作。

1.2.2密码算法的设计准则关于实用密码的两个一般的设计原则是Shannon提出混乱原则和扩散原则: 混乱原则:人们所设计的密码应使得密钥和明文以及密文之间的信赖关系相当复杂以至于这种信赖性对密码分析者来说是无法利用的。

扩散原则:人们所设计密码应使得密钥的每一位数字影响密文的多位数字以防止对密钥进行逐段破译,而且明文的每一位数字也影响密文的多位数字以便隐蔽明文数字的统计特性。

Rjindael算法的设计原则:Joan Daemen和Vincent Rijmen在设计Rijndael算法时主要考虑了以下三点:1.要能抵抗现在所有的已知密码攻击;2.在各种平台上都应具有良好的性能;3.设计要简单。

从以上三点可看出Rijndael算法在设计时遵循了安全性原则和易实现性原则。

算法整体结构的精心设计确保了算法的安全性、简单性和对称性,确保了算法的易实现性。

为使密码算法能抵抗对密钥的强力攻击,必须保证密钥长度尽可能大。

密钥长度要求至少128bist。

另外为阻止对分组密码进行统计分析,分组长度必须足够大,使得对密文进行频率统计分析计算上不可行。

1.2.3 AES算法的整体结构Rjindael采用的是代替/置换网络,即SP结构。

每一轮有三层组成:P层为线性层,它包括ShiftRows变换(行移变换)和MixColumns变换(列混合变换),线性混合层确保多轮之上的高度扩散;S层为非线性层,由一个SubBytes变换组成,具体由非线性S-盒构成,起到混淆作用;密钥加层由AddRuondKey变换组成,将子密钥简单异或到中间状态上,实现密钥与明、密文的结合。

(1) S层设计AES 定义了一个 S 盒,State 中每个字节按如下方式映射为一个新的字节:把该字节的高 4 位作为行值,低4 位作为列值,然后取出 S 盒中对应行和列的元素作为输出。

S 盒是一个由 16×16 字节组成的矩阵,包含了 8 位值所能表达的256种可能的变换。

S盒按以下方式构造:①逐行按升序排列的字节值初始化 S 盒。

第一行是 {00},{01},{02},…,{0F} ;第二行是 {10},{11},…, {1F} 等。

在行 x 和列 y 的字节值是 {xy}。

②把 S 盒中的每个字节映射为它在有限域GF(28)中的逆。

GF 代表伽罗瓦域,GF(28)由一组从0×00 到0×ff的 256个值组成,加上加法和乘法。

GF(28)=Z2[X]/( x8+x4+x3+x+1)。

{00} 被映射为它自身 {00}。

③把 S 盒中的每个字节记成(b7,b6,b5,b4,b3, b2,b1,b0)。

对 S 盒中每个字节的每位做如下矩阵方式所描述变换:1.2.4 P层设计P层也称为线性层,包括 ShiftRows和MixColumns变换,其目的是提供雪崩效应,从而起到扩散作用。

MixColumns变换将状态阵列中的一个字节扩散到该字节所在列的每个字节中,ShiftRows变换则将原来处在同一列上的字节扩散到不同的列中。

Rjindael算法P层的设计起到了很好的扩散作用,提高了抵抗差分密码攻击能力,这种设计同时也可有效抗击截短差分攻击和Square攻击。

1.2.5 密钥加层设计轮函数实现的功能是把轮密钥加到状态中去。

它执行了16个并行的把密钥加到状态中的运算。

加法是通过异或运算来完成的:1.3AES部分算法优化目前提升轮变换执行效率的方法主要是利用查表和简单的移位异或操作来简化原有算法中的一些复杂运算,如矩阵运算和乘法运算。

最为典型的就是在进行轮变换之前将用于字节替换变换的S-盒计算出来并存储到一个二维数组中,当在进行字节替换变换时直接从这个数组中查找到相应的字节数据来替换原来状态矩阵中的字节数据。

这就将字节替换原来算法中的乘法求逆和仿射运算转变为一个简单的查表操作。

虽然这要求在轮变换前要花费一定的时间和存储空间来计算和存储S-盒,但与原算法相比起来,优化后的算法实现变得相对简单,其执行的效率也大大提高。

在轮变换的过程中,行移位变换只改变字节数据在状态矩阵中的位置,并不改变字节数据的值;而字节替换变换只根据S-盒对字节数据进行一一对应的替换,与字节数据所在的位置无关。

所以,这两个变换层的顺序可以调换,且对于加密算法并没有什么影响。

这两层顺序调换之后,可以方便的将字节替换变换和列混合变换并作一步,通过查表的方法来代替原来算法中的矩阵乘法的操作,得到变换后的结果。

在这种优化的方法中,将以列为单位进行变换。

第二章、AES算法描述:2.1 状态、密钥、算法轮数Rjindael算法是一个数据块长度和密钥长度都可变的迭代分组加密算法,数据块长度和密钥长度可以为128、192、256位。

在加密前对数据块做预处理。

首先,把数据块写成字的形式,每个字包含4个字节。

其次,把字记为列的形式(如下图):AES把128位的输入看作是一个由16个字节组成的向量,并用一个4×4的列矩阵的形式来组织,叫做“状态”(state)。

按同样的方式组织密钥,得到一个k矩阵:我们用Nb表示一个数据块中字的个数(列的个数),那么Nb=4,6或8;用Nk表示密钥中字的个数(列的个数),那么Nb=4,6或8。

2.2 非线性混合层的S变换字节代换(ByteSub)是作用在字节上的一种非线性变换,这个变换(或称S-box)是可逆的。

它由以下两个部分组成:a.把字节的值用它的乘法逆代替;b.把经过a处理后的字节进行如下定义的仿射变换乘法取逆运算为: b(x)=a(x) mod m(x) (定义四)其中m(x) = x8+x4+x3+x+1,当a(x) = 0时,其逆元素也为0。

相关主题