数学科普

如何分摊秘密(二)

作者:安迁

二、掌握秘密和知道秘密

回到《鹿鼎记》的宝藏上,必须说金庸在设计藏宝图这个情节时是有一番考虑的。

按照陶红英所说,“将收藏财物的秘密所在,绘成地图,由八旗旗主各执一幅”,单独看的话到也可以理解成每个旗主都有一幅完整地图。但是这样就有问题了,也许会有某个旗主不告诉其他人,自己偷偷去把财宝掘出。所以这种“多个人里每人都独自地完整地掌握秘密”的方法是不好的,不能满足旗主会议的要求。

如果是绘一张地图,但不割成碎片,只割成面积相同的八块,然后八个旗主一人一块怎么样?这也不合适。要是那地图象动画片里的海盗藏宝图那样,画了宝藏周围地形,然后在藏宝处画个×号,那么割开的八块小地图上,带×的那块信息量显然比较大。地图割开以后虽说不完整了,但是仍有可能从局部的特征,比如海岸线的形状,山脉的走向等等,猜测到所绘的区域。就算分到的地图小块上没有藏宝处的×,如果猜出了地图所绘的区域,那么就可推知宝藏离此不远。打叉的那块就更占便宜了,要是猜出了局部区域,就跟拿到完整地图没啥区别。

如果地图上还有文字说明,那就更糟。比如宝藏埋在鹿鼎山,要是你拿的那块地图上有鹿鼎两字,泄露的消息也就够多的了。碰上象《基督山伯爵》里法利亚长老那种能把烧掉一半的纸上的文字中缺少的部分猜出来的高人,你撕半张纸给他和把整张纸给他是一样的。这就谈不上“分摊秘密”了。

所以金庸就设想了先把地图剪成小碎片,再把碎片分成八份的方法。剪得足够碎,“图文都已剪破,残缺不全”,那么每小片上的地图的局部特征就不明显;而且各人拿到的碎片都是随机的,“百余片碎皮各不相接,难以拼凑”;光凭八分之一的碎片数量很难拼出较大的局部来,“要八部经书都得到了,才拼成得一张地图”。

这不失为一种好方法。但是如果只有两个人来分摊秘密怎么办?那时候凭一个人手上的碎片,拼出较大的局部部分还是比较有可能的。而且这时碎片分布在原来的整个地图上,不再聚集在一个角落里,通过观察不完整的地图来得出整幅地图的一些信息也就更有可能。

这种情况在有多个但不是所有人都是同谋的时候更明显。比如八旗中的六个旗主说,另外两个不愿挖宝,但我们六个愿意。结果六个旗主拿了八份地图碎片中的六份,也就是3/4数量的碎片来拼,就能拼出一幅虽然到处是破洞,但是很可能看得清的地图来。这就违背八旗会议的原意了——虽然说这也可能是个优点,万一八旗中有一旗旗主不小心把他那一份地图搞丢了,用剩下的七份碎片也还有比较大的可能可以挖到宝,不至于因而就使整个秘密无法揭晓。

这就提出了一个新问题:怎样在若干人之中分摊秘密,使得只要同意揭开秘密的在规定人数以上(而不一定是所有人),秘密就可以被揭开,而如果同意的人数低于这个数目,秘密就无法揭晓?比如八旗会议可以规定,只要有任何六个旗主决定挖宝,他们就可以拼出一幅完整的而不是满是破洞的地图来,但是如果只有五个旗主同意,他们就一定无法拼出地图来,甚至只是多知道一些信息也不行。小说中切成碎片的方法显然不行:六个旗主拼出来的地图会有很多洞,不能保证一定能找到宝藏;五个旗主拼出来的地图要比六个的更破烂一些,但是未必就一定不能依此找到宝藏。

再举个例子。

一个老板有两个手下甲和乙,要他们去某地拿某账号付一下某笔款项,而这个账号有个6位数密码。这个密码不能完整地告诉给两人中的某个人,否则这个人可能独自偷偷拿了款潜逃。如果这个密码是123456,简单(而又天真)的分摊秘密的方法是:告诉甲前三位123,告诉乙后三位456,到付款的时候两人把这密码的两部分合起来即可。

这当然可以,但是密码的保险性显然降低了。本来如果我根本不知道密码,那么密码从000000到999999都有可能,一共有1000000种。每种的可能性都一样,都是1/1000000。现在甲知道了前三位123,那么对甲来说,密码的可能性就只有后三位的变化了,只剩1000种;虽说也不少,但总没有原来的1000000种保险。

况且这个方法不好推广。要是觉得两个人太容易合谋,就派6个人去,每人记一位密码。可如果里面5个人合谋,那他们就只要猜剩下那个人记的数字是多少,最多猜十次就猜到了。

这个方法的不利之处前面就讲过了:在这种分摊秘密的方法下,每个人都掌握了点秘密,每个人也都知道一点秘密。注意这里“掌握”和“知道”的区别。掌握是说,这部分秘密你要是不泄露,别人无法知道,由你决定在某场合是不是要把你的这部分秘密和其他人的部分秘密合起来得到整个秘密。你要是真到付款的时候也不愿意说密码,那款也没法付。八旗某旗主就是不愿挖宝,就是不拿出他那份地图碎片来,别人就没办法得到那份碎片。这是“掌握”,但不一定是“知道”。单独一个八旗旗主虽然有一份地图碎片,但是光凭这些碎片,他对宝藏在哪里一点头绪都不知道,不比其他没有碎片的人知道得更多。

这点要再展开来讲讲。所谓“知道某个秘密”,并不一定要确确实实地知道这个秘密是什么。如果你知道那个秘密不是什么,而别人不知道这点,对这个秘密,你就知道得比别人多了。香港有八卦杂志说明星的八卦事,也不真名实姓说是谁的事情。大家就猜,这谁啊。过一阵说那是某伟,你还是不知道那是谁,名里以“伟”结束的艺人多了。但是你已经知道得比原来多了。如果杂志说此人“大眼睛”,那就更模糊了,多大的眼睛算是大眼睛?但我们知道,是曾志伟的可能性比较小;梁朝伟?可能性比前面这个大点但也不太象。从这个例子我们可以看到,就算我们得到的只是可能性的变化的信息,也可以说我们知道了更多的秘密。

“密码的前三位是123”这样的分摊方法,不但让分摊人掌握了整个秘密的一部分,而且还让原本密码的1000000种可能性,减少到了1000种,这就泄露了整体秘密的一部分,让掌握秘密的人知道了比不掌握秘密的人知道的更多的信息。地图碎片也是同一个道理,一个人掌握的碎片还是泄露了整幅地图的一部分信息,而同谋人数多起来时,这种信息的泄露就越来越严重。如果地图不被割碎,只是一个旗主一块,这种泄露秘密的现象就更严重了。

放在我们面前的任务是:让每个人都掌握一部分秘密——这是“分摊”所要求的,但是被掌握的这部分秘密却不会向掌握秘密者泄露任何被分摊的秘密的信息;也就是说,我们希望掌握秘密的每个个体对秘密的了解程度,不比不掌握秘密的人对秘密的了解程度更高。

更进一步,即使有同谋,几个同谋把自己掌握的信息合起来后,也无法提高对秘密的了解程度。分摊《鹿鼎记》的地图的理想方式应该是这样的:八旗中的七个旗主如果把自己掌握的地图碎片拿出共享,他们也无法取得哪怕一丁点他们以前不了解的秘密;只有第八个旗主也参与进来时,他们才能完整地了解整个秘密。

更进一步,我们还希望能有“不必所有人都同意,只要同意人数超过某个预先确定的值就能揭秘;但低于此数的同谋者无法获得丝毫额外的秘密信息”的分摊策略。

使用古代技术,要按上面的要求来分摊秘密大概是个不可完成的任务。我们接下来要看的是,如何使用现代的数学知识,在数字世界里实现这个任务——一幅地图,当它被数字化后,也无非是一个(很大的)数字而已。

<(一)
(三)>