7个版本

使用旧的Rust 2015

0.2.0 2018年9月3日
0.1.7 2017年2月13日
0.1.6 2017年1月24日

#2226密码学 中排名

Download history 22/week @ 2024-04-22 15/week @ 2024-04-29 14/week @ 2024-05-06 24/week @ 2024-05-13 27/week @ 2024-05-20 16/week @ 2024-05-27 21/week @ 2024-06-03 8/week @ 2024-06-10 23/week @ 2024-06-17 15/week @ 2024-06-24 63/week @ 2024-07-01 16/week @ 2024-07-15 12/week @ 2024-07-22 16/week @ 2024-07-29 15/week @ 2024-08-05

59 次每月下载
用于 rust_sample_rtx

MIT/Apache

115KB
2.5K SLoC

Paillier

Build Status Latest version License: MIT/Apache2

Paillier部分同态加密方案的纯Rust库,提供打包编码功能,可以一起加密多个值,还提供与典型用例相关的多个零知识证明。支持多个底层任意精度库,包括RAMPGMP

一些公司投资了该库的开发,包括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当前不支持证明,即无法同时使用功能userampproofs

密钥生成

默认包含密钥生成功能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 许可证定义,您有意提交的任何贡献,均应如上双重授权,不附加任何额外条款或条件。

贡献

多人对图书馆的开发产生了重大影响(按字母顺序排列)

以及一些公司投资了资源

  • Snips 赞助了原始版本的实现
  • KZen networks 赞助了多个零知识证明的扩展

已报告用途

依赖关系

~2.2–4.5MB
~114K SLoC