#secret-sharing #shared-secret #asmuth-bloom

bin+lib asmuthbloomsecretsharing

基于中国剩余定理的Asmuth Bloom秘密共享算法

3 个版本

使用旧的 Rust 2015

0.2.2 2017年9月29日
0.2.1 2017年9月28日
0.2.0 2017年9月28日

#16 in #shared-secret

MIT/Apache

31KB
683

Asmuth-Bloom 秘密共享

Build Status

Asmuth-Bloom 算法在 Rust 中实现。

这是我学习时的练习,不能保证绝对无误。如果您打算将其用于项目,建议您审查代码(或使用一些经过验证的Shamir秘密共享库,因为Asmuth Bloom相对较难理解——但理论上是可行的)。

如何使用

// Secret is max. 50 bits - this information is basically visible in shared secret, 
// so normaly use bigger number to increase search space for brute force attacks
// 5 shares total, 3 minimum to recover secret (threshold)
let mut ab = AsmuthBloomShare::new(50, 5, 3, 1e-9);
let mut share = ab.create_share(b"ABCD").unwrap();
// Again threshold is needed to check if we have enough shares
let abr = AsmuthBloomRecover::new(3);
// remove 2 to leave 3
share.shares.remove(1);
share.shares.remove(2);
let s = abr.recover_secret(&share).unwrap();
assert_eq!(&s, b"ABCD");

API 文档

命令行工具

还有一个命令行工具 asmuth_bloom_secret_sharing。使用 cargo build --release 构建发布版本,然后您可以进行测试

cargo build --release
pgm=target/release/asmuth_bloom_secret_sharing
$pgm  generate  -n 10 -t 3 my_secret_password | head -3 | $pgm recover -t 3

此命令创建10个共享秘密,然后将它们限制为只有3个(阈值),然后恢复原始秘密。

generate 子命令的输出如下

2011db:40112b:cevret0vv791j15em18gquca698poc1qhdk
2011db:401139:75586ennsi1vegmf0tc9qpmbpucnfvnq7jh
2011db:40113b:28kvq29nue0ttaoq7g992lj1fdcc38oeo9io
2011db:40117p:2kicmllmgao0jdj4hefdkddogtguceij5bgk
2011db:40119t:2jeoqmicq08m5knnnas4kqq0gn9nqr078nhp
2011db:4011ch:1vf5q51nmqfvr41ob98opv27a43tuje936hc

每行是一个共享秘密。

依赖关系

~1.2–1.6MB
~20K SLoC