首页 > 编程知识 正文

ecdsa是弱加密算法吗,aes加密算法安全吗

时间:2023-05-06 10:37:39 阅读:111436 作者:3765

AES概要也称为高级加密(AES )、Rijndeal加密法,汉译是一种高级加密标准。 AES算法由比利时密码学家Joan Daemen和Vincent Rijmen共同设计,最初用于替换原始的des(dataencryptimStandard ),成为21世纪初最流行的加密算法之一AES解决了以往大多数的加密问题,如攻击加密标准、暴力解密密码等,AES算法效果不佳。

AES流程首先放入加密流程图。

如上图所示,明文经过完整的AES形成的最终密文的流程图。 整个AES一共分为这些步骤:

将完整的明文分为几个块128bit(16bytes )大小的明文块。 根据选择的填充方法,完全填充最后一个明文块。 用AES加密器和密钥对各明文块进行加密,成为加密块。 把用多个明文块加密的密文块连接起来,成为最终的完整密文。 看到这里,你可能会有点怀疑什么是AES加密器,他的算法如何,AES加密和其他加密有什么不同,为什么要把明文分成128位的明文块。 等等,下面一个一个解答。

AES加密原理1 .所属的加密类型众所周知,加密算法有散列、MD5、SHA等多种类型,在这些加密算法中,AES属于典型的对称加密算法虽然是类似MD5的散列摘要算法,但AES是真正意义上的加密算法。 例如,AES可以在发送方加密明文,接收方也可以用密钥解密,但使用的密钥是一致的。 换句话说,密文到明文的过程为可逆,这被称为对称密码算法。 在文章摘要算法中,明文被分块,用散列函数提取随机值并合并为明文组成的密集字符段,由于这一过程是不可逆的,所以文章摘要算法经常被用来验证一致性。

2 .密钥是AES算法实现加密和解密的根本。 对称加密算法是对称的,因为同一个密钥AES支持三种长度的密钥: 128位、192位和256位。 平时被称为AES128、AES192、AES256的实际上是指对不同长度的密钥使用AES算法。 因此,从安全性的角度来看,256位密钥是最安全的,从性能的角度来看,128位密钥是最好的。

AES是组密码,组密码是指将明文分成一组,各组长度相等,每次加密一组数据,直到明文完全加密。 在AES标准规范中,分组长度限制为128位。 这意味着每个数据包为16个字节(每字节8位)。 密钥长度可以使用128位、192位或256位。 建议的加密回合数因密钥长度而异。 请参照下表。

AES密钥长度加密回合数128101921225614 3。 在填充方式中,作为AES的第一步,叙述了将明文分割为规定大小的明文块,但并不是所有的明文都能完全容纳,所以剩下的部分用填充方式进行补充。 有以下几个补充规定。

无填充:不填充。 明文块大小正好是128的倍数,没有剩余或溢出部分。 PKCS5Padding (如果明文块小于16字节(128bit ),则在明文块的末尾添加适当数量的字符,每个字节的值为缺少的字符数。 ISO10126Padding :如果明文块小于16字节(128比特),用适当数量的字节填充明文块的末尾,则最后一个字符值等于缺少的字符数,http://www.Sina 用字符填充例如,剩下的明文{a,b,c,d,e,f,g,h,I,j,k}缺少6个字节,在第二种填充方法中,这个明文块由{a,b,c,d,e,f,g,k}组成、s、c、6};

如下图所示,16字节明文块在每个处理步骤中排列为4X4的二维阵列。

4.AES加密器是整个AES算法的核心。 AES加密过程在44字节矩阵上运行。 该矩阵也称为“体(state )”,其初始值为明文块(矩阵中的一个元素大小为明文块中的一个Byte )。 在加密中,每个循环的AES加密循环包括四个步骤,即向四种明文块的转换(字节替换、行移位、列模糊、循环密钥)。

如上所述,整个加密过程分为很多回合数,每个加密方式都很相似。 如果第一个循环更改为初始循环,加密器将只生成密钥。 这意味着只生成轮密钥。 在最后一个循环中,三个转换为字节,移位行,并添加循环密钥。 剩下的回合数中的四个变换都必须执行。

分析1 .字节替换所谓的字节替换是将明文块的每一个字节替换为另一个字节。 替代的根据是什么呢? 基于16X16大小的二维常量数组,称为3http://www.Sina.com/(subtitutionbox )。 如果明文块中a [ 2,2 ]=5b (1字节为2位的十六进制),则输出值b [ 2,2 ]=s [5] [ 11 ]。 (示例只是一种简单易懂的字节替换方法。)

2.行移位

第一行循环左移0个字节,第二行循环左移1个字节,第三行循环左移2个字节,第四行循环左移3个字节。

3.列混淆

这一步,输入数组的每一列要和一个名为修补矩阵(fixed matrix)的二维常量数组做矩阵相乘,得到对应的输出列。

具体的修补矩阵如下图所示

4.加轮密钥

这一步是唯一利用到密钥的一步,128bit的密钥也同样被排列成4X4的矩阵。让输入数组的每一个字节a[i,j]与密钥对应位置的字节k[i,j]异或一次,就生成了输出值b[i,j]

需要补充一点,加密的每一轮所用到的密钥并不是相同的。这里涉及到一个概念:扩展密钥(KeyExpansions)。

扩展密钥(KeyExpansions)

AES源代码中用长度 4 * 4 *(10+1) 字节的数组W来存储所有轮的密钥。W{0-15}的值等同于原始密钥的值,用于为初始轮做处理。后续每一个元素W[i]都是由W[i-4]和W[i-1]计算而来,直到数组W的所有元素都赋值完成。W数组当中,W{0-15}用于初始轮的处理,W{16-31}用于第1轮的处理,W{32-47}用于第2轮的处理 ......一直到W{160-175}用于最终轮(第10轮)的处理。

具体地,W矩阵的每一列的4个字节组成一个字,矩阵4列的4个字依次命名为W[0]、W[1]、W[2]和W[3],它们构成一个以字为单位的数组W。例如,设密钥K为"abcdefghijklmnop",则K0 = ‘a’,K1 = ‘b’, K2 = ‘c’,K3 = ‘d’,W[0] = “abcd”。


接着,对W数组扩充40个新列,构成总共44列的扩展密钥数组。新列以如下的递归方式产生:
1.如果i不是4的倍数,那么第i列由如下等式确定:
W[i]=W[i-4]⨁W[i-1]
2.如果i是4的倍数,那么第i列由如下等式确定:
W[i]=W[i-4]⨁T(W[i-1])
其中,T是一个有点复杂的函数。
函数T由3部分组成:字循环、字节代换和轮常量异或,这3部分的作用分别如下。
a.字循环:将1个字中的4个字节循环左移1个字节。即将输入字[b0, b1, b2, b3]变换成[b1,b2,b3,b0]。
b.字节代换:对字循环的结果使用S盒进行字节代换。
c.轮常量异或:将前两步的结果同轮常量Rcon[j]进行异或,其中j表示轮数。

轮常量T如下图所示。

这四个函数是AES加密中最重要的四个操作函数,至于解密,上面我们也说了,AES是对称加密的,所以加密只需要得到上面函数的逆操作即可由密文转换成明文。比如字节替换函数,在解密时换成字节逆替换函数即可。

AES加密模式

AES的工作模式,体现在把明文块加密成密文块的处理过程中。AES加密算法提供了五种不同的工作模式:

1.ECB(Electronic Code Book电子密码本)模式

ECB模式是最早采用和最简单的模式,在该模式下,每一个明文块的加密都是完全独立,互不干涉的。

优点:简单有利于并行计算。

缺点:同样也很明显,相同的明文块经过加密会变成相同的密文块,因此安全性较差。

 

2.CBC模式

CBC模式(Cipher Block Chaining)引入了一个新的概念:初始向量IV(Initialization Vector)。IV是做什么用的呢?它的作用和MD5的“加盐”有些类似,目的是防止同样的明文块始终加密成同样的密文块。

CBC模式在每一个明文块加密前会让明文块和一个值先做异或操作。IV作为初始化变量,参与第一个明文块的异或,后续的每一个明文块和它前一个明文块所加密出的密文块相异或。这样以来,相同的明文块加密出的密文块显然是不一样的。

优点:安全性更高。

缺点:无法并行计算,性能上不如ECB;引入初始化向量IV,增加复杂度。

3.CFB(Cipher FeedBack Mode,加密反馈)模式.

4.OFB(Output FeedBack,输出反馈)模式.

5.CTR(Counter,计数)模式.CTR 模式被广泛用于 ATM 网络安全和 IPSec应用中.

最后,献上几篇不错的AES加密详解,有具体的实现示例和算法分析。我也只是站在巨人的肩膀上。

https://blog.csdn.net/qq_28205153/article/details/55798628

https://www.sohu.com/a/201169795_466846

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。