重新访问 Pay-to-sudoku

去年,我开展了一个叫做 pay-to-sudoku 的项目,这是全球首个面世的 零知识或有支付 (ZKCP) 解决方案。ZKCP 是 Gregory Maxwell 在 2011 年发明的,这是一种非常巧妙的加密方法,用户通过这种方法可以通过区块链在原子级交易信息和价值。在 2016 年金融密码会议上,Gregory 演示了这种方法

在 pay-to-sudoku 中,一名用户(“买家”)可以向另一名用户(“卖家”)付款来解答数独谜题。卖家解答谜题后,用密钥对解答进行加密,然后进行哈希运算。使用零知识证明 ― 在这个例子中,zk-SNARK使用 libsnark ― 卖家可以构造一份他们找到了谜题解答的证明,不过,解答经过了加密,需要知道特定的 SHA256 哈希值才能进行解密。

买家继续向区块链提交付款,从而让卖家可以获得金钱回报,作为交换,买家可以获得解密 SHA256 原像的信息(密钥)。卖家提供密钥后,买家即可解密。

为了利用 zk-SNARK 实现这一目的,买家需要负责构建一个通用的引用字符串 (CRS),以便卖家对证明进行评估。Campanelli、Gennaro、Goldfeder 和 Nizzardo 不久前发布了一篇 新论文 ,其中确定了 pay-to-sudoku 使用 PGHR 在 libsnark 中构建实现的一个缺点。特别是,它假设 CRS 的代数结构正确,其结果是买家有可能违反零知识原则,在没有付款的情况下获得解答信息。

请注意,即使 MPC 的所有参与者不诚实,Zcash 的公共参数也不会受到这种恶意行为的影响,因为 多方计算记录 可以保证 CRS 的正确性。该论文中也说明了这一点。

当使用第三方 CRS 时,可以采取几个步骤来缓解这个问题。就像我们对 Zcash 的公共参数采取的措施一样,这些措施足以保证使用多方计算协议正确构建参数。只要不允许 CRS 中出现不正确的结构,就足以防范论文中所讲的特定攻击。作为一项额外的预防措施,可在构建后验证证据!

该论文还提出了一些其他有意思的观点,例如,通过扩展 ZKCP 的概念来购买数字服务,而不是数字商品(如 sudoku 解决方案)。

发表评论

电子邮件地址不会被公开。 必填项已用*标注