漫游对称加密算法( 三 )

  • 加密和解密可以用完全相同的结构来实现 。虽然每一轮只加密了一半的明文,放弃了加密效率,但是获得了可以用相同结构来实现,对于加密硬件设备设计也变得更加容易 。
  • 由于 Feistel 网络的这些优点,所以很多分组密码选择了它 。比如 AES 候选算法中的 MARS、RC6、Twofish 。不过最终 AES 定下的 Rijndael 算法并没有选择它,而是选择的 SPN 网络 。
    四、对称加密算法 3DES
    三重 DES (triple-DES) 是为了增加 DES 强度,所以将 DES 重复 3 次得到的一种算法 。也称为 TDEA (Triple Data Encryption Algorithm),通常缩写为 3DES 。
    (一) 加密
    3DES 加密就是进行 3 次 DES 加密 。DES 密钥长度为 56 位,所以 3DES 密钥长度为 56 * 3 = 168 位 。
    漫游对称加密算法

    文章插图
     
    不过 3DES 有一个“奇怪”的地方,并不是用 DES 加密 3 次,而是加密-解密-加密,中间有一次解密的过程 。IBM 公司之所以这么设计,目的是为了让三重 DES 能兼容普通的 DES 。如果三重加密中密钥都完全相同,那么就退化成了普通的 DES 了 。(加密一次解密一次就抵消了)所以也就具备了向下兼容性 。
    漫游对称加密算法

    文章插图
     
    • 如果 3 次都用相同的密钥,则退化成了 DES 。
    • 如果第一次和第三次用相同的密钥,第二次用不同的密钥,这种三重 DES 称为 DES-EDE2。EDE 是加密(Encryption) -> 解密(Decryption) -> 加密(Encryption) 的缩写 。
    • 如果 3 次都用不同的密钥,则称 DES-EDE3 。

    漫游对称加密算法

    文章插图
     
    (二) 解密
    3DES 解密的过程和加密的过程正好相反,按照密钥的逆序解密 。
    漫游对称加密算法

    文章插图
     
    (三) 缺点
    3DES 由于处理速度不高,除了兼容之前的 DES 以外,目前基本不再使用它了 。
    五、对称加密算法 AES 和 Rijndael
    AES (Advanced Encrytion Standard) 是取代前任标准 DES 而成为新标准的一种对称密码算法 。在全世界的范围内征集 AES 加密算法,最终于 2000 年从候选中选出了 Rijndael 算法,确定它为新的 AES 。
    1997 年开始征集 AES,1998 年满足条件并最终进入评审的有 15 个算法:CAST-256、Crypton、DEAL、DFC、E2、Frog、HPC、LOK197、Magenta、MARS、RC6、Rijndael、SAFER+、Serpent、Twofish 。2000 年 10 月 2 日,Rijndael 并定位 AES 标准 。AES 可以免费的使用 。
    Rijndael 的分组长度和密钥长度可以分别以 32 位比特为单位在 128 比特到 256 比特的范围内进行选择 。不过在 AES 的规范中,分组长度被固定在 128 比特,密钥长度只有 128、192 和 256 比特三种 。
    (一) 加密
    AES 的加密也是由多个轮组成的,分为 4 轮,SubBytes、ShiftRows、MixColumns、AddRoundKey 这 4 步,即 SPN 网络 。
    1. SubBytes 字节变换
    Rijndael 的输入分组默认为 128 比特,也就是 16 字节 。第一步需要对每个字节进行 SubBytes 处理 。以每个字节的值(0-255之间的任意值)为索引,从一张拥有 256 个值的替换表 S-Box 中查找出对应的值进行处理 。
    漫游对称加密算法

    文章插图
     
    经过 SubBytes 变换以后,左边 16 个字节(128 个比特)都变换成右边的 16 个字节 。
    2. ShiftRows 移行操作
    这一步以 4 字节为单位的行 row 进行左移操作,且每一行平移的字节数不同 。
    漫游对称加密算法

    文章插图
     
    移动以后,每一行都“错位”了 。
    3. MixColumns 混行操作
    这一步以 4 字节为单位的列 column 进行矩阵运算 。
    漫游对称加密算法

    文章插图
     
    经过这一步变换以后,每一列和之前的列都不同了 。
    4. AddRoundKey 异或运算
    将上一步的输出与轮密钥进行 XOR,即进行 AddRoundKey 处理 。
    漫游对称加密算法

    文章插图
     
    如上图,左边 16 字节每个字节一次与轮密钥对应位置上的字节进行异或运算,计算完成以后得到最终的密文 。
    到这里为止,是一轮 Rijndael 结束 。
    完成的一轮解密如下图:
    漫游对称加密算法

    文章插图
     
    一般整个算法要进行 10-14 轮计算 。


    推荐阅读