分组密码及五种工作模式、DES和AES

一、流密码(Stream Cipher)

每次加密数据流的一位或一个字节
古典流密码的例子有:密钥自动产生的Vigenère密码和Vernam密码。
理想情况下,可以使用一次一密版本的Vernam密码,其中密钥流和明文位流一样长。如果密钥流是随机的,除非是获得了密钥流,否则这个密码是不可破的。然而,密钥流必须提前以某种独立、安全的信道提供给双方。
实际上,位流必须以算法程序的方式实现,从而双方都可以生产具有密码学意义的位流。两个用户只需要共享生成密钥,则可以生产密钥流。

二、分组密码(Block Cipher)

将一个明文分组作为整体加密,并且通常得到的是与明文等长的密文分组
典型的分组大小是64位或128位
与流密码一样,两个用户要共享一个对称加密密钥
分组密码作用在n位明文分组上,产生n位密文分组,共有2n个不同的明文分组。由于加密是可逆的(即可以解密),每一个明文分组将唯一对应一个密文分组,这样的变换称为可逆变换或非奇异变换。
对于n位的代替分组密码,密钥的规模是nX2n位。
一般来说,分组密码的应用范围比流密码广泛。绝大多数基于网络的对称密码应用使用的是分组密码。

三、Feistel分组密码

现在使用的大多数对称分组加密算法都是基于Feistel分组密码结构的。
Feistel密码:交替使用代替(换成别的)和置换(只是顺序变了)
基于1945年Shannon理论的Feistel密码结构,仍是当前使用的大多数重要对称密码的基本结构
Shannon引进混淆扩散这两个术语来刻画任何密码系统的两个基本构件,为了对付基于统计分析方法的密码分析

  • 扩散:使明文的统计特征消散在密文中,可以通过让每个明文数字尽可能地影响多个密文数字获得,等价于说每个密文数字被许多明文数字影响。(尽可能地使明文和密文间的统计关系变得复杂)
  • 混淆:尽可能地使密文和加密密钥间的统计关系变得复杂,即使攻击者拥有一些密文的统计特征信息,利用密钥产生密文的方法的复杂性使得推导密钥极其困难。

Feidtel加密和解密(16轮):
分组密码及五种工作模式、DES和AES_第1张图片
Feistel结构的具体实现依赖于以下参数和特征
分组长度:分组长度越长意味着安全性越高,但会降低加、解密的速度,这种安全性的增加来自更好的扩散性(传统上,64位的长度比较合理,在分组密码设计里比较常见,高级加密标准中采用128位的分组长度)
密钥长度:密钥长度越长意味着安全性越高,但会降低加、解密的速度,这种安全性的增加来自更好的抗穷举攻击能力和更好的混淆性(64位的密钥不太够,一般使用的密钥长度是128位)
迭代轮数:Feistel密码的本质在于单轮不能提供足够的安全性而多轮加密可以取得很高的安全性,迭代轮数的典型值是16
子密钥产生算法:子密钥产生越复杂,密码分析就越困难
轮函数F:轮函数越复杂,抗攻击的能力就越强
快速软件加解密:很多情况下,加密算法被嵌入到应用程序中,以避免硬件实现的麻烦,因此,算法执行的速度很重要
简化分析难度:算法描述起来简洁清楚,那么分析其脆弱性也就容易一些,可以开发出更强的算法(DES并没有容易的分析方法)

Feistel结构示例:<

你可能感兴趣的:(密码学,DES,流密码,分组密码,AES)