美文网首页密码协议
密码协议--总结三

密码协议--总结三

作者: CPinging | 来源:发表于2018-06-11 10:56 被阅读53次

    这次接上一次总结的内容。

    下面讲述一下比特位承诺

            简单讲述比特位承诺就是:A和B运用一系列的手段来博弈,在相对公平的条件下来博弈出B是否猜对了某个值。(我感觉就比较像复杂一点的石头剪刀布)

     参照:

    –Decidewho goes first in a game

    –IfBob guesses correctly, he goes

    –Alicepicks a bit (0 or 1) and locks it in a box

    –Bobguesses a bit–Thebox is opened to see if he is right

            在“游戏”过程中,我们要保证1,A无法在B猜测之后改变值。2,B不知道A设定的值时多少。

    下面介绍几种位比特承诺协议:

    一、使用对称加密的方法

    1,B给A一个随机数R。

    2,A用秘钥K对比特(b与R)进行加密并发送给B。

    3,B进行猜测,然后A把K发送给B。

    4,B用K对消息进行解密,并验证是否是自己发送的随机数B,并得到承诺b。

    二、使用哈希函数

    1,A给B传递  H(R1, R2,b),  R1---其中R1  R2为两个随机数,b为承诺位

    2,当B进行猜测后,A向B发送R1, R2, b(原始值)。然后B就可以对其原始值进行哈希处理,并比较其是否与1中的值相等。

    这个协议的安全性在于,A不能找到其他的可能,使得    H(R1, R2’,b’) = H(R1, R2,b)

    三、如何让“投硬币游戏”更加公平?

            这个内容其实挺有趣的,但是我暂时也不知道它的实用性在什么地方。

    简单来说,A与B互不信任。所以他们俩都不想让对方投这枚硬币。

    所以他们商量,A与B互相想一个随机数(0或1),然后进行Xor操作,也就是意味着,只要他们其中任意个随机数是不可测的,那么这个协议就相对公平。

    之后我们就可以事先规定,如果结果的是1,那就是A胜出,是0那就是B胜出。

            之后内容还包括使用one-way算法的承托方案、使用公钥的承诺方案。

    哈希的那个算法比较简单,所以我只放上图。

    one-way fun

            下面是使用公钥进行处理的算法协议。

            简单介绍来说,这个算法就是A生成两个数,然后让B选择。类似于投硬币的形式,比较公平。

    公钥协议

    这里放入具体的算法。

    1,A用公钥加密消息M1和M2,并给B传过去。

    2,B选择其中一个,并用B的公钥加密1中的密文。发给A

    3,A用自己的私钥将2中的密文解密,得到的内容回传给B。(本来是两层加密,现在变成了一层)

    4,B用私钥解密,得到明文(随机数+M)。并将明文传给A让其进行验证。

    而上述协议能提供给我们什么启发呢?

    下面我们看一个匿名秘钥分发协议--AnonymousKey Distribution。

            问题是:我们引入一个server端,但是我们如何通过server来选择秘钥,并保证server端也无法知道我们的具体秘钥呢?

            这就要使用上述公钥密码来进行。我们知道:  DK1(EK2(EK1(M)))=EK2(M),所以我们可以如下设计协议:

    匿名秘钥分发协议

    1,KDC使用流密码不断生成秘钥,并用KDC的公钥对生成的密码加密,并放到网络中。

    2,A随机选择秘钥,并用Ka进行加密(A的公钥)然后传给KDC。

    3,KDC拿到2中的密文后用私钥解开一层,在回传给A。

    4,A用其私钥解密得到明文秘钥。

    下面我们介绍一下不经意传输--oblivious transfer。

            简单介绍一下此内容的概念,不经意传输意思是我有一个秘密,但是我不能全部给你,我只能给你我所有秘密的一部分。这个时候我应该如何传递?

    Rabin 的OT协议

    这个协议的大致思想为:我生成一个大素数N,并给你1/4个剩余,而四个剩余中只有两个是可以分解这个大素数N。例如:这个商品价值100元,而你只给我了50元,那么我不能把消息完全给你,只给你百分之五十的概率去获取消息。

    1,A生成两个素数pq,计算N=p*q并发送N给B。

    2,B在0~n中选择一个数字x,并计算 a = x^2 mod n并发给A。

    3,A计算a的剩余(因为a是x的平方,所以剩余共有四个(x1,x2,x3,x4),并随机选择一对发给B。

    4,B用 (x+b)(x-b)=0 mod n来验证传过来的剩余是否合理。而又因为B已知其中的两个剩余,所以B只有一半的概率能获得未知的剩余对。

    下面我们讲述一个比较实用的协议。

    倘若A要向B发送部分秘密,那协议应该怎么做呢?

    1,A生成两个公私钥对E1、E2,并把两个公钥发给B。

    2,B生成一个对称秘钥K,然后随机选取任意一个公钥并加密秘钥K,发送给A。

    3,此时A并不清楚B选择哪个公钥,所以他干脆使用两个私钥分别对2中的密文解密得到K,K‘。(此时K为真正的秘钥,用其加密的内容B可以解密,而K’加密的内容B无法解密)

    4,之后A使用K与K‘分别加密两个message,传给B。

    5,B用K解密,只能得到其中一条。协议达到了随机传递部分消息的作用。并且保证了公平性。

    不经意传送协议

    相关文章

      网友评论

        本文标题:密码协议--总结三

        本文链接:https://www.haomeiwen.com/subject/rfpqeftx.html