信息安全学习之对称加密

Posted by liveipool on October 12, 2016

信息安全学习之对称加密

对称加密原理

对称加密也称为常规加密、私钥或单钥加密。它取决于密钥机密性而非算法机密性,因此算法不需要保密。
对称加密有两个要求:1.需要一个强加密算法–当攻击者知道算法并获得一个或多个密文时,并不能够破译密文或者算出密钥。2.发送者和接收者必须通过一个安全的方式获得密钥并保证密钥安全。
对称加密模型.jpg

密码体制

一般从三个不同的方面进行分类。

  • 明文转换成密文的操作类型
  • 使用的密钥数
  • 明文的处理方式

密码分析

试图找出明文或者密钥的工作被称为密码分析或破译。
攻击类型:

  • 唯密文
  • 已知明文
  • 选择明文
  • 选择密文
  • 选择文本

Feistel密码结构

将明文分成两半,先对右半边的数据使用轮函数F,然后将函数输出同原来的左半边数据做异或。
Feistel结构.jpg

分组加密算法

最常用的对称加密算法时分组密码。分组密码处理固定大小的分组明文输入,且对每个明文分组产生同等大小的密文分组。
三个重要的对称分组密码:数据加密标准(data encryption standard)DES三重数据加密标准(triple DES)3DES高级加密标准(advanced encryption standard)AES (PS:DES和DEA(data encryption algorithm)经常混用)

数据加密标准DES

算法描述:明文长度为64比特,密钥长度为56比特,更长的明文被分成64比特的分组来处理。DES的结构在Feistel网络的基础上做了微小的变化。它采用16轮迭代,从原始56比特密钥产生16组子密钥,每一轮迭代使用一个子密钥。
对DES强度的分析可以分为两部分:

  • 对算法本身的分析
  • 对使用56比特密钥的分析
    至今,依然没有人公开声明已经找到算法本身的致命缺陷,因此,想要攻破DES只能采取对密钥的穷举方法。至今,有着大约可在10个小时采取穷举方法攻破DES的机器了,因此56比特的密钥不再安全。但是,抵抗此类攻击的方法也就非常明显:使用更长的密钥,例如128比特的密钥,至少在可见的未来,可以保证算法不能被穷举算法破解。

三重DES

3DES使用3个密钥并执行3次DES算法,其组合过程依照加密-解密-加密(EDE)的顺序进行:
C = E (K3, D(K2, E(K1, P)))
C=密文, P=明文, E(K, X)=使用密钥K加密X, D(K, Y)=使用密钥K解密Y。(解密仅仅是使用相反的密钥顺序进行相同的操作。)

密钥选项

标准定义了三种密钥选项:
密钥选项1:三个密钥是独立的。
密钥选项2:K1和K2是独立的,而K3=K1
密钥选项3:三个密钥均相等,即K1=K2=K3
密钥选项1的强度最高,拥有3 x 56 = 168个独立的密钥位。(有个问题,既然都是独立的密钥,如K2如何能解密K1加密的密文??)
密钥选项2的安全性稍低,拥有2 x 56 = 112个独立的密钥位。该选项比简单的应用DES两次的强度较高,即使用K1和K2,因为它可以防御中途相遇攻击。
密钥选项3等同与DES,只有56个密钥位。这个选项提供了与DES的兼容性,因为第1和第2次DES操作相互抵消了。该选项不再为国家标准科技协会(NIST)所建议,亦不为ISO/IEC 18033-3所支持。

3DES基于底层的DES,并且有着足够长的密钥,因此它是一个非常强大算法,尽管它终将被AES取代,但在一长段时间内,3DES都是非常高效的算法。

高级加密算法AES

3DES的缺陷:1.运行较慢 2.DES和3DES都是用64比特大小的分组,出于效率和安全原因,需要更大的分组。因为这些缺陷,3DES不是长期使用的合理选择。
在1997年,NIST公开征集新的AES,要求它的安全性大于等于3DES,并且效率要有显著提高。并且,分组大小还要是128比特,支持密钥长度为128、192、256比特。经过一番筛选,最终选择了Rijndael算法(于是经常AES和Rijindael会混用着说)。
AES不是Feistel结构,具体算法参见网上各种资料。

流密码和RC4

分组密码每次处理一个输入元素分组,并未每个输入分组产生一个输出分组。流密码连续处理输入元素,在运行过程中,一次产生一个输出元素。虽然分组密码普遍得多,但对于一些特定的应用,使用流密码更合适。

流密码

流密码结构图.jpg
流密码使用一个伪随机数流,有以下一些重要得考虑因素:

  • 加密序列应该有一个长周期。伪随机数生成器使用一个函数产生一个实际上不断重复的确定比特流。这个重复的周期越长,密码破解就越困难。
  • 密钥流应该尽可能地接近真随机数流的性质。
  • 密钥也要足够长。

RC4算法

RC4是密钥大小可变的流密码,使用面向字节的操作。
RC4算法非常简单:用一个可变长度为1~256字节(8~2048比特)的密钥来初始化256字节的状态向量S,其元素为S[0]=0,S[1]=1…S[255]=255.同时创建一个临时向量T,如果密钥K的长度为256比特,就把K直接赋给T,否则,对于keylen字节长度的密钥,从K复制T的前keylen个元素,然后一直重复K直到填满T。

分组密码的工作模式

分组密码依次处理一个数据分组,在DES和3DES中,对于较长的明文,需要将明文分解称64比特的分组。最简单的实现方法是电子密码本(ECB),在此模式下明文一次被处理64比特,而且明文的每一个分组都使用同一密钥加密。因此,可以想象一个庞大的密码本,它包含任何可能的64比特的明文模式及其对应的密文。
由于同样的明文总是产生相同的密文,因此对于过长的高度结构化的消息,ECB模式不安全。
因此除了ECB模式,还有两种模式:1.密码分组链接(CBC)模式 2.密码反馈(CFB)模式。(具体算法就不写了..)

加密设备的位置

最有力、最普遍的抵御网络安全威胁的方法是加密。加密时,我们要决定加密什么,以及在什么位置摆放加密装置。这里有两种基本选择:1.链路层加密 2.端到端的加密
链路层加密:即对每条易受攻击的通信链路都在其两段装备加密设备。但有一个缺点是消息每次进入包交换机都需要被解密,因为交换机需要读取包头地址来发送包。也因此,每次交换消息时容易被攻击。
端到端加密:加密过程在两个端系统上实现。这种方式下,只能加密包含用户数据那部分,而包头部分不能被加密,因为包交换机解密不了,所以这种方法是只加密消息的用户数据部分。
因此,总的来说,两种方法一同使用,更安全。

以上使一些学习过程中的总结。