zk-STARK/zk-SNARK中IP,PCP,IPCP,IOP,PIOP,LIP,LPCP模型介绍
我们的目标是构造 zkSNARK。在我们的目标场景中,Prover 只需要发送一个简短的证明字符串给 Verifier,而 Verifier 不需要给 Prover 发送任何消息。
直接构造一个满足这个场景的 zkSNARK 可能会很困难。一个更灵活的方式是在先在理想模型下构造证明系统,然后用一个通用的转换,把这个只能在理想场景下的系统转化成现实场景中可以工作的 zkSNARK。
理想模型中,就是指这个模型用到了场景中并不存在的功能,叫做理想功能。理想功能的存在使得构造证明更加方便。构造好之后,使用密码学工具模拟这个不存在的功能,以实现这个理想模型。
下图是 ZKP 常用的理想模型,以及它们之间的转换关系。接下来我们会一一介绍这些模型以及它们之间的转换的具体实现。

IP


PCP
Babai 等人在 1991 年提出了随机可查证明 (Probabilistically Checkable Proof, PCP)。在 PCP 模型中,Prover 构造一个证明字符串,叫做 PCP 证明。PCP 证明的长度可以非常长,远远超过 Verifier 的计算能力。所以,Prover 不会直接把 PCP 证明发送给 Verifier,而是向 Verifier 发送一个预言机 (Oracle),叫做 PCP 预言机。Verifier 可以随意查询 PCP 预言机,获取 PCP 字符串任意位置的比特。

为了理解 IP 和 PCP 的关系,我们举一个现实中的例子。我们请上我们熟悉的主人公 Alice 和 Bob。假设 Alice 是一名即将毕业的研究生,Bob 的任务是评审 Alice 的课题是否合格。IP 模型就是答辩,Alice 和 Bob 直接对话,如果 Alice 能成功回答 Bob 的所有提问,Alice 就成功毕业了。而在 PCP 模型中,没有答辩,Alice 只是把毕业论文发给 Bob,而毕业论文超级长,Bob 不可能看完论文,只能在论文中随机挑选几段来读,如果挑的这些段落都没有问题,相互之间逻辑通顺,Bob 就相信 Alice 的课题是合格的。
PCP 预言机提供了这样的功能:它本身很短,传递它只需要很小的通信量;它传递的信息量却很大,通过它可以随机访问一个很长的字符串。显然,真正的 PCP 预言机是不存在的,PCP 是一个理想化的模型。


IPCP
IPCP (Interactive PCP) 模型可以看做 IP 模型和 PCP 模型的相加。在 IPCP 模型中,Prover 向 Verifier 发送了 PCP 预言机后,Prover 和 Verifier 继续进行交互。交互过程中,Verifier 可以不时地访问 PCP 预言机。

继续使用上一节中 Alice 和 Bob 的例子。如果说 IP 模型是只有答辩,PCP 模型是只有毕业论文,那么 IPCP 模型就是在 Alice 答辩之前把毕业论文发给 Bob。在答辩过程中,Bob 可以一边看毕业论文一边向 Alice 提问。
基于 IPCP 模型构造的证明系统也可以通过 Merkle-Tree 或一般的 VC 方案转化成 IP 模型下的证明系统,过程和 PCP 模型的转换完全一样,区别仅在于,Verifier 在查询 PCP 证明的请求中可能夹杂着普通的交互。
IP 模型和 PCP 模型都可以看做是特殊的 IPCP 模型。其中,IP 模型相当于在 IPCP 模型中 Prover 发送一个空预言机给 Verifier。PCP 模型相当于在 IPCP 中省略掉 Prover 和 Verifier 的对话环节。
IOP
如果说 IPCP 模型是把 IP 和 PCP 模型做加法,那么 IOP (Interactive Oracle Proof) 模型就是把 IP 和 PCP 做乘法。在 IOP 模型中,Verifier 向 Prover 发送消息,而 Prover 则向 Verifier 发送 PCP 预言机。Verifier 可以随意查询 Prover 发过的任何 PCP 预言机。

继续使用前面 Alice 和 Bob 的例子来解释 IOP 模型。Alice 把毕业论文发给 Bob,Bob 给 Alice 回复一个简短的评论意见,然后 Alice 再写一篇论文发给 Bob,Bob 再回复,这样来回进行多次。这个过程中,Bob 可以随时阅读 Alice 发给过他的任何一篇论文,当然 Bob 的时间仍然不够,Bob 仍然只能随机选取一小部分阅读。最后,Bob 判断 Alice 的课题是否合格。
和 PCP、IPCP 一样,在 IOP 模型下构造的证明系统也可以类似转化成 IP 模型下的证明系统。
IPCP 模型可以看做特殊的 IOP 模型。在 IPCP 模型中,把对话环节的 Prover 消息都看做一个 PCP 预言机,那么一个 IPCP 模型下的协议就可以看做 IOP 模型下的协议。
IOP (Interactive Oracle Proofs)是一个交互式证明模型。
在一个交互式证明模型中,两个算法Prover和Verifier进行交互,Prover的目标是向Verifier证明一个实例x属于语言L。例如,对于RPT问题而言,实例x就是一个RS码f(S),而语言L就是RS[F,S,ρ]。
IOP是在两个更早的交互式证明模型IP和PCP的基础上发展而来的。
IP (Interactive Proofs):最早提出的交互式证明模型。在这个模型中,Prover和Verifier进行多轮交互,交互结束后,Verifier输出0或者1
PCP (Probabilistic Checkable Proofs):在这个模型中,Prover和Verifier只进行一次交互,这一次交互中,Prover向Verifier发送一个字符串,叫做PCP。和IP的主要区别是,Verifier不需要读取完整的PCP字符串,而是可以对其进行随机访问。Verifier计算结束后,输出0或者1
IOP其实就是IP和PCP的结合:它像IP一样允许多轮交互,而每一轮交互都是一个PCP模型,即Verifier可以随机访问Prover发来的字符串,而不需要读取整个字符串。多轮交互结束后,Verifier输出0或者1。
IOP的一个变种叫做IOPP,这个多出来的P就是Proximity。在上一节介绍RPT时讲过,Proximity的意思是x要么是合法的,要么和L中的任何一个元素都相差至少δ距离。
PIOP
多项式 IOP (Polynomial IOP, PIOP) 模型是对 IOP 模型的进一步一般化。和 IOP 模型类似,在 PIOP 模型中,Verifier 向 Prover 发送消息,而 Prover 向 Verifier 发送预言机,不过这次不同的是,Prover 发送的是多项式预言机。

因为多项式预言机可以实现 PCP 预言机的功能,IOP 模型可以看做特殊的 PIOP 模型。
把 PIOP 模型下构造的证明系统转化为 IP 模型下的系统,基本思想是和 PCP、IPCP 以及 IOP 的情况一致的,即让 Prover 代替多项式预言机的角色,但是需要的密码学工具就不一样了。简单的 Merkle-Tree 或 VC 是不能模拟多项式预言机的。我们要用到一个更强大的密码工具,叫做多项式承诺 (Polynomial Commitment, PC)。

接下来我们介绍另外两个模型,LIP 和 LPCP。目前已有的 Verifier 复杂度和证明大小为常数级别的 zkSNARK 都是基于这两个模型构造的。
LIP
在线性 IP (Linear IP, LIP) 模型中,Prover 和 Verifier 进行对话。但是,相比于 IP 模型,增加了一些限制条件:Prover 只能是线性的。

这样一来,不仅 Prover,连 Verifier 也只能够进行线性运算了。这么一来,这个系统就没多大意义。为了能让 Verifier 做至少一次非线性运算,一个方法就是引入双线性对。双线性对允许对密文做乘法,但是乘法的计算结果是在另外一个密文空间中的,所以不影响安全性。

LPCP

参考:
[1]https://www.528btc.com/blocknews/160860602772697.html
[2]https://blog.nowcoder.net/n/f9742fdb7b2c459ca2be87c7ff5a7f46
相关文章:
zk-STARK/zk-SNARK中IP,PCP,IPCP,IOP,PIOP,LIP,LPCP模型介绍
我们的目标是构造 zkSNARK。在我们的目标场景中,Prover 只需要发送一个简短的证明字符串给 Verifier,而 Verifier 不需要给 Prover 发送任何消息。 直接构造一个满足这个场景的 zkSNARK 可能会很困难。一个更灵活的方式是在先在理想模型下构造证明系统&…...
StreamAPI
StreamAPI 最近开发用上了 Java8的StreamAPI,(咋现在才用?嗯哼,项目需要)自己也不怎么会,来总结一波吧! 别认为好抽象!!!干他就完事 一.StreamAPI介绍 就是用来处理集合的数据 其实到后面会发现和SQL的语句是差不多的~哈哈?你不信?往下面看 Stream:英文翻译叫做流 举个粟子…...
MySQl高可用集群搭建(MGR + ProxySQL + Keepalived)
前言 服务器规划(CentOS7.x) IP地址主机名部署角色192.168.x.101mysql01mysql192.168.x.102mysql02mysql192.168.x.103mysql03mysql192.168.x.104proxysql01proxysql、keepalived192.168.x.105proxysql02proxysql、keepalived 将安装包 mysql_cluster_…...
java+Selenium+TestNg搭建自动化测试架构(3)实现POM(page+Object+modal)
1.Page Object是Selenium自动化测试项目开发实践的最佳设计模式之一,通过对界面元素的封装减少冗余代码,同时在后期维护中,若元素定位发生变化,只需要调整页面元素封装的代码,提高测试用例的可维护性。 PageObject设计…...
oracle11g忘记system密码,重置密码
OPW-00001: 无法打开口令文件 cmd.exe 使用管理员身份登录 找到xxx\product\11.2.0\dbhome_1\database\PWDorcl.ora文件,删除 执行orapwd fileD:\app\product\11.2.0\dbhome_1\database\PWDorcl.ora passwordtiger (orapwd 在\product\11.2.0\dbhome_1\BIN目录下…...
黑马 Vue 快速入门 笔记
黑马 Vue 快速入门 笔记0 VUE相关了解0.1 概述0.2 MVVM0.3 JavaScript框架0.4 七大属性0.5 el:挂载点1 VUE基础1.0 第一个vue代码:Hello,vue1.1 v-bind 设置元素的属性 简写 :1.2 v-if , v-else , v-else-ifv-if , v-e…...
HTTP协议知识体系核心重点梳理
HTTP协议知识体系核心重点梳理TCP/IP协议1.四层模型2.通信过程3.tcp三次握手和四次挥手4.tcp安全传输4. 一次HTTP通信流程HTTP协议HTTP/1.1CookieHttp报文格式内容编码分块传输编码HTTP状态码重定向状态码常用的通用首部cache-controlExpiresConnectionTransfer-Encoding常用的…...
Nginx优化与防盗链
Nginx优化与防盗链 📒博客主页: 微笑的段嘉许博客主页 💻微信公众号:微笑的段嘉许 🎉欢迎关注🔎点赞👍收藏⭐留言📝 📌本文由微笑的段嘉许原创! Ὄ…...
自动驾驶路径规划概况
文章目录前言介绍1. 路径规划在自动驾驶系统架构中的位置2. 全局路径规划的分类2.1 基础图搜索算法2.1.1 Dijkstra算法2.1.2 双向搜索算法2.1.3 Floyd算法2.2 启发式算法2.2.1 A*算法2.2.2 D*算法2.3 基于概率采样的算法2.3.1 概率路线图(PRM)2.3.2 快速…...
某某银行行面试题目汇总--HashMap为什么要扩容
一、HashMap啥时候扩容,为什么扩容? HashMap的默认大小是16。在实际开发过程中,我们需要去存储的数据量往往是大于存储容器的默认大小的。所以,出现容量默认大小不能满足需求时,就需要扩容。而这个扩容的动作是由集合自…...
求职者:“我有五年测试经验”面试官: “不,你只是把一年的工作经验用了五年”
最近看到很多软件测试由于公司裁员而需要重新求职的。他们普遍具有4年甚至更长的工作经验。但求职结果往往都不太理想。 我在与部分软件测试求职者交谈的过程中发现,很多人的工作思路不清晰,技能不扎实,没有持续学习的习惯,但对于…...
Nacos配置中心
什么是配置中心所谓配置中心:在微服务的环境下,将项目需要的配置信息保存在配置中心,需要读取时直接从配置中心读取,方便配置管理的微服务工具我们可以将部分yml文件的内容保存在配置中心一个微服务项目有很多子模块,这些子模块可能在不同的服务器上,如果有一些统一的修改,我们…...
【故障】6、yum不可用
文章目录[toc]一、yum命令不能使用1)报错2)问题分析3)完全删除python及yum重新安装1、删除python2、删除yum3、下载Python依赖rpm包4、下载yum依赖rpm包5、强制安装python6、强制安装yum7、测试一、yum命令不能使用 1)报错 Ther…...
深度解读 | 数据资产管理面临诸多挑战,做好这5个措施是关键
日前,大数据技术标准推进委员会(中国通信标准化协会下(CCSA)的专业技术委员会,简称TC601)发布《数据资产管理实践白皮书》(6.0 版)(以下简称:报告)…...
双检测人脸防伪识别方法(活体检测+人脸识别+关键点检测+人像分割)
双检测人脸防伪识别=人脸检测+活体检测+人脸识别 1.人脸关键点+语义分割 使用mediapipe进行视频人脸关键点检测和人像分割: import time import cv2 import mediapipe as mp import numpy as npmp_drawing = mp.solutions.drawing_utils mp_drawing_styles = mp.solution…...
2023年3月 - 笔记
内容已复习 采用下划线标识内容已重写 并补充优化 新建文章并添加超链接 背景颜色 绿色 Python 2023年3月1日 Python 把列表转成元组 # 1、Python 把列表转成元组 使用tuple 即可 list_a [1, 2, 3, 4, 5, 6] list_b tuple(list_a) print(list_b)# 2、如果想把 元组转成列…...
浅谈Redisson实现分布式锁对原理
1.Redisson简介 Redis 是最流行的 NoSQL 数据库解决方案之一,而 Java 是世界上最流行(注意,我没有说“最好”)的编程语言之一。虽然两者看起来很自然地在一起“工作”,但是要知道,Redis 其实并没有对 Java…...
struts1.2升级struts2.5.30问题汇总
严重: 配置应用程序监听器[org.apache.struts2.tiles.StrutsTilesListener]错误java.lang.NoClassDefFoundError: org/apache/tiles/web/startup/AbstractTilesListenerat java.lang.ClassLoader.defineClass1(Native Method)at java.lang.ClassLoader.defineClass(ClassLoader…...
电动汽车充放电的优化调度(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
《JeecgBoot系列》 如何设计表单实现“下拉组件二级联动“ ? 以省市二级联动为例
《JeecgBoot系列》 如何设计表单实现"下拉组件二级联动" ? 以省市二级联动为例 一、准备字典表 1.1 创建字典表 CREATE TABLE sys_link_table ( id int NULL, pid int NULL, name varchar(64) null );1.2 准备数据 idpidname1全国21浙江省32杭州市42宁波市51江苏…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
JS设计模式(4):观察者模式
JS设计模式(4):观察者模式 一、引入 在开发中,我们经常会遇到这样的场景:一个对象的状态变化需要自动通知其他对象,比如: 电商平台中,商品库存变化时需要通知所有订阅该商品的用户;新闻网站中࿰…...
