1、零知识证明在区块链应用中零知识证明在区块链应用中的的 安全和隐私问安全和隐私问题题大大纲纲区块链和区块链和ZKP介介绍绍零知识证明在区块链应用中的安全和隐私问零知识证明在区块链应用中的安全和隐私问题题实现漏洞 信任风险非屏蔽交易信息泄漏 密码方案风险其他风险总总结结比特币的隐私问比特币的隐私问题题比特币:去中心化数字货币防止双花:广播交易到公开账本(区块链)比特币不存在匿名性假名匿名 隐私问题:个人交易记录/账户余额/商家现金流钱的等价性:黑钱/收藏币隐隐私私 VSVS 可审计可审计性性保护隐私保护隐私?数据加数据加密密加密与公开可审计性存在冲加密与公开可审计性存在冲突突零知识证零知识证明明x
2、R,w接受或接受或拒拒 绝绝xR完备性:完备性:如果论述是正确的,证明者可以说服验证者正确性:正确性:如果论述是错误的,证明者无法说服验证者(可忽略概率说服)零知识性:零知识性:验证者除了论述是正确的之外,无法获得任何其他信息非交互式零知识证明非交互式零知识证明(NIZK)如果因式分解困难,对任意如果因式分解困难,对任意NP语言都存在语言都存在NIZK零知识证零知识证明明加密全部交易证明证明:非交互式零知识证明,证明加密的交易合非交互式零知识证明,证明加密的交易合法法(满足合法规则、未双花(满足合法规则、未双花)解决加密与公开可审计性的冲解决加密与公开可审计性的冲突突zkSNARKszkSNA
3、RKs通用性零知识证明方案性能通常不通用性零知识证明方案性能通常不高高 区块链性能要求区块链性能要求高高zkSNARKsSuccintNon-interactive Argumentof Knowledge Zero-knowledgezkSNARKszkSNARKs流程流程图图待证明问待证明问题题电电路路R1CSQAP参数生成证明者验证者FlattenSynthesizeIfftSetupPKVKx,xR(x,w)R区块链上区块链上zkSNARKszkSNARKs的应用流的应用流程程待证明问待证明问题题电电路路R1CSQAP项目方项目方:参数生成交易生交易生成成全网验全网验证证Flatten
4、SynthesizeIfftSetupPKVKx,xR(x,w)R1.验证逻验证逻辑辑2.等价转等价转换换3.公链参数生公链参数生成成4.交易生成交易生成 (c1,c2,c3,)5.全网验全网验证证全景全景图图零知识证明在区块链应用中零知识证明在区块链应用中的的 安全和隐私问安全和隐私问题题实现漏实现漏洞洞 信任风信任风险险非屏蔽交易信息泄非屏蔽交易信息泄漏漏 密码方案风密码方案风险险其他风其他风险险实现漏实现漏洞洞实现漏实现漏洞洞内存破坏漏内存破坏漏洞洞内存安全语言:rust、java、golibSNARKs(C+),该场景中,内存破坏相关漏洞难以利用逻辑漏逻辑漏洞洞电路设计问题 应用层逻辑
5、问题密码实现漏密码实现漏洞洞新的密码原件实现容易出现漏洞电路设电路设计计电路设计复电路设计复杂杂大量密码算法实现 大量约束、优化审计需要高超的密码技巧以以zcash为为例例输入输入输出输出绑定签名输输入入锚 rt唯一值 nf根节点rt使用签名值承诺 cv证明输输出出输出承诺 cmu临时密钥 epk密文1密文2值承诺 cv证明ZcashZcash屏蔽交屏蔽交易易证明输入的总额与输出的总额相等输出电输出电路路公公开开私私有有 中间中间值值摘自qedit的审计报告输入电输入电路路公公开开私私有有 中间中间值值摘自qedit的审计报告电路常见问电路常见问题题电路设计漏洞电路设计漏洞:Zcash Fae
6、rie Gold攻击攻击者可选择相同的rho,造成接收者无法使用收到的钱。链接:https:/ Version 2019.0.1 Overwinter+SaplingPage 139:cmold 与cm未绑定,恶意攻击者可对相同note选择多个cmold,产生多个nf,造成双花LibrustZcash中实现没有该问题应用逻辑安全问应用逻辑安全问题题应用开发者调用应用开发者调用ZKP库来实现库来实现ZKP应应用用对底层对底层ZKP缺乏足够理解,代码容易产生安全漏缺乏足够理解,代码容易产生安全漏洞洞SemaphoreSemaphore双花问双花问题题未限定未限定nullifier长度,造成双长度,
7、造成双花花TronTron零知识参数未校零知识参数未校验验未校验参数直接使用未校验参数直接使用Librustzcash,造成多种安全问题造成多种安全问题(如双花如双花)TronTron nullifier双双花花未校验一笔交易多个输入的未校验一笔交易多个输入的nullifier是否不同,造成双是否不同,造成双花花密码实现安全问密码实现安全问题题新方案实现易带来额外风新方案实现易带来额外风险险LibSNARKs:R1CS-to-QAP 规约漏洞只有QAP中多项式是线性独立的,才能保证soundness 增加冗余约束修复问题 https:/eprint.iacr.org/2015/437.pdfZ
8、cash侧信道漏侧信道漏洞洞Reject攻击、Ping攻击节点处理与自身地址相关的交易:信息泄漏 打破节点匿名性https:/crypto.stanford.edu/timings/pingreject.pdf信任风信任风险险setupsetup信任问信任问题题zkSNARKs思路思路:提前生成验证者挑战:x 保留加密的x,丢弃明文x验证过程验证过程:检查证明(A,B,C)满足:已知明文x,可伪造任意证明 不可检不可检测的后门(测的后门(x)任意创建证明,无法被发现(零知识性)解决信任问题解决信任问题:MPC生成加密的xMPC1:Power MPC1:Power ofof tautauMPC生
9、成参生成参数数 (可通用给任何电路可通用给任何电路)公开可验公开可验证证安全前提:至少一人诚安全前提:至少一人诚实实MPC2:SaplingMPC2:Sapling MPCMPC针对特定电路生成参针对特定电路生成参数数 两个两个MPC阶段缺一不阶段缺一不可可MPCMPC问问题题Ethereum、Tron都在进行都在进行MPC仍有很多项目没有可信的setupMPC过程完全人为控过程完全人为控制制 一些MPC参与经历如果你没有参与,你不能如果你没有参与,你不能100%确认安确认安全全 还没有考虑软件实现问题例子例子:ZoKratesZoKratesZoKrates:零知识证明智能合约编译零知识证明
10、智能合约编译器器将验证逻辑编译为零知识验证合约 参数生成由合约方控制合约生成者:证明伪造非屏蔽交易信息泄非屏蔽交易信息泄漏漏ZcashZcash 交易分交易分类类85%14%1%t to tt to ss to ss to t2019-092019-09透明交易部分频闭交易完全频闭交易大多数的交易可被追大多数的交易可被追溯溯ZcashZcash 货币货币池池95%3%2%透明池sapling池sprout池2019-092019-09经验式分经验式分析析非屏蔽交易信息泄非屏蔽交易信息泄漏漏相似的使用习惯相关的地址:地址聚类分析 相关的金额:金额匹配分析 相关的时间:时间相关分析案例分析案例分析
11、:Shadowbrokers地址地址A地址地址C地址地址B1.1111 Zec5.4321 Zec6.5432 Zec屏蔽池USD1天后轻节点隐私问轻节点隐私问题题大多数参与者是轻节大多数参与者是轻节点点解密后才能知道交易归属 轻节点无区块数据解密交易:轻节点需将解密密钥交给全节点 屏蔽交易对轻节点不友好:计算开销大轻节点隐私无法得到保轻节点隐私无法得到保障障目前目前ZKP数字货币项目主要为全节点设计数字货币项目主要为全节点设计:市场上未见有好的轻节点解决方市场上未见有好的轻节点解决方案案TronTron 交易扫描交易扫描RPCRPC服服务务非屏蔽交易信息泄非屏蔽交易信息泄漏漏信息泄漏原因信息
12、泄漏原因:轻节点对屏蔽交易支持不轻节点对屏蔽交易支持不足足 交易所仅支持透明交交易所仅支持透明交易易经验式对抗方法经验式对抗方法:使用屏蔽使用屏蔽交交易易 每次使用新地每次使用新地址址 金额金额不要相不要相同同等待足够长的时等待足够长的时间间最佳方案最佳方案:只使用屏蔽交只使用屏蔽交易易密码方案风密码方案风险险密码方案风密码方案风险险ZKP技术相对较技术相对较新新16年论文,17年大规模使用 有待时间考验参数选择和优化比较激参数选择和优化比较激进进可证明安可证明安全全有的困难问题并不标准 依赖太多安全问题缺乏足够的审计ZcashZcash伪造漏伪造漏洞洞CVE-2019-71672018年3月
13、1日发现(Ariel Gabizon),2019年公开 零知识证明密码方案BCTV14漏洞任意人可伪造证明,凭空创造Zcash 影响多个Zcash的分叉项目大概大概8个月时间才完成修个月时间才完成修复复改变整个证明方案,升级全网没人知道漏洞是否被利用,因为是零知识的Zcash官方认为漏洞没有被利用官方认为漏洞没有被利用:很少有人拥有的高水平密码技术发现该漏洞 未发现zcash总额出现明显问题ZcashZcash伪造漏伪造漏洞洞CVE-2019-7167BCTV14并不存在可证明安全 BCTV14参数生成存在冗余元素 可被利用生成伪造证明原理并不复杂BCTV14 升级为升级为Groth16可证明
14、安全并非第一次出现漏并非第一次出现漏洞洞Bryan Parno发现过另一个漏洞是否会是最后一次是否会是最后一次?ZcashZcash承诺和哈承诺和哈希希方案复杂方案复杂仅承诺与哈希就涉及多个方案多个安全证明仅承诺与哈希就涉及多个方案多个安全证明 有待时间考验有待时间考验摘自qedit的审计报告其他风其他风险险完美的零知识完美的零知识?数学上完美的零知识方数学上完美的零知识方案案Groth16实际应用会有额外的信息泄实际应用会有额外的信息泄漏漏zcash的例子:证明是统计上零知识的密文安全性:依赖于困难问题 打破了完美的零知识性完美的零知识完美的零知识性性 完美的隐私保完美的隐私保护护输出输输出
15、出输出承诺 cmu临时密钥 epk密文1密文2值承诺 cv证明加密加密给给ivk,ovk屏蔽地址不可链接屏蔽地址不可链接性性屏蔽地址不可链接性屏蔽地址不可链接性:安全性依赖于Jubjub群上的DDH问题Jubjub群并非常用的ECC群,而是为了ZKP性能特制的DDH可能会被攻破交易信息在链上不可被抹交易信息在链上不可被抹去去目前不可链接,不代表未来不可链目前不可链接,不代表未来不可链接接隐私与侧信隐私与侧信道道侧信道通常不被重侧信道通常不被重视视 利用困难不直接造成安全问题隐私系统中侧信道非常重隐私系统中侧信道非常重要要 隐私直接遭到破坏Groth16Groth16侧信道攻侧信道攻击击Timing侧信道侧信道:A、B、C的计算时间,直接与秘密的计算时间,直接与秘密ai相相关关其他侧信道其他侧信道:Cache总总结结ZKP应用的安全风应用的安全风险险 实现漏实现漏洞洞信任风信任风险险非屏蔽交易信息泄非屏蔽交易信息泄漏漏 密码方密码方案风案风险险其他风其他风险险ZKP是一项新技是一项新技术术实际应用中仍然存在很多问实际应用中仍然存在很多问题题 越来越成越来越成熟熟谢谢!