aes加密算法原理_密码学(2)加密方法:AES和RSA

57309c242fa58173ea20e8e6bd879c69.png

1. 对称加密标准 encryption standard

AES (Advanced Encryption Standard)高级加密标准。Rijndael算法首先是一个密钥分组加密的算法,通过置换(permutations )和替换(substitutions)迭代加密,进过多轮操作形成密文。AES算是Rijndael算法的一种特殊实现,选的分组为128bit(16字节),密钥可以使用128、192 和 256bit三种。

AES是当前最常用的对称加密算法,讲清AES,需要有限域(Galois域)的相关知识。

2. 有限域

在抽象代数中,域是一种可进行加、减、乘和除运算的代数结构。域是环的一种。域和一般环的区别在于域要求它的元素可以进行除法运算,这等价于每个非零的元素都要有乘法逆元。简而言之,域是一个可以在其上进行加法、减法、乘法和除法运算而结果不会超出域的集合。如有理数集合、实数集合、复数集合都是域,但整数集合不是(使用除法得到的分数或小数已超出整数集合)。

如果域F只包含有限个元素,则称其为有限域。有限域中元素的个数称为有限域的阶。每个有限域的阶必为素数的幂,即有限域的阶可表示为pⁿ(p是素数、n是正整数),有限域通常称为伽罗瓦域(Galois Fields),记为GF(pⁿ)。密码学中,最常用的域是GF(2ⁿ)。

有限域在四则运算需要保证的特性是封闭性,即四则运算得到的值必须是域中元素或域中元素的组合,往往对计算结果进行mod运算来保证。

有限域可以用多项式表示,如0001 0101 可以用

进行表示。

有限域的加法和减法就是异或运算。如在

,0001 0101 + 1000 0110 = 1001 0011,因此用
有限域表示的多项式也符合这种异或运算,如

有限域的乘法比较复杂,为保证乘法结果在有限域是封闭的,需要对多项式结果进行取模处理,取模的对象是本原多项式,本原多项式是不可因式分解的多项式,下面是常用的本原多项式。

cdc55987e8aeabad5cd333111c3e44e5.png

伽罗华域上的多项式乘法,其结果需要mod 本原多项式P(x),在

中可以通过以下方式简化计算。

例子:

a89eaee9f42f74a3e12e458648fa4966.png

9db5e36b852528c1e67db04d0c43785c.png

3. AES加密:

AES每轮的加密步骤可以分为字节代换(S-BOX, substitute bytes)、行移位(shift rows)、列混合(mix columns)。

0acdba57d4c8fd31f983834ff62162ba.png

AES的字节代换其实就是一个简单的查表操作。AES定义了一个S盒和一个逆S盒。S盒即状态矩阵中的元素按照以下方式映射为一个新的字节,把该字节的高4位作为行值,低4位作为列值,取出S盒或者逆S盒中对应的行的元素作为输出。例如,加密时,输出的字节S1为0x12,则查S盒的第0x01行和0x02列,得到值0xc9,然后替换S1原有的0x12为0xc9。

行移位是一个简单的左循环移位操作。当密钥长度为128比特时,状态矩阵的第0行左移0字节,第1行左移1字节,第2行左移2字节,第3行左移3字节,如下图所示:

6f30ca8d00e3320366319c48f307b45e.png

列混合变换是通过矩阵相乘来实现的,经行移位后的状态矩阵与固定的矩阵相乘,得到混淆后的状态矩阵,如下图的公式所示:

787dae1f3815372ad68ec92482024238.png

注:矩阵相乘等价于有限域内多项式相乘.,乘01相当于原多项式不变,乘2相当于多项式乘x,乘3相当于多项式乘x+1。

同时,针对乘x,x+1,有更快速的方法计算,例如:

对于一般形式的多项式

两侧乘x得到

这时有两种情况:

(1)a_7 == 0,此时结果是一个小于指数小于8的多项式,不需要取模计算。

(2)a_7 == 1,则直接将a7x8替换为

而不用进行除法取模计算,即

其中,加一个多项式等价于异或一个二进制数

具体操作方式如下:

fc30a9ac5fdd6dc65125d6eeded221f3.png

这就可以把列混淆过程完全转换为异或运算。

轮密钥加是将128位轮密钥Si与状态矩阵中的数据进行逐位异或操作,如下图所示。其中,密钥Ki中每个字W[4i],W[4i+1],W[4i+2],W[4i+3]为32位比特字,包含4个字节,轮密钥加过程可以看成是字逐位异或的结果,也可以看成字节级别或者位级别的操作。也就是说,可以看成S0 S1 S2 S3 组成的32位字与W[4i]的异或运算。

0b5c9d1f55eab3e0d5c526de203d8f39.png

AES总体如下:

2029a8bc2dcdc646696cd2ce96193af4.png

4. RSA加密

在对称加密算法中,由于加密和解密使用同样规则(简称"密钥")。但这种加密模式有一个最大弱点:甲方必须把加密规则告诉乙方,否则无法解密。保存和传递密钥,就成了最头疼的问题。

非对称加密算法需要两个密钥:公开密钥(publickey:简称公钥)和私有密钥(privatekey:简称私钥)。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将公钥公开,乙方使用甲方的公钥对机密信息进行加密后再发送给甲方;甲方再用自己私钥对加密后的信息进行解密。甲方想要回复乙方时正好相反,使用乙方的公钥对数据进行加密,同理,乙方使用自己的私钥来进行解密。RSA是常用的非对称加密算法,利用了大数质因数计算复杂度高,难以求解的原理。

生成公钥,私钥步骤如下:

ef8bf4a198d43f856450674434ce94af.png

1. 随机选择两个不相等的质数p和q。如17和11。(实际应用中,这两个质数越大,就越难破解。)

2. 计算p和q的乘积n。如n = 17×11 = 187。n的二进制位数就是密钥长度。实际应用中,RSA密钥一般是1024位,重要场合则为2048位。

3. 计算n的欧拉函数φ(n)。φ(n) = (p-1)(q-1)。如φ(187)等于16×10,即160。

4. 随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质。如在1到160之间,随机选择7。

5. 计算e对于φ(n)的逆元d。即ed ≡ 1 (mod φ(n))。ed + φ(n)y = 1,通过扩展欧几里得定理求解。如整数解为 (d,y)=(23,-10),即 d=23。

6. 将n和e封装成公钥n和d封装成私钥。如n=187,e=7,d=23,所以公钥就是 (187,7),私钥就是(187, 23)

公钥用到了两个(n和e),其余四个数字都是不公开的。其中最关键的是d,因为n和d组成了私钥,一旦d泄漏,就等于私钥泄漏。

那么,有无可能在已知n和e的情况下,推导出d?

(1) ed≡1 (mod φ(n))。只有知道e和φ(n),才能算出d

(2) φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。

(3) n=pq。只有将n因数分解,才能算出p和q。

如果n可以被因数分解,d就可以算出,也就意味着私钥被破解。可是,大整数的因数分解,是一件非常困难的事情。目前,除了暴力破解,还没有发现别的有效方法。

举例:

60ab9d44d1d4e0d6e22d510d20ac0175.png

假设Bob要向Alice发送加密信息m,他就要用Alice的公钥 (n,e) 对m进行加密。m必须小于n。加密,就是算出m^e ≡ c (mod n),Alice的公钥是 (187, 7),Bob的m假设是88,那么可以算出下面的等式:

88^7 ≡ 11 (mod 187)。于是,c等于11,Bob就把11发给了Alice。

解密要用私钥(n,d),Alice拿到Bob发来的11以后,就用自己的私钥(187, 23) 进行解密。可以证明,下面的等式一定成立:

c^d ≡ m (mod n) c等于11,私钥是(187, 23),那么,Alice算出11^23 ≡ 88 (mod 183)。

注意到RSA只能解决加密(Encryption)的问题,但不能解决认证(authentication)和不可抵赖(non-repudiation)特性,即对接收者Alice来说,可以得到加密后的信息,但是不能保证这个信息一定是Bob发来的。

这时可以让Bob先用自己的私钥对信息签名,再用Alice的公钥加密。

d7a2c58ab2d78b786af5e1be5c8c317f.png

c84840563f9905ab5975d0e23ee93bb0.png

f4244ce598ef5b69391c742423a5bc86.png

对原文1314。用自己私钥先加密一次相当于签名。

加密过程:先用自己的私钥c^d ≡ m (mod n)得到m = 4033,

再用对方公钥m^e ≡ c (mod n),得到c = 7613。

解密过程:用自己私钥:c^d ≡ m (mod n),得到m=7613

再用对方公钥:m^e ≡ c (mod n) 得到原文1314

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值