当前位置: 首页 > news >正文

深入探索STARK的安全性和可靠性——STARKs全面安全分析

1. 引言

  • non-interactive STARKs,起源于Interactive Oracle Proofs (IOPs),然后通过random oracle模式转换为非交互式。
  • StarkWare团队 ethSTARK Documentation – Version 1.2(2023年7月)论文做了更新,给出了完整具体的random oracle模式下的ethSTARK安全性分析。本文对该论文的更新做了解释。

2. STARK安全性解释

STARK proof system (Scalable Transparent Argument of Knowledge)是用于证明计算完整性(CI,computational integrity)的强大工具:

  • 支持以trustless方式,来验证基于某公开数据的计算的正确性。

本文深入探索由STARK proofs所提供的安全性,对该安全性进行定义,并探索证明方案安全性的技术。
详情见:

  • StarkWare团队 ethSTARK Documentation – Version 1.2(2023年7月)论文第6章。
  • Justin Thaler等人2023年论文Fiat-Shamir Security of FRI and Related SNARKs。

我们试图通过安全分析实现什么?:

  • 试图找到一种对STARK系统的“成功攻击”方式,使得对于某false statement,可生成让STARK Verifier 接受的 STARK proof。

由于false statement是危险的,可能具有任意大小和形状,而所构建的STARK系统是希望能抵御 所有 false statement的。

任何false statement,哪怕是1+1=3,若可基于该false statement生成让STARK Verifier信服的STARK proof,则可认为是对该STARK系统的成功攻击。(有密码学背景的人可能会对,STARK所满足的更强安全概念——“knowledge soundness”,感兴趣。为简化表述,本文关注更简单的soundness。“knowledge soundness”知识具体可参见Eli Ben-Sasson等人2016年论文 Interactive Oracle Proofs。)

如何来正式定义某STARK系统的安全性呢?:

  • 通过粗略计算,攻击者构建成功攻击所需的“cost(开销)”,来分析“soundness error”。即,找到某能让STARK Verifier接受的 false statement的 STARK proof。
  • 从数学上说,“soundness error”对应为某函数 ( t ) (t) (t)
    • 其输入为时间参数“ t t t”,代表攻击者发起攻击所需的计算时长。
    • 其输出为攻击者攻击成功的概率。所谓攻击成功,是指找到了某false statement让人信服的proof。
    • 若攻击者愿意花费的“cost(开销)” t t t越大,则其攻击成功的概率将增加。

为此,可将STARK安全性定义为函数 ( t ) (t) (t)

  • 其不同于在crypto Twitter上讨论安全性的自然方式。

如,对于“本方案具有96位安全性”这样的陈述,如何将其转换为安全性定义?
答案是不唯一的,因为人们对“ x x x-位安全性”的理解有细微差异:

  • 1)版本1:严格意义上来说:是指,对于任意的 t ∈ [ 1 , 2 96 ] t\in[1,2^{96}] t[1,296],该soundness error为 ( t ) 2 96 (t)2^{96} (t)296。即,对于任意运行时长最多为 2 96 2^{96} 296的攻击者,其成功的概率很小,小于 2 96 2^{96} 296——即小于 “10亿✖️10亿✖️10亿”。
  • 2)版本2:宽松意义上来说(或是更通用版本): 96 96 96-位安全性,是指对于任意的 t t t,对 t / ( t ) 2 96 t/(t) 2^{96} t/(t)296其成立。即意味着,成功概率与运行时长呈(inverse)线性关系。如,某攻击者的运行时长为 2 86 2^{86} 286,则其成功的概率最多为 2 10 2^{10} 210

本文基于上面的版本2来分析。

3. 由IOPs 到 具有96-位安全性的STARKs

如何来证明某方案具有96位安全性呢?
需先理解如何构建STARKs的高层结构。

STARK主要有3大要素:

  • 1)an IOP(interactive oracle proof)
  • 2)a Merkle tree
  • 3)a Fiat-Shamir hash

一旦定义了这3大要素,就可将其编译生成某STARK

本文主要关注IOP。同时将详细说明这3大要素,以及如何将它们组合在一起。

3.1 IOP

IOP类似于表中的interactive proof,其中某Prover和Verifier多轮交互。(本文限定为public-coin协议,即Verifier仅需给Prover发送random challenges)。

在IOP中,Verifier不读取完整的Prover消息,而是仅从每个Prover消息中采样少量bits。从而可实现后续编译出的STARK的简洁性。

3.2 由IOP到STARK

有IOP之后,如何基于该IOP构建某STARK呢?

  • Prover消息可能很长(事实上,其要长于计算本身)。
  • 为压缩消息,会使用Merkle tree。
    • Merkle tree是二进制哈希tree,每个叶子节点代表IOP的某query或某answer。
    • Merkle tree root为对整个消息的承诺值。
    • 当Verifier想要读取该消息的某特定位置时,Prover会提供该位置的值以及相应的认证路径。Verifier可使用该路径来验证该值的正确性。
    • IOP Verifier仅需读取Prover消息的少量位置。从而使用Merkle tree构建了succinct且具有少量通讯的协议。

4. Compressing Rounds

在这里插入图片描述
对于交互式STARK,为简化流程,通常会将其转换为非交互式的,这样在构建时Prover就无需再等待外部消息。事实上,当前所部署的所有STARK系统,包括ethSTARK协议,都是非交互式STARK。

非交互式STARK也是transparent SNARKs的一个特例(所谓transparent,是指在实例化时无需trusted setup,又名“Arthur Merlin protocol”或“public coin IOP”)。最终,最后一步是应用Fiat-Shamir来将rounds压缩为单个消息,称其为STARK proof。

Fiat-Shamir转换会将交互式协议转换为非交互式协议:

  • Prover 通过“talking to a hash function”来模拟交互协议。为派生第 i i i轮的随机挑战值,Prover需对直到第 i i i轮的所有transcripts都进行哈希,将相应的哈希输出结果作为下一挑战值。
    这样可确保Prover在生成挑战值之后无法改变其responses。

然而cheating Prover有一些新的(交互式IOP所没有的)策略手段。cheating Prover可通过修改最后一条Prover消息(这将给出新的transcript,从而给出新的挑战值),来重新生成Verifier挑战值。由此可知,IOP的标准可靠性概念不足以证明Fiat-Shamir转换的安全性。

如,考虑一个有96轮的IOP,对Verifier进行如下“hack”:

  • 若96轮中,Verifier的每个随机值的第一位是0,在该Verifier接受(而根本不看proof)。

一旦对Verifier添加了该hack,其仅给IOP的soundness error加了一项 2 96 2^{96} 296。但是,经Fiat-Shamir转换之后,攻击者很容易通过修改Prover消息,来确保每个哈希结果以0开头,从而在很短时间内破解该系统。

不过请放心,这仅仅是个理论示例,而不适用于已部署的STARK。

为何StarkWare的STARK是安全的呢?
简而言之,将展示最多允许 n n n步的攻击者,其攻击成功的概率最多为 ( t ) t 2 96 (t)t 2^{96} (t)t296

4.1 IOPs and Round-by-Round Soundness

STARK仅可与其底层的IOP一样安全。但是,某IOP具有96位安全性,意味着什么?
标准定义应是:该IOP的soundness error为 2 96 2^{96} 296,即意味着,任何攻击者(不考虑运行时长)愚弄Verifier的概率最多为 2 − 96 2^{-96} 296

但是,正如之前所讨论,STARK由3大要素组成,IOP soundness只是三者之一,其并不足以让由三大要素所编译的STARK也具有96位安全性。

事实上,所编译的STARK的安全性证明,是假定该STARK具有96位 round-by-round soundness error(有时,也称为state-restoration soundness)。

直观来说,round-by-round soundness error是指:

  • 每轮的安全性为96位,而不仅是整体协议的安全性是96位。

更具体来说,round-by-round是指:

  • 存在某predicate,已知该协议的某partial transcript,可告知该transcript是否是“fooling”的。
    • empty transcript不是“fooling的”。
    • 当且仅当Verifier接受,某full transcript是“fooling”的。
    • 对于任何不愚弄Verifier的partial transcript,在下一轮中该transcript是“fooling”的概率最多为 2 96 2^{96} 296
  • 若存在满足以上属性的predicate,则称该协议具有96位round-by-round soundness(不要求该predicate可高效计算)。

很多情况下,仅分析了某IOP的soundness,而未分析其round-by-round soundness。
需承认的是,很难想到一个例子——某IOP具有标准可靠性,但不是round-by-round soundness(人为例子除外)。

但是IOP soundness与round-by-round soundness 是有差别的:

  • 当派生具体的安全上限时,每个bit都是有关系的。
  • 为此,为派生严谨具体的上限时,必须对IOP的round-by-round soundness 进行严谨分析。StarkWare团队对FRI协议以及ethSTARK IOP均做了相应的严谨分析。该分析自身不在本文详述。
    • 具体见2023年2月视频StarkWare Sessions 23 | The Soundness of FRI | Dan Carmon
  • 借助新的分析,可为StarkWare的STARK proof设置精确的参数。

round-by-round soundness 可给出所需的保证:

  • Prover可多次重新生成挑战值,但是对于任意round,其生成“fooling” transcript的概率为 2 96 2^{96} 296
    因此,若该Prover具有time t t t——用于衡量哈希调用次数,则其最多可尝试 t t t次来试图获得某“fooling” transcript,从而限制其成功概率为 ( t ) t 2 96 (t) t 2^{96} (t)t296

5. Adding All the Error Terms

最后,需确保Prover无法对Merkle tree进行攻击。只需要构建Merkle tree所使用的哈希函数不存在碰撞即可。

攻击者对某随机函数调用 t t t次,尝试找到某碰撞的概率,最多为 t 2 / 2 t2/2 t2/2。其中 t 2 t2 t2为该哈希函数的输出长度(基于“生日悖论”)。这也是为何需设置哈希函数的输出长度,应为所需安全性的2倍。

若有某哈希函数的输出长度为192,且某IOP的round-by-round soundness为96位,则所编译的STARK的soundness error为 ( t ) = t 2 96 + t 2 ⋅ 2 196 (t)=t2^{96}+t2\cdot 2^{196} (t)=t296+t22196。最终该STARK方案的安全性为95位,因 t / ( t ) = t / ( t 2 96 + t 2 ⋅ 2 196 ) = 1 / 2 96 + 1 / 2 96 = 2 − 95 t/(t)=t/(t2^{96}+t2\cdot 2^{196})=1/2^{96}+1/2^{96}=2^{-95} t/(t)=t/(t296+t22196)=1/296+1/296=295

6. 总结

STARK proof system (Scalable Transparent Argument of Knowledge)是用于证明计算完整性(CI,computational integrity)的强大工具:

  • 支持以trustless方式,来验证基于某公开数据的计算的正确性。

STARKs的安全性通常以“soundness error”来衡量,其代表了攻击者成功为某false statement提供让Verifier信服的proof 的概率。

为实现所需的安全性,如96位,底层的IOP必须满足round-by-round soundness,以确保每轮都维护高级别安全性。

StarkWare团队分析了ethSTARK底层的round-by-round soundness,从而可派生出具体的安全上限。

参考资料

[1] StarkWare团队2023年10月博客 Safe and Sound — A Deep Dive into STARK Security

相关文章:

深入探索STARK的安全性和可靠性——STARKs全面安全分析

1. 引言 non-interactive STARKs,起源于Interactive Oracle Proofs (IOPs),然后通过random oracle模式转换为非交互式。StarkWare团队 ethSTARK Documentation – Version 1.2(2023年7月)论文做了更新,给出了完整具体…...

WPF 控件分辨率自适应问题

WPF 控件分辨率自适应时,我首先想到的是使用ViewBox控件来做分辨率自适应。 ViewBox这个控件通常和其他控件结合起来使用,是WPF中非常有用的控件。定义一个内容容器。ViewBox组件的作用是拉伸或延展位于其中的组件,以填满可用空间&#xff0…...

CANoe创建仿真工程

CANoe创建仿真工程 写在前面仿真工程的创建创建工程添加CAN数据库添加系统变量创建面板创建网络节点为节点添加代码工程运行测试总结 写在前面 Canoe的安装不是特别方便,我是参加了松勤的培训课程,不仅需要安装软件还需要安装驱动,刚刚学习的…...

Scanner 输入回车跳不出循环的解决方法

题目要求: 输入一行内容包含字符串和数字,将字符串与数字分别提取。 解决方法: 可以使用两个Scanner对象,一个用来键入数据,另外一个用来对数据进行操作,以此来解决输入“回车”跳不出while循环的问题。 i…...

docker 启动 mysql 通过防火墙设置端口无法访问解决方案

1、问题描述:通过 docker compose 启动mysql服务,然而在防火墙添加了3306端口后却无法访问,但是关闭防火墙后又可以访问mysql数据库。 解决方案: 重启 docker 后解决:systemctl restart docker 如果没有解决问题则执…...

智能制造优化,RFID生产线管理系统解决方案

一、背景介绍 随着全球经济的发展,传统制造业面临着越来越高的成本和低利润的挑战,为了提升企业的整体利润率,优化管理流程成为必要的手段之一,在传统的制造企业中,生产线通常采用单件流生产模式,但这种模…...

【Mybatis】基于Mybatis插件+注解,实现敏感数据自动加解密

一、介绍 业务场景中经常会遇到诸如用户手机号,身份证号,银行卡号,邮箱,地址,密码等等信息,属于敏感信息,需要保存在数据库中。而很多公司会会要求对数据库中的此类数据进行加密存储。 敏感数据…...

【特纳斯电子】基于物联网的指纹密码锁系统设计-实物设计

资料下载链接:基于物联网的指纹密码锁系统设计-实物设计 - 电子校园网 编号: T3732205M-SW 设计简介: 本设计是基于单片机的指纹密码锁,主要实现以下功能: 1、可通过密码解锁 2、可通过云平台解锁 3、可通过指纹解…...

【牛客面试必刷TOP101】Day9.BM37 二叉搜索树的最近公共祖先和BM42 用两个栈实现队列

作者简介:大家好,我是未央; 博客首页:未央.303 系列专栏:牛客面试必刷TOP101 每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!&…...

10.12 校招 实习 内推 面经

绿*泡*泡: neituijunsir 交流裙 ,内推/实习/校招汇总表格 1、校招 | 2024届秋招,美团哪些校招岗位最缺人?(内推) 校招 | 2024届秋招,美团哪些校招岗位最缺人?(内推&…...

redis 生成流水工具类

使用redis存储流水号,代码如下: import cn.hutool.core.date.DateUtil; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component;Component public class RedisSerialUtil {private RedisTemplate…...

BGP服务器租用腾讯云和阿里云价格对比

BGP云服务器像阿里云和腾讯云均是BGP多线网络,速度更快延迟更低,阿里云BGP服务器2核2G3M带宽优惠价格108元一年起,腾讯云BGP服务器2核2G3M带宽95元一年起,阿腾云atengyun.com分享更多云服务器配置如2核4G、4核8G、8核16G等配置价格…...

PyTorch 深度学习之多分类问题Softmax Classifier(八)

1. Revision: Diabetes dataset 2. Design 10 outputs using Sigmoid? 2.1 Output a Distribution of prediction with Softmax 2.2 Softmax Layer Example, 2.3 Loss Function-Cross Entropy Cross Entropy in Numpy Cross Entropy in PyTorch 注意交叉熵损失,最…...

抖音直播招聘小程序可以增加职位展示,提升转化率,增加曝光度

抖音直播招聘报白是指进入抖音的白名单,允许在直播间或小视频中发布招聘或找工作等关键词。否则会断播、不推流、限流。抖音已成为短视频流量最大的平台,但招聘企业数量较少。抖音招聘的优势在于职位以视频、直播方式展示,留存联系方式更加精…...

论文阅读之《Learn to see in the dark》

Learning to See in the Dark-CVPR2018 Chen ChenUIUC(伊利诺伊大学厄巴纳-香槟分校) Qifeng Chen, Jia Xu, Vladlen Koltun Intel Labs(英特尔研究院) 文章链接:https://arxiv.org/pdf/1805.01934.pdfhttps://arxiv.org/pdf/1805.01934.p…...

Docker 生成自定义镜像并使用Docker Compose部署

Docker 生成自定义镜像并使用Docker Compose部署 Docker Compose 是一个用于定义和运行多个 Docker 容器的工具,可以轻松管理复杂的应用程序。本文将介绍如何在 Docker Compose 中使用自定义 Docker 镜像,并提供了生成自定义 Docker 镜像的步骤。 步骤…...

设计模式~调停者(中介者)模式(Mediator)-21

调停者(中介者)模式(Mediator) (1)优点 (2)缺点 (3)使用场景 (4)注意事项: (5)应用实例: 代码 调停者&a…...

计算机毕业设计选什么题目好?springboot 医院门诊在线预约挂号系统

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…...

linux中使用ps查看进程的所有线程

在 Linux 系统中&#xff0c;可以使用 ps 命令和 ps H 命令结合来查看进程的线程信息。ps 命令用于显示系统中当前运行的进程信息&#xff0c;而 ps H 命令则可以显示进程中的所有线程。 使用以下命令可以查看指定进程的所有线程信息&#xff1a; ps H -T <PID>将 替换…...

本、硕、博区别真的辣么大吗?

61&#xff1a; 发际线已经说明了一切…… Super Mario&#xff1a; 小学&#xff0c;老师告诉学生&#xff1a;“森林里有只老虎&#xff0c;已经被我关在笼子里&#xff0c;我会带你去那个地方&#xff0c;然后给你一把猎枪&#xff0c;告诉你猎枪怎么用&#xff0c;并开枪…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

华为OD机考-机房布局

import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...