2024年最新密码协议形式化分析与可证明安全实验——Cricom实验(2),真香

文章分享了网络安全面试题集锦,包括工程师面试技巧,以及一套完整的网络安全学习路径,从零基础入门到高级技能提升,涵盖视频教程、书籍资源、实战项目和面试准备。强调了知识体系和实践的重要性。
摘要由CSDN通过智能技术生成

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

😝朋友们如果有需要的话,可以联系领取~

1️⃣零基础入门
① 学习路线

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

image

② 路线对应学习视频

同时每个成长路线对应的板块都有配套的视频提供:

image-20231025112050764

2️⃣视频配套工具&国内外网安书籍、文档
① 工具

② 视频

image1

③ 书籍

image2

资源较为敏感,未展示全面,需要的最下面获取

在这里插入图片描述在这里插入图片描述

② 简历模板

在这里插入图片描述

因篇幅有限,资料较为敏感仅展示部分资料,添加上方即可获取👆

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

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

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

密钥生成

准备完毕之后,接下来是根据电路构建证明与验证密钥

首先将circuit.r1cs文件复制到C:\circom\circuit_js目录下

用电路和上面的最终ptau文件生成一个zkey文件,该文件是一个零知识密钥文件,包含phase 2的所有贡献,以及用于证明和验证的密钥,利用这个zkey文件可以验证其是否属于特定的电路

snarkjs groth16 setup circuit.r1cs pot12_final.ptau circuit_0000.zkey

这里得到的 circuit_0000.zkey 文件不包含任何贡献,不能用于最终电路的证明,因此需要执行前面 的贡献更新步骤

接下来使用 zkey 命令来对zkey文件进行贡献更新(前面用的是 powersoftau 命令,基本流程是一样 的)

snarkjs zkey contribute circuit_0000.zkey circuit_0001.zkey --name="First Contributor Name" -v #这里依然输入之前输入的值

snarkjs zkey contribute circuit_0001.zkey circuit_0002.zkey --name="Second contribution Name" -v -e="Another random entropy"

snarkjs zkey verify circuit.r1cs pot12_final.ptau circuit_0002.zkey # 更新完贡献记得验证一下

然后引入随机beacon值并验证

snarkjs zkey beacon circuit_0002.zkey circuit_final.zkey
1cbf6603d6ff9ba4e1d15d0fd83be3a80bca470b6a43a7f9055204e860298f99 10 -n="Final Beacon phase2"

snarkjs zkey verify circuit.r1cs pot12_final.ptau circuit_final.zkey #同样引入beacon后验证一下

之后基于该zkey文件,导出一个验证密钥,导出的密钥为json格式

snarkjs zkey export verificationkey circuit_final.zkey verification_key.json

证明生成

接下来利用电路和证明密钥来构建证明

snarkjs groth16 prove circuit_final.zkey witness.wtns proof.json public.json

命令执行完毕后,可以得到两个json文件:

  • 一个是 public.json
  • 另一个是 proof.json

public.json文件中是33,我们前面给的witness分别是3和11,因此3*11=33 正确

proof.josn里面包含用于验证的元素

上面三个就是Groth16中三个用于配对的元素

这里官方给了一个一步到位的方式,可以在一条命令里面同时构建witness文件和证明,如下

# Groth16
snarkjs groth16 fullprove input.json circuit.wasm circuit_final.zkey 
proof.json public.json

# Plonk
snarkjs plonk fullprove witness.json circuit.wasm circuit_final.zkey 
proof.json public.json

# FFlonk
snarkjs fflonk fullprove witness.json circuit.wasm circuit_final.zkey
proof.json public.json

验证

利用上述两个json文件可以验证证明

snarkjs groth16 verify verification_key.json public.json proof.json

如果输出下列信息说明验证通过了

现在把 把public.json里面的33改成32

再执行一次验证命令,此时会输出验证失败

模拟执行

最后是将验证密钥导出为Solidity智能合约,就可以将这个合约发布到链上了

snarkjs zkey export solidityverifier circuit_final.zkey verifier.sol

snarkjs给了一个模拟验证执行的命令,利用上面的两个json文件可以模拟Verifier在remix中的验证过程

snarkjs zkey export soliditycalldata public.json proof.json

输出是三个群元素和公共输入,均编码为HEX形式

["0x1d0bde1fa11154e30fe2f4cf390f13e44ded5892b89704fc67286548b72a84b9", "0x24bdfd9600cd3305d33d22eb772f4a931e155b523a12a24d84454594e6006d43"],
[["0x2c48929cc2f3f143b445bcc9228423a7afb765007cf823892c259259e9b20567", "0x13f538fbcf2d881da5af31297e6085bbcd4bcf7f36b8761eeaa6c2feebcca626"],["0x1be7d0cd25b1cb6bd5b0c465b95581291289b547600b4a2e7bc404b24d0f4238", "0x2d960f51e9918d0479d5ef4fe3351ef654277af3c5a82d956a50542e0b4db0cf"]],
["0x2ed9cd3e86df53ded6d6f402f5a5cfa390d9d35292e3f3ffb3e34c5432a3d30d", "0x1f9f04d096b7638ec149a9ac8ceb06acc268716f60ab8f4b5c1f7881498fb3cd"],
["0x0000000000000000000000000000000000000000000000000000000000000020"]

这里Verifier会调用verifyProof函数来对上述这堆东西进行验证,这里可以把上面的那个智能合约导入到 remix来模拟一下,这里给一个网址:http://remix.ethereum.org/

进去之后,右上角切换中文

打开本地文件->上传verifier.sol文件(地址:C:\circom\circuit_js)

进入SOLIDITY模块

编译verifier.sol文件

之后点左侧第四个部署并运行智能合约,这里选择Verifier的合约

然后下面有一个已部署的智能合约,把上面得到的那一串数字粘贴到verifyProof里面,点一下call

一、网安学习成长路线图

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

二、网安视频合集

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

三、精品网安学习书籍

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

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

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

五、网络安全面试题

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

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值