AES算法设计与实现-毕业设计_第1页
AES算法设计与实现-毕业设计_第2页
AES算法设计与实现-毕业设计_第3页
AES算法设计与实现-毕业设计_第4页
AES算法设计与实现-毕业设计_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

AES 加密算法的研究与实现 摘 要:在信息安全领域,对信息数据进行加密是一种常用而且行之有效的安全 措施。但近年来,随着分布式计算和并行处理技术的发展,56 位密钥的 DES(Data Encryption Standard)已难以胜任公用数据加密标准算法。为此,1997 年,美国国家标准和技术研究所(NISI)开始征集先进加密标准(AES)算法,以此 作为 DES 的替代品。新的加密算法的密钥长度可以为 128、192 和 256 位,它可 以实现对 128 位的数据分组进行加密和解密。1998 年,NISI 对 15 中候选算法进 行评定,最终,Rijndael 算法以其设计灵活、实现简单、加解密速度快、安全性高、 支持并行处理等特点而胜出。 随着 AES 算法的普及应用,AES 算法在日常生活、国民生产和国家安全等 方面越来越起着重要的作用。因此,对 AES 加密算法实现的研究便成为一个重 要的课题。本文首先对 AES 算法进行分析和研究,并在此基础上实现了 AES 核 心代码,然后,以此核心代码为基础设计实现了一个加密软件。通过该软件既可 以对 128 位的数据分组进行加密和解密,也可以完成对文件的加密和解密。AES 算法是一个复杂的算法,对其进行研究和实现它在一定程度上促进我国信息安 全的发展。 关键词:私钥加密;分组加密;文件加密;AES 算法 1 Research and Implementation of AES algorithm Abstract:Abstract: In the field of information security, the encryption of information is a common and effective security measures. But in recent years, with the development of the distributed computing and parallel processing technology, the 56 bits of key of the DES (Data Encryption Standard) has been difficult to be competent with the standard of the common data algorithm. Therefore, in 1997, the U.S. National Institute of Standards and Technology (NISI) began to collect Advanced Encryption Standard (AES) algorithm as a substitute for DES. The key length of the new encryption algorithm is 128,192 and 256 bits. And it can encrypt a 128 bits of data block .After the assessment of the 15 candidates in the algorithm, and in 1998, the Rijndael algorithm won for its flexible design, and simple, encryption speed, safe, parallel processing, and other features. With the universal application of the AES algorithm, AES algorithm play an increasingly important role in our daily lives, national product and national security, and other aspects. Therefore, the research of the AES encryption algorithm has become an important issue. This article start with the structure of AES algorithm, and the compile the AES core code, at last we design an encryption software which can encrypt and decrypt a 128 bits of data block, and can also encrypt and decrypt the files. AES algorithm is a complex algorithm, studying and making it in the network security, e-commerce and other areas will prompt the development of the information security in our country. Keywords:Keywords: Data Encryption; File Encryption; AES algorithm; Private key encryption 2 目 录 第 1 章 绪 论.1 1.1 研究背景 .1 1.1.1 密码技术的发展历程.1 1.1.2 密码技术的研究现状.2 1.2 本文研究工作 .2 1.3 本文研究的内容.3 第 2 章 软件开发工具简介.4 2.1 VC+6.0 简介.4 2.1.1 VC+的主要特点.4 2.1.2 MFC 简介 .5 2.2 本章小节.6 第三章 AES 加密算法的分析 .7 3.1 AES 算法的数学基础.7 3.2 AES 算法描述.7 3.2.1 相关的定义.7 3.2.2 算法的结构及相关函数的定义.8 3.3 本章小节.13 第四章 AES 加密算法的实现与测试 .14 4.1 AES 加密算法的 VC+实现.14 4.1.2 整体的实现.17 4.2 AES 加密算法的测试.18 4.2.1 密钥测试.18 4.2.2 32 位 16 进制字符串的测试.21 4.2.3 文件加密和解密测试.22 4.2.4 加密和解密速度测试.25 4.3 本章小节.26 第五章 软件主要界面的实现.27 3 5.1 主要界面的实现 .27 5.2 本章小结 .30 第六章 毕业设计体会.31 致谢.32 参考文献.33 第 1 章 绪 论 我们生活在一个令人兴奋、快节奏的世界里,任何东西的改变都比不上我 们处理信息的方法快。利用 Internet,我们可以利用一些以前想都想不到的方 式来访问和使用信息,不用去银行或在取款机前排队等候,我们在家就可以支付 帐单、签发支票和转帐,而且是每周 7 天每天 24 小时都可以。不要出家门就可 以申请和接收贷款。可以在 Internet 上买书、食品、礼物以及其他任何东西。 随着无线技术的出现,我们用手机在全球任意地方都可以完成所有以上事情, 甚至不止这些。 诚然,这些都是令人兴奋的事,但也有不好的一面。同样的技术可以使我 们的生活更方便,但若被罪犯利用,就将危及我们的生活。例如,在当今的美 国,窃取身份证使增长最快的犯罪之一。它之所以盛行,是因为法律惩罚没有 跟上犯罪的步伐,而且这种犯罪很容易实施,这是因为大多数的个人信息缺乏保 护。要享受新技术给予的好处,避免陷阱,就必须具有一些保护我们身份和个 人信息的方法,这就是密码学所有解决的问题。如何实现这些算法正是本课题 的主题。让更多的人去认识、了解加密算法,特别是现在公认比较安全的 AES 加密算法,对于我国信息安全技术的发展有很大的帮助。 1.1 研究背景研究背景 随着对称密码的发展,DES 数据加密标准算法由于密钥长度较小(56 位),已 经不适应当今分布式开放网络对数据加密安全性的要求,因此 1997 年 NIST 公 开征集新的数据加密标准,即 AES。尽管人们对 AES 还有不同的看法,但总体来 说,AES 作为新一代的数据加密标准汇聚了强安全性、高性能、高效率、易用和 灵活等优点。AES 设计有三个密钥长度:128,192,256 位,相对而言,AES 的 128 密钥比 DES 的 56 密钥强 1021 倍1。AES 算法主要包括三个方面:轮变化、圈 数和密钥扩展。随着 AES 算法的普及应用,AES 算法在日常生活、国民生产和 国家安全等方面越来越起着重要的作用。因此,对 AES 加密算法实现的研究便 成为一个重要的课题。本文将从 AES 算法的结构入手,实现了 AES 的核心代码, 在此核心代码基础上设计了一个加密软件,通过该软件既可以对 128 位的数据 分组进行加密和解密,也可以完成对文件的加密和解密。AES 算法是一个复杂 的算法,它在电子商务、网络安全等领域占有一席之地,对其进行研究将在一 定程度上促进了我国信息安全的发展。 1.1.1 密码技术的发展历程密码技术的发展历程 密码技术的发展大致经历了三个阶段:古代加密方法、古典密码和近代密 4 码。 古代加密方法的事例很多,如古希腊墓碑的铭文志、战争中用的隐写术、 凯撒密码等,都是将要表达的真正信息或“密语”用某种方法隐藏起来,以保 证信息的安全。古代加密方法虽然简单朴素,但已初步体现了密码学的若干要 素。 古典密码的加密一般采用文字置换方法,由机械变换的方式实现。 1834 年, 实验物理学教授惠斯顿发明了电机,这是通信向机械化、电气化跃进的开始,也 为密码通信采用在线加密技术提供了前提条件。 1920 年,美国电报电话公司的弗 纳姆发明了弗纳姆密码,其原理是将电传打字机的五单位码与密钥字母进行模 2 相加来实现加密。这种密码结构在今天看起来非常简单,但这种密码体制第一次 使加密和解密由手工操作转为直接由机器实现,因而在密码学发展史上占有重要 的地位。这一时期,由于机械和电气技术的成熟,很多国家都先后发明了各种类 型的密码机,如德国的Enigma 密码机,英国的TYPEX 密码机以及瑞典人发明的 Hagelin(哈格林)密码机都在二战中发挥了重要作用 2。 尽管密码技术经过几千年的发展,已经在密码的构造和破译方面积累了相 当丰富的经验,但直到 1945 年甚至更晚一些时候为止,却并没有形成一种统一 的理论和方法来对密码通信进行描述。1949 年,香农发表了一篇题为保密系 统的通信理论的著名论文,该文利用数学方法对密码通信进行了描述和定量 分析,提出了通用的密钥密码体制模型,使密码学成为一门真正的科学,为密 码学奠定了坚实的理论基础。由于受历史的局限,20 世纪 70 年代中期以前的 密码学研究基本上限于对称密码的研究,且算法和密钥都保密,主要用于军事 和政府部门。密码学的真正蓬勃发展和广泛应用是从 20 世纪 70 年代中期开始 的。 1976 年,著名学者 Diffie 和 Hellman 发表的“密码学的新方向”打破了传 统的对称密码体制,提出了新的公钥密码体制(Public key Crypto-system) 。 1977 年,美国国家标准局颁布了用于非国家保密机关的数据加密标准 DES(Data Encryption Standard) ,并完全公开了加密和解密算法。这两个事件 的出现标志着密码学理论与技术的划时代革命性变革,宣布了近代密码学的开 始。 近代密码学与计算机技术、电子通信技术紧密相关。在这一阶段,密码理 论蓬勃发展,密码算法的设计与分析互相促进,出现了大量的密码算法和各种 攻击方法。另外,加密方法也由硬件加密为主转变为软件加密为主。此外,密 码使用的范围也由政府、军事领域扩展到了企业、金融、新闻、商业乃至个人 生活等许多方面3。 1.1.21.1.2 密码技术的研究现状密码技术的研究现状 现阶段,由于现实生活的实际需要及计算机技术的进步,密码学有了突飞 猛进的发展,密码学研究领域出现了许多新的课题、新的方向。例如,在分组 密码领域,DES 已无法满足高保密性的要求,美国已征集并选定了 Rijndael 算 法作为新的高级加密标准 AES (Advanced Encryption Standard)。与 3DES 相比, AES 的安全性更高,算法实现更加灵活、简单4。虽然目前 3DES 还在广泛使 用,但随着技术的发展和 AES 研究的深入,AES 最终将彻底取代 3DES。继美 国征集 AES 结束之后,欧洲也开始进行名为 NESSIE 的密码大计划,其中候选 算法中比较著名的两个算法就是 IDEA 算法和 Camellia 算法5,目前,对这两 个算法的研究也仅次于 AES 算法。 5 1.21.2 本文研究工作本文研究工作 Rijndael 算法在设计之初就将软件实现的高效性、灵活性作为一个重要的 目标6。事实证明,Rijndael 算法在通用处理器上能获得相当不错的性能。在 933 MHz Pentium III 处理器上用 C 语言和汇编语言实现了 AES 算法7, 128、192 和 256 比特密钥下的吞吐量分别达到 325、275 和 236 Mb/s。专家指 出,信息安全的研究强调自主性和创新性,自主性可以避免“陷门”,体现国 家主权;而创新性可以抵抗各种攻击,适应技术发展的需求8。在目前的情况 下,我国对信息安全还没有自己自己的标准,也不可能在短时间内形成自己的 标准,为了适应技术的发展,现阶段我们应该对国外已有的标准及其实现进行 研究,在了解其运行机制的基础上,对其加以改进和创新,逐渐形成自主的密 码技术,以满足我国信息安全的需要。本文就是在这个思想下对 AES 算法的原 理和实现进行研究,以便能更好的理解和运用该算法,为 AES 算法的广泛应用 起到推动作用。 1.31.3 本文研究的内容本文研究的内容 本文从 AES 算法的原理入手,在此基础上阐述了如何用 VC+语言来实现 AES 加密算法的方法。文中先通过介绍密码学的发展历程,密码学研究的意义, 在此基础上引出了 AES 加密算法。然后就介绍了研究 AES 算法的重要性和必要 性,AES 加密算法的数学基础,各个部分的原理和实现方法。接着就介绍了如 何用 VC+实现各个部分,同时,对该实现的算法进行了速度和性能的测试以验 证设计的正确性,主要内容包括: 1.通过对密码技术的分析,阐述了本课题的研究意义。 2.简要分析了 AES 加密算法,说明该算法的实现原理和技术。 3.对 AES 算法进行了比较深入的研究,在此基础上分析说明用 VC+6.0 实 现该算法的方法。 4.对本文工作做总结性的论述。 6 第第 2 2 章章 软件开发工具简介软件开发工具简介 2.1 vc+6.0 简介简介 2.1.1 VC+的主要特点的主要特点 VC+是微软公司开发的一个 IDE(集成开发环境),换句话说,就是使用 c+的 一个开发平台9.有些软件就是这个编出来的。另外还有 VB,VF.只是使用不同语 言,但是 VC+是 Windows 平台上的 C+编程环境,学习 VC 要了解很多 Windows 平台的特性并且还要掌握 MFC、ATL、COM 等的知识,难度比较大。 Windows 下编程需要了解 Windows 的消息机制以及回调(callback)函数的原 理;MFC 是 Win32API 的包装类,需要理解文档视图类的结构,窗口类的结构, 消息流向等等;COM 是代码共享的二进制标准,需要掌握其基本原理等等。 VC 作为一个主流的开发平台一直深受编程爱好者的喜爱,但是很多人却对 它的入门感到难于上青天,究其原因主要是大家对他错误的认识造成的,严格 的来说 VC+不是门语言,虽然它和 C+之间有密切的关系,如果形象点比喻的 话,可以 C+看作为一种”工业标准”,而 VC+则是某种操作系统平台下的”厂 商标准”,而”厂商标准”是在遵循”工业标准”的前提下扩展而来的。 VC+应用程序的开发主要有两种模式,一种是 WIN API 方式,另一种则 是 MFC 方式,传统的 WIN API 开发方式比较繁琐,而 MFC 则是对 WIN API 再次封装,所以 MFC 相对于 WIN API 开发更具备效率优势,但为了对 WINDOWS 开发有一个较为全面细致的认识,在这里还是以讲解 WIN API 的相 关内容为主线。话说到这里可能更多人关心的是学习 VC+需要具备什么条件, 为什么对于这扇门屡攻不破呢? 要想学习好 VC 必须具备良好的 C/C+的基础,必要的英语阅读能力也是 必不可少的,因为大量的技术文档多以英文形式发布。 经过 10 多年的发展,Windows 已经成为包含许多子系统的系统,为了使 Windows 得到更广泛的接受,Microsoft 需要一个计划,使得添加新的子系统不 会增加开发人员的学习难度,解决这个问题的一个主要技术就是分布式对象模 型(DCOM)。DCOM 不是在一夜之间发展起来的,实际上它是两条技术发展线 结合的成果。 7 从多任务的视窗操作系统发布开始,Microsoft 就认识到用户可能想在不同 的应用程序之间交换数据。剪贴板和 DDE 是最初的两种用于进程间通信的方式, 然而 DDE 对于开发人员来说过于复杂,很少有程序成功地应用了它,而剪贴板 的易实现和易用性使其很快在多数地应用程序中获得成功。 然而在用于创建复合文档地过程中,剪贴板显得过于笨拙,OLE1.0 随着 Windows3.1 一起在 1992 年发布了,它提供了更强地处理复合文档的机制,引 入了对象链接和嵌入地概念,OLE2.0 在 1993 年发布,引入了本地激活地概念。 OLE2.0 是基于以组件为基础的软件设计思想的,在以后的几年 OLE 逐渐淡出, COM 站到了舞台地中心,随着 Windows NT4.0 在 1996 年发布,COM 实现了 通过网络远程调用地功能,这就是 DCOM。 另以方面 DCOM 的开始可以追溯到 80 年代,随着计算机网络的发展出现 了分布式系统,但是这项技术的发展需要工业团体合作建立各种标准。80 年代 末经过一些工业团体的努力,许多公司合作订立了一些协议并决定遵守这些协 议。 在这些工业团体中,OSF 成为为某些领域订立标准的广泛的协会联盟。 OSF 的成员决定解决分布式计算的问题,经过努力,分布式计算环境(DCE)说 明书出版了。DCE 的目标是提供一个建立分布式系统的环境,它的成果之一是 远程过程调用(RPC)的诞生,RPC 实现了不同计算机上应用程序的通信, DCOM 正是使用 RPC 来实现跨计算机的通信。 2.1.22.1.2 MFCMFC 简介简介 MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了 一个应用程序框架,它的目的就是让程序员在此基础上来建立 Windows 下的应 用程序,这是一种相对 SDK 来说更为简单的方法。因为总体上,MFC 框架定义 了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是 通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C+提供了相应的工具来完成这个工作:AppWizard 可以用来生成初步 的框架文件(代码和资源等) ;资源编辑器用于帮助直观地设计用户接口; ClassWizard 用来协助添加代码到框架文件;最后,编译,则通过类库实现了 应用程序特定的逻辑。 1.1.封装封装 构成 MFC 框架的是 MFC 类库。MFC 类库是 C+类库。这些类或者封装了 Win32 应用程序编程接口,或者封装了应用程序的概念,或者封装了 OLE 特性,或者 封装了 ODBC 和 DAO 数据访问的功能,等等,分述如下。 (1)对 Win32 应用程序编程接口的封装 用一个 C+ Object 来包装一个 Windows Object。例如:class CWnd 是一个 C+ window object,它把 Windows window(HWND)和 Windows window 有关的 API 函数封装在 C+ window object 的成员函数内,后者的成员变量 m_hWnd 就 是前者的窗口句柄。 (2)对应用程序概念的封装 使用 SDK 编写 Windows 应用程序时,总要定义窗口过程,登记 Windows Class,创建窗口,等等。MFC 把许多类似的处理封装起来,替程序员完成这些 工作。另外,MFC 提出了以文档-视图为中心的编程模式,MFC 类库封装了对它 的支持。文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处 8 理、查看数据。 (3)对 COM/OLE 特性的封装 OLE 建立在 COM 模型之上,由于支持 OLE 的应用程序必须实现一系列的接口 (Interface) ,因而相当繁琐。MFC 的 OLE 类封装了 OLE API 大量的复杂工作, 这些类提供了实现 OLE 的更高级接口。 (4)对 ODBC 功能的封装 以少量的能提供与 ODBC 之间更高级接口的 C+类,封装了 ODBC API 的大 量的复杂的工作,提供了一种数据库编程模式。 2.2.继承继承 首先,MFC 抽象出众多类的共同特性,设计出一些基类作为实现其他类的基础。 这些类中,最重要的类是 CObject 和 CCmdTarget。CObject 是 MFC 的根类,绝 大多数 MFC 类是其派生的,包括 CCmdTarget。CObject 实现了一些重要的特性, 包括动态类信息、动态创建、对象序列化、对程序调试的支持,等等。所有从 CObject 派生的类都将具备或者可以具备 CObject 所拥有的特性。CCmdTarget 通过封装一些属性和方法,提供了消息处理的架构。MFC 中,任何可以处理消 息的类都从 CCmdTarget 派生。针对每种不同的对象,MFC 都设计了一组类对这 些对象进行封装,每一组类都有一个基类,从基类派生出众多更具体的类。这 些对象包括以下种类:窗口对象,基类是 CWnd;应用程序对象,基类是 CwinThread;文档对象,基类是 Cdocument,等等。程序员将结合自己的实际, 从适当的 MFC 类中派生出自己的类,实现特定的功能,达到自己的编程目的。 3.3.虚拟函数和动态约束虚拟函数和动态约束 MFC 以“C+”为基础,自然支持虚拟函数和动态约束。但是作为一个编程框架, 有一个问题必须解决:如果仅仅通过虚拟函数来支持动态约束,必然导致虚拟 函数表过于臃肿,消耗内存,效率低下。例如,CWnd 封装 Windows 窗口对象时, 每一条 Windows 消息对应一个成员函数,这些成员函数为派生类所继承。如果 这些函数都设计成虚拟函数,由于数量太多,实现起来不现实。于是,MFC 建 立了消息映射机制,以一种富有效率、便于使用的手段解决消息处理函数的动 态约束问题。这样,通过虚拟函数和消息映射,MFC 类提供了丰富的编程接口。 程序员继承基类的同时,把自己实现的虚拟函数和消息处理函数嵌入 MFC 的编 程框架。MFC 编程框架将在适当的时候、适当的地方来调用程序的代码。本书 将充分的展示 MFC 调用虚拟函数和消息处理函数的内幕,让读者对 MFC 的编程 接口有清晰的理解。 4. MFCMFC 的宏观框架体系的宏观框架体系 如前所述,MFC 实现了对应用程序概念的封装,把类、类的继承、动态约 束、类的关系和相互作用等封装起来。这样封装的结果对程序员来说,是一套 开发模板(或者说模式) 。针对不同的应用和目的,程序员采用不同的模板。例 如,SDI 应用程序的模板,MDI 应用程序的模板,规则 DLL 应用程序的模板,扩 展 DLL 应用程序的模板,OLE/ACTIVEX 应用程序的模板,等等。这些模板都采 用了以文档-视为中心的思想,每一个模板都包含一组特定的类。典型的 MDI 应 用程序的构成将在下一节具体讨论。为了支持对应用程序概念的封装,MFC 内 部必须作大量的工作。例如,为了实现消息映射机制,MFC 编程框架必须要保 证首先得到消息,然后按既定的方法进行处理。又如,为了实现对 DLL 编程的 支持和多线程编程的支持,MFC 内部使用了特别的处理方法,使用模块状态、 线程状态等来管理一些重要信息。虽然,这些内部处理对程序员来说是透明的, 9 但是,懂得和理解 MFC 内部机制有助于写出功能灵活而强大的程序。总之,MFC 封装了 Win32 API,OLE API,ODBC API 等底层函数的功能,并提供更高一层的 接口,简化了 Windows 编程。同时,MFC 支持对底层 API 的直接调用。 MFC 提供了一个 Windows 应用程序开发模式,对程序的控制主要是由 MFC 框架完成的,而且 MFC 也完成了大部分的功能,预定义或实现了许多事件和消 息处理,等等。框架或者由其本身处理事件,不依赖程序员的代码;或者调用 程序员的代码来处理应用程序特定的事件。 MFC 是 C+类库,程序员就是通过使用、继承和扩展适当的类来实现特定 的目的。例如,继承时,应用程序特定的事件由程序员的派生类来处理,不感 兴趣的由基类处理。实现这种功能的基础是 C+对继承的支持,对虚拟函数的 支持,以及 MFC 实现的消息映射机制。 2.22.2 本章小节本章小节 本章主要简要介绍了 VisualC+语言的发展历程,从早期的 Vc1.0 到 6.0,VisualC+语言的功能更加强大,集成开发环境内部的工具也得到了相应 的提升。同时,介绍了 MFC 的特点和机制,也介绍了 VisualC+语言的新特性, 即强制内联关键字和 ADO 绑定,从而大大简化了程序开发人员的编程工作, 提高了程序开发人员的工作效率。 第三章第三章 AES 加密算法的分析加密算法的分析 3.3.1 1 AES 算法的数学基础算法的数学基础 AES 算法是基于有限域 GF(28)定义的。 (1)有限域 一个元素个数有限的域,称为有限域,记为 GF(P) ,P 为域中元素的个数。 如 GF(28)就代表域中有 256 个元素。 (2)有限域 GF(28)上的多项式 为了描述方便,AES 算法采用多项式表示法。由于该算法只涉及一个字节 和四个字节的运算,因此,本文只介绍一个字节和四个字节(也称字)的多项 式表示。 假设: 一个字节 b=b7 b6 b5 b4 b3 b2 b1 b0 (bi0,1) 四个字节 W=W3 W2 W1 W0(WiGF(28) 则 一个字节 b 对应的多项式为 b(x)=b7x7+b6x6 +b5x5+b4x4+b3x3+b2x2+ b1x+ b0, 其中 bi0,1 (3.1) 四个字节 W 对应的多项式为 W(x)=W3x3+W2x2+W1x+W0 ,其中 WiGF(28) (3.2) (3)有限域 GF(28)上的多项式运算 定义 4-1(单字节加法): 对任意的 a,b,c GF(28),若 a=a7a6a5a4a3a2a1a0,b=b7b6b5b4b3b2b1b0,其中 ai,bi 0,1,则 a b 定 义为 a,b 对应位异或所得的结果。 定义 4-2(单字节乘法): 对任意的 a, b, c GF(28),a(x), b(x), 10 c(x)为 a, b, c 对应的多项式。若定义 ab=c,则 c(x)=( a(x)b(x)) mod m(x) (其中 m(x)= x8+x4+x3+x+1 ,且系数的加法采用模 2 加)10。 定义 4-3(四字节加法): 对于任意的 A= A3A2A1A0,B= B3B2B1B0,其中 Ai, Bi GF(28),则 AB 定义为 A,B 中各字节对应异或所得的结果。 定义 4-4(四字节加法): 对于任意的 A= A3A2A1A0,B= B3B2B1B0,C= C3C2C1C0,其中 A i, Bi, Ci GF(28),A(x) ,B(x) ,C(x)为 A, B, C 其对 应的多项式。若定义 AB=C,则 C(x)=(A(x)B(x))mod m(x)(其中 m(x)= x4+ 1,且系数的加法采用四字节加法) 定义 4-5(乘法逆):设 A,B GF(28), A(x),B(x)为 GF(28)上的多项 式,如果 A(x) B(x)=1,则称 A 和 B 互为乘法逆。 3.2 AES 算法描述算法描述 3.2.13.2.1 相关的定义相关的定义 为了便于后面的表述,先做以下定义: AES:高级加密标准。 Byte:一组数据,要么作为一个字节数据要么作为 8 位独立的数据使用。 State:128 位输入构成的矩阵及其该矩阵经过运算得到的中间结果。 S-box:在轮密钥扩展中用以一对一字节替换的 4 行 4 列的非线性的表格11。 Nb:State 的列数,AES 标准中 Nb=4。 Nk:密钥中字的个数,Nk=密钥长度/32。 Nr:加密轮数。Cipher key:表示种子密钥。Round keyi:表示第 i 轮 密钥。TotWord: 密钥移位 SubWord: 密钥字代换 W:表示存放扩展密钥的一维数组(每个元素为一个字) 。 AES 算法是一种分组长度固定、密钥长度可变的加密算法。其分组长度和密 钥长度分别可取 128 位, 192 位和 256 位。加密的轮数依赖于数据块的长度和 密钥长度,其关系如表 3.1 所示。 表 3.1 密钥长度和加密轮数的关系 密钥长度 (Nk words) 块长度 (Nkwords ) 轮数 (Nr) AES1284410 AES1926412 AES2568414 3.2.23.2.2 算法的结构及相关函数的定义算法的结构及相关函数的定义 一、一、AESAES 算法整体结构算法整体结构 AES 加密算法主要由四类变换构成:字节代换(Byte Sub) 、行移位变换 (Shift Row) 、列混淆变换(Mix Column)和轮密钥加变换(AddRoundKey) , 其算法结构如图 4.1 所示12 13 11 图 3.1 AES 加密解密结构图 二、状态和密钥初始化二、状态和密钥初始化 AES 加密时,首先要利用 128 位明文分组和 128 位种子密钥分别对 State 和 Round Key 进行初始化。 假设:M 为 128 位明文分组,将 M 按字节依序分成 M0,M1, ,M15,Cipher key 为 128 位种子密钥,将其按字节依序分成 K0,K1, ,K15,则初始化的 State 和 Round key 分别如图 3.2 、图 3.3 所 示。 图 3.3 RoundKey 图 3.2 State 三、轮变换三、轮变换 AES 加密算法的主体是加密轮变换,该轮变换主要包含 SubByte,ShiftRow,MixColumn 和 AddRoundKey 四个子变换。下面依次对这四 个子变换进行分析。 1.SubByte 变换 K0K4K8K12k00k01k02k03 K1K5K9K13k10k11k12k13 K2K6K10K14k20k21k22k23 K3K7K11K15 k30k31k32k33 M0M4M8M12S0,0S0,1S0,2S0,3 M1M5M9M13S1,0S1,1S1,2S1,3 M2M6M10M14S2,0S2,1S2,2S2,3 M3M7M11M15 S3,0S3,1S3,2S3,3 12 S0 , j S1 , j = S2 , j S3 , j 02 03 01 01 01 02 03 01 01 01 02 03 03 01 01 02 S0 , j S1 , j S2 , j S3 , j SubByte 变换对 State 中的每个字节进行 S 盒代替变换,该变换由两步构 成: 求 State 中各字节的乘法逆运算,其中,S 盒如下图 3.4 所示14: 对所得的结果做式(3.3)所示的仿射变换 y=f(x) 15。 图 3.4 S 盒 (3.3) 0 1 1 0 0 0 1 1 x x x x x x x x 11111000 01111100 00111110 00011111 10001111 11000111 11100011 11110001 y y y y y y y y 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 2.ShiftRow2.ShiftRow 变换变换 ShiftRow 变换将 State 中的行按不同的偏移量循环移位,偏移量以字节为 单位,第一行不变,第二行循环左移一个字节,第三行循环左移两个字节,第 四行循环左移三个字节。 3.MixColumn3.MixColumn 变换变换 MixColumn 变换是对状态中各列的混淆变换。在 MixColumn 变换中,把一 个 State 的列看作一个 32 位数据,然后对其进行式(3.4)所示的矩阵乘法变 换 (3.4) Sj(x)= c(x) Sj(x),其中 c(x)= 03x3+ 01x2 +01x+02。 4.AddRoundKey4.AddRoundKey 变换变换 13 AddRoundKey 变换将 State 中的每个字节与本轮子密钥中对应的字节相异 或,所得结果即为 State 的 AddRoundKey 变换值16。 上述 SubByte、ShiftRow、MixColumn 变换可用图分别描述为图 3.5、图 3.6、图 3.7。 四、轮密钥调度算法四、轮密钥调度算法 轮密钥调度算法是指通过种子密钥(Cipherkey)产生轮密钥(Roundkey)的 算法。轮密钥产生算法分密钥扩展和轮密钥的选取两步完成。首先通过密钥扩 展算法将种子密钥扩展为一个扩展密钥 W(W 总长为 Nb(Nr+1)个字) ,然后再 从 W 中依次选出每轮的子密钥。其中,Roundkey0由 W 中最前面的 Nb 个字组 成,RoundKey1由接下来的 Nb 个字组成,以此类推,第 i 轮的轮密钥可以表 示为 Roundkeyi= W4i,W4i+1,W4i+2,W4i+3 (i=0,1Nr) 。 轮密钥扩展策略与 Nk 有关,Nk=6 时,密钥扩展如图 3.8 所示。计算第 i+1 组子密钥时,首先对第 i 组的 W4i+3依次做 RotByte 变换、SubWord

温馨提示

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

评论

0/150

提交评论