如何将交互式的零知识证明(zk proof)协议改造为非交互式
随着区块链应用场景的拓展,零知识证明(Zero-Knowledge Proof,简称zk proof)在其中扮演了重要的角色。零知识证明首先被人们应用于隐私保护领域,然而随着其技术特点被越来越多的人所认知,其应用领域也越来越广泛,其中最为直观的应用便是应用于身份认证、数字身份私有性保护、支付场景等等。
零知识证明的概念
零知识证明是一种基于密码学的技术,简言之,即能够在特定场景下证明某种事实而无需暴露任何额外信息。比如,在现实世界中,用户需要提供自己的身份证明、银行卡及密码等敏感信息。而使用零知识证明技术能够避免这方面的信息泄露,也就意味着更好地保障了个人信息隐私。
零知识证明协议的两种形式
零知识证明协议分为两种形式:交互式(interactiv%e)和非交互式(non-interactive)。在交互式协议中,需要存在两个实体之间实时的信息传递,而非交互式协议则不需要实时传递信息。
交互式协议中的 Challenge
在交互式协议中,有一个重要的过程便是Challenge的产生。Challenge是一个随机值,由Verifier生成,被称为Challenger,在证明者和验证者之间不断传递,最后被用于最终证明。由于每次都需要Challenger生成,交互式协议性能开销较大。
将交互式协议改造为非交互式协议
针对交互式协议中的Challenge问题,我们可以将交互式协议改造为非交互式协议。一般情况下,可以利用Fiat-Shamir启发式(Heuristic)来将交互式协议转化成非交互式协议。
Fiat-Shamir启发式是在包含道德学共识问题的交互式协议中,将交互协议变为非交互过程的一种启发式算法。
Fiat-Shamir启发式的实现过程
实现过程如下:
- 零知识证明的实现需要一组公私钥对,用于进行参数协商和数字签名。
- 在协议的交互阶段,证明者会向验证者发送特定的验证请求,并使用自己的私钥对其进行加密和签名。
- 验证者会在交互的过程中产生随机数并回送给证明者。
- 证明者将随机数和其他相应的证据发送给验证者。
- 验证者使用一种特殊的哈希函数(如SHA256)将收到的证据和之前回送的随机数一起哈希,并以此作为Challenge。
- 证明者使用私钥加密Challenge,并将加密后的结果发送给验证者。
- 验证者使用公钥解密Challenge并验证其正确性。
在Fiat-Shamir启发式的实现过程中,通过哈希函数将原有的Challenge替换为了由Verifier通过哈希函数产生的随机数。这样就将交互式协议转化为了非交互式协议,从而大大提高了协议的性能开销。
结论
通过非交互式零知识证明协议的相关理论和实现,可以看出其在保障隐私保护的同时,也在协议的性能方面有了大幅度的提升。在实际应用中,我们可以根据自己的需求选择相应的协议形式来进行应用开发。
标签: allen