零知识证明:
背景:交互式证明由证明者和验证者俩方参与,证明者掌握某一秘密,证明者需要让验证者相信自己掌握该秘密。验证者根据证明者每一轮回复的信息决定是否相信证明者。
零知识证明(Zero-Knowledge Proof):证明者在不让验证者掌握秘密信息的前提下,使得验证者确信自己确实掌握了这些信息。也就是验证者除了知道证明者能证明某一事实外,不能得到其他任何信息。
举例:
1.抛硬币:Alice宣称知道一个能够对抛硬币正反面的诀窍。Bob要验证Alice的宣称,只需要当着Alice的面抛硬币。(
我们都知道猜中一次的概率是1/2.2次是1/4.....那无数次呢。如果Alice全猜对了bob就可以相信了)
2.迷宫
:
C和D之间有一扇需要秘密口令才能打开的门,证明者要向验证者证明自己能够打开这扇门,又不想泄露秘密口令。可以采用如下所述的证明协议:1. 验证者在协议开始时停留在位置 A 2. 证明者一直走到迷宫内部的位置 C 或者位置 D 处 3. 在证明者消失之后,验证者走到位置 B 处,然后命令证明者从某个出口处出来 4. 证明者根据验证者的命令,从对应出口处出来 5. 证明者和验证者重复以上过程𝑛轮 。只有证明者知道口令,每次验证者要求证明者从指定路口出来时,证明者才能根据命令打开门穿过去或者原路返回,从指定路口出来。
Schnorr零知识证明协议:
令𝐺 =<𝑔>是𝑞阶群,𝑞为大素数,证明者拥有秘密知识𝑥 ∈𝑍𝑛,并公开系统公钥𝑦=g的x次方 。
1. 证明者产生一个随机数𝑢∈𝑍𝑛,计算𝑎=𝑔𝑢并发送给验证者。2. 验证者Bob产生一个随机数𝑐∈{0,1}并发送给证明者Alice。
3. 如果𝑐=0,证明者计算𝑠=𝑢;如果𝑐=1,证明者计算𝑠=𝑢+𝑥。之后证明者将𝑠发送给验证者。
4. 若𝑐=0,证明者验证𝑔𝑠=𝑎;如果𝑐=1,证明者计算𝑔𝑠=𝑎𝑦。
比特承诺:
承诺阶段:承诺者向验证者承诺秘密值x,并向验证者发送对验证者保密的秘密值𝑥。
揭示阶段:承诺者向验证者揭示第一个阶段承诺的确实是𝑥,同时验证者得知秘密值𝑥的内容。
介绍一个基于强单向函数(哈希函数)的承诺方案:
承诺阶段:1. Alice产生两个随机数𝑟1,𝑟2。2 Alice将随机数𝑟1,𝑟2与自己将要承诺的消息M进行连接,记为𝑟1,𝑟2,𝑚。3. Alice计算𝑟1,𝑟2,𝑚的哈希值𝑐=𝐻𝑎𝑠ℎ(𝑟1,𝑟2,𝑚),并将𝑐和𝑟1发送给Bob,作为Alice对消息m的承诺。
揭示阶段:1. Alice将𝑟1,𝑟2,𝑚告知Bob 2. Bob 计算𝑟1,𝑟2,𝑚的哈希值𝑐′,并将𝑐′的值与𝑐进行比较,如果匹配,则承诺有效。