Skip to content

Latest commit

 

History

History
260 lines (184 loc) · 11.5 KB

Dust_ZICL1st.md

File metadata and controls

260 lines (184 loc) · 11.5 KB
timezone
Asia/Shanghai

请在上边的 timezone 添加你的当地时区,这会有助于你的打卡状态的自动化更新,如果没有添加,默认为北京时间 UTC+8 时区 时区请参考以下列表,请移除 # 以后的内容

timezone: Pacific/Honolulu # 夏威夷-阿留申标准时间 (UTC-10)

timezone: America/Anchorage # 阿拉斯加标准时间 (UTC-9)

timezone: America/Los_Angeles # 太平洋标准时间 (UTC-8)

timezone: America/Denver # 山地标准时间 (UTC-7)

timezone: America/Chicago # 中部标准时间 (UTC-6)

timezone: America/New_York # 东部标准时间 (UTC-5)

timezone: America/Halifax # 大西洋标准时间 (UTC-4)

timezone: America/St_Johns # 纽芬兰标准时间 (UTC-3:30)

timezone: America/Sao_Paulo # 巴西利亚时间 (UTC-3)

timezone: Atlantic/Azores # 亚速尔群岛时间 (UTC-1)

timezone: Europe/London # 格林威治标准时间 (UTC+0)

timezone: Europe/Berlin # 中欧标准时间 (UTC+1)

timezone: Europe/Helsinki # 东欧标准时间 (UTC+2)

timezone: Europe/Moscow # 莫斯科标准时间 (UTC+3)

timezone: Asia/Dubai # 海湾标准时间 (UTC+4)

timezone: Asia/Kolkata # 印度标准时间 (UTC+5:30)

timezone: Asia/Dhaka # 孟加拉国标准时间 (UTC+6)

timezone: Asia/Bangkok # 中南半岛时间 (UTC+7)

timezone: Asia/Shanghai # 中国标准时间 (UTC+8)

timezone: Asia/Tokyo # 日本标准时间 (UTC+9)

timezone: Australia/Sydney # 澳大利亚东部标准时间 (UTC+10)

timezone: Pacific/Auckland # 新西兰标准时间 (UTC+12)

ZK 残酷共学第 1 期残酷指引

⚠️ 正式开始前请确保你在身体上和精神上都处于合适的状态,请刻意练习,残酷面对 🆒。为方便检索 The First ZK Intensive CoLearning 简写为 ZICL1st,第 2 期即为ZICL2nd,第 3 期即为 ZICL3rd,以此类推。

⚠️ 报名需要按要求认真填写下面 [ XXX ] 部分,方可通过报名审核,通过审核即可开始自主学习。

共学内容

第一期的重点是向大家介绍什么是 ZK、 ZKP 的基础知识,以及 Circom 代码入门,有一定难度,共学资料如下:

本次共学资料前两周的 lecture 来自 zk-learning,博客来自 《探索零知识证明系列》《从零开始学习 zk-SNARK》,第三周的 Circom 部分来自 0xparc,视频讲解为 ZK Shanghai 的中文版本。郭宇老师还推荐了这篇文章《Survey-SNARKs》,学有余力者可以依此找到更多的扩展内容。

最后,非常感谢安比实验室郭宇老师对于本次共学资料选择的指导!


Dust

  1. 自我介绍 爱好者
  2. 你认为你会完成本次残酷学习吗? 会
  3. 目前阶段对于 ZK 的了解? 了解一些

Notes

2024.07.29

本身有zk基础,所以跳过前面部分,改为其他zk相关自学内容

  • 学习主题:BLS签名
  • 学习内容:
  1. BLS签名验证过程 即e(P, H(m)) = e(G, S)
  2. BLS签名聚合,即S=S1+S2+...+S1000情况下,根据pairing的特性,依旧能满足验证
  3. 密钥聚合和n-n多签,在对私钥S和公钥P进行聚合,聚合后同上原理进行验证
  4. m-n多签,需要生成成员密钥(成员密钥中包含私钥及聚合公钥对参与序号进行签名),在此基础上结合同上原理进行验证

ref: https://learnblockchain.cn/article/1711

2024.07.30

  • 学习主题:交互式GKR Sum-Check协议
  • 学习内容
  1. 交互式协议,需要进行多轮交互,每轮交互将推进一次证明,交互轮次等于多项式degree
  2. 初始阶段prover需要产生声明,其后进入交互证明过程
  3. 每一轮需要verifier生成挑战值,挑战值会被prover用来产生下一轮多项式
  4. 最后一轮verifier产生挑战值后,从Oracle处获取多项式取值进行对比,对比通过则完成

https://learnblockchain.cn/article/6188

2024.07.31

  • 学习主题:Shamir's Secret Sharing
  • 学习内容:
  1. SSS算法原始秘密只能通过使用最小数量的共享来重建,这允许不同的各方进行合作,而无需完全信任彼此,原始秘密只能通过使用最小数量的共享来重建,这允许不同的各方进行合作,而无需完全信任彼此
  2. SSS算法基于多项式实现,秘密隐藏于多项式常数项中,在3-5的SSS方案中,会产生一个degree为2的多项式,每个人持有多项式上的一个点,因此任意三个人通过插值均可以还原出该多项式
  3. 关键问题:秘密/多项式系数的产生和销毁,重建过程中每个人需要暴露自己的知识?

2024.08.01

  • 学习主题: circom-mp-mpdz学习
  • 学习内容:
  1. example native-search中circom用于对于input1数组进行查找,查找目标为input2单个数字
  2. example 流程中第一步使用circom-2-arithc进行circom到电路的转换,转换后生成4个目标文件 circuit.txt debug.json circuit_info.json report.json
  3. 每次输入参数由example下py文件生成,output记录了正确匹配的次数
  4. 函数的调用为直接通过命令行调用,因此不存在跨语言调用的问题

2024.08.02

  • 学习主题: bristol format
  • 学习内容:

2024.08.02

  • 学习主题: bristol format
  • 学习内容:

2024.08.02

  • 学习主题: circuit debug 文件
  • 学习内容:
  1. 主要分成nodes、signals、gates三个结构
  2. gates代表操作,比如Add,gate下id关联到nodes
  3. node下signals id关联到signals下
  4. signals下主要包含in、out等signal、常量以及中间变量以random命名

2024.08.03

  • 学习主题: lattigo学习
  • 学习内容:
  1. lattigo为一个实现基于格的同态加密工具
  2. lattigo支持BFV、CKKS、RLWE、BTP方案
  3. 在上文MP-SPDZ的学习中可以看到,其接收MPC文件的电路格式以及PlayerData下的InputData,但是对于lattigo来说好像并不能很好支持对电路的理解,所以可能需要手动解析对于mpc文件的理解
  4. 在mpc的计算过程中,仅需要进行计算,而不像zk一样要产生proof以及验证,即使同样是circom电路

2024.08.04

  • 学习主题: circom学习
  • 学习内容:
  1. circom证明电路常见设计方式,包括为0判断、选择等
  2. circom 二进制约束代码

2024.08.05

  • 学习主题: circom学习
  • 学习内容:
  1. 对于电路需要注意约束个数,避免出现仅对signal赋值而实际并无约束的情况
  2. 需要注意每一个signal都是prover注入的,约束是为了避免prover作恶的情况,所以需要理解<==和<--的区别
  3. IsEqual构造十分巧妙,可以分析其in out状态理解其约束

2024.08.06

  • 学习主题: circom学习
  • 学习内容: 在实际的应用过程中,以snarkjs为例,先要进行
  1. powersoftau生成 ptau文件,参与方逐个生成,并在最后构建出final.ptau
  2. 通过ptau和r1cs生成 zkey文件
  3. 通过zkey产生vk文件
  4. prover通过zkey产生witness proof和 public output
  5. verifier适用output 和proof 进行证明验证
  6. 产生verifier合约用于链上验证

2024.08.07

  • 学习主题: circom学习
  • 学习内容:数独circom实践
  1. 对于每行、每列使用IsEqual进行约束
  2. 所有IsEqual的约束结果out共同组成了最终的结果输出
  3. 需要注意的是 eq.out===1 从生成结果来看会减少repl的约束个数,后续需要再找下原因

2024.08.08

  • 学习主题: snarkjs学习
  • 学习内容:细节整理
  1. prover产生的public.json是public input和out的汇总,并非output
  2. circom内main component的output均为public
  3. verfier验证除了vk、proof还需要 public input和 output

2024.08.09

  • 学习主题: circom 实用电路学习
  • 学习内容:简单签名方案
  1. 密钥产生、签名、验签
  2. 对于确保消息m是什么 依赖public input
  3. ECDSA必须带随机数,需要在群上面做除法消耗较大
  4. BLS有两条曲线以及一个映射方法(同态),因此BLS不需要随机数?

2024.08.10

  • 学习主题: circom 实用电路学习
  • 学习内容:简单群签名
  1. 群签名允许一个群体中的任何成员进行签名,而外部观察者无法确定签名者的具体身份
  2. 群签名的产生同简单签名方案
  3. 群签名的验证过程需要输入群成员所有pk(公共输入)进行验证,out为0是代表为群中成员

2024.08.11

  • 学习主题: circom 实用电路学习
  • 学习内容:Merkel树验证
  1. 同l0 receipt验证,需要输入leaf、sib、root和索引进行验证
  2. 索引用来标注节点顺序
  3. 排序需要用到条件swap

2024.08.12

  • 学习主题: circom 实用电路学习
  • 学习内容:约束类型
  1. 约束分成常量、线性表达式、二次表达式、非二次表达式
  2. <==相当于 <-- 及 ===
  3. <--会分配一个二次表达式,但不会添加任何约束

2024.08.13

  • 学习主题: circom 实用电路学习
  • 学习内容:约束简化
  1. 约束简化参数分成三类 -o0 不简化 -o1 弱简化 -o2 完全简化
  2. 约束简化可以移除线性约束,将其约束到其它二次约束中(因为无成本的加法)
  3. 约束简化不能移除公共输入和输出
  4. 实际测试中,对于a(pub input), b(input), c(output),对于 c <== a; 存在1个线性约束,对于 c <== b; 不存在线性约束;