1 个不稳定版本
0.1.1 | 2024年3月28日 |
---|
#1823 在 密码学
51KB
641 行
age-plugin-tlock: tlock 插件用于 age 客户端
age-plugin-tlock
是用于 age 客户端(如 age
和 rage
)的插件,它允许文件被加密成由 drand 网络表示的 age 身份。
代码仍然是实验性的。目前只能从源代码安装。
目录
功能
- 在线和离线解密
- age 插件
- 兼容 age 插件 API
- 跨平台(Linux、Windows、macOS)
- 与其他 tlock 实现(Go、JS、Rust)互操作
接下来是什么
- 包发布
- 关于 age 格式的共识
- 更广泛的测试套件
安装
环境 | CLI 命令 |
---|---|
Cargo(Rust 1.74+) | cargoinstall --githttps://github.com/thibmeu/tlock-rs age-plugin-tlock |
阅读 age 安装说明 以安装 age。
用法
您可以使用 --help
选项获取有关命令及其选项的更多信息。
age-plugin-tlock [OPTIONS]
生成接收者和身份
接收者或身份都不是秘密。身份的秘密只在于其在某个时间点后的有用性。
为 fastnet 创建一个身份。
age-plugin-tlock --generate --remote https://api.drand.sh/dbd506d6ef76e5f386f41c651dcb808c5bcbd75471cc4eafa3f4df7ad4e4c493 > fastnet.key
为了方便起见,您还可以创建一个关联的接收者
cat fastnet.key | grep 'recipient' | sed 's/.*\(age1.*\)/\1/' > fastnet.key.pub
定时锁加密
使用 fastnet 公钥加密 Hello age-plugin-tlock!
字符串,将其设置为 30 秒后到期。如果您在解密前等待 30 秒,则消息将使用新的 fastnet 签名解密。
echo "Hello age-plugin-tlock" | ROUND="30s" age -a -R fastnet.key.pub > data.age
age --decrypt -i fastnet.key data.age
Hello age-plugin-tlock
安全考虑
本软件未经审计。请自行决定使用。鉴于这一点,dee 安全性依赖于以下内容
- tlock:基于阈值 BLS 的实用定时锁加密 由 Nicolas Gailly、Kelsey Melissaris 和 Yolan Romailler 撰写,并在 thibmeu/tlock-rs 中实现
- 基于身份的加密 由 Dan Boneh 和 Matthew Franklin 撰写,并在 thibmeu/tlock-rs 中实现
- 为了保持诚实,《熵联盟,
- age 加密协议,以及它在 str4d/rage 中的实现,
常见问题解答
age 格式是什么
要使用 age 工具,age-plugin-tlock
需要接收者和身份双方都提供所有信息。在加密时,它需要一个接收者。在解密时,它需要一个完成 stanza 信息的身份。
此格式是专门定义的,未来可能会发生变化。它遵循两个设计约束。第一个是身份文件需要可传输。第二个是离线优先。
Stanza
tlock <ROUND> <HASH>
<ROUND>
是 drand 信标轮数,<HASH>
是 drand 链的哈希值,十六进制编码,
以纯文本编码。
示例
tlock 4641203 dbd506d6ef76e5f386f41c651dcb808c5bcbd75471cc4eafa3f4df7ad4e4c493
接收者
age1tlock1<HASH><PUBLIC_KEY><GENESIS><PERIOD>
<HASH>
是 drand 链的哈希值,<PUBLIC_KEY>
是 drand 链的公钥,<GENESIS>
是 drand 链的创世时间(以秒为单位),<PERIOD>
是 drand 链轮次之间的时间间隔(以秒为单位),
编码为 bech32 文本格式。
示例
age1tlock1yrda2pkkaamwtuux7swx28wtszx9hj7h23cucn40506d77k5unzfxc9qhp32w5nlaca8xx7tty5q4d4t6ck4czmw5q7ufh0kvyhaljwsruqux92z2sthryp5wh43a3npt7xsmu9ckmww8pvpr4kulr97lwr4ne0xz63al5z5ey5fgpmxmxjmnku3uwmf0ewhp2t4rq0qqlu8ljj7lng8rlmrqvpvft27
<HASH>
是必需的,用于填充 stanza,没有其他内容。 <PUBLIC_KEY>
是 tlock 加密所需的。 <GENESIS>
和 <PERIOD>
用于解析信标轮次信息。轮次在加密时提供。这是在能够多次重用相同的身份(每个 drand 链一个)和拥有更精确的接收者之间的一种权衡,后者将限于轮次和公钥信息。
身份
AGE-PLUGIN-TLOCK-<TYPE><IDENTITY>
<TYPE>
为RAW
的 0 或为HTTP
的 1。它提供了在实现和威胁模型之间升级身份的灵活性,<IDENTITY>
是对应于轮次的信标签名的字节(对于RAW
),如果是HTTP
,则是一个远程 HTTP URL,
编码为 bech32 文本格式。
示例
AGE-PLUGIN-TLOCK-1Q9TXSAR5WPEN5TE0V9CXJTNYWFSKUEPWWD5Z7ERZVS6NQDNYXEJKVDEKV56KVVECXENRGVTRXC6NZERRVGURQWRRX43XXCNYXU6NGDE3VD3NGETPVESNXE35V3NRWCTYX3JNGCE58YEJ74QEJUM
其他实现
在撰写本文时,没有其他将 tlock 作为 age 插件实现的例子。接收者和身份已根据作者认为合理的方式进行专门定义。
许可证
此项目受 MIT 许可协议保护。
贡献
除非您明确声明,否则您有意提交的任何贡献,旨在包含在本作品中,应按上述方式获得 MIT 许可,不附加任何其他条款或条件。
依赖项
~20–32MB
~501K SLoC