【易客吧】_全网激活码总代_激活码商城

您现在的位置是:首页 > 热门资讯 > 正文

热门资讯

揭秘 AES 加密算法的数学技巧: Galois 域及其应用 (aes/des)

用户投稿2024-04-16热门资讯30

简介

AES(高级加密标准)是当今使用最广泛的对称块加密算法之一。其安全性基于 Galois 域(GF)上的一组数学运算,这些运算在算法的设计中发挥着至关重要的作用。在本文中,我们将探讨 Galois 域以及它们在 AES 加密算法中的应用。

Galois 域

Galois 域,又称有限域,是由有限元素的集合和两组运算(加法和乘法)组成的代数结构。这些运算满足以下属性:交换律:对于所有域元素 a 和 b,都有 a + b = b + a 和 a b = b a。结合律:对于所有域元素 a、b和 c,都有 (a + b) + c = a + (b + c) 和 (a b) c = a (b c)。分配律:对于所有域元素 a、b 和 c,都有 a (b + c) = (a b) + (a c)。单位元素:存在唯一元素 0 和 1,使得对于所有域元素 a,都有 0 + a = a 和 1 a = a。逆元:对于所有非零域元素 a,存在唯一元素 b,使得 a b = 1。Galois 域可以用 GF(p^n) 来表示,其中 p 是素数,n 是域中元素的数量。最常见的 Galois 域是 GF(2^8),它包含 256 个元素。

AES 加密算法中的 Galois 域

AES 加密算法使用 Galois 域 GF(2^8) 作为其基本运算的基础。在加密过程中,数据块被视为元素为 GF(2^8) 的矩阵,并应用一系列变换来混淆和扩散数据

密码学AES算法解题

AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高。 用AES加密2000年10月,NIST(美国国家标准和技术协会)宣布通过从15种候选算法中选出的一项新的密匙加密标准。 Rijndael被选中成为将来的AES。 Rijndael是在1999年下半年,由研究员Joan Daemen 和 Vincent Rijmen 创建的。 AES正日益成为加密各种形式的电子数据的实际标准。 美国标准与技术研究院(NIST)于2002年5月26日制定了新的高级加密标准(AES)规范。 算法原理 AES算法基于排列和置换运算。 排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。 AES使用几种不同的方法来执行排列和置换运算。 AES是一个迭代的、对称密钥分组的密码,它可以使用128、192和256位密钥,并且用128位(16字节)分组加密和解密数据。 与公共密钥加密使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。 通过分组密码返回的加密数据的位数与输入数据相同。 迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。 密码学简介据记载,公元前400年,古希腊人发明了置换密码。 1881年世界上的第一个电话保密专利出现。 在第二次世界大战期间,德国军方启用“恩尼格玛”密码机,密码学在战争中起着非常重要的作用。 随着信息化和数字化社会的发展,人们对信息安全和保密的重要性认识不断提高,于是在1997年,美国国家保准局公布实施了“美国数据加密标准(DES)”,民间力量开始全面介入密码学的研究和应用中,采用的加密算法有DES、RSA、SHA等。 随着对加密强度的不断提高,近期又出现了AES、ECC等。 使用密码学可以达到以下目的:保密性:防止用户的标识或数据被读取。 数据完整性:防止数据被更改。 身份验证:确保数据发自特定的一方。

如何使用java对密码加密 加密方式aes

Java有相关的实现类:具体原理如下对于任意长度的明文,AES首先对其进行分组,每组的长度为128位。 分组之后将分别对每个128位的明文分组进行加密。 对于每个128位长度的明文分组的加密过程如下:(1)将128位AES明文分组放入状态矩阵中。 (2)AddRoundKey变换:对状态矩阵进行AddRoundKey变换,与膨胀后的密钥进行异或操作(密钥膨胀将在实验原理七中详细讨论)。 (3)10轮循环:AES对状态矩阵进行了10轮类似的子加密过程。 前9轮子加密过程中,每一轮子加密过程包括4种不同的变换,而最后一轮只有3种变换,前9轮的子加密步骤如下:●SubBytes变换:SubBytes变换是一个对状态矩阵非线性的变换;●ShiftRows变换:ShiftRows变换对状态矩阵的行进行循环移位;●MixColumns变换:MixColumns变换对状态矩阵的列进行变换;●AddRoundKey变换:AddRoundKey变换对状态矩阵和膨胀后的密钥进行异或操作。 最后一轮的子加密步骤如下:●SubBytes变换:SubBytes变换是一个对状态矩阵非线性的变换;●ShiftRows变换:ShiftRows变换对状态矩阵的行进行循环移位;●AddRoundKey变换:AddRoundKey变换对状态矩阵和膨胀后的密钥进行异或操作;(4)经过10轮循环的状态矩阵中的内容就是加密后的密文。 AES的加密算法的伪代码如下。 在AES算法中,AddRoundKey变换需要使用膨胀后的密钥,原始的128位密钥经过膨胀会产生44个字(每个字为32位)的膨胀后的密钥,这44个字的膨胀后的密钥供11次AddRoundKey变换使用,一次AddRoundKey使用4个字(128位)的膨胀后的密钥。 三.AES的分组过程对于任意长度的明文,AES首先对其进行分组,分组的方法与DES相同,即对长度不足的明文分组后面补充0即可,只是每一组的长度为128位。 AES的密钥长度有128比特,192比特和256比特三种标准,其他长度的密钥并没有列入到AES联邦标准中,在下面的介绍中,我们将以128位密钥为例。 四.状态矩阵状态矩阵是一个4行、4列的字节矩阵,所谓字节矩阵就是指矩阵中的每个元素都是一个1字节长度的数据。 我们将状态矩阵记为State,State中的元素记为Sij,表示状态矩阵中第i行第j列的元素。 128比特的明文分组按字节分成16块,第一块记为“块0”,第二块记为“块1”,依此类推,最后一块记为“块15”,然后将这16块明文数据放入到状态矩阵中,将这16块明文数据放入到状态矩阵中的方法如图2-2-1所示。 块0块4块8块12块1块5块9块13块2块6块10块14块3块7块11块15图2-2-1将明文块放入状态矩阵中五.AddRoundKey变换状态矩阵生成以后,首先要进行AddRoundKey变换,AddRoundKey变换将状态矩阵与膨胀后的密钥进行按位异或运算,如下所示。 其中,c表示列数,数组W为膨胀后的密钥,round为加密轮数,Nb为状态矩阵的列数。 它的过程如图2-2-2所示。 图2-2-2AES算法AddRoundKey变换六.10轮循环经过AddRoundKey的状态矩阵要继续进行10轮类似的子加密过程。 前9轮子加密过程中,每一轮要经过4种不同的变换,即SubBytes变换、ShiftRows变换、MixColumns变换和AddRoundKey变换,而最后一轮只有3种变换,即SubBytes变换、ShiftRows变换和AddRoundKey变换。 AddRoundKey变换已经讨论过,下面分别讨论余下的三种变换。 1.SubBytes变换SubBytes是一个独立作用于状态字节的非线性变换,它由以下两个步骤组成:(1)在GF(28)域,求乘法的逆运算,即对于α∈GF(28)求β∈GF(28),使αβ =βα = 1mod(x8 + x4 + x3 + x + 1)。 (2)在GF(28)域做变换,变换使用矩阵乘法,如下所示:由于所有的运算都在GF(28)域上进行,所以最后的结果都在GF(28)上。 若g∈GF(28)是GF(28)的本原元素,则对于α∈GF(28),α≠0,则存在β ∈ GF(28),使得:β = gαmod(x8 + x4 + x3 + x + 1)由于g255 = 1mod(x8 + x4 + x3 + x + 1)所以g255-α = β-1mod(x8 + x4 + x3 + x + 1)根据SubBytes变换算法,可以得出SubBytes的置换表,如表2-2-1所示,这个表也叫做AES的S盒。 该表的使用方法如下:状态矩阵中每个元素都要经过该表替换,每个元素为8比特,前4比特决定了行号,后4比特决定了列号,例如求SubBytes(0C)查表的0行C列得FE。 表2-2-1AES的SubBytes置换表它的变换过程如图2-2-3所示。 图2-2-3SubBytes变换AES加密过程需要用到一些数学基础,其中包括GF(2)域上的多项式、GF(28)域上的多项式的计算和矩阵乘法运算等,有兴趣的同学请参考相关的数学书籍。 2.ShiftRows变换ShiftRows变换比较简单,状态矩阵的第1行不发生改变,第2行循环左移1字节,第3行循环左移2字节,第4行循环左移3字节。 ShiftRows变换的过程如图2-2-4所示。 图2-2-4AES的ShiftRows变换3.MixColumns变换在MixColumns变换中,状态矩阵的列看作是域GF(28)的多项式,模(x4+1)乘以c(x)的结果:c(x)=(03)x3+(01)x2+(01)x+(02)这里(03)为十六进制表示,依此类推。 c(x)与x4+1互质,故存在逆:d(x)=(0B)x3+(0D)x2+(0G)x+(0E)使c(x)•d(x) = (D1)mod(x4+1)。 设有:它的过程如图2-2-5所示。 图2-2-5AES算法MixColumns变换七.密钥膨胀在AES算法中,AddRoundKey变换需要使用膨胀后的密钥,膨胀后的密钥记为子密钥,原始的128位密钥经过膨胀会产生44个字(每个字为32位)的子密钥,这44个字的子密钥供11次AddRoundKey变换使用,一次AddRoundKey使用4个字(128位)的膨胀后的密钥。 密钥膨胀算法是以字为基础的(一个字由4个字节组成,即32比特)。 128比特的原始密钥经过膨胀后将产生44个字的子密钥,我们将这44个密钥保存在一个字数组中,记为W[44]。 128比特的原始密钥分成16份,存放在一个字节的数组:Key[0],Key[1]……Key[15]中。 在密钥膨胀算法中,Rcon是一个10个字的数组,在数组中保存着算法定义的常数,分别为:Rcon[0] = 0xRcon[1] = 0xRcon[2] = 0xRcon[3] = 0xRcon[4] = 0xRcon[5] = 0xRcon[6] = 0xRcon[7] = 0xRcon[8] = 0x1bRcon[9] = 0x另外,在密钥膨胀中包括其他两个操作RotWord和SubWord,下面对这两个操作做说明:RotWord( B0,B1,B2,B3 )对4个字节B0,B1,B2,B3进行循环移位,即RotWord( B0,B1,B2,B3 ) = ( B1,B2,B3,B0 )SubWord( B0,B1,B2,B3 )对4个字节B0,B1,B2,B3使用AES的S盒,即SubWord( B0,B1,B2,B3 ) = ( B’0,B’1,B’2,B’3 )其中,B’i = SubBytes(Bi),i = 0,1,2,3。 密钥膨胀的算法如下:八.解密过程AES的加密和解密过程并不相同,首先密文按128位分组,分组方法和加密时的分组方法相同,然后进行轮变换。 AES的解密过程可以看成是加密过程的逆过程,它也由10轮循环组成,每一轮循环包括四个变换分别为InvShiftRows变换、InvSubBytes变换、InvMixColumns变换和AddRoundKey变换;这个过程可以描述为如下代码片段所示:九.InvShiftRows变换InvShiftRows变换是ShiftRows变换的逆过程,十分简单,指定InvShiftRows的变换如下。 Sr,(c+shift(r,Nb))modNb= Sr,c for 0 < r< 4 and 0 ≤ c < Nb图2-2-6展示了这个过程。 图2-2-6AES算法InvShiftRows变换十.InvSubBytes变换InvSubBytes变换是SubBytes变换的逆变换,利用AES的S盒的逆作字节置换,表2-2-2为InvSubBytes变换的置换表。 表2-2-2InvSubBytes置换表十一.InvMixColumns变换InvMixColumns变换与MixColumns变换类似,每列乘以d(x)d(x) = (OB)x3 + (0D)x2 + (0G)x + (0E)下列等式成立:( (03)x3 + (01)x2 + (01)x + (02) )⊙d(x) = (01)上面的内容可以描述为以下的矩阵乘法:十二.AddRoundKey变换AES解密过程的AddRoundKey变换与加密过程中的AddRoundKey变换一样,都是按位与子密钥做异或操作。 解密过程的密钥膨胀算法也与加密的密钥膨胀算法相同。 最后状态矩阵中的数据就是明文。

RSA和AES区别

揭秘 AES 加密算法的数学技巧: Galois 域及其应用 (aes/des) 第1张

先了解下AES和RSA的区别,前者属于 对称加密 ,后者属于 非对称加密 。 1、对称加密 对称加密就是加密和解密使用同一个密钥。 用数学公示表示就是: ▲加密:Ek(P) = C ▲解密:Dk(C) = P 这里E表示加密算法,D表示解密算法,P表示明文,C表示密文。 是不是看起来有点不太容易理解?看下图: 看过间谍局的知友们一定知道电台和密码本的功能。 潜伏里面孙红雷通过电台收听到一堆数字,然后拿出密码本比对,找到数字对应的汉字,就明白上级传达的指令。 而军统的监听台没有密码本,只看到一堆没有意义的数字,这就是对称算法的原理。 AES就属于对称加密 ,常见的对称加密方法还有DES、3DES、Blowfish、RC2以及国密的SM4。 2、非对称加密 对称加密快而且方便,但是有个缺点——密钥容易被偷或被破解。 非对称加密就可以很好的避免这个问题。 非对称算法 把密钥分成两个 ,一个自己持有叫 私钥 ,另一个发给对方,还可以公开,叫 公钥 ,用公钥加密的数据只能用私钥解开。 ▲加密: E公钥(P) = C ▲解密::D私钥(C) = P 这下就不用担心密钥被对方窃取或被破解了,私钥由自己保管。 非对称加密算法核心原理其实就是设计一个数学难题,使得用公钥和明文推导密文很容易,但根据公钥、明文和密文推导私钥极其难。 RSA 就属于非对称加密,非对称加密还有Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)以及国家商用密码SM2算法。 3、AES和RSA AES和RSA都很安全,至少在目前的计算机体系结构下,没有任何有效的攻击方式。 量子计算机时代,RSA有一定的破绽,因为利用shros algorithm,量子计算机穷举计算质因子速度可以提高N个数量级,能够在有限的时间内破解RSA密钥。 AES256至少目前并没有什么明显的漏洞。 AES作为对称加密技术,加密速度很快。 现在高端一点的CPU都带有AES-NI指令,可以极快的完成加密和解密。 举例来说,坚果云存储系统采用了intel 的AES-NI加速,在采用AES加密和解密的时候, 单核的性能可以超过 1GB Byte/秒,非常非常快,很适合对大量数据进行加解密。 但是AES作为对称加密技术,如何安全的分发密钥是一个难题。 通过任何方式传递密钥都有泄密的风险。 当然,目前我国高大上的量子通信技术或许能很好的解决这个问题。 RSA作为非对称加密技术的代表, 加解密的速度其实相当慢,只能对小块的数据进行加解密。 但是其非对称的特点,满足公钥可以随处分发,只有公钥能解密私钥加密的数据,只有私钥能解密公钥加密的数据。 所以很适合用来进行密钥分发和身份验证,这两个应用场景刚好相反。 1)用于对称秘钥分发的场景,其他人用公钥加密对称的秘钥,那么只有授权人才持有私钥,因此才能解密获得对应的秘钥,解决了AES密钥分发的难题; 2)对于身份验证的场景,授权人用私钥加密一段指令,其他人用公钥解密对应的数据,验证对应的指令与之前约定的某些特征一致(例如,这段话必须使用四川口音,像是坚果云CEO 的标准四川口音==),如果一致,那么可以确认这个指令就是授权人发出的。 相关趣闻轶事: RSA除了是一个伟大的发明,被免费开放给所有互联网用户使用。 它的发明者还以此成立了一家名为 RSA Security 的网络安全公司,这家公司最后被EMC高价收购。 这是德艺双馨的伟大证明, 是“又红又专”的典范。 RSA的算法是以三个发明者的名字命名的,三位都是成功的数学家,科学家和企业家,其中的排名第一Ron Rivest,有非常多的杰出贡献。 RSA是整个互联网数据安全的基础,与光纤处于同样基础和重要的方式。 大部分的加密和解密的应用都是同时应用RSA和AES。 总结 破解加密的难度除了跟 加密方法 有关,还跟 密钥长度 以及 加密模式 有很大的关系,就拿AES来说,有AES128和AES256( 代表密钥长度 ),显然AES256的安全性能比AES128更高,而AES又要四种模式:ECB、CBC、CFB、OFB( 代表加密模式 )。 RSA1024是属于非对称加密,是基于大整数因式分解难度,也就是两个质数相乘很容易,但是找一个大数的质因子非常困难。 量子计算机时代,RSA有一定的风险,具体可以参考: 超链接 AES256目前没有明显的漏洞,唯一的问题就是如何安全的分发密钥。 现在大部分的加密解密都是同时应用RSA和AES,发挥各自的优势,使用RSA进行密钥分发、协商,使用AES进行业务数据的加解密。

若对本页面资源感兴趣,请点击下方或右方图片,注册登录后

搜索本页相关的【资源名】【软件名】【功能词】或有关的关键词,即可找到您想要的资源

如有其他疑问,请咨询右下角【在线客服】,谢谢支持!

揭秘 AES 加密算法的数学技巧: Galois 域及其应用 (aes/des) 第2张

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~
欢迎你第一次访问网站!