3个不稳定版本

使用旧的Rust 2015

0.2.2 2018年5月17日
0.2.1 2018年3月7日
0.2.0 2018年3月7日
0.1.0 2018年2月13日
0.0.2 2016年4月6日

密码学 中排名第1663

Download history 2/week @ 2024-03-12 1/week @ 2024-03-26 12/week @ 2024-04-02

每月下载量107
rustysecrets-cli 中使用

BSD-3-Clause

1MB
3.5K SLoC

Rusty Secrets

Build Status Coverage Status Crates.io LICENSE

Rusty Secrets是一个阈值Shamir的秘密共享方案的实现。

文档(最新版本)
文档(master分支)

设计目标

此库的主要用途是将任意长度的秘密分成 n 个不同的份额,并需要 k-out-of-n 份额来恢复它。假设经销商是诚实的(并且有能力的)。我们进一步假设我们的对手最多只能破坏 k-1 份额。份额保持离线状态。

此库的一个典型用例是将加密密钥分割成类似TrueCrypt的卷。

实现

份额的结构

  2-1-LiTyeXwEP71IUA
  ^ ^ ^^^^^^^^^^^^^^
  K N        D        

份额由三个部分组成,由破折号分隔:K-N-D。

  • K指定恢复秘密所需的份额数量。
  • N是份额的标识符,介于1和 n 之间,其中 n 是生成的总份额数量。
  • D部分是包含关于份额信息的 ShareData protobuf的Base64编码,如果签名,还包括签名。

签名

常规Shamir的秘密共享存在一些问题,我们想要解决这些问题:

  • 一个份额可能被损坏或输入错误。
  • 一个恶意的份额持有者可以通过修改他的份额来修改将被恢复的秘密。
  • 一个用户有来自不同秘密份额的多个份额,但他不知道哪个属于特定的实例。

所有这些问题都会导致输出损坏的秘密,而程序甚至不知道秘密被损坏,无法提供任何可操作的信息。

我们通过经销商签署股份并将公钥编码到每个股份中解决这个问题。在生成股份后,经销商删除了用于签署股份的秘密和私钥。当恢复秘密时,程序会验证公钥,如果某些股份没有相同的公钥或该公钥的有效签名,将通过一条有帮助的消息将问题通知用户。

签署股份是可选的,签署股份的有用性取决于用例。由于我们使用基于哈希的签名(使用SHA-512 Merkle签名),使用签名存在很大的开销。

错误报告

请将错误报告为拉取请求或在问题跟踪器中报告。 RustySecrets 具有完整的漏洞披露策略。 请勿尝试将任何安全漏洞私下报告给任何人。

许可

LICENSE

词汇

  • 经销商:将从主秘密进行密钥分割的实体
  • 股份:分发出去的秘密的一部分

致谢

Rusty Secrets是从sellibitze的secretshare分支出来的。

依赖关系

~7–17MB
~313K SLoC