960 likes | 1.13k Vues
第 2 章 对称加密算法. 信息的保密问题是信息安全科学中最早提出的问题,也是最重要的问题。本章主要研究保密问题的解决方案:对称加密算法. 本章内容. 第 1 节 历史与分类 第 2 节 数据加密标准 -DES 第 3 节 先进加密标准 -AES 第 4 节 密码运算模式 第 5 节 对称密码算法的应用 第 6 节 对称加密算法的优缺点 . 小结.
E N D
第2章 对称加密算法 信息的保密问题是信息安全科学中最早提出的问题,也是最重要的问题。本章主要研究保密问题的解决方案:对称加密算法
本章内容 第1节 历史与分类 第2节 数据加密标准-DES 第3节 先进加密标准-AES 第4节 密码运算模式 第5节 对称密码算法的应用 第6节 对称加密算法的优缺点
小结 本章主要讲述了保证信息机密性的主要方法-对称加密方法,其中讲述了两种分组密码算法DES、AES;讲述了当消息的长度不是规定的输入长度时如何进行加密-加密模式;讲述了对称加密算法的应用以及对称加密算法的优缺点。
练习题 1. Alice、Bob、Carol三个人在一起吃饭。吃完饭后,Alice要结账时,服务员告诉她:已经有人结账了。这结账的人,可能是他们当中的一个,也可能是NSA。他们都尊重彼此匿名付账的权利,但都想知道到底是他们其中的一个人结的账,还是NSA结的账。他们想出了一个方法:
假设他们围成一圈,每个人都和他右边的人抛一枚硬币,只有他们两个能看到结果。然后每个人都大声说他看到的两次抛币结果是否相同,如果有一个人结账,她就说假话,如果没有结帐,就说真话。如果说看到结果不同的人数为奇数,表明它们之间有一个人结账,但除结账者以外,别人不知道是谁付的账,如果为偶数,表明NSA为他们结账了。试用数学方法证明这对任意人数的吃饭者都成立。假设他们围成一圈,每个人都和他右边的人抛一枚硬币,只有他们两个能看到结果。然后每个人都大声说他看到的两次抛币结果是否相同,如果有一个人结账,她就说假话,如果没有结帐,就说真话。如果说看到结果不同的人数为奇数,表明它们之间有一个人结账,但除结账者以外,别人不知道是谁付的账,如果为偶数,表明NSA为他们结账了。试用数学方法证明这对任意人数的吃饭者都成立。
第1节 密码系统的历史与分类 In Preamble,我们介绍过信息安全的历史(主要是密码学的历史)。现代密码学产生以前的历史都是对称密码学的历史。现代密码学诞生以后密码学的历史则较为复杂。 对于密码系统基本上有三种分类方法: (1) 根据将明文变换成密文的方法分为:替换密码:将明文的每个单位替换成密文的一个单位;换位密码:将明文内容的顺序进行重新排列。
LAUNCHATTACKONOCTOMBERTWE LVEOF 1 1 LATEAAOLUCMENKBECOOBOHNRAOT1TCW1
密码系统的分类 (2)根据使用的密钥数量可以将密码系统分为对称密码学系统和公开密钥密码系统:如果系统中消息的发送者与接受者使用相同的密钥,则称为对称密码系统,如果使用不同的密钥就称为公开密钥密码系统。
密码系统的分类 根据对明文进行处理的方式可以分为两种:分组密码和序列密码。 分组密码 就是将比较长的明文信息,分成较小的信息组进行加密。DES和AES都是分组密码。DES和AES代表分组密码的最高水平,所以主要讲述DES和AES。 序列密码,对于较长的信息不是进行分组加密,而是应用一定的机制,对于到来得信息像水流一样进行加密,所以又称流密码。 BACK
第2节 数据加密标准DES DES (Data Encryption Standard )算法是 1977年由美国国家标准局颁布的标准,用于商业和非机密的政府应用领域的加密。是在IBM的Lucifer算法基础上设计的,后被国家标准局采用。是分组密码算法,一次加密64比特的明文分组,输出是64比特的密文分组。目前我国的银行系统、商业系统、政府部门大部分采用的都是DES加密。这是我国信息安全领域的一块心病,是信息安全面临的一个挑战。
分组密码算法示例 分组密码算法是将一组明文转换成一组密文的算法。这里有一个密钥长度的选择问题,密钥长度太短,显然不安全。类似地分组的长度也不能太小。太小时,一旦有明文/密文对就很容易解密。分组长度太长,可能影响加密算法的效率,而密码学界公认64比特是比较合理的长度,因为当分组长度大于64比特时,不容易获得足够的用于分析的明文/密文对,即使获得也没有足够的空间存储这样的明文/密文对,或者没有足够的时间进行搜索。
分组密码算法示例 对称密钥算法一般用一个长度合理的密钥生成一个一一对应的映射,这种映射对于不知道密钥的人来说,这种映射关系看起来是随机的。要求输入的每个比特必须对输出的每个比特都有影响。 要加密64比特的分组,最直接的方法是将264种分组的每个分组变换到特定的264种密文分组,要求这种变换必须是一一对应的,否则无法解密。
分组密码算法示例 虽然攻击者没有空间存储这种变换,难以通过Brute-Force进行攻击。使用者也有空间存储问题。因而必须想另外的方法。对于每一个分组可以设想两种变换:替换和置换。 替换:k比特的分组有2k 种可能输入,对于每种输入都构造一个一一对应的变换-替换。这种替换对于264可能替换,有存储问题,但当k比较小时则是可行的。
分组密码算法示例 置换:对于k 比特的输入,指定输出时每个比特必须出现在那个位置。比如输入的第一比特在输出中变为31比特等。一种构造对称加密算法的方法就是把能够处理的小块,每小块设计一个一一对应映射。然后将替换后的所有小块放到一起作置换,通过置换可以将各个比特移动到不同的位置,随后不断重复这一过程,就可以把输入的每个比特混合到一起。
分组密码算法示例 上述过程如果只进行一轮的话,输入的每个比特只能影响输出的8个比特。为了保证安全性,必须保证进行一定的轮数。但也不是轮数越多越安全。与洗牌一样,如果洗牌已经保证扑克牌有足够的随机性时,更多的洗牌次数只是浪费时间。设计算法的一部分工作就是要确定最佳轮数。少不能保证安全,多了就会影响算法的效率。
DESAlgorithm DES算法很容易用硬件实现,用软件实现相对困难。现在计算机技术的发展已经使得用软件实现起来也易如反掌。DES中有四种基本运算:替换、置换、异或与Mangler函数运算。 替换是对单个元素的运算,将一个元素换成另一个元素。 置换是对一个集合的运算。集合{3, 1, 4, 5, 2}就是集合{1, 2, 3, 4, 5}的一个置换。
DES算法概述 DES算法的分组长度是64比特,密钥长度也是64比特,计算机技术的发展使得64比特的密钥已经有点短了,按照摩尔定律,计算机的性价比每18个月翻一番。我们假设每两年翻一番,那么密钥的长度每两年需要增加1比特,假设64比特的密钥在1995年是安全的,那么128比特的密钥在2123年之前都是安全的。
生成子密钥的初始置换 首先对密钥的56个有效比特作置换,得到56比特的输出,这个输出被分成两部分,每个部分28比特,记为C0、D0其置换如下:
子密钥 Ki 的生成方法 前面已经介绍了如何生成C0、D0。其他子密钥都是以C0、D0 为基础循环生成的,每一轮由Ci-1生成Ci, Di-1生成Di,对Ci和Di分别进行一次置换,然后将经过置换后的Ci和Di 进行合并,就得到第i 轮的子密钥Ki 。
如何循环左移 生成子密钥的循环左移的左位移数目,在不同轮中是不同的:第1、2、9、16轮只进行1比特的循环左移,而其他各轮则循环左移两个比特,从左边移出的比特又从最右边移入。这里的置换可能对安全性有影响。
获得Ki左半部分的置换 获得Ki右半部分的置换
48比特的子密钥 从上述置换可以看出,置换的结果由56比特的密钥变成了48比特的子密钥,严格来说并不是置换,而是对某个子集的置换,在上述置换中密钥的左半部分,第9、18、22、25比特被丢弃。右半部分35、38、43、54比特被丢弃。丢弃之后再作置换。生成了48比特的子密钥。
1 Round of DES Algorithm DES的一轮运算包括左右两半部分对换、异或运算、mangler函数运算、两部分合并等过程,其中最巧妙的是mangler函数的构造,这是影响安全性的主要因素。
Mangler Function Mangler函数的输入为右边的32比特的数据、48比特的子密钥,输出为32比特的数据。所进行的运算包括数据扩展、异或运算和S盒替换。
第1个S盒的4比特输出(1-4比特) 根据S-Box的第1与第6比特选定一行,根据第2到第6比特的数据选定一列,这样给定S-box的输入,就能查表确定唯一的的输出
其他S盒的输出 其他S盒的输入与输出的关系与第一个S盒的输入输出关系大同小异,方法是一样的,也是用查表的方法进行替换,不同的是表的内容有所变化。这样我们就对DES算法的全部细节有了比较彻底的了解,现在我们再回头看一下在DES中还有没有不清楚的地方。
DES的现状 In 1997, RSA Security sponsored a series of contests, offering a $10,000 prize to the first team that broke a message encrypted with DES for the contest. That contest was won by the DESCHALL Project, led by Rocke Verser, Matt Curtin, and Justin Dolske, using idle cycles of thousands of computers across the Internet. Their motivation was to show that DES was breakable in practice as well as in theory.Now all the DES used in practice is in triple-DES form. BACK
第3节AES Algorith(1/9) 因为DES算法的密钥太短,3DES速度太慢,IDEA算法有专利保护,且速度也不快。所以NIST希望建立一个新的加密算法标准,新的算法应该高效、灵活且不难应用。NIST与1997年1月2日宣布征集新的用于保护敏感的非机密信息的加密标准。算法可以来自任何地方,但必须达到规定的一系列指标,包括提供完整的设计原理文档。
AES(2/9) 在征集公告发布后,世界各地的密码学家与密码研究机构提交了许多密码算法,NIST经过初步的挑选从提交的算法中选出15种算法,供全世界的密码学研究人员进行攻击、分析、评价。采用淘汰赛的方法,经过第2轮的淘汰,选出5个算法,作为AES Candidate,供世界各地的密码研究人员进一步研究、分析、攻击、评价。前后历时近5年时间,2001年11月26日NIS T 最后选择了两个比利时的博士提交的Rijin-dael算法做为AES。
AES(3/9) Rijindael算法设计的分组长度与密钥长度可以为128、160、192、224或256Bits。但AES强制分组大小为128Bits,密钥长度可以为128、192或256bits。分组大小用Nb表示,密钥长度用Nk表示。它们都必须是32bits的倍数。轮数用Nr表示。Nr需要由Nb 、 Nk计算得到。基本结构如下:
密钥扩展和轮运算的元操作 AES有四种原操作分别是: (1) 异或运算 (2) 字节对字节的替换,称为S盒运算。 (3) 通过循环移动行或列,对字节进行重新排列。 (4) MixColumn操作。将一个4字节的列替换为另一个4字节的列。
AES算法(4/9) AES算法以32比特为一个基本单元,如果分组包含4个32比特,就说Nb =4,AES的分组大小可以为128、192或256。特别是密钥长度和分组长度可以不同。AES强制分组大小为128比特,密钥长度可以为128、192或256比特,分别记作AES-128、AES-192、AES-256,相应的分组长度为4、6或8。密钥长度 Nk 的定义与分组长度相同。
AES算法 循环的轮数用公式Nr=6+max (Nb, Nk). 大的分组需要大的计算轮数。 AES算法用一个矩阵保存运算状态,该矩阵有4行,Nb列,矩阵的每个元素代表一个字节。将输入的4 Nb字节逐个填到状态矩阵中,该状态经过Nr 轮运算,到达最终状态,逐列读出该矩阵的数据就得到输出结果。
AES算法 在第一轮之前,两轮之间与Nr轮之后,都把经过扩展的密钥的下一个4 Nb字节的密钥拿来与状态表进行异或运算。第一轮到Nr -1轮执行相同的操作,第Nr轮则跳过其中的部分操作。