美学的思维形式:盲打扑克
逻辑思维题内容:
两个象棋大师可以在浴室一边冲澡一边大喊“炮八平五”、“马八进七”,等澡洗完了,一盘精彩的棋局或许也就结束了。棋类游戏之所以可以“盲下”,就是由于在棋类游戏中,双方的局面信息都是完全公开的。
现在两个人想通过一部电话打牌,但他们都不信任对方。打牌和下棋不同,各人在开局时并不知道对方手里有哪些牌。因此如果你说出方块A,你怎么证明自己手里有方块A,或者怎么在牌局结束后证明自己没有作弊?也就是有没有可能仅通过一部电话实现某种扑克牌协议,该协议不仅能够实现随机的、隐蔽的、公平的发牌,而且不需要其他东西的帮助,并且保证游戏的公正性呢?
答案:以下以一手五张牌为例,说明怎么随机、隐蔽、公平地实现“两人各摸五张牌”。不妨用数字1~54来表示54张牌。发牌前,甲在每个数字前附加一个随机字符串前缀,然后给每个字符串都加上一把锁,把54张加密的扑克牌传给乙。乙收到了扑克牌一看,这些牌他一张也不认识,每张牌上面都有甲的锁。乙从里面挑选5张牌出来。他自己不知道这5张牌是什么,但是他也不能让甲知道,于是他在这5张牌上再各加一把锁,传给甲。甲可以解开自己当初上的那把锁,但牌上还有一把锁,甲拿它没办法,只能原封不动地传回去。乙把剩下的锁解开,得到自己的5张牌。然后呢,乙手上不是还剩了49张牌吗?乙从中随便挑5张出来给甲,由甲解开上面的锁,得到甲的5张牌。听起来很完美,但实现起来并不简单。上锁开锁和加密解密并不完全相同:两把锁的地位是相同的,但两次加密则有先后的问题。要想把上述协议转换为密码学协议的话,我们需要采用这样一种加密方式:明文首先由甲加密,乙在这个密文的基础上再进行加密,此时甲还能够把里面那一层密码解开,而保持乙的那一层密码不动。密码学上有一种复杂也安全的加密方法满足这种“交换律”:RSA算法。我们也可以用一种相对简单的加密方法是:甲、乙各想一个十分大的质数,加密过程就是把已有的数乘上这个质数,解密过程就是把得到的数除以这个质数。把两个很大的数相乘或相除是件很简单的事,但要分解一个很大的数则很困难。这样在时间有限的情况下就能保证对方不能破解出自己的质数来。这样下来,每个人都得到了自己的一手牌,而都不知道对方手里捏的是什么牌。以后如果还需要摸牌,则可以重复刚才的协议。游戏结束后,双方公开自己的质数,你可以验证看对方的质数与游戏中的数据是否吻合,以确定对方在游戏过程中是否作弊。这个协议可以轻易扩展到多个人的情况,也可以适用于更复杂的扑克牌游戏。
- 上一篇:最佳逻辑思维专题:盲人分衣服
- 下一篇:趣味的小学一年级逻辑推理:换牌逻辑
相关阅读
拓展阅读
思维拓展网提供各类逻辑思维题目及答案,通过逻辑思维题大全中各类经典智力思维逻辑题、推理题帮助用户加强逻辑思维训练、提高逻辑思维水平、改善逻辑思维能力。
如果你有其他有关逻辑思维的好题目,欢迎与我们分享