先去掉神秘感。零知识证明(Zero-Knowledge Proof)是为了解决一个很朴素的信任问题:我手里有一份证据,但我不想把证据本身给你,我只想让你相信「我知道这份证据」。
形式化地说:证明者(Prover)要向验证者(Verifier)证明「我知道一个值 w,使得公开函数 f(x, w) = true」,而验证者除了「这个陈述为真」之外,什么都学不到。举个区块链里的具体例子:假设某笔转账要满足「转账之后我的余额仍然非负」,我不想公开我的全部余额明细,但我想让你相信这个条件成立——零知识证明允许我把这个条件变成一个数学陈述并给出证明。
关键认知:ZK 证明的是「某个计算被正确执行了」,它默认不隐藏输入本身。 你以为的「ZK 等于匿名」,其实需要额外的隐私设计才能实现。
把 ZK 理解成「可验证的计算摘要」,而不是「加密」。它能证明「我算对了」,但不自动保证「你看不到我算了什么」。