加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

对称加密与进攻案例说明

发布时间:2019-06-13 13:39:12 所属栏目:建站 来源:有价值炮灰
导读:本文首要先容常见的对称加密算法和它们的道理,然后说明一些现实存在的暗码学进攻案例,包罗流加密密钥重用裂痕、ECB块重排进攻以及CBC的Padding Oracle进攻等。 一、对称加密 当今我们所行使的加密算法,大抵可以分为两类,即对称加密与非对称加密。个中
副问题[/!--empirenews.page--]

本文首要先容常见的对称加密算法和它们的道理,然后说明一些现实存在的暗码学进攻案例,包罗流加密密钥重用裂痕、ECB块重排进攻以及CBC的Padding Oracle进攻等。

对称加密

一、对称加密

当今我们所行使的加密算法,大抵可以分为两类,即对称加密与非对称加密。个中对称加密所能加密的内容长度一样平常受密钥长度的限定,且加密速率较慢,因此凡是会与对称加密算法团结行使,纵然用对称加密来对明文举办加密,再行使私钥对对称加密的密钥举办加密。本文首要存眷对称加密。

对称加密在动静通讯的两头共享沟通密钥,加密算法一样平常分为两种范例:

  • 流加密(Stream Ciphers):逐字节加密数据
  • 块加密(Block Ciphers):逐块加密数据

个中块加密的块巨细与详细加密算法的实现有关,常见的块巨细有128、256位等。

1. 流加密

流加密会逐字节加密数据,最常见的流加密算法就是SSL顶用到的RC4算法了。其本质上是以密钥为种子(seed)发生的随机数来对明文举办逐字节异或。

  1. 0 xor 00 = 0 
  2. 0 xor 11 = 1 
  3. 1 xor 0 = 1 
  4. 1 xor 1 = 0 

流加密本质上依靠于随机数天生器的随机性,其随机性越强,加密强度就越大。

2. 块加密

块加密也称为分组加密,也是大大都人较量认识的。AES、DES、3DES、Towfish等常见的加密算法都是块加密。在块加密中,原始数据会被支解成多少个巨细为N的块,并别离对这些块举办加密。因为我们不能担保数据是N的倍数,因此必要对数据举办添补(Padding),这增进了实现的伟大度。一样平常来说,与流加密相反,块加密的解密流程和加密流程每每是差异的。

二、Padding

一种常见的添补方法是岂论数据巨细是否对齐块界线,都举办添补,而添补的内容为添补的字节数。好比块巨细为8字节,那么也许有以下添补:

  1. ‘AAAAAAA’ + ‘x01’  
  2. ‘AAAAAA’ + ‘x02x02’  
  3. …  
  4. ‘AA’ + ‘x06’ * 6  
  5. ‘A’ + ‘x07’ * 7  
  6. ‘x08’ * 8 

这就是PKCS#7中所界说的添补方法。

三、加密模式

块加密算法对数据举办逐块加密,有许多加密模式(mode)用于实现块的加密。这些加密模式多半可以归类为两种,即ECB模式和CBC模式。

1. ECB

ECB全称为Electronic CodeBook,是块加密中较量简朴的加密模式。在ECB模式中,每一块明文数据都被独立地举办加密来天生加密块。这意味着假如你发明两个加密块有沟通的内容,那么就可以确定这两个加密块的原文也是沟通的。

这看起来仿佛没什么大不了的,但我们可以思量这么一种环境,好比要加密的工具是一张图像,我们行使ECB加密算法,而且配置块巨细为8字节(DES),加密后的图像如下:

tux.png

固然和原图有所区别,但也足以明明地看出原图的大抵内容。

2. CBC

CBC全称为Cipher-Block Chaining,算是最常见的块加密模式了。在CBC模式中,每个明文块城市在加密前被行使前一个明文块的秘文举办异或;解密进程则正好相反。个中第一个明文块会被行使IV即初始化向量举办异或。

cbc.png

因为CBC模式中各个块会彼此链接,在第一个加密块(Block0)中翻转某一位,则会在解密后导致对应的下一个明文块中(Block1)沟通的位举办翻转。这项特征也导致了很多风趣的bug,后头会说到。

四、常见进攻

下面我们来先容一下在实际中很常见的一些加密算法缺陷所导致的进攻场景。

1. 流加密重用进攻

也常称为Stream Cipher Reuse Attack,指多次行使沟通的流加密密钥可导致明文泄漏。前面说过,流加密现实上是行使密钥天生随机序列,然后用该序列来对明文逐位异或加密。假设天生的随机序列为C(K),加密函数为E(),那么对付明文A、B来说,则:

  1. E(A) = A xor C 
  2. E(B) = B xor C 

举办简朴的数学运算:

  1. E(A) xor E(B) = (A xor C) xor (B xor C) = A xor B xor C xor C = A xor B 

这意味着假如进攻者可以拿到A、B的密文E(A)、E(B),以及进攻者本身的明文B,就可以在无需知道密钥的环境下计较出A的明文:

  1. A = E(A) xor E(B) xor B 

目睹为实,我们行使RC4流加密为示例,起首行使openssl天生两个文件的密文(行使沟通密钥):

  1. $ cat 1.txt 
  2. hello 
  3. $ cat 2.txt 
  4. world 
  5.  
  6. $ openssl rc4 -nosalt -in 1.txt > 1.enc 
  7. $ openssl rc4 -nosalt -in 2.txt > 2.enc 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读