密码协议形式化分析与可证明安全实验——Cricom实验

circom circuit.circom --r1cs --wasm --sym

编译完成后结果:

这里的三个参数:

  • r1cs:生成基于R1CS约束系统的电路,得到一个.r1cs的二进制文件
  • wasm:生成一个基于circuit_js的目录(目录明取决于电路名),目录内包含一个wasm文件和其他用于生成witness的相关文件
  • sym:生成一个.sym的符号文件,用于调试和打印约束系统

circom目录中会多出俩个文件:分别是文件circuit.rics , 文件circuit.sym 和文件夹circuit_js

如果还加了 --c 参数,则还会生成一个 _cpp 目录,里面包含了相关的.cpp,.dat,MakeFile等等文件, 这些文件将用于编译C代码以生成witness文件

此外可以采用 -o 参数来指定生成的目录名(如果不加这个参数,则默认目录名为 circname_js ,这里 circname是你的.circom电路文件的名字

编译电路后,可以用snarkjs的相关命令来查看电路,先看一下snarkjs的帮助文件

r1cs info Print statistiscs of a circuit
Usage: snarkjs ri [circuit.r1cs]
r1cs print Print the constraints of a circuit
Usage: snarkjs rp [circuit.r1cs] [circuit.sym]

这里用ri参数可以查看电路信息(或者用r1cs info也可以)

snarkjs ri circuit.r1cs

输出表示电路采用的曲线为bn-128,包含4个导线,其中2个私有输入,一个输出,输入输出之间包含一 个约束关系

或者使用rp参数查看电路中的约束(或者用print r1cs也可以)

snarkjs rp circuit.r1cs

这里忽略掉前面的系数,得到的约束就是 到此为止,电路就编译好了,接下来需要给电路特定的输入,也就是构建witness,这里就需要用到前面 生成的wasm文件

snarkjs采用json文件的方式将witness输入电路,需要准备一个 input.js 文件,如下

{“a”: “3”, “b”: “11”}

  • 注意这里的输入均为字符串,因为JS无法处理大于 的整数,所以转换为字符串形式处理

将这个json文件放到刚刚生成的circuit_js下面,此时目录里面应该有四个文件,分别是:

然后在该目录下执行下列命令

node generate_witness.js circuit.wasm input.json witness.wtns

这样就得到了 witness.wtns 的证据文件,之后将利用这个文件来生成对应的snark证明

如果说前面使用了 --c 参数,则可以进入到对应的cpp目录中,同时将对应的input.json文件放到该目录 下,在该cpp目录下执行make命令即可

准备工作-可信设置部分

证明生成需要两个文件,一个是前面构造电路时生成的r1cs文件 circuit.r1cs ,另一个是证据文件 witness.wtns

接下来以Groth16为例来生成证明 Groth16需要为每个电路都执行一次可信设置,因此在证明生成之前还需要针对电路完成一些准备工 作,Plonk和FFlonk无需为每个电路都执行可信设置,Plonk和FFlonk的生成过程可以看

Groth16的可信设置由两部分组成

  • \tau的幂次:这一部分与电路无关
  • phase 2:这一部分取决于电路

首先来生成 的幂次,命令如下

snarkjs powersoftau new bn128 12 pot12_0000.ptau -v

利用 new 命令创建\tau的幂次,这里有几个参数说明一下

  • 第一个参数为指定需要的曲线,snarkjs支持bn128和bls12-381两种曲线
  • 第二个参数为约束参数,表示可信设置所支持的最大约束的数量,这里的12表示可信设置最多支持 2^{12} = 4096个约束,这个参数的最大值为28,也即snarkjs可以生成具有至多2^{28}\approx 2.68*10^{8}个约束的电路

生成之后会在目录下得到一个 pot12_0000.ptau 文件

接下来需要用 contribute 命令,使用新的贡献来创建一个ptau文件

snarkjs powersoftau contribute pot12_0000.ptau pot12_0001.ptau --name=“First contribution” -v

这里会提示输入一些随机文本来为贡献提供额外的熵源,这里随便输就行,比如输入contribution" -v

contribute命令会将截止至现在的所有ptau文件作为输入(截止至目前为止的ptau文件为上面新建的 pot12_0000.ptau ),同时输出一个新的ptau文件 pot12_0001.ptau ,该文件中包含新贡献者执行的计算

contribute的过程还可以使用第三方软件来更新,比如下面这样(这里用的是这个库的bn-256曲线构建)

snarkjs powersoftau export challenge pot12_0001.ptau challenge_0003

snarkjs powersoftau challenge contribute bn128 challenge_0003 response_0003 - e=“some random text”

snarkjs powersoftau import response pot12_0001.ptau response_0003 pot12_0002.ptau -n=“Third contribution name”

更新完成之后,用 verify 命令验证截止至目前为止的ptau(只执行了一次更新,所以验证0001这个 ptau文件)

snarkjs powersoftau verify pot12_0001.ptau

这里只是生成 的幂,还没有执行phase 2的命令,因此此时运行后系统会输出[WARN]提示

不过验证通过了,就没什么问题

这里注意一点,每当新的zk-snark需要执行可信设置时,只需要对最新的ptau文件执行verify命令,即可 验证截止到目前为止的整个挑战和相应链

接下来是利用beacon命令创建一个ptau文件,这个ptau文件会以随机beacon的形式对ptau文件完成贡 献,可信设置的第一阶段需要对其应用一个随机beacon

引入beacon的命令如下

snarkjs powersoftau beacon pot12_0001.ptau pot12_beacon.ptau1cbf6603d6ff9ba4e1d15d0fd83be3a80bca470b6a43a7f9055204e860298f99 10 -n=“Final Beacon”

这里利用了以太坊第16668892个区块的Hash值作为beacon值,后面的参数10表示以该beacon值作为输入,计算2^{10}次Hash

接下来是可信设置的第二部分,也即phase 2

phase 2用到的命令为 prepare phase2 ,该命令会用到前面输出的 pot12_beacon.ptau 文件,并基于 该文件计算基于\tau ,\alpha *\tau ,\beta *\tau 的拉氏插值多项式,命令如下

snarkjs powersoftau prepare phase2 pot12_beacon.ptau pot12_final.ptau -v

输入命令之后,电脑会算一阵子,计算的时间取决于曲线、第一阶段中允许的约束数量(约束数量越 大,计算时间越长)

生成完最终ptau文件后,别忘了用 verify 命令验证一下

snarkjs powersoftau verify pot12_final.ptau

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
img

一、网安学习成长路线图

网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、网安视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

三、精品网安学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、网络安全源码合集+工具包

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

五、网络安全面试题

最后就是大家最关心的网络安全面试题板块
在这里插入图片描述在这里插入图片描述

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

后就是大家最关心的网络安全面试题板块
在这里插入图片描述在这里插入图片描述

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-CeHs8Fzi-1712624789870)]

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值