扩展欧几里得算法求逆元_密码学基础:AES加密算法

这篇博客介绍了AES加密算法的基础知识,包括分组大小和密码标准,强调了其安全性和效率。进一步探讨了与AES相关的数学概念,如素域和扩展域GF(2^m),并详细阐述了AES的工作流程,如密钥加法、字节代换、行位移和列混淆。此外,文章还重点讲解了扩展欧几里得算法在求解逆元中的应用,以及S盒和逆S盒的生成过程,适合已掌握C语言和相关数学知识的读者进阶学习。
摘要由CSDN通过智能技术生成

ad8c3d5f4e83817b6c56192f33cdec08.png

本文为看雪论坛精华文章 看雪论坛作者ID:QiuJYu 本节目的: 这一章作为AES算法的基础部分,目的主要是整理下密码学中AES加密与解密的相关知识点,并把它们分享出来。 阅读方法: 具备基础: (1)熟练掌握C语言; (2)相关数学知识 学习环境: 任意C语言开发环境,一个正确的AES算法程序(方便调试,验证程序结果 )

第一节:AES算法简介

AES的全称是Advanced Encryption Standard,意思是高级加密标准。它的出现主要是为了取代DES加密算法的,因为我们都知道DES算法的密钥长度是56Bit,因此算法的理论安全强度是2的56次方。 但二十世纪中后期正是计算机飞速发展的阶段,元器件制造工艺的进步使得计算机的处理能力越来越强,虽然出现了3DES的加密方法,但由于它的加密时间是DES算法的3倍多,64Bit的分组大小相对较小,所以还是不能满足人们对安全性的要求。 于是1997年1月2号,美国国家标准技术研究所宣布希望征集高级加密标准,用以取代DES。AES也得到了全世界很多密码工作者的响应,先后有很多人提交了自己设计的算法。 最终有5个候选算法进入最后一轮:Rijndael,Serpent,Twofish,RC6和MARS。最终经过安全性分析、软硬件性能评估等严格的步骤,Rijndael算法获胜。   在密码标准征集中,所有AES候选提交方案都必须满足以下标准:
  • 分组大小为128位的分组密码。

  • 必须支持三种密码标准:128位、192位和256位。

  • 比提交的其他算法更安全。

  • 在软件和硬件实现上都很高效。

AES密码与分组密码Rijndael基本上完全一致,Rijndael分组大小和密钥大小都可以为128位、192位和256位。然而AES只要求分组大小为128位,因此只有分组长度为128Bit的Rijndael才称为AES算法。 本文只对分组大小128位,密钥长度也为128位的Rijndael算法进行分析。密钥长度为192位和256位的处理方式和128位的处理方式类似,只不过密钥长度每增加64位,算法的循环次数就增加2轮,128位循环10轮、192位循环12轮、256位循环14轮。 91320c1e7d461668de5637bfb933e565.png

第二节:AES算法相关数学知识

在AES算法中的MixColumn层中会用到伽罗瓦域中的乘法运算,而伽罗瓦域的运算涉及一些数学知识,所以本节将会介绍其相关的知识帮助大家了解,知识不难看过就清楚了。 > > > >

素域简介

有限域有时也称伽罗瓦域,它指的是由有限个元素组成的集合,在这个集合内可以执行加、减、乘和逆运算。 而在密码编码学中,我们只研究拥有有限个元素的域,也就是有限域。域中包含元素的个数称为域的阶。只有当m是一个素数幂时,即m=p^n(其中n为正整数是p的次数,p为素数),阶为m的域才存在。 p称为这个有限域的特征。 也就是说,有限域中元素的个数可以是11(p=11是一个素数,n=1)、可以是81(p=3是一个素数,n=4)、也可以是256(p=2是一个素数,n=8).....但有限域的中不可能拥有12个元素,因为12=2·2·3,因此12也不是一个素数幂。   有限域中最直观的例子就是阶为素数的域,即n=1的域。域GF(p)的元素可以用整数0、1、...、p-1l来表示。域的两种操作就是模整数加法和整数乘法模p。加上p是一个素数,整数环Z表示为GF(p),也成为拥有素数个元素的素数域或者伽罗瓦域。GF(p)中所有的非零元素都存在逆元,GF(p)内所有的运算都是模p实现的。   素域内的算数运算规则如下:(1)加法和乘法都是通过模p实现的;(2)任何一个元素a的加法逆元都是由a+(a的逆元)=0 mod p得到的;(3)任何一个非零元素a的乘法逆元定义为a·a的逆元=1。 举个例子,在素域GF(5)={0、1、2、3、4}中,2的加法逆元为3,这是因为2+(3)=5,5mod5=0,所以2+3=5mod5=0。2的乘法逆元为3,这是因为2·3=6,6mod5=1,所以2·3=6mod5=1。(在很多地方a的加法逆元用-a表示,a的乘法逆元用1/a表示)   注:GF(2)是一个非常重要的素域,也是存在的最小的有限域,由于GF(2)的加法,即模2加法与异或(XOR)门等价,GF(2)的乘法与逻辑与(AND)门等价,所以GF(2)对AES非常重要。 > > > >

扩展域简介

如果有限域的阶不是素数,则这样的有限域内的加法和乘法运算就不能用模整数加法和整数乘法模p表示。而且m>1的域被称为扩展域,为了处理扩展域,我们就要使用不同的符号表示扩展域内的元素,使用不同的规则执行扩展域内元素的算术运算。
在扩展域GF(2^m)中,元素并不是用整数表示的,而是用系数为域GF(2)中元素的多项式表示。这个多项式最大的度(幂)为m-1,所以每个元素共有m个系数,在AES算法使用的域GF(2^8)中,每个元素A∈GF(2^8)都可以表示为 04f002494d48c1521966d6d7f9942ade.png 注意:在域GF(2^8)中这样的多项式共有256个,这256个多项式组成的集合就是扩展域GF(2^8)。每个多项式都可以按一个8位项链的数值形式存储: 6a185f4c8daa81b3c2327ad549e7c0a4.png 像x^7、x^6等因子都无需存储,因为从位的位置就可以清楚地判断出每个系数对应的幂。 > > > >

扩展域GF(2^m)内的加减法

在AES算法中的密钥加法层中就使用了这部分的知识,但是不是很明显,因为我们通常把扩展域中的加法当作异或运算进行处理了,因为在扩展域中的加减法处理都是在底层域GF(2)内完成的,与按位异或运算等价。假设A(x)、B(x)∈GF(2^m),计算两个元素之和的方法就是: 4aa52d55df6803e858428f4223636a17.png 而两个元素之差的计算公式就是: 8dc2d2537deb0f7969992ad4647c1a4c.png 注:在减法运算中减号之所以变成加号,这就和二进制减法的性质有关了,大家可以试着验算下。从上述两个公式中我们发现在扩展域中加法和减法等价,并且与XOR等价(异或运算也被称作二进制加法)。 > > > >

扩展域GF(2^m)内的乘法

**扩展域的乘法主要运用在AES算法的列混淆层(Mix Column)中,也是列混淆层中最重要的操作。我们项要将扩展域中的两个元素用多项式形式展开,然后使用标准的多项式乘法规则将两个多项式相乘: 99faf8f9c3134c0f83af1cd88b3faa3a.png 注意:通常在多项式乘法中C(x)的度会大于m-1,因此需要对此进行化简,而化简的基本思想与素域内乘法情况相似:在素域GF(p)中,将两个整数相乘得到的结果除以一个素数,化简后的结果就是最后的余数。 而在扩展域中进行的操作就是:将两个多项式相乘的结果除以一个不可约多项式,最后的结果就是最后的余数。(这里的不可约多项式大致可以看作一个素数) 2d3c531fa0fc76279ff7e48af30fdb64.png

 举例:

  870deede178ca97f9baea99e218f33a6.png

第三节:AES算法原理

AES算法主要有四种操作处理,分别是密钥加法层(也叫轮密钥加,英文Add Round Key)、字节代换层(SubByte)、行位移层(Shift Rows)、列混淆层(Mix Column)。 而明文x和密钥k都是由16个字节组成的数据(当然密钥还支持192位和256位的长度,暂时不考虑),它是按照字节的先后顺序从上到下、从左到右进行排列的。 加密出的密文读取顺序也是按照这个顺序读取的,相当于将数组还原成字符串的模样了,然后再解密的时候又是按照4·4数组处理的。 AES算法在处理的轮数上只有最后一轮操作与前面的轮处理上有些许 不同(最后一轮只是少了列混淆处理),在轮处理开始前还单独进行了一次轮密钥加的处理。 在处理轮数上,我们只考虑128位密钥的10轮处理。接下来,就开始一步步的介绍AES算法的处理流程了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值