#pairing #crypto

tbn

将巴雷托-纳赫里曲线与配对密码学相结合

显示软件包…

1 个不稳定版本

使用旧的 Rust 2015

0.4.4 2021 年 3 月 2 日

#67#pairing


用于 23 个软件包中(通过 vapcore-builtin

MIT/Apache

2.5MB
4K SLoC

tbn Crates.io 构建状态

这是一个使用纯 Rust 编写的 配对密码学 库。它使用来自 [BCTV2015] 的巴雷托-纳赫里(BN)曲线构造,提供两个循环群 G1G2,以及高效的双线性配对

e: G1 × G2 → GT

安全警告

此库,如其他实现此构造的配对密码学库,不受侧信道攻击的抵抗。

用法

tbn 软件包添加到 Cargo.toml 的依赖项中...

[dependencies]
tbn = "0.4.2"

...并在您的软件包根目录中添加 extern crate 声明

extern crate tbn;

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公司承诺在crates.io上以MIT/Apache-2.0双许可证维持“tbn”crate。

作者

贡献

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

依赖项