1 个稳定版本
1.0.0 | 2022年12月2日 |
---|
#2088 在 密码学 中
76KB
1K SLoC
(C) 2022 Benoît Mortgat
shamir_secret_sharing - 用于文件使用下的Shamir秘密共享的Rust实现。
该程序已在GNU/Linux和Windows上进行了测试。
用法
创建Shamir秘密共享:shamir_secret_sharing share <secret_file> <share_count>
其中:* <secret_file> : 要转换为Shamir共享的敏感文件 * <share_count> : 要创建的共享数量(2到255) * : 重建秘密文件所需的最低共享数量。
从共享中恢复秘密:shamir_secret_sharing recover <recovered_file> ...
示例
您需要一个nightly rust工具链来构建。这个crate在编译时构建了大量的常量查找表。
为了使用此文件(使用bash shell的示例命令行)
此示例将创建5个共享,恢复阈值为3个共享。
构建项目
$ cargo +nightly build --release
制作共享
$ cargo +nightly run --release -- share README.txt 5 3
使用随机选择的3个共享重建原始文件
$ cargo +nightly run --release -- recover README.txt{.out,_001,_004,_005}
比较原始版本和恢复版本:相同
$ diff README.txt{,.out}
安装
您可以使用:$ cargo +nightly install
--git https://github.com/salsifis/shamir_secret_sharing
--branch main
shamir_secret_sharing
常见问题解答
问题:共享文件格式是什么?答:文件格式由以下组成
- 38字节头
- 16字节具有固定UUID,用于标识文件格式
- 4字节文件格式版本(目前为1)
- 16字节具有标识一组共享的UUID
- 1字节存储值
- 1字节存储特定于共享的值。
- 内容字节(与秘密文件相同的字节长度)。
问题:这里使用哪些数学对象?答:使用的Galois域是GF(256),使用x^8 + x^7 + x^6 + x^3 + x^2 + x + 1作为乘法目的的不可约多项式。可以在源代码中找到合适的不可约多项式的列表。
问:是否存在安全漏洞?答:- 在伽罗瓦域中的操作使用查找表。因此,它们可能不会以恒定时间运行。在生成秘密份额时,请确保在不受时间攻击控制的环境中运行此程序。
- 这使用thread_rng()生成随机多项式。如果thread_rng()的非可预测性假设在未来被打破,那么一个份额就足以恢复秘密。
- 在使用Shamir秘密共享时可能存在漏洞。您应定期审计您的共享和恢复敏感数据的协议。
RUST
源代码通过了cargo clippy检查,并使用cargo fmt自动格式化。
源代码包括
- 测试(用于与cargo test一起使用)
- 基准测试(用于与cargo bench一起使用)
- Rust文档(用于与cargo doc或cargo rustdoc一起使用)
依赖项
~4MB
~74K SLoC