#secret-sharing #secret #shamir #galois

nightly app shamir_file_secret_sharing

文件使用下的Shamir秘密共享实现

1 个稳定版本

1.0.0 2022年12月2日

#2088密码学

Apache-2.0

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