#zk-snarks #parameters #mpc #participant #public #curve #ceremony

bin+lib fawkes-crypto-powersoftau

公共参数的公共 zk-SNARK MPC

1 个不稳定版本

0.2.0 2020 年 7 月 31 日

#7#participant

MIT/Apache

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 幂

说明

当一切测试和最终确定后,将发布计划仪式的说明。


在您的笔记本电脑上运行仪式

  1. 准备
rustup update # tested on rustup 1.17.0
cargo build
  1. 将上一仪式的 response 文件放在根目录下。
  2. 要生成 new_challenge 运行
cargo run --release --bin verify_transform_constrained # this will generate new_challenge from response file
  1. 备份旧文件并替换 challenge 文件
mv challenge challenge_old
mv response response_old
mv new_challenge challenge
  1. 运行仪式
cargo run --release --bin compute_constrained # generate response file

将输出响应中的哈希值放入私人 gist(例如:https://gist.github.com/skywinder/c35ab03c66c6b200b33ea2f388a6df89

  1. 重启笔记本电脑以清理有害废物。

  2. 保存 response 文件并将其交给下一位参与者。

原始仪式的建议

仪式参与者进行一些随机性样本,执行计算,然后销毁随机性。 只需要一位参与者成功完成即可确保最终参数的安全。 为了确保这种随机性确实被销毁,参与者可以采取各种预防措施

  • 将机器放入法拉第笼
  • 之后重新启动机器
  • 之后重新启动机器并断开RAM
  • 之后销毁机器
  • 在安全硬件上运行软件
  • 不将硬件连接到任何网络
  • 使用多台机器,随机选择其中一台的结果来使用
  • 使用与我们提供的不同的代码
  • 使用安全操作系统
  • 使用别人不会想到你使用的操作系统(Rust可以编译成Mac OS X和Windows)
  • 使用不寻常的Rust工具链或替代Rust编译器
  • 我们想不到的许多其他想法

这完全取决于参与者。一般来说,参与者应警惕旁路攻击,并假设计算完成后RAM中仍存在随机性的残留。

许可证

以下任一许可证下授权:

任由您选择。

贡献

除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,如Apache-2.0许可证定义的,应如上双授权,没有任何附加条款或条件。

依赖项

~8.5MB
~152K SLoC