3 个不稳定版本
0.2.0 | 2021年9月16日 |
---|---|
0.1.1 | 2020年9月25日 |
0.1.0 | 2020年9月22日 |
#438 在 加密学
每月51次下载
用于 5 个 crate(通过 nash-mpc)
73KB
1.5K SLoC
注意:Nash 不是此仓库的原始创建者。多个组织已经进行了分支。我们的分支提供了在任意大整数表示上工作的抽象。
Paillier
Paillier 部分同态加密方案的纯 Rust 库,提供加密多个值的打包编码以及与典型用例相关的多个零知识证明。支持多个底层任意精度库,包括 RAMP 和 GMP。
一些公司已经投资于这个库的开发,包括 Snips,它在他们的隐私保护分析系统中实现了 原始版本,以及 KZen networks,它贡献了许多零知识证明的实现。有关更多详细信息,请参阅下面的 贡献。
重要:虽然我们已经遵循了有关方案本身的建议,但本库的某些部分尚未针对非加密攻击(如旁路攻击)进行加固。
extern crate paillier;
use paillier::*;
fn main() {
// generate a fresh keypair and extract encryption and decryption keys
let (ek, dk) = Paillier::keypair().keys();
// encrypt four values
let c1 = Paillier::encrypt(&ek, 10);
let c2 = Paillier::encrypt(&ek, 20);
let c3 = Paillier::encrypt(&ek, 30);
let c4 = Paillier::encrypt(&ek, 40);
// add all of them together
let c = Paillier::add(&ek,
&Paillier::add(&ek, &c1, &c2),
&Paillier::add(&ek, &c3, &c4)
);
// multiply the sum by 2
let d = Paillier::mul(&ek, &c, 2);
// decrypt final result
let m: u64 = Paillier::decrypt(&dk, &d);
println!("decrypted total sum is {}", m);
}
安装
一些功能是可选的,但目前默认包含。有关更多详细信息,请参阅下面的 功能。请注意,目前需要 nightly 工具链来构建库。
使用 cargo
[dependencies]
paillier = { version="0.2" }
从源代码
git clone https://github.com/mortendahl/rust-paillier
cd rust-paillier
cargo build --release
功能
该库支持以下功能。默认编译相当于
cargo build --release --no-default-features --features "usegmp keygen proofs"
使用 GMP 并包含密钥生成和零知识证明。
底层算术
可以使用功能 usegmp
(默认)和 useramp
改变底层算术库的选择。GMP 通常提供 略好的性能,但在某些平台上或某些应用中可能不可用。请注意,useramp
目前 不支持 证明,即不能同时使用功能 useramp
和 proofs
。
密钥生成
默认包含密钥生成功能 keygen
,但如果不需要,可以安全地排除以避免额外的依赖关系。
extern crate paillier;
use paillier::*;
fn main() {
// generate a fresh keypair and extract encryption and decryption keys
let (ek, dk) = Paillier::keypair().keys();
...
}
零知识证明
特性 proofs
包含与 Paillier 加密典型使用相关的各种零知识证明。默认启用,但如果不需要,可以安全地排除。
基准测试
包含几个基准测试,测试底层算术库以及方案的运算。所有测试都可以使用
cargo bench
和以下内容一起运行:
许可协议
从 snipsco/rust-paillier
衍生,并增加了额外功能。许可协议为以下之一:
- Apache 许可协议,版本 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
除非您明确声明,否则您提交的任何有意包含在作品中的贡献(根据 Apache-2.0 许可协议定义),均应按照上述双重许可协议进行,不附加任何额外条款或条件。
贡献者
多位人士对该库的开发产生了重大影响(按字母顺序排列)
- Gary Benattar(KZen networks)
- Mario Cornejo(在 Snips 任职期间)
- Mathieu Poumeyrol(Snips)
- Omer Shlomovits(KZen networks)
以及多家公司投入了资源
- Snips 赞助了原始版本的实现
- KZen networks 赞助了许多零知识证明的扩展
已报告的使用
- Snips:隐私保护分析
- KZen networks:多方签名
依赖关系
~1.9–3MB
~59K SLoC