6个版本 (3个重大更新)
0.4.0 | 2024年7月6日 |
---|---|
0.3.2 | 2024年5月28日 |
0.3.1 | 2024年1月31日 |
0.2.0 | 2023年12月27日 |
0.1.0 | 2023年11月16日 |
#864 在 密码学
每月119次下载
395KB
6.5K SLoC
Rust实现负债证明协议
许可协议:MIT.
关于此仓库
此仓库是DAPOL+协议的Rust实现,该协议在"广义负债证明"ACM CCS 2021论文中被引入,由Yan Ji和Konstantinos Chalkias提出(可在此处找到)。
DAPOL+(分布式审计负债证明)是一个围绕Merkle求和树的协议,允许实体以维护数据隐私和可验证性的方式对其负债进行加密提交。此协议的一些应用示例:
- 中心化加密货币交易所使用DAPOL+提交其欠用户的数字资产余额,用户可以验证其余额是否正确表示在树中
- 医院提交其COVID病例数,患者可以检查其病例是否被正确记录
此仓库是更大规模的储备证明项目的一部分。有关负债证明的更多信息,请参阅此博客。有关储备证明项目的整体信息,请参阅此顶级文档。
如果您想联系所有者以获取有关如何将此协议集成到您的系统中的建议,请在此联系我们。
待完成事项
此仓库仍在开发中,但目前可用于使用。截至2024年5月,代码尚未经过审计,因此不建议在生产环境中使用。审计进度可在此处跟踪。
待完成的任务
- 编写规范:https://github.com/silversixpence-crypto/dapol/issues/17
- 支持确定性映射SMT累加器类型:https://github.com/silversixpence-crypto/dapol/issues/9
- 解决依赖项的版本问题:https://github.com/silversixpence-crypto/dapol/issues/11
- 允许树可更新:https://github.com/silversixpence-crypto/dapol/issues/109
- 完成集成测试:https://github.com/silversixpence-crypto/dapol/issues/42
- 使用数据库作为后端存储系统(而不是内存):https://github.com/silversixpence-crypto/dapol/issues/44
如何使用此代码
存在Rust API和CLI。详细信息请参阅下面的部分。
Rust API
API具有以下功能
- 使用构建模式或配置文件构建树
- 从实体ID列表生成包含证明(需要树)
- 使用根哈希验证包含证明(无需树)
CLI
使用cargo安装
cargo install dapol
您可以像这样调用CLI
dapol help
CLI提供3个主要操作:树构建、证明生成和证明验证。所有选项都可以使用
dapol build-tree help
dapol gen-proofs help
dapol verify-proof help
树构建
树构建可以通过以下方式完成
- 从配置文件(见dapol_config_example.toml)
- 从CLI参数
- 通过反序列化已构建的树
使用配置文件构建树(完整日志详细程度)
dapol -vvv build-tree config-file ./examples/dapol_config_example.toml
添加序列化
dapol -vvv build-tree config-file ./examples/dapol_config_example.toml --serialize .
从文件反序列化树
dapol -vvv build-tree deserialize <file>
生成证明(证明将保存在./inclusion_proofs/
目录中)
dapol -vvv build-tree config-file ./examples/dapol_config_example.toml --gen-proofs ./examples/entities_example.csv
使用CLI参数构建树,而不是配置文件
# this will generate 1000 random entities
dapol -vvv build-tree new --accumulator ndm-smt --height 16 --random-entities 1000 --secrets-file ./examples/dapol_secrets_example.toml
证明生成
如上所示,证明生成可以通过树构建命令完成,也可以通过其自己的命令完成,该命令提供了更多关于如何生成证明的选项。
dapol -vvv gen-proofs --entity-ids ./examples/entities_example.csv --tree-file <serialized_tree_file>
echo "[email protected]" | dapol -vvv gen-proofs --tree-file examples/my_serialized_tree_for_testing.dapoltree --entitiy-ids -
证明生成命令仅提供1种方式注入树(反序列化),而树构建提供了不同的选项。
证明验证
dapol -vvv verify-proof --file-path <inclusion_proof_file> --root-hash <hash>
当树构建或反序列化时,根哈希在info级别输出。
开发
要访问本地副本的CLI,您可以执行以下操作
cargo build --release
./target/release/dapol help
要运行文档、单元和集成测试,您可以执行
cargo test
运行模糊单元测试
遵循Rust Fuzz Book中的步骤开始。基本上
# The cargo-fuzz / libfuzzer duo is used
cargo install cargo-fuzz
# Need nightly for cargo-fuzz
rustup default nightly
# Run the max_nodes_to_store block, and don't do more than 300k runs.
cargo fuzz run max_nodes_to_store -- -runs=300000
基准测试
要运行基准测试,首先克隆存储库,然后运行
# Run the benchmarks written in the Criterion framework.
cargo bench --bench criterion_benches
# Run the benchmarks written without a framework.
cargo bench --bench manual_benches
# available env vars (with their default values):
MIN_TOTAL_THREAD_COUNT=0
MIN_ENTITIES=0
MAX_ENTITIES=250000000
MIN_HEIGHT=2
MAX_HEIGHT=64
LOG_VERBOSITY=none # supports error, warn, info, debug
benches使用一系列元组作为输入
benches分为两部分:Criterion(用于小型benches)和手动(用于大型benches)。某些$n$的值会导致benches运行时间非常长(长达一小时),因此使用Criterion(它需要每个bench至少10个样本)会使事情变得太慢。建议对于$n<1000000$运行Criterion benches,否则运行手动benches。
如果您在新的Linux机器上,在构建benches时可能会遇到错误。如果jemalloc-sys包构建失败,那么这个可能会有所帮助。
依赖关系
~16–25MB
~326K SLoC