我知道,我们可以验证,给定一个私有输入a和一个公共输入b,我们可以验证a大于b。但是,如果我想保持这两个输入都是保密的呢?
背景是一个密封的拍卖,我们需要核实谁的私人投标人有最高的出价。我还没有看到任何如何实现这一目标的例子,但希望这里有人能帮助我朝着正确的方向前进。
发布于 2021-06-12 13:12:14
有了zk,就可以证明(a, b)明文作为私人输入和(a, b)承诺作为公共输入具有“更大”的关系。一种方法是将a和b分割成比特(用咆哮的话来说是“线”),并创建一个具有乘法门的电路,产生“真”或“假”。Verilog电路在这里可能会有所帮助。乘法是指表示电路的R1CS方程组,作为具体问题的部分,并作为实现Groth16证明系统的snark库的输入。
有了电路,一个会产生两个公钥,产生和验证一个咆哮的证明。
发布于 2021-06-12 09:35:49
假设有一个共同的秘密x用于隐藏a和b的价值,只有拥有a和b的演员才知道这一点。验证器c是随机抽取的数字,提供给拥有a和b的双方。然后,计算ax-c和bx-c,并提供给验证者。验证者然后计算ax-c和bx-c之间的差异,这是结果。在这种情况下,因为ax-c和bx-c不一定可以被x整除,所以验证器没有办法计算出x。
请注意,此协议存在问题,因为它需要验证者和支持a和b的双方之间的交互。
编辑:验证者A和B伪造其价值的实际可能性
验证者的身份有两种情况,这两种情况应分别讨论。第一种可能性是,验证者是拍卖人。在这种情况下,A和B总是试图伪造它们的价值,因为拍卖商无法知道x的价值。他们都会做同样的事情,不是使用他们共同知道的x,而是做其他的事情。在这种情况下,他们的行动互相抵消。然而,如果验证者是观众,就没有理由让他们伪造价值,即使他们这样做了,观众也会永远知道。因此,伪造价值的问题其实是不存在的。
发布于 2021-06-13 06:31:19
使用ZK snark是一项要求吗?这似乎是百万富翁的问题:https://en.m.wikipedia.org/wiki/Yao%27s_百万富翁%27_问题
这比做SNARKS更简单,它是一个交互式共享计算,没有任何可信任的中心,或者假设两个输入都受到共享秘密的保护(如“红太阳”的答案)。
在投标方案中,他们做出承诺并运行百万富翁协议。在百万富翁协议中使用与承诺不同的价值对任何一方都没有好处,如果你赢了,你将需要揭露承诺和付出,任何背叛都会被发现。但是对于失败的一方来说,在承诺中不使用相同的价值似乎是有限的。
如果你有一个值得信赖的人来看标书,但你不相信他是公平的,你可以用ZK证据来证明他是诚实的,但这些并不能解决信任当事人不透露出价的问题。你需要某种形式的共享计算,就像在百万富翁中一样,以确保所有其他各方的投标保密。
https://crypto.stackexchange.com/questions/91528
复制相似问题