2个版本
0.1.1 | 2023年2月5日 |
---|---|
0.1.0 | 2022年2月2日 |
#1655 in 密码学
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