#配对 #加密

bn-plus

将配对密码学与Barreto-Naehrig曲线结合

1个不稳定版本

使用旧的Rust 2015

0.4.4 2018年2月12日

密码学中排名1831

Download history 125/week @ 2023-10-19 151/week @ 2023-10-26 144/week @ 2023-11-02 126/week @ 2023-11-09 341/week @ 2023-11-16 307/week @ 2023-11-23 166/week @ 2023-11-30 187/week @ 2023-12-07 235/week @ 2023-12-14 157/week @ 2023-12-21 147/week @ 2023-12-28 212/week @ 2024-01-04 211/week @ 2024-01-11 219/week @ 2024-01-18 335/week @ 2024-01-25 168/week @ 2024-02-01

每月下载980
23个crate(4个直接)中使用

MIT/Apache

2.5MB
3K SLoC

bn Crates.io 构建状态

这是一个使用纯Rust编写的配对密码学库。它利用了来自[BCTV2015]的Barreto-Naehrig(BN)曲线构造,提供两个循环群 G1G2,并具有高效的双线性配对

e: G1 × G2 → GT

安全警告

这个库,像其他实现此构造的配对密码学库一样,不受侧信道攻击的影响。

用法

bn crate添加到Cargo.toml中的依赖关系...

[dependencies]
bn = "0.4.2"

...并在crate根目录中添加一个extern crate声明

extern crate bn;

API

  • Fr是Fr的一个元素
  • G1是BN曲线E/Fq上的一个点:y^2 = x^3 + b
  • G2是扭曲的BN曲线E'/Fq2上的一个点:y^2 = x^3 + b/xi
  • Gt是通过在G1G2上使用pairing函数获得的群元素(乘法表示)。

示例

Joux密钥协议

在典型的Diffie-Hellman密钥交换中,依赖于ECDLP,需要两轮的三方密钥交换。通过使用双线性配对可以实现单轮协议:给定Alice的公钥 aP1 和Bob的公钥 bP2,Carol可以通过 e(aP1, bP2)c 使用她的私钥 c 计算共享密钥。

(参见examples/joux.rs获取完整示例。)

// Generate private keys
let alice_sk = Fr::random(rng);
let bob_sk = Fr::random(rng);
let carol_sk = Fr::random(rng);

// Generate public keys in G1 and G2
let (alice_pk1, alice_pk2) = (G1::one() * alice_sk, G2::one() * alice_sk);
let (bob_pk1, bob_pk2) = (G1::one() * bob_sk, G2::one() * bob_sk);
let (carol_pk1, carol_pk2) = (G1::one() * carol_sk, G2::one() * carol_sk);

// Each party computes the shared secret
let alice_ss = pairing(bob_pk1, carol_pk2).pow(alice_sk);
let bob_ss = pairing(carol_pk1, alice_pk2).pow(bob_sk);
let carol_ss = pairing(alice_pk1, bob_pk2).pow(carol_sk);

assert!(alice_ss == bob_ss && bob_ss == carol_ss);

许可证

根据您的选择,许可为

版权所有2016 Zcash Electric Coin Company。Zcash公司承诺将“bn”crate在crates.io上维护在MIT/Apache-2.0双重许可证下。

作者

贡献

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

依赖项