7个版本

0.2.0 2024年6月14日
0.1.0 2023年8月13日
0.0.0 2023年8月6日

命令行工具 中排名 #553

Download history 1/week @ 2024-06-06 130/week @ 2024-06-13 7/week @ 2024-06-20 51/week @ 2024-07-25 14/week @ 2024-08-01

每月下载量 65

MIT 许可证

59KB
1.5K SLoC

Rust 739 SLoC // 0.0% comments BASH 303 SLoC PowerShell 121 SLoC Elvish 106 SLoC

agree

dependency status
agree 是一个CLI工具,可以通过 Shamirs Secret Sharing 简单地应用多密钥转接安全。

项目状态

agree不稳定 的。
版本语义: ^([0-9]+\.[0-9]+\.[0-9]+)(-(alpha|beta)\.[0-9]+)?$.

向后兼容性

在一个主要版本内(从第一个稳定版本v1.0开始),将按照语义版本化标准提供完全的向后兼容性。请注意,为了保持开发灵活性,新主要版本可能无法与旧格式/版本存档兼容。请使用并安装相应的版本以使用这些。可以使用 info 命令检查存档修订版(及其相关的程序版本),前提是你使用的版本与创建存档时使用的版本相同或更高。
注意:在第一个主要版本发布(v1)之前,向后兼容性仅保证在同一次要版本中。

示例

将秘密分割成 n 份额(交互式)

要将秘密(文件)分割成份额,执行以下示例之一。

  • 数据在文件中(Cargo.toml
    agree split -i -s Cargo.toml
  • 数据由内联shell脚本生成并写入 STDOUT(此方法使用进程替换)
    同意分割-i-s<(printf"秘密")

此命令是交互式的,会提示用户提供数据,例如共享名称、文件路径和可选密码以加密共享数据。

n 个份额中恢复秘密(交互式)

在以下示例中,秘密被分割成2个份额。我们需要提供正好两个份额来恢复秘密,并将其写入 STDOUT
此命令是交互式的,因为它可能会提示输入份额密码,如果份额数据是加密的。

agree restore -i -s ./share1.file -s ./share2.file

请注意,如果任何密码被加密,并且未提供 -i 标志,则命令执行将失败,因为在非交互式模式下无法提示用户输入密码。

将秘密分割成 n 个份额(通过蓝图)

以下示例将秘密分割成三个份额,恢复阈值为两个。假设文件名为 blueprint.yaml,我们可以使用以下命令

agree split -s Cargo.toml -b blueprint.yaml
version: 0.1
threshold: 2
generate:
  - path: ./test/alice.share
  - path: ./test/bob.share
    name: bob
    encrypt: !plain example-bob
    info: true
    comment: example for bob
  - path: ./test/charlie.share
    name: charlie
    encrypt: !shell printf example-charlie

同样,可以使用交互模式达到相同的结果

agree split -i -s Cargo.toml

份额组成和版本

关于良好使用的说明

如果您使用此软件生成重要或包含您真正希望能够恢复的数据的存档,您不应仅依赖于GitHub或crates.io的持久性。强烈建议您分叉此软件的版本或将二进制文件与份额存储在一起。这样,即使生态系统被破坏,软件不再维护或分发,或者类似情况下,只要份额可以使用(/ 使用正确的密码解密),您仍然可以访问您的数据。
对于重要信息,您应始终有应急计划,并且永远不要依赖单点故障。

v0.2

v0.2 引入了一个带有版本号的 JSON 格式的存档。此存档包含以下信息

  • $.version:用于创建存档的CLI版本($major.$minor 格式)
  • $.uid:此存档的唯一ID。
  • $.pid:此存档的进程ID(用于确保只能一起使用一起创建的存档)
  • $.data:使用 base64 编码的份额数据
/// |index  |usage|
/// |-------|-----|
/// |0 - 15 |salt |
/// |16 - 39|nonce|
/// |40 - 55|mac  |
/// |56 -   |data |

数据密码通过 argon2 哈希。哈希密码与加密数据一起存储,以便在解密数据时轻松识别错误的密码。份额现在还包含一个校验和,以确保恢复的秘密与原始秘密匹配。

v0.1

字节 [0..36) 保留用于存档版本ID。
在以下示意图中,仅使用索引 [36..] 的数据,并将其左移到索引 0 以便于使用。

1f2c6a6d-f711-4378-97b9-5f9e2f9f4271kldmf209fm0f944fwef98syf23f9h2fneuf2efhux...
^     --  -- VERSION ID --  --     ^ DATA =>

v0.1 是一个yaml base64编码的YAML文件。份额信息可以以纯文本形式存储,也可以用密码保护。份额数据在YAML字段中存储时总是base64编码的。
如果使用密码加密,则使用以下属性的对称加密算法(来自 crate simplecrypt v 1.0.2

/// |index  |usage|
/// |-------|-----|
/// |0 - 15 |salt |
/// |16 - 39|nonce|
/// |40 - 55|mac  |
/// |56 -   |data |

数据密码通过 argon2 进行散列。散列后的密码与加密数据一起存储,以便在解密数据时轻松识别错误的密码。

依赖项

~28–38MB
~361K SLoC