资源预览内容
第1页 / 共39页
第2页 / 共39页
第3页 / 共39页
第4页 / 共39页
第5页 / 共39页
第6页 / 共39页
第7页 / 共39页
第8页 / 共39页
第9页 / 共39页
第10页 / 共39页
亲,该文档总共39页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
安全协议分析与设计 第一章 (下),卫剑钒,2,密码算法基础知识,在详细讨论安全协议之前,简略介绍有关密码算法方面的基础知识将会有助于读者对后续章节的理解。 序列加密 分组加密(DES,AES) Hash函数 公钥算法(RSA,DSA,DH算法),3,密码算法,如果密码算法的安全性依赖于算法的保密,那么,称之为受限制的密码算法。历史上,这类加密算法曾经十分流行,然而,由于不能对这类算法进行质量控制和标准化,它们已经远远不能满足今天的要求。 现代密码算法利用密钥解决了这个问题,密码算法可以公开,密码系统的安全性仅依赖于密钥的保密,攻击者即便得知密码算法,在不知道密钥的情况下,也很难获得明文。 基于密钥的密码算法可以分为两大类,对称密码算法和公开密钥算法。,4,对称密码算法,对称密码算法(Symmetric Key Cryptography),又被称为传统密码算法,指的是解密密钥可由加密密钥推导出来的密码算法。 即若已知加密密钥K,则可以通过公开的算法推算出解密密钥K1。在大多数的对称密码算法中,解密密钥和加密密钥相同。 参与通信的双方,首先在通信之前商定好一个密钥K(加密密钥和解密密钥均为K),然后在后面的通信过程中,双方利用密钥K对来自对方的消息进行加密或者解密,进行保密通信。,5,对称密码算法的加密过程可以表示为: EK (M) = C 其中,M代表明文,C为相应的密文,加密密钥和解密密钥都为K。 解密过程可以表示为: DK (C) = M 对称密码算法的安全性依赖于对称密钥的保密,对称密钥K一旦被泄漏,系统就无安全性可言,因为任何得到K的人都可以加密明文并解密密文。,6,根据加密明文的形式,可将对称密码算法分为两类:序列密码算法和分组密码(也称为块密码)算法。 序列密码算法指的是每次对明文的一位或一个字节用对称密钥进行加密。 分组密码算法则是将明文分组,每次以组为单位对明文加密。,7,序列密码算法,序列密码算法每次加密明文的一位或者一个字节,通常的方法是,先产生一个位序列,即密钥序列,然后将密钥序列与明文序列逐位进行异或运算,得到密文的位序列。 密钥序列的随机性越好,密码分析者对其进行破解的难度就越大。 密钥序列生成器(Key Stream Generation)的设计十分关键,生成器包含有限状态机(Finite State Machine)和输出函数(Output Function),通常依靠一个密钥K来产生密钥序列。,8,分组密码算法DES,DES(Data Encryption Standard)是一个分组加密的对称密码算法,1977年正式成为美国联邦信息处理标准(FIPS-46)。DES正式公布以来,它的安全性就一直是争论的主题,但无论如何,DES的出现极大地推动了密码学领域的研究,它的设计思想仍具有重要的参考价值。 DES对64位的明文分组实施16轮加密,输出64位的密文。加密和解密使用相同的密钥和相同的算法。不过,加密和解密的子密钥(由加密密钥变换而得16个子密钥)顺序不同,若加密子密钥顺序为K1,K2,K16,那么解密的子密钥顺序为K16,K15,K1。 密钥长度为56位,使用时要求输入的密钥为64位,但只用56位,另外8位做奇偶校验或随意设置。,9,DES加密过程,对于一个输入的64位明文分组m,DES整个加密过程由3个阶段组成:初始置换、迭代过程(乘积变换)和末置换。 首先,DES对m进行初始置换,通过查表的方法,将m中64位的顺序打乱,如将第1位放到第58位,而将第58位放到第55位等。 经过置换后得到m。将m分为左、右两半:L0、R0,每边各32位。 然后进行16轮完全相同的变换。每一轮迭代中使用的子密钥Ki都是由密钥K变换而得,子密钥长度为48位。,10,DES加密过程,16轮的操作可以表示为如下的循环赋值操作,其中,为模2加运算: for ( i =1 to 16 ) Li=Ri-1 Ri=Li-1f (Ri-1,Ki) 其中,函数f(x,y)较为复杂,首先将32位的x扩展为48位,然后将其和48位的y异或,得到的结果输入给8个S盒子,每个盒子处理6位数据,将其变换为4位数据。这样8个S盒子共输出32位数据,再将这32位结果进行一个置换。 最后,对R16和L16应用初始置换的逆置换,便得到对m进行DES加密后的密文。,11,DES解密过程,DES算法的解密和加密使用相同的算法。 二者唯一不同之处在于子密钥的使用顺序。解密时子密钥的使用顺序依次为:K16,K15,K1。 注意解密一开始时,得到的输入是密文,通过初始置换并将其分为两半:L0和R0,然后经过16轮运算后,得到L16和R16,再将其进行初始置换的逆置换,就可得到解密后的明文。,12,DES安全性的讨论,密钥:DES的安全争议中,密钥长度偏短是批评较多的一个问题。56位密钥的密钥量为2561017个,无法抵挡穷举攻击。此外,弱密钥和半弱密钥的存在,也给DES的安全性留下了隐患。 迭代次数:现已证明,利用差分分析法,任何少于16次迭代的DES算法都有比穷举法更有效的破译方法。迭代次数为16刚好可以抵抗差分分析的攻击,不过,人们仍然怀疑16轮迭代可能偏少。 S盒:作为DES密码体制中的非线性组件,S盒的安全性是至关重要的。但是迄今仍未公布它的设计准则,因此,人们怀疑S盒的设计中可能会存在陷门,使得美国国家安全局(NSA)只要利用一个简单的方法就能解密密文。,13,DES安全性的讨论,为了提高DES的安全性能,可以选择多重DES方案。如使用三重DES加密。 k1、k2和k3是3个56位的密钥,加密方法为: C=EK3(DK2(EK1(M) 解密方法为: M=DK1(EK2(DK3(C) 这样使得密钥的空间增至168位,三重DES的另一个好处是,如果把相邻的密钥取同一个值,则可和DES兼容。 也可以采用两个密钥做三重DES加密,即取k1= k3。使用两个密钥的三重DES已经广泛地替代了DES,并已被用在密钥管理标准ANS X9.17和ISO 8732中。,14,分组密码算法AES,为了替换安全性逐渐减弱的DES算法,1997年年初,美国国家标准技术研究所(National Institute of Standard and Technology,NIST)向全世界公开征集高级加密标准(Advanced Encryption Standard,AES)。对AES的基本要求是强度至少和三重DES一样,但要比三重DES更快。 经过长达3年、历经两轮的评估,最终,Rijndael数据加密算法脱颖而出。NIST在2001年11月26日正式公布Rijndael数据加密算法作为AES,于2002年5月26日起正式生效。 目前通称的AES算法指的就是Rijndael数据加密算法,AES作为DES的替代者将成为未来数十年最重要的对称密码算法。,15,AES基本特点,Rijndael数据加密算法是由比利时密码学家Joan Daemen和Vincent Rijmen开发设计的,主要的设计原则有以下3点。 (1)能够抵抗所有已知的攻击。 (2)设计简单。 (3)编码紧凑,能较好地适应平台,运算速度快。 AES的密钥长度可变,可以指定为128 bit、192 bit或256 bit,数据分组长度也可以指定为这3个长度。 AES算法对密钥的选择几乎没有限制,基本上不存在弱密钥和半弱密钥。而且在抵抗穷举攻击、线性攻击、差分攻击、积分密码攻击和插入攻击方面,均表现出很好的性能。,16,AES基本概念,AES加解密过程中,数据分组在中间各步的结果称为一个状态(State),可以用一个4行、Nb列的矩阵表示。 Nb为数据分组的长度除以32。矩阵的元素是字节,如分组长度为128 bit时,数据分组可表示为如下的状态矩阵: 密钥也用同样的方法表示,数组有4行,Nk列,其中Nk等于密钥长度除以32。,17,AES加密,AES的各种变换是在状态矩阵的基础上进行的。 例如,对于128 bit的明文分组x,将x按顺序划分成16个字节,按照S00,S10,S20,S30,S01,S11,S23,S33的顺序映射到状态阵列中。 然后初始化密钥,对矩阵进行(Nr1)轮变换,Nr由Nb、Nk决定。 简单来说,轮变换包括4个不同的矩阵变换:字节替换、行移位、列混合以及加密钥。经过多轮变换后,得到的状态矩阵即为密文分组矩阵。,18,Hash函数,Hash函数常被称为散列函数,又称哈希函数或压缩函数。Hash函数的输出常称为散列值、散列码、数据鉴别码(Data Authentication Code,DAC)、篡改检验码(Manipulation Detection Code,MDC),数字指纹(Digital Fingerprint)等。目前最常用的Hash算法有MD5、SHA算法等。 散列函数可表示为H,它对任意长度的数据M作用后,返回固定长度的散列值h,即h=H(M)。散列函数具有如下的单向性。 (1)对于给定的M,计算H(M)很容易。 (2)根据给定的h值,很难计算出对应的M,使得h=H(M)。,19,Hash函数的安全性,Hash函数的安全性主要体现在抗碰撞性上,可分为如下两项: 弱无碰撞性(Weakly Collision-free):散列函数H称为是弱无碰撞的,是指对给定消息M,在计算上几乎找不到另一个M,使H(M)=H(M)。 强无碰撞性(Strong Collision-free):散列函数H被称为是强无碰撞的,是指在计算上几乎不可能找到不同的M和M,使得H(M)=H(M)。,20,Hash函数的应用,散列函数构成的这种单向密码体制,表现出明文到密文的不可逆性。它在密码学领域中有广泛的应用,适用于只需要加密,无须解密的特殊场合,如口令表加密、数字签名等。 散列函数在认证消息完整性方面的应用,是将密钥和单向散列函数相结合而产生的消息鉴别方案。 使用散列函数产生消息鉴别码(Message Authentication Code,MAC)的方法有很多,可以将密钥作为Hash函数输入的一部分,也可以对散列值进行加密。 HMAC(Keyed-Hashing for Message Authentication)是目前最受欢迎的方案之一,它将现有的Hash函数作为一个嵌入模块,可以很容易地选择和替换Hash函数,HMAC于1997年作为RFC 2104发表,并在Internet协议(如IPSec和SSL等)中得到了广泛的使用。,21,公开密钥算法,公开密钥算法(Public Key Cryptography)的概念,是由Diffie和Hellman于1976年在美国国家计算机会议上首先提出的。几个月后,他们发表了论文“密码学的新方向”(“New Directions in Cryptography”)进一步阐述他们的思想,这篇开创性的论文,被公认为是密码学发展中的里程碑。 公开密钥算法的最大特点是加密密钥不同于解密密钥,通信的参与方之间不存在共享的密钥,它的加密密钥可以公开,解密密钥则由通信的主体作为秘密保护。,22,基本特点,公开密钥算法的设计思想如下:任何通信的主体A都和一个密钥对(Ka,Ka1)相关联。Ka是A用来加密明文的加密密钥,可以被公共获知;Ka1是A的解密密钥,只被A拥有,A不得将其泄漏给其他任何人。 加密密钥又叫做公钥(Public Key),解密密钥也叫做私钥(Private key)。如果一个主体使用公钥Ka对消息明文M加密,那么,只有知道私钥Ka1的主体才能解密。 在一些公开密钥算法中,可以用私钥加密消息明文,然后用公钥对其进行解密。如果能用公钥将密文C解密成有意义的明文P,就可以推出此密文C一定是由拥有对应私钥的主体加密的。这种性质可以用来进行数字签名。,23,基本特点,公开密钥算法的设计往往依赖于某个问题解决的计算难度。公钥系统大都建立在一个NP类问题的基础之上,对于这样的问题目前没有办法找到多
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号