- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
信息加密与单向函数及ras算法
ras
ras
信息加密与单向函数及rraass算法
摘自matrix67的博客
密码学协议举例(一):带有防欺骗的承诺
我们常常在电视上看到这样的一幕:一位老太太兴冲冲地走上台去,
翻过三个商标牌,发现上面尽是5块钱、10块钱的小奖,垂头丧气地
回到观众席;然后马脸李咏会跑出来,边翻着另外几个牌子边说,
1000块的大奖在这个后面,800块的在这里,之类的。或许有人会纳
闷了,为什么主持人要演出“事后揭大奖”这一幕呢?道理很简单,节
目组想通过这一个“验证过程”告诉观众,这个环节不是骗人的,大奖
真的就在这后面,只是刚才那家伙运气背了没摸到而已。摸奖前宣称
有大奖,摸完奖之后还能证实大奖真的存在,这就是带有防欺骗的承
诺。
但是,同样的事情在网络上似乎是办不到的。一个典型的例子就是
QQ原来弄的那个恶心的砸金蛋砸银蛋。屏幕左边那个是银蛋,屏幕
右边那个是金蛋,你鼠标选一个敲下去,看能否砸出QQ宠物来。大
量测试表明砸出宠物的概率远远低于50%,让人质疑游戏的真实性。
鬼知道它那个程序是不是真的预先指定了一个有宠物的蛋蛋,很可能
不管你点了哪个蛋蛋结果都一样,系统按照概率直接显示出抽奖结果
来。当然,怀疑游戏的公平性也没办法,要想在网络上实现带防欺骗
的承诺是比较困难的,毕竟让你看一段从另一个蛋蛋里跳出一个宠物
的Flash动画不能让你相信刚才你是真的“选错”了吧。
我们的问题就是:如何设计一个协议,用以保证一个二选一的网络互
动抽奖游戏的真实性?换句话说,假如你选择了金蛋,结果没有中奖,
那么系统如何能够令你相信奖品刚才真的在银蛋里?
md5一类的单向散列函数(主页菌注:普通的函数,比如y=2x,给
出输入x=1,得到y=2;给出输出y=2,也很容易得出x=1;可是对于
这种单向函数,给出x=1。比较容易得出y=2。可是反过来,给出
y=2,很难算出x是多少)提供了一个不错的方案。系统首先随机选
择一个蛋(比如银蛋),在蛋里面藏好奖品,然后把单词“silver”连同
一个随机字符串(比如“jq548s”)进行md5。在你抽奖之前,把这个
md5值先告诉你。然后你砸蛋,发现金蛋里没有奖品。此时,系统宣
布字符串“silverjq548s”,你计算它的md5值,发现和之前系统告诉
你的一模一样。此时,你便相信系统刚才是真的把奖品藏在银蛋里了。
若你刚才真的砸了银蛋,那系统就没办法抵赖了,因为md5函数是
一个单向的、不可逆的、不可预测的函数,想要构造一个“golden某
某某”形式的,且md5值和刚才一样的字符串,那比登天还难。另外,
注意到在单词后面添加随机字符串这一步骤是必须的,否则你可以尝
试计算“silver”和“golden”各自的md5值,从而获知哪个蛋里面有奖
品。
不过,现在看来,这个协议也不可靠了。系统有一个办法可以耍赖:
字符串“jq548s”有可能根本不是随机生成的,而是经过一系列精心构
造的。我们不能排除这样一种情况,即我们可以通过某种算法构造出
一对字符串xxx和yyy,使得“silverxxx”和“goldenyyy”的md5值是一
样的。md5被破解后,造成这种“碰撞”更是轻松,并且同一对碰撞还
可以反复用于欺骗不同的用户。其中一个解决办法是,你可以在协议
最初时生成一个自己的随机字符串发给系统,并要求系统传回
“silver/golden” + 系统生成的随机串 + 你自己传过去的随机串 三
者并在一起后的md5值。用户一旦参与了字符串的构造,系统作弊
就变得真正棘手了。
还有没有什么其它办法呢?我在《应用密码学》里看到了一个颇有意
思的协议,它用伪随机序列来代替单向散列函数。不妨把银蛋标为数
字“0”,金蛋标为“1”。在砸蛋之前,你给系统发一个足够长(比方说
100位吧)的随机01串A。然后,系统把奖品藏在标号为X的蛋里。
下面,系统选择一个随机种子,通过伪随机数列发生器生成100个随
机数,并全部模2得到一个100位的随机01串B。然后系统计算01串C,
其中
C[i] =B[i] 当A[i]为0
C[i] =B[i]xorX 当A[i]为1
系统把C传给你,并宣布准备完毕,开始抽奖。事后,系统公开自己
选取的随机种子的值,你便能还原序列B,验证序列C是否和系统之
前所给的一样。(主页菌注:这一招相当于一把锁需要两把钥匙同时
存在才能打开,开奖之前先给你一把,开奖之后再给你另外一把,只
有两把钥匙
原创力文档


文档评论(0)