尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

tlock进阶技巧:Duration、轮次编号与Armor,6个让时间锁加密更灵活的用法

tlock进阶技巧:Duration、轮次编号与Armor,6个让时间锁加密更灵活的用法 tlock进阶技巧Duration、轮次编号与Armor6个让时间锁加密更灵活的用法【免费下载链接】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/tlocktlock 是一款将「时间锁加密Timelock Encryption」落到实地的 Go 项目配套的tle命令行工具可以让你把文件加密到未来某个时刻才能解开。本文带你掌握 6 个进阶用法Duration 时长、轮次编号、强制加密、Armor 编码、环境变量与元数据查询让时间锁加密更灵活、更可控。时间锁加密的原理tle依赖 drand 阈值随机信标网络每隔固定频率默认网络为 3 秒一轮产生一个不可跳过的轮次签名。只有当网络到达你指定的那一轮时密钥才能被推导出来——因此「提前解密」在数学上不可能。一、用 Duration 灵活控制解锁时刻最常用的是--duration简写-D参数它接受「数字 单位」的形式支持秒、分、时、天、月、年等单位。# 10 天后才能解密 tle -D 10d -o encrypted_file data.txt # 5 秒后解密适合测试 tle -D 5s -o encrypted_file data.txt小技巧单位可以叠加。解析逻辑位于 cmd/tle/commands/encrypt.go 中的parseDurationsAsSeconds函数它会把多个「数字单位」组合累加例如-D 1d12h表示 1 天 12 小时后解锁。但注意同一单位不能重复出现如1d2d会报错drand 网络最短精度是「秒」更小的时间没有意义时间会换算成未来的目标轮次号源码通过network.RoundNumber(decryptionTime)完成映射解密时只需指定文件tle -d -o decrypted.txt encrypted_file二、用轮次编号Round精确指定解锁点如果你已经知道或提前算好drand 网络的目标轮次号可以用--round简写-r直接指定跳过时长换算tle -r 123456 -o encrypted_file data.txt⚠️ 两个注意点Round 和 Duration 互斥二者只能选其一同时传入会被 cmd/tle/commands/commands.go 中的validateFlags拒绝默认不允许加密到过去的轮次——如果指定的轮次号小于当前网络轮次会报round xxx is in the past错误加密时会把轮次号写入密文age stanza 参数中见 tlock_age.go 的Wrap方法解密程序会先检查当前轮次是否已达到该值未达标则返回too early to decrypt。三、用 force 强制加密到过去的轮次有时你可能只是想测试、或者需要向一个历史轮次加密比如复现旧数据。加上--force简写-f即可跳过「轮次不能在过去」的检查tle -f -r 100 -o old_test.txt data.txt实现上很简单flags.Force为 true 时encrypt 流程会跳过对lastestAvailableRound的比较直接调用tlock.Encrypt(dst, src, flags.Round)。 由于目标轮次的签名早已存在这样加密出来的文件可以立刻解密非常适合本地调试。四、用 Armor 输出 PEM 文本格式默认加密产物是二进制文件不方便查看或粘贴。加上--armor简写-a后tle会把密文包装成 PEM 文本age armor 格式tle -a -D 20s -o encrypted_data.PEM data.txt生成的文件可以用文本编辑器直接打开内容形如带-----BEGIN AGE ENCRYPTED FILE-----头尾的标准 PEM 块。✨ 优点方便在邮件、工单、代码仓库中直接粘贴分享与 age 生态的文本密文保持一致的风格解密时不需要再加-a解密逻辑会自动嗅探头部见 tlock.go 中Decrypt对armor.Header的判断两种格式通吃五、用 TLE_ 环境变量省掉重复输入tle的所有命令行参数都可以通过环境变量预先配置统一使用TLE_前缀实现见 cmd/tle/commands/commands.go 中基于envconfig的Parse函数命令行参数会覆盖环境变量export TLE_NETWORKhttps://api.drand.sh/ export TLE_CHAIN52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971 export TLE_ENCRYPTtrue # 之后只需给出时长和文件 tle -D 30d secret.txt -o secret.tle对应关系一览环境变量对应参数说明TLE_NETWORK-ndrand 网络端点TLE_CHAIN-c链哈希chainhashTLE_DURATION-D加密时长TLE_ROUND-r目标轮次号TLE_FORCE-f允许过去轮次TLE_OUTPUT-o输出文件TLE_ARMOR-aPEM 编码这套机制特别适合 CI 脚本或固定测试网场景一次配置处处复用。六、用 metadata 一键查看网络状态加密前先确认目标网络是否在线、当前轮次走到哪了能帮你提前换算「现在加密D 多久合适」tle -m该命令会以 YAML 格式输出四个关键字段实现见 tlock.go 中的Metadata方法chain_hash当前使用的链哈希current网络当前轮次号配合 3 秒一轮的频率可以反推未来任一时刻的轮次public_key网络公钥校验身份用scheme密码学方案名称⚡ 提示查看不同网络的状态时记得带上-n和-c切换端点与链哈希。常见组合速查需求命令最快测试5 秒解锁tle -D 5s -o out data.txt长期封存 文本格式tle -a -D 1y -o out.PEM data.txt指定轮次 允许过去tle -f -r 42 -o out data.txt解密并输出到文件tle -d -o plain.txt out管道组合配合 age 口令cat data.txt \| age -p \| tle -D 30s -o out自 v1.3.0 起解密时还支持自动探测链哈希如果密文携带的 chainhash 与当前默认值不同tle会自动切换并给出警告见 tlock_age.go 中Unwrap的SwitchChainHash逻辑跨网络解密体验更顺滑。小结掌握这 6 个技巧tle就不再只是「加密 等待」的简单工具Duration秒到年自由组合还能叠加单位Round直接锁定轮次精确到每一签force放行历史轮次调试利器ArmorPEM 文本输出分享更方便TLE_ 环境变量脚本化配置一次生效metadata网络状态一目了然时间锁加密的价值在于「不可提前解密」的确定性而 tlock 的灵活参数让你可以把这份确定性精确地编排进任何工作流。动手试试吧【免费下载链接】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),仅供参考
返回列表