零知识证明;Halo2原理;举例说明算术电路、转换为约束系统、多项式承诺举例形式和数值;PLANK算术化;

news2024/11/14 14:42:44

目录

零知识证明

简单举例说明原理

原理概述

Halo2原理

Halo2原理

举例说明关键性概念

举例说明算术电路、转换为约束系统、多项式承诺举例形式和数值

1. 算术电路构建

2. 转换为约束系统

3. 多项式承诺举例形式和数值

Halo2简单示例

PLANK算术化

基础概念

简单例子:

在大语言模型中使用Halo2实现模型验证过程

可行性分析

实际案例说明

注意事项


零知识证明

零知识证明(Zero-Knowledge Proof,简称ZKP)是一种密码学工具,允许互不信任的通信双方之间证明某个命题的有效性,同时不泄露任何额外信息。这种技术最初由莎菲·戈德瓦塞尔、S.Micali及C.Rackoff在20世纪80年代初提出,其核心在于证明者能够在不向验证者提供任何有用信息的情况下,使验证者相信某个论断是正确的。

简单举例说明原理

假设有以下场景:A要向B证明自己拥有某个房间的钥匙,而房间的门只能通过这把特定的钥匙打开。

  1. 传统方法:A直接把钥匙出示给B,B用这把钥匙打开房门,从而证明A确实拥有钥匙。但这种方法会泄露钥匙的信息。

  2. 零知识证明方法

    • A首先邀请B站在房间门口,但自己不进房间。
    • A选择一个只有自己知道的随机数,用这个随机数对房间内的某个特定物体(比如一个花瓶)进行某种加密操作(比如通过某种算法将花瓶的位置与一个随机数关联起来,并告诉B这个加密后的结果)。
    • A然后走进房间,用钥匙打开房门,将花瓶移动到一个只有自己和加密操作知道的位置。
    • A走出房间,但不透露任何关于钥匙或花瓶新位置的信息,只是告诉B自己已经完成了操作。
    • B此时可以根据A之前给出的加密结果和现在的某些可见信息(比如花瓶的当前位置),通过自己的计算验证A是否确实拥有钥匙并能控制房间内的物体。
    • 如果B能够验证成功,他就会相信A拥有钥匙,而整个过程中A没有透露任何关于钥匙或房间内部情况的具体信息。

原理概述

  • 主张:A需要证明的主张是“我拥有房间的钥匙”。
  • 证明:A构造一个证明过程,该过程允许B验证A的主张,但不泄露任何关于钥匙或房间内部的具体信息。
  • 验证:B通过观察和计算,验证A的证明是否有效,从而确信A的主张是正确的。

零知识证明的实现基于复杂的密码学算法,如Schnorr签名、Bulletproofs等,这些算法能够确保证明的安全性和隐私性。通过零知识证明,验证者可以在不获取任何额外知识的情况下确认证明者的主张,从而保护了证明者的隐私。

Halo2原理

Halo2是一种基于PLONK算法的零知识证明框架,它以其独特的功能开发方式——电路(Circuit)开发,为开发者提供了一种全新的视角和工具来保护隐私和数据安全。以下是对Halo2原理的详细解释,并通过一个关键性概念的举例说明。

Halo2原理

Halo2的原理主要基于零知识证明的概念,即通过特定的数学方法和算法,证明某个命题的真实性,同时不泄露任何除命题真实性以外的信息。在Halo2中,这一过程通过构建算术电路、转换为约束系统、使用多项式承诺方案验证等步骤实现。

  1. 算术电路
    • 开发者首先需要根据需要验证的计算或逻辑,构建一个算术电路。这个电路由一系列的加法门和乘法门组成,每个门都有输入和输出。
    • 电路中的每个门和常量都受到一组约束的限制,这些约束确保电路按照预期的方式工作。
  2. 约束系统
    • 将算术电路中的每个门和常量转换为多项式约束,形成一个约束系统。这个约束系统通过多项式方程来表达电路中的所有运算和关系。
  3. 多项式承诺方案
    • 使用多项式承诺方案来隐藏多项式的具体形式,同时允许验证者检查多项式在特定点上的值。这样,证明者可以在不泄露电路细节的情况下,向验证者证明电路的正确性。
  4. 随机挑战与验证
    • 验证者发送一个随机挑战值给证明者,要求证明者证明多项式在该点上的值。证明者根据挑战值构造相应的证明,并将其发送给验证者
    • 验证者使用已知的公开信息和证明者提供的证明来验证多项式的值是否为零,从而确认电路的正确性。

举例说明关键性概念

斐波那契数列的计算为例,说明Halo2中的关键性概念:

  1. 算术电路构建
    • 假设我们要证明我们掌握了斐波那契数列的计算方法,比如Fib(10)=55。
    • 我们首先定义一个算术电路,该电路接受斐波那契数列的输入(如整数n),并通过一系列的加法和约束来验证输出的正确性
  2. 约束系统
    • 在电路中,我们定义了一系列的约束来确保每一步计算都符合斐波那契数列的规则。例如,我们可以使用查找表约束(Lookup args)来验证每一步计算的结果是否在已知的斐波那契数列中,以及使用固定值约束(Constance)来验证初始条件(如Fib(0)=0和Fib(1)=1)。
  3. 多项式承诺与验证
    • 当电路构建完成后,我们使用Halo2的多项式承诺方案来隐藏电路的具体计算过程,并生成一个证明。
    • 验证者通过发送随机挑战值来要求证明者证明多项式在特定点上的值,从而验证电路的正确性。在这个例子中,验证者可以确认证明者确实知道如何计算Fib(10)=55,而无需了解具体的计算步骤或中间结果。

通过这个例子,我们可以看到Halo2如何利用算术电路、约束系统和多项式承诺方案来实现零知识证明,从而保护隐私和数据安全。

举例说明算术电路、转换为约束系统、多项式承诺举例形式和数值

在Halo2中,实现零知识证明的过程确实涉及构建算术电路、转换为约束系统以及使用多项式承诺方案验证等关键步骤。下面我将分别举例说明这些步骤,并给出相应的数值和形式。

1. 算术电路构建

算术电路是Halo2中零知识证明的基础,它描述了需要验证的计算或逻辑。算术电路由一系列的加法门和乘法门组成,每个门都有输入和输出。

举例说明

假设我们要验证一个简单的多项式等式,其中 a 和 b 是秘密输入,c 是公开输入(也称为instance)。为了构建这个算术电路,我们可以:

在这个例子中,算术电路的结构相对简单,但它清晰地展示了如何通过门电路来表示和验证计算。

2. 转换为约束系统

算术电路构建完成后,需要将其转换为约束系统。约束系统通过多项式方程来表达电路中的所有运算和关系。

举例说明

3. 多项式承诺举例形式和数值

多项式承诺是Halo2中用于隐藏多项式具体形式的技术。证明者构造一个多项式,并生成一个承诺值(通常是该多项式的哈希值),然后将其发送给验证者。验证者可以使用这个承诺值来验证多项式在某些点上的值。

举例说明

Halo2简单示例

不同于普通的开发框架,Halo2中的功能开发称为电路(Circuit)开发,电路开发使用表格来设计并记录运算,并包含一系列的约束来验证运算结果并生成证明。

PLANK算术化

使用表格设计并记录运算,可以自定义使用多少列以及列的类型,列数越多成本越高
有限域(行数有限) ,一般是2的幂,如2^32
3种不同的列
    - Advice:隐私值(证明者计算过程整参数)
    - Fixed:公开常量(固定值)
    - Selector:选择器,用于决定是否在该行启用某种约束;
    - Instance:公开输入/输出
约束单元格之间关系:处完成计算外,还应包含包含多个规则约束来验证计算过程并生成证明
    - 自定义门约束(Custom Gate):使用等于零的多项式来描述单元格关系,如 s_mul * a * b - r = 0。
    - 查找表约束(Lookup args) :单元格值为,已知值Lookup列表中的一项
    - 固定值约束(Constance):单元格值为固定值(常量)。


基础概念


芯片Chip:芯片一般用于实现单一指令(操作)。除具体的计算外,芯片还应实现加载隐私值(输入)、加载常量(输入)、公开结果(输出)等方法。
芯片指令特性Chip Instructions
电路Circuit:由开发者开发的,包含一组功能的应用程序(证明系统),证明者可以完成指定的计算,生成证明(Proof),以供验证者验证。
电路可以包含子电路SubCircuit、装置Gadgets(组合指令)、芯片Chip(单一操作)等。
电路的配置和装置Gadget、芯片Chip相似,包含要使用的列数即类型,约束列表等。

简单例子:

在大语言模型中使用Halo2实现模型验证过程

在大语言模型中使用Halo2实现模型验证过程是一个创新的想法,因为Halo2是基于PLONK算法的零知识证明系统,它提供了强大的验证能力,同时保护了隐私。以下将详细阐述使用Halo2进行大语言模型验证的可行性,并给出一个实际案例说明。

可行性分析

  1. 零知识证明特性:Halo2作为零知识证明系统,能够在不泄露模型内部参数、训练数据或计算过程的情况下,验证模型输出的正确性。这对于保护模型的知识产权和用户隐私至关重要。

  2. 高效验证:Halo2支持递归证明和查找表技术,这使得验证过程更加高效。在大语言模型的验证中,可以利用这些特性来优化验证过程,减少验证时间和资源消耗。

  3. 自定义门约束Halo2支持自定义门约束,这使得开发者可以根据大语言模型的具体需求,设计适合的验证逻辑。例如,可以设计自定义门来验证模型生成的文本是否符合特定的语法、语义或风格要求。

实际案例说明

假设我们有一个大语言模型,用于生成新闻摘要。为了验证模型生成的摘要是否准确且符合新闻内容,我们可以使用Halo2来实现以下验证过程:

  1. 定义验证目标
    • 验证生成的摘要是否包含了新闻中的关键信息。
    • 验证摘要的语法和语义是否正确。
  2. 构建验证电路
    • 使用Halo2的电路开发功能,设计一个包含多个芯片(Chip)和装置(Gadget)的验证电路。
    • 每个芯片或装置负责验证摘要的一个方面,如关键词覆盖率、语义相似度等。
    • 使用自定义门约束来定义具体的验证逻辑,如关键词匹配、语义相似度计算等。
  3. 生成证明
    • 在模型生成摘要后,使用Halo2的证明系统来生成一个证明。这个证明包含了模型计算过程中的关键信息,但不会泄露模型的内部参数或训练数据。
    • 证明的生成过程将遵循Halo2的协议,包括多项式承诺、vanishing argument、multipoint opening argument等步骤。
  4. 验证证明
    • 验证者使用Halo2的验证密钥来验证证明的有效性。验证过程将检查证明中的多项式承诺是否与验证电路中的约束相匹配。
    • 如果证明有效,验证者将接受摘要作为准确的结果;如果证明无效,则拒绝摘要。

注意事项

  1. 电路设计的复杂性:构建适用于大语言模型验证的Halo2电路可能相对复杂,需要深入了解模型的内部结构和验证需求。

  2. 性能考虑:生成和验证Halo2证明可能需要一定的计算资源和时间。在实际应用中,需要权衡验证的准确性和性能之间的关系。

  3. 安全性保障:确保Halo2系统的安全性是至关重要的。需要采取适当的安全措施来保护证明系统和验证密钥的安全。

综上所述,使用Halo2在大语言模型中实现模型验证过程是可行的,并且具有许多优势。然而,具体实现时需要考虑多个因素,包括电路设计的复杂性、性能要求以及安全性保障等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2070140.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何维护好客户关系?

在这个信息爆炸、竞争激烈的市场环境中,每一位客户的信任与支持都是我们最宝贵的财富。 今天,就让我们一起探索那些温暖人心的秘诀,学习如何像匠人一样,精心维护与每一位客户的关系,让每一次互动都成为加深情感的桥梁。…

XTuner微调个人小助手认知

1. 环境准备 将Tutorial仓库的资料克隆到本地 mkdir -p /root/InternLM/Tutorial git clone -b camp3 https://github.com/InternLM/Tutorial /root/InternLM/Tutorial 创建一个叫做demo的虚拟环境 # 创建虚拟环境 conda create -n demo python3.10 -y# 激活虚拟环境&…

c#实现生成AES加密的密钥key(密钥长度128位,也就是32个字符)对标Java中的AES加密(SHA1PRNG+Hex.encodeHexString)

最近在做某省份的一个健康云平台检验结果互认,我们的系统用的是C#,里面要求生成一个AES加密的密钥key(密钥长度128位,也就是32个字符),后面要用这个密钥key完成一系列加密操作,给的实例只有Java…

http应用层协议

一、万维网 用来存放各种资源的网络。 1、如何在万维网中表示一个资源 ? url ——统一资源定位符&#xff1b; 形式&#xff1a; <协议>://<主机>:<端口>/<路径>&#xff1b; <主机>:<端口>/<路径> //表示了资源所在的…

彩色墨水屏(电子纸)智能工牌,开启职场未来想象

随着技术的进步和生活方式的变革&#xff0c;越来越多职场人士希望佩戴的工牌能够展现独特的个人风格和专业特点&#xff0c;实现自动打卡、门禁管理等功能&#xff0c;提高工作效率&#xff0c;让职场生活更加便捷。 ​因此&#xff0c;快节奏的现代职场需一个既能满足员工对…

shadertoy sdSegment 原理

sdSegment 原理 float sdSegment( in vec2 p, in vec2 a, in vec2 b ) {vec2 pa p-a, ba b-a;float h clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );return length( pa - ba*h ); }原理: u ⃗ \vec{u} u 在 v ⃗ \vec{v} v 在夹角是 θ \theta θ 的投影长度是: &#xff…

HTML5休闲小游戏《猫猫咖啡店》源码,引流、刷广告利器

HTML5休闲小游戏《猫猫咖啡店》源码&#xff0c;直接把源码上传到服务器就能使用了&#xff01; 下载链接&#xff1a;https://www.huzhan.com/code/goods468502.html

vscode修改选中文字颜色及当前tab颜色

VSCode-》首选项-》设置->-》搜color&#xff0c;找到&#xff1a;Workbench&#xff1a;Color Customizations&#xff0c;点击&#xff1a;在 settings.json 中编辑 加上 选中的文字内容的 配置 "workbench.colorCustomizations": {//设置用户选中代码段的颜色&…

贪心+栈。。

前言&#xff1a;这个题目一开始我没想通的就是如果s当前的一个字符或者之后的一个字符和当前t的尾巴是一样的&#xff0c;那么优先选哪一个&#xff0c;其实这个就要优先选t的 class Solution { public:string robotWithString(string s) {string ans;int cnt[26]{}, min 0; …

2024年AI编程新手必备工具,快速提升技能!

在当今这个技术日新月异的时代&#xff0c;AI编程已成为一个越来越重要的领域&#xff0c;吸引着众多新手和希望提升自己的中级开发者进入。 对于这些渴望在AI领域快速成长的人来说&#xff0c;选择合适的编程工具是至关重要的。 接下来&#xff0c;我们将深入探讨几款市场上…

Ubuntu22.04下安装LDAP

目录 1 简单说明2 安装配置2.1 安装1、安装前准备2、安装 OpenLADP3、配置OpenLDAP4、设置基本组5、添加新组5、添加 OpenLDAP 用户 2.2 安装 LDAP 帐户管理器1、安装2、配置 LDAP 帐户管理器 3 简单使用3.1 创建一个组3.2 创建一个用户 总结 1 简单说明 之前写过在Centos下的…

LLaVA 简介

好奇这张照片是在哪里拍摄的&#xff1f;问 LLaVA&#xff01;&#xff08;图片来自Pixabay的Guy Rey-Bellet&#xff09;。 LLaVA&#xff08;L arge L anguage 和V isual A ssistant 的缩写&#xff09;是一种很有前途的开源生成式人工智能模型&#xff0c;它复制了 OpenAI …

Arduino 定时器 [终极指南](原文)

Arduino Timers [Ultimate Guide] by Khaled Magdy In this tutorial, we’ll discuss Arduino Timers from the very basic concepts all the way to implementing Arduino timer-based systems. We’ll start off by discussing what is a timer, how they work, and what …

最近公共祖先(LCA),树上差分,树的直径总结

最近也是一不小心就学到了树论&#xff0c;这方面确实太不行了&#xff0c;也该开始学习一下了&#xff0c;那么话不多说&#xff0c;进入今日份的树论学习&#xff0c;直接开冲 最近公共祖先&#xff08;LCA&#xff09;——倍增思想&#xff08;可以结合我之前写的ST表学习&…

Windows安装java8\java17并存切换版本操作

问题描述&#xff1a; 首先肯定一台电脑可以安装多个JDK&#xff0c;切换版本也是可实现的。 存在版本切换问题是企业项目用java8&#xff0c;个人研究技术用的17。希望两者并存&#xff0c;随时切换&#xff0c;记录一下操作步骤。 第一&#xff1a;先安装不同版本的jdk到系…

vue项目中,修改elementui一些复杂控件样式

1.前言 在vue项目中&#xff0c;我们为了快速开发&#xff0c;会用到elementui。但很多时候&#xff0c;elementui的样式不满足于我们项目的样式需求。这时候我们需要修改原生elementui的样式。 2.简单控件的样式修改 对于elementui中一些简单的控件&#xff0c;如按钮之类的…

Xshell链接本地20.04Ubuntu虚拟机

一、打开虚拟机设置选择自定义-net8 二、打开虚拟网络编辑器&#xff0c;点击更改设置 三、打开网络设置&#xff0c;如图操作 四。打开虚拟机&#xff0c;进入终端&#xff0c;输入ifconfig 五、su root进入root模式&#xff0c;配置静态网卡 # 备份配置文件 cd /etc/netpla…

Qt:玩转QPainter序列一

前言 最近想潜心研究一下QPainter这个类&#xff0c;最好把QPainter所有的函数都敲一遍&#xff0c;特地记录一下。 在说QPainter之前我们需要了解两个非常重要的东西 第一个坐标系 我用两张图来表示 代码实操的结果 更加详细的坐标系内容请看我的另一篇博客 第二个是有…

一款基于cesium的开源地图工具

Cesium是一个开源的、世界级的、展现3D全球地图的JavaScript类库,它毫无疑问已然成为WebGIS开发中三维地球框架的首选。本次给大家带来的是一个结合CesiumVue的前端地图开发框架&#xff0c;支持很多种地图渲染特效&#xff0c;同时还支持模型加载到地图上面。 开源地址&#…

Linux安装显卡驱动

本文详细阐述了在Linux系统中安装显卡驱动的步骤和注意事项。首先&#xff0c;文章介绍了显卡驱动的重要性&#xff0c;以及为什么需要安装或更新显卡驱动。接着&#xff0c;针对不同类型的显卡&#xff08;如NVIDIA、AMD等&#xff09;&#xff0c;文章提供了具体的安装步骤和…