应用密码学 期末考试 - 文档模板.doc_第1页
应用密码学 期末考试 - 文档模板.doc_第2页
应用密码学 期末考试 - 文档模板.doc_第3页
应用密码学 期末考试 - 文档模板.doc_第4页
应用密码学 期末考试 - 文档模板.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

AES算法分析及实现1引言信息社会的兴起,给全球带来了信息技术飞速发展的契机:信息技术的应用,引起了人们生产方式、生活方式和思想观念的巨大变化,极大地推动了人类社会的发展和人类文明的进步。随着人类进入知识经济时代,网络和信息已主见成为人们从事社会活动的基本工具,但是,由于计算机和网络系统的发放性带来的信息与信息系统的安全问题也拓展到前所未有的程度。日益增多的对信息系统的非法入侵和破坏活动正在以惊人的速度在全世界蔓延,给各国信息系统带来巨大的经济损失和安全威胁。随着信息技术的不断发展,信息安全,网络安全的概念正在与时俱进,逐渐从早期的通信保密发展到关注信息的保密、完整、可用、可控和不可否认的信息安全。信息与信息系统,网络与网络系统安全并重,保证信息系统能够安全、可靠、不间断的运行,以提供必要的服务。近年来,我国在发展知识经济、建设信息基础设施以及中国互联网的建设和应用方面都有相当大的进步。计算机网络的广泛应用已经对经济、文化、教育、科学的发展和人类生活质量的提高产生了重要影响,但也带来了一些新的问题。信息系统的的安全总是面临着日益严重的威胁。一方面是由于互联网的开放性及安全性不足,另一方面是众多的攻击手段。为了保证信息系统的安全,需要完整的安全保障体系,应具有保护功能、检测手段、工具的反应以及事故恢复能力。因而,除了不断完善相应的法律和监督措施,我们更需要自我保护。理论和事实都说明,密码技术是一种经济、实用而有效的方法,这也是密码技术得到快速发展和广泛应用的原因。2AES算法分析2.1AES算法产生背景1、AES 是美国国家标准技术研究所NIST旨在取代DES的新一代的加密标准。NIST 对AES 候选算法的基本要求是:对称分组密码体制;密钥长度支持128 ,192 ,256位;明文分组长度128 位;算法应易于各种硬件和软件实现。2、1998 年NIST开始AES 第一轮征集、分析、测试,共产生了15 个候选算法。1999 年3 月完成了第二轮AES 的分析、测试。1999 年8 月NIST 公布了五种算法(MARS , RC6 ,Rijndael ,Serpent ,Twofish) 成为候选算法。最后,Rijndael ,这个由比利时人设计的算法与其它候选算法在成为高级加密标准(AES) 的竞争中取得成功,于2000 年10月被NIST宣布成为取代DES 的新一代的数据加密标准,即AES。3、Rijndael 作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和灵活等优点。4、AES 设计有三个密钥长度:128 ,192 ,256 比特2.2AES算法原理AES 算法是基于置换和代替的。置换是数据的重新排列,而代替是用一个单元数据替换另一个。AES 使用了几种不同的技术来实现置换和替换。为了阐明这些技术,让我们用 Figure 1 所示的数据讨论一个具体的 AES 加密例子。下面是你要加密的128位值以及它们对应的索引数组:00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15192位密钥的值是: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 170 1 2 3 4 5 6 7 8 9 10 1112 13 14 15 16 17 18 19 20 21 22 23Figure 2 S-盒( Sbox )当 AES 的构造函数(constructor)被调用时,用于加密方法的两个表被初始化。第一个表是代替盒称为S-盒。它是一个1616的矩阵。S-盒的前五行和前五列如 Figure 2 所示。在幕后,加密例程获取该密钥数组并用它来生成一个名为w的密钥调度表,Figure 3 所示。 Figure 3 密钥调度表(Key Sched)w 最初的 Nk (6) 行被作为种子,用原始密钥值(0x00 到0x17)。剩余行从种子密钥来产生。变量 Nk 代表以 32 位字为单位的种子密钥长度。稍后我分析 AES 实现时你将清楚地看到 w 是怎样产生的。 关键是这里现在有许多密钥使用而不只是一个。这些新的密钥被称为轮密钥(round keys)以将它们与原始种子密钥区别开来。Figure 4 State (态)数组AES 加密例程开始是拷贝 16 字节的输入数组到一个名为State (态)的 44 字节矩阵中。AES 加密算法 取名为 Cipher,它操作 State,其过程描述的伪代码参见 Figure 5 。在规范中,加密算法实现的一个预备的处理步骤被称为 AddRoundKey(轮密钥加)。AddRoundKey 用密钥调度表中的前四行对 State 矩阵实行一个字节一个字节的异或(XOR)操作,并用轮密钥表 wc,r 异或 输入 Stater,c。举个例子,如果 State 矩阵的第一行保存的字节是 00, 44, 88, cc ,第一列密钥调度表是 00, 04, 08, 0c ,那么新的 State0,2 值是用 w2,0( 0x08 或 0x80 )异或 State0,2(0x88)的结果: 1 0 0 0 1 0 0 00 0 0 0 1 0 0 0 XOR1 0 0 0 0 0 0 0AES 算法的主循环对 State 矩阵执行四个不同的操作,在规范中被称为 SubBytes(字节替换)、ShiftRows(行位移变换)、MixColumns(列混合变换) 和 AddRoundKey。除了每次循环 AddRoundKey 都被调用并使用密钥调度表的下面四行外,AddRoundKey 与预备处理步骤中的 AddRoundKey 相同。SubBytes 例程是一个代替操作,它将 State 矩阵中的每个字节替换成一个由 Sbox 决定的新字节。比如,如果 State0,1的值是 0x40 如果你想找到它的代替者,你取 State0,1 的值 (0x40) 并让 x 等于左边的数字(4)并让 y 等于右边的数字(0)。然后你用 x 和 y 作为索引 进到 Sbox 表中寻找代替值,如 Figure 2 所示。ShiftRows 是一个置换操作,它将 State 矩阵中的字节向左旋转。Figure 6 示范了 ShiftRows 如何操作 State。State 的第0行被向左旋转0个位置,State 的第1行被向左旋转1个位置,State 的第2行被向左旋转2个位置,而 State 的第3行被向左旋转3个 位置。Figure 6 对 State 进行 ShiftRows 操作MixColumns 是一个代替操作,它是理解 AES 算法时最具技巧(或者说是最需要动脑筋的部分)的部分。它用 State 字节列的值进行数学域加和域乘的结果代替每个字节。我将在下一节中 详细解释专门的域加和域乘细节。假设 State0,1 的值是0x09,并且列1上的其它值分别为 0x60,0xe1 和 0x04,那么State0,1的新值计算如下: State0,1 = (State0,1 * 0x01) + (State1,1 * 0x02) +(State2,1 * 0x03) +(State3,1 * 0x01)= (0x09 * 0x01) + (0x60 * 0x02) + (0xe1 * 0x03) +(0x04 * 0x01)= 0x57此处加法和乘法是专门的数学域操作,而不是平常整数的加法和乘法。SubBytes、ShiftRows、MixColumns 和 AddRoundKey 四个操作在一个执行 Nr 次的循环里被调用,Nr 为给定密钥大小的轮数减 1。加密算法使用的轮数要么是10,12,要么是14,这依赖于种子密钥长度是128位、192 位还是 256 位。在这个例子中,因为 Nr 等于12, 则这四个操作被调用11次。该迭代完成后,在拷贝 State 矩阵到输出参数前,加密算法调用 SubBytes、ShiftRows 和 AddRoundKey 后结束。大致说来,AES 加密算法的核心有四个操作。AddRoundKey 使用从种子密钥值中生成的轮密钥代替 4 组字节。SubBytes 替换用一个代替表 替换单个字节。ShiftRows 通过旋转 4字节行 的 4 组字节进行序列置换。MixColumns 用域加和域乘的组合来替换字节。有限域GF(28)的加法和乘法正如你所看到的,AES 加密算法使用相当简单明了的技术来代替和置换,除 MixColumns 例程以外。MixColumns 使用特殊的加法和乘法。AES 所用的加法和乘法是基于数学(译者注:近世代数)的域论。尤其是 AES 基于有限域GF(28)。GF(28)由一组从 0x00 到 0xff 的256个值组成,加上加法和乘法,因此是(28)。GF代表伽罗瓦域,以发明这一理论的数学家的名字命名。GF(28) 的一个特性是一个加法或乘法的操作的结果必须是在0x00 . 0xff这组数中。虽然域论是相当深奥的,但GF(28)加法的最终结果却很简单。GF(28) 加法就是异或(XOR)操作。然而,GF(28)的乘法有点繁难。正如你稍后将在 C# 实现中所看到的,AES的加密和解密例程需要知道怎样只用七个常量 0x01、0x02、0x03、0x09、0x0b、0x0d 和 0x0e 来相乘。所以我不全面介绍GF(28)的乘法,而只是针对这七种特殊情况进行说明。在GF(28)中用0x01的乘法是特殊的;它相当于普通算术中用1做乘法并且结果也同样任何值乘0x01等于其自身。现在让我们看看用0x02做乘法。和加法的情况相同,理论是深奥的,但最终结果十分简单。只要被乘的值小于0x80,这时乘法的结果就是该值左移1比特位。如果被乘的值大于或等于0x80,这时乘法的结果就是左移1比特位再用值0x1 b异或。它防止了“域溢出”并保持乘法的乘积在范围以内。一旦你在GF(28)中用0x02建立了加法和乘法,你就可以用任何常量去定义乘法。用0x03做乘法时,你可以将 0x03 分解为2的幂之和。为了用 0x03 乘以任意字节b, 因为 0x03 = 0x02 + 0x01,因此: b * 0x03 = b * (0x02 + 0x01) = (b * 0x02) + (b * 0x01)这是可以行得通的,因为你知道如何用 0x02 和 0x01 相乘和相加,同哩,用0x0d去乘以任意字节b可以这样做: b * 0x0d = b * (0x08 + 0x04 + 0x01) = (b * 0x08) + (b * 0x04) + (b * 0x01) = (b * 0x02 * 0x02 * 0x02) + (b * 0x02 * 0x02) + (b * 0x01)在加解密算法中,AES MixColumns 例程的其它乘法遵循大体相同的模式,如下所示: b * 0x09 = b * (0x08 + 0x01) = (b * 0x02 * 0x02 * 0x02) + (b * 0x01)b * 0x0b = b * (0x08 + 0x02 + 0x01) = (b * 0x02 * 0x02 * 0x02) + (b * 0x02) + (b * 0x01)b * 0x0e = b * (0x08 + 0x04 + 0x02) = (b * 0x02 * 0x02 * 0x02) + (b * 0x02 * 0x02) + (b * 0x02)总之,在GF(28)中,加法是异或操作。其乘法将分解成加法和用0x02做的乘法,而用0x02做的乘法是一个有条件的左移1比特位。AES规范中包括大量 有关GF(28)操作的附加信息。密钥扩展AES加密和解密算法使用了一个由种子密钥字节数组生成的密钥调度表。AES规范中称之为密钥扩展例程(KeyExpansion)。从本质上讲,从一个原始密钥中生成多重密钥以代替使用单个密钥大大增加了比特位的扩散。虽然不是无法抵御的困难,但理解 KeyExpansion 仍是 AES 算法中的一个难点。KeyExpansion 例程高级伪代码如下所示: KeyExpansion(byte key, byte4 w)copy the seed key into the first rows of wfor each remaining row of w use two of the previous rows to create a new row“用前面两行来产生一个新行”(“use two of the previous rows to create a new row”)的例程用到了两个子 例程,RotWord 和 SubWord 以及一个名为“Rcon”的常数表(作为“轮常数”)。让我们先来逐个看一下这三东西,然后再回到整个 KeyExpansion 的讨论中来。RotWord 例程很简单。它接受一个4个字节的数组并将它们向左旋转一个位置。因为轮调度表 w 有四列,RotWord 将 w的1行左旋。注意 KeyExpansion 使用的这个 RotWord 函数与加密算法使用的ShiftRows (行位移变换)例程非常相似,只是它 处理的是单行密钥调度 w,而不是整个加密状态表 State。SubWord 例程使用替换表 Sbox 对一给定的一行密钥调度表 w 进行逐字节替换。KeyExpansion 操作中的替换实际上就像在加密算法中的 替换一样。被代替的输入字节被分成 (x,y) 对,它被当作进入替换表 Sbox 的索引。举例来说,0x27的代替结果是 x2 和 y7,并且 Sbox2,7 返回 0xcc。KeyExpansion 例程使用一个被称为轮常数表的数组 Rcon。这些常数都是4个字节,每一个与密钥调度表的某一行相匹配。AES 的 KeyExpansion 例程需要11个轮常数。你可以在 Figure 7 中看到这些常数清单。每个轮常数的最左边的字节是GF(28)域中2的幂次方。它的另一个表示方法是其每个值是前一个值乘上0x02,正如前一部分讨论 GF(28) 乘法 时所描述的那样。注意 0x80 0x02 = 0x1b 是 0x80 左移1个比特位后紧接着与 0x1b 进行异或,如前所述。现在让我们更进一步看看 KeyExpansion 内幕中的循环。这里所用的伪码比以前更为详细,这个循环是:for (row = Nk; row 先不要去看if子句,你将看到密钥调度表 w 的每一行都是前面一行与行 Nk 异或的结果(4, 6, 或 8 取决于密钥的长度)。if条件的第一部分用 SubWord、RotWord 以及与轮常数的异或修改密钥调度表的每个第4、第6或第8行,取决于是否密钥的长度是128、192或256位。这个条件的第二部分将修改行 12、20 和 28 等等对于256位密钥而言每 一个第8行都将添加密钥调度额外的可变性。让我们用本文开头所举的例子来考察 KeyExpansion 是如何开始的。种子密钥是192-bit / 6-word 值: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 密钥调度字节表 w 的维数是 4 列并且 Nb (Nr + 1) 等于 4 (12 + 1),或 52 行。KeyExpansion 将种子密钥的值拷贝到密钥调度字节表 w 的第一行。因为我的种子密钥是 192 位(24字节),并且 w 表总是 4 列,在这种情况下KeyExapansion 将种子密钥拷贝到 w 的前面 6 行。现在让我们看看 KeyExapansion 例程是如何填充密钥调度表其余部分的。在我的例子里,第一个被计算的行是第 6 行 ,因为第0-5行已被种子密钥的值填上了: temp = wrow-1 = 14 15 16 17条件 (row % Nk = 0)为真,因此首先 RotWord 子程序被应用: temp = 15 16 17 14这时 SubWord 被应用: temp = 59 47 f0 fa用 Rconrow / Nk = Rcon6 / 6 = 01 00 00 00 进行异或: temp = 58 47 f0 fa这时用 wrow-Nk = w6-6 = 00 01 02 03 异或,产生了下面结果: w6 = 58 46 f2 f9密钥调度表 w 中其余所有行来重复这个过程本身。总而言之,AES 加密和解密的一个重要部分就是从最初的种子密钥中生成多重轮密钥。这个 KeyExapansion 算法生成一个密钥调度并 以某种方式进行替代和置换,在这种方式中,加密和解密算法极其相似。 2.3AES算法安全性分析一个密码算法的有效性首先体现在可靠的安全性上,而安全性又由其抗攻击能力来实现,常见的密码攻击有:强力攻击、渗透攻击、XSL攻击,还有差分分析和线性密码分析等。本文将根据密码算法的抗攻击能力和弱密钥分析对Rijndael算法进行讨论。对密码的攻击就是指不知道系统所用的密钥,但通过分析可以从截获的密文推断出原来的明文活着密钥的过程。密码的抗攻击能力强弱表示该密码安全性的高低。1 AES算法抵抗强力攻击能力分析强力攻击的攻击复杂度只依赖于分组长度和密钥长度,AES算法的密钥长度最小是128比特,即使每秒钟能够完成2 个密钥的搜索,至少需要的时间大约是149万亿年。因此,Rijndael算法对强力攻击是免疫的。2 AES算法抵抗差分分析和线性密码分析的能力分析1990年,Eli Biham和Adi shamir提出了差分密码分析;而线性密码分析是由Mitsuru Matsui首先提出的,这两种密码分析方法是迄今已知的攻击迭代密码算法最有效的方法。运用差分分析主要就在于寻找满足一定概率出现的特征,然后对最后一轮的每个S一盒进行研究得出可能的部分密钥,再用穷尽搜索法试探出所有密钥。运用线性分析则在于寻找部分固定比特之间的一个满足最大概率出现的线性等式,然后再应用建立在最大似然法的基础上的一个算法求出部分密钥,最后用穷尽搜索法找到所有密钥。在文献 3指出了,如果除少数几轮(通常2轮或3轮)外的其他所有轮都存在可预测的差分扩散,且有大大高于2卜“的扩散率的话,差分密码分析是可能的,其中n是分组长度;如果除少数几轮(通常2轮或3轮)外的其他所有轮都存在大大高于2 的可预测的输入输出相关性,那么对其进行线性密码分析是可能的,据此就可以给出分组长度为n的迭代密码算法抵抗差分密码分析和线性密码分析的一个必要条件:(1) 不存在可预测的扩散率高于2卜“的多轮差分特征。(2) 不存在可预测的高于2 的多轮有效线性表达式。而文献3又证明不存在可预测的扩散率大于的4一轮差分轨迹(以及不存在可预测的扩散率大于的8一轮差分轨迹)。对各种分组长度的Rijndael密码,这一必要条件也是适用的。同样可以证明不存在相关系数大于2 的4一轮线性轨迹(以及不存在可预测的扩散率大于2 的8一轮线性轨迹)。因此,4一轮的Rijndael算法就可以有效的抵抗差分密码分析和线性密码分析。3 AES算法抵抗渗透攻击能力分析Square攻击是一种专门针对Square简化版本的攻击,而在文献4中,SLucks建议把利用Square算法基于字节的结构对密码算法进行攻击的方法叫做渗透攻击。又可以根据算法简单分为Square基本攻击和扩展攻击两种类型。Rijndael算法集成了Square算法面向字节结构的特点,因此Square攻击也同样适用于Rijndael算法。从Square基本攻击和扩展攻击的分析可以看出,对6轮以下的AES算法进行Square攻击是可能的,基于这点考虑,安全的AES算法的轮数必须大于7轮(包括7轮)。因此,综合考虑后AES算法采用了10轮的运算。4 AES算法抵抗代数计算攻击能力分析代数计算攻击是一种新的分组密码攻击方法,在代数计算攻击中,攻击者利用密码的输 输出对来构造多项式。用简单的代数表达式对整个Rijndael算法进行描述,引用表达式如下:代数计算攻击的基本思想是用足够多的明密文对利用拉格朗日插值公式得到密码算法的一个近似多项式逼近,因此要想对Rijndael算法进行代数计算攻击等价于将式(1)用多项式来展开,而在式(1)中要想消去一层子结构,就涉及到了构造S一盒的所有运算,由s一盒表达式的复杂性可知,想通过对式(1)的多项式展开而进行攻击是不可行的。如果不对式(1)进行多项式展开,而是直接利用该式进行攻击,这至少要确定2个不同的常数,仅仅从所要确定常数的个数来看,这种攻击方法可能是有效的,但同时应考虑到利用式(1)构造线性无关方程组及对其进行求解的复杂性,因而这种攻击方法是否有效还有待进一步的研究。5 AES算法抵抗XSL攻击能力分析最近又出现了一种代数计算攻击。它是NicolasCourtois和Josef Pieprayk提出的。他们在近期的一篇论文中指出:Rijndael可以被重新定义为冗余二次方程组。例如:对于128位的Rijndael,要想从单一明文中恢复密钥,可以将问题转换为含有8000个二次方程组,其中有1600个未知数的代数问题。因此,Rijndael算法的安全性就依赖于没有有效的方法解决上述方程组。然而,Shamir等人在Euroerypt2000中发表了XL(OR FXL)算法,声称可以在亚指数时间(subexponentiN time)解决上述问题。这表明类似于Rijndael的加密算法的安全性并不是随着加密的轮数而指数增加的。在实际中,XL算法没有成功地攻击过Rijndael算法。但是,依照Rijndael建立的系统并不是随机的,它有许多特征:可重新定义、稀疏性、结构化。因此,在Nicolas Courtois和Josef Pieprayk的最新论文中研究了如何提高XL算法,使之适应于一些特殊的系统。该文中设计了一种新型的攻击,称之为XSL攻击。这种算法是启发式的,并且很难估计它的复杂度。理论上,XSL攻击可用于任何分组加密方法,但在对付A Es上没有更多的优势。在AES(Rijndae1)算法中存在大量的对称性,而假如密码性能中也存在大量对称性的话那是很利于密码分析的,所以该算法采取了适当的措施来消除密码性能中的对称性,具体的方法是通过在每一轮中采用不同的轮常数来实现。密码自身及其逆密码使用了不同的变换,这样的举措实际上消除了DDavies描述的DES中存在的弱密钥和半弱密钥存在的可能性。同时,密钥扩展的非线性实际上消除了等价密钥存在的可能性。当密码严重地依赖于密钥来提供非线性时,象IDEA中的那些弱密钥就会出现。mjndael算法采用的是一种密钥迭代型密钥,所有的非线性都是由一个与密钥独立的s一盒来提供,因此也就不存在这种类型的弱密钥。2.4AES算法应用从AES的应用看,目前AES算法主要用于基于私钥数据加密算法(对称密钥加密算法)的各种信息安全技术和安全产品中,AES通常被认为是DES算法的取代者,为原有的数据加密应用提供更强的数据安全保障。所以在原来DES标准应用的领域中,AES存在着巨大的应用价值。当前网络技术发展迅猛,所以对于基于网络的数据加密的要求也日益提高,AES的应用首先体现在了网络信息安全领域中。在AES标准公布前,IPSec协议中ESP(封装安全负载)所用的数据加密算法主要用的是DES和其代替者3DES,随着AES标准的公布,IETF的IPSec工作组下一步正试图使AES成为ESP使用的默认加密算法,要求所有IPSec实现必须兼容AES加密算法。现在大多数提供VPN设备和解决方案的公司都已经使用AES加密算法来代替原来产品中使用的DES加密算法,并将此作为宣传企业产品的重要砝码。1 无线网络应用AES在网络技术中另一个主要应用是无线网络应用。由于无线网络的通信信道相对于有线网络来说是一个更为开放的环境,安全性的要求相对于有线网络来说将会更高。目前,无线网络的国际标准主要有两个:一个是用于WLAN的IEEE803.11协议(Wi-Fi);另一个是用于WMAN的IEEE803.16协议(WiMAX)。这两个协议在制定的初期所采用的安全机制中主要使用的分别是RC4和DES, 2004年后这两个协议也都将AES加入到协议的安全机制中。此外,其他的一些无线网络技术为了保障数据传输安全性也都使用了AES。ZigBee技术就是一个典型的代表,它作为新一代的无线传感器网络采用了IEEE802.15.41 ZigBee协议(一种低功率WPAN)。3ZigBee技术是一种近距离,低复杂度,低功耗,低数据速率,低成本的双向无线通信技术,主要适合于自动控制和远程控制领域,可以嵌入各种设备中。ZigBee的MAC层使用了AES算法进行加密,并且它基于AES算法生成一系列的安全机制,用来保证MAC帧的机密性,完整性,一致性和真实性。2信息安全领域除了保障网络应用的信息安全外,AES在其他的信息安全领域中也有着广泛的应用。从AES硬件实现的应用上看,主要研究的方向有射频IC(集成电路)卡中的数据安全,智能安全卡和对硬盘数据的加密等方面。目前射频IC卡在国内的应用范围很广泛,从乘客使用的公交IC卡、学生使用的校园卡到新一代的居民身份证中都嵌入了IC芯片。在IC卡中所存储的数据通常都是含有持卡人的各人隐私信息的,这些信息如果不经过加密处理很容易在不经意间从各种渠道泄露出去。因此如何在射频IC卡中加入数据加密功能成为AES应用研究的方向。3.AES软件应用从AES软件实现的应用上看,其应用领域也十分广泛,包含语音、视频信息的加密,数据库中的数据加密以及当前关注度很高的电子商务安全等。随着计算机性能的提高,尤其是对于多媒体信息的处理能力的增强,越来越多的多媒体信息出现在人们的日常生活中。和一般的文字信息类似,多媒体信息也存在对需要保密的信息加密的问题。由于多媒体信息的数据量很大,如果对其直接进行数据加密的话,其效率很低,将会影响多媒体信息的传播及使用。因此,在对多媒体信息加密时,不仅要考虑到数据加密算法AES的使用方法,还要设计相应的加密过程。关于AES在数据库中的应用,其主要的研究方向在于如何生成,分配和管理在数据输入输出中所用的密钥以及安全的数据加密的策略上,形成一个完整的数据加密系统。关于AES在电子商务中的应用,其研究的重心在于电子商务基础平台中的密码协议和交易安全协议中AES的应用。如将AES应用在SSL(安全套接字层)协议中:在实时数据网络传输前,发送方通过身份认证后,用SSL安全通道发送AES密钥到接收方,同时用AES算法对实时数据加密,然后基于UDP协议通过互联网发送加密的实时数据到接收方。这样接收方可以用接收到的AES密钥解密加密后的实时数据得到具体的实时数据。此外,将AES与其他的密码算法相结合,尤其是一些公钥加密算法(非对称加密算法),设计出的新的密码也是AES应用研究的主要方向之一。9目前比较典型的研究包括:AES与RSA相结合的混合加密体系,AES与ECC(椭圆曲线加密算法)相结合的加密体系,利用NTRU公钥密码体系分配AES密钥,AES在公钥加密体系PKI中的应用,AES在数据签名中的应用等等。高级加密标准AES(Rijndael)算法在各行业各部门中将获得广泛的应用,成为虚拟专用网、SONET(同步光网络)、远程访问服务器(RAS)、高速ATM/Ethernet路由器、移动通信、卫星通信、电子金融业务等的加密算法,并逐渐取代DES在IPSec、SSL和ATM中的使用。IEEE 802.11i草案已经定义了AES加密的两种不同运行模式,成功解决了无限局域网(WLAN)标准中的诸多安全问题。此外,得益于密码技术的告诉发展,政府及军用通信更多的采用高级的加密算法,以及网络保密系统,财政保密游戏机密等方面AES加密算法都得到了广泛的应用。4.其他应用高级加密标准AES(Rijndael)算法在各行业各部门中将获得广泛的应用,成为虚拟专用网、SONET(同步光网络)、远程访问服务器(RAS)、高速ATM/Ethernet路由器、移动通信、卫星通信、电子金融业务等的加密算法,并逐渐取代DES在IPSec、SSL和ATM中的使用。IEEE 802.11i草案已经定义了AES加密的两种不同运行模式,成功解决了无限局域网(WLAN)标准中的诸多安全问题。6此外,得益于密码技术的告诉发展,政府及军用通信更多的采用高级的加密算法,以及网络保密系统,财政保密游戏机密等方面AES加密算法都得到了广泛的应用。3 AES算法实现3.1 AES算法的直接实现3.2基于CryptoAPI实现AES算法CryptoAPI只是一个接口,它本身不进行实际的加解密,实际的加解密是由CSP(Cryptographic Service Provider)进行的。CSP是与CryptoAPI相互独立的操作系统的底层模块,里面包含密码标准和算法的具体实现,一般由一些动态链接库文件和签名文件构成。CSP有很多种,微软在Windows操作系统当中提供了一系列的CSPs,比如Microsoft Base Cryptographic Provider、Microsoft Enhanced Cryptographic Provider、Microsoft AES Cryptographic Provider等。这些CSPs支持的算法种类有些不同,分别适用于不同的场合,比如有的CSP提供数字签名服务而有的则提供数据加密服务。下表列出了Microsoft AES Cryptographic Provider支持的部分算法。应用程序可以选择CSP以实现特定的功能,但不能直接与CSP交互,而必须通过CryptoAPI中介。库取名为crypt.dll,源文件主要有三个,crypt.def、crypt.h和crypt.cpp。crypt.def中设置需要导出的库函数,这里我们要导出两个函数:EXPORTSEncryptfileDecryptfilecrypt.h中定义一些常量,包含其他的头文件。实现的代码如下:#include /CryptoAPI的函数、常量和结构的声明和定义#include #include /定义密钥的长度,前两个字节为长度,这里定义为128bit,长度越长,安全性越高,Microsoft /AES Provider支持128、192和256bit三种密钥长度#define KEYLENGTH 0x00800000/定义算法ID,不同算法的ID不同,AES的ID 为CALG_AES_128#define ENCRYPT_ALGORITHM CALG_AES128/定义分组长度,AES是分组加密,分组加密算法把大块数据分成若干个一定长度的分组作/为加密和解密的基本单元,不同的算法分组长度不同,RC2的分组为64bit,AES的分组/比较灵活,官方推荐是128bit,即16个字节。#define ENCRYPT_BLOCK_SIZE 16Crypt.cpp中包含了三个函数,分别是DllMain、Encryptfile和Decryptfile。DllMain函数是DLL的入口点。代码如下:int WINAPI DllMain(HINSTANCE hInstance,DWORD fdwReason,PVOID pvReserved)return TRUE; /这里不需要其他的初始化,简单地返回True。AES是一种对称密钥加密算法,ECB(Electronic Code Book)是一种加密模式。若对一文本加密,只有算法是不够的,还要选择模式。常用的模式有ECB,CFB,CBC,OFB。除了ECB外后三者都需要初始向量IV(initialization Vector)。而MAC认证本身并不对消息加密,只是为了防止消息被非法篡改。本文代码先对消息做个认证然后采用AES加密,最后再还原消息。源代码如下:#include stdafx.h/ Runtime Includes#include #include #include / Crypto+ Includes#include default.h#include filters.h / StringSource and / StreamTransformation#include osrng.h#include hex.husing namespace std;using namespace CryptoPP;/先对消息(message)做MAC认证(messageMACed),然后采用AESECB加密模式对认证后的消息加密(CipherText)。对加密的消息(CipherText)解密为带MAC的消息(recoverMACed)然后去掉MAC即可得到原来的消息(recovered)。int main(int argc, char* argv)char message1000001;printf(请输入明文n);scanf(%s,message); byte password = 0x01, 0x02, 0x03, 0x04, 0x05, 0x6, 0x7;/认证使用的密码(密钥) string messageMACed,CipherText,recoverMACed,recovered; /MAC消息认证 StringSource(message,true, new DefaultEncry

温馨提示

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

最新文档

评论

0/150

提交评论