零常识证实
交互式证实零碎由两方参加,别离为证实者(Prover)和验证者 (Verifier)。证实者把握某一机密,证实者须要让验证者置信本人把握该机密。
交互式证实过程须要多轮,最典型的是每一轮验证者向证实者发送一个询问信息(挑战,Challenge),证实者对询问信息进行计算,并回复信息响应(Response)。
验证者依据证实者每一轮的回复信息决定是否置信证实者。在交互式证实零碎中,通信信道是必须的。交互式证实零碎满足:
齐备性:如果证实者晓得某一机密,验证者将承受证实的证实。
可靠性:如果证实者能以肯定的概率使验证者置信证实者的证实,则证实者晓得相应的机密。
零常识证实(Zero-Knowledge Proof),是指证实者在不让验证者把握机密信息的前提下,使得验证者确信本人的确把握了这些信息。验证者除了晓得证实者能证实某一事实外,不能失去其余任何信息。
例如,Alice声称晓得一个可能对抛硬币正反面的窍门。Bob要验证Alice的声称,只须要当着Alice的面抛硬币。
Bob抛一次硬币Alice能猜中后果的概率为1/2,间断抛两次硬币Alice都能猜中后果的概率为1/4,间断抛次硬币Alice都能猜中后果的概率为1/\( 2^ \),当足够大时,就能够认为Alice全都正确猜中是不可能事件。
那么如果Alice真的全都猜对了,Bob就能够置信Alice的声称。
另一个经典的例子是有一个简略的迷宫:
C和D之间有一扇须要机密口令能力关上的门,证实者要向验证者证实本人可能关上这扇门,又不想泄露秘密口令。能够采纳如下所述的证实协定:
1. 验证者在协定开始时停留在地位 A
2. 证实者始终走到迷宫外部的地位 C 或者地位 D 处
3. 在证实者隐没之后,验证者走到地位 B 处,而后命令证实者从某个出口处进去
4. 证实者依据验证者的命令,从对应出口处进去
5. 证实者和验证者反复以上过程轮
只有证实者晓得口令,每次验证者要求证实者从指定路口进去时,证实者能力依据命令打开门穿过来或者原路返回,从指定路口进去。
如果证实者不晓得打开门的机密口令,则证实者只能原路返回。因而不晓得口令的证实者只能在一开始猜想验证者要求的路口,并从该路口进入,一轮猜对的概率是1/2,反复轮后,证实者都能猜对概率为1/\( 2^ \),反复的轮数足够多时,验证者就可置信证实者领有打开门的机密口令。
接下来介绍Schnorr零常识证实协定:
令 =<>是阶群,为大素数,证实者领有机密常识 ∈,并公开零碎公钥\( =^ \) 。
1. 证实者产生一个随机数∈,计算\( =^ \)并发送给验证者。
2. 验证者Bob产生一个随机数∈{0,1}并发送给证实者Alice。
3. 如果=0,证实者计算=;如果=1,证实者计算=+。之后证实者将发送给验证者。
4. 若=0,证实者验证=;如果=1,证实者计算\( ^= \)。
公钥\( =^ \),因为离散对数合成艰难,因而无奈间接依据\( ^ \)计算出。因为证实者依据的值抉择发送+或者,若证实者不晓得的值,那么当验证者发送=1时,证实者无奈收回正确的=+,验证者在验证\( ^=^{+}=^· ^=· \)时就会验证失败。
设想一个攻击者Tom,他晓得Bob之后产生的为什么值。则Tom能够任()意结构,若=0则让\( =^ \);若=1则让= 。即只有攻击者晓得Bob之后产生的具体为什么值,Tom都可结构一个,使得Bob认为Tom晓得的值,尽管Tom其实并不知道,只晓得Bob会产生的的值,即Bob并不知道的任何信息,所以无奈辨别出Alice和Tom。
比特承诺
比特承诺(Bit Commitment),最早在1995年由图灵奖获得者Blum首先提出。
比特承诺分为两个阶段,第一个阶段为承诺阶段,承诺者向验证者承诺机密值,并向验证者发送对验证者窃密的机密值。
第二个阶段是揭示阶段,承诺者向验证者揭示第一个阶段承诺的的确是,同时验证者得悉机密值的内容。也能够简略了解成承诺阶段,承诺方将一个音讯锁进一个盒子里,再将该音讯发送给验证方。
验证阶段,承诺方将盒子关上,向验证方展现盒子里的内容,以证实本人的确将音讯锁在盒子里发送给了验证方。
接下来介绍一个基于强单向函数(哈希函数)的承诺计划,将该强单向函数记为ℎ()(满足找出任意两个和,使得()=()不可行;已知(),无奈求出;任意两个不同的和,无奈辨别出()和()哪个的原像是):
承诺阶段:
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, \)的哈希值′,并将′的值与进行比拟,如果匹配,则承诺无效。
因为Hash的抗一次原像性(preimage resistance),Bob无奈依据ℎ(1,2,)计算出,保障了计算意义上的暗藏性,Bob的计算力无奈计算出。
若Hash满足对于任意,函数\( ℎ_(_1,_2) = ℎ(_1,_2,) \)都是规定的(即每个像的原像个数都雷同),那么\( ℎ(_1,_2,) \)在信息论意义上暗藏了,因为的取值与\( ℎ(_1,_2,) \)是独立的,即对于任意!=′,任意取值都满足
\( [ℎ(_1,_2,)=]=[ℎ(_1,_2,′) = ] \)
艰深的说,Bob即便有有限的计算力,计算出满足\( ℎ()=ℎ(_1,_2,) \)的所有的汇合,中任意一个元素是(\( _1,_2, \))的概率也都雷同,Bob猜对的概率只有1/||。
在理论中,咱们通常可假如Hash(*)是一个随机预言机(random oracle),且\( _1 \)和\( _2 \)足够长,保障ℎ是靠近规定的,在统计意义上暗藏了的信息。