密码编码学与网络安全——原理与实践(第八版)------第4章 学习笔记

第4章 分组密码和数据加密标准

学习目标

  • 理解流密码和分组密码之间的差异。
  • 简要介绍Feistel密码,并说明解密为何是加密的逆过程。
  • 简要介绍数据加密标准。
  • 解释雪崩效应。
  • 讨论DES的密码学强度。
  • 总结主要的分组密码设计原理。

本章介绍现代对称密码的基本原理,主要探讨使用得最广泛得对称密码——数据加密标准(Data Encryption Standard, DES)。尽管DES之后出现了大量的对称密码,并且高级加密标准(Advanced Encryption Standard, AES)注定会取代DES,但DES依然是一个及其重要的算法。此外,详细讨论DES算法可以帮助我们深刻地理解其他对称密码的原理。

本章首先研究对称分组密码的一般原理(注意本书所说的对称密码主要是对称分组密码,除了第8章的流密码外),然后研究完整的DES;讨论这个具体的算法后,再一般性地讨论分组密码设计问题。

4.1 传统分组密码结构

事实上,现在使用的大多数对称分组加密算法都是基于Feistel分组密码结构的。因此,研究Feistel密码的设计原理非常重要。下面首先比较流密码和分组密码,然后讨论Feistel结构分组密码的设计动机,最后讨论他的一些含义。

4.1.1 流密码与分组密码

流密码每次加密数据流的一位或一字节。古典流密码的例子有密钥自动生成的\small Vigen\grave{e}re密码和Vernam密码。理想情况下,可以使用一次一密版本的Vernam密码,其中密钥流(\small k_{i})和明文流(\small p_{i})一样长。若密钥流是随机的,则除非获得了密钥流,否则这个密码是不可破的。然而,密钥流必须提前以某种独立、安全的信道提供给双方。待传递的数据流量很大时,会带来不可逾越的障碍。

相应地,出于实用的原因,位流必须以算法程序的方式实现,以便双方都能生成具有密码学意义的位流。位流生成器是一个由密钥控制的算法,它必须生成密码学意义上的强位流。现在,两个用户只需共享生成的密钥,各自都可以生成密钥流。

分组密码加密一个明文分组,通常得到的是与明文等长的密文分组。典型的分组大小是64位或128位。与流密码一样,两个用户共享一个对称加密密钥。第7章中会讲到,使用某种工作模式,分组密码可以获得与流密码相同的效果。

人们已对分组密码进行了大量研究。一般来说,分组密码的应用范围要比流密码的广泛。绝大部分基于网络的对称密码应用使用的是分组密码。因此,本章及本书讨论的对称密码将集中于分组密码。

4.1.2 Feistel密码结构的设计动机

分组密码作用于n位明文分组,产生n位密文分组。共有\small 2^{n}个不同的明文分组,由于加密是可逆的(即可以解密),因此每个明文分组将唯一地对应一个密文分组。这样地变换称为可逆变换或非奇异变换。

理想分组密码,允许生成最大数量地加密映射来映射明文分组。是分组密码地最一般形式,能用来定义明密文之间的任意可逆变换。

但是,应用这种方法存在实际的困难。对于像n=4这样的较小分组,密码系统等价于传统代替密码。如我们所见,用明文的统计分析方法攻击它很容易。这种脆弱性并非来自代替密码,而是因为使用的分组规模大小。如果n足够大,并且允许明密文之间采用任意的可逆变换,那么明文的统计特征将被掩盖,从而不能用统计方法来攻击这种体制。

然而,从实现和运行的角度来看,采用大规模分组的任意可逆代替密码(即理想分组密码)是不可行的。因为对于这样的变换,映射本身就是密钥。 一般来说,对于n位代替分组密码,密钥的规模是\small n \times 2^{n}位。

考虑到这些困难,Feistel指出,我们需要的是对理想分组密码体制(分组长度n较大)的一种近似体制,它可以在易于实现部件的基础上逐步建立。在讨论Feistel的方法之前,我们先进行其他讨论。我们可以使用一般的分组代替密码,但为了实现方便,我们只讨论\small 2^{n}!个不同的可逆映射的一个子集。

4.1.3 Feistel密码

Feistel建议使用乘积密码的概念来逼近理想分组密码。乘积密码是指依次使用两个或以上的基本密码,所得结果的密码强度强于单个密码的强度。这种方法的本质是开发一个分组密码,密钥长度为k位,分组长度为n位,采用\small 2^{k}个变换,而不是理想分组密码的\small 2^{n}!个可用变换。(略微不太好理解。。。)

特别地,Feistel建议的密码要能交替地使用代替和置换。代替和置换的定义如下。

  • 代替  每个明文元素或元素组被唯一地替换为相应的密文元素或元素组。
  • 置换  明文元素序列被替换为该序列的一个置换。也就是说,序列中没有元素被添加、删除或替换,但序列中元素出现的顺序改变了。

实际上,这是Claude Shannon提出的交替使用混淆和扩散的乘积密码的实际应用。

混淆和扩散  Shannon引进混淆和扩散这两个术语来表征任何密码系统的两个基本构建。他关注的是如何挫败基于统计方法的密码分析。理由如下:假设攻击者拥有明文统计特征的知识,如某种人类语言的可读信息,其不同字母的频率分布是已知的,或者已知信息中极有可能出现某些单词或短语。如果这些特征以任何形式出现在密文中,那么密码分析者就有可能推导出密钥或密钥的一部分,至少是包含确切密钥的一个密钥集。在Shannon所指的强理想密码中,密文的所有统计特征都是独立于所用密钥的。前面所讲的任意代替密码(理想分组密码)就是这样一种密码,不过,正如我们所见,它是不可能获得实际应用的。

舍弃对理想系统的追求,Shannon提出了两种对付统计分析的方法:扩散和混淆。扩散是指使明文的统计特征消散在密文中,这可通过让每个明文数字尽可能地影响多个密文数字获得,等效于每个密文数字被许多明文数字影响。

每个分组密码都是明文分组到密文分组的变换,而这个变换又是依赖于密钥的。扩散的方法是尽可能地使用明文和密文之间的统计关系变得复杂,以挫败推导出密钥的企图。另一方面,混淆则是尽可能使密文和加密密钥间的统计关系变得复杂,以阻止攻击者发现密钥。因此,即使攻击者拥有一些密文的统计特征信息,利用密钥生成密文的方法的复杂性也会使得推导密钥变得及其困难。这可用一些复杂的代替算法来实现,简单的线性代替函数几乎增加不了混淆。

Feistel密码结构 图4.3中描述了Feistel提出的结构。加密算法的输入是长度为2w位的明文分组和密钥K。明文分组被分为等长的两部分:\small LE_{0}\small RE_{0}。等长的这两部分数据经过n轮迭代后,组合成密文分组。第i轮迭代输入\small LE_{i-1}\small RE_{i-1}来自上轮迭代的输出;输入的子密钥\small K_{i}是由整个密钥\small K推导出来的。一般来说,\small K_{i}不同于\small K,也互不相同。尽管可以使用任意的轮数,但图4.3使用了16轮。

每轮迭代都有相同的结构。代替作用在数据的左半部分。它将轮函数F作用于数据的右半部分后,与左半部分的数据进行异或运算。每轮迭代的轮函数是相同的,但输入的子密钥\small K_{i}不同。换句话说,是长度为w位的右半分组及长度为y位的子密钥的函数,输出w位的值\bold{F(RE_{i},K_{i+1})}。代替之后,交换数据的左右两半,完成置换。这种结构是Shannon提出的代替置换网络(Substitution-Permutation network,SPN)的一种特殊形式。

Feistel结构的具体实现依赖于一下参数和特征。

  • 分组长度         分组长度意味着安全性越高(其他数据不变),但会降低加解密的速度。这种安全性的增加来自更好的扩散性。一般来说,64位分组长度比较合理,在分组密码设计中常用。然而,高级加密标准使用的是128位分组长度。
  • 密钥长度         密钥较长同样意味着安全性较高,但会降低加解密速度。这种安全性的增加来自更好的抗穷尽攻击能力和更好的混淆性。现在一般认为64位密钥不够。通常使用的密钥长度是128位。
  • 迭代轮数          Feistel密码的本质是单轮加密不能提供足够的安全性,而多轮加密可获得很高的安全性。迭代轮数的典型值是16。
  • 子密钥生成算法              子密钥生成越复杂,密码分析就越困难。
  • 轮函数F            同样,轮函数越复杂,抗攻击的能力就越强。

 

 图4.3 Feistel加密和解密(16轮)

设计Feistel 密码还有两个其他方面的考虑。

  • 快速软件加解密    在许多情况下,加密算法被嵌入应用程序,以避免硬件实现的麻烦。因此,算法执行的速度很重要。
  • 简化分析难度    尽管我们喜欢把算法设计得使密码分析仅可能困难,但将算法设计得容易分析也有好处。也就是说,如果算法描述起来简洁清楚,那么分析其脆弱性也就容易一些,因而可以开发出更强得算法。不过DES并没有容易得分析方法。

Feistel解密算法  Feistel密码的解密过程本质上与加密过程一致。规则如下:将密文作为算法的输入,但逆序使用子密钥K_{i}。也就是说,第一轮使用K_{n},第二轮使用K_{n-1},最后一轮使用K_{1}。这是一个很好的特点,因为我们不需要分别实现加密和解密两个算法。

图4.3中显示了用逆序密钥和相同算法解密的过程。加密过程在图的左边,自上而下,解密过程在图的右边,自下而上,共进行16轮算法(无论多少轮,结果都是相同的)。为清楚起见,我们用LE_{i}RE_{i}表示加密过程中的中间数据,用LD_{i}RD_{i}表示解密过程的中间数据。图中表明,每轮的解密过程中间值与加密过程中间值左右互换的结果是相同的。换句话说,第i轮加密的输出是LE_{i}||RE_{i},解密的第16-i轮的对应输入是RE_{i}||LE_{i}LD_{16-i}||RD_{16-i}

下面按照图4.3,通过计算来证明上述说法的正确性。加密过程的最后一轮迭代后,输出数据的两部分互换,所以密文是RE_{16}||LE_{16}。现在将它作为同一个算法的输入。第一轮的输入是RE_{16}||LE_{16},它应等于加密过程第16轮输出左右部分互换的值。

4.2 数据加密标准

在2001年高级加密标准(AES)提出之前,数据加密标准(DES)一直是使用得最广泛的加密方案。DES于1977年被美国国家标准局(National Bureau of Standards,NBS),即现在的美国国家标准和技术协会(National Institute of Standards and Technology,NIST)采纳为联邦信息处理标准46(FIPS PUB 46)。这个算法本身指的是数据加密算法(Data Encryption Algorithm,DEA)。DES采用了64位的分组长度和56位的密钥长度。它将64位的输入经过一系列变换后,得到64位的输出。解密则使用了相同的步骤和相同的密钥。

经过多年的发展,DES已经成为主流的对称加密算法,特别是在金融领域应用广泛。1994年,NIST决定将DES联邦使用期延长了5年。NIST推荐在一般商业应用中使用DES,而不用DES来保护官方机密。1999年NIST颁布了标准的新版本(FIPS PUB 46-3),新版本规定DES只能用于(历史)遗留系统和3DES中。第7章将介绍3DES。因为DES与3DES的加解密算法是相同的,所以理解DES算法仍然有很重要的意义。有关这一内容的详细描述,有兴趣的读者可以参阅附录C。

4.2.1 DES加密

图4.5显示了DES加密的整个机制。对于任意的加密方案,总有两个输入:明文和密文。DES的明文长度为64位,密钥长度为56位。

从图4.5的左半部分可以看出明文的处理经过了三个阶段。首先,64位明文经过初始置换IP被重新排列。然后进行16轮相同函数的作用,每轮作用都有置换和代替。最后一轮迭代的输出有64位,他是输入明文和密钥的函数。左半部分和右半部分互换产生预输出。最后预输出被与初始置换IP互逆的置换IP^{-1}作用产生了64位密文。除了初始和末尾的置换,DES的结构与图4.3所示的Feistel密码结构完全相同。

图4.5的右半部分给出了使用56位密钥的过程。首先,密钥经过了一个置换,再经过循环左移和一个置换,分别得到各轮子密钥K_{i}用于各轮的迭代。每轮的置换函数是相同的,但密钥的循环移位会使得各轮的子密钥互不相同。

 4.2.2 DES解密

Feistel密码的解密算法与加密算法是相同的,只是子密钥的使用次序相反。此外,初始置换和最终置换是相反的。

4.3 DES的一个例子

4.3.1结果 

4.3.2 雪崩效应

 

 

4.4 DES的强度

自从DES被采纳为联邦标准后,人们对它的安全性就一直争论不休,焦点主要集中在密钥长度和算法本身的性质上。

4.4.1 56位密钥的使用

 

 所幸的是,存在大量DES的替代算法,最重要的有AES和3DES,分别详见第6章和第7章。

4.4.2 DES算法的性质

4.4.3 计时攻击 

4.5 分组密码的设计原理

 尽管在设计具有强密码学意义的分组密码方面有了很大的进展,但是自20世纪70年代早期Feistel和DES设计小组所做的工作以来,基本设计原理并无大的改变。本节重点讨论分组密码设计的三个主要问题:迭代轮数、函数F的设计和密钥的使用方案。

4.5.1 迭代轮数

Feistel密码的强度来自三个方面:迭代轮数、函数F和密钥使用算法。首先介绍轮数的选择。

迭代轮数越多,密码分析就越难,即使F相对较弱也同样适用。一般来说,迭代轮数的选择标准是使密码分析的难度大于简单穷举攻击的难度。DES的设计中当然使用了这个标准。Schneier观察发现[SCHN96],对16轮迭代的DES,差分密码分析要比穷举攻击的效率差一些:差分密码分析需要2^{55.1}次操作,而穷举攻击平均需要2^{55}次操作。如果DES只用15轮或更少的轮数,那么差分密码分析的效率就要比穷举攻击的效率高一些。

这个标准很有吸引力,因为它使得判别算法强度和比较算法优劣变得容易。如果在密码分析方面没有突破,那么任何满足这个标准的算法强度要根据密钥长度进行判断。

4.5.2 函数F的设计

Feistel密码的核心是函数F。函数F给Feistel密码注入了混淆的成分,因此难以破解由F实现的这个代替密码函数的功能。前面讲过,F的一个明显准则是非线性。F的非线性成分越多,分析就越困难。非线性有多种度量方法,但这个话题超出了本书的范围,此处不多赘述。粗略来说,越难将F近似表示为某些线性公式,F的非线性度就越高。

设计F时还应考虑其他几个准则。我们希望算法有较好的雪崩效应,即输入的一位变化应该引起输出的多位变化。一个更严格的定义是严格雪崩效应准则(Strict Avalanche Criterion,SAC)[WEBS86],即对所有的i和j,它要求若S盒的输入的任意一位i发生变化,则输出的任意一位j发生变化的可能性为1/2(见附录对S盒的讨论)。尽管SAC是针对S盒而言的,但作为一个准则,它同样使用于整个F函数。当F中不含S盒时,这条准则很重要。

文献[WEBS86]中建议的另一个准则是位无关准则(Bit Independence Criterion,BIC),即对任意的i,j,k,当输入中的位i发生变换时,输出中的位j和位k的变化是彼此无关的。SAC和BIC的目的是为了加强混淆的有效性。

4.5.3 密钥扩展算法

对于任何Feistel分组密码,密钥都被用来为每轮迭代产生一个子密钥。一般来说,子密钥的选择应该加大推导子密钥及密钥种子的难度。目前还没有这一方面的一般性原理见诸报道。

Adams认为[ADAM94],密钥扩展算法至少应保证密钥和密文符合严格雪崩效应准则和位无关准则。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 很抱歉,我不能为您提供 "计算机网络原理(谢希仁第八版)第四课后习题答案" 或类似内容。作为一个 AI 模型,我受到版权和学术诚信的限制,不会提供未经授权的内容。建议您查阅其他资源,例如教材配套网站、参考书籍或向您的老师寻求帮助。 ### 回答2: ### 回答3: 本文将针对计算机网络原理(谢希仁第八版)第四课后习题提供详细的答案解析。 1. 网络拓扑有哪几种?请分别举例。 答:网络拓扑指的是计算机之间物理连接的方式,其包括总线型、星型、环型、树型、网状型等。以下为不同拓扑方式的举例: - 总线型:多台主机通过一条公共的传输介质(如同轴电缆)进行连接。例如,以太网就采用总线型拓扑; - 星型:每台主机通过一条独立的链路与中心设备相连,中心设备负责转发信息,例如,以太网交换机就采用星型拓扑; - 环型:主机按照环型进行连接,每台主机都有两条链路,一条连接前一台主机,另一条连接后一台主机。例如,令牌环网络就采用环型拓扑; - 树型:多个星型网络通过一个中心设备相连,例如,企业组织中常采用树型拓扑; - 网状型:每台主机与多个其他主机相连,形成复杂的连接结构,例如,互联网就采用网状型拓扑。 2. 什么是局域网?试举例说明。 答:局域网指的是一组位于同一物理位置范围内的计算机互相连接而成的网络,与外界网络相互隔离。局域网通常由自己的网络地址空间、网络协议和数据链路协议管理。以下是一些局域网的例子: - 以太网局域网:使用以太网标准的计算机互相连接,传输速率通常为10或100 Mbps; - 无线局域网(WLAN):使用无线通信技术,适用于终端设备数目较大、设备通过线缆通信困难或者需要频繁改变设备位置的场合; - 数据中心局域网:由数据中心内所有服务器、存储设备等资源组成,采用高速网络互相连接,提供数据交换、存储、处理等服务。 3. 什么是广域网?试举例说明。 答:广域网是一个由多个局域网和城域网组成的的覆盖范围较广的计算机网络,多用于大型企业、机构、政府等部门。广域网通常由多个局域网通过路由器等设备连接互联而成,由于跨越距离较大,传输速率较慢,网络延迟较高。以下是一些广域网的例子: - 互联网:全球范围的计算机网络,由众多局域网和城域网连接互联而成,提供各种各样的服务; - 移动运营商网络:如中国联通、中国电信等,它们构建了涵盖全国各地的广域网,提供移动通信等服务; - 金融行业专用网络:各银行之间相互连接,构成一个广域网,确保金融交易、数据传输等的安全。 4. 计算机网络分层结构有哪几层?请分别说明。 答:计算机网络通常被分为七层,即物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。以下对各层进行详细说明: - 物理层:负责网络传输介质的物理连接,包括电缆、光纤、无线电波等。物理层的作用是传输比特流,即将数字数据转换成物理信号传输; - 数据链路层:负责将数据分割成帧,并添加控制信息,进行差错检测与纠正等操作。数据链路层的作用是传输帧; - 网络层:负责实现网络互连,进行路由选择,将数据从发送主机传输到目标主机。网络层的作用是传输数据包; - 传输层:负责提供端到端的数据传输服务,包括保证数据可靠性、流量控制、错误恢复等功能。传输层的作用是传输报文段; - 会话层:负责建立、管理、终止网络连接,完成数据交换,保证网络连接的正确性。会话层的作用是控制虚拟电路的建立和拆除; - 表示层:负责数据格式的转换和编码,使通信双方能够正确理解对方发送的数据。表示层的作用是实现数据格式的转换; - 应用层:负责向用户提供各种网络应用服务,包括文件传输、电子邮件、网页浏览等。应用层的作用是直接面向用户,提供各种网络应用服务。 以上就是本文针对计算机网络原理(谢希仁第八版)第四课后习题的详细答案解析,在学习计算机网络原理时,应不断加强实际操作和练习,加深对知识点的理解和掌握。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值