美文网首页
ZK-STARK 介绍

ZK-STARK 介绍

作者: 雪落无留痕 | 来源:发表于2022-07-28 15:18 被阅读0次

ZK-STARKs 由Eli Ben-Sasson在2018年提出,是一种零知识证明方案,其全称为:Zero-Knowledge Scalable Transparent Arguments of Knowledge

Zero-Knowledge:实现零知识证明

Scalable:可扩展性
Transparent:透明性,不需要可信设置
Argument of Knowledge:知识论证,只有知道 secret 的prover,才能生成有效的proof;

安全:能仅依赖抗碰撞的Hash函数,能够抗量子攻击。

效率:对于指定的计算,对于证明者,zk-STARK 比 zk-SNARK和Bulletproof快10倍;对于验证者,比zk-SNARK快2倍,比bulletproof快10倍

不足:对于证明的size, zk-STARK (200 KB 左右)是zk-SNARK(192 B)的100倍左右,是Bulletproof的20倍左右。

数学原理

ZK-STARK主要针对CI问题,即保证计算的正确性. ZK-STARK算法流程如下图,主要是一系列转化的过程,主要是将CI 问题转化为多项式处理,再利用多项式值构建Merkle树,生成Merkle path 证明。

  1. 算术法就是把CI问题转化为多项式形式

以Fibonacci序列为例,对于a_0 = x, a_1 = y, 假如要证明a_{1000} = z, 其中 x 为公开输入,y 为 隐私输入

a_{n+2} = a_{n+1} + a_n

(1)首先转化为执行路径(Execution Trace):

注:上表示例中, x = 3, y =4

上表需要满足以下两种约束条件:

a. 状态转移约束条件(transition constraints):

T_{i+1,0} = T_{i,1},\ T_{i+1,1}=T_{i,0}+T_{i,1}
b. 边界约束条件:

T_{0,0}=X \ \ T_{999,1} = Z

即将Fibonacci计算问题转为执行路径表的验证问题。

(2)执行路径多项式插值

对于每一列,定义多项式

P_j(i) = T_{i,j}

其中 i = 0, 1; j = 0...999.

通过Lagrange或FFT实现多项式插值,由此将执行路径表转为多项式验证。

(3)约束条件多项式

思考: 对于多项式f(x), 若f(1) = 0, f(2) = 0, f(5) = 0, 则必然存在: T(x) = f(x)/(x-1)(x-2)(x-5). 同理利用该性质对约束条件进行处理。

a. 状态转移多项式约束条件

\begin{aligned} T_{i + 1, 0} &= T_{i, 1} &⇒&& C_0(x) &= \frac {P_0(x + 1) - P_1(x)} {\prod^i_{[0 … 998]}\left( x - i\right)} \\ T_{i + 1, 1} &= T_{i, 0} + T_{i, 1} &⇒&& C_1(x) &= \frac {P_1(x + 1) - (P_0(x) + P_1(x))} {\prod^i_{[0\dots998]}\, (x - i)} \end{aligned}
b. 边界条件多项式约束条件

\begin{aligned} T_{0, 0} &= X &⇒&& C_2(x) &= \frac {P_0(x) - X} {x - 0} \\ T_{999, 1} &= Z &⇒&& C_3(x) &= \frac {P_1(x) - Z} {x - 999} \\ \end{aligned}

进行将 CI 问题转化为多项式P_0, P_1, C_0, C_1, C_2, C_3的验证问题,可以将C_0, C_1, C_2, C_3组合为一个多项式:

C(x) = α_0 ⋅ C_0(x) + α_1 ⋅ C_1(x) + α_2 ⋅ C_2(x) + α_3 ⋅ C_3(x)

(4) Merkle树 证明

在扩域(Extended Domain)分别计算P0(x), P1(x), C(x)。然后利用P0(x) 和P1(x) 构建执行路径Merkle树, 利用C(x) 的值构建约束条件Merkle树。

随机抽样部分叶子节点,构建Merkle树path证明,由此生成proof.

  1. 低度测试(low-degree test)

思考:如何证明5个点,在一个2次多项式上?

如何证明10000个点,在一个200次多项式上?

将P(x)和C(x)经过处理,复合为一个多项式,然后证明其次数小于某个指定的度(degree)

例如对于多项式:

p(x) =c_0 + c_1x+\cdots+c_{d-1}x^{d-1}

证明其度数小于d.

思路: 对于

f(x) = a_0 + a_1x+a_2x^2+a_3x^3+a_4x^4+a_5x^5

可以写为 :
f(x)=a_0 + a_2x_2 + a_4 x_4 + (a_1 + a_3 x^2 + a_5 x^2) x \\ = g(x^2) + x h(x^2)


g(x) = a_0 + a_2x+ a_4x^2 \ \ \ h(x)=a_1+a_3x+a_5x^2

g(x)h(x)次数变成d/2,由此于通过于递归实现实现低度测试,对于每一次递归,同样构建Merkle树,然后随机抽样一些叶子节点及基Merkle路径,形成proof。

实际证明中,每层递归多项式次数缩减4倍(实际要证明的度数为(|Dev| - |Dtrace| - 1), 例如

第一层:1024个点,次数为64

第二层:256个点, 次数为16

第三层:64个点, 次数为4

ZK-STARK proof 构成

  1. 执行路径(trace polynomial)构建的Merkle树 root,Merkle path及对应的叶子节点;

    1. 约束多项式(constraint polynomial)构建的Merkle树root, Merkle path及对应的叶子节点 ;
  2. 随机z点的值: Tk(z), Tk(z*wtrace)

  3. 组合多项式(composite polynomial)的低度证明,包括每一层的Merkle root, path和叶子节点值。

验证过程:

  1. 根据复合多项式Merkle roots 确定查询位置;

  2. 验证执行路径多项式和约束多项的Merkle 证明;

  3. 计算随机点z的多项式约束值;

  4. 计算组合多项式在查询位置的值;

  5. 根据第4步的值验证组合多项式低度测试证明。

ZK-STARK 虚拟机

下面基于distaff, 介绍ZK-STARK虚拟机设计,整体框架如图所示:

  1. Program:

    program 是由一系列指令组成,对栈上的数据进行操作,下面fibonacci序列为例,进行介绍。

    假如a_0 = 0, a_1 = 1, 根据 a_{n+2} = a_{n+1} + a_n, 计算 a_4 = 3 的 program 即为:

step 0 1 2 3 4 5 6 7 8 9 10 11 12
instruction swap dup.2 drop add swap dup.2 drop add swap dup.2 drop add
register 0 1 0 0 1 1 1 1 1 2 1 1 2 3
register 1 0 1 1 0 1 1 1 1 1 2 2 1 2
register 2 0 1 1 1 1 2
register 3 1 1 2

注:public inputs 作为寄存器初始状态,secret inputs 可以通过read 指令读入寄存器中。目前distaff已支持39个指令,可以实现比较,条件语句,循环,嵌套等结构,已接近图灵完备(缺少RAM(random access memory), 后面将会实现)。

  1. 证明生成
let options = ProofOptions::default();

let inputs = [1, 0]; // initialize stack with 2 values; 1 will be at the top
let num_outputs = 1; 
let (outputs, program_hash, proof) = processor::execute(&program, &inputs, num_outputs, &options);

注:证明生成可在链下完成

  1. 证明验证
match processor::verify(&program_hash, &public_inputs, &outputs, &proof) {

    Ok(_) => println!("Execution verified in {} ms", now.elapsed().as_millis()),
  Err(msg) => println!("Failed to verify execution: {}", msg)
}

注: verify 函数可以实现任意proof 验证,因此对于所有的ZK-STARK proof, 仅需要部署一个验证合约。

性能分析

测试环境: Intel Core i5-7300U @ 2.60GHz (single thread) with 8 GB of RAM

可以通过多线程或FPGA, ASIC等加速proof的生成。

目前面临问题

  1. 目前仅实现汇编形式的语言对CI问题进行定义,缺少高级描述语言,使用不方便。

汇编语言:

let program = assembly::compile("

begin
 push.3
 push.5
 read
 if.true
 add
 else
 mul
 end
end").unwrap(); 

编译后的指令:

[begin noop noop noop noop noop noop noop push(3) noop noop noop noop noop noop noop push(5) read noop noop noop noop noop noop noop noop noop noop noop noop noop,ifassert add noop noop noop noop noop noop noop noop noop noop noop noop noopelsenot assert mul noop noop noop noop noop noop noop noop noop noop noop noop end]
  1. 扩展指令

目前只开发了一些基本计算功能指令,缺少专用计算功能的指令,例如要实现匿名交易,需要实现相关密码算法的指令,椭圆曲线的点加运算,perdersen承诺,hash函数等指令。

  1. 元素域限制

目前栈上元素定义的素域模128,即为 340282366920938463463374557953744961537 (2^{128} - 45 * 2^{40} + 1) ,未对256位大数运算进行支持。

参考资料

https://hackmd.io/@_33nsoRFQwGYh2T1-T9lqQ/rJHYnQ3Z4?type=view
https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/zk-starks/
Distaff: https://github.com/GuildOfWeavers/distaff

附:更多ZKSTARK资料:

https://eprint.iacr.org/2021/582.pdf

Stark anatomy: https://aszepieniec.github.io/stark-anatomy/

https://github.com/aszepieniec/stark-anatomy

Starkware 文档:https://medium.com/starkware/arithmetization-i-15c046390862

Vitalik: https://vitalik.ca/general/2017/11/09/starks_part_1.html

Ox.org 文档:https://hackmd.io/@_33nsoRFQwGYh2T1-T9lqQ/rJHYnQ3Z4?type=view

ethhub: https://docs.ethhub.io/ethereum-roadmap/layer-2-scaling/zk-starks/

https://github.com/matter-labs/awesome-zero-knowledge-proofs#fri-starks

FRI:https://eccc.weizmann.ac.il/report/2017/134/download/

Matter labs hodor: https://github.com/matter-labs/hodor

OpenZKP: https://github.com/0xProject/OpenZKP

ethSTARK: https://github.com/starkware-libs/ethSTARK

distaff: https://github.com/GuildOfWeavers/distaff

相关文章

  • ZK-STARK 介绍

    ZK-STARKs 由Eli Ben-Sasson在2018年提出,是一种零知识证明方案,其全称为:Zero-Kn...

  • Runtime介绍---术语介绍

    1. 什么是Runtime Runtime又叫运行时,是一套C语言的API。 我们平时编写的OC代码,底层都是基于...

  • 介绍

    万物终有一天会消失殆尽,诸神出卖黎明,光明为黑暗所湮灭,日月皆痕,海潮鸣泣,幼雏嚎啕,生灵涂炭。 托里奥世纪第20...

  • 介绍😊

    大家好,我是beth,初入简书,不邀自来,还请各位见谅! 先说说我是怎么想着来的吧?这不是刚过了一个寒假嘛...

  • 介绍

    在这个世界上还有三个家族他们不受各个国家联合国管。但他们身上有着使命分别是帝国家族曲国家族圣国家族。他们隐藏在一个...

  • 介绍

    云轩:主角,星罗帝国的二皇子。从小就不能练气,被人们称为废物。直到12岁的时候,自己的武魂觉醒才能练气,双...

  • 介绍

    万花阁 神秘至极的组织,亦正亦邪。万花阁的人行动隐秘,至今未被发现所在地。听说组成成员均以花来命名。所到之处,皆留...

  • 介绍

    此书命曰元.八洲传。属九洲四传第二部。第一部,上古往事。上古往事乃元八洲传外传。前两部为战胜心魔,而第三部,大梦...

  • 介绍

    千肆篇 7月的天气燥热,但在红杏阁里这份燥热就别有一番风味。漫天的胭脂水粉的香味变成了调味剂,女人们千姿百媚,在...

  • 介绍

    该文集属于收录文集,里面的内容不全是本人创作,有收录个人喜欢的内容。 *(偏个人向)

网友评论

      本文标题:ZK-STARK 介绍

      本文链接:https://www.haomeiwen.com/subject/rvrxwrtx.html