云中「秘密」:构建非交互式零知识证明---探索零知识证明系列(五)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

本文作者:郭宇

Once exposed, a secret loses all its power. 一旦泄露,秘密就失去了全部威力 ― Ann
Aguirre

这已经是本系列的第五篇文章了,这一篇继续深入非交互式零知识证明。 本文约 12,000 字。

系列一:初识「零知识」与「证明」

系列二:理解「模拟」

系列三:寻找「知识」

系列四:随机「挑战」

追到这里的读者想必已对零知识证明有了一个大概的认识。你是否想过这个问题:零知识证明为何可行?这里请大家思考一下(比如系列一 中的地图三染色问题的流程) …… (此处停留三分钟)下面两个要素 似乎 必不可少:

  1. 「交互」:验证者通过多次反复挑战,把证明者作弊概率降低到一个极小的值
  2. 「隐藏随机性」:验证者产生让证明者无法预测的随机数进行挑战

然而对于非交互式零知识证明—— NIZK 来说,如何实现上面两点?在 系列四 我们介绍了如何采用「随机预言机」来扮演一个虚拟的「第三方」角色,实现虚拟的「交互」与「随机挑战」。本文将深入讲述另一种方法,如何通过一段共享的字符串去除「交互」与「隐藏随机性」。这个字符串必须事先由「第三方」来随机产生,这就是传说中的「公共参考串」(Common Reference String,简称 CRS)。

CRS 的前世今生

假如我们不借助任何其它手段,限定证明者 Prover 和验证者 Verifier 只能进行「一次交互」来实现「零知识证明」,那么他们只能证明「平凡」问题,也就是计算复杂类 BPP(Bounded-error Probabilistic Polynomial time),而这个复杂度类大家一般猜想可能等价于 P(但还悬而未决,没有被证明!BPP 可以理解为 P + Randomness)。

注:如果 Prover 与 Verifier 只做一次交互,在这样的 NIZK 系统中,我们很容易能构造一个 Decision Procedure —— Verify(x, Sim(x)),来证明和证伪定理,因此只能证明平凡问题 BPP。

平凡问题虽然也可以零知识证明,但没有意义!怎么理解呢?因为验证者直接可以在多项式时间内根据「输出」求解出「秘密输入」,虽然验证者能够求解,但是「证明」本身并没有额外为验证者提供更多的「知识」。换句话说,不需要证明者出示证明,验证者就知道命题为真,于是证明过程也是零知识的。

因此,当我们讨论「零知识证明」时,要考虑带「知识」的 NP 类问题。大家都知道,P 问题是「确定性图灵机」多项式时间内可以求解的复杂类,它的执行路径对于输入 x是一个线性的状态转移。而 NP 问题是「不确定性图灵机」多项式时间可以求解的问题类。所谓的不确定性图灵机,就是它每次往前走一步是不确定的,有很多个选择,只要任何一个执行路径能到达终止状态,就表示它解决了该问题 x。换句话说,它的执行轨迹是一棵树。那么如果我们把不确定性图灵机每一步的路径选择记录下来(这个执行路径的记录叫做 witness,也就是我们反复提到的「知识」),那么把(x, witness)交给一个确定性图灵机,那么它也能在多项式时间内解决掉 x 问题。

再强调一下,「知识」能提高图灵机的解决问题的能力。

NP 问题中存在着不想「泄露」给验证者的知识 witness,这时,在一个交互式证明系统中,证明者和验证者在「知识」的掌握程度上是不对等的。

为了保证证明过程的「零知识」,我们需要保证:模拟器与验证者的不对等。可是,模拟器没有 witness啊,怎么能让他们不对等呢?上一篇我们介绍了「随机预言机」,我们通过允许让模拟器可以绑架「随机预言精灵」的方式制造不平等。本篇将讲述如何利用 CRS 来制造不平等。

CRS 是一个在证明之前就已经公开的,并且在证明者与验证者之间共享的,随机字符串。我们怎么来使用 CRS 呢?直觉上,一串双方都「知道」的信息,并不会增加「知识」不对等的情况。

首先大家会想,能不能直接用 CRS 作为随机挑战数呢?可不可以让 CRS 来代替「随机预言精灵」的角色?答案是不行!

为什么?这是因为 CRS 是在证明之前就已经产生了,如果证明者 Prover 提前知道了所有的随机挑战数,那么很显然这个随机挑战也就失去了意义。

注:请大家回想下「随机预言机」是如何保证证明者无法提前预测「随机挑战数」的?没想明白的你,请重读系列(四)。

CRS 的使命就是让「模拟器」与「验证者」不平等。怎么做呢?隐藏一些「秘密」进去。

如果进一步追问,隐藏了「秘密」有什么用呢?当然有用啦,在「理想世界」中,模拟器与抽取器才能很开心地玩耍起来(获取某些超能力) ……

1988年,Manuel Blum,Paul Feldman 和 Silvio Micali 三位先驱发表的论文 「Non-Interactive Zero-Knowledge and Its Applications」(『非交互式零知识证明及其应用』[BFM88])展示了「交互」与「隐藏随机性」的不必要性。他们给出了一个地图三染色问题的 NIZK 证明系统,在一段共享的随机产生的字符串(即CRS)的帮助下。

不过,……,我不会告诉你这个方案需要共享大概 n^4 超长的 CRS,其中 n是要证明的「命题」的长度。

1990 年,Uriel Feige,Dror Lapidot 与 Adi Shamir 三人提出了另一种构造 NP 语言的 NIZK 方案 [FLS90]。与 [BFM88] 不一样的是,这个 NIZK 方案不再基于特定的数论假设,而是基于一个密码学工具 Trapdoor Permutation。在这个方案中,FLS 提出了「隐藏比特」(Hidden Bits)的概念,然后把 Hidden Bits 藏入了 CRS。对于模拟器而言,就可以通过修改 CRS 中的 Hidden Bits 来达到模拟的效果,从而体现出对验证者 Verifier 的优越性。不过,这个方案需要共享更长的 CRS,超过 k * n^5,这里 k 是安全参数。

此后,Hidden Bits 的思路被很多人采用,值得一提的是,Kilian 与 Petrank 采用了一种更巧妙的方法来使用 Hidden Bits [KP98](这里空间太小,写不下:),成功地把 CRS 的长度缩减到了 k * n^2。后来 J. Groth 继续优化 ,把 CRS 的长度缩小到了大约 k*n[Groth10a]。

除了 Hidden Bits,J. Groth,R. Ostrovsky 与 A. Sahai [GOS06] 使用了同态加密方案 Boneh-Goh-Nissim [BGN05] 或 Boneh-Boyen-Shacham 来实现 NIZK,他们把加密方案的「公钥」当做是 CRS,同时 Prover 加密作为证明,然后利用同态性质来证明另一个 NP-Complete 问题——布尔电路的可满足性问题。这个方案的最大优点,就是 CRS 长度是固定的,因为只是一个密钥而已,长度只有 k。对于模拟器而言,它可以通过超能力,拿到这个公钥所对应的陷门,从而能够实现密封任何信息,但得到相同的密文;对于抽取器而言,它可以用超能力拿到公钥对应的私钥,从而能够解密证明得到「知识」。

Jens Groth 在 2010 年基于 KEA(Knowledge of Exponent Assumption) 假设与 Pairing 提出了一种新的 NIZK Arguments 方案[Gorth10b],这也是后续许许多多 zkSNARKs 方案的起点。这里的 CRS 由一对对的 (gxn, g⍺xn) 构成,被用来实现「知识承诺」。其中 x 与 ⍺ 是两个随机数,在产生完 CRS 之后,必须被「遗忘」。有些人把这部分需要遗忘的随机数叫做「Toxic Wastes」,这容易误导读者。他们不仅无毒无害,而且非常有用。他们是被藏入 CRS 的「秘密」,是模拟器的武器。如果模拟器得到了 x 与 ⍺,就能伪造证明,从而保证证明的零知识。而对于抽取器,他能直接通过 KEA 假设内建的抽取函数来抽取知识。

最新的 Sonic 方案[MBK+19]又在 [Groth10b] 的基础上实现了 Updateable CRS。如果任何人担心 CRS 中的秘密已经被泄露了,他就可以在原有 CRS 基础上打一个补丁,继续往里藏一个秘密,这样就能保证 CRS 的安全性。这里的 CRS 还是「Universal 全局」 的,即 CRS 只需要生成一次,就可以应付所有的命题证明。 这个方案后续被最新的 Plonk[GWC19],Marlin[CHMMVW19] 等方案采用。

接下来,我们就从一个简单的例子开始,理解如何基于 CRS 来构造 NIZK。在这之前,我们需要介绍一个 NP-Complete 问题——哈密尔顿环路问题。

哈密尔顿环路问题

想象出一个地图中有若干个城市,城市与城市间可以有公路。

假如给你一副地图,让你找出一条路径,不重复地走遍所有的公路(假设每条公路都是风景美如明信片的 Parkway,或许你想不重复地吃遍每条公路边上的麦当劳,出于某种情怀)。相信你会马上兴奋起来,这不就是小时候学过的「一笔画」么?判断一个地图能否一笔画,这是小学生做的数学题,我们可以计算每个城市连接的公路个数,根据奇偶性分成「奇点」与「偶点」。如果一个地图中存在两个奇点城市,那么你只能从一个奇点城市出发,遍历所有的公路,并且最终到达另一个奇点城市。这条路径就被称为「欧拉路径」(Euler’s Path)。

如果一个地图中所有的城市都是偶点,那么你可以从任意一个城市出发,轻松地找出一条路径,不重复地遍历所有的公路,并且回到起点。这个环路被称为「欧拉环路」(Euler’s Circuit)。

而如果地图存在超过2个以上的奇点,那么就不存在欧拉回路,比如著名的哥德斯堡七桥问题。

著名的哥德斯堡七桥问题就是这么描述,如果不重复地穿过下面七座桥。

在这里插入图片描述

哥德斯堡七桥地图显然存在多个奇点,不存在欧拉路径。如果给定任何一个地图,是否存在一个欧拉环路,这是一个 P 问题,也就是一个计算机可以在 poly(n) 多项式时间内寻找。

注:欧拉环路的寻找算法被称为 Fleury算法。

对于这样一个 P 问题, 如果一个证明者 Prover 证明他知道一个欧拉回路,那么他可以直接发送回路的明文,然后验证者 Verifier 验证回路正确与否。请注意,这个过程仍然是零知识的。因为,Verifier 并没有通过 Prover 发送的信息获得任何 额外的知识。换句话说,Verifier 并没有因为看到回路,而增强了自身计算能力,因为 Verifier 本来就可以自行计算欧拉回路。

亚瑟王的「随机」挑战:从交互到非交互式零知识证明——探索零知识证明系列(四) 本文作者:郭宇 本文已更新至Github https://github.com/sec-bit/learning-zkp/blob/master/zkp-intro/4/zkp-rom.md “Challenges are at times an indication of Lord's trust in you.” 挑战,有时是上天信任你的一种表现。― D. Todd Christ... 阅读详情

相关推荐

2023海内外零知识证明学习资料汇总(二)(深入理解零知识证明篇)

本文收集了关于零知识证明的一些学习资料(包括科普文章,论文,开源仓库及相关学习网站等),并对这些资源进行了整理分析,希望能对大家有所帮助。书接上篇,

Tesla_Zhou的博客 1483

nizk:欢迎来到Nizk源

nizk:欢迎来到Nizk源

20、加密计算:原理、应用与安全模型

本文深入探讨了加密计算的原理、应用与安全模型,涵盖同态加密(HE)和安全多方计算(MPC)两大核心技术。文章介绍了加密计算在医疗、金融、供应链等领域的实际应用场景,分析了半诚实与恶意安全模型的区别,并讨论了信息论安全、统计安全和计算安全等安全保障级别。同时,文章还阐述了秘密共享、阈值机制和有限域运算等关键技术细节,总结了当前面临的计算效率、密钥管理和标准化挑战,并展望了未来与AI、大数据等技术融合的发展趋势,为数据隐私保护提供了系统性解决方案。

solidity8miner的博客 69

区块链隐私保护文献 An Efficient NIZK Scheme for Privacy-Preserving Transactions over Account-Model Blockchain

读论文《An Efficient NIZK Scheme for Privacy-Preserving Transactions over Account-Model Blockchain》,一篇写的很好的关于区块链隐私保护的文章。

qq_41182893的博客 1259

零知识证明ZK基础

一种特殊的3轮零知识证明协议。

weixin_51591328的博客 405

NIZK零知识证明-Groth10-Short Pairing-based Non-interactive Zero-Knowledge Arguments(三)

有需要论文知道、审稿,申博资料准备,答辩等的可以私信;。

qq_41359358的博客 1135

NIZK零知识证明-Groth10-Short Pairing-based Non-interactive Zero-Knowledge Arguments ()

一句话来说,零知识证明就是想实现:证明者能向验证者证明它拥有某些知识,但是不想让验证者获得该知识。:只要证明者正确地知道某一statement,那么就能让验证者相信自己知道该statement。任何恶意证明者都不能以虚假statement欺骗验证者接受该statement。证明者在向验证者提供证明的过程中不泄漏任何除statement正确性之外的信息。:任何承诺方都不能将已有的承诺值 Open 成不同的内容,即接收方可以确信。为知识承诺,因为证明者在不“知道”所承诺的值的情况下,不能做出有效的承诺。

qq_41359358的博客 1233

12、移动云计算安全措施解析

本文深入解析了移动云计算环境下的安全措施,涵盖了云安全的基础措施,包括访问控制与加密、虚拟机管理器(VMM)安全以及用户控制的安全措施。同时,针对移动云计算的新特性,探讨了安全代码分区和卸载、移动用户认证以及安全移动数据管理等新需求与解决方案。文章还总结了现有安全措施,并展望了未来发展方向,如全同态加密优化、代码分区安全性增强、多因素认证强化及数据安全共享机制的研究。

pea55的博客 85

34、《可自我主权身份(SSI)治理框架解析》

本文深入解析了可自我主权身份(SSI)的四层治理框架,涵盖Trust over IP栈中从底层分布式账本技术(DLT)管理到顶层数字信任生态系统的完整治理体系。文章详细阐述了各层的核心角色与职责,包括管理员、机构、发行者、验证者及治理机构,并探讨了凭证注册处、传递信任、数字监护等关键机制。通过流程图和表格清晰展示层级关联与角色分工,同时分析了治理框架如何解决权威发行者发现、跨生态信任传递等实际问题,最后展望了隐私强化、跨域融合、智能自动化等未来发展趋势,为构建安全、互操作的数字信任生态提供系统性指导。

vim8coder的博客 54

AI原生同态架构:从联邦学习到密文计算的范式跃迁与工程实践

在数据隐私保护日益重要的今天,联邦学习作为一种分布式AI技术,通过在本地训练模型并仅交换中间参数,有效缓解了数据孤岛问题。其核心原理是‘数据不动,模型动’,在保护原始数据不离开本地的前提下实现多方协同建模。然而,联邦学习在通信效率、同步机制以及对参与方诚实度的依赖方面仍面临挑战。同态加密技术作为密码学领域的‘圣杯’,允许在加密数据上直接进行计算,为数据隐私提供了理论上的最高保障。AI原生同态架构正是将这一原理工程化的产物,它并非简单地为现有AI框架套用加密外壳,而是从计算范式出发,重构编译器、算子库及硬件协

359

4、区块链在分布式系统安全中的应用与挑战

本文探讨了区块链技术在分布式系统安全中的多种应用场景及其面临的挑战。重点分析了区块链在云数据溯源、汽车安全与隐私保护、物联网交通安全、网络安全信息共享等方面的实际应用,并对区块链在安全设计、隐私保护和共识协议等方面进行了深入讨论。同时,文章比较了多种区块链共识协议,并提出了选择合适协议的设计哲学。通过系统分析区块链在不同领域的应用,展示了其在提升安全性和可靠性方面的巨大潜力,并指出未来需要持续研究和优化以应对复杂的安全挑战。

n8m7b6v5c4的博客 93

23、网络物理系统与云数据安全解析

本文深入探讨了网络物理系统与云数据安全的核心挑战及应对策略。在网络物理系统方面,重点分析了数据真实性与合理性问题,提出通过保护传感器、利用物理模型和证人机制增强安全性;在云数据安全方面,系统阐述了存储、访问、查询等大安全挑战,并介绍了加密存储、可搜索加密、零知识证明等关键技术解决方案。同时强调人员专业素养与跨领域协作的重要性,构建全面的安全防护体系。

gg901的博客 44

【信息科学与工程学】【安全领域】 第三十三篇 数字签名和数字水印

联邦学习(Federated Learning, FL)与差分隐私(Differential Privacy, DP)的结合,是隐私保护机器学习(PPML)的核心范式,通过“数据不动模型动”的分布式架构和噪声注入机制,在医疗、金融等领域实现了安全高效的数据协作。

weixin_49199313的博客 1346

【信息科学与工程学】计算机科学与自动化——第三十篇 调度理论和调度算法01——资源调度算法

算法逻辑

weixin_49199313的博客 596

【信息科学与工程学】【安全领域】第三十篇 网络安全算法表02

​分级处理​:实时增量 + 离线全量 + 自动校验三线并行​最终一致优先​:强同步仅用于支付等核心场景​双向容错​:Redis侧:读CK兜底(CK侧:自动屏蔽校验失败分区​业务适配​:graph LR高实时场景 --> Redis写+双重读分析场景 --> 放宽CK同步延迟报表场景 --> T+1校准保障该方案已在京东、美团等千亿级数据平台验证,支撑双11级流量下Redis与ClickHouse的数据协同。

weixin_49199313的博客 1280

【信息科学与工程学】【数据中心】第三十篇 云计算数据中心的学科知识04

编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017)

weixin_49199313的博客 201

浅谈零知识证明

零知识证明是实现隐私保护的密码学方案。曾被称为密码学领域的一颗皇冠,用于在不泄露具体秘密情况下对问题一种正确证明方法。尤其是在金融领域实现数据隐私保护方面的创新业务场景里实现落地应用。 我们今天就从零知识证明的基本概念、研究进展、实现原理方面做一些简单阐述。 一、零知识证明概述 零知识证明(Zero-Knowledge Proof, ZKP)是现代密码学中的一类经典协议,用于在不泄露关于某个命题任何信息的情况下证明该命题的正确性。近年来,随着区块链等新兴技术的发展以及隐私计算需求的兴起,零知识证明技术再次成

jambeau的博客 2万+

55、密码学中的LWE与NIZK:从理论到实践

本博客深入探讨了密码学中基于学习误差(LWE)构建非交互式零知识证明(NIZK)系统的挑战与进展。重点分析了LWE的理论基础及其在多项密码学协议中的广泛应用,以及构建用于NP问题的通用NIZK证明系统的关键问题。引入了证明者辅助的不经意密文采样(POCS)这一新概念,并将其与LWE结合,为解决NIZK构建难题提供新思路。此外,还对格基可撤销分层身份基加密(R(H)IBE)的安全性进行了详细分析。研究为未来构建更安全、高效的密码方案提供了理论支持和实践指导。

efc12345678的博客 110
上一篇: 零知识证明 Learn by Coding:libsnark 入门篇
下一篇: 以太坊颠覆了以太坊:引入密码学实现2.0性能突破
安比实验室SECBIT
博客等级 码龄8年 169粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值