协议(protocol)是一系列步骤,它包括两方或者多方,设计它的目的是要完成一项任务。
“一系列步骤”:意味着协议从开始到结束的一个序列,每一步骤必须一次执行,在前一步完成之前,后面的步骤都不能执行
“包括两方或者多方”:意味着完成这个协议至少需要两个人
“设计它的目的是要完成一项任务”:意味着协议必须做一些事情。

计算机仲裁者有下面几个问题:
1,如果你知道后对方是谁,并能见到他的面,那么很容易找到和相信中立的第三方。而互相怀疑的双方很可能也怀疑在网络别的什么地方并不露面的仲裁者。
2,计算机网络必须负担仲裁者的费用。
3,在任何仲裁协议中都有延迟的特性
4,仲裁者必须处理每一笔交易。
5,由于在网络中每人都必须相信仲裁者,对试图破坏网络的人来说,仲裁者便是一个易受攻击的弱点。


裁决协议:在有争议的时候才执行,这种特殊的仲裁者叫做裁决者。

裁决者和仲裁者之间的不同是裁决者并不总是必需的。
裁决协议是为了发现欺骗,而不是为了阻止欺骗。发现欺骗起了防止和阻碍欺骗的作用。

被动攻击试图获取协议中各方的消息。它们收集协议各方所传送的消息,并试图对它们进行密码分析。而主动攻击可能有更多的目的。攻击者可能对获取消息感兴趣,也可能降低系统性能,破坏已有的消息,或者获得非授权的资源存取。

好的密码系统的全部安全性只与密钥有关,与算法没有任何关系。

对称密码算法存在下面的问题:
1,密钥必须秘密地分配,它们比任何加密的消息更有价值,因为知道了密钥就意味着知道了所有消息。对于遍及世界的加密系统,这可能是令人沮丧的任务,需经常派信使将密钥传递到目的地。
2,如果密钥被泄露了(被偷窃,猜出来,被逼迫交出来,受贿等),那么Eve就能用该密钥去解密所有传送的消息,也能够假装是协议中的一方,产生虚假消息去愚弄另一方。
3,假设网络中每对用户使用的不同的密钥,那么密钥总数随着用户数的增加迅速增加。n和用户的网络需要n(n-1)/2个密钥。例如,10个用户互相通信需要45个不同的密钥,100个用户需要4950个不同的密钥。这个问题可以通过将用户数量控制在较小数目来减轻,但这并不总是可能的。


单向函数(one-way function)的概念是公开密钥密码的中心。尽管它本身并不是一个协议。

陷门单向函数(trapdoor one-way function)是有一个秘密陷门的一类特殊的单向函数,它在一个方向上易于计算而反方向却难于计算。但是如果你知道那个密码,你也能很容易在另一个方向上计算出这个函数。也就是说,已知x,易于计算f(x);而已知f(x),却难于计算x。然而,有一些秘密消息y,一旦给出f(x)和y,就很容易计算x。

散列函数就是把可变长度输入串(叫做预映射,pre-image)换转成固定长度(经常变短)输出串(叫做散列值,hash-value)的一种函数。

消息鉴别码(Message Authentication Code,MAC)也叫数据鉴别码(DAC),它是带有秘密密钥的单向散列函数。

公开密钥密码学:从公开密钥很难推断出私人密钥。持有公开密钥的任何都可加密消息,但却不能解密。只有持有私人密钥的人才能解密。

在现实世界中,公开密钥算法不会替代对称算法。公开密钥算法不用来加密消息,而用来加密密钥。这样做有两个理由:
1,公开密钥算法比对称算法慢,对称算法一般比公开密钥算法块1000倍。
2,公开密钥密钥系统对选择明文攻击是脆弱的,

把公开密钥密码用于密钥分配,解决了很重要的密钥管理问题。

签名为什么会引人注目呢?
1,签名是可信的,签名使文件的接收者相信签名这是慎重地在文件上签字的
2,签名不可伪造。签名证明是签字者而不是其他人慎重地在文件上签字的
3,签名不可重用的。签名是文件的一部分,不法之徒不可能将签名移到不同的文件上,
4,签名的文件是不可改变的。在文件签名后,文件不能改变。
5,签名是不可抵赖的。签名和文件是物理的东西。签名者事后不能声称他没有签过名。

使用对称密码系统和仲裁者对文件签名-----这种方法在理论上这种协议或许是可行的,单实际上不能很好的运转


使用公开密钥密码系统对文件签名
基本协议很简单:
1,Alice用他的私人密钥对文件加密,从而对文件签名
2,Alice将签名的文件传给Bob
3,Bob用Alice的公开密钥解密文件,从而验证签名

文件签名和时间标记
因此,数字签名经常包括时间标记。

使用公开密钥密码系统和单向散列函数对文件签名
1,Alice产生文件的单向散列值
2,Alice用他的私人密钥对散列值加密,由此对文件签名。
3,Alice将文件和签名的散列值送给Bob
4,Bob用Alice发送的文件产生文件的单向散列值,然后用数字签名算法对散列值进行运算,同时用Alice的公开密钥对签名的散列值解密。如果签名的散列值与自己产生的散列值匹配,签名就是有效的。

有时签名过程也叫做“用私人密钥加密”,验证过程也叫做“用公开密钥解密”。

采用单向散列函数,很容易实现多重签名:
1,Alice对文件的散列签名
2,Bob对文件的散列签名
3,Bob将他的签名交给Alice
4,Alice把文件、他的签名和Bob的签名发给Carol。
5,Carol验证Alice和Bob的签名

带加密的数字签名
通过把公开密钥密码和数字签名结合起来,能够产生一个协议,可把数字签名的真实性和加密的安全性结合起来。想象你妈妈写的一封信:签名提供了原作者的证明,而信封提供了秘密性。
1,Alice用她的私人密钥对消息签名:Sa(M)。
2,Alice用Bob的公开密钥对签名的消息加密,然后发送给Bob:Eb(Sa(M));
3,Bob用他的私人密钥解密:Db(Eb(Sa(M)))=Sa(M)
4,Bob用Alice的公开密钥验证并且恢复消息:Va(Sa(M))=M;

10-03 20:05