tle命令行完整参考:tlock时间锁加密/解密的10个参数一网打尽
【免费下载链接】tlockTimelock Encryption made practical. The Go `tlock` library and the `tle` cmd line tool home to encrypt towards the future.项目地址: https://gitcode.com/gh_mirrors/tl/tlock
tlock 是一个 Go 语言实现的**时间锁加密(Timelock Encryption)**库,配套的tle命令行工具让你可以把文件"加密到未来"——指定的时间点之前,任何人都无法解密。本文带你快速掌握 tle 的全部 10 个命令行参数,从时间锁加密到解密,一篇就够。
⏳ tlock 时间锁加密是什么?
传统加密靠密码,丢了密码就废了;而 tlock 把"时间"变成了钥匙:
- 加密时指定一个未来时刻(比如 10 天后)
- 解密依赖 drand 阈值网络按固定频率广播的"轮次"随机数
- 网络还没走到那一轮时,解密会直接报错
too early to decrypt
相关源码可参见 tlock.go 中的Encrypt/Decrypt核心 API。
🚀 30 秒安装 tle
纯 Go 编写、无需 CGO,两种方式任选:
# 方式一:直接安装最新版 go install github.com/drand/tlock/cmd/tle@latest# 方式二:克隆源码本地构建 git clone https://gitcode.com/gh_mirrors/tl/tlock go build cmd/tle/tle.go📋 tle 参数总览表
所有参数定义在 commands.go,支持短格式和长格式,也可通过TLE_前缀的环境变量设置(命令行优先):
| # | 参数 | 长格式 | 作用 | 适用操作 |
|---|---|---|---|---|
| 1 | -e | --encrypt | 加密输入到输出(省略时默认) | 加密 |
| 2 | -d | --decrypt | 解密输入到输出 | 解密 |
| 3 | -D | --duration | 指定多久后可解密,如10d | 加密 |
| 4 | -r | --round | 指定具体轮次号,与-D互斥 | 加密 |
| 5 | -f | --force | 强制允许加密到过去的轮次 | 加密 |
| 6 | -n | --network | drand API 端点,默认主网https://api.drand.sh/ | 全部 |
| 7 | -c | --chain | 使用的链(链名或链哈希),默认 quicknet | 全部 |
| 8 | -o | --output | 结果写入的文件路径,默认输出到终端 | 全部 |
| 9 | -a | --armor | 输出 PEM(age 格式)编码的密文 | 加密 |
| 10 | -m | --metadata | 以 YAML 显示 drand 网络元数据 | 独立 |
用法模板:
tle [--encrypt] (-r round | -D duration) [-a] [-o OUTPUT] [INPUT] tle --decrypt [-o OUTPUT] [INPUT] tle --metadata⚙️ 逐参数详解
1️⃣-e/--encrypt:时间锁加密
加密是默认行为,通常可以省略。加密逻辑(含 PEM 封装与轮次校验)在 encrypt.go:
# 将 data.txt 加密,10 天后才能解密 tle -e -D 10d -o encrypted_file data.txt2️⃣-d/--decrypt:时间锁解密
自 v1.3.0 起,解密会自动识别密文里记录的链哈希和网络,多数情况只需一个参数:
# 最简解密,结果打印到终端 tle -d encrypted_file # 指定输出文件(文件已存在会被覆盖) tle -d -o decrypted.txt encrypted_file解密时不需要也不允许再带-D、-r、-a。未到时间会收到too early to decrypt提示。
3️⃣-D/--duration:指定解锁时长(最常用)
格式为"数字+单位",支持单位:s(秒)、m(分)、h(时)、d(天)、w(周)、M(月)、y(年),最小粒度为秒。解析规则见 encrypt.go:
# 30 分钟后解锁 tle -D 30m -o locked.txt data.txt # 一年后解锁 tle -D 1y -o timecapsule.tle secret.txt4️⃣-r/--round:指定具体轮次
如果你已经算好了目标轮次号,可以直接指定。轮次到达前无法解密,且默认不能指向过去的轮次(除非加-f)。与-D二选一,同时使用会报错:
# 加密到第 123456 轮 tle -r 123456 -o encrypted_data data.txt5️⃣-f/--force:强制加密到过去的轮次
正常情况下 tle 会拒绝加密到已过去的轮次。加-f可跳过该校验,方便复现或测试场景:
tle -r 100 -f -o past_data data.txt6️⃣-n/--network:指定 drand 网络端点
默认使用主网https://api.drand.sh/(生产级、高可用)。测试也可使用 testnet 端点,如https://pl-us.testnet.drand.sh/。注意:测试网仅供测试,不要存放真实机密数据。
tle -n="https://pl-us.testnet.drand.sh/" -c="7672797f548f3f4748ac4bf3352fc6c6b6468c9ad40ad456a397545c6e2df5bf" -D 5s -o enc data.txt7️⃣-c/--chain:指定链(链名或链哈希)
默认是主网 quicknet 链。建议直接写链哈希而非链名,可确保公钥完整性。当网络端点非默认而链哈希仍是默认值时,tle 会在终端提醒你可能需要同时指定-c(校验逻辑见 commands.go)。
# 使用 EU 中继 + quicknet 链哈希 tle -n="https://api2.drand.sh/" -c="52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971" -D 10s -o enc data.txt8️⃣-o/--output:指定输出文件
不指定时结果打印到标准输出(stdout);指定后写入该路径,同名文件会被覆盖。输入侧类似:不写输入文件时从 stdin 读取,也可用-表示标准输入。输入/输出的处理见 tle.go。
# 管道流式加密 cat data.txt | tle -D 1h -o one_hour.tle9️⃣-a/--armor:输出 PEM 格式密文
将密文封装为可读的 age/PEM 编码格式(以----AGE-ENCRYPTED----开头),便于文本传输。解密 armored 文件时无需再加-a,会自动识别:
tle -a -D 20s -o encrypted_data.PEM data.txt🔟-m/--metadata:查看网络元数据
独立操作,以 YAML 格式输出当前网络的链哈希、最新轮次、公钥和加密方案,适合连通性自检:
tle -m🧪 一条命令体验完整流程
用测试网跑一个 5 秒解锁的完整示例(加密 → 等待 → 解密):
# 1. 加密:5 秒后可解密 tle -n="https://pl-us.testnet.drand.sh/" \ -c="7672797f548f3f4748ac4bf3352fc6c6b6468c9ad40ad456a397545c6e2df5bf" \ -D 5s -o encrypted_data data.txt # 2. 立刻解密会失败:too early to decrypt tle -d encrypted_data # 3. 5 秒后再解密即可成功 sleep 5 tle -d -o decrypted_data encrypted_data💡 进阶技巧:叠加密码加密(混合加密)
推荐做法是在时间锁之外再套一层 age 口令加密,形成"口令 + 时间"双重保险(原理是把整段密文当作新数据再做一次时间锁加密):
# 加密:先口令加密,再时间锁 10 天 cat data.txt | age -p | tle -D 10d -o encrypted_data # 解密:先解开时间锁,再解口令 tle -d encrypted_data | age -d -o data.txt同样的思路也可以叠加 PGP 或其他加密工具。
⚠️ 参数组合规则速查(避坑清单)
这些规则由 validateFlags 强制校验,测试用例见 flags_test.go:
- ✅
-e、-d、-m三者有且只能出现一个 - ✅ 加密必须提供
-D或-r其中之一,两者不能同时出现 - ✅
-d解密时不能搭配-D、-r、-a - ✅ 指向过去轮次需加
-f,否则报round N is in the past - ✅ 环境变量可用
TLE_NETWORK、TLE_CHAIN、TLE_DURATION、TLE_ROUND、TLE_OUTPUT、TLE_ARMOR等,命令行参数优先级更高
📚 延伸阅读
| 资料 | 说明 |
|---|---|
| README.md | 官方说明:安装、用法、安全说明 |
| cmd/tle/tle.go | 命令入口:输入/输出文件处理 |
| cmd/tle/commands/commands.go | 10 个参数的定义与校验逻辑 |
| cmd/tle/commands/encrypt.go | 时长解析与加密执行流程 |
| tlock.go | Go 库 API:Encrypt / Decrypt / Metadata |
| networks/http/ | 与 drand 网络通信的实现 |
🔒 安全提示:正式用途请默认使用主网 quicknet 链;测试网(testnet)不安全,仅用于学习测试。更多安全细节可参考 SECURITY.md。
【免费下载链接】tlockTimelock Encryption made practical. The Go `tlock` library and the `tle` cmd line tool home to encrypt towards the future.项目地址: https://gitcode.com/gh_mirrors/tl/tlock
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考