A-->B hello,are you B?
B-->A A,This Is B{digest[A,This Is B]}B's-private-key
当B使用这个协议的时候,他知道自己发给A的是什么消息,并且不介意签名。他首先发送没有加密的消息“A,This Is B” 然后发送加密的摘要。A能够轻易的判断B是B,并且B没有签任何他不愿意签的东西。
3. 分发公钥与证书
B如何以一种可信赖的方式分发他的公钥呢?我们假设认证协议是这个样子的:
A-->B hello
B-->A Hi, I'm B, B's-public-key
A-->B prove it
B-->A A, This Is B{ digest[A, This Is B] } B's-private-key
如果使用这个协议的话,任何人都可以是B。你需要的只是一个公钥和私钥,你跟A慌称你是B,接着你用自己的公钥代替B的公钥,然后你通过用你的私钥加密的东西来证明,这样A就不能分辨出你不是B。
为了解决这个问题,标准化组织发明了一个叫做证书的东西,一个证书包括下面的一些内容:
- 证书发行者的名字
- 证书发送给的团体
- 主题的公钥
- 一些时间戳
证书是由证书发行者的私钥签名的,每个人都知道证书发行者的公钥(即证书发行者有一个证书,等等)。证书是一种把公钥绑定到名字的标准方式。
通过使用证书这种技术,每个人都可以通过检查B的证书来判断B是不是伪造的。假设B严格的控制着他的私钥,并且的确是b得到了他的证书,那么一切都好。下面是补偿协议:
A-->B hello
B-->A Hi, I'm B, B'S-certificate
A-->B prove it
B-->A A, This Is B{ digest[A, This Is B] } B's-private-key
当A收到B的第一条消息,她可以检查证书,核实签名(如上,使用摘要和公钥加密),然后,核实主题(B的名字)来判断那是不是真的B。这样她就相信公钥是B的公钥,然后要求B证明他的身份。B则重新进行一次上面的相同过程,计算消息的摘要,签名之后发给A,A可以用从证书得到的公钥检查B的消息摘要,从而判断B的身份。
4. 防止数据篡改与消息认证码
假设有个坏家伙H,虽然不能发现A和B交换的秘密,但是他可以干预并且破坏他们的对话。
举例来说,如果H位于A和B之间,他可以选择让大多数的消息返回以及向前继续传输没有改变,但是破坏了特定位的消息。
A-->H hello
H-->B hello
B-->H Hi, I'm B, B's-certificate
H-->A Hi, I'm B, B's-certificate
A-->H prove it
H-->B prove it
B-->H A, This Is B{ digest[A, This Is B] } B's-private-key
H-->A A, This Is B{ digest[A, This Is B] } B's-private-key
A-->H ok B, here is a secret B's-public-key
H-->B ok B, here is a secret B's-public-key
B-->H {some message}secret-key
H-->A Garble[ {some message}secret-key ]
H一直让数据没有改变的通过,直到A和B分享一个秘密。然后H通过改变B发送给A的消息来进入这个方式中。这时候A是相信B的,因此她就可能相信这个改变的消息,然后按照它来做。注意H并不知道这个秘密-他能做的所有事就是破坏用这个秘密的密钥加密的数据。他可能不能利用这个协议制造出一条有效的消息,但是下一次,他可能会幸运一点。
为了防止这种破坏,A和B在他们的协议中引入了一种消息认证码(MAC)。MAC是根据秘密的密钥和传输的数据计算出来的,上面描述的摘要算法的属性正好可以用于构造抵抗H的MAC功能。
MAC := Digest[ some message, secret ]
因为H不知道这个秘密的密钥,所以他无法计算出这个摘要的正确数值。即使H随机的改变消息,如果摘要数据很大的话,他成功的可能性也很小。举例来说,通过使用MD5,A和B能和他们的消息一起发送128位的MAC值。H猜中这个正确的MAC值的几率是 18,446,744,073,709,551,616 分之1。
下面是样本协议,又订正了一次:
A-->B hello
B-->A Hi, I'm B, B's-certificate
A-->B prove it
B-->A {digest[A, This Is B] } B's-private-key
ok B, here is a secret B's-public-key
{some message,MAC}secret-key
H现在有麻烦了,H可以改变任何的消息,但是MAC的计算将揭露他的欺诈行为。A和B能发现伪造的MAC值并停止会话,H就不能伪造B的消息了。
但是这样同样不能防范H鹦鹉学舌。如果H记录了会话的过程,他虽然可能不知道会话的内容,但是他可以重放这些会话。实际上,H能在A和B之间做一些真正龌龊的事。