2个版本

0.1.1 2023年2月5日
0.1.0 2022年2月2日

#1655 in 密码学

MIT许可

18KB
362

bzte

BLS12-381之上使用arkworks实现的Baek-Zhang门限密码系统

为什么使用门限加密?

与使用SSS将单个对称密钥分割开相比,门限加密的优势在于,在SSS结束时,会出现一个易受攻击的秘密密钥,所有各方都可以在协议结束时观察到。然而,使用TPKE方案,合并份额并不会产生任何除了最终解密明文之外的敏感信息。这使得安全地使用相同的密钥份额进行多个消息,只需一个可信设置(或无信任的DKG)。

用法

use bzte::{keygen};

let (pk, sks) = keygen(10, 5);
let m = sha256(b"thats my kung fu"); // only supports messages up to 256 bits!
let c = pk.encrypt(&m).unwrap();
assert!(pk.verify_ciphertext(&c));
let shares: Vec<G1> = sks.iter().map(|sk| sk.decrypt_share(&c).unwrap()).collect();
for (i, share) in shares.iter().enumerate() {
  assert!(pk.verify_share(i, *share, &c));
}

let mut partial_shares: HashMap<usize, G1> = HashMap::new();
for i in 0..5 {
  partial_shares.insert(i, shares[i]);
}
let check = pk.combine_shares(&c, &partial_shares).unwrap();
assert_eq!(check, m);

要序列化/反序列化密钥或密文,分别使用提供的.to_bytes()/.from_bytes()方法。

免责声明

此分发包括加密软件。您目前居住的国家可能对加密软件的进口、拥有、使用和/或重新出口到另一国家有限制。在使用任何加密软件之前,请检查您所在国家的法律、法规和政策,了解有关加密软件的进口、拥有或使用以及重新出口的规定,以确定是否允许。更多信息请访问http://www.wassenaar.org/

依赖关系

~7.5MB
~141K SLoC