流密码和分组密码
按照密钥的特征不同,密码体制分为对称密码体制和非对称密码体制。按照对明文消息加密方式的不同,密码体制分为流密码(Stream Cipher )和分组密码(Block Cipher )[1]。非对称密码体制均为分组密码[2]。
1 流密码
流密码也称为序列密码。在流密码中,明文以序列的方式表示,称为明文流。在对明文流进行加密时,先由种子密钥生成一个密钥流。然后,利用加密算法把明文流和密钥流加密,产生密文流。流密码每次只对明文中的单个bit 位进行加密变换,加密过程所需的密钥流由种子密钥通过密钥流生成器产生。流密码的主要原理是通过随机数发生器产生性能优良的伪随机序列(密钥流),使用该序列加密明文流(逐bit 位加密),得到密文流。由于每一个明文都对应一个随机的加密密钥,因此流密码在理论上属于无条件安全的密码体制(一次一密密码)
[3]。流密码的基本加密过程,如图1所示。
图1 流密码的加密过程
设明文流为:12i m m m m = ,密钥流由密钥流发生器f 产生:(,)i i z f k σ=,这里i σ是加密器中的存储器在时刻i 的状态,f 是由种子密钥k 和i σ产生的函数。设最终得到的密钥流为:
12i k k k k = ,加密结果为:121212()()()i i k k k i c c c c E m E m E m == ,解密结果为:
121212()()()i k k k i i m D c D c D c m m m == 。用流密码进行保密通信的模型,如图2所示:
图2 流密码保密通信图
2 分组密码
分组密码也称为块密码。当加密一条长消息(明文)时,首先,将明文编码表示为二进制序列;然后,将其分成若干个固定长度的组(最后一组长度不够时还得进行填充,如补0);
最后,再对逐个分组依次进行加密操作。分组长短决定着密码的强度。从算法的安全性考虑,分组长度不能太短,应该保证加密算法能够应付密码分析;从实用性考虑,分组长度又不能太长,要便于操作和运算。近年来,随着计算机计算能力的不断提高,分组长度为64位的分组密码的安全性越来越不能满足实际需要,为提高加密的安全性,很多的分组密码开始选择128位作为算法的分组长度[4]。在相同密钥下,分组密码对长为t 的输人明文组所实施的变换是等同的,所以只须研究对任一组明文数字的变换规则。这种密码实质上是字长为t 的数字序列的代换密码[3]。
分组密码是将明文经编码表示后的二进制序列12i m m m 划分成若干固定长度t 为的组12t m m m m = ,各组分别在密钥12r k k k k = 的控制下转换成长度为l 的二进制密文分组
12l c c c c = 。若t l >,则称为带数据压缩的分组密码,易增加密文解密的难度;若t l <,则称
为带数据扩展的分组密码,必然要增加密文存储和传输的代价。通常的分组密码算法大多取
t l =[2]。其本质是一个从明文空间(t 的比特串的集合)M 到密文空间(l 长的比特串的集合)C 的映射,该映射由密钥和加密算法确定。采用分组密码,对一个明文分组进行加解密的过程,如图3所示。其中,明文分组长度为t ,密文分组长度为l ,密钥长度为r 。这些参数是分组密码的重要参数,对算法的安全性能有重要的影响(密钥空间有2r 个元素)。在不同的分组密码算法中,它们的取值往往不同。
图3 分组密码保密通信图
3 二者联系
(1)流密码:令M 代表明文。流密码是把M 拆分成相连的比特12,,,,i M M M ,并用密钥流12i K K K K = 中的第i 个成分i K 对明文流中的第i 个成分i M 进行加密,即11()()K K E M E M = 22()()i K K i E M E M 。如果在T (固定值)个比特后密钥序列重复,则流密码是周期序列密码。否则,就是非周期序列密码。
(2)分组密码:分组密码是把M 拆分成相连的分组12,,,,i M M M ,并用同一个密钥K 对每个分组i M 进行加密,即12()()()()K K K K i E M E M E M E M =。分组的长度视具体方案而定。
(3)二者的联系:对于周期为T 的流密码,令12T K K K K = ,也可把这类密码看作是分组密码,这
里每个i M 都是具有T 个比特的一个分组。当T 较小时,这类密码更像是分组密码。随着T 的增加,这类密码变得更像流密码。
4 二者区别
(1)分组密码的特征是每次处理一个固定长度的数据组(如DES 的分组长度64bit )。一个长度小于密码分组尺寸的明文,只有当它被填补足够的位数能构成标准尺寸时,才能进行加密。在分组密码中,明文被分为多个比特的分组,逐组进行加密。对于某一消息M ',分组密码体制一般首先将M '进行填充得到消息M ,使其长度为固定分组长度L 的整数倍,密码算法把M 划分为一系列长度为L 的分组,再对分组进行加密。在流密码中,明文M 被分成连续的比特12i M M M M = ,用密钥流12i K K K K = 的i K 进行加密。其中,密钥流K 是密钥流生成器得到的。
(2)对于流密码,在一个固定密钥作用下,对相同的明文进行加密,并不一定得到相同的密文。因为明文的重复部分是用密钥流的不同部分加密的。对于分组密码,在一个固定密钥作用下,对相同的明文进行加密,一定得到相同的密文。
参考文献
[1] 卢铁城. 信息加密技术. 四川科学技术出版社,1989.10.
[2] 张福泰 等. 密码学教程 . 武汉大学出版社,2006.9.
[3] 杨波. 现代密码学(第2版). 清华大学出版社,2007.4.
[4] 范九伦 等. 密码学基础. 西安电子科技大学出版社,2008.8.
分组密码体制简介 分组密码体制也具有简捷、快速的特点,并且容易标准化,使其成为软硬件加密的主流算法。目前主流的分组密码有:DES、IDEA…… . 1.分组密码的特点 与序列密码不同,分组密码是将明文序列划分成等长的分组(Block),对每一组用同一加密算法和同一密钥进行加密。 分组密码有其自身的优点,首先分组密码容易被标准化,因为在今天的数据网络通信中,信息通常是被成块的处理和传输的。其次,使用分组赌东道密码容易实现同步,因为一个密码组的传输错误不会影响到其它的分组,丢失一个密文组不会对随后组的解密产生影响。这就是说,传输错误不会扩散。而这些方面恰恰是序列密码的最大缺点。 分组密码与序列密码相比的一个缺点就是算法庞大一些,需要更多的计算资源。分组密码的另一大缺点是其安全性很难被证明。尽管“可证明安全性”的研究发展很快,但目前的分组密码大多是“看来安全的”,还没有一个分组密码被证明是真正安全的,至多证明了局部安全性。这其中的原因是:因商业化而要求分组密码算法的细节全部暴露,因此对分组密码的攻击类型很多,安全性概念也就很多,有人为了统一这些安全性概念,甚至引入了伪随机性和超伪随机性,它们是用概率图灵机来描述的,在实际设计和分析中很难应用。 2.分组密码的设计准则 一、安全性准则 对以下的安全性的描述总是基于以下的假设:加密体制(包括算法的细节)是公开的;安全性完全依赖于密钥;信道是不安全的,即攻击者可以任意的截取密文;攻击者有时也可以截取一些“废弃”的明文。 (1)分组长度和密钥长度:当明文分组长度为n比特时,至多需要2n个明文-密文对就可以彻底破解密钥。同理当密钥长度为n比特时,对一个截获的密文,至多需要试验2n个密钥就可以破解了密文。因此从安全性角度来考虑,明文分组长度的密钥长度因尽可能的大。 (2)混淆性:所设计的密码应使得明文、密文、密钥之间的依赖关系相当复杂,以至于这种依赖关系对密码分析者来说是无法利用的。密码分析者利用这种依赖关系的方法非常多,比如差分密码分析、线性密码分析等,因此混淆性也是一个非常重要的原则。 (3)扩散性:所设计的密码应使得密钥的每一位数字影响密文的许多位数字,以防止对密钥的逐段破解;明文的每一位数字也影响密文的许多位数字,以便最充分的隐藏明文的统计特征。对扩散性可以有许多种理解,比如“粘连性”指的是明文、密文、密钥每一位都互相依赖;“不连续性”或“雪崩性”指的是当改变明文的任何一个比特时,对应密文改变的比特的个数应是一个随机变量,其平均值是分组长度的一半。 (4)非线性度(抗线性密码分析强度):这一项属于混淆性。有一个基本数学原理:如果明文和密文的关系是n维线性关系,且系数是密钥,则n个明文-密文对(而不是2n个)就可以破解密钥;如果明文与密文的关系是n维r次函数关系,且系数是密钥,则n r个明文-密文对就可以破解密钥;如果虽然次数r较大,但明文与密文的关系“非常逼近”一个n
国内外分组密码理论与技术的研究现状及发展趋势 1 引言 密码(学)技术是信息安全技术的核心,主要由密码编码技术 和密码分析技术两个分支组成。密码编码技术的主要任务是寻求产 生安全性高的有效密码算法和协议,以满足对数据和信息进行加密 或认证的要求。密码分析技术的主要任务是破译密码或伪造认证信 息,实现窃取机密信息或进行诈骗破坏活动。这两个分支既相互对 立又相互依存,正是由于这种对立统一的关系,才推动了密码学自 身的发展[6]。目前人们将密码(学)理论与技术分成了两大类, 一类是基于数学的密码理论与技术,包括分组密码、序列密码、公 钥密码、认证码、数字签名、Hash函数、身份识别、密钥管理、 PKI技术、VPN技术等等,另一类是非数学的密码理论与技术,包括 信息隐藏、量子密码、基于生物特征的识别理论与技术等。 在密码(学)技术中,数据加密技术是核心。根据数据加密所 使用的密钥特点可将数据加密技术分成两种体制,一种是基于单密 钥的对称加密体制(传统加密体制),包括分组密码与序列密码, 另一类是基于双密钥的公钥加密体制。本文主要探讨和分析分组密 码研究的现状及其发展趋势。 2 国内外分组密码研究的现状 2.1 国内外主要的分组密码 美国早在1977年就制定了本国的数据加密标准,即DES。随着 DES的出现,人们对分组密码展开了深入的研究和讨论,已有大量 的分组密码[1,6],如DES的各种变形、IDEA算法、SAFER系列算 法、RC系列算法、Skipjack算法、FEAL系列算法、REDOC系列算 法、CAST系列算法以及Khufu,Khafre,MMB,3- WAY,TEA,MacGuffin,SHARK,BEAR,LION,CA.1.1,CRAB,Blowfish,GOST,SQUA 算法和AES15种候选算法(第一轮),另有NESSIE17种候选算法 (第一轮)等。 2.2 分组密码的分析 在分组密码设计技术不断发展的同时,分组密码分析技术也得 到了空前的发展。有很多分组密码分析技术被开发出来,如强力攻 击(穷尽密钥搜索攻击、字典攻击、查表攻击、时间存储权衡攻 击)、差分密码分析、差分密码分析的推广(截段差分密码分析、 高阶差分密码分析、不可能差分密码分析)、线性密码分析、线性 密码分析的推广(多重线性密码分析、非线性密码分析、划分密码 分析)、差分线性密码分析、插值攻击、密钥相关攻击、能量分 析、错误攻击、定时攻击等等。 其中,穷尽密钥搜索攻击是一种与计算技术密不可分的补素密码分 析技术,也是最常用的一种密码分析技术。通过这种技术,可以破 译DES的算法。在DES最初公布的时候,人们就认为这种算法的密钥 太短(仅为56bit),抵抗不住穷尽密钥搜索的攻击。因此,1997 年1月28日,美国colorado的程序员Verser从1997年3月13日起, 在Internet上数万名志愿者的协同下,用96天的时间,于1997年6
.AAA密码体制分类及典型算法描述 换位与代替密码体制 序列与分组密码体制 对称与非对称密钥密码体制 BBB试对代替密码和换位密码进行安全性分析。 1.单表代替的优缺点 优点:明文字符的形态一般将面目全非 缺点: (A)明文的位置不变; (B)明文字符相同,则密文字符也相同; 从而导致: (I)若明文字符e被加密成密文字符a,则明文中e的出现次数就是密文中字符a的出现次数; (II)明文的跟随关系反映在密文之中. 因此,明文字符的统计规律就完全暴露在密文字符的统计规律之中.形态变但位置不变 2.多表代替的优缺点 优点:只要 (1)多表设计合理,即每行中元互不相同,每列中元互不相同.(这样的表称为拉丁方表) (2)密钥序列是随机序列,即具有等概性和独立性。 这个多表代替就是完全保密的。 等概性:各位置的字符取可能字符的概率相同; 独立性:在其它所有字符都知道时,也判断不出未知的字符取哪个的概率更大。 2.多表代替的优缺点 密钥序列是随机序列意味着: (1)密钥序列不能周期重复; (2)密钥序列必须与明文序列等长; (3)这些序列必须在通信前分配完毕; (4)大量通信时不实用; (5)分配密钥和存储密钥时安全隐患大。 缺点:周期较短时可以实现唯密文攻击。 换位密码的优缺点 优点:明文字符的位置发生变化; 缺点:(A)明文字符的形态不变; 从而导致: (I)密文字符e的出现频次也是明文字符e的出现次数; 有时直接可破!(如密文字母全相同) 换位密码优缺点总结:位置变但形态不变. 代替密码优缺点总结:形态变但位置不变. CCC…..ADFGX密码解密过程分析。 1918年,第一次世界大战已经接近尾声。为了挽回日趋不利的局面,德军集中了500万人的兵力,向协约国发动了猛烈的连续进攻。 采用一种新密码:ADFGX密码体制。 该密码用手工加解密费时不多,符合战地密码的基本要求。 进行了两次加密,有两个密钥:一个是代替密钥(棋盘密钥)一个是换位密钥
第3章 分组密码 习题及参考答案 1. 设DES 算法中,明文M 和密钥K 分别为: M =0011 1000 1100 0100 1011 1000 0100 0011 1101 0101 0010 0011 1001 1110 0101 1110 K =1010 1001 0011 0101 1010 1100 1001 1011 1001 1101 0011 1110 1101 0101 1100 0011 求L 1和R 2。 解: 初始变换IP : 1001 1010 1101 0101 1101 0010 0011 1000 0101 0110 0010 0101 1100 0101 1110 1000 则,0L =1001 1010 1101 0101 1101 0010 0011 1000 0R =0101 0110 0010 0101 1100 0101 1110 1000 K 去校验位得: 0C =1101 0111 1100 0000 0010 0111 0111 0D =1010 1000 0111 0110 0011 0101 0010 循环左移一位:1C =1010 1111 1000 0000 0100 1110 1111 1D =0101 0000 1110 1100 0110 1010 0101 经过置换选择得到:1K =0000 1111 0110 1000 1101 1000 1001 1010 1000 0111 0011 0001 同样可以得到:2K =0101 0101 0110 0001 1101 1101 1011 0101 0101 0000 0110 1110 1L =0R =0101 0110 0010 0101 1100 0101 1110 1000
实验二分组密码算法DES 一、实验目的 通过用DES算法对实际的数据进行加密和解密来深刻了解DES的运行原理。 二、实验原理 分组密码是一种对称密码体制,其特点是在明文加密和密文解密的过程中,信息都是按照固定长度分组后进行处理的。在分组密码的发展历史中,曾出现了许多优秀的算法,包括DES,IDEA,AES,Safer++等等。下面以DES算法为例介绍分组密码算法的实现机制。 DES算法将明文分成64位大小的众多数据块,即分组长度为64位。同时用56位密钥对64位明文信息加密,最终形成64位的密文。如果明文长度不足64位,即将其扩展为64位(如补零等方法)。具体加密过程首先是将输入的数据进行初始置换(IP),即将明文M中数据的排列顺序按一定的规则重新排列,生成新的数据序列,以打乱原来的次序。然后将变换后的数据平分成左右两部分,左边记为L0,右边记为R0,然后对R0实行在子密钥(由加密密钥产生)控制下的变换f,结果记为f(R0,K1),再与L0做逐位异或运算,其结果记为R1,R0则作为下一轮的L1。如此循环16轮,最后得到L16、R16,再对L16、R16实行逆初始置换IP-1,即可得到加密数据。解密过程与此类似,不同之处仅在于子密钥的使用顺序正好相反。DES全部16轮的加密过程如图1-1所示。 DES的加密算法包括3个基本函数: 1.初始置换IP 它的作用是把输入的64位数据块的排列顺序打乱,每位数据按照下面的置换规则重新排列,即将第58位换到第一位,第50位换打第2位,…,依次类推。置换后的64位输出分为L0、R0(左、右)两部分,每部分分别为32位。 58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8 57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 1
第八节 分组密码的工作模式和一般设计原理 1
分组密码的工作模式 为什么要设计工作模式? 分组密码的工作模式是:根据不同的数据格式和安全性要求, 以一个具体的分组密码算法为基础构造一个分组密码系统的方法。分组密码的工作模式应当力求简单, 有效和易于实现。 2
1980年12月, FIPS 81标准化了为DES开发 的五种工作模式。这些工作模式适合任何分组密码。现在, AES的工作模式正在研发, 这些AES 的工作模式可能会包含以前DES的工作模式, 还 有可能包括新的工作模式。我们仅以DES为例介 绍分组密码主要的五种工作模式。 3
4直接使用DES 算法对64bit 的数据进行加密的工作模式就是ECB 模式。在这种工作模式下, 加密变换和解密变换分别为: DES ()i i k c m = i =1,2,… (4.12) 1DES ()i i k m c ?= i =1,2,… (4.13) 这里k 是DES 的种子密钥, i m 和i c 分别是第i 组明文和密文。 电码本(ECB)模式
在给定密钥下, i m有64 2种可能的取值, i c也有64 2种可能的取值, 各(i m, i c)彼此独立, 构成一个巨大的单表代替密码, 因而称其为电码本模式。 5
+=,则相应的密文ECB模式的缺点是:如果n i i m m +=,即在给定密钥k下,同一明文组总是产生同n i i c c 一密文组,这会暴露明文组的数据格式。某些明文的数据格式会使得明文组有大量的重复或较长的零串,一些重要的数据常常会在同一位置出现,特别是格式化的报头、作业号、发报时间、地点等特征都将被泄露到密文之中,使攻击者可以利用这些特征。 6
国家标准《信息安全技术分组密码算法的工作模式》 (征求意见稿)编制说明 一、工作简况 1、任务来源 本标准由国家标准化管理委员会下达的国家标准编制计划,项目名称为《信息安全技术分组密码算法的工作模式》(国标计划号:),项目类型为标准修订,项目所属工作组为WG3工作组,项目牵头单位为成都卫士通信息产业股份有限公司。 2、主要起草单位和工作组成员 该标准由成都卫士通信息产业股份有限公司主要负责起草,中国科学院软件研究所、中国科学院数据与通信保护研究教育中心、国家密码管理局商用密码检测中心、格尔软件股份有限公司、西安西电捷通无线网络通信股份有限公司、上海信息安全工程技术研究中心、……共同参与了该标准的起草工作。主要起草人有:张立廷,眭晗,涂彬彬,王鹏,毛颖颖,郑强,张国强,徐明翼,罗俊。 3、主要工作过程 2019年4月之前,编制团队分析GB/T 17964-2008标准文本及理论研究、行业应用情况,认为有必要修订该标准,原因如下: 1)学术界持续分析研究工作模式,产生了新的成果;产业界广泛应用工作模式,积攒了新的应用经验;有必要收集归纳。 2)现有标准文本未列举国家标准分组密码算法对应的测试向量,数据加密厂商、相关管理部门缺乏具体的参考数据。 3)产业界对现有标准之外的部分工作模式存在着强烈的应用需求,如磁盘加密模式XTS等,有必要评估引进的可行性。 4)国家标准化推进过程中,产生了与本标准相关的一些标准,如GB/T 36624-2018 《信息技术安全技术可鉴别的加密机制》,有必要在修订版本中做出协调性说明。 2019年4月,全国信息安全标准化技术委员会(以下简称“信安标委”)2019年第一次工作组会议周,在WG3工作组会议上,编制团队向专家和工作组成员单位汇报了《信息安全技术分组密码算法的工作模式》(投票草案稿)修订情况,
上机一:流密码与分组密码编程 【上机目的】 熟悉流密码和分组密码加密/解密算法的基本原理,通过编程/开源代码分析分别了解一种标准流密码算法和一种标准分组密码算法的运行原理。 【上机环境】 1、硬件PC机一台。 2、系统配置:操作系统windows XP以上。 3、编程语言:C/C++/C#/Java/Python 【上机容及要求】 1、分别利用RC4算法(或其它任一种标准流密码算法)和DES算法(或AES算法等其它任 一种标准分组密码算法)对数据进行加解密操作 2、代码分析及注释 3、代码调试 4、代码修改及测试(选做) 备注:可借鉴网上相关算法的开源代码进行编程实现,编程语言不限。 【上机报告】 1、提交关键功能有注释的源码。 2、提交运行测试结果(运行截图及说明)。 3、运行测试结果分析。 4、上机总结(任务完成情况、出现或待解决的问题、收获、体会等)。 流密码 流密码就是使用较短的一串数字(叫它密钥吧),来生成无限长的伪随码流,当然事实上只需要生成和明文长度一样的密码流就够了。一个非常简单的流密码算法是,用6个比特位101100做密钥,将它不断重复得到密码流0. ...直到和明文长度相等,然后将密码流和明文“相加”就得到密文了,解密就是将这个密码流和密文“相加”。流密码算法有个特殊的名称——维吉尼亚密码,当然这里密钥长度可以不是6。用较短的密钥产生无限长的密码流的方法非常多,其中有一种就叫做RC4。 把明文的信息限制在ascii码字符集(它已经能表示所有的英文资料了哈哈),每个字符是一个比特,占8位。假设明文是abc,a、b、c的ascii值分别为97、98、99。二进制形式为01100001、01100010、01100011。密钥流和明文长度一样,假设是sdf,同样可以得到二进制流01110011、01100100、01100110,让他们在对应位做异或运算就可以得到密文了,c语言有^运算符来实现“相加”的操作。我们就直接对字符进行“相加”即a^s, b^d, c^f。得到的结果的二进制形式为00010010、00000110、00000101,它们分别表示ascii码值为18、6、5的字符 RC4用两步来生成密码流 首先你指定一个短的密码,储存在key[MAX]数组里,还有一个数组S[256],令S[i]=i。然后利用数组key来对数组S做一个置换,也就是对S数组里的数重新排列,排列算法为
SM4算法、AES算法、DES算法三种分组密码的基础分析 分组密码当中代表性的SM4算法、AES算法、DES算法在计算机和通信系统中起着重要的实际作用,每一种的算法都会有其独有的一份结构,讲解起来其实每一种都有很大的一个篇幅。在这里主要是把这几种密码算法放在一起做一个简单的分析,也可以通过了解每一种算法来比较一下三者之间的差别。 那么,我们就通过了解SM4算法、AES算法、DES算法这几种有代表性的近代分组密码来讨论一下分组密码的基本理论及其在计算机和通信系统中的实际应用。 1、SM4算法 SM4密码算法是一个分组算法,其算法设计简沽,结构有特点,安全高效。数据分组长度为128比特,密钥长度为128比特。加密算法与密钥扩展算法均采取32轮迭代结构。SM4密码算法以字节8位和字节32位作为单位进行数据处理。SM4密码算法是对合运算,因此解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。 SM4密码算法结构 SM4算法的基本内容有以下几方面: 基本运算:SM4密码算法使用模2加和循环移位作为基本运算。 基本密码部件:SM4密码算法使用了S盒、非线性变换τ、线性变换部件L、合成变换T基本密码部件。 轮函数:SM4密码算法采用对基本轮函数进行迭代的结构。利用上述基本密码部件,便可构成轮函数。SM4密码算法的轮函数是一种以字为处理单位的密码函数。 加密算法:SM4密码算法是一个分组算法。数据分组长度为128比特,密钥长度为128比特。加密算法采用32轮迭代结构,每轮使用一个轮密钥。 解密算法:SM4密码算法是对合运算,因此解密算法与加密算法的结构相同,只是轮密铝的使用顺序相反,解密轮密钥是加密轮密钥的逆序。 密钥扩展算法:SM4密码算法使用128位的加密密钥,并采用32轮法代加密结构,每一轮加密使用一个32位的轮密钥,共使用32个轮密钥。因此需要使用密钥扩展算法,从加密密钥产生出32个轮密钥。 SM4的安全性:SM4密码算法经过我国专业密码机构的充分分析测试,可以抵抗差分攻击、线性攻击等现有攻击,因此是安全的。 2、AES算法 2000年10月2日美国政府正式宣布选中比利时密码学家JoanDaemen和VincentRijmen提出的一种密码算法RJNDAEL作为AES,目前AES己经被一些国际标准化组织ISO,IETF,IEEE802.11等采纳作为标准。RIJNDAEL算法之所以能够最终被选为AES的原因是其安全、性能好、效率高、实用、灵活。RIJNDAEL算法是一个数据块长度和密钥长度都可变的分组加密算法,其数据块长度和密钥长度都可独立地选定为大于等于128位且小于等于256位的32位的任意倍数。 RIJNDAEL算法结构图 AES算法的基本内容有以下几方面: 状态:在RIJNDAEL算法中,加解密要经过多次数据变换操作,每一次变换操作产生一个中间结果,称这个中间结果叫做状态。各种不向的密码变换都是对状态进行的。 轮函数:RIJNDAEL加密算法的轮函数采用代替置换网络结构SP结构,由S盒变换ByteSub、行移位变换ShiftRow、列混合变换MixColumn、圈密钥加变换AddRoundKey组成。 圈密钥产生算法:圈密钥根据圈密钥产生算法由用户密钥产生得到,圈密钥产生分两步进行:密钥扩展和圈密钥选择。 加密算法:RIJNDAEL加密算法由一个初始圈密钥加、Nr-l圈的标准轮函数、最后一圈的非标准轮函数组成。 解密算法:RIJNDAEL算法不是对合运算,因此RIJNDAEL的解密算法与加密算法不同。由于RIJNDAEL设计得非常巧妙,使得我们只要略稍改变一下密钥扩展策略,便可以得到等价的解密算法,等价解密算法的结构与加密算法的结构相同,从而方便了工程实现。等价解密算法中的变换为加密算法中相应变换的逆变换。 RIJNDEAEL的安全性:RIJNDEAEL算法的安全设计策略是宽轨迹策略WideTrai1Strategy,具有很高的安全性,能有效抵抗自前己知的攻击,如线性攻击、插值攻击、差分攻击和相关密钥攻击等。RIJNDEAEL的数据块长度和密钥长度都可变,因此能够适应不同的安全应用环境。 3、DES算法
填空题 1、密码学的主要任务是实现机密性、鉴别、数据完整性、抗抵赖性。 1、机密性是一种允许特定用户访问和阅读信息,而非授权用户对信息内容不可理解的安全属性。在密码学中,信息的机密性通过加密技术实现。 2、完整性数据完整性即用以确保数据在存储和传输过程中不被非授权修改的的安全属性。密码学可通过采用数据加密、报文鉴别或数字签名等技术来实现数据的完整性保护。 3、鉴别是一种与数据来源和身份鉴别有关的安全服务。鉴别服务包括对身份的鉴别和对数据源的鉴别。对于一次通信,必须确信通信的对端是预期的实体,这就涉及到身份的鉴别。 4、抗抵赖性 是一种用于阻止通信实体抵赖先前的通信行为及相关内容的安全特性。密码学通过对称加密或非对称加密,以及数字签名等技术,并借助可信机构或证书机构的辅助来提供这种服务。 5、密码编码学的主要任务是寻求有效密码算法和协议,以保证信息的机密性或认证性的方法。它主要研究密码算法的构造与设计,也就是密码体制的构造。它是密码理论的基础,也是保密系统设计的基础。 6、密码分析学的主要任务是研究加密信息的破译或认证信息的伪造。它主要是对密码信息的解析方法进行研究。 7、明文(Plaintext)是待伪装或加密的消息(Message)。在通信系统中它可能是比特流,如文本、位图、数字化的语音流或数字化的视频图像等。 8、密文(Ciphertext)是对明文施加某种伪装或变换后的输出,也可认为是不可直接理的字符或比特集,密文常用c表示。 9、加密(Encrypt )是把原始的信息(明文)转换为密文的信息变换过程。 10、解密(Decrypt)是把己加密的信息(密文)恢复成原始信息明文的过程。 11、密码算法(Cryptography Algorithm)也简称密码(Cipher),通常是指加、解密过程所使用的信息变换规则,是用于信息加密和解密的数学函数。对明文进行加密时所采用的规则称作加密算法,而对密文进行解密时所采用的规则称作解密算法。加密算法和解密算法的操作通常都是在一组密钥的控制下进行的。 11、密钥(Secret Key )密码算法中的一个可变参数,通常是一组满足一定条件的随机序列 12、替代密码是指先建立一个替换表,加密时将需要加密的明文依次通过查表,替换为相应的字符,明文字符被逐个替换后,生成无任何意义的字符串,即密文,替代密码的密钥就是其替换表。 13、根据密码算法加解密时使用替换表多少的不同,替代密码又可分为单表替代密码和多
选择题 1、如果发送方用私钥加密消息,则可以实现() A、保密性 B、保密与鉴别 C、保密而非鉴别 D、鉴别 2、在混合加密方式下,真正用来加解密通信过程中所传输数据(明文)的密钥是() A、非对称算法的公钥 B、对称算法的密钥 C、非对称算法的私钥 D、CA中心的公钥 3、以下关于加密说法,不正确的是() A、加密包括对称加密和非对称加密两种 B、信息隐蔽是加密的一种方法 C、如果没有信息加密的密钥,只要知道加密程序的细节就可以对信息进行解密 D、密钥的位数越多,信息的安全性就越高 4、以下关于混合加密方式说法不正确的是:() A、采用公开密钥体制进行通信过程中的加解密处理 B、采用公开密钥体制对对称密钥体制的密钥进行加密后的通信 C、采用对称密钥体制对对称密钥体制的密钥进行加密后的通信 D、采用混合加密方式,利用了对称密钥体制的密钥容易管理和非对称密钥体制的加解密处理速度快的双重优点 5、两个不同的消息摘要具有相同的值时,称为() A、攻击 B、冲突 C、散列 D、都不是
6、()用于验证消息完整性。 A、消息摘要 B、加密算法 C、数字信封 D、都不是 7、HASH函数可应用于()。 A、数字签名 B、生成程序或文档的“数字指纹” C、安全存储口令 D、数据的抗抵赖性 8、数字证书采用公钥体制,每个用户设定一把公钥,由本人公开,用它进行: A、加密和验证签名 B、解密和签名 C、加密 D、解密 9、数字签名为保证其不可更改性,双方约定使用() A、HASH算法 B、RSA算法 C、CAP算法 D、ACR算法 10、1是网络通信中标志通信各方身份信息的一系列数据,提供一种在Internet上验证身份的方式 A、数字认证 B、数字证书 C、电子证书 D、电子认证 11、以下关于CA认证中心说法正确的是
一、选择 1.若一个单向函数存在一个附加信息,当不知道该附加信息时从函数值求原像是困难的,但是知道 该附加信息时从函数求原像是容易的,则该单向函数是 A.陷门单向函数 B.门陷单向函数 C.完全单向函数D容量单向函数 2.标志着公钥密码学诞生的事件是 A. C.Shannon发表的保密系统的通信理论 B.W.Diffle和M.Hellman发表“密码学的新方向”一文 C. C.RSA加密公钥的提出 D.维吉利亚密码体制的提出。 3.下列密码体制中,被认为无条件安全的是 A.一次一密乱码本(one-time pad) B.ElGamal C.RSA D.Cramer-Shop 4.下列密码体制中,不属该分组密码的是 A.IDEA B.AES C.ElGamal D.DES 5.目前通称的AES算法指的是 A.Terpent算法 B.RCG算法 C.Rijndael算法 D.Tuofish算法 二、填空 1.按照一个明文字母是否总是被一个固定的字母代换进行划分,代换密码可分为单表代换密码和 多表代换密码。 2.经典密码学的2个分支:密码编码学和密码分析学。 3.根据攻击者所拥有的信息不同,对数字签名方案的攻击主要有惟密钥攻击,已知消息攻击,选 择消息攻击,适应性选择消息攻击四种常见的类型。 4.分组密码主要有电子密码本模式(ECB) ,密码分组链接模式(CBC) ,密码反馈模式(CFB) , 输出反馈模式(OFB) 。 5.根据密码分析者破译时已具备的条件,把对密码系统的常见攻击分为惟密文攻击,已知明文攻 击,选择明文攻击,选择密文攻击。 三、问答 1.Feistel 密码结构主要部件是哪些?它在迭代运算中起到什么作用? ANS:Feistel密码是通过代替和置换(S-P网络)交替的方式来构造分组密码,其实就是基于混乱和扩散原理实现加解密运算。 S盒变换:它把输入的一个n长的比特串转化为另一个m长的比特串输出。 P盒变换:通过把一个比特串中各比特的位置次序重新排列而得到新的比特串的变换。 2.数字签名的四个特征? ANS:数字签名具有以下特征: (1) 收方能够确认或证实发方的签名,但不能伪造。 (2) 发方发出签名的消息给收方后,就不能再否认他所签发的消息。 (3) 收方对已收到的签名消息不能否认。 (4) 第三者可以确认收发双方之间的消息传送,但不能伪造这一过程。 3.分组密码主要优点是什么?其设计原则应考虑哪些问题? ANS:分组密码的优点是:明文信息良好的扩展性,对插入的敏感性,不需要密钥同步,较强的适用性,适合作为加密标准。在分组密码具体设计中,还需重点考虑的有:S盒的设计、P盒的设计、轮函数F的设计、迭代轮数以及密钥扩展算法等。
流密码和分组密码 按照密钥的特征不同,密码体制分为对称密码体制和非对称密码体制。按照对明文消息加密方式的不同,密码体制分为流密码(Stream Cipher )和分组密码(Block Cipher )[1]。非对称密码体制均为分组密码[2]。 1 流密码 流密码也称为序列密码。在流密码中,明文以序列的方式表示,称为明文流。在对明文流进行加密时,先由种子密钥生成一个密钥流。然后,利用加密算法把明文流和密钥流加密,产生密文流。流密码每次只对明文中的单个bit 位进行加密变换,加密过程所需的密钥流由种子密钥通过密钥流生成器产生。流密码的主要原理是通过随机数发生器产生性能优良的伪随机序列(密钥流),使用该序列加密明文流(逐bit 位加密),得到密文流。由于每一个明文都对应一个随机的加密密钥,因此流密码在理论上属于无条件安全的密码体制(一次一密密码) [3]。流密码的基本加密过程,如图1所示。 图1 流密码的加密过程 设明文流为:12i m m m m = ,密钥流由密钥流发生器f 产生:(,)i i z f k σ=,这里i σ是加密器中的存储器在时刻i 的状态,f 是由种子密钥k 和i σ产生的函数。设最终得到的密钥流为: 12i k k k k = ,加密结果为:121212()()()i i k k k i c c c c E m E m E m == ,解密结果为: 121212()()()i k k k i i m D c D c D c m m m == 。用流密码进行保密通信的模型,如图2所示: 图2 流密码保密通信图 2 分组密码 分组密码也称为块密码。当加密一条长消息(明文)时,首先,将明文编码表示为二进制序列;然后,将其分成若干个固定长度的组(最后一组长度不够时还得进行填充,如补0);
实习二分组密码加密 一、实习目的 1.理解对称加密算法的原理,熟悉常用的对称加密算法:DES、TripleDES、Blowfish; 2.以DES加密算法为例,掌握分组加密算法加、解密过程的实现。 二、实习要求 1.实习前认真预习第5章有关内容; 2.熟悉java中的java.security.*和java.crypto.*中的相关类; 3.按要求认真撰写实习报告。 三、实习内容 1.[基本要求] 以DES/DESede为例,利用java中的相关类实现对指定字符串的加、解密。 2.[实现提示] (1) 可以利用java中的KeyGenerator类创建对称秘钥,利用工厂类KeyGenerator 的静态方法getInstance()获得KeyGenerator()类对象; (2) 方法getInstance()的参数为字符串类型,指定加密算法的名称如:Blowfish、DES、DESede、HmacMD5或HmacSHA1等; (3) 利用工厂类Cipher的对象可以创建密码器。同样的,getInstance()的参数为字符串类型,指定加密算法的名称。 实验截图: 以DES加密为例,客户端:
客户端解密: 实习代码: 服务器MyServer类: package Caesar_Modification; import java.awt.EventQueue; import java.awt.TextArea; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.swing.JFrame;
DES分组密码实验报告 一、DES算法的实现 1.DES简介 DES算法工作:如Mode为加密,则用Key 去把数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果。在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。 2. DES算法详述 (1)DES加密标准 DES是对二元数字分组加密的分组密码算法,分组长度为64比特。每64位明文加密成64位密文,没有数据压缩和扩展,密钥长度为56比特,若输入64比特,则第8,16,24,32,40,48,56,64为奇偶校验位,所以,实际密钥只有56位。DES算法完全公开,其保密性完全依赖密钥。 DES的加密过程可表示为: DES(m)= IP-1T16·T15…T2·T1·IP(m). 右图面是完全16轮DES算法框图: 图1 完全16轮DES算法
1 初始置换IP 初始置换是将输入的64位明文分为8个数组,每一组包括8位,按1至64编号。 IP的置换规则如下表: 表1 IP置换规则 58 50 42 34 26 18 10 2 60 52 44 36 28 20 12 4 62 54 46 38 30 22 14 6 64 56 48 40 32 24 16 8 57 49 41 33 25 17 9 1 59 51 43 35 27 19 11 3 61 53 45 37 29 21 13 5 63 55 47 39 31 23 15 7 2 IP-1是IP的逆置换 由于第1位经过初始置换后,已处于第40位。逆置换就是再将第40位换回到第1位。 逆置换规则如下表所示: 表2 IP-1置换 40 8 48 16 56 24 64 32 39 7 47 15 55 23 63 31 38 6 46 14 54 22 62 30 37 5 45 13 53 21 61 29 36 4 44 12 52 20 60 28 35 3 43 11 51 19 59 27 34 2 42 10 50 18 58 26 33 1 41 9 49 17 57 25 初始置换IP及其逆置换IP-1并没有密码学意义,因为置换前后的一一对应关系是已知的。它们的作用在于打乱原来输入明文的ASCⅡ码字划分的关系,并将原来明文的第m8,m16,m24,m32,m40,m48,m56,m64位(校验位)变成IP的输出的一个字节。 3. DES算法的迭代过程 图中Li-1和Ri-1分别是第i-1次迭代结果的左右两部分,各32比特。即Li=Ri-1, Ri=Li-1 f(Ri-1,ki)。其中轮密钥Ki为48比特,函数F(R,K)的计算过程如图所示。轮输入的右半部分R为32比特,R首先被扩展成48比特,扩展过程由表3定义,其中将R的16个比特各重复一次。扩展后的48比特再与子密钥Ki异或,然后再通过一个S盒,产生32比特的输出。该输出再经过一个由表4定义的置换,产生的结果即为函数F(R,K)的输出。 32 1 2 3 4 5
1、密码体制分类及典型算法描述 密码体制分为三类:1、换位与代替密码体质2、序列与分组密码体制3、对称与非对称密钥密码体制。 典型算法描述: 2、试对代替密码和换位密码进行安全性分析。 1.单表代替的优缺点 优点: 明文字符的形态一般将面目全非 缺点: (A) 明文的位置不变; (B) 明文字符相同,则密文字符也相同; 从而导致: (I) 若明文字符e被加密成密文字符a,则明文中e的出现次数就是密文中字符a的出现次数; (II) 明 文的跟随关系反映在密文之中. 因此,明文字符的统计规律就完全暴露在密文字符的统计规律之中.形态变但位置不变 2. 多表代替的优缺点优点: 只要(1) 多表设计合理,即每行中元互不相同,每列中元互不相同.(这样的表称为拉丁方表) (2) 密钥序列是随机序列即具有等概性和独立性。这个多表代替就是完全保密的。等概性:各位置的字符取可能字符的概率相同独立性在其它所有字符都知道时也判断不出未知的字符取哪个的概率更大。 2. 多表代替的优缺点密钥序列是随机序列意味着 1密钥序列不能周期重复 2密钥序列必须与明文序列等长 3这些序列必须在通信前分配完毕 4大量通信时不实用 5分配密钥和存储密钥时安全隐患大。 缺点周期较短时可以实现唯密文攻击。换位密码的优缺点 优点: 明文字符的位置发生变化; 缺点: (A) 明文字符的形态不变; 从而导致: (I) 密文字符e的出现频次也是明文字符e的出现次 数; 有时直接可破! (如密文字母全相同) 换位密码优缺点总结: 位置变但形态不变. 代替密码优缺点总结: 形态变但位置不变 3、ADFGX密码解密过程分析 1918年第一次世界大战已经接近尾声。为了挽回日趋不利的局面德军集中了500万人的兵力向协约国发动了猛烈的连续进攻。采用一种新密码ADFGX密码体制。该密码用手工加解密费时不多符合战地密码的基本要求。进行了两次加密有两个密钥一个是代替密钥棋盘密钥一个是换位密钥。其结果是把前面代替加密形成的代表同一明文字符的两个字母分散开破坏密文的统计规律性。代替密钥和换位密钥可以按约定随时更换增加破译难度。得到密文后取得换位密钥将密钥数字依次列出并画出M*(N+1)格子其中M为密文中的字符串数,N为最长字符串中字符个数并将字符串依次竖直写在对应的换位密钥数字下面此时按照以首开始横行依次写下来即得到正确顺序密文再根据代替密钥棋盘密钥找出对应的字母即可解密。 4、试计算(1~25)模26的逆元 2,4,6,8,10,12,13,14,16,18,20,22,24.均无逆元。1.1; 3.9; 5.21;7.15;9.3; 11.19;15.7;17.23;19.11;21.5;23.17;25.25 5、RC4流密码原理及应用 广泛应用于商业密码产品中一种可变密钥长度的序列密码 6、密码学涉及的数学理论主要有哪些 数论研究整数性质的一个数学分支。用于密码算法设计。
3.2.5其他常用分组密码算法 1. 三重DES 三重DES (即Triple DES )是DES 向AES 过渡的加密算法(1999年,NIST 将3-DES 指定为过渡的加密标准),是DES 的一个更安全变形。它以DES 为基本模块,通过组合分组方法设计出分组加密算法。其具体实现如下:设E k ( )和D k ( )代表DES 算法的加密和解 密过程,K 代表DES 算法使用的密钥,P 代表明文,C 代表密文。 三重DES 加密过程为: C=E k1(D k2(E k1(P ))) 三重DES 解密过程为: P=D k1((E k2(D k1(C ))) 具体的加/解密过程如图3-22所示。 2. IDEA 加密算法 IDEA 算法是International Data Encryption Algorithmic 的缩写,意为国际数据加密算法,1992年由瑞士的Lai 和Massey 提出。 IDEA 的输入明文为64位,密钥为128位,生成的密文为64位。 密钥长度是128位,比DES 长了2倍多,所以如果用穷举强行攻击的话,需要2128 次搜索才能获得密钥。如果可以设计一种每秒能搜索十亿次的芯片,并且采用十亿个芯片来并行处理的话,也要用上1013年——比宇宙的年龄还要长。而对于其他攻击方式来说,由于此算法比较新,并且在设计时已经考虑到了如差分攻击等威胁,所以至今还未发现成功攻击IDEA 的方法。从这点来看,IDEA 还是很安全的。 3.2.6分组密码的运行模式 分组密码在加密时,明文分组的长度是固定的,而实际应用中待加密消息的数据量是不定的,数据格式可能是多种多样的。为了能在各种应用场合使用DES ,美国在FIPS PUS 74和81中定义了DES 的4种运行模式。这些模式也可用于其他分组密码,下面以DES 为例来介绍这4种模式:ECB 、CBC 、CFB 和OFB 。 1. 电子密码本模式ECB 一个明文分组加密成一个密文分组,相同的明文分组被加密成相同的密文分组。由于大多数消息并不是刚好分成64比特(或者任意分组长)的加密分组,通常需要填充最后一个分组,为了在解密后将填充位去掉,需要在最后一分组的最后一字节中填上填充长度。 ECB 模式的缺点是:如果密码分析者有很多消息的明密文对,那就可能在不知道密钥的情况下恢复出明文;更严重的问题是敌手通过重放,可以在不知道密钥情况下修改被加密过的消息,用这种办法欺骗接收者。例如在实际应用中,不同的消息可能会有一些比特序列是相同的(消息头),敌手重放消息头,修改消息体欺骗接收者。 图3.22 三重DES (a)加密过程 (b)解密过程
实验报告 课程:密码学班级:姓名:学号: 成绩:指导教师:实验日期:2011/5/25 实验密级:预习程度:实验时间:12:50-15:20 仪器组次:18 必修/选修:必修实验序号:4 实验名称:实现DES 分组密码算法的加解密 实验目的与要求:1、掌握DES 分组密码算法的软件实现方法; 2、复习DES 分组密码算法设计的基本原理; 3、能用DES 分组密码算法实现已知明文的加解密实验仪器: 一、实验要求 1、求主密钥的扩展密钥前,先输出使用的PC-1 置换和PC-2 置换;
2、对明/密文文件用DES 算法进行加/解密前,先输出确定使用的S 盒和有关置换表; 3、“确定主密钥的扩展密钥”和“对明/密文文件的加/解密”分别编写两个模块,如果时 间不够,可以任选一个模块; 4、确定扩展密钥前,先指出是加密密钥还是解密密钥; 5、密钥扩展的移位的位数可以先添表,但最后一轮移位完后,必须回到初始值c0d0。 6、主密钥长度与明文相一致,需要忽略校验位; 7、能完成任意给定的一个明/密文文件的加/解密; 8、加解密结果正确。 二、实验内容与步骤 下面是程序的部分代码 int main() { char MingWen[104]; char target[8]; char InputKey[8]; int text[64]; int text_ip[64]; int L0[32],Li[32]; int R0[32],Ri[32]; int RE0[48]; int key[64]; int keyPC1[56]; int A[28]; int B[28]; int keyAB[56]; int K[16][48]; int RK[48]; int RKS[8]; int SP[32]; int RKSP[32]; int text_end[64]; int text_out[14][64]; char init[9]={"HTmadeit"}; int CBC[64]; int result[13][64]; int H[208]; char MiWen[208]; int C[832]; int M[13][8]; char choice; int t; int i,j; int k,l,m,n; int r[8],c[8];