本文主要介绍对称算法的基本概念

a99f7e8f72a374f20fbfb47bf510fd21.png


对称加密

对称加密

  • 加密、解密使用的是同一个key,即使用同一个密钥加密的方式

对称加密过程

  • 明文通过密钥加密得到密文

  • 密文通过密钥解密得到明文

对称加密优点

  • 加密计算量小

  • 速度快

  • 适合对大数据进行加密的场景

对称加密的缺点

  • 密钥传输问题:因为加解密使用的是同一个密钥,所以如何安全的把密钥传输到解密者手里是一个关键。在实际应用中,一般是客户端想服务器请求对称加密的密钥,而且密钥还需要使用非对称加密后再传输

  • 密钥管理问题:因为每个用户都会有一个单独的密钥,所以随着用户的增多,密钥的管理也是一个问题。

常见的对称加密算法

首先作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS开发公众号:编程大鑫,不管你是小白还是大牛都欢迎入驻 ,让我们一起进步,共同发展!

DES

DES (Data Encryption Standard) 是 1977 年美国联邦信息处理标准(FIPS)中所采用的一种对称密码(FIPS 46-3)。DES 一直以来被美国以及其他国家的政府和银行所使用

DES 是一种把 64 位明文加密成 64 位密文的对称加密算法。它的密钥长度为 64 比特,但是除去每 7 个二进制位会设置一个用于错误检测的位以外,实际上密钥为 56 比特

  • DES 会以 64 个二进制为一个分组进行加密。DES一次性只能加密64位明文,如果明文超过了64位,就要进行分组加密

    89af4de08909c0c34f1d2b71c55b2ed8.webp

  • DES解密也是64位分组解密,解密密钥实质也是 56 位。

    f3eae6d8eed82062acf674af91e699f5.webp

3DES

三重 DES (triple-DES) 是为了增加 DES 强度,所以将 DES 重复 3 次得到的一种算法。也称为 TDEA (Triple Data Encryption Algorithm),通常缩写为 3DES

  • 加密:进行3次DES加密(即 加密-解密-加密),DES的密钥长度为56位,所以3DES的密钥长度为 56 * 3 = 168 位

    c9d2f73622fb0e4a701628347645bca1.webp

  • 解密:解密的过程正好与加密过程相反,按照密钥的逆序解密(即 解密-加密-解密

    de321f3f6528072514865338d464ec80.webp

缺点:3DES 由于处理速度不高,除了兼容之前的 DES 以外,目前基本不再使用它了

AES

AES (Advanced Encrytion Standard) 是取代前任标准 DES 而成为新标准的一种对称密码算法。在全世界的范围内征集 AES 加密算法,最终于 2000 年从候选中选出了 Rijndael 算法,确定它为新的 AES

Rijndael 的分组长度和密钥长度可以分别以 32 位比特为单位在 128 比特到 256 比特的范围内进行选择。不过在 AES 的规范中,分组长度被固定在 128 比特,密钥长度只有 128、192 和 256 比特三种。

加密:AES的加密是由多个轮组成,主要分为4轮

  • 1、SubBytes 字节变换

  • 2、ShiftRows 移行操作

  • 3、MixColumns 混行操作

  • 4、AddRoundKey 异或运算

解密:AES的解密是加密的逆过程。

所以,在 Rijndael 加密过程中,每一轮处理的顺序为:

  • SubBytes -> ShiftRows -> MixColumns -> AddRoundKey

在 Rijndael 解密过程中,每一轮处理的顺序为:

  • AddRoundKey -> InvMixColumns -> InvShiftRows -> InvSubBytes

解密过程中除了第一步和加密完全一样,其他三步都为加密的逆过程。

优点

  • 加密效率更高
  • 目前还没有针对AES有效的***破译方式

参考链接

注:对称算法这里也只是简单介绍,更为详细的了解可以之前的文章

  • 对称加密及AES加密算法,漫游对称加密算法

分组模式

由于DES和AES一次加密都只能加密固定长度的明文,如果需要加密任意长度的明文,就需要对分组密码进行迭代。其中分组密码的迭代方式就称为分组密码模式

常用的分组模式主要有ECB、CBC,下面来分别进行介绍

ECB

ECB 模式全称“Electronic CodeBook”模式,在 ECB 模式中,将明文分组加密之后的结果直接就是密文分组,中间不做任何的变换。

简单来说,ECB就是一个电子密码本模式每一块数据,独立加密,独立解密,如果其中一块丢失,并不会影响其他数据块。如下图所示

58ae0fac881628e10a1446eaea424f87.webp

ECB是最基本的加密模式,即通常理解的加密,相同的明文将永远加密成相同的密文,无初始向量,容易受到密码本重放***,一般情况下很少用

缺点

由于ECB的加密和解密都非常直接,所以可以根据密文中存在多少种重复的组合就能以此推测明文,来破译密码。所以ECB模式存在安全风险,使用的人很少。

CBC

CBC 模式的全称是 Cipher Block Chaining 模式,密文分组链接模式。名字中也展示它的实质,像链条一样相互链接在一起。使用一个密钥和一个初始化向量[IV]对数据执行加密

简单理解就是,同ECB一样,也是一块一块的加密,但是后一块数据的加密与前一块数据室友关联的,解密也是如此,如下所示

460ad3066cb9c4d45138886bc7a8fd93.webp

明文被加密前要与前面的密文进行异或运算后再加密,因此只要选择不同的初始向量,相同的密文加密后会形成不同的密文,这是目前引用最广泛的模式,CBC加密后的密文是上下文相关的,但明文的错误不会传递到后续分组,但如果一个分组丢失,后面的分组将全部作废(同步错误)

ECB与CBC对比

  • ECB模式只进行了加密

  • CBC模式则是在加密之前进行了一次 XOR(即异或),这样就完美了克服了 ECB 的缺点了

    daa6ba4a142abf3dd3015c8042221e9f.webp

优点

CBC模式采用链接模式,可以有效的保证密文的完整性,如果一个数据块在传递是丢失还是改变,后面的数据将无法正常解密

缺点

一个比特位的缺失就会导致整个密文无法解析。这算是 CBC 链式的一个“小缺点”。相对ECB而言,更安全

总结

  • 对称算法:加解密使用同一个key

  • 常用的对称算法

    • DES:数据加密标准,因为强度不够,所以使用很少

    • 3DES:使用3个密钥,多相同的数据进行加密,相比DES而言,强度增强

    • AES:高级密码标准

  • 常用的分组模式

    • ECB:电子密码本模式,每一块数据独立加密、独立解密

    • CBC:分组密码采用链接模式,使用一个密钥和一个初始化向量[IV]对数据执行加密,即上下文是关联的