news 2026/5/23 17:40:20

零知识证明 (ZK) 科普:如何在不泄露密码的情况下证明“我知道密码”?(附 Python 示例)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
零知识证明 (ZK) 科普:如何在不泄露密码的情况下证明“我知道密码”?(附 Python 示例)

标签:#密码学 #ZeroKnowledge #Python #区块链 #隐私计算 #Web3


🚪 一、 核心隐喻:阿里巴巴的山洞

如果不使用数学公式,如何向别人解释 ZK?最经典的例子是“阿里巴巴与四十大盗的山洞”

场景设定
  • Peggy (证明者):声称自己知道打开密门的咒语(密码)。
  • Victor (验证者):想验证 Peggy 是否在吹牛,但他不能听到咒语。
  • 山洞:是一个环形,入口分叉为A 通道B 通道。深处有一道石门,只有念咒语才能打开,连通 A 和 B。
验证流程
  1. 承诺 (Commitment):Victor 站在洞口背过身。Peggy 随机走进 A 或 B 通道(比如进了 A)。
  2. 挑战 (Challenge):Victor 转过身,大喊:“Peggy,从B 通道出来!”
  3. 响应 (Response)
  • 如果 Peggy真的知道咒语:她打开石门,从 B 出来(即使她刚才是从 A 进去的)。
  • 如果 Peggy不知道咒语:她只能祈祷自己刚才恰好走进了 B。如果她进了 A,她就过不去了,验证失败。
为什么有效?
  • 一次实验,Peggy 靠运气骗过 Victor 的概率是 50%。
  • 连续重复20 次,Peggy 全靠运气的概率是 。
  • 只要次数足够多,Victor 就能以极高的置信度相信 Peggy 知道密码,且整个过程 Victor从未听到过咒语

交互式证明流程图 (Mermaid):

Victor (验证者)Peggy (证明者)Victor (验证者)Peggy (证明者)轮次 1验证通过 (置信度 50%)... 重复 N 轮 ...轮次 N验证通过 (置信度 99.99%)随机选择路径 A我进去了 (承诺)请从 B 出来! (挑战)打开密门,走到 B从 B 走出 (响应)随机选择路径 B我进去了请从 A 出来!打开密门,走到 A从 A 走出

🧮 二、 数学原理:Schnorr 协议

隐喻只能讲逻辑,真正在计算机里跑的是数学。
最简单的 ZK 实现是基于离散对数难题的 Schnorr 身份认证协议。

核心公式

假设:

  • 是生成元, 是大质数(公开常数)。
  • 私钥(Peggy 的秘密)。
  • 公钥,满足 (Victor 知道 ,但算不出 )。

证明过程(三步走):

  1. Commitment (承诺):
    Peggy 生成一个随机数 ,计算 。
    把 发给 Victor。(相当于“我进洞了”)
  2. Challenge (挑战):
    Victor 生成一个随机数 (挑战值)。
    把 发给 Peggy。(相当于“从 B 出来”)
  3. Response (响应):
    Peggy 计算 。
    把 发给 Victor。
  4. Verification (验证):
    Victor 验证等式: 是否成立。

为什么能验证?

如果等式成立,说明 Peggy 确实用了 来计算 ,但 Victor 只看到了 ,这三个数混在一起,无法反推出 。


💻 三、 Python 代码实战

让我们用 Python 模拟这个过程。

importrandomclassZKProofSystem:def__init__(self):# 0. 公共参数 (模拟的小质数,实际应用中非常大)self.p=7919# 大质数self.g=2# 生成元defgenerate_keypair(self):"""生成私钥和公钥"""private_key=random.randint(1,self.p-1)# x (秘密)public_key=pow(self.g,private_key,self.p)# y = g^x mod preturnprivate_key,public_key# --- 角色扮演 ---classProver:def__init__(self,sys,x):self.sys=sys self.x=x# 私钥,绝对不能泄露self.r=0# 临时随机数defcreate_commitment(self):"""第一步:生成承诺 t = g^r"""self.r=random.randint(1,self.sys.p-1)t=pow(self.sys.g,self.r,self.sys.p)returntdefcreate_response(self,c):"""第三步:计算响应 z = r + c * x"""# 注意:这里是在指数层面的计算,严格来说应该模 (p-1),但为了演示简化逻辑# 实际 Schnorr 协议中 z = (r + c * x) mod (p-1)z=self.r+c*self.xreturnzclassVerifier:def__init__(self,sys,y):self.sys=sys self.y=y# 只知道公钥defcreate_challenge(self):"""第二步:生成随机挑战 c"""returnrandom.randint(1,100)defverify(self,t,c,z):"""第四步:验证 g^z == t * y^c"""# 左边 = g^zlhs=pow(self.sys.g,z,self.sys.p)# 右边 = t * y^crhs=(t*pow(self.y,c,self.sys.p))%self.sys.preturnlhs==rhs# --- 运行模拟 ---if__name__=="__main__":# 初始化系统zk=ZKProofSystem()print(f"[*] 系统参数: p={zk.p}, g={zk.g}")# 1. 密钥生成secret_password,public_id=zk.generate_keypair()print(f"[*] Peggy 的秘密 (x):{secret_password}")print(f"[*] Victor 知道的公钥 (y):{public_id}")print("-"*30)# 2. 实例化角色peggy=Prover(zk,secret_password)victor=Verifier(zk,public_id)# 3. 开始交互# Step 1: 承诺commitment_t=peggy.create_commitment()print(f"[1] Peggy 发送承诺 t:{commitment_t}")# Step 2: 挑战challenge_c=victor.create_challenge()print(f"[2] Victor 发送挑战 c:{challenge_c}")# Step 3: 响应response_z=peggy.create_response(challenge_c)print(f"[3] Peggy 发送响应 z:{response_z}")# Step 4: 验证result=victor.verify(commitment_t,challenge_c,response_z)ifresult:print("\n✅ 验证成功!Victor 确信 Peggy 知道密码,但他依然不知道密码是多少。")else:print("\n❌ 验证失败!")

🚀 四、 零知识证明的未来

上面的 Schnorr 协议是交互式的(需要一来一回)。
在区块链中,我们更多使用非交互式零知识证明 (NIZK),如zk-SNARKs。它通过复杂的数学变换(多项式承诺),让 Peggy 直接生成一段 Proof,Victor 随时随地都能验证,无需实时在线。

ZK 的应用场景:

  1. Layer 2 扩容 (zk-Rollup):链下计算几千笔交易,只把一个轻量的 ZK 证明提交到以太坊主网,Gas 费降低 90%。
  2. 隐私交易:转账时隐藏发送方、接收方和金额(如 Tornado Cash)。
  3. 身份认证:证明“我已满 18 岁”,而无需出示写有出生年月日和家庭住址的身份证。

🎯 总结

零知识证明看似悖论,实则是概率与数论的完美结合。
它解决了数字世界中**“信任”与“隐私”**的终极矛盾。
如果你看懂了上面的 Python 代码,恭喜你,你已经迈入了 Web3 最硬核技术的大门。

Next Step:
尝试了解Circom语言和SnarkJS。这是一个可以让你编写电路逻辑并生成真实 zk-SNARK 证明的开发工具栈,试着写一个“证明我知道方程 的解,但不告诉你是 3”的小程序。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/21 9:57:07

大数据领域分布式计算的性能优化策略

大数据分布式计算性能优化:从“堵车”到“通途”的系统调校指南 关键词 分布式计算、性能优化、数据本地化、资源调度、Shuffle优化、并行度调整、容错机制 摘要 当你用分布式集群处理100TB日志时,有没有遇到过这样的场景:任务卡了6小时还没跑…

作者头像 李华
网站建设 2026/5/20 10:50:16

吐血推荐9个AI论文写作软件,专科生毕业论文轻松搞定!

吐血推荐9个AI论文写作软件,专科生毕业论文轻松搞定! AI工具助力论文写作,专科生也能轻松应对 在当前的学术环境中,AI工具已经成为许多学生不可或缺的助手,尤其是在论文写作方面。对于专科生来说,撰写一篇符…

作者头像 李华
网站建设 2026/5/9 19:33:35

第五届AIGC开发者大会年度对话:超级算力如何打造超级产品?

作者:王聪彬 现如今,算力正从技术底座走向产品前台,开始塑造产品形态和应用边界。随着优质算力在云、边、端环境中普及,企业和开发者开始关注如何将算力、高性能计算能力和软件平台结合起来,把技术潜力转化为可用、可落…

作者头像 李华
网站建设 2026/5/6 1:20:57

从“企业AI”到“AI企业”,这场会议把AI落地路径讲透了

作者:于佳卉 在2026第五届AIGC开发者大会上,由至顶科技主办的“企业AI应用与本地算力实践”分论坛成为现场焦点之一。来自企业级AI服务、前沿模型与推理技术、产业应用实践等领域的嘉宾,从产业趋势、工程方法、组织变革等多个维度&#xff0c…

作者头像 李华