- 1、本文档共43页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三公开密钥密码学
* b:1—p-1 * 3.3.2 用公开密钥分配秘密密钥 一旦公开密钥已经分配或者已经可以得到,就可以进行安全通信。但很少有用户完全用公开密钥加密进行通信,因为公开密钥加密速度慢。合理的做法是将公开密钥加密当作一个分配常规加密所用的秘密密钥的工具。 1.简单的秘密密钥分配 如果A希望和B通信,则使用下列步骤: 1. A产生一个私有/公开密钥对{KUa,KRa}并给B传输一个报文,其中包含KUa和A的一个标识符IDA。 2. B产生一个秘密密钥Ks,并将其用A的公开密钥加密后传输给A。 3. A计算DKRa[EKUa[Ks]]来恢复这个秘密密钥。因为只有A可以解密这个报文,所以只有A和B才会知道Ks。 4. A弃用KUa和KRa,B弃用KUa。 A和B现在就可以使用常规加密和会话密钥进行安全通信。信息交互完成以后,A和B都丢弃Ks。在通信之前不存在密钥,而在通信完成以后也不存在密钥,因而密钥泄露的危险被减小到最低程度。 (问题)此协议容易受到主动攻击。如果攻击方C控制了中间的通信信道,那么C就可以用下列方式破坏通信而不被发觉: A C B KUa||IDA KUa/KRa Ks KUc/KRc KUc||IDA EKUc[Ks] EKUa[Ks] 攻击方 A C B EKs [p] 攻击方 DKs [EKs [p]] 2.具有保密和鉴别能力的秘密密钥分配 下图给出了一种防止被动和主动两种攻击的防护方法。出发点是假定A和B己经通过前边描述的方案之一交换了公开密钥。 A B 3. 一个混合方案 另一种使用公开密钥加密分配秘密密钥的方式是IBM主机使用的混合方法,这种方案保留了密钥分配中心(KDC),这个KDC与每个用户共享一个秘密主密钥Km并用这个主密钥加密分配秘密的会话密钥Ks。公开密钥方案被用来分配主密钥,使用这种三层分配方式的理由如下: 性能:在许多应用中,会话密钥变化频繁。用公开密钥加密分配会话密钥会使系统的总体性能下降。使用三层结构,公开密钥加密只用来偶尔更新用户和KDC之间的主密钥。 向后兼容性:混合方案容易结合到现存的KDC方案中,软件更改量小。 增加一个公开密钥层提供了一种安全有效的分配主密钥的方法。 Return 3.4 Diffie-Hellman密钥交换算法 Diffie与Hellman在其开创公钥体制的文章中给出了公钥密码的思想。这篇论文中给出的算法常被称为Diffie-Hellman 密钥交换算法,它是第一个公开发表的公开密钥密码算法。严格地说,它并不能完成信息的加/解密功能,只能用于网络环境中的密钥交换。 目前许多商用产品都使用这种密钥交换技术。该算法的目的是使两个用户安全地交换一个密钥,以便于今后的报文加密,本算法仅限于密钥交换的用途。 Diffie-Hellman算法的有效性依赖于计算离散对数的难度。 1、算法描述 离散对数的概念 原根:如果?是素数p的一个原根,那么数值: ? mod p, ?2 mod p,…,?p-1 mod p 是各不相同的整数,且以某种排列方式组成了从1到p-1的所有整数。(p76生成元) 离散对数:如果对于一个整数b和素数p的一个原根?,可以找到一个唯一的指数 i,使得: b= ?i mod p 其中1≤i≤p-1 那么指数 i 称为b的以?为基数的模p的离散对数。 Diffie-Hellman 算法的有效性依赖于计算离散对数的难度,其含义是:当已知大素数p和它的一个原根 ?后,对给定的 b,要计算 i ,被认为是很困难的,而给定 i 计算b却相对容易。 Diffie-Hellman 算法 假如用户A和用户B希望交换一个密钥。 取一个素数q和一个整数?, ?是q的一个原根。 用户A选择一个随机数XAq,并计算YA=?XA mod q。 用户B选择一个随机数XBq,并计算YB=?XB mod q。 每一方都将X保密而将Y公开让另一方得到。 用户A计算密钥的方式: KA=(YB) XA mod q KA= (?XB mod q ) XA mod q = (?XB)XA mod q = ?XBXA mod q = ?XAXB mod q 用户B计算密钥的方式: KB=(YA) XB mod q KB= (?XA mod q)XB mod q = (?XA)XB mod q =?XAXB mod q 可见: KA= KB 这样双方已经交换了一个密钥K。由于XA和XB是保密的,而第三方只有q、?、YB、YA可以利用,只有通过取离散对数来
文档评论(0)