对称加密 & 非对称加密

2019 - 04 - 26

Posted by voyagelab

可逆加密

对称加密

常见加密算法:DES,3DES,AES,PBE
加、解密使用的同是一串密钥,所以被称做对称加密。对称加密只有一个密钥作为私钥。
优缺点:对称加密相比非对称加密算法来说,加解密的效率要高得多、加密速度快。但是缺陷在于对于密钥的管理和分发上比较困难,不是非常安全,密钥管理负担很重。
加盐:对称加密很大的一个安全缺陷就是加密解密使用相同的密钥,这种密钥的不变性给密钥的安全传输和储存造成了很大的问题。解决这个问题的办法就是给密钥加“盐”。这里的“盐”可以是随机数、用户ID、位置地理信息等等。“盐”最重要的作用就是对密钥的扰乱,使黑客无法确定真实的密钥,只要通信双方约定“盐”的形式,并且不泄漏,就能保证加密的安全性。比如说,在加密时,PBE并不是使用口令直接加密,而是使用算法中的KDF函数通过“盐”对口令进行扰乱生成准密钥,然后使用一种散列函数多次迭代生成最终的密钥,密钥生成后,PBE在选用对称加密算法对数据进行加密。

非对称加密

常见加密算法:RSA,DSA,ECC
加、解密使用不同的密钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。反之,私钥加密的信息,只有公钥才能解密。 
举个例子,你向某公司服务器请求公钥,服务器将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人才能对你的消息解密。与对称加密不同的是,公司服务器不需要将私钥通过网络发送出去,因此安全性大大提高。
优缺点:安全性更高,公钥是公开的,密钥是自己保存的,不需要将私钥给别人。缺点:加密和解密花费时间长、速度慢,只适合对少量数据进行加密。

分组密码工作模式

ECB (电子密码本模式)

整个明文分成若干段相同的小段,然后对每一小段进行加密。 优点:用同个密钥加密的单独消息,其结果是没有错误传播。实际上,每一个分组可被看作是用同一个密钥加密的单独消息。密文中数据出了错,解密时,会使得相对应的整个明文分组解密错误,但它不会影响其他明文。然而,如果密文中偶尔丢失或添加一些数据位,那么整个密文序列将不能正确的解密。除非有某帧结构能够重新排列分组的边界。
缺点:在于同样的明文块会被加密成相同的密文块,因此,它不能很好的隐藏数据模式。
-w392

CBC(分组连接模式)

先将明文切分成若干块,然后每个明文块先与前一个密文块进行异或后,再进行加密。 优点:在这种方法中,每个密文块都依赖于它前面的所有明文块。同时,为了保证每条消息的唯一性,在第一个块中需要使用初始化向量.
缺点:会出现误差传播(Error Propagation). 密文中任一位发生变化会涉及后面一些密文组. 但CBC模式的错误传播不大, 一个传输错误至多影响两个消息组的接收结果,错误传播最多持续2个分组

CTR(计算器模式)

在此模式中,有一个自增的算子,这个算子用密钥加密之后的输出和明文异或的结果得到密文,相当于一次一密。这种加密方式简单快速,安全可靠,而且可以并行加密,但是在计算器不能维持很长的情况下,密钥只能使用一次。

CFB(密码反馈模式)

采用密文反馈的模式增强密文之间的相关性。若待加密的消息必须按字符比特处理时,可采用CFB。每次加密s bit 明文。(1<= s<= 原来的固有长度)
优点:CFB 模式除有CBC 模式的优点外, 其自身独特的优点是它特别适用于用户数据格式的需要。
缺点:一是对信道错误较敏感且会造成误差传播。CFB由于采用的是密文反馈,故若某个密文分组在传输中出现一位或多位的错误,将会引起当前分组和后续部分分组的解密错误。二是数据加密的速率降低。但这种模式多用于数据网中较低层次, 其数据速率都不太高。

OFB (输出反馈模式)

克服了CBC和CFB模式带来的错误传播问题,但对密文被篡改难于进行检测

不可逆加密(单向加密)

常见加密算法:MD5,SHA,HMAC
单向加密的结果是不可以被解密的,因此,单向加密的主要用途并不是传统意义上的加解密工作,而是对明文数据的保密和摘要提取。
优缺点

  1. 压缩性:任意长度的数据,单向加密后长度都是固定的。
  2. 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的结果都有很大区别。
  3. 弱抗碰撞性:已知原数据和其单向加密结果,想找到一个具有相同结果的数据(即伪造数据)是非常困难的。
  4. 强抗碰撞性:想找到两个不同的数据,使它们具有相同的单向加密结果,是非常困难的。
  5. 简单高效:对数据进行单向加密处理速度是很快的。

MD5

MD5是应用最广泛的一种单向加密算法,其在数据加密、安全访问认证和文件完整性验证等方面都有应用。MD5加密输出是一个128位的十六进制数字串。

SHA

SHA实际上是一组加密算法的合称,包括SHA-1,SHA-256,SHA-384,SHA-512。其中应用最广的是SHA-1,HTTPS中使用的HASH散列函数多使用SHA-1。相比较于MD5,SHA族有更高的安全性,到目前为止还没有人能破译其加密结果,但其加密速度比MD5慢,是以速度换取了安全性。另一方面,SHA对加密的数据有一定的长度限制。

HMAC

HMAC不同于上面的传统单向加密算法,它的加密形式与可逆加密相同,加密过程需要一个密钥和一个消息为输入,生成一个消息摘要作为输出。定义HMAC需要一个加密用散列函数(表示为H,可以是MD5或者SHA-1)和一个密钥K。我们用B来表示数据块的字节数。(以上所提到的散列函数的分割数据块字长B=64),用L来表示散列函数的输出数据字节数(MD5中L=16,SHA-1中L=20)。鉴别密钥的长度可以是小于等于数据块字长的任何正整数值。应用程序中使用的密钥长度若是比B大,则首先用使用散列函数H作用于它,然后用H输出的L长度字符串作为在HMAC中实际使用的密钥。一般情况下,推荐的最小密钥K长度是L个字节。

总结

对称加密速度快但相对安全性低,非对称加密安全性高但速度相对慢,我们使用对称加密对大量的数据明文做加密,然后使用非对称加密对对称加密密钥进行加密,这样就兼顾了速度与安全的问题。

Table of Contents