#加密 #同态 #Paillier #加密解密 #数学

paillier-common

由 rust-bigint 提供的大整数 Paillier 算法特性

3 个不稳定版本

0.2.0 2021年9月16日
0.1.1 2020年9月25日
0.1.0 2020年9月22日

#438加密学

Download history 20/week @ 2024-03-12 8/week @ 2024-03-19 30/week @ 2024-03-26 64/week @ 2024-04-02 9/week @ 2024-04-09 5/week @ 2024-04-16 10/week @ 2024-04-23 5/week @ 2024-04-30 11/week @ 2024-05-07 10/week @ 2024-05-14 20/week @ 2024-05-21 9/week @ 2024-05-28 11/week @ 2024-06-04 14/week @ 2024-06-11 17/week @ 2024-06-18 7/week @ 2024-06-25

每月51次下载
用于 5 个 crate(通过 nash-mpc

MIT 许可证

73KB
1.5K SLoC

注意:Nash 不是此仓库的原始创建者。多个组织已经进行了分支。我们的分支提供了在任意大整数表示上工作的抽象。

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 赞助了许多零知识证明的扩展

已报告的使用

依赖关系

~1.9–3MB
~59K SLoC