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)
⚠️ 正式开始前请确保你在身体上和精神上都处于合适的状态,请刻意练习,残酷面对 🆒。为方便检索 The First ZK Intensive CoLearning 简写为 ZICL1st,第 2 期即为ZICL2nd,第 3 期即为 ZICL3rd,以此类推。
⚠️ 报名需要按要求认真填写下面 [ XXX ] 部分,方可通过报名审核,通过审核即可开始自主学习。
第一期的重点是向大家介绍什么是 ZK、 ZKP 的基础知识,以及 Circom 代码入门,有一定难度,共学资料如下:
- 第一周:7 月 29 日 - 8 月 4 日:Introduction and History of ZKP
- 20min 的视频:初步理解 ZK 是什么
- 70min 的播客:零知识证明:一场”无知“的游戏
- (一)初识「零知识」与「证明」
- (二)理解「模拟」
- (三)寻找「知识」
- 100min 的视频:ZKP Lecture 1: Introduction and History of ZKP
- 第二周:8 月 5 日 - 8 月 11 日:Overview of Modern SNARK Constructions
- 第三周:8 月 12 日 - 8 月 18 日:Write some Circom
- 基础电路:
- ZK Shanghai 基础电路教学
- 编辑器:zkREPL
- 基础电路练习 这部分材料结合了Circom源码,可以多花时间来研究
- 实用电路:
- 基础电路:
本次共学资料前两周的 lecture 来自 zk-learning,博客来自 《探索零知识证明系列》和《从零开始学习 zk-SNARK》,第三周的 Circom 部分来自 0xparc,视频讲解为 ZK Shanghai 的中文版本。郭宇老师还推荐了这篇文章《Survey-SNARKs》,学有余力者可以依此找到更多的扩展内容。
- 自我介绍 爱好者
- 你认为你会完成本次残酷学习吗? 会
- 目前阶段对于 ZK 的了解? 了解一些
本身有zk基础,所以跳过前面部分,改为其他zk相关自学内容
- 学习主题:BLS签名
- 学习内容:
- BLS签名验证过程 即e(P, H(m)) = e(G, S)
- BLS签名聚合,即S=S1+S2+...+S1000情况下,根据pairing的特性,依旧能满足验证
- 密钥聚合和n-n多签,在对私钥S和公钥P进行聚合,聚合后同上原理进行验证
- m-n多签,需要生成成员密钥(成员密钥中包含私钥及聚合公钥对参与序号进行签名),在此基础上结合同上原理进行验证
ref: https://learnblockchain.cn/article/1711
- 学习主题:交互式GKR Sum-Check协议
- 学习内容
- 交互式协议,需要进行多轮交互,每轮交互将推进一次证明,交互轮次等于多项式degree
- 初始阶段prover需要产生声明,其后进入交互证明过程
- 每一轮需要verifier生成挑战值,挑战值会被prover用来产生下一轮多项式
- 最后一轮verifier产生挑战值后,从Oracle处获取多项式取值进行对比,对比通过则完成
https://learnblockchain.cn/article/6188
- 学习主题:Shamir's Secret Sharing
- 学习内容:
- SSS算法原始秘密只能通过使用最小数量的共享来重建,这允许不同的各方进行合作,而无需完全信任彼此,原始秘密只能通过使用最小数量的共享来重建,这允许不同的各方进行合作,而无需完全信任彼此
- SSS算法基于多项式实现,秘密隐藏于多项式常数项中,在3-5的SSS方案中,会产生一个degree为2的多项式,每个人持有多项式上的一个点,因此任意三个人通过插值均可以还原出该多项式
- 关键问题:秘密/多项式系数的产生和销毁,重建过程中每个人需要暴露自己的知识?
- 学习主题: circom-mp-mpdz学习
- 学习内容:
- example native-search中circom用于对于input1数组进行查找,查找目标为input2单个数字
- example 流程中第一步使用circom-2-arithc进行circom到电路的转换,转换后生成4个目标文件 circuit.txt debug.json circuit_info.json report.json
- 每次输入参数由example下py文件生成,output记录了正确匹配的次数
- 函数的调用为直接通过命令行调用,因此不存在跨语言调用的问题
- 学习主题: bristol format
- 学习内容:
- 学习主题: bristol format
- 学习内容:
- 学习主题: circuit debug 文件
- 学习内容:
- 主要分成nodes、signals、gates三个结构
- gates代表操作,比如Add,gate下id关联到nodes
- node下signals id关联到signals下
- signals下主要包含in、out等signal、常量以及中间变量以random命名
- 学习主题: lattigo学习
- 学习内容:
- lattigo为一个实现基于格的同态加密工具
- lattigo支持BFV、CKKS、RLWE、BTP方案
- 在上文MP-SPDZ的学习中可以看到,其接收MPC文件的电路格式以及PlayerData下的InputData,但是对于lattigo来说好像并不能很好支持对电路的理解,所以可能需要手动解析对于mpc文件的理解
- 在mpc的计算过程中,仅需要进行计算,而不像zk一样要产生proof以及验证,即使同样是circom电路
- 学习主题: circom学习
- 学习内容:
- circom证明电路常见设计方式,包括为0判断、选择等
- circom 二进制约束代码
- 学习主题: circom学习
- 学习内容:
- 对于电路需要注意约束个数,避免出现仅对signal赋值而实际并无约束的情况
- 需要注意每一个signal都是prover注入的,约束是为了避免prover作恶的情况,所以需要理解<==和<--的区别
- IsEqual构造十分巧妙,可以分析其in out状态理解其约束
- 学习主题: circom学习
- 学习内容: 在实际的应用过程中,以snarkjs为例,先要进行
- powersoftau生成 ptau文件,参与方逐个生成,并在最后构建出final.ptau
- 通过ptau和r1cs生成 zkey文件
- 通过zkey产生vk文件
- prover通过zkey产生witness proof和 public output
- verifier适用output 和proof 进行证明验证
- 产生verifier合约用于链上验证
- 学习主题: circom学习
- 学习内容:数独circom实践
- 对于每行、每列使用IsEqual进行约束
- 所有IsEqual的约束结果out共同组成了最终的结果输出
- 需要注意的是 eq.out===1 从生成结果来看会减少repl的约束个数,后续需要再找下原因
- 学习主题: snarkjs学习
- 学习内容:细节整理
- prover产生的public.json是public input和out的汇总,并非output
- circom内main component的output均为public
- verfier验证除了vk、proof还需要 public input和 output
- 学习主题: circom 实用电路学习
- 学习内容:简单签名方案
- 密钥产生、签名、验签
- 对于确保消息m是什么 依赖public input
- ECDSA必须带随机数,需要在群上面做除法消耗较大
- BLS有两条曲线以及一个映射方法(同态),因此BLS不需要随机数?
- 学习主题: circom 实用电路学习
- 学习内容:简单群签名
- 群签名允许一个群体中的任何成员进行签名,而外部观察者无法确定签名者的具体身份
- 群签名的产生同简单签名方案
- 群签名的验证过程需要输入群成员所有pk(公共输入)进行验证,out为0是代表为群中成员
- 学习主题: circom 实用电路学习
- 学习内容:Merkel树验证
- 同l0 receipt验证,需要输入leaf、sib、root和索引进行验证
- 索引用来标注节点顺序
- 排序需要用到条件swap
- 学习主题: circom 实用电路学习
- 学习内容:约束类型
- 约束分成常量、线性表达式、二次表达式、非二次表达式
- <==相当于 <-- 及 ===
- <--会分配一个二次表达式,但不会添加任何约束
- 学习主题: circom 实用电路学习
- 学习内容:约束简化
- 约束简化参数分成三类 -o0 不简化 -o1 弱简化 -o2 完全简化
- 约束简化可以移除线性约束,将其约束到其它二次约束中(因为无成本的加法)
- 约束简化不能移除公共输入和输出
- 实际测试中,对于a(pub input), b(input), c(output),对于 c <== a; 存在1个线性约束,对于 c <== b; 不存在线性约束;