#加密 #零知识证明 #同态 #零知识 #帕利尔 #加密解密

paillier-lsc

用于Paillier部分同态加密方案的效率纯Rust库

2个版本

0.1.3 2022年11月23日
0.1.2 2022年11月17日
0.1.1 2022年11月17日
0.1.0 2022年11月17日

#1990 in 加密学


zk-paillier-lsc中使用

MIT/Apache

74KB
1.5K SLoC

帕利尔

Build Status Latest version Docs License: MIT/Apache2

用于Paillier部分同态加密方案的效率纯Rust库,同时也提供了打包编码以加密多个值以及与典型用例相关的多个零知识证明。支持多个底层任意精度库:GMPnum-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 fork而来,增加了额外的功能。许可协议为以下之一。

您可选择其中之一。

除非您明确声明,否则根据Apache-2.0许可证定义的您有意提交并包含在作品中的任何贡献,都将按照上述方式双重许可,不附加任何额外条款或条件。

贡献者

有几个人对库的开发产生了重大影响(按字母顺序排列)

以及多家公司投入了资源

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

已报告的使用情况

依赖项

~11MB
~205K SLoC