目录
1 分组密码的含义
1.1 分组密码介绍
1.2 分组密码的含义
1.3 分组密码的要求
2 分组密码的设计思想
2.1 分组密码的设计思想
3 分组密码的基本特点
3.1 分组密码的基本特点
3.2 分组密码的迭代结构
3.3 子密钥的生成方法
3.4 轮函数的设计准则
3.5 迭代的轮数
4 分组密码的迭代结构
4.1 分组密码迭代结构
feistel结构:
加密过程中一轮:
解密过程中一轮:
5 DES分组密码算法
5.1 DES起源
5.2 DES概述
5.3 DES加密流程图
5.4 DES函数F的实现流程图
5.5 选择扩展置换E(32位扩展到48位)
5.6 DES子密钥的生成算法
5.7 S盒代替——压缩替代变换
5.8 置换P盒的构造方法
5.9 轮函数步骤
5.10 逆初始置换
5.10 DES解密流程图
6 DES其他知识
6.1 弱密钥
6.2 半弱密钥
6.3 差分分析
6.4 线性分析
6.5 多重DES
分组密码,也称块密码,它是将明文消息经编码表示后的二进制序列 划分成若干固定程度(譬如m)的组(或块),各组分别在密钥的控制下转换成长度为的密文分组。其本质是从一个明文空间(m长的比特串的集合)P到密文空间(n长的比特串的集合)C的一一映射。(一般而言,,但与t不一定相等)。
所谓扩散,是指要将算法设计成明文每一比特的变化尽可能多地影响到输出密文序列的变化,以便隐蔽明文的统计特性。形象地称为雪崩效应。
扩散的另一层意思是密钥每一位的影响尽可能迅速地扩展到较多的密文比特中去。即扩散的目的是希望密文中的任一比特都要尽可能与明文、密钥相关联,或者说,明文和密钥中任何一比特值发生改变,都会在某种程度上影响到密文值得变化,以防止将明文或密钥分解成若干孤立的小部分,然后被逐个击破。
所谓混乱,指在加解密变换过程中明文、密钥以及密文之间的关系尽可能地复杂化 ,以防密码破译者采用解析法(即通过建立并求解一些方程)进行破译攻击。
混乱可以用“搅拌机”来形象地解释,将一组明文和一组密钥输入到算法中,经过充分混合,最后变成密文。同时要求,执行这种“混乱”作业的每一步必须是可逆的,即明文混乱以后能得到密文,反之,密文经过逆向的混乱操作后能恢复出明文。(按照混乱原则,分组密码算法应有复杂的非线性因素)。
依次使用两个或两个以上的基本密码,所的结果的密码强度将强于所有单个密码的强度。实际上,乘积密码就是扩散和混乱两种基本密码操作的组合变换。 这样能够产生比各自单独使用时更强大的密码系统。选择某个较为简单的密码变换(包含多个基本密码),在密钥控制下以迭代方式多次利用它进行加密变换,就可以达到预期的扩散和混乱效果。乘积密码有助于利用少量的软硬件资源实现较好的扩散和混乱效果,再通过迭代方法,达到预期设计效果,这种思想在现代代码设计中使用非常广泛。
子密钥的生成是迭代分组算法的一个重要组成部分,是从初始(种子)密钥产生各迭代要是用的子密钥的算法。 也就是说,轮函数F的功能是在子密钥的参与和控制下实现的,子密钥的生成很重要,其评价指标:
轮函数F是分组密码的核心,是分组密码中单轮加解密函数,其基本准则:
其主要的性能指标是安全性、速度、灵活性。
分组密码一般采用简单的、。安全性弱的密码函数进行多轮迭代运算,使得安全性增强。一般来说,分组密码迭代轮数越多,密码分析越困难,但也不是追求迭代轮数越多越好,过多的迭代轮数会使加解密算法的性能下降,而实际的安全性增强不明显。决定迭代轮数的准则:密码算法分析的难度大于简单穷举搜索攻击的难度。分组密码迭代轮数一般采用8、10、12、16、20的居多。
在密码学的学术理论中,任何攻击方式,其计算复杂度若少于暴力搜寻法所需要计算复杂度,就能被视为针对该密码系统的一种破解法;但这并不表示该破解法已经进入可以实际应用的阶段。
解密同加密一样,也需要进行左右消息分组的运算,并且要将运算结果传递给下一轮。通过feistel结构的加密和解密,我们可以发现在明文消息在经过加密以后的密文,可以通过解密算法将其还原为原始的明文,也就是说该加密算法是可逆的。
1973年,美国的国家标准局认识到建立数据加密标准的迫切性,开始在全国征集国家数据加密标准。有很多公司着手这项工作并提交了一些建议,经历了海选、初选、决赛,最后IBM公司的Lucifer加密系统获得了胜利。经过两年多的公开讨论之后,1997年1月15日NBS决定利用这个算法,并将其更名为数据加密标准(Data Encryption Stand-ards,DES)。不久,其他组织也认可和采用DES作为加密算法,供商业和非国防行政府部门使用。当时,确定有效期为5年,随后在1983年、1988年、1993年三次再次授权该算法续用五年,1997年开始征集AES(高级机密标准),2000年选定比利时人设计的Rijndael算法作为新标准(AES)。
初始置换:
·
Feistel结构:feistel结构把任何函数(一般称为F函数,又称轮函数)转化为一个置换。
子密钥的生成:子密钥K的生成大致分成三个过程:置换选择PC1,循环左移,置换选择PC2。
Ln = R(n - 1);
Rn = L(n - 1)⊕f(Rn-1,kn-1)
E盒扩展的作用是把32比特的输入扩展成48比特,扩展的方式如下图所示,把输入的32比特从左到右编号为1,2,3.。。。32,并把 这32比特写成每行4个,共8行的形式。然后把第i-1行最右比特和第i+1行最左比特添加到第i行的左边和右边,这样就得到了48bit的输出。(即c1c2c3c4c5c6 = m32m1m2m3m4m5 .... 以此类推)。
将明文中第57位数据放在转换后生成表的第一位,第49位放在生成表的第2位……
S盒的作用是将输入的48比特数据压缩为32比特。
8个6进4出的S盒如下图所示,每个S盒有4行,记为第0,1,2,3行,有16列,记为第0,1,2,3.。。。,15列。
以s6为例解释s盒的使用方法:
对于6位输入b1b2b3b4b5b6,用b1b6组成的二进制数表示行标,b2b3b4b5组成的二进制数表示列标,查s盒的表,表中的十进制数字转为4位二进制即为输出
令+表示XOR加法 (模2诸位加法) ,对于第n轮有:
轮函数最后一步的左边32 bit和右边32 bit合成64 bit,再进行逆初始置换,得到最终密文。
差分分析是一种攻击迭代密码体制的选择明文攻击方法, 与一般统计分析法的不同之处是,它不是直接分析密文或密 钥和明文的统计相关性,而是分析一对给定明文的异或(对 应位不同的个数称为差分)与对应密文对的异或之间的统计 相关性。差分分析的基本思想是在攻击的迭代密码系统中找 出某些高概率的明文差分和密文差分对来推算密钥。利用此 法攻击DES,需要用247个选择明文和247次加密运算,比穷举 搜索的工作量大大减少。然而找到247个选择明文的要求使这
种攻击只有理论上的意义。
该方法是日本密码学家松井充(Mitsuru Matsui)于1993年公 开的另一种对分组密码进行分析攻击的方法,这种方法试图 通过大量的“明-密文对”找出分组密码算法中与密钥有关的 线性方程,然后试着得到大量的这类关系从而确定密钥。其 基本思想是以最佳的线性函数逼近DES的非线性变换S盒,这 是一种已知明文攻击方法,可以在有243个已知明-密文对的情 况下破译DES。虽然获得已知明文比选择明文更容易,但线性分析作为一种攻击手段针对DES在实际上仍然不可行。