现代密码学复习总结(六)密码技术应用

秘密共享

简单的说。
有一个秘密,分给了n个人。需要t个人在场才能解开,t-1则解不开。

检测结论(一)
当某t个人计算出的系数与另外t个人计算出的系数量不相等时,这两次人员中必有“欺骗者”。
检测结论(二)
当某t个人计算出的系数与另外t个人计算出的系数向量相等时,(几乎可以断定)这两次人员都是诚实的参与者。

引申的计算部分:给出n组(ID(k),h(ID(k)),据此求出线性方程的系数ai。
习题举例:

设:p=17;n=5;t=3;
(ID(1), h(ID(1)))=(1, 8);
(ID(2), h(ID(2)))=(2, 7);
(ID(3), h(ID(3)))=(3, 10);
(ID(4), h(ID(4)))=(4, 0);
(ID(5), h(ID(5)))=(5, 11)。
当第1位~第3位参与者同时到场,求共享的秘密h(x) = a0 + a1x + a2x^2 (mod 17)。

(一)代入数据:
8 = a0 + a1 + a2 mod 17		
7 = a0 + 2a1 + 4a2 mod 17	
10 = a0 + 3a1 + 9a2 mod 17	
(二)提系数成矩阵:
1 1 1 8
1 2 4 7
1 3 9 10
(三)化简,求解:
0 0 1 2
0 1 3 -1
1 1 1 8
解出:a2 = 2,代入原方程组:
6 = a0 + a1 mod 17
-1 = a0 + 2a1 mod 17
-8 = a0 + 3a1 mod 17
解出:a1 = -7、a0 = 13。

不经意传输

A向B传输,无论如何B收到的概率只有1/2。并且A不知道B是否收到。
举例:行贿。
设有两个大素数p和q。令N=pq。取整数x,1<x<N。令a=x2(mod N)。

结果一
已知N,求p和q困难。(大数分解)
结果二
a一共有4个(mod N)平方根:x;N-x;y;N-y。即:a ≡ x2 ≡ (N-x)2 ≡ y2 ≡ (N-y)2 (mod N)。
结果三
(1)如果已知{p,q,a},则可以求出a的4个(mod N)平方根{x,N-x,y,N-y} 。
(2)如果仅仅已知{N,a},则不能求出a的任何一个(mod N)平方根。
结果四
(1)如果已知{N,x,y}或已知{N,x,N-y}或已知{N,N-x,y}或已知{N,N-x,N-y},则可以求出p和q。
(2)如果仅仅已知{N,x,N-x}或仅仅已知{N, y,N-y} ,则不能求出p和q。

Rabin的不经意传输协议
(1)Alice取两个大素数p和q, {p,q}是秘密。
(2)Alice计算N=p·q,将N发送给Bob。
(3)Bob取定整数x,1<x<N,计算a=x2(mod N),并将a发送给Alice 。
(4)Alice根据结果三计算出a的4个(mod N)平方根{x,N-x,y,N-y} 。
(5)Alice在4个平方根{x,N-x,y,N-y}中随机地选择一个,并将它发送给Bob。
(6)Bob首先检查是否z2(mod N)=a。若是,则z是a的(mod N)平方根;
接下来,如果z=x或z=N-x,则无法求出p和q。反之是另外两个,则可以。
Bob选择x或N-x的概率为1/2,即,可求出秘密的概率为1/2。

电子投票

(一)投票人:投票内容m。随机整数R,计算C=(Re)·m(mod n)。发送C和自己的身份。
(二)选举委员会:检查:1、投票人的身份是否符合规定;2、投票人的身份先前是否已经用过。如果通过则标记已用过。计算T=Cd(mod n)。送还T。
(三)投票人:计算S=(R-1)·T(mod n)。检查是否Se(mod n)=m。若是,则将S作为选举委员会对投票内容m的签名;否则认为选举委员会在欺骗。
(四)投票人:联立成签名消息(m, S)。发送给选举委员会,完成投票。
(五)选举委员会:检查是否S=md(mod n)。若是,则(m, S)是一张经过签名的选票;否则认为投票者在欺骗。验票完成。公布所有的签名选票。
(六)投票人:检查所有的签名选票中是否有一张为(m, S)。
(七)附加步骤。
投票人:若发现榜上没有(m, S) ,则可以持(m, S)质询选举委员会,并将(m, S) 公布于众。
任何人在见到(m, S)后,都可以计算出Se(mod n)=m。这就是说,任何人都知道(m, S) 是被选举委员会签名的票。选举委员会一定败诉。
满足:合法性、唯一性、匿名性、不可追踪性。不满足:可验证性。

此时,投票人可以进行攻击。
(1)投票人选择一个签名S,用选举委员会的公钥(n,e),计算投票内容m=Se(mod n)。
(2)投票人绕过投票过程的第(一)、(二)、(三)步,直接进入投票过程的第(四)步,将(m, S) 发送给选举委员会,完成投票。
(3)选举委员会进入投票过程的第(五)步, 验证了S=md(mod n),攻击成功。

不过这种攻击方式具有局限性:注意到投票人是先选定了签名S的值,然后反过来对投票内容m进行伪造:m=Se(mod n)。当规定投票内容只能是少数几个值时,伪造的投票内容m很难恰好是这几个值。同样,如果先选定投票内容m,然后对签名S的值进行伪造,则投票人不知道选举委员会的私钥d,无法计算S。

在此基础上,对电子投票的流程协议进行了改进。
改进的协议克服了原来协议不满足可验证性的缺陷,并且能够抵抗投票人攻击。
改进的协议额外使用一个公开的杂凑函数H和一个随机数U,并在协议中用H(m, U)来代替m。
(一)投票人:投票内容m。随机整数R和U,计算C=(Re)·H(m, U)(mod n)。发送C和自己的身份。
(二)不变。
(三)投票人:计算S=(R-1)·T(mod n)。检查是否Se(mod n)=H(m, U)。若是,则将S作为选举委员会对投票内容m的签名;否则认为选举委员会在欺骗。
(四)投票人:联立成签名消息(m, U, S)。发送给选举委员会,完成投票。
(五)选举委员会:检查是否S=H(m, U)d(mod n)。若是,则(m, S)是一张经过签名的选票;否则认为投票者在欺骗。验票完成。公布所有的签名选票。
(六)投票人:检查所有的签名选票中是否有一张为(m, S)。
(七)附加步骤。
投票人:若发现榜上没有(m, S) ,则可以持(m, S)质询选举委员会,并将(m, S) 公布于众。
任何人在见到(m, S)后,都可以计算出Se(mod n)=m。这就是说,任何人都知道(m, S) 是被选举委员会签名的票。选举委员会一定败诉。
可验证性:满足。

当投票人发现榜上没有(m, U, S),则将(m, U, S)公布于众。任何人都可以计算出Se(mod n)=H(m, U)。m可能相同,但U不会一样。因此S不会相同。
此时攻击无效。给定S则面临根据H(m, U)计算m和U,显然不可能。同理,后者无法计算S。

零知识证明

示证者:P(prover)。
验证者:V(verifier)。
P知道某个秘密;他想让V相信他知道该秘密。
最大泄露证明:完整地泄露该秘密。
最小泄露证明: P使用一种证明方法,让V相信他知道该秘密,但对该秘密的泄露程度最小。

最小泄露证明满足:
(1)P无法欺骗V。 (2)V无法欺骗P。
应由V提问,P应答。每次提问,如果P知道秘密,则答对;若不知道,则答对的概率仅为1/2。

实施身份证明的协议如下。
m=p1·p2,随机数y,y2=v,以v作为P的公钥,计算满足下式的最小的正整数s作为P的私钥:s=(1/v)1/2(mod m)。
(1) P取随机数r(<m),计算x=r2(mod m),将x送给V。
(2) V将一随机比特b送给P。
(3)若b=0,则P将r送给V;若b=1,则P将y=r·s送给V。
(4)若b=0,则V证实x=r2(mod m);若b=1,则V证实x=y^2·v(mod m)。
P和V可将此协议重复t次,直到B相信A知道s为止。

安全性:
(1)V得不到s的任何信息。
(2)单次P欺骗V的概率为1/2,重复t次则为(1/2)t

  • 24
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用 JavaScript 编写的记忆游戏(附源代码)   项目:JavaScript 记忆游戏(附源代码) 记忆检查游戏是一个使用 HTML5、CSS 和 JavaScript 开发的简单项目。这个游戏是关于测试你的短期 记忆技能。玩这个游戏 时,一系列图像会出现在一个盒子形状的区域中 。玩家必须找到两个相同的图像并单击它们以使它们消失。 如何运行游戏? 记忆游戏项目仅包含 HTML、CSS 和 JavaScript。谈到此游戏的功能,用户必须单击两个相同的图像才能使它们消失。 点击卡片或按下键盘键,通过 2 乘 2 旋转来重建鸟儿对,并发现隐藏在下面的图像! 如果翻开的牌面相同(一对),您就赢了,并且该对牌将从游戏中消失! 否则,卡片会自动翻面朝下,您需要重新尝试! 该游戏包含大量的 javascript 以确保游戏正常运行。 如何运行该项目? 要运行此游戏,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox, 以获得更好、更优化的游戏体验。要玩游戏,首先,通过单击 memorygame-index.html 文件在浏览器中打开游戏。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
使用 JavaScript 编写的 Squareshooter 游戏及其源代码   项目:使用 JavaScript 编写的 Squareshooter 游戏(附源代码) 这款游戏是双人游戏。这是一款使用 JavaScript 编写的射击游戏,带有门户和强化道具。在这里,每个玩家都必须控制方形盒子(作为射手)。这款射击游戏的主要目标是射击对手玩家以求生存。当它射击对手时,它会获得一分。 游戏制作 该游戏仅使用 HTML 和 JavaScript 开发。该游戏的 PC 控制也很简单。 对于玩家 1: T:朝你上次动作的方向射击 A:向左移动 D:向右移动 W:向上移动 S:向下移动 对于玩家2: L:朝你上次移动的方向射击 左箭头:向左移动 右箭头:向右移动 向上箭头:向上移动 向下箭头:向下移动 游戏会一直进行,直到您成功射击对手或对手射击您为止。游戏得分显示在顶部。所有游戏功能均由 JavaScript 设置,而布局和其他次要功能则由 HTML 设置。 如何运行该项目? 要运行此项目,您不需要任何类型的本地服务器,但需要浏览器。我们建议您使用现代浏览器,如 Google Chrome 和 Mozilla Firefox。要运行此游戏,首先,通过单击 index.html 文件在浏览器中打开项目。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值