7个版本
使用旧的Rust 2015
0.2.0 | 2018年9月3日 |
---|---|
0.1.7 | 2017年2月13日 |
0.1.6 | 2017年1月24日 |
#2226 在 密码学 中排名
59 次每月下载
用于 rust_sample_rtx
115KB
2.5K SLoC
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 License, Version 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT license (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:多方签名
依赖关系
~2.2–4.5MB
~114K SLoC