#elliptic-curve #zero-knowledge-proofs #general #curv #interface #onboard #security

已删除 curv-embedded

Curv 包含了一个用于添加新的椭圆曲线的极其简单的接口。使用此库进行通用椭圆曲线密码学。

0.1.0 2023年2月7日

#3 in #onboard

MIT 许可证

385KB
9K SLoC

Build Status Latest version Docs License dependency status

Curv

变更

2023年2月1日

secp256k1 包(https://crates.io/crates/secp256k1)的依赖替换为 k256 包(https://crates.io/crates/k256),以便嵌入式使用。尽管此仓库是从 curv-kzen v0.9.0 分支的,但更新的 secp256_k1.rs 也能很好地与 curv-kzen v0.10.0 一起使用。

简介

Curv 包含了一个用于添加新的椭圆曲线的极其简单的接口。使用此库进行通用椭圆曲线密码学。

该库内置了对一些有用的操作/原语的支持,例如可验证的秘密共享、承诺方案、零知识证明以及简单的双方协议,如 ECDH 和掷币。该库提供了序列化/反序列化支持,以便在高级代码中实现网络。

使用方法

要使用 curv 包,请在您的 Cargo.toml 中添加以下内容

[dependencies]
curv-kzen = "0.9"

该包将在 curv 名称下可用,例如

use curv::elliptic::curves::*;

目前支持的椭圆曲线

曲线 底层库 曲线描述
Secp256k1 RustCrypto bitcoin wiki
P-256 RustCrypto NIST.FIPS.186.4
Ed25519 cryptoxide BDLSY11
Ristretto curve25519-dalek ristretto group
BLS12-381 bls12-381 BLS12-381 For The Rest Of Us

安全性

该库于2月19日由 Kudelski security 进行审计。报告可以在 此处 找到。未发现任何关键问题,所有发现的问题都已修复。

代码由一些其他密码学家独立审查。特别感谢来自奥尔胡斯大学的 Claudio Orlandi

总的来说,库的安全性高度依赖于所使用的底层库的安全性。我们选择了作为其他大型项目一部分使用的库,并经过了严格的审计/审查。

该库并非对旁路攻击免疫,但已投入大量努力尝试捕捉尽可能多的此类攻击(见审计报告)。

构建

使用cargo build来构建包括曲线实现、密码原语、BigInt等一切内容。

大整数实现

该库支持几种大整数实现,并且可以轻松地在它们之间切换。您可以通过指定功能来选择您偏好的任何一种。

  • rust-gmp-kzen,使用GMP绑定,需要在机器上安装GMP。默认使用。

  • num-bigint,Rust的大整数纯实现。为了使用它,在Cargo.toml中添加以下内容

    [dependencies.curv-kzen]
    version = "0.9"
    default-features = false
    features = ["num-bigint"]
    

    警告: num-bigint支持是实验性的,不应在生产环境中使用。对于此大整数实现,我们使用了一个不被认为是安全的素数生成器。

示例

该库包含一些基本示例以帮助您开始。要运行它们:cargo run --example EXAMPLE_NAME -- CURVE_NAME 例如:cargo run --example proof_of_knowledge_of_dlog -- secp256k1

文档

要构建文档,请使用

cargo doc
RUSTDOCFLAGS="--html-in-header katex-header.html" cargo doc --no-deps --open

许可协议

Curv是在MIT许可协议下发布的。有关更多信息,请参阅LICENSE

开发过程及联系方式

该库由ZenGo-X维护。非常欢迎贡献!除了GitHub问题和PR之外,您也可以通过邮件联系或加入ZenGo X Telegram进行代码和研究的讨论。

依赖关系

~8.5MB
~159K SLoC