对称块加密算法加密模式详解

原创 2003年01月23日 16:53:00

标题:对称块加密算法加密模式详解
作者:DragonKing
Email: wzhah@263.net
原发网站:中国openssl专业论坛 http://openssl.126.com
版权声明:未经作者允许,不能转载和在出版物中使用本文

在openssl或其他密码相关的资料中,我们经常看到对称加密算法有ECB、CBC之类加密模式的简称,到底这些加密模式是什么呢?它们之间有什么不同呢,今天就是为大家解开这个迷。
在现有的对称加密算法中,主要有4种加密处理模式,这4种加密处理模式一般是针对块加密算法而言的,如DES算法。这4种加密模式罗列如下:

   模式中文描述            英文名称(Openssl缩写)
  电子密码本模式  Electronic Code Book(ECB)
   加密块链模式          Cipher Block Chaining(CBC)
   加密反馈模式          Cipher Feedback Mode(CFB)
   输出反馈模式          Output Feedback Mode(OFB)
  
下面我们分别介绍这4种加密模式。
【电子密码本模式】
这种模式是最早采用和最简单的模式,它将加密的数据分成若干组,每组的大小跟加密密钥长度相同,然后每组都用相同的密钥进行加密。比如DES算法,一个64位的密钥,如果采用该模式加密,就是将要加密的数据分成每组64位的数据,如果最后一组不够64位,那么就补齐为64位,然后每组数据都采用DES算法的64位密钥进行加密。下图:
_______________________
My name |is Drago|nKing
-----------------------
上图“My name is DragonKing”这句话每8个字符(64位)作为一块,然后使用一个相同的64位的密钥对每个块进行加密,最后一块不足64位,就补齐后再进行加密。
可以看到,因为ECB方式每64位使用的密钥都是相同的,所以非常容易获得密文进行密码破解,此外,因为每64位是相互独立的,有时候甚至不用破解密码,只要简单的将其中一块替换就可以达到黑客目的。
【加密块链模式】
该模式如下图所示:
            P0           P1                              C0            C1
            |               |                                  |              |
            |               |                                  |----|        |--->...
IV--->XOR  |--->XOR  |--->...          Key Dec  |      Dec
            |      |        |      |                           |      |       |
            |      |        |      |                           |      |       |
  Key Enc     |     Enc    |               IV--->XOR  |--->XOR   
            |-----|        |-----|                          |               |    
            |               |                                 |               |
           C0           C1                               P1            P2
         加密过程                                      解密过程

从这两个图中大家可以看到,CBC模式的加密首先也是将明文分成固定长度(64位)的块(P0,P1...),然后将前面一个加密块输出的密文与下一个要加密的明文块进行XOR(异或)操作计算,将计算结果再用密钥进行加密得到密文。第一明文块加密的时候,因为前面没有加密的密文,所以需要一个初始化向量(IV)。跟ECB方式不一样,通过连接关系,使得密文跟明文不再是一一对应的关系,破解起来更困难,而且克服了只要简单调换密文块可能达到目的的攻击。
但是该加密模式的缺点是不能实时解密,也就是说,必须等到每8个字节都接受到之后才能开始加密,否则就不能得到正确的结果。这在要求实时性比较高的时候就显得不合适了。所以才有了下面两种加密模式。
【加密反馈模式】
加密反馈模式为了克服必须等待8个字节全部得到才能进行解密的缺点,采用了一个64位(8个字节)的位移寄存器来获得密文,如下图所示:

      C2|C3|C4|C5|C6|C7|C8|C9<---|           C2|C3|C4|C5|C6|C7|C8|C9<---|
      -------------------------------    |           -------------------------------    |
                        |                        |                              |                       |
                        |                        |                              |                       |
           Key--->Enc                     |C10           Key--->Enc                    |C10
                        |                        |                              |                       |
                        |                        |                              |                       |
           取最左一个字节             |                取最左一个字节              |
                        |                        |                              |                       |
                        |                        |                              |                       |
         P10--->XOR----------------->C10         C10--->XOR----------------)--->P10
                                                                               |______________|
               加密过程                                               解密过程

上面两个图中C2、C3以及P10等都是一个字节(8位)的数据,所以能够实现字符的实时加密和解密,不用再等到8个字节都接受到之后再进行解密。图示是在进行第10个字节数据的加密和解密过程,在该过程中,先从移位寄存器取8个字节的数据(C2到C9)用密钥进行加密,然后取加密数据最左边的一个字节跟输入的明文P10进行XOR(异或)操作,得到的值作为输出密文C10,同时将C10送入到移位寄存器中。
需要注意的是,如果其中有一个字节的密文在传输的时候发生错误(即使是其中的一位),那么它出现在移位寄存器期间解密的8个字节的数据都会得不到正确的解密结果,当然,这8个字节过去之后,依然可以得到正确的解密结果。但是一个比特错误就影响到8个字节(64个比特)的正确结果,导致鲁棒性太差,所以就又提出了下面的加密模式OFB。
【输出反馈模式】
输出反馈模式OFB跟CFB几乎是一样的,除了其以为寄存器的输入数据稍微有一点不同之外,如下图:
      S2|S3|S4|S5|S6|S7|S8|S9<----|          S2|S3|S4|S5|S6|S7|S8|S9<------|
      -------------------------------    |           -------------------------------    |
                        |                        |                              |                       |
                        |                        |                              |                       |
           Key--->Enc                     |S10           Key--->Enc                    |S10
                        |                        |                              |                       |
                        |                        |                              |                       |
           取最左一个字节             |                取最左一个字节              |
                        |______________|                              |_____________|
                        |                                                       |                       
         P10--->XOR----------------->C10         C10--->XOR------------------->P10
                                                                                
               加密过程                                               解密过程
可以看到,这种方法因为没有采用密文作为加密的数据,所以克服了由于传输过程中由于单个比特导致64个相关比特解密失败的情况,在本模式下,如果一个比特发生错误了,那么只会影响其本身对应的一个比特,而不会影响别的。但是相对于其它模式,因为数据之间相关性小,这种加密模式是比较不安全的,所以在应用的时候除非特别需要,一般不提倡应用OFB模式。

【参考资料】
1.中国openssl专业论坛 http://openssl.126.com
2.Computer Networks
3.《应用密码学》

最全加密算法之对称加密和非对称加密

常见加密算法 : DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合;  3DES(Triple DES):是基于DES,对一块数据用三个不同...
  • shenggaofei
  • shenggaofei
  • 2016年08月27日 10:27
  • 20794

对称加密算法DES、3DES和AES

1、对称加密算法 1.1 定义 对称加密算法是应用较早的加密算法,技术成熟。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥(mi yue)一起经过特殊加密算法处理后,使其变成...
  • u013126379
  • u013126379
  • 2016年07月11日 16:26
  • 10876

AES 对称加密算法 加密\解密实例

package com.soufun.com; import java.io.UnsupportedEncodingException; import java.security.InvalidKey...
  • QH_JAVA
  • QH_JAVA
  • 2015年08月17日 23:49
  • 1752

最全加密算法之对称加密和非对称加密

常见加密算法 : DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合;  3DES(Triple DES):是基于DES,对一块数据用三个不同...
  • shenggaofei
  • shenggaofei
  • 2016年08月27日 10:27
  • 20794

加密算法之:对称加密与非对称加密扫盲贴

对称加密:加密(encryption)与解密(decryption)使用的是同样的密钥(secret key)。优点:算法公开、计算量小、加密速度快、加密效率高,缺点:秘钥的管理和分发非常困难,不够安...
  • aitangyong
  • aitangyong
  • 2016年12月25日 11:08
  • 2972

对称加密算法---加密学习笔记(三)

基本介绍对称加密算法是现在应用范围最广,使用频率最高的加密算法。对称的原因: 加密密钥 = 解密密钥,加密运算是解密运算的逆运算。 对称加密算法是初等的加密算法,从安全性上说,不是很高。常用的对称...
  • u013991521
  • u013991521
  • 2015年09月04日 11:37
  • 2031

Java中的对称加密算法

在Java中,对于加密密钥和解密密钥相同的加密我们称之为非对称加密,其中主要有DES,3DES和AES加密。 DES加密 package com.example.asiatravel.learndes...
  • kuangxiaoguo0123
  • kuangxiaoguo0123
  • 2016年09月14日 21:58
  • 933

常用对称加密算法(DES/AES)类(PHP)

看注释,啥也不说了,欢迎各种跨平台测试! /** * 常用对称加密算法类 * 支持密钥:64/128/256 bit(字节长度8/16/32) * 支持算法:DES/AES(根据密钥长度自...
  • linvo
  • linvo
  • 2013年01月12日 21:59
  • 14225

Java 加密 AES 对称加密算法

【AES】 一种对称加密算法,DES的取代者。 加密相关文章见: 【代码】 代码比较多,有一部分非本文章内容代码,具体自己看吧。 package com.uikoo9.util.encrypt; ...
  • uikoo9
  • uikoo9
  • 2014年06月01日 20:38
  • 74062

C#对称加密算法实现及相关类说明

采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密。 需要对加密和解密使用相同密钥的加密算法。由于其速度快,对称性加密通常在消息发送方需要...
  • wangshubo1989
  • wangshubo1989
  • 2015年08月04日 11:11
  • 2426
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对称块加密算法加密模式详解
举报原因:
原因补充:

(最多只允许输入30个字)