文章目录

  • 一、分组密码概述
  • 1、分组密码的含义和要求
  • 2、分组密码的设计思想
  • 3、分组密码的迭代结构
  • 4、分组密码的基本特点
  • 二、数据加密标准(DES)
  • 1、DES算法介绍
  • 2、DES算法实现
  • 3、DES安全特性
  • 4、多重DES
  • 三、AES算法
  • 1、AES算法介绍
  • 2、AES算法实现
  • 3、AES的安全性和可用性
  • 4、AES与DES对比
  • 四、分组密码操作模式
  • 1、电子密码本模式
  • 2、密码分组链接模式


一、分组密码概述

分组密码四现代密码学中的重要组成部分,也是使用最广、影响最大的一种密码体制。其只要任务是提供数据保密性,也常用于随机数、序列密码、哈希函数等的构造中。

1、分组密码的含义和要求

顾名思义,分组密码是将明文信息编码表示后的二进制序列,划分为固定大小的块,每一块分别在秘钥控制下变换成等长的二进制序列。

分组密码属于对称密码体制,所以加密开药空间与解密密钥空间相同。在加解密是需要满足一下要求:

  • 分组足够长,假设n为发分组长度,则分组代换表中的字母个数2n足够大才能避免穷举攻击。
  • 秘钥长度足够长,以防止秘钥穷举攻击。
  • 由秘钥确定的置换算法要足够复杂,足以抵抗各种已知攻击。
  • 加解密运算简单,易于软硬件实施快速计算。
  • 一般无数据扩展,即明文与密文长度相同。
2、分组密码的设计思想

1)扩散:

所谓扩散是指要将算法设计成明文和秘钥的每一比特的变化尽可能多的影响密文序列变化,达到尽可能隐藏明文信息的要求。在学术上被形象的称为雪崩效应。

举例说明:

编程实现分组密码DES的解密方法 分组密码技术_分组密码

2)混乱:
所谓混乱是指在加密变换过程中,密文、明文、秘钥的关系尽可能的复杂,以防止攻击者通过统计分析法来破解。
混乱可以用“搅拌机”来形象的解释,明文与秘钥充分混合后,输出密文序列。在混乱的过程中,每一步都必须是可逆的,只有这样才能用密文恢复出明文。
3)乘积密码体制
依次使用两次及以上的基本密码,所得结果的密码强度将强于任何一个单一密码。实际上,乘积密码就是扩散和混乱的两种基本密码操作的组合变换,这样能够产生比各自单独使用是更强大的密码系统。在秘钥的控制下以迭代的方式多次利用它进行加密,既可以达到混乱和扩散的效果。有利于利用少量全硬件资源实现较好的混乱和扩散。

3、分组密码的迭代结构

1)Teistel网络
一种用于分组密码的对称结构,被用于很多分组密码算法。
思想:用简单算法的乘积来近似表达复杂的替代变换。
优点:

  • 加解密相似,只需要一个逆转的秘钥编排算法,加解密算法部分完全相同。
  • 轮函数不必可逆
    加解密过程:

    2)SP网络
    SP网络是由多重S变换和P变换组合成的变换网络。是乘积密码的一种。S盒代换起到混乱的作用,P盒置换起到扩散的作用。
    S盒构造:
    P盒构造:
4、分组密码的基本特点
  • 分组长度:尽可能长
  • 秘钥长度:尽可能长,但不能太长,负责不易管理
  • 子秘钥:是从初始秘钥产生,用于轮函数迭代的控制与参与,实现简单,种子秘钥每一位对子秘钥的影响大致相同。
  • 轮函数F:基本准则是非线性、可逆性、满足雪崩效应

二、数据加密标准(DES)

1、DES算法介绍

1)简介
DES加密算法数据加密标准是现代密码学发展史上的一个重要组成部分。是棉靴上第一个被广泛应用的数据加密算法,并开创了公开秒算法的先例,极大的促进了密码学的发展。由于该加密算法S盒的设计标准被列为官方机密,所以呃内部结构是否存在陷门函数未知,其安全性存在疑点。
2)基本结构
DES是一个对称密码体制,秘钥长度有64位,但有效秘钥长度为56位,第8,16,24,32,40,48,56,和64位是奇偶校验位。分组长度为64位,使用feistel结构。
加密过程:
步骤 如下:

  • 64位明文经过初始置换被重新排列,分为L0和R0
  • 在秘钥参与下,对左右两个部分进行十六轮相同函数迭代,最后一轮输出六十四位,左右两半部分不进行交换。
  • 输出再通过逆初始置换,得到密文。
2、DES算法实现

1)DES的初始置换与逆初始置换:
初始置换实在第一轮迭代之前进行的,目的是将原明文块的位进行换位,其置换表是固定的(见下图)。在整个IP置换表中,表现出如些特征:

  • 整个表按八行八列排列
  • 最左边一列为:2,4,6,8,1,3,5,7排列
  • 每一行往左各列序号依次加8

逆初始置换是初始置换的逆运算。

编程实现分组密码DES的解密方法 分组密码技术_分组密码_02


2)DES的F函数:

F变换函数由四个部分组成,分别是:拓展置换(E盒),秘钥加,非线性代换(又称S盒)和线性置换(P盒)
(1)拓展置换:
将32位输入拓展到48位,拓展规则为:将32位输入按每行6个排列。上一行的末尾两个在下一行得到重用。
由于E盒的输入会使后面的位都发生变化,所以起到了雪崩效应
(2)秘钥加:
秘钥加运算是将E盒输出的48位数据与48位子秘钥进行逐位异或运算,输出48位数据

(3)代换盒:

代换盒又称S盒,其功能是进行非线性代换。S盒是一个查运算表,8个S盒对应8个非线性代换表。每个S盒输入为6位,输出为4位。经过S 盒代换之后,数据被压缩为32位。

编程实现分组密码DES的解密方法 分组密码技术_安全_03

S盒特点:

  • 具有良好的非线性,即输出的每一比特与全部输入比特有关
  • 每一行包括所有16中二进制
  • 两个输入相差一比特时,输出至少相差2比特
  • 如果输入前两位不同,后两位相同,则输出一定不同
  • 相差6比特的输入一共32对,在这32对中有不超过8对输出相同。

4)置换运算(P盒)

只进行简单的置换运算,不进行压缩和拓展。

下图为P盒构造方法:

编程实现分组密码DES的解密方法 分组密码技术_分组密码_04

16表示S盒输出的第十六位为置换前的第一位。

P盒设计满足一下要求:

  • 每个S盒的四位输出影响下一轮6个不同的S盒
  • 在第i轮S盒的四位输出中,2位将影响i+1轮中间位,其余两位影响末端两位。
  • 如果一个S盒的四位输出影响另一个S盒的中间一位,则后一个的输出位不会影响前一个S盒的中间位。

5)DES的秘钥编排

DES最初的64位秘钥通过置换选择Pc-1得到有效56位,着56位分为两组C0,D0,每组28位。每轮迭代Ci-1,Di-1分别循环左移1位或2位,移位后的值作为下一轮 的输入。同时也作为置换选择Pc-2的输入,产生一个48位的输出,即为一个子秘钥。

其中每一轮移位数不同,若为1、2、9、16轮,则只移1位,否则移2位。置换选择2为一个压缩运算,将56位压缩位48位。

编程实现分组密码DES的解密方法 分组密码技术_加解密_05

3、DES安全特性

1)、互补性

编程实现分组密码DES的解密方法 分组密码技术_密码学_06

2)弱密钥

编程实现分组密码DES的解密方法 分组密码技术_分组密码_07

3)差分分析

编程实现分组密码DES的解密方法 分组密码技术_加解密_08


4)秘钥搜索

编程实现分组密码DES的解密方法 分组密码技术_编程实现分组密码DES的解密方法_09

4、多重DES

为提高并充分利用现有软硬件资源,可以使用多重DES。多重DES就是使用多个秘钥对密文进行多次DES加密,可以增加秘钥量,能有效地抵抗对秘钥的穷举搜索。
3DES:
优点:

  • 秘钥长度增加到了112或168位,克服了秘钥穷举搜索
  • 相对于DES,增加了抗差分分析和线性分析能力
  • 升级成本不高

不足:

  • 处理速度较慢
  • 明文分组长度没变,与秘钥增长的长度补匹配。

三、AES算法

1、AES算法介绍

1)简介:

AES加密算法为由比利时密码学家Joan Daemen 和Vincent Rijmen提出,在2001年被正式公布。其安全性稳定,没有算法弱点,抗密码分析能力较强。能在多个我平台上快速实现,不占用大量的内存空间,算法简单、灵活,适应性强。
2)基本结构

秘钥长度

分组长度

加密轮数

AES-128

128位

128位

10

AES-192

192位

192位

12

AES-256

256位

256位

14

AES处理单位为字节,128的秘钥和分组都会被分成16个字节进行处理。
一般的明文分组以字节为单位分成正方形矩阵,从上到下排列,从左到右,称为状态矩阵。在每一轮算法中,状态矩阵内的内容不断发生变化,最后作为
密文输出。

2、AES算法实现

1)加密过程:

AES的十轮加密过程中,第1~9轮的加密函数一样,包括四个操作:轮秘钥加、字节代换、行位移、和列混合。最后一轮不执行列混合。此外在加密之前明文和秘钥都要进行一次异或加密。

(1)字节代换:

AES的字节代换可以假设为一个简单的查表操作。AES定义了一个S盒和一个逆S盒,S盒用于加密查表,逆S盒用于解密查表,都是由16*16组成的矩阵。每个矩阵元素内容是1字节的值,且个元素各不相同。

查表操作为把该字节的前四位作为行值,后四位作为列值,取出S盒和逆S盒中对应位置的值作为输出。

逆字节代换相同,只是对应的代换表排列不同。

S盒的替换表:

编程实现分组密码DES的解密方法 分组密码技术_加解密_10

(2)行位移:
一个简单的左循环操作,当秘钥长度为128位时,状态矩阵的第0行左移0字节,第1行左移1字节,第2行左移2字节,第3行左移3字节。
行位移逆变换的执行操作相反。
(3)列混合:
列混合是通过矩阵相乘来实现的,经行位移后的状态矩阵与固定矩阵相乘,得到混淆后的矩阵。
逆列混合是也是将混合后的矩阵乘以固定矩阵(此矩阵与列混合固定矩阵乘积为单位矩阵)。
列混合变换的矩阵系数是基于最大距离线性码的理论设计的,这使得列混合具有良好的扩散性,在经过几轮行变换和列混合后,所有的输出位均与所有的输入位有关。
(4)轮秘钥加:
轮秘钥加是将128位的轮秘钥Ki同状态矩阵中的数据进行逐位异或操作。
逆轮秘钥加的操作与轮秘钥加的操作一样,因为二次异或后的值结果与原结果相同。
(5)秘钥拓展:
AES秘钥拓展首相将初始秘钥输入一各4*4的矩阵中,矩阵的每一列的四个字节组成一个字,四列依次命名为:W[0],W[1], W[2], W[3].构成一个以字为单位的数组W。
对W扩充40个新列,一共工程44列的拓展秘钥数组。新;列以如下方式递归产生:

  • 如果i不是4的倍数,则第i列由如下方式确定:W[i]=W[i-4]⊕W[i-1]
  • 如果i是4 的被数,那么第i列由如下方法确定:W[i]=W[i-4]⊕T(W[i-1]).

T是一个复杂函数,由三部分组成:字循环、字节代换、轮常量异或作用分别如下:

  • 字循环:将1个字中的8个字节循环左移1个字节。
  • 字节代换:对字循环的结果使用S盒。
  • 轮常量异或:将前两部的结果与轮常量Rcon[j]进行异或,j表示轮数。
    轮常量表:

    2)解密过程:
    由于AES的没有采用Feistel结构,所以解密过程不同于加密过程,需要不同的加密顺序和相应的逆向变换。解密过程为:逆行位移、逆字节变换、逆轮秘钥加、逆列混合。这使得AES的加解密主要两套不同的软硬件设施来解决。
3、AES的安全性和可用性

一般安全性:
一方面使用S盒作为非线性组件,结构简单且便于分析;首先Rijndael表现出了足够的安全性,没有已知的方法能攻击。
软件实现:
Rijndael非常利于在包括8位、64位以及DSP在内的各种平台上执行加解密算法,其固有的分布执行机制能充分有效的利用处理器资源。而且它的秘钥安装速度非常快,因而秘钥的长度变化而引起的轮数变化会降低算法的执行能力。
受限空间环境:
通常,RIjndael非常适合在有限空间中执行加解密操作,他对RAM和ROM的要求很低,但在同时执行加解密操作室,则需要更大的空间。
加密与解密:
Rijndael的加密函数与解密函数不同,同时实现加密与解密所所占用的空间比仅仅实现加密时占用的空间要多60%。

4、AES与DES对比

1)相似之处:

  • 二者的轮函数都是由三层构成,非线性层、线性混合层、子秘钥异或,只是顺序不同。
  • AES的子秘钥加对应DES中S盒 之前的子秘钥异或
  • AES的列混合的目的是让不同的字节相互影响,而DES中的F函数的输出与左边一般的数据相加也类似。
  • AES的非线性运算是字节代换,DES中的非线性运算则是S盒
  • 行位移运算保证了每一行的字节不仅仅影响其他行的字节,而且影响其他行所有字节,这与DES中 的P盒类似。

2)不同之处;

  • AES 的秘钥长度不同于DES
  • DES是面向比特运算,AES则是面向字节运算
  • AES加解密算法不同,而DES加解密算法相同。

四、分组密码操作模式

1、电子密码本模式

该模式就是将一个明文数据块加密成一个密文数据块,下一个明文数据块加密成另一个密文数据块。以此类推。这就是电子密码本(ECB)模式。该模式操作简单,适用于短报文的加密传输。

2、密码分组链接模式

编程实现分组密码DES的解密方法 分组密码技术_安全_11

编程实现分组密码DES的解密方法 分组密码技术_分组密码_12

特点:

  • 一种反馈机制在分组密码中的应用,每个密文分组不仅依赖于产生他的明文分组,还依赖于前面所有分组。
  • 相同的明文,即使在秘钥相同的情况下密文也不同。
  • 初始向量不需要保密,可以明文形式和密文一起传递。
  • 适用于长报文的加密传递。