4次发布
0.4.3 | 2022年12月26日 |
---|---|
0.4.2 | 2021年10月19日 |
0.4.1 | 2021年10月5日 |
0.4.0 | 2021年6月15日 |
#1247 in 密码学
4,657 monthly downloads
用于 6 个crate(4 个直接)
71KB
1.5K SLoC
Paillier
适用于Paillier部分同态加密方案的纯Rust库,同时提供打包编码功能,以便一起加密多个值,以及与典型用例相关的多个零知识证明。支持多个底层任意精度库: GMP 和 num-bigint。
一些公司已经投资资源开发了这个库,包括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);
}
安装
[dependencies.paillier]
package = "kzen-paillier"
version = "0.2"
底层算术
可以使用功能 curv/rust-gmp-kzen
(默认)和 curv/num-bigint
来更改底层算术库的选择。GMP通常提供更好的性能,但需要在系统上安装GMP共享库。《nim-bigint》是纯Rust实现的大整数,不需要任何外部依赖。
选择算术实现之一只会影响性能。所有功能保持不变。
为了在 num-bigint
上构建,请将以下内容放入Cargo.toml
[dependencies.paillier]
package = "kzen-paillier"
version = "0.2"
default-features = false
features = ["curv/num-bigint"]
使用
密钥生成
默认包含密钥生成功能 keygen
,但如果不需要,可以安全地排除以避免额外的依赖关系。
extern crate paillier;
use paillier::*;
fn main() {
// generate a fresh keypair and extract encryption and decryption keys
let (ek, dk) = Paillier::keypair().keys();
...
}
基准测试
包含几个基准测试,测试底层算术库以及方案的运算。所有测试都可以使用以下方式运行
cargo bench
包括几个算术库和密钥生成,如上所述。
许可证
基于 snipsco/rust-paillier
开发,增加了额外功能。许可协议为以下之一:
- Apache License, Version 2.0 (LICENSE-APACHE 或 http://www.apache.org/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: 多方签名
依赖
~16MB
~250K SLoC