1 个不稳定版本
0.2.0 | 2020 年 7 月 31 日 |
---|
#7 在 #participant
705KB
15K SLoC
tau 的幂
从 kobigurk/phase2-bn254 分支。
原始故事
这是一个 多方计算 (MPC) 仪式,用于构建深度为 221 的所有电路的部分 zk-SNARK 参数。它通过执行所有 zk-SNARK MPC 都执行的一个步骤来工作,并在单个仪式中执行它。这使得单个 zk-SNARK MPC 更加便宜,并允许它们扩展到实际上无限数量的参与者。
该协议在即将发表的 论文 中进行了描述。它为使用 BLS12-381 椭圆曲线构建的 Jens Groth 的 2016 年配对证明系统 的改编生成参数。安全性证明依赖于在仪式结束时应用随机信标。
贡献
扩展以支持 Ethereum 的 BN256 曲线,并使其更容易更改仪式的大小。此外,现在可以在内存受限的环境中执行证明生成过程。基准大约为 1.3 Gb
的内存和 3 小时
用于我个人的笔记本电脑上 BN256 曲线上的 2^26
的 tau 幂
说明
当一切测试和最终确定后,将发布计划仪式的说明。
在您的笔记本电脑上运行仪式
- 准备
rustup update # tested on rustup 1.17.0
cargo build
- 将上一仪式的
response
文件放在根目录下。 - 要生成
new_challenge
运行
cargo run --release --bin verify_transform_constrained # this will generate new_challenge from response file
- 备份旧文件并替换
challenge
文件
mv challenge challenge_old
mv response response_old
mv new_challenge challenge
- 运行仪式
cargo run --release --bin compute_constrained # generate response file
将输出响应中的哈希值放入私人 gist(例如:https://gist.github.com/skywinder/c35ab03c66c6b200b33ea2f388a6df89)
-
重启笔记本电脑以清理有害废物。
-
保存
response
文件并将其交给下一位参与者。
原始仪式的建议
仪式参与者进行一些随机性样本,执行计算,然后销毁随机性。 只需要一位参与者成功完成即可确保最终参数的安全。 为了确保这种随机性确实被销毁,参与者可以采取各种预防措施
- 将机器放入法拉第笼
- 之后重新启动机器
- 之后重新启动机器并断开RAM
- 之后销毁机器
- 在安全硬件上运行软件
- 不将硬件连接到任何网络
- 使用多台机器,随机选择其中一台的结果来使用
- 使用与我们提供的不同的代码
- 使用安全操作系统
- 使用别人不会想到你使用的操作系统(Rust可以编译成Mac OS X和Windows)
- 使用不寻常的Rust工具链或替代Rust编译器
- 我们想不到的许多其他想法
这完全取决于参与者。一般来说,参与者应警惕旁路攻击,并假设计算完成后RAM中仍存在随机性的残留。
许可证
以下任一许可证下授权:
- Apache许可证2.0版本,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任由您选择。
贡献
除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,如Apache-2.0许可证定义的,应如上双授权,没有任何附加条款或条件。
依赖项
~8.5MB
~152K SLoC