密码学证明方案寒武纪大爆发——扩容、透明性和隐私的变革潜力

news2025/1/10 21:41:49

1. 引言

前序博客有:

  • ZKP大爆炸

本文主要参考:

  • StarkWare 2023年6月博客 Cambrian Explosion of Cryptographic Proofs----The transformative potential for scalability, transparency, and privacy
  • 2023年3月Eli Ben-Sasson在The 13th BIU Winter School on Cryptography - Blockchain Technologies的分享视频 A Cambrian Explosion of Cryptographic Proofs - Eli Ben-Sasson

要点:

  • 密码学证明(Cryptographic Proofs)可验证计算,并提高区块链网络的交易完整性。
  • L2链采用密码学证明来扩容——为聚合的交易生成可验证的证明。
  • ZKPs(Zero-Knowledge Proofs)在不泄露额外信息的情况下可用于验证真相,但它们对隐私的使用各不相同。
  • 密码学证明包含的技术层面有:算术化 以及 低阶强化(low-degreeness enforcement)。
  • 随着区块链技术的成熟,某种类型的密码证明可能会占主导地位,促进扩容、透明性和隐私。

C.S. Lewis对完整性的定义为:

  • 即使在无人监管的情况下,也做正确的事。

在区块链上下文中,密码学证明用于保证完整性——即使无人监管,仍确保某些计算处理正确。

本文重点关注:

  • 何为密码学证明?
  • 如何将密码学证明用于区块链?
  • 不同密码学证明方案实现的差异性。

2. 何为密码学证明?

密码学证明为:

  • 一组数学和密码学协议,用于断言计算的完整性。

一个密码学证明的很美示例见L. Babai等人1991年论文Checking Computations in Polylogarithmic Time,在该论文中提出了一种协议:

  • 一台个人电脑可以用强大但不可靠的软件和未经测试的硬件监控一群超级计算机的运行。

这意味着,即使控制超级计算机的一方是恶意的,或者被激励误报计算结果,一台计算能力有限的机器 可断言 一组计算能力高得多的超级计算机所做计算的完整性。

3. 如何将密码学证明用于区块链?

过去十年来,见证了半实用和实用证明系统的寒武纪大爆发,以及大量确保隐私、安全和计算完整性的应用。而且,尽管web2和web3一样需要完整性,但由于区块链的开放和透明性质,以及它们更喜欢数学完整性而不是基于人的完整性,所有使用通用密码学证明系统的产品都可以在web3中的区块链上找到。为理解密码学证明如何帮助区块链扩容,需首先回顾区块链是如何工作的。

如今,当在Solana、以太坊或Cosmos等区块链上发送交易时,网络中的每个validator都会接收并执行交易。这很快就会变得效率低下。随着去中心化的发展,用于将每个交易包括在网络历史中的计算资源随着活跃validators的数量线性增加。

多个项目(如Aztec、Starknet)旨在使用密码学证明来解决扩容问题——称为L2 Validity Rollup,因为这些项目位于L1区块链(如以太坊)之上。这些L2 rollups背后的思想为:

  • 依赖于密码学证明来确认链外计算的完整性,以及状态和交易集更新的有效性。

对 长计算完整执行 的验证能力代表了分布式网络吞吐量的基本范式转变。一个由许多机器组成的网络可以简单地验证它们,而不是天真地重新执行每个计算步骤。不需要超级计算机——这些计算机可以是普通的弱计算机。

这种大规模计算完整性的验证是由L1(如以太坊)的可靠节点执行的。在这种情况下,使用上面提到的1991年论文中的预言,L1网络中的Validators扮演着“单个可靠的PC”的角色,而L2 Prover是一台超级计算机,尽管在未经测试的硬件和可能不可靠的软件上执行,但它还是实现了完全的完整性和可靠性。

密码学证明寒武纪大爆发是关于这些系统在区块链中应用的日益增加,以及实现这些证明的不同密码学协议的激增。目前在web3中使用的许多项目有:
在这里插入图片描述
现有的知名密码学证明系统有:【主要用于区块链领域的以黄色框表示,其它以白色框表示】
在这里插入图片描述

4. 不同密码学证明方案实现的差异性

密码学证明方案众多,理解每种方案的优势劣势很重要。

4.1 ZKP:扩容 VS. 隐私

尽管很多项目都会提到“零知识”证明(或ZKP)一词,而且零知识证明在保护隐私的区块链中具有潜力,但大多数web3 L2 Validity Rollup 并不使用具有“零知识”密码学属性的证明,而是依赖于密码学证明的扩容属性。

ZKP是允许一方验证特定计算是否正确执行的证明,而不会透露该计算所消耗的输入(如,密码、交易的财务细节、医疗数据等)。因此,除了显著降低验证成本(继承自密码学证明的属性)外,还获得了隐私。

当项目声称其使用ZKP时,准确理解项目的含义是很重要的。虽然大多数基于区块链的项目都声称他们的技术“基于ZKP”,但事实上,其解决方案没有隐私考虑。

大多数项目更关注扩容而不是隐私:
在这里插入图片描述

4.2 何为算术化?

当看到一个系统需要证明的一组计算时,将这些计算问题转化为代数问题是有意义的。密码学证明中的算术化是指在有限域上使用算术运算来表示数学概念和运算的过程。

在高层,这意味着将任何语句表示为代数方程,即多项式。将计算问题转化为此类代数问题的过程在计算机科学的行话中被称为“归约(reduction)”,详细示例见下图:
在这里插入图片描述
算术化有助于提高扩容性的原因是,一旦用代数和多项式表达事物,就可提高发现破坏完整性的可能性。要了解多项式的魔力及其在证明中的有用性,最好学习STARK 101课程或阅读博客Arithmetization II。

考察不同的证明系统,一个区别因素是执行算术运算的方式。一些可以使用整数环(RSA环)上的模运算,另一些可以使用椭圆曲线和/或更复杂的方法(基于格的密码学、基于码的密码学和多变量多项式)。

4.3 低阶

所有的密码学证明系统都有某种形式的低阶强化,这是它们之间的一个关键区别因素。

低阶强化是指确保多项式(作为算术过程的一部分所生成的代数方程)的阶数小于某个阈值的过程。(只是提醒一下,多项式中的阶等于其中出现的项的最大幂。)

低阶强化对于完整性和安全性是必要的。错误地接受错误证明的概率与所选择的多项式的阶有关。此外,因为低阶多项式具有一些良好的数学特性,在这些系统使用低阶多项式,效率更高。

在这里插入图片描述
多项式承诺方案(polynomial commitment scheme,PCS)是一种允许对多项式进行有效和可验证计算的密码学协议。它使一方,即Committer,能够在不透露其全部细节的情况下对多项式进行承诺,而另一方,称为Verifier,可以稍后验证多项式承诺的属性。

不同的证明系统使用不同的PCS来创建和验证证明。STARKs和Risc0使用Fast Reed-Solomon Interactive Oracle Proof(“FRI”)承诺方案,而Groth16和PLONK使用KZG承诺方案。通常,这些承诺方案之间的区别因素在于:

  • 创建证明的成本
  • 验证证明的成本
  • 证明的大小

在这里插入图片描述
见上图,可了解不同系统的优缺点。STARK证明系统使用FRI协议来强化低阶多项式。在STARK证明系统中,Prover与Verifier迭代交互,并对新的多项式进行承诺,使得每个新多项式的阶是前一个多项式的一半。PLONK系统使用基于椭圆曲线数学的多项式承诺(例如,KZG)。

此外,一些系统可能需要可信设置。可信设置中将生成特定的秘密参数。需要可信设置的证明系统中,挑战在于这些参数的pre-image必须保持私有。如果没有,那么整个证明系统就很脆弱,产生虚假证明就成为可能。
通常,组织特殊的可信设置“仪式”——多方私下创建随机元素组合以获得最终参数。只要其中的一方成功地销毁了其提交的随机元素,则可以认为该可信设置是安全的。

4.4 密码学假设

最后,还需跟踪这些证明系统所使用的密码学假设,如依赖于:

  • 椭圆曲线数学(如BulletProofs和Halo(2)),这些都是量子计算机可破解的。
  • “knowledge of exponent”(如Groth16、PLONK等),这些都是量子计算机可破解的。
  • 抗碰撞哈希(如STARKs、ZKBoo等),这些是抗量子计算机的。

在这里插入图片描述

5. 结论

如上可知,可以使用大量的密码学证明来实现扩容和透明性(或隐私):

  • 有的具有short proofs(如Groth16)
  • 有的在大型计算中效果更好(如STARK)

然而,随着生态系统的成熟,将看到某种类型的密码证明被广泛使用。

参考资料

[1] StarkWare 2023年6月博客 Cambrian Explosion of Cryptographic Proofs----The transformative potential for scalability, transparency, and privacy

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

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

相关文章

JavaWeb之Cookie和Session

文章目录 CookieCookie基本介绍Cookie的基本使用Cookie的创建从服务器获取CookieCookie值的修改方案一方案二 浏览器查看CookieCookie声明控制Cookie有效路径Path的设置 SessionSession基本介绍Session的创建和获取(id号,是否为新)Session域数…

【SQL server关键字】

目录: 前言一、CREATE -- 创建二、INSERT INTO VALUES -- 插入数据三、SELECT FROM -- 查找数据1.SEKECT简单了解2.函数的使用3.选择列表与group by子句的对应4.exists子查询 四、UPDATE SET -- 更改数据五、ALTER -- 修改属性六、JOIN ON-- 链接多个表1. join初…

JDBC 望舒客栈项目 万字详解

目录 一、前言 二、项目结构 三、准备工作 1.建立子包 : 2.导入jar包 : 3.工具类 : 1 Utility工具类 2 JDBCUtilsDruid工具类 4.导入配置文件 : 5.引入BasicDAO : 四、项目主体 1.界面显示 : 1 代码演示 2 运行测试 2.用户登录 : 1 创建员工表employee 2 创建Ja…

JavaScript 事件加载有哪些应用场景?

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言什么是JavaScript事…

VUE L MVVM模型 ③

目录 文章有误请指正,如果觉得对你有用,请点三连一波,蟹蟹支持✨ V u e j s Vuejs Vuejs M V V M MVVM MVVM模型Data与El的2种写法总结 文章有误请指正,如果觉得对你有用,请点三连一波,蟹蟹支持✨ ⡖⠒⠒⠒…

多线程中的wait和notify

1、wait和notify 由于线程之间是抢占式执行的,所以线程之间的执行先后顺序难以预知。但实际上是希望合理的协调多个线程之间的执行先后顺序。 完成这个协调工作,主要涉及到三个方法 *wait()/wait(long timeout);让当前线程进入等待状态。 *notify()/n…

【每日算法 数据结构(C++)】—— 02 | 数组的并交集(解题思路、流程图、代码片段)

文章目录 01 | 👑 题目描述02 | 🔋 解题思路交集并集 03 | 🧢 代码片段交集并集 When you feel like giving up, remember why you started. 当你想放弃时,请记住为什么你开始 01 | 👑 题目描述 给你两个数组&#xff…

学习机组过程中的疑难问题与解决 -----(1)

本文章是在学习计算机组成原理过程中个人感觉需要理解与记忆的问题,还有一些在学习过程中自己产生的疑问以及解答,本文章可能排版不良,精力有限,还请见谅 第一章: (1)MAR的位数对应着存储单元的个数&#…

前端三剑客简介

文章目录 css的导入方式CSS选择器 JavascriptJavascript的引入方式输出语句变量数据类型javascript对象String对象 BOM对象DOM对象 W3C标准:网页主要由三部分组成 结构:html表现:css,层叠样式表行为:JavaScript css的…

VulnHub项目:Nagini

1、靶机地址: HarryPotter: Nagini ~ VulnHub 本篇为哈利波特死亡圣器系列的第二部,该靶机中存在3个魂器,依次找到它们,摧毁它们! 2、渗透过程 首先收集靶机ip和确定攻击机ip,同时探测靶机开放端口 存在…

一个简单案例理解为什么在多线程的应用中要使用互斥锁

需求:使用10个线程,同时对一个值count进行加一操作,每个线程对count加100000次,最终使得count1000000 第一版代码:不加锁 ​​​lock.c #include<stdio.h> #include<pthread.h>#define THREAD_COUNT 10void *thread_callback(void *arg){int *pcount(int*)arg;in…

Unity例子——第一人称视角的角色控制器

本文是为了前文Unity四元组的举例示范&#xff0c;为了让读者更好地理解。 效果是实现一个可以由鼠标进行方向操作&#xff0c;键盘进行移动操作的任务。 此为效果视频&#xff1a; 1687597097844 下面进行教学&#xff1a; 一、搭建简单场景 新建一个场景&#xff0c;放置一…

SonarQube(sonar-scanner)+GitLab(gitlab-runner)实现提交代码自动扫描项目代码

安装gitlab-runner 插件挂载目录 mkdir -p /data/gitlab-runner/configdocker run -d --name gitlab-runner \ -v /data/gitlab-runner/config:/etc/gitlab-runner \ -v /var/run/docker.sock:/var/run/docker.sock \ --restart always \ --privilegedtrue \ gitlab/gitlab-r…

【数据库必备知识】索引和事务

数据库系列文章 1. 零基础带你快速上手SQL语言2. 玩转表及其数据3. 上手表设计 4. 索引和事务 目录 &#x1f4d6;前言 1. 索引 1.1 索引的概念 1.2 索引的作用 1.3 索引的使用场景 1.4 索引的使用 1.5 索引背后的数据结构(B树) 2. 事务 2.1 事务的概念 2.2 数据库使…

Centos7安装Python3.10

Centos7用yum安装的Python3版本比较旧&#xff0c;想要安装最新版本的Python3需要自己动手编译安装。下面就来讲讲安装步骤&#xff0c;主要分为这么几个步骤&#xff0c;依赖→下载→编译→配置。另外所有操作都是在root用户下进行。 依赖 编译Python源码需要依赖许多库&…

spring.cache 随笔0 集成设计

0. 最近感觉 “困意驱动睡眠” 也有他的意义 spring cache学习&#xff08;一&#xff09;&#xff1a;spring cache注解简单了解 Java Caching JSR107介绍 同样&#xff0c;本章也会简单的集成redisson作为缓存服务 1. 从我们自己写的javaConfig开始吧 Configuration // 这…

Java——文件操作

文件操作 1、File类概述2、File类的常用APIFile类的判断文件类型、获取文件信息功能创建文件、删除文件功能遍历文件夹文件搜索 3、字符集常见字符集字符集的编码、解码操作 4、IO流分类5、字节流的使用文件字节输入流文件字节输出流文件拷贝 6、字符类的使用文件字符输入流文件…

“前端已死”

一、一些迹象 逛社区&#xff0c;偶然看到了这张图片&#xff1a; 嗯……我眉头一皱&#xff0c;久久不语&#xff0c;心想&#xff0c;有这么夸张吗&#xff0c;假的吧&#xff1f; 突然想到&#xff0c;最近我在社区发了个前端招聘的信息&#xff0c;结果简历漫天纷飞&…

【C++】auto_ptr为何被唾弃?以及其他智能指针的学习

搭配异常可以让异常的代码更简洁 文章目录 智能指针 内存泄漏的危害 1.auto_ptr(非常不建议使用) 2.unique_ptr 3.shared_ptr 4.weak_ptr总结 智能指针 C中为什么会需要智能指针呢&#xff1f;下面我们看一下样例&#xff1a; int div() {int a, b;cin >&g…

图表制作办公首选--实用图表工具Echars

实用图表工具Echars 前言 由于工作的需要&#xff0c;在写材料的时候需要使用到柱状图、饼状图、折线图等等展示数据&#xff0c;可以使用PPT等办公软件构建出图表&#xff0c;在这里可以使用更加方便、更加美观的工具Echars。 Echars图表使用 Echars官网&#xff1a;Ecahr…