《《基本协议》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《基本协议》PPT课件.ppt(35页珍藏版)》请在三一办公上搜索。
1、基本协议,密钥交换,通常的密码技术是用单独的密钥对每一次单独的会话加密,这个密钥称为会话密钥,因为它只在一次特殊的通信中使用。这个会话密钥怎么到达会话者的手中可能是很复杂的事情。,对称密码的密钥交换,这个协议假设Alice和Bob(网络上的用户)每人和密钥分配中心(KDC)共享一个秘密密钥,我们的协议中的Trent就是KDC。在协议开始执行前,这些密钥必须在适当的位置(协议忽略了怎么分配这些秘密密钥这个非常实际的问题,只是假设它们在适当的位置,并且Mallory不知道它们是什么)。(1)Alice呼叫Trent,并请求一个与Bob通信的会话密钥。(2)Trent产生一随机会话密钥,并对它的两个
2、副本加密:一个用Alice的密钥,另一个用Bob的密钥加密。Trent发送这两个副本给Alice。(3)Alice对她的会话密钥的副本解密。(4)Alice将Bob的会话密钥副本送给Bob。(5)Bob对他的会话密钥的副本解密。(6)Alice和Bob用这个会话密钥安全地通信。这个协议依赖于Trent的绝对安全性。Trent更可能是可信的计算机程序,而不是可信的个人。如果Mallory破坏了Trent,整个网络都会遭受损害。他有Trent与每个用户共享的所有秘密密钥;他可以读所有过去和将来的通信业务。他所做的事情就是对通信线路进行搭线窃听,并监视加密的报文业务。这个系统的另外一个问题是Tren
3、t可能会成为瓶颈。他必须参与每一次密钥交换,如果Trent失败了,这个系统就会被破坏。,公开密钥密码的密钥交换,Alice和Bob使用公开密钥密码协商会话密钥,并用协商的会话密钥加密数据。在一些实际的实现中,Alice和Bob签了名的公开密钥可在数据库中获得。这使得密钥交换协议更容易,即使Bob从来没有听说过Alice,Alice也能够把信息安全地发送给Bob。(1)Alice从KDC得到Bob的公开密钥。(2)Alice产生随机会话密钥,用Bob的公开密钥加密它,然后将它传给Bob。(3)Bob用他的私钥解密Alice的信息。(4)他们两人用同一会话密钥对他们的通信进行加密。,中间人攻击,E
4、ve除了试图破译公开密钥算法或者尝试对密文作唯密文攻击之外,没有更好的办法。Mallory比Eve更有能力,他不仅能监听Alice和Bob之间的信息、还能修改信息、删除信息、并能产生全新的信息。当Mallory同Alice谈话时,他能模仿Bob,他也能模仿Alice同Bob谈话。(1)Alice将她的公开密钥传送给Bob。Mallory截取了这个密钥并将自己的公开密钥传送给Bob。(2)Bob将他的公开密钥传送给Alice。Mallory截取这个密钥,并将自己的公开密钥传送给Alice。(3)当Alice将用“Bob”的公开密钥加了密的信息传送给Bob时,Mallory截取它。由于信息实际上是
5、用Mallory的公开密钥加密的,他就用自己的私钥解密。再用Bob的公开密钥对信息重新加密,并将它传送给Bob。(4)当Bob将用“Alice”的公开密钥加密的信息传送给Alice时,Mallory截取它。由于信息实际上是用他自己的公开密钥加密的,他用他的私钥解密信息,再用Alice的公开密钥重新加密,并将它传送给Alice。,即使Alice和Bob的公开密钥存储在数据库中,这种攻击也是可行的。Mallory能够截取Alice的数据库查询,并用自己的公开密钥代替Bob的公开密钥,对Bob他也能做同样的事情,用自己的公开密钥代替Alice的公开密钥。他也能秘密地侵入数据库,用他自己的密钥代替Al
6、ice和Bob的密钥。接下来他就简单地等着Alice和Bob互相谈话,然后截取和修改信息,他成功了!“中间人攻击”是可行的,因为Alice和Bob无法验证他们正在作的互相交谈。假设Mallory没有导致任何值得注意的网络延迟,他们两人就没有办法知道有人正在他们中间阅读他们自认为是秘密的消息。,联锁协议,联锁协议是阻止“中间人攻击”的好办法。下面是这个协议怎么工作的:(1)Alice将她的公开密钥传送给Bob。(2)Bob将他的公开密钥传送给Alice。(3)Alice用Bob的公开密钥加密她的报文,并将加密报文的一半传送给Bob。(4)Bob用Alice的公开密钥加密他的报文,并将加密报文的一
7、半传送给Alice。(5)Alice将加了密的另一半报文传送给Bob。(6)Bob将Alice的两半报文合在一起,并用他的私钥解密;Bob将他加了密的另一半报文传送给Alice。(7)Alice将Bob两半报文合在一起,并用她的私钥解密。这里重要的一点是:只有报文的一半,没有另一半,报文是毫无用处的。Bob只有到步骤(6)步才能读Alice的报文,Alice只有到步骤(7)步才能读Bob的报文。,有很多办法实现它:(1)如果采用分组加密算法,每一分组的一半(例如,每隔一比特)能在每半个报文中发送。(2)报文的解密依赖于初始矢量,初始矢量可以在报文的另一半中发送。(3)首先发送的一半报文可能是加
8、密报文的单向hash函数,并且加密报文本身可能是另一半。为了了解这样做是怎样对Mallory制造麻烦的,让我们再看看他破坏协议的企图。他仍然能够在第(1)步和第(2)步中用自己的公开密钥代替Alice和Bob公开密钥。但现在,当他在第(3)步截取Alice的一半报文时,他不能用他的私钥对报文解密,然后用Bob的公开密钥再加密,他不得不虚构一完全不同的新报文,并将它的一半发送给Bob。当他在第(4)步截取Bob给Alice的一半报文时,他有同样的问题,他不能用他的私钥解密,并用Alice的公开密钥再加密,他又不得不虚构一完全不同的新报文,并将它的一半发送给Alice。当他在第(5)步和第(6)步
9、截取到实际报文的另一半时,他再去把他虚构新报文改回来,就太迟了。Alice和Bob之间的会话必会是完全不同的。Mallory也可以不用这种办法。如果他非常了解Alice和Bob,他就可以模仿他们之中的一个同另一人通话,他们绝不会想到正受到欺骗。但这样做肯定比坐在他们之间截取和读他们的报文更难。,使用数字签名的密钥交换,在会话密钥交换协议期间采用数字签名也能防止“中间人攻击”。Trent对Alice和Bob的公开密钥签名。签名的密钥包括一个已签名的所有权证书。当Alice和Bob收到密钥时,他们每人都能验证Trent的签名。那么,他们就知道公开密钥是哪个人的。密钥的交换就能进行了。Mallory
10、会遇到严重的阻力。他不能假冒Bob或者Alice,因为他不知道他们的私钥。他也不能用他的公开密钥代替他们两人的公开密钥,因为当他有由Trent签名的证书时,这个证书是为Mallory签发的。他所能做的事情就是窃听往来的加密报文,或者破坏通信线路,阻止Alice和Bob谈话。,这个协议也动用Trent,但KDC遭受损害的风险比第一种协议小。如果Mallory危及到Trent的安全(侵入KDC),他所得到的只是Trent的私钥。这个密钥使他仅能对新的密钥签名;它不会让他对任何会话密钥解密,或者读取任何报文。为了能够读往来的报文,Mallory不得不冒充网络上的某个用户,并且欺骗合法用户用他的假的公
11、开密钥加密报文。,Mallory能够发起这种攻击:持有Trent的私钥,他能够产生假的签名密钥去愚弄Alice和Bob。然后Mallory就能够在数据库中交换他们真正的签名密钥,或者截取用户向数据库的请求,并用他的假密钥代替。这使他能够发起“中间人攻击”,并读取他人的通信。这种攻击是可行的,但记住Mallory必须能够截取和修改信息。在一些网络中,截取和修改报文比被动地坐在网络旁读取往来的报文更难。在广播信道上,如无线网中,几乎不可能用其他报文来替代某个报文(整个网络可能被堵塞)。在计算机网络中做这种事要容易些,并且随时日的推移变得越来越容易,例如IP欺骗、路由攻击等等;主动攻击并不一定表示有
12、人用数据显示仪抠出数据,且也不限于三字符的代理。,密钥和报文传输,Alice和Bob在交换报文前不需要完成密钥交换协议。在下面的协议中,Alice在没有任何以前的密钥交换协议的情况下,将报文M传送给Bob:(1)Alice产生一随机会话密钥K,并用K加密M。EK(M)(2)Alice从数据库中得到Bob的公开密钥。(3)Alice用Bob的公开密钥加密K。EB(K)(4)Alice将加密的报文和加密的会话密钥传送给Bob。EK(M),EB(K)为了增加安全性,防止“中间人攻击”,Alice可对传输签名。(5)Bob用他的私钥将Alice的会话密钥K解密。(6)Bob用会话密钥将Alice的报文
13、解密。这个混合系统表示,公开密钥密码怎样被经常用于通信系统的。它可以和数字签名、时间标记以及任何其它安全协议组合在一起使用。,密钥和报文广播,Alice可能把加了密的报文传送给几个人。在这个例子中,Alice就把加密报文传送给Bob、Carol和Dave:(1)Alice产生一随机会话密钥K,并用K加密报文M。EK(M)(2)Alice从数据库中得到Bob、Carol和Dave的公开密钥。(3)Alice用Bob的公开密钥加密K,用Carol的公开密钥加密K,用Dave的公开密钥加密K。EB(K),EC(K),ED(K)(4)Alice广播加密的报文和所有加密的密钥,将它传送给要接收它的人。E
14、B(K),EC(K),ED(K),EK(M)(5)只有Bob、Carol和Dave能用他们的私钥将K解密。(6)只有Bob、Carol和Dave能用K将Alice的报文解密。这个协议可以在存储转发网络上实现。中央服务器能够将Alice的报文,连同特别加密的密钥一起转发给Bob、Carol和Dave。服务器不一定是安全的或者可信的,因为它不可能对任何报文解密。,鉴别,当Alice登录进入计算机(或自动柜员机、电话银行系统、或其它的终端类型)时,计算机怎么知道她是谁呢?计算机怎么知道她不是其他人伪造Alice的身份呢?传统的办法是用通行字来解决这个问题的。Alice先输入她的通行字,然后计算机确认
15、它是正确的。Alice和计算机两者都知道这个秘密通行字,当Alice每次登录时,计算机都要求Alice输入通行字。,利用单向函数的鉴别,Roger Needham和Mike Guy意识到计算机没有必要知道通行字。计算机只需有能力区别有效通行字和无效通行字就成。这种办法很容易用单向函数来实现。计算机存储通行字的单向函数而不是存储通行字。(1)Alice将她的通行字传送给计算机。(2)计算机完成通行字的单向函数计算。(3)计算机把单向函数的运算结果和它以前存储的值进行比较。由于计算机不再存储每人的有效通行字表,所以某些人侵入计算机,并偷取通行字的威胁就减少了。由通行字的单向函数生成通行字表是没用的
16、,因为单向函数不可能逆向恢复出通行字。,字典式攻击和Salt,用单向函数加密的通行字文件还是脆弱的。Mallory在他的业余时间编制1,000,000个最常用的通行字表,他用单向函数对所有1,000,000个通行字进行运算,并将结果存储起来。如果每个通行字大约是8个字节,运算结果的文件不会超过8M字节,几张软盘就能存下。现在Mallory偷出加密的通行字文件。把加密的通行字和已加密的可能通行字文件进行比较,再观察哪个能匹配。这就是字典式攻击,它的成功率令人吃惊。Salt是使这种攻击更困难的一种方法。,Salt是一随机字符串,它与通行字连接在一起,再用单向函数对其运算。然后将Salt值和单向函数
17、运算的结果存入主机数据库中。如果可能的Salt值的数目足够大的话,它实际上就消除了对常用通行字采用的字典式攻击,因为Mallory不得不产生每个可能的Salt值的单向hash值。这是初始化矢量的简单尝试。这儿的关键是确信当Mallory试图破译其他人的通行字时,他不得不每次试验字典里的每个通行字的加密,而不是只对可能的通行字进行大量的预先计算。,许多Salt是必需的。大多数Unix系统仅使用12比特的Salt。即使那样,Daniel Klein开发了一个猜测通行字的程序,在大约一星期里,经常能破译出一个给定的系统中的40%的通行字。David Feldmeier和Philip Karn编辑了大
18、约732,000个常用的通行字表,表中的通行字都和4096个可能的Salt值中的每个值都有联系。采用这张表,他们估计在一给定系统中,大约能够破译出30%的通行字。Salt不是万灵药,增加Salt的比特数不能解决所有问题。Salt只防止对通行字文件采用的一般的字典式攻击,不能防止对单个通行字的一致攻击。在多个机器上有相同的通行字的人使人难以理解,因为这样做并不比拙劣选用的通行字更好。,SKEY,SKEY是一种鉴别程序这很容易理解。为了设置系统,Alice输入随机数R,计算机计算f(R)、f(f(R)、f(f(f(R)等等大约100次。调用x1,x2,x3,。,x100这些数。计算机打印出这些数的
19、列表,Alice把这些数放入口袋妥善保管,计算机也顺利地在登录数据库中Alice的名字后面存储x101的值。当Alice第一次登录时,她输入她的名字和x100,计算机计算f(x100),并把它和x101比较,如果它们匹配,那么证明Alice身份是真的。然后,计算机用x101代替数据库中的x100。Alice将从她的列表中取消x100。Alice每次登录时,都输入她的列表中未取消的最后的数xI,计算机计算f(xI),并和存储在它的数据库中的xI+1比较。因为每个数只被用一次,并且这个函数是单向的,所以Eve不可能得到任何有用的信息。同样的,数据库对攻击者也毫无用处。当然,当Alice用完了她的列
20、表上面的数后,她必须重新初始化系统。,采用公开密钥密码的鉴别,谨慎而言,第一个协议有严重的安全问题。当Alice将她的通行字发给她的主机时,能够进入她的数据通道的任何人都可读取她的通行字。可以通过迂回的传输路径访问她的主机,在信道的任何一点Eve都有可能窃听Alice的登录序列。如果Eve可以存取主机的处理机存储器,那么在主机对通行字hash前,Eve都能够看到通行字。,公开密钥密码能解决这个问题。主机保存每个用户的公开密钥文件,所有用户保存自己的私钥。这里给出一个协议。当登录时,协议按下面进行:(1)主机发送一个随机字符串给Alice。(2)Alice用她的私钥对此随机字符串加密,并将此字符
21、串他和她的名字一起传送回主机。(3)主机在它的数据库中查找Alice的公开密钥,并用公开密钥解密。(4)如果解密后的字符串与主机在第一步中发送给Alice的字符串匹配,则允许Alice访问系统。,没有其他人能访问Alice的秘密密钥,因此不可能有任何人冒充Alice。更重要的是,Alice决不会在传输线路上将她的私钥发送给主机。窃听这个交互过程中的Eve,不可能得到任何信息使她能够推导出Alice的私钥和冒充Alice。私钥既长又难记,它可能是由用户的硬件或通信软件自动处理的。这就需要一个Alice信任的智能终端。但主机和通信线路都不必是安全的。,安全的身份证明协议采用下面更复杂的形式:(1)
22、Alice根据一些随机数和她的私钥进行计算,并将结果传送给主机。(2)主机将一不同的随机数传送给Alice。(3)Alice根据这些随机数(她产生的和她从主机接收的)和她的私钥进行一些计算,并将结果传送给主机。(4)主机用从Alice那里接收来的各种数据和Alice的公开密钥进行计算,以此来验证Alice是否知道自己的私钥。(5)如果她知道,则她的身份就被证实了。如果Alice不相信主机,就像主机不相信她一样,那么Alice将要求主机用同样方式证实其身份。,用联锁协议互相鉴别,Alice和Bob是想要互相鉴别的两个用户。他们每人有一个另一人知道的通行字:Alice通行字是PA,Bob的是PB。
23、下面的协议是行不通的:(1)Alice和Bob的交换公开密钥。(2)Alice用Bob的公开密钥加密PA,并将它传送给Bob。(3)Bob用Alice的公开密钥加密PB,并发送给Alice。(4)Alice解密她在第(3)步中接受到的信息并验证它是正确的。(5)Bob解密他在第(2)步中接受到的信息并验证它是正确的。,Mallory能够成功发起“中间人攻击”。(1)Alice和Bob交换公开密钥。Mallory截取这两个报文,他用自己的公开密钥代替Bob的,并将它发送给Alice。然后,他又用他的公开密钥代替Alice的,并将它发送给Bob。(2)Alice用“Bob”的公开密钥对PA加密,并
24、发送给Bob。Mallory截取这个报文,用他的私钥对PA解密,再用Bob的公开密钥加密,并将它发送给Bob。(3)Bob用“Alice”的公开密钥对PB加密,并发送给Alice。Mallory截取它,用他的私钥对PB解密。再用Alice的公开密钥对它加密,并发送给Alice。(4)Alice对PB解密,并验证它是正确的。(5)Bob对PA解密,并验证它是正确的。从Alice和Bob处看并没有什么不同,然而Mallory知道PA和PB。,秘密分割,设想你已发明了一种新的、特别粘、特别甜的奶油饼的馅,或者你已经制作了一种碎肉夹饼的调味料。重要的是:你都必须保守秘密。你只能告诉最信赖的雇员各种成分
25、准确的调合,但如果他们中的一个背叛到对手方时怎么办呢?秘密就会泄漏,不久,每个出售黄油的工厂将做出和你的一样的调味料。这种情况就要求秘密分割。有各种方法把消息分割成许多碎。每一片本身并不代表什么,但把这些碎片放到一块,消息就会重现出来。如果消息是一个秘方,每一个雇员有一部分,那么只有他们放在一起才能做出这种调味料。如果任意一雇员辞职带走一部分制法,这个信息本身是毫无用处的。,在两个人之间分割一消息是最简单的共享问题。下面是Trent把一消息分割给Alice和Bob的一个协议:(1)Trent产生一随机比特串R,和消息M一样长。(2)Trent用R异或M得到S:M R=S(3)Trent把R给A
26、lice,将S给Bob。为了重构此消息,Alice和Bob只需一起做一步:(4)Alice和Bob将他们的消息异或就可得到此消息:R S=M.如果做得适当,这种技术是绝对安全的。每一部分本身是毫无价值的。实质上,Trent是用一次一密乱码本加密消息,并将密文给一人,乱码本给另一人。前面讨论过一次一密乱码本,它们具有完全保密性。无论有多大计算能力都不能根据消息碎片之一就确定出此消息来。,把这种方案推广到多人也是容易的。为了在多个人中分割一消息,将此消息与多个随机比特异或成混合物。在下面的例子中,Trent把信息划分成四部分:(1)Trent产生三个随机比特串R、S、T,每个随机串与消息M一样长。
27、(2)Trent用这三个随机串和M异或得到U:M R S T=U(3)Trent将U给Alice,S给Bob,T给Carol,U给Dave。Alice、Bob和Carol、Dave在一起可以重构此消息:(4)Alice、Bob、Carol和Dave一起计算:R S T U=M,这是一个裁决协议,Trent有绝对的权力,并且能够做他想做的任何事情。他可以把毫无意义的东西拿出来,并且申明是秘密的有效部分。在他们将秘密重构出来之前,没有人能够知道它。他可以分别交给Alice、Bob、Carol和Dave一部分,并且在以后告诉每一个人,只要Alice、Carol和Dave三人就可以重构出此秘密,然后解
28、雇Bob。由于这是由Trent分配的秘密,这对于他恢复信息是没有问题的。然而,这种协议存在一个问题:如果任何一部分丢失了,并且Trent又不在,就等于将消息丢掉了。如果Carol有调味料制法的一部分,他跑去为对手工作,并带走了他的那一部分,那么其他人就很不幸了,Carol不可能重新产生这个秘方,但Alice、Bob、Dave在一起也不行。Carol的那一部分对消息来说和其它部分的组合一样重要。Alice、Bob和Dave知道的仅是消息的长度,没有其它更多的信息了。这是真的,因为R、S、T、U和M都有同样的长度;见到他们中的任何一个都知道它的长度。记住,M不是通常单词意义的分割,它是用随机数异或
29、的。,秘密共享,你正在为核导弹安装发射程序。你想确信一个疯子是不能够启动发射。你也想确信两个疯子也不能启动发射。在你允许发射前,五个官员中至少有三个是疯子。这是一个容易解决的问题。做一个机械发射控制器,给五个官员每人一把钥匙,并且你在允许他们起爆时,要求至少三个官员的钥匙插入合适的槽中。一个叫做门限方案的更复杂的共享方案,可在数学上做到这些甚至做得更多。起码,你可以取任何消息(秘密的秘方,发射代码,你的洗衣价目表),并把它分成n部分,每部分叫做它的“影子”或共享,这样它们中的任何m部分能够用来重构消息,更准确地说,这叫做(m,n)门限方案。,拿(3,4)门限方案来说,Trent可以将他的秘密调
30、味料秘方分给Alice、Bob、Carol和Dave,这样把他们中的任意三个“影子”放在一起就能重构消息。如果Carol正在渡假,那么Alice、Bob和Dave可以做这样的事。如果Bob被汽车撞了,那么Alice、Carol和Dave能够做这件事。然而如果Carol正在渡假期间,Bob被汽车撞了,Alice和Dave就不可能重构消息了。普通的门限方案远比上面所说的更通用。任何共享方案都能用它建造模型。你可以把消息分给你所在大楼中的人,以便重构它,你需要一楼的7个人和二楼的5个人,就能恢复此消息。如果有从三楼来的人,在这种情况下,你仅需要从三楼来的那个人和从一楼来的3个人及从二楼来的2个人,如
31、果有从四楼来的人,在这种情况下,你仅需要从四楼来的那个人和从三楼来的1个人,或从四楼来的那个人和从一楼来的2个人及从二楼来的1个人,或者,有骗子的秘密共享,有许多方法可欺骗门限方案,下面是其中的几种:情景1:上校Alice、Bob和Card在某个隔离区很深的地下掩体中。一天,他们从总统那里得到密码消息:“发射那些导弹,我们要根除这个国家的神经网络研究残余。”Alice、Bob和Carol出示他们的“影子”,但Carol却输入一随机数。她实际上是和平主义者,不想发射导弹。由于Carol没有输入正确的“影子”,因此他们恢复的秘密是错误的,导弹还是停放在发射井中。甚至更糟糕的是,没有人知道为什么会这
32、样。即使Alice和Bob一起工作,他们也不能证明Carol的“影子”是无效的。,有骗子的秘密共享,情景2:上校Alice和Bob与Mallory正坐在掩体中。Mallory假装也是上校,其他人都不能识破。同样的消息从总统那里来了,并且每人都出示了他们的“影子”,“哈,哈!”Mallory大叫起来,“我伪造了从总统那里来的消息,现在我知道你们两人的“影子”了。在其他人抓住他以前,他爬上楼梯逃跑了。,有骗子的秘密共享,情景3:上校Alice、Bob和Carol与Mallory一起坐在掩体中,Mallory又是伪装的(记住,Mallory没有有效的影子)。同样的消息从总统那里来了,并且每人都出示了他们的“影子”,Mallory只有在看到他们三人的“影子”后才出示他的“影子”。由于重构这个秘密只需要三个影子,因此他能够很快地产生一有效的“影子”并出示。现在,他不仅知道了秘密,而且没有人知道他不是这个方案的一部分。,不暴露共享的共享秘密,上述方案有一个问题。当每个人聚到一起重构他们的秘密时,他们暴露了他们的共享。其它不必出现这种情况。如果共享秘密是私钥(例如对数字签名),那么n个共享者中的每一个都可以完成文件的一部分签名。在第n部分签名后,文件已经用共享的私钥签名,并且共享者中没有人了解任何其它人的共享。,