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

news2024/10/6 6:48:15

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

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

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

相关文章

ps提示由于找不到MSVCP140.dll是怎么回事?MSVCP140.dll修复方法

我们的生活和工作都离不开各种软件工具。其中,Adobe Photoshop作为一款专业的图像处理软件,以其强大的功能和广泛的应用领域,受到了广大用户的喜爱。然而,在使用Photoshop的过程中,我们可能会遇到各种问题,…

硬件【11】超全讲解I2C的上拉电阻

文章目录 1.概述2 I2C的上拉电阻3 上拉电阻最小值计算4 上拉电阻最大值计算5 总结 1.概述 相信很多人都清楚,在I2C总线上需要接上拉电阻?但是您针对对I2C上拉电阻足够了解吗?本文带您详细掌握一下I2C的上拉电阻。目录如下: 上拉…

电压放大器在生物医疗中的应用研究

电压放大器是一种常见的电子电路,在生物医疗领域中也得到了广泛应用。其主要作用是将生物信号(如心电图、脑电图等)转化为电压信号,并将其放大到需要的水平,以便进行分析和处理。 随着生物医学技术的不断发展&#xff…

ARMv7-A 那些事 - 7.栈回溯浅析

By: Ailson Jack Date: 2023.10.14 个人博客:http://www.only2fire.com/ 本文在我博客的地址是:http://www.only2fire.com/archives/159.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。…

C++ STL之容器(使用方法)

目录 1. 容器简介2. String2.1 构造操作2.2 赋值操作2.3 常用操作(存取字符串、拼接、 查找、替换、比较、插入、删除) 3. Vector3.1 构造操作3.2 赋值操作3.3 常用操作(大小、 查找、替换、比较、插入、删除) 4. Deque4.1 构造操…

Android Studio新建项目教程

Android Studio新建项目教程 一、创建新项目 二、选择空白页项目类型 配置然后finish 等待项目完成初试化 等待初始化结束,创建完成 三、运行创建的APP

统信UOS1060设置自动关机01

原文链接:统信UOS1060设置自动关机01 hello,大家好啊,今天给大家介绍一篇如何在统信UOS 1060上实现自动关机的文章,本篇文章采用两种方式,第一种使用的是crontab定时任务的方式,第二种是使用at命令的方式&a…

frp隧道(流量代理)

代理 代理使用场景 拿下远程web服务器webshell连接不稳定,需要使用稳定的木马程序远程服务器无法直接连接攻击者电脑(内网IP)需要借助公网vps转发来自失陷服务器的木马流量借助frp服务器(vps)和客户端(内…

基于SSM的班级事务管理系统

基于SSM的班级事务管理系统 开发语言:Java数据库:MySQL技术:SpringSpringMVCMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 前台界面 登录界面 班委界面 学生界面 管理员界面 摘要 基于SSM(Spring、Spring…

EMC Unity存储(VNXe) service Mode和Normal Mode的一些说明

本文介绍下EMC unity存储设备(也包含VNXe存储设备)的两种工作模式: Service mode:也叫做rescue mode,存储OS工作不正常或者有其他故障,就会进入这个模式,无法对外提供服务Normal mode&#xff…

图文并茂手把手教你在MAC配置Android,nodejs,git,brew环境,配置安卓真机支持投屏以及测试

先说nodejs和npm 这个很简单,只需要点击下面链接,安装node.js环境即可 https://nodejs.org/zh-cn/ Android Android Studio 下载地址及版本说明 Android 开发者官网:https://developer.android.com/index.html (全球&#xff…

大数据可视化模块竞赛Vue项目文件结构与注意事项

1.vue项目src目录下只有两个文件夹与两个js文件,如图所示: 2.asseets目录存放包或其他外部资料 注意 :echarts采用的是引用外部文件导入 let echarts = require(@/assets/echarts.min.js) 3.components目录存放绘制页面的vue文件(我这里示例创建了一个newPage.vue)…

彩票系统java

【题目要求】: 设计实现一种彩票系统,根据彩票规则,进行开奖和公布开奖结果,设计报告中给出彩票的规则。 【彩票规则】: 系统会随机生成一个四位的号码作为此次的中奖号码,用户根据系统的文字提示输入自…

树莓派玩转openwrt软路由:11.OpenWrt安装NodeRed

1、更新软件源 opkg update2、安装nodered docker run -it -p 1880:1880 --name mynodered nodered/node-red3、安装完整性测试 实现一个打印hello world的demo,每隔1秒打印一次

2.9 深入GPU硬件架构及运行机制

五、GPU技术要点 1.SMID和SIMT SIMD(Single Instruction Multiple Data)是单指令多数据,在GPU的ALU(在Core内)单元内,一条指令可以处理多维向量(一般是4D)的数据。比如&#xff0c…

python+大数据校园卡数据分析 计算机竞赛

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于yolov5的深度学习车牌识别系统实现 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:4分工作量:4分创新点:3分 该项目较为新颖&am…

3.MySQL数据类型详解

个人主页:Lei宝啊 愿所有美好如期而遇 目录 1.数据类型分类 2.数值类型 (1).tinyint,smallint类型等 (2)bit类型 (3)小数类型 1).float 2).decimal 3.字符串类型 (1)char (2)varchar (3)char和varchar比较 (4)日期和时间类型 (5)enum和se…

Vue3<script setup>语法糖下,实现父子组件通信以及数据监听。

在Vue3的script setup语法糖中,没有办法通过Vue2的ref、props、parent、中央时间总线等等众多方法,通过this指针简单的实现父子组件的通信,网络上也很少有关于script setup语法糖的相关教程,所以决定自己写一个详细教程&#xff0…

创建IDEA模板

将常用的配置文件内容、模板框架等放到IDEA的模板中保存,方便以后使用。以mybatis-config.xml和一个映射文件为例(这是我自己学习SSM时用到的,后面学习SpringBoot时发现配置都只需要写到application.yml中就ok了,配置变得非常简单…

07_03文件系统怎么玩的

文件系统 Linux将文件系统分为了两层:VFS(虚拟文件系统)、具体文件系统,如下图所示: VFS(Virtual Filesystem Switch)称为虚拟文件系统或虚拟文件系统转换,是一个内核软件层&#…