1.33k likes | 1.65k Views
第三章 分组密码. 本科生 必修课 《 现代密码学 》. 主讲教师 : 董庆 宽 副教授 研究方向 : 密码学与信息安全 电子邮件: qkdong@xidian.edu.cn 个人主页: http://web.xidian.edu.cn/qkdong/. 第三章 分组密码. 内容提要. 3.1 分组密码概述 3.2 数据加密标准 DES 3.3 差分密码分析和线性密码分析 3.4 分组密码的运行模式 3.5 IDEA 3.6 AES - Rijndael. 第三章 分组密码: 3.1 分组密码概述. 3.1.1 分组密码的基本概念和发展.
E N D
第三章 分组密码 本科生必修课《现代密码学》 主讲教师:董庆宽 副教授 研究方向:密码学与信息安全 电子邮件:qkdong@xidian.edu.cn 个人主页:http://web.xidian.edu.cn/qkdong/
第三章 分组密码 内容提要 • 3.1 分组密码概述 • 3.2 数据加密标准DES • 3.3 差分密码分析和线性密码分析 • 3.4 分组密码的运行模式 • 3.5 IDEA • 3.6 AES-Rijndael
第三章 分组密码:3.1 分组密码概述 3.1.1分组密码的基本概念和发展 • 分组密码(Block Cipher),一类对称密码算法: • 将明文消息分组,逐组加密; • 将明文消息编码表示后的数字序列x0,x1,…,xi,…划分成长为n的组x=(x0,x1,…,xn-1)Vn(长为n的矢量) • 各组分别在密钥k=(k0,k1,…,kt-1) K控制下变换成输出序列y=(y0,y1,…,ym-1) Vm (长为m的矢量) • 其加密函数E:Vn×K→Vm,K为密钥空间 • 与流密码相比无记忆性。在相同密钥下分别对长为n的输入明文组实施相同变换,所以只需研究对任一组明文数字的变换规则。 • 分组密码实质上是字长为m的数字序列的代换密码
第三章 分组密码:3.1 分组密码概述 3.1.1分组密码的基本概念和发展 • 算法的输入长度和输出长度 • 通常取m=n (用于加密) • 若mn,则为有数据扩展(m>n)/压缩(m<n)/的分组密码(用于认证) • 当前主流分组密码中,明文x和密文y均为二元数字序列 • 分组密码的优缺点 • 适合软硬件实现,软件实现及标准化优于流密码 • 没有有效的数学工具,安全性一般无法证明 • 参考资料:《对称密码学》胡予濮,张玉清等著 • 《密码分析学》冯登国
第三章 分组密码:3.1 分组密码概述 3.1.1分组密码的基本概念和发展 • 分组密码的作用 • 加密(适合软硬件实现) • 构成其它密码功能的基本模块 • 1. 构造伪随机数生成器。用于产生性能良好的随机数 • 适合产生少量随机数,如ANSI X9.17(基于EDE算法) • 2. 构造流密码。 • 速度比移位寄存器慢得多,但软件实现方便 • 采用适当的分组链接模式(CFB或OFB)可实现 • 3. 消息认证和数据完整性保护 • 通过用于构造消息认证码(MAC)和杂凑函数等来实现
第三章 分组密码:3.1 分组密码概述 3.1.1分组密码的基本概念和发展 • 分组密码算法设计的研究发展概况 • (一)古典密码学阶段 • 1)算法保密,出现了代换和置换的方法 • 2)产生了乘积密码的思想 • 指顺序地执行两个或多个基本密码系统,使最后结果的密码强度高于每个基本密码系统的强度 • 多轮加密(3.1.3节1段),或叫多轮迭代 • 3)基尔霍夫准则:密码系统的安全性不依赖于算法,而只依赖于密钥的保密性
第三章 分组密码:3.1 分组密码概述 3.1.1分组密码的基本概念和发展 • (二)近代密码学阶段(1949-1975)-分组密码的酝酿期 • 1)计算机技术的发展,开始了密码学面向商业应用的设计 • 2)C. E. Shannon(1916~2002 )的工作:1949年,建立了保密系统的通信理论,50-70年代Shannon的工作起着决定性的指导作用。对密码理论的贡献主要有两点 • 其一,用信息论刻划了密码学中的安全性 • 提出了语言冗余度和“熵”的概念,论述了破译密码需多少信息量 • 定义了“计算安全”与“无条件安全”; • 其二,提出了密码设计中的扩散准则和混淆准则 • 在一次一密无法实现的情况下,这两个准则是设计密码体制的最基本准则。今天仍然是设计密码体制极其重要的指导准则 • 3)Smith关于Lucifer密码的设计研究 • 4)Feistel网络密码结构,除子密钥的顺序,加解密算法完全相同
第三章 分组密码:3.1 分组密码概述 3.1.1分组密码的基本概念和发展 • (三)现代密码学阶段-走向成熟 • 1)密码学由专门应用转向商业应用 • 美国数据加密标准DES(Data Encryption Standard)颁布,激发了人们对密码学的研究兴趣 • 早期的研究基本上是围绕DES进行的,推出了一些类似的算法,例如:LOKI,FEAL,GOST等 • 2)1990年Biham和Shamir差分密码分析方法(differential cryptanalysis)以及1993年Mitsuru Matsui线性密码分析方法(linear cryptanalysis)问世,从理论上讲是攻击分组密码最有效的方法,迫使人们不得不研究新的密码结构 • 从实际上看强力攻击是攻击分组密码最可靠的方法 • 3)1992年IDEA密码打破了DES类密码的垄断局面
第三章 分组密码:3.1 分组密码概述 3.1.1分组密码的基本概念和发展 • 4)随后出现了SQUARE、SHARK、SAFER-64等采用了结构非常清晰的代换—置换(SP)网络 • 从理论上给出了最大差分特征概率和最佳线性逼近优势的界,证明了密码对差分密码分析和线性密码分析的安全性 • 5)1997~2000年间美国高级加密标准AES的征集活动以及2000~2003年间欧洲NESSIE计划的实施,再次掀起了密码研究的新高潮 • 15个AES候选算法和24个NESSIE终选算法反映了当前密码设计的水平,也可以说是近几年研究成果的一个汇总。 • 6)目前分组密码形成了很多标准 • 国际分组密码三大标准DES/3DES、IDEA、AES • 3GPP标准中的KASUMI算法 、我国无线网标准SM4 • 欧洲NESSIE计划中的MISTY1、 Camellia、 SHACAL2 • 瑞典人JakobJonsson和美国人Burt Kaliski设计的RC6
第三章 分组密码:3.1 分组密码概述 3.1.2 分组密码算法的设计要求 • 分组密码算法设计满足的要求如下: • I. 应用要求: • 实际应用中对于分组密码可能提出多方面的要求,除了安全性外,还有: • 运行速度 • 存储量(程序的长度、数据分组长度、高速缓存大小) • 实现平台(硬件、软件、芯片)、 • 运行模式等限制条件。 • 这些都需要与安全性要求之间进行适当的折中选择
第三章 分组密码:3.1 分组密码概述 3.1.2 分组密码算法的设计要求 • II. 算法设计的要求 • 分组密码是一种在密钥控制下的代换(可逆映射),用来对当前输入的明文数字组进行加密变换,密钥个数决定了不同代换的个数。 • ① 分组长度n要足够大,使分组代换字母表中的元素个数2n足够大,防止明文穷举攻击法奏效。 • 这时,可以假定攻击者控制了加密机,但不知道密钥,那么可以利用加密机黑盒子对所有可能明文加密,看是否等于要攻击的密文进行破译。也可称为一种可能字攻击 • DES、IDEA等分组密码都采用n=64,在生日攻击下用232组密文成功概率为1/2,同时要求232×64b=215MB=32GB存贮,故现在采用穷举攻击已经可以实现(时间存储攻击) • 生日攻击请参考5.2.3节
第三章 分组密码:3.1 分组密码概述 3.1.2 分组密码算法的设计要求 • ② 密钥量要足够大 • 即代换子集中的元素足够多,因为代换的区别主要是密钥不同,攻击者无法穷搜索所有可能代换 • 尽可能消除弱密钥并使所有密钥同等地好,以防止密钥穷举攻击奏效。但密钥又不能过长,以便于密钥的管理。 • DES采用56比特密钥,太短 • 据估计,在今后30~40年内采用80比特密钥是足够安全的 • ③ 由密钥确定置换的算法要足够复杂,充分实现明文与密钥的扩散和混淆,没有简单的关系可循,能抗击各种已知的攻击 • 如差分攻击和线性攻击 • 有高的非线性阶数,实现复杂的密码变换 • 使对手破译时除了用穷举法外,无其它捷径可循
第三章 分组密码:3.1 分组密码概述 3.1.2 分组密码算法的设计要求 • ④ 加密和解密运算简单,易于软件和硬件高速实现 • 使用子块和简单的运算 • 如将分组n划分为子段,每段长为8、16或者32 • 在软件实现时,应选用简单的运算,使作用于子段上的密码运算易于以标准处理器的基本运算,如加、乘、移位等实现,避免用软件难于实现的逐比特置换 • 加解密算法应具有相似性 • 为了便于硬件实现,加密和解密过程之间的差别应仅在于由秘密密钥所生成的密钥表不同而已。这样,加密和解密就可用同一器件实现。 • 设计的算法采用规则的模块结构,如多轮迭代等,以便于软件和VLSI快速实现
第三章 分组密码:3.1 分组密码概述 3.1.2 分组密码算法的设计要求 • ⑤ 数据扩展 • 用于加解密时,一般无数据扩展 • ⑥ 差错传播尽可能地小 • 1比特的传输错误不会影响更多比特的正确解密 • ⑦透明性和灵活性 • 透明性即要求算法是可证明安全的(虽然这是很困难的)。这就要求算法尽可能使用通用部件,避免黑盒 • 灵活性即要求算法的实现可以适应多种计算环境;明文分组长度可以伸缩;算法可以移植和变形 • 要实现上述几点要求并不容易 • 首先,要在理论上研究有效而可靠的设计方法 • 而后进行严格的安全性检验,并且要易于实现
第三章 分组密码:3.1 分组密码概述 3.1.3 扩散和混淆设计准则 • 扩散和混淆(diffusion and confusion)是由Shannon提出的设计密码系统的两个基本准则,目的是抗击敌手对密码系统的统计分析 • 如果敌手知道明文的某些统计特性(如消息中不同字母出现的频率、可能出现的特定单词或短语)而且这些统计特性以某种方式在密文中反映出来,那么敌手就有可能得出加密密钥或其一部分,或者得出包含加密密钥的一个可能的密钥集合 • 扩散性:所设计的密码应使得 • (1) 密钥的每一个比特影响密文的每一个比特,以防止对密钥进行逐段破译; • (2) 明文的每一个比特影响密文的每一个比特,以便最充分地隐蔽明文。即将明文的统计特性散布到密文中去,从而使明文和密文之间的统计关系变得尽可能复杂
第三章 分组密码:3.1 分组密码概述 3.1.3 扩散和混淆设计准则 • 扩散性也可以理解为 • 明文、密文、密钥的每一位都相互依赖 • 雪崩性:即当改变明文的任何一个比特时,对应密文改变的比特的个数是一个随机变量; • 在二元分组密码中,可对数据重复执行某个置换,再对这一置换作用于一函数(代换),可获得扩散。(置换+代换) • 混淆性: • 是使密文和密钥之间的统计关系变得尽可能复杂,以使敌手无法得到密钥。 • 即使敌手能得到密文的一些统计关系,由于密钥和密文之间的统计关系复杂化,敌手也无法得到密钥。 • 使用复杂的代换算法可以得到预期的混淆效果 • 简单的线性代换函数得到的混淆效果则不够理想
第三章 分组密码:3.1 分组密码概述 3.1.4 分组密码常用计算组件和结构 • 1. 群加密:线性计算组件 • 逐比特异或 ,结构最简单,缺点也最明显,密文的一个比特只依赖于明文的一个比特和密钥的一个比特,毫无扩散功能。 • (mod 2n)加法“+”也是非常简单的计算组件,具有单向扩散功能,即明文或密钥的第j位影响密文的第j位、第j+1位、…、第n位。 • 2. 置换( Permutation ) • 不改变明文比特,只打乱位置,以充分扩散。一般用置换表实现 • 扩展置换:在置换的基础上,将某些bit重复出现,明文长度扩展 • 3. 代换( Substitution ):非线性组件 • 称明文分组到密文分组的可逆变换为代换 • (与古典密码中代换表同义) • 如IDEA使用的 mod 216+1乘法,具有非线性运算功能 • AES中的字节替代 • DES中的S盒
第三章 分组密码:3.1 分组密码概述 3.1.4 分组密码设计中的常用计算组件 • 即代换是输入集A到输出集合A上的双射变换: fk:AA • 式中,k是控制输入变量,即密钥 • 密钥k决定了使用哪一个代换,是代换函数的一部分,k不同则对应的代换(可逆映射)也不同,所以加密算法中的代换其代换结构同,区别在于使用的密钥变量的不同 • 双射条件保证在给定k下可从密文惟一恢复明文 • 代换的数量 • 如果明文和密文的分组长都为n比特,则明文的每一个分组都有2n个可能的取值,则不同可逆变换的个数有2n!个。2n的全排列 • 代换通常是高度非线性函数 • 1)用“解析表达式”,将自变量的值代入“解析表达式”,计算出函数值。节省空间,但是太慢,一般很少用 • 2)将代换用输入/输出真值表表达,计算即查表,速度快,经常使用
第三章 分组密码:3.1 分组密码概述 3.1.4 分组密码设计中的常用计算组件 • 代换结构 • 下图表示n=4的代换密码的一般结构 • 4比特输入产生16个可能输入状态中的一个,由代换结构将这一状态映射为16个可能输出状态中的一个,每一输出状态由4个密文比特表示。 • 共有24!=16!种可能代换
第三章 分组密码:3.1 分组密码概述 3.1.4 分组密码设计中的常用计算组件 • 加密映射和解密映射可由代换表来定义,这种定义法是分组密码最常用的形式,能用于定义明文和密文之间的任何可逆映射。 • 表3-1 对应的代换表 • 从本质上来说,第2列是从所有可能映射中决定某一特定映射的密钥,共需424=64bit密钥 加密代换 解密代换
第三章 分组密码:3.1 分组密码概述 3.1.4 分组密码设计中的常用计算组件 • 这种代换结构中分组长度不宜太小 • 如果分组长度太小,如n=4,系统则等价于古典的代换密码,容易通过对明文的统计分析而被攻破。 • 如果分组长度n足够大,而且从明文到密文可有任意可逆的代换,那么明文的统计特性将被隐藏而使以上的攻击不能奏效。 • 但代换结构中的分组长度也不宜很大 • 会使代换表规模呈几何级数增加 • 由表3.1的情况可知,一般地,对n比特的代换结构,密钥的大小是n×2n比特。 • 如对64比特的分组,密钥大小应是64×264=270≈ 1021比特,因此难以处理。 • 若可用一个由n比特密钥确定的函数来描述映射,则密钥量就是n
第三章 分组密码:3.1 分组密码概述 3.1.4 分组密码设计中的常用计算组件 • 解决办法 • 实际中分组n往往较大,因此常将分组n分成较小的段 • 如可选n=r·n0,其中r和n0都是正整数,将设计n个变量的代换变为设计r个较小的子代换,而每个子代换只有n0个输入变量 • 一般n0都不太大,称每个子代换为代换盒,简称为S盒 • 例如DES中将输入为48比特、输出为32比特的代换用8个S盒来实现,每个S盒的输入端数仅为6比特,输出端数仅为4比特。
第三章 分组密码:3.1 分组密码概述 3.1.4 分组密码设计中的常用计算组件 • 代换置换网络 SPN • SPN是代换-置换乘积密码的现代形式,集掩蔽、混淆、扩散为一体的综合性部件,一般分组密码的单轮变换都是SPN • Shannon在1949 的文章中介绍了SPN的思想,把代换和置换这两种基本运算组合在一起,将一些 S-boxes 由 P-boxes连接,这种变换叫做混合变换(mixing transformations) • SP的网络结构非常清晰,例如Safer+、Serpent、IDEA、AES等 • S一般被称为混淆层,主要起混淆作用 • P一般被称为扩散层,主要起扩散作用。 • 在明确S和P的某些密码指标后,设计者能估计SP型密码抵抗差分密码分析和线性密码分析的能力。 • SPN可以得到快速的扩散,容易求逆,但是SP密码的加/解密通常不相似。通过精心设计可以使用基本的相同编码或硬件用于加密和解密
第三章 分组密码:3.1 分组密码概述 3.1.5 Feistel密码结构 • 密码结构是指加密算法的组成结构,典型的有如下几种: • 1. 乘积密码与多轮迭代结构 • 乘积密码指顺序地执行两个或多个基本密码系统,使得最后结果的密码强度高于每个基本密码系统产生结果 • 乘积密码的特例是迭代密码,采用多个相同的基本密码系统顺次执行(如Feistel结构) • 若以一个简单函数f,进行多次迭代,就称其为迭代密码。 • 每次迭代称作一轮(Round)。相应函数f称作轮函数。 • 每一轮输出都是前一轮输出的函数,即y(i)=f[y(i-1), k(i)],其中k(i)是第i轮迭代用的子密钥,由秘密密钥k通过密钥生成算法产生。 • 2. 其他密码结构(例如Frog和HPC)。 • 采用非正规结构,安全性不好
第三章 分组密码:3.1 分组密码概述 3.1.5 Feistel密码结构 • 3. Feistel密码结构(一种特殊的SPN结构) • 早期,很多成功的分组密码的结构从本质上说都是基于一个称为Feistel网络的结构,例如DES、CAST-256、DEAL、DFC、E2等 • 加解密相似是Feistel型密码的一个实现优点,但它在密码的扩散似乎有些慢,例如需要两轮才能改变输入的每一个比特。不过在实用中似乎并不会形成较大的影响,只要轮数足够多。 • Feistel提出利用乘积密码可获得简单代换密码 • 多轮迭代 • 每一轮变换实际上是一种SPN • Feistel还提出了实现代换和置换的方法。 • 其思想实际上是Shannon提出的利用乘积密码实现混淆和扩散思想的具体应用
第三章 分组密码:3.1 分组密码概述 3.1.5 Feistel密码结构 • 1.Feistel 加密结构 • Horst Feistel在70年代初设计了这样的结构,我们现在叫做Feistel cipher • 每组明文分成左右两半L0和R0 • 其第i轮迭代的输入为前一轮输出的函数: • Li=Ri-1 • Ri=Li-1F(Ri-1, Ki) • Ki是第i 轮用的子密钥,各轮不同,由密钥K产生 • 最后一轮完成后再左右交换
第三章 分组密码:3.1 分组密码概述 3.1.5 Feistel密码结构 • Feistel网络的实现与以下参数和特性有关: • ① 分组大小 • 分组越大则安全性越高,但加密速度就越慢。分组密码设计中最为普遍使用的分组大小是64比特。当前多使用128比特以上 • ② 密钥大小 • 密钥越长则安全性越高,但加密速度就越慢。现在普遍认为64比特或更短的密钥长度是不安全的,通常使用128比特的密钥长度。 • ③ 轮数 • 单轮结构远不足以保证安全性,但多轮结构可提供足够的安全性。典型地,轮数取为16。 • ④ 子密钥产生算法: • 该算法的复杂性越大,则密码分析的困难性就越大。 • ⑤ 轮函数 :轮函数的复杂性越大,密码分析的困难性也越大。
第三章 分组密码:3.1 分组密码概述 3.1.5 Feistel密码结构 • 在设计Feistel网络时,还有以下两个方面需要考虑 • ① 快速的软件实现 • 在很多情况中,算法是被镶嵌在应用程序中,因而无法用硬件实现。此时算法的执行速度是考虑的关键 • ② 算法容易分析 • 如果算法能被无疑义地解释清楚,就可容易地分析算法抵抗攻击的能力,有助于设计高强度的算法 • 2. Feistel解密结构 • Feistel解密过程本质上和加密过程是一样的,使加解密可用同一算法 • 算法使用密文作为输入,但使用子密钥Ki的次序与加密过程相反,即第1轮使用Kn,第2轮使用Kn-1,……,最后一轮使用K1。
第三章 分组密码:3.1 分组密码概述 3.1.5 Feistel密码结构 • 加密过程由上而下 • 解密过程由下而上 • 图中右边标出了解密过程中每一轮的中间值与左边加密过程中间值的对应关系 • 即加密过程第i轮的输出是LEi‖REi(‖表示链接) • 解密过程第17-i轮相应的输入是RDi‖LDi • 最后一轮输出密文是RE16‖LE16
第三章 分组密码:3.1 分组密码概述 3.1.5 Feistel密码结构 • 下面证明解密过程第1轮的输出等于加密过程第16轮输入左右两半交换值 • 解密过程取密文作为同一算法的输入,即第1轮输入是RE16‖LE16 在加密过程中: • LE16=RE15 ;RE16=LE15F(RE15, K16) 在解密过程中 • LD1=RD0=LE16=RE15 • RD1=LD0F(RD0, K16)=RE16F(RE15, K16) • =[LE15F(RE15, K16)] F(RE15, K16)=LE15 容易证明这种对应关系在16轮中每轮都成立 • 一般地,加密过程的第i轮有 • LEi=REi-1;REi=LEi-1F(REi-1,Ki) • 因此 REi-1=LEi;LEi-1=REiF(REi-1,Ki)=REiF(LEi,Ki) 解密过程第16轮的输出是RE0‖LE0,左右交换后即得最初的明文
第三章 分组密码:3.2 数据加密标准DES 3.2 数据加密标准DES • DES的产生 • 美国国家标准局1973年开始研究除国防部外的其它部门的计算机系统的数据加密标准 • 于1973年5月15日和1974年8月27日先后两次向公众发出了征求加密算法的公告。加密算法要达到的目的(通常称为DES 密码算法要求)主要为以下四点: • (1)提供高质量的数据保护,防止数据未经授权的泄露和未被察觉的修改; • (2)计算安全性:具有相当高的复杂性,使得破译的开销超过可能获得的利益,同时又要便于理解和掌握; • (3)基尔霍夫准则:DES密码体制的安全性应该不依赖于算法的保密,其安全性仅以加密密钥的保密为基础; • (4)可行性:实现经济,运行有效,并且适用于多种完全不同的应用。
第三章 分组密码:3.2 数据加密标准DES 3.2 数据加密标准DES • DES在1975年3月17日首次被公布在联邦记录中 • 经过大量的公开讨论后,1977年1月15日美国政府颁布:采纳美国IBM公司设计的方案作为非机密数据的正式数据加密标准(DES, Data Encryption Standard),DES被正式批准并作为美国联邦信息处理标准,即FIPS-46,同年7月15日开始生效。 • 它的分组长度为64比特,密钥长度为56比特,是早期的称作Lucifer密码的一种发展和修改。 • DES是迄今为止世界上最为广泛使用和流行的一种分组密码算法,1996年以后,主要是3DES
第三章 分组密码:3.2 数据加密标准DES 3.2.1 DES算法描述 • 加密: • 明文分组64bit • 初始置换IP • 16轮的Feistel结构 • 初始逆置换IP-1是IP的逆 • 密钥编排 • 密钥56比特,每7bit加1个奇偶校验位,总计64比特 • 置换函数PC-1 • 左循环移位再置换函数PC-1输出本轮子密钥 • 迭代16轮
第三章 分组密码:3.2 数据加密标准DES 3.2.1 DES算法描述 • 1. 初始置换 • 表3-2(a)和3-2(b)分别给出了初始置换和逆初始置换的定义,这两个置换是互逆的。 • 64比特的明文M以8比特为一行,共8行,以行顺序编号 • 由表3-2(a)得X=IP(M),由3-2(b)得 Y=IP-1(X)=IP-1(IP(M))=M
第三章 分组密码:3.2 数据加密标准DES 3.2.1 DES算法描述 • 2. 轮结构 • 64比特的轮输入分为左右两半,右办部分是本轮子密钥产生过程 • 和Feistel网络一样,每轮变换可由以下公式表示: • Li=Ri-1 • Ri=Li-1F(Ri-1,Ki) • 其中轮密钥Ki为48比特。
第三章 分组密码:3.2 数据加密标准DES 3.2.1 DES算法描述 • 函数F(R,K)的计算过程 • 如图4.7所示。轮输入的右半部分R为32比特,R首先被扩展成48比特,扩展过程由表3.2(c)定义,其中将R的16个比特各重复一次。 扩展后的48比特再与子密钥Ki异或,然后再通过8个S盒,产生32比特的输出。 该输出再经过一个由表3.2(d)定义的置换P,产生的结果即为函数F(R,K)的输出。
第三章 分组密码:3.2 数据加密标准DES 3.2.1 DES算法描述 • 扩展置换E和置换P
第三章 分组密码:3.2 数据加密标准DES 3.2.1 DES算法描述 • 代换盒,简称S盒,substitution boxS • F中的代换由8个S盒组成,每个S盒的输入长为6比特、输出长为4比特,其变换关系由表3.3定义,每个S盒给出了4个代换(由一个表的4行给出)。(见42页表3.3) • DES的S盒定义
第三章 分组密码:3.2 数据加密标准DES 3.2.1 DES算法描述 • 对每个盒Si • 其6比特输入中,第1个和第6个比特形成一个2位二进制数,用来选择Si的4个代换中的一个 • 中间4位用来选择列。行和列选定后,得到其交叉位置的十进制数,将这个数表示为4位二进制数即得这一S盒的输出。 • 例如,S1的输入为011001 • 则行选为01(即第1行),列选为1100(即第12列) • 行列交叉位置的数为9,其4位二进制表示为1001,所以S1的输出为1001。 • S盒的每一行定义了一个可逆代换 • 图3-2(在3.1.1节)表示S1第0行所定义的代换 • S盒作为该密码体制的唯一非线性组件对安全性至关重要 • S-盒的设计准则还没有完全公开,一些密码学家怀疑美国NSA(the National Security Agency)设计S-盒时隐藏了陷门,即万能钥匙
第三章 分组密码:3.2 数据加密标准DES 3.2.1 DES算法描述 • 1976年,美国NSA披露了S-盒的下述几条设计原则: • 每个S-盒的每一行是整数0~15的一个全排列; • 每个S-盒的输出都不是其输入的线性或仿射函数; • 改变任一S-盒任意1bit的输入,其输出至少有2bit发生变化; • 对任一S-盒的任意6bit输入x,S(x)与S(x001100)至少有2bit不同; • 对任一S-盒的任意6bit输入x,及, {0,1},都有S(x)≠S(x1100); • 对任一S-盒,当它的任一位输入保持不变,其它5位输入尽情变化时,所有诸4bit输出中,0与1的总数接近相等。 • S盒的争论: • 公众仍然不知道S盒的构造中是否还使用了进一步的设计准则(有陷门?) • 密钥长度是否足够?(已经证明密钥长度不够) • 迭代的长度?(8、16、32?8轮几分钟就破译了)
第三章 分组密码:3.2 数据加密标准DES 3.2.1 DES算法描述 • 3.密钥的产生 • 实际上,K是长度为64的位串,其中56位是密钥,8位是奇偶校验位(为了检错),在密钥编排的计算中,这些校验位可略去。 • DES密钥编排算法结构图 • LSi表示循环左移一个或两个位置 • 其中i为1,2,9,16循环移1位,其余循环移两位
第三章 分组密码:3.2 数据加密标准DES 3.2.1 DES算法描述 • 过程: • (1) 给定64位的密钥K,放弃奇偶校验位(8,16,…,64)形成连续的56比特的密钥 • (2)再看图3-5和图3-6,输入算法的56比特密钥首先经过一个置换运算PC-1,该置换由表3.4(a)给出 • 然后将置换后的56比特分为各为28比特的左、右两半,分别记为C0和D0 • (3)在第i轮分别对Ci-1和Di-1进行左循环移位,所移位数由表3.4(c)给出。 • 移位后的结果作为求下一轮子密钥的输入,同时也作为置换选择2 PC-2的输入。通过置换选择2产生的48比特的Ki,即为本轮的子密钥,作为函数F(Ri-1,Ki)的输入。其中置换选择2由表3.4(b)定义
第三章 分组密码:3.2 数据加密标准DES 3.2.1 DES算法描述 • DES密钥编排中使用的表(表3-4) (a) 置换选择1 (b) 置换选择2 • (c) 左循环移位位数 • 注. ①对i=1,2,…,16, Ci、Di分别是由C0、D0左旋若干比特而得到,至i=16,刚好左旋了28比特位而回复当初,即:C16=C0,D16=D0。
第三章 分组密码:3.2 数据加密标准DES 3.2.1 DES算法描述 • 4.解密 • 和Feistel密码一样,DES的解密和加密算法使用同一算法,但子密钥使用的顺序相反 • 解密时子密钥的产生有两种方式: • 1)是先由K产生16个子密钥,再逆续使用 • 2)反序产生。(在前面讲过的密钥扩展过程中若改LSi为 • 则也就可以依次产生这逆序的子密钥。
第三章 分组密码:3.2 数据加密标准DES 3.2.1 DES算法描述 • DES加密实例 • 取16进制明文X:0123456789ABCDEF • 密钥K为: 133457799BBCDFF1 • 去掉奇偶校验位以二进制形式表示的密钥是 • 00010010011010010101101111001001101101111011011111111000 • 应用初始置换IP,我们得到:L0=11001100000000001100110011111111R0=11110000101010101111000010101010然后进行16轮加密。最后对L16, R16使用IP-1得到密文:85E813540F0AB405
第三章 分组密码:3.2 数据加密标准DES 3.2.1 DES算法描述 • DES的安全性问题 • 完全依赖于所用的密钥,即算法是公开的。 • DES的设计特色: • 在DES算法中,函数是最基本的关键环节,其中 • 用S-盒实现小块的非线性变换,达到混乱目的; • 用置换P实现大块的非线性变换,达到扩散目的。 • 置换P的设计使每层S-盒的4bit输出进入到下一层的4个不同S-盒 • 每个S-盒的输入由分属上一层中4个不同S-盒的输出构成。 • DES的安全性包括如下几个方面问题 • 取反特性;弱密钥和半弱密钥 • 密钥与密文和明文的关系;DES评估与穷搜索破译
第三章 分组密码:3.2 数据加密标准DES 3.2.1 DES算法描述 • 1)取反特性: • 对于明文组M,密文组C和主密钥K,若C=DESK(M), 则 ,其中 、 和 ,分别为M,C和K的逐位取反。 • 证明: • 置换、循环移位本身的取反特性可以保持,所以有 • (1)若以K为主密钥扩展的16个加密子密钥记为K1,K2,…,K16,则以 为主密钥扩展的16个加密子密钥为 • (2)由 =(1a) (1b)=ab,可得 =F(Ri-1,Ki) • (3)由 b=1ab= ,可得 = ,由此得证。 • 由此DES在选择明文攻击时工作量会减少一半。攻击者选取两个明密文对(M,C1)和( ,C2),并对于可能密钥K计算出DESK(M)=C,若C=C1或 =C2,则说明密钥为K或 。 • 其中C2=
第三章 分组密码:3.2 数据加密标准DES 3.2.1 DES算法描述 • 2)弱密钥与半弱密钥 • 大多数密码体制都有某些明显的“坏密钥”,对于K和K • 若由K扩展出来的加密子密钥为:K1, K2, …, K15, K16 • 而由K扩展出来的加密子密钥却是:K16, K15, …, K2, K1 • 即有DESK-1=DESK,则称K与K互为对合 • 在F256中的对合对: • 在DES的主密钥扩展中,C0与D0各自独立地循环移位来产生加(解)密子密钥。若C0与D0分别是{00,11,10,01}中任意一个的14次重复,则因这样的C0与D0都对环移(无论左或右)偶数位具有自封闭性 • 若PC-1-1(C0D0)=K,则由K扩展出来的加密子密钥为: • K1, K2, K2, K2, K2, K2, K2, K2, K1, K1, K1, K1, K1, K1, K1, K2 • 把C0与D0各自左环移一位得C1与D1,设PC-1-1 (C1D1)=K,则由K扩展出来的加密子密钥为: • K2, K1, K1, K1, K1, K1, K1, K1, K2, K2, K2, K2, K2, K2, K2, K1
第三章 分组密码:3.2 数据加密标准DES 3.2.1 DES算法描述 • 因此,由上述C0与D0导致的K与K互为对合;K中只有这些对合对 • 对于K,若K是自己的对合,则称K为DES的一个弱密钥 • 若K存在异于自己的对合,则称K为DES的一个半弱密钥 • 显然,C0与D0分别是{00,11,10,01}中任意一个的14次重复的情况共有42=16种 • 其中C0与D0分别是{00,11}中任意一个的14次重复的情况(计22=4种)对应弱密钥;剩下的(16-4=12种)对应半弱密钥。 • 弱密钥与半弱密钥直接引起的“危险”是在多重使用DES加密中,第二次加密有可能使第一次加密复原;另外,弱密钥与半弱密钥使得扩展出来的诸加密子密钥至多有两种差异,如此导致原本多轮迭代的复杂结构简化和容易分析。 • 所幸在总数256个可选密钥中,弱密钥与半弱密钥所占的比例极小,如果是随机选择,(半)弱密钥出现的概率很小,因而其存在性并不会危及DES的安全
第三章 分组密码:3.2 数据加密标准DES 3.2.1 DES算法描述 • 3)密文与明文、密文与密钥的相关性. • 人们的研究结果表明:DES的编码过程可使每个密文比特都是所有明文比特和所有密钥比特的复杂混合函数,而要达到这一要求至少需要DES的迭代:5轮。人们也用2-检验证明:DES迭代8轮以后,就可认为输出和输入不相关了。 • DES的评估 • 规定每隔5年由美国国家保密局(national security agency, NSA)作出评估,并重新批准它是否继续作为联邦加密标准。最近的一次评估是在1994年1月,美国已决定1998年12月以后将不再使用DES。 • DES密钥量仅为256≈1017,不能抵抗穷搜索攻击 • 尽管如此,DES对于推动密码理论的发展和应用毕竟起了重大作用,对于掌握分组密码的基本理论、设计思想和实际应用仍然有着重要的参考价值