3.5 多密钥公开密钥密码学
公开密钥密码使用两个密钥,用一个密钥加密的报文能用另一个密钥解密。通常一个密钥是私有的,而另一个是公开的。让我们假设Alice有一个密钥,Bob有另一个,那么Alice能够加密报文,并且只有Bob能把它解密; 反过来Bob能够加密报文,只有Alice能读它。
Colin Boyd推广了这个概念[217]。设想一种具有三个密钥KA,KB,KC的公开密钥密码的变体。表3.2给出了它的分配。
表3.2 三个密钥密钥分配
Alice |
KA |
Bob |
KB |
Carol |
KC |
Dave |
KA和KB |
Ellen |
KB和KC |
Frank |
KA和KC |
Alice可以用KA加密报文以便Ellen用KB和KC解密此报文。这样Bob和Carol可能冲突。Bob能对报文加密以便Frank能读它,Carol也能加密报文以便Dave能读它。Dave能用KA加密报文以便Ellen能读它,由于有KA , Frank也能读它,或者Dave同时用KA和KB加密以便Carol能读它。类似地,Ellen能够加密报文以便Alice和Dave或者Frank能读它。表3.3归纳了所有可能的组合,再也没有其它组合。
表3.3 三个密钥的报文加密
用作加密的密钥 |
必须用的解密密钥 |
KA |
KB和KC |
KB |
KA和KC |
KC |
KA和KB |
KA和KB |
KC |
KA和KC |
KB |
KB和KC |
KA |
这可以推广到n个密钥,如果密钥的某个子集用来加密报文,那么就需要用其它密钥来解密此报文。
广播报文
假设有100个工人在野外作业,你想给他们当中的一些人发送报文,但预先并不知道是该向哪些人发。可以为每个人单独加密报文或者为每种可能的组合都给出密钥。第一种选择需要增加很多通信量;第二种选择需要更多密钥。
采用多密钥密码方案就容易得多,我们将用三个工人:Alice、Bob和Carol。。将KA和KB给Alice,将KB和KC给Bob,将KC和KA给Carol。现在可以同想要通信的任何子集交谈。如果想发送一报文只有Alice能读它,就用KC加密此报文。当Alice接收到此报文时,她先用KA,然后再用KB解密。如果想发送一报文只有Bob能读它,就用KA加密;用KB加密时,只有Carol才能读它。如果发送一报文使Alice和Bob都能读它,就用KA和KC对它加密,等等。
这可能不会有什么激动人心的地方,但对于100个工人来说,它就非常管用了。单独的报文表示和每个工人共享一个密钥(总共100个密钥)和每个报文。每个可能子集的密钥表示共有2100-2个不同的密钥(针对全部工人的报文和不对工人的报文除外)。这里的方案只需要一个加密报文和100个不同的密钥,这个方案的缺陷是你不得不广播哪个工人的子集能够读报文,否则,每个工人将不得不试所有可能的密钥组合,以寻找正确的一组密钥,甚至只要意向接收者的名字也行得通。至少,要想实现简单,每个人实际上得到大量的密钥数据。
有其它用于报文广播的技术,其中有一些避免了前面的问题,这些将在22.7节中讨论。