区块链中常说的zk(zero-knowledge)是什么?
date
Sep 10, 2023
slug
what_is_zero_knowledge
status
Published
tags
web3
blockchain
zk
zero-knowledge
summary
zk(zero-knowledge)零知识是区块链领域大家常常会提到的一个词,这篇文章将会简单介绍什么是zk零知识。
type
Post
Zero-knowledge (零知识) 是一种密码学概念,允许一方(证明者)向另一方(验证者)证明某个陈述是真实的,而不必透露有关该陈述本身的具体信息。换句话说,证明者可以说服验证者某个声明的有效性,而不需要披露该声明的实际数据或秘密。
"零知识" 这个术语意味着验证者在关于所证明的信息方面不获得任何有意义的知识,但仍然会相信它的真实性。这个概念在计算机科学和密码学的各个领域都非常重要,尤其是在隐私保护的身份验证、安全通信和认证协议方面。
Zero-knowledge 证明通过复杂的数学技术和密码协议来实现。以下是零知识证明是如何工作的以及它如何实施的简化解释:
- 声明和协议设置: 证明者想要向验证者证明某个陈述的真实性,比如"我知道一个满足某个条件的秘密值"。双方进行协议设置,包括达成关于将用于证明的规则、算法和密码学原理的协议。
- 承诺阶段: 证明者和验证者参与承诺阶段,在这个阶段,证明者对秘密值进行承诺,而不透露它。通常会使用密码哈希或其他技术来进行这种承诺。
- 互动交换(如果适用): 在某些零知识协议中,可能会有一个互动阶段,证明者和验证者在其中交换消息。证明者基于承诺生成一系列响应和挑战,验证者检查这些响应以确保它们的一致性。
- 证明生成: 证明者使用各种数学运算生成证明,证明了陈述的有效性,同时又不透露实际秘密。这个证明基于之前达成的承诺和密码学原理。
- 证明验证: 验证者从证明者那里接收证明,并使用事先约定的密码技术来验证其有效性。验证者不获得有关秘密值的任何知识,但可以相信陈述的真实性基于证明的有效性。
- 完成和最终化: 如果验证者成功验证了证明,那么证明者的声明被认为是有效的。过程完成,验证者不会获得有关陈述的真实性之外的任何信息。
零知识证明可以使用各种数学构建来实现,包括:
- 单向函数: 在一个方向上容易计算但在逆向上计算非常困难的函数。可以基于这些函数来进行承诺和挑战。
- Pedersen 承诺: 一种允许一方对值进行承诺而不透露它的密码学承诺方案。
- Schnorr 协议: 一种简单而广泛使用的零知识证明,证明了对数离散对数的知识而不揭示这个对数本身。
- zk-SNARKs(零知识简洁非互动参数知识证明): 一种特定类型的零知识证明,允许非互动地证明任意陈述的知识。
不同的零知识协议和技术基于这些原理,各自具有各自的优点、缺点和用途。这些证明在身份验证、隐私保护交易、安全投票等各种应用中都有广泛的应用,其中在不披露敏感信息的情况下证明知识的能力是非常关键的。