我最近学会了研究零知识证明的安全性。正如您在Wiki (link)上看到的那样,它似乎是Ali Baba洞穴最受欢迎的例子。我对阿里巴巴洞穴中ZKP(零知识证明)的安全性有疑问。原因如下。在验证过程中,证明者将提供e = [0,1 ...]的值。 e将根据0或1向左或向右求解。根据列表e(2 ^ n)的长度,此过程被称为更安全。但是,只有两条路径,并且根据e的值,秘密密钥值不会在方向A和B上更改。因此,该算法的安全性难道不应该只是(2)吗?
答案 0 :(得分:0)
阿里巴巴洞穴包含以下场景:
对于单个证明,这具有与随机机会相同的概率:
如果我们将P_in
称为Peggy进入的路径,并将V_out
称为Victor要求Peggy进入的路径,
P_in = V_out
,那么Peggy可以在不知道如何打开内部门的情况下轻易退出洞穴。P_in != V_out
,那么佩吉需要知道从洞穴的一侧越过另一侧的钥匙。我们有以下几种可能的情况:
它们是等概率的,因为Peggy随机选择,而Victor却不知道Peggy选择了什么(这是零知识部分)而随机选择。
从先前的假设中,我们很容易得出P(P_in = V_out) = 1/2
:也就是说,佩吉在没有附加知识的情况下能够轻易退出山洞的概率与随机机会相同。
但是,如果维克多(Victor)反复( )让佩吉(Peggy)进入山洞,概率就会成倍增加。即P_in#1 = V_out#1 = 50%
;但是P_in#2 = V_out#2 = 50%
(本身),这意味着,由于条件概率(假设事件是独立的),为了通过随机机会使两个时间都从洞窟中消失,
P(P_in#1 = V_out#1 /\ P_in#2 = V_out#2) = 1/2 * 1/2 = 1/4
佩吉知道钥匙的概率现在已经提高到3/4:
P( (P_in#1 != V_out#1 /\ P_in#2 == V_out#2)
|| (P_in#1 == V_out#1 /\ P_in#2 != V_out#2)
|| (P_in#1 != V_out#1 /\ P_in#2 != V_out#2)) =
P( ((P_in#1 != V_out#1 || P_in#1 == V_out#1) /\ P_in#2 == V_out#2)
|| P_in#1 != V_out#1 /\ P_in#2 != V_out#2) =
P( P_in#2 == V_out#2
|| (P_in#1 != V_out#1 /\ P_in#2 != V_out#2)) = 1/2 + (1/2 * 1/2) = 3/4
指数复杂性背后的原因在于,单次失败建立了不信任,而通过随机机会积累“连胜”则是指数困难的。因此,给定先验概率,您将获得O(2 ^ n)
,因为每次尝试的难度都是“两倍”。