乐趣区

关于区块链开发:隐私计算笔谈MPC系列专题六零知识证明和比特承诺

零常识证实

交互式证实零碎由两方参加,别离为证实者(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 \)足够长,保障ℎ𝑚是靠近规定的,在统计意义上暗藏了𝑚的信息。

退出移动版