西西河

主题:如何分摊秘密(一)——从《鹿鼎记》中的四十二章经说起 -- 明日枯荷包

共:💬63 🌺987
全看分页树展 · 主题 跟帖
家园 如何分摊秘密(五)——更多人的秘密

那么如果是三个人或更多人要分摊秘密怎么办?

非常方便。仍旧是那个6位数密码,假设现在老板要派三个人甲乙丙去。

按照原来的老方法,现在老板随机产生两个6位数,比如153607和582149,把它们分别给甲和乙,然后用真正的密码123456去逐位减这两个数字:

1-1-5 = -5 -->5

2-5-8 = -11 -->9

3-3-2 = -2 -->8

4-6-1 = -3 -->7

5-0-4 = 1 -->1

6-7-9 = -10 -->0

总之如果结果不在0-9中就加减若干个10,使得结果成为一个0-9之间的数。老板得到598710,给丙。

同样的分析,甲和乙凭手里的那个数能增加他对真正的密码是什么的信息吗?不能,那俩数根本就是随便产生出来的。丙靠他的数也一样不行,和前面两个人的情况中乙的情况差不多。

如果其中有两人合谋怎么办?比如甲和乙合谋——没用,他们那俩数都是随便产生出来的。甲和丙合谋?每一个可能的最终密码值都对应着一个乙手里的那个数的可能值,可是乙手里的那个数的可能是000000-999999中的任何一个,概率都是1/1000000,于是真正的密码还是在000000-999999中的任何一个,概率还是1/1000000。通过甲和丙的同谋,还是无法带给甲和丙任何他们以前不知道的事情。乙和丙的同谋情况也一样。

但是如果甲乙丙共同决定要得到密码,只要把他们手上三个数逐位加(可能要减去若干个10使得结果在0-9间)就可以了:

1+5+5 = 11 ->1

5+8+9 = 22 ->2

3+2+8 = 13->3

6+1+7 = 14->4

0+4+1 = 5->5

7+9+0 = 16->6

人数再多的话,多产生一些随机数即可。N个人产生N-1个随机数,最后一个人则分配给真正密码逐位减这些数字的结果。

很容易看出来,就算密码位数不是6位,而是非常非常长,这个方法也一样可行。如今啥都是数字化的,一个文件其实就是一个大数字,文字的记录是文本文件(或者Word文件也无所谓),如果是一张地图,或者是拍了些见不得人的照片啥的,就是个图像文件,一段录像是一个视频文件。既然这些文件无非都分别是一个(也许有很多很多位的)数,那么就可以用前面说的这个方法来分摊到若干人上。这个被分摊的秘密也不一定非得表示成10进制的,比如计算机文件一般是以二进制形式储存传送的,也可以看作是十六进制甚至是更大的数字进制的,假设是P进制,那就把前面那个随机数产生器改变一下,让它产生合适范围(0到P-1之间)的数字。这样我们就得到了一个在许多人之间分摊一个任意大小的秘密(大小不是说秘密泄露的严重性,是说内容多少)的方法。这个方法可以保证每个人“掌握”却不“知道”,而且即使是有若干同谋在一起也无法知道最终秘密更多的信息。只有在所有人都同意揭开秘密的时候,大家才能知道这个秘密。

不过正如前面所言,这个方法好是好,但未免过分严格了一点。要是在100个人中这么分摊秘密,万一有一个人三长两短把他掌握的秘密弄丢了怎么办?大家拿着99份分摊的秘密,可是对知道最终秘密一点用都没有。所以我们还得想出一个办法,能够只要求达到规定的一定人数比如说80个人,而不要求全体都同意,就可以揭开秘密。

喝水……

通宝推:明心灵竹,
全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河