第一篇 密码协议

第二章 协议结构模块

2.1  协议介绍

    密码学的用途是解决种种难题(实际上,很多人忘记了这也是计算机的主要用途)。密码学解决的各种难题围绕机密性、鉴别、完整性和不诚实的人。你可能了解各种算法和技术,除非它们能够解决某些问题,否则这些东西只是理论而已,这就是为什么我们要先了解协议的原因。

    协议是一系列步骤,它包括两方或多方,设计它的目的是要完成一项任务。这个定义很重要 :“一系列步骤”意味着协议是从开始到结束的一个序列,每一步必须依次执行,在前一步完成前,后面的步骤都不能执行 ;“包括两方或多方”意味着完成这个协议至少需要两个人,单独的一个人不能构成协议,当然单独的一个人也可采取一系列步骤去完成一个任务(例如烤蛋糕),但这不是协议(另外一些人必须吃蛋糕才构成协议);最后,“设计它的目的是要完成一项任务”意味着协议必须做一些事。有些东西看起来像协议,但不完成一个任务,那也不是协议,只是浪费时间而已。

    协议还有其他特点:

        (1)协议中的每人都必须了解协议,并且预先知道所要完成的所有步骤。

        (2)协议中的每人都必须同意遵循它。

        (3)协议必须是不模糊的,每一步必须明确定义,并且不会引起误解。

        (4)协议必须是完整的,对每种可能的情况必须规定具体的动作。

    此书中的协议就安排成一系列步骤,并且协议是按照规定的步骤线形执行的,除非指定它转到其他步骤。每一步至少要做下列两件事中的一件,即由一方或多方计算,或者是在各方中传送信息。

    密码协议是使用密码学的协议。参与该协议的伙伴可能是朋友和完全信任的人,或者也可能是敌人和互相完全不信任的人。密码协议包含某种密码算法,但通常,协议的目的不仅仅是为了简单的秘密性。参与协议的各方可能为了计算一个数值想共享它们的秘密部分、共同产生随机系列、确定互相的身份、或者同时签署合同。在协议中使用密码的目的是防止或发现偷听者和欺骗。如果你以前没有见过这些协议,它们会从根本上改变你的思想,相互之间不信任的各方也能够在网络上完成这些协议。一般地,这能够被陈述为:

        不可能完成或知道得比协议中规定的更多。

    这看起来很难。接下来的几章讨论了许多协议。在其中的一些协议中,参与者中的一个有可能欺骗其他人。偷听者也可能暗中破坏协议或获悉秘密信息。一些协议之所以失败,是因为设计者对需求不是定义得很完备。其它一些失败是因为协议的设计者分析得不够充分。就像算法一样,证明它不安全比证明它安全容易得多。

协议的目的

    在日常生活中,几乎所有的事情都有非正式的协议:电话订货、玩扑克、选举中投票,没有人认真考虑过这些协议,这些协议随着时间的推移而发展,人们都知道怎样使用它们,而且它们也很有效。

    越来越多的人通过计算机网络交流,从而代替了面对面的交流。计算机需要正式的协议来完成人们不用考虑就能做的事情。如果你从一个州迁移到另一个州,可能会发现投票亭与你以前使用的完全不同,你会很容易去适应它。但计算机就不那么灵活了。

    许多面对面的协议依靠人的现场存在来保证公平和安全。你会交给陌生人一叠现金去为你买食品吗?如果你没有看到他洗牌和发牌,你愿意和他玩扑克吗?如果没有匿名的保证,你会将秘密投票寄给政府吗?

    那种假设使用计算机网络的人都是诚实的想法,是天真的。天真的想法还有:假设计算机网络的管理员是诚实的,假设计算机网络的设计者是诚实的。当然,绝大多数人是诚实的,但是不诚实的少数人可能招致很多损害。通过规定协议,可以查出不诚实者企图欺骗的把戏,还可开发挫败这些欺骗者的协议。

    除了规定协议的行为外,协议还根据完成某一任务的机理,抽象出完成此任务的过程。不管是IBM PCs还是VAX机或者传真机,通信协议是相同的。我们能够考查协议,而不用囿于具体的实现上。当我们坚信有一个好的协议时,在从计算机到电话再到智能烘箱的所有事情中,我们都能够实现它。

游戏角色

    为了帮助说明协议,我列出了几个人作为助手(参见表2.1)。Alice和Bob是开始的两个人。他们将完成所有的两人协议。按规定,由Alice 发起所有协议,Bob响应。如果协议需要第三或第四人,Carol和Dave将扮演这些角色。由其他人扮演的专门配角,将在后面介绍。

表2.1 剧中人:

Alice                                   所有协议中的第一个参加者

Bob                                     所有协议中的第二个参加者

Carol                                   在三、四方协议中的参加者

Dave                                   在四方协议中的参加者

Eve                                     窃听者

Mallory                               恶意的主动攻击者

Trent                                  值得信赖的仲裁者

Walter                                 监察人:在某些协议中保护Alice和Bob

Peggy                                 证明人

Victor                                  验证者

仲裁协议

    仲裁者是在完成协议的过程中,值得信任的公正的第三方(参见图2.1中的a),“公正”意味着仲裁者在协议中没有既得利益,对参与协议的任何人也没有特别的利害关系。“值得信任”表示协议中的所有人都接受这一事实,即仲裁者说的都是真实的,他做的是正确的,并且他将完成协议中涉及他的部分。仲裁者能帮助互不信任的双方完成协议。

图 2.1 协议类型

    在现实社会中,律师经常作为仲裁者。例如,Alice要卖汽车给不认识的Bob。Bob想用支票付帐,但Alice不知道支票的真假。在Alice将车子转给Bob前,她必须查清支票的真伪。同样,Bob也并不相信Alice,就像Alice不相信Bob一样,在没有获得所有权前,也不愿将支票交与Alice。

    这时就需要双方都信任的律师。在律师的帮助下,Alice和Bob能够用下面的协议保证互不欺骗。

        (1)Alice将车的所有权交给律师。

        (2)Bob将支票交给Alice。

        (3)Alice在银行兑现支票。

        (4)在等到支票鉴别无误能够兑现的时间之后,律师将车的所有权交给Bob。如果在规定的时间内支票不能兑现,Alice将证据出示给律师,律师将车的所有权和钥匙交还给Alice。

    在这个协议中,Alice相信律师不会将车的所有权交给Bob,除非支票已经兑现;如果支票不能兑现,律师会把车的所有权交还给Alice。而Bob相信律师有车的所有权,在支票兑现后,将会把车主权和钥匙交给他。而律师并不关心支票是否兑现,不管在什么情况下,他只做那些他应该做的事,因为不管在哪种情况,他都有报酬。

    在这例子中,律师起着担保代理作用。律师也作为遗嘱和合同谈判的仲裁人,还作为各种股票交易中买方和卖方之间的仲裁人。

    银行也使用仲裁协议。Bob能够用保付支票从Alice手中购买汽车:

        (1)Bob开一张支票并交到银行。

        (2)在验明Bob的钱足以支付支票上的数目后,银行将保付支票交与Bob。

        (3)Alice将车的所有权交给Bob,Bob将保付支票交给Alice。

        (4)Alice兑现支票。

    这个协议也是有效的,因为Alice相信银行的证明。Alice相信银行保存有Bob的钱给她,不会将她的钱用于蚊虫大量滋生的国家的财政不稳的房地产业务。

    公证人是另一种仲裁人,当Bob从Alice接收到已公证的文件时,他相信Alice签署的文件是她自己亲自签署的。如果有必要,公证人可出庭证实这个事实。

    仲裁人的概念与人类社会一样悠久。总是有那么一些人——统治者、牧师等等,他们有公平处理事情的权威。在我们的社会中,仲裁者总是有一定社会地位和声望的人。而背叛公众的信任是很危险的事情。例如,视担保为儿戏的律师几乎肯定会被开除出律师界。现实世界里并不总是如此美好的,但它确是理想的。

    这种思想可以转化到计算机世界中,但计算机仲裁者有下面几个问题:

        (1)如果你知道对方是谁,并能见到他的面,就很容易找到和相信中立的第三方。互相怀疑的双方很可能也怀疑在网络别的什么地方并不露面的仲裁者。

        (2)计算机网络必须负担仲裁者的费用。就像我们知道的律师费用,谁想负担那种网络费用呢?

        (3)在任何仲裁协议中都有延迟的特性。

        (4)仲裁者必须处理每一笔交易。任何一个协议在大范围执行时,仲裁者是潜在的瓶颈。增加仲裁者的数目能缓解这个问题,但费用将会增加。

        (6)由于在网络中每人都必须相信仲裁者,对试图破坏网络的人来说,仲裁者便是一个易受攻击的弱点。

    尽管如此,仲裁者仍扮演一个角色。在使用可信任的仲裁协议中,这个角色将由Trent来扮演。