神秘推理协会
Would you like to react to this message? Create an account in a few clicks or log in to continue.


本论坛以神秘学及推理术为基础,涉及宗教、占星、灵异、密码、推理、法医、文学等多专业领域内容,欢迎广大爱好者的参光访问。
 
首页首页  相册相册  Latest imagesLatest images  搜索搜索  注册注册  登录登录  

 

 【转帖】两个人能够在电话上打牌吗?

向下 
2 posters
作者留言
偏心轮
新手上路
新手上路
偏心轮


男
帖子数 : 19
年龄 : 37
职业/爱好 : student
注册日期 : 09-02-19

【转帖】两个人能够在电话上打牌吗? Empty
帖子主题: 【转帖】两个人能够在电话上打牌吗?   【转帖】两个人能够在电话上打牌吗? Icon_minitime周五 二月 20, 2009 5:11 pm

转自:www.matrix67.com 原文题目:密码学协议举例(五):两个人能够在电话上打牌吗?

密码学的应用范围非常广泛。每一样简单的社交活动里都有很大的学问。考虑这样一个问题,两个人想通过一部电话打牌,但他们都不信任对方。有没有可能仅通过一部电话实现扑克牌协议,并且保证游戏的公正性呢?
扑克牌的信息隐蔽性带来了很多与密码学协议相关的有趣问题。两个象棋大师可以在洗澡间一边冲澡一边大喊“炮八平五”、“马八进七”,一对围棋情侣可以在床上一边亲热一边呻吟“点三三”、“拆二”。等事情办完了,一盘精彩的棋局或许也就结束了。这些棋类游戏之所以可以“盲下”,就是因为在棋类游戏中,双方的局面信息都是完全公开的。不过,打牌就是另外一码事了。你说你出方片7,我怎么知道你有一个方片7?事先发牌?那谁来负责发牌呢?怎样发牌呢?难道我告诉你“发到你手中的是两张3一张5一张8一张9”?这样一看,两个人“盲打扑克牌”似乎是不可能的了,要么需要借助道具,要么需要第三者的帮助。不过,运用密码学知识,我们可以设计一套扑克牌协议,该协议能够实现随机的、隐蔽的、公平的发牌,并且不需要其它东西的帮助。我们以一手五张牌为例,说明如何实现“两人各摸五张牌”的程序。


我们首先来看这里面的一个趣题。
<BLOCKQUOTE>
10. A、B两人分别在两座岛上。B生病了,A有B所需要的药。C有一艘小船和一个可以上锁的箱子。C愿意在A和B之间运东西,但东西只能放在箱子里。只要箱子没被上锁,C都会偷走箱子里的东西,不管箱子里有什么。如果A和B各自有一把锁和只能开自己那把锁的钥匙,A应该如何把东西安全递交给B?
答案:A把药放进箱子,用自己的锁把箱子锁上。B拿到箱子后,再在箱子上加一把自己的锁。箱子运回A后,A取下自己的锁。箱子再运到B手中时,B取下自己的锁,获得药物。
</BLOCKQUOTE>
我们的基本思路就是这样。不妨用数字1到54来表示54张牌。发牌前,A在每个数字前附着一个随机字符串前缀,然后给每个字符串都加上一把锁,把54张加密的扑克牌传给B。B收到了扑克牌一看,傻了,这些牌他一张也不认识,每张牌上面都有A的锁。B从里面挑选5张牌出来。他自己不知道这5张牌是什么,但是他也不能让A知道,于是他在这5张牌上再各加一把锁,传给A。A可以解开自己当初上的那把锁,但牌上还有一把锁,A拿它没办法,只能原封不动地传回去。B把剩下的锁解开,得到自己的5张牌。然后呢,B手上不是还剩了49张牌吗?B从中随便挑5张出来给A,由A解开上面的锁,得到A的5张牌。
听起来很完美,但实现起来并不简单。上锁开锁和加密解密并不完全相同:两把锁的地位是相同的,但两次加密则有先后的问题。要想把上述协议转换为密码学协议的话,我们需要采用这样一种加密方式:明文首先由A加密,B在这个密文的基础上再进行加密,此时A还能够把里面那一层密码解开,而保持B的那一层密码不动。如果用Ea(x)表示A的加密函数,用Da(x)表示A的解密函数的话,我们需要一种加密系统使得Db(Da(Eb(Ea(x))))=x。有这样的加密系统吗?有!模数相同的
RSA算法就满足这样的“交换律”。
RSA算法之所以起作用,原因就在于你能找到这么一对e和d,使得ed≡1 (mod φ(n))。假如存在两对钥匙(e1, d1)和(e2, d2),容易想到(e1*e2)(d1*d2)=(e1*d1)(e2*d2),它仍然同余于1。因此,计算密文c=m^(e1*e2)之后,再计算c^(d1*d2)一定能恢复明文m,不管你是先算c的d1次方还是d2次方。
有了RSA算法,我们的协议也就出来了。A、B两人各生成一对RSA公私匙(公钥不必公开,因为我们这里只用到了RSA的可交换性,没用到RSA的加密钥匙可公开性)。A把54个加了随机字符串前缀的扑克牌分别用公钥加密并发给B,B从中选5张牌并再用自己的公钥加密,然后A用私钥解开B的这5张牌中里面一层的密码,B再用自己的私钥解密以得到自己的一手牌。同时,B在剩余的49张牌中挑选5张发给A,A用自己的私钥解密以获得自己的一手牌。这样下来,每个人都得到了自己的一手牌,而都不知道对方手里捏的是啥牌。以后如果还需要摸牌的话,则可以重复刚才的协议。游戏结束后,双方公开自己的钥匙,你可以验证看对方的钥匙与游戏中的数据是否吻合,以确定对方在游戏过程中没有作弊。这个协议可以轻易扩展到多个人的情况,也可以适用于更复杂的扑克牌游戏。
返回页首 向下
微生若
初级用户
初级用户
微生若


女
帖子数 : 43
职业/爱好 : 侦探。法医。心理。法律。文学
注册日期 : 09-02-18

【转帖】两个人能够在电话上打牌吗? Empty
帖子主题: 回复: 【转帖】两个人能够在电话上打牌吗?   【转帖】两个人能够在电话上打牌吗? Icon_minitime周五 二月 20, 2009 5:49 pm

。。密码太复杂了。。
自己知道的不多。。。
恩。。网站使用质数做密码,征集大质数,中的能得几百万吧。。貌似
还有就是摩尔密码。。
电视剧里的圣经密码也是印象深刻呢。。。
返回页首 向下
偏心轮
新手上路
新手上路
偏心轮


男
帖子数 : 19
年龄 : 37
职业/爱好 : student
注册日期 : 09-02-19

【转帖】两个人能够在电话上打牌吗? Empty
帖子主题: 呵呵   【转帖】两个人能够在电话上打牌吗? Icon_minitime周五 二月 20, 2009 7:17 pm

好像网络协议有个RSA算法吧,就是公钥是质数相乘,而私钥是质数分解。前者容易,后者很难,据说量子计算机可以破解吧。
返回页首 向下
 
【转帖】两个人能够在电话上打牌吗?
返回页首 
1页/共1

您在这个论坛的权限:不能在这个论坛回复主题
神秘推理协会 :: 推理术 :: 密码知识-
转跳到: