5.8 数字证明邮件
用作签约的同时不经意传输协议也可以用于计算机证明邮件[529],但要做一些修改。假设Alice要把一条消息送给Bob,但如果没有签名的收条,她就不让他读出。确实,在实际生活中是邮政工作者处理这一过程,但相同的事可以使用密码术来做。Whitfield Diffie最先在文献[490]中讨论了这个问题。
乍一看,同时签约协议能做此事。Alice简单地用一个DES密钥加密她的消息。她的一半协议可以是象这样一些东西:“这是这个DES密钥的左半:32F5。”Bob的那一半可以是这样:“这是我的收条的左半。”其他一切保持不变。
要弄明白为什么这个协议不能工作,请记住这个协议依赖这样一个事实,即在第(5)步中的不经意传输保证双方是诚实的。他们两人都知道他们发送给另一方一个有效的半密钥,但都不知道是哪一半。他们在第(8)步中没有进行欺骗是因为做了坏事而不被发觉的机会太小。如果Alice要发送给Bob的不是一份消息,而是一个DES密钥的一半,在第(6)步中Bob没有办法检查这个DES密钥的有效性。Alice仍然能检查Bob的收条的有效性,所以Bob仍然不得不是诚实的。Alice可以随便发送给Bob一些无用的DES密钥,直到Alice收到一个有效的收条时才知道其中的不同。Bob实在是命运多咎。
克服这个问题需要对协议进行一些调整:
(1)Alice用一个随机的DES密钥加密她的消息,并把它发送给Bob。
(2)Alice产生n对DES密钥。每对密钥的第一个密钥是随机产生的;每对密钥的第二个密钥是第一个密钥和消息加密密钥的异或。
(3)Alice用她的2n个密钥的每一个加密一份假消息。
(4)Alice把所有加密消息都发送给Bob,保证他知道哪些消息是哪一对的哪一半。
(5)Bob产生n对随机DES密钥。
(6)Bob产生一对指明一个有效收条的消息。比较好的消息可以是“这是我收条的左半”和“这是我收条的右半”,再附加上某种类型的随机比特串。他做了n个收条对,每个都编上号。如同先前的协议一样,如果Alice能产生一个收条的两半(编号相同)和她的所有加密密钥,这个收条被认为是有效的。
(7)Bob用DES密钥对加密他的每一对消息,第i份消息用第i个密钥,左半消息用密钥对中的左密钥,右半消息用密钥对中的右密钥。
(8)Bob把他的消息对发送给Alice,保证Alice知道哪些消息是哪一对的哪一半。
(9)Alice和Bob利用不经意传输协议发送给对方每个密钥对。那就是说,对n对中的每一对而言,Alice或者送给Bob用来加密左半消息的密钥,或者送给Bob用来加密右半消息的密钥。Bob也同样这么做。他们可以或者交替传送这些一半,或者一方发送n个,然后另一方再发送n个这都没有关系。现在Alice和Bob都有了每个密钥对中的一个密钥,但是都不知道对方有哪些一半。
(10)Alice和Bob都解密他们能解的那些一半,并保证解密消息是有效的。
(11)Alice和Bob送给对方所有2n个DES密钥中的第一个比特(如果他们担心Eve可能会读到这个邮件消息,那么他们应当对相互的传输加密)。
(12)Alice和Bob对所有2n个DES密钥中的第二比特、第三比特都重复第(11)步,如此继续下去,直到 所有DES密钥的所有比特都传送完。
(13)Alice和Bob解密消息对中的余下一半。Alice有了一张来自Bob的有效收条,而Bob能异或任一密钥对以得到原始消息加密密钥。
(14)Alice和Bob交换在不经意传输协议期间使用的私钥,同时每一方验证另一方没有进行欺骗。
Bob的第(5)至第(8)步和Alice和Bob的第(9)至第(12)步都和签约协议相同。意想不到的手法是Alice的所有假消息。它们给予Bob一些办法来检查第(10)步中Alice的不经意传输的有效性,这可以迫使Alice在第(11)至第(13)步期间保持诚实。并且如同同时签约协议一样,完成协议要求Alice的一个消息对的左右两半。