基于tlock和cryptomator的时间胶囊
本文介绍了基于tlock和Cryptomator的数字化时间胶囊方案。通过tlock实现时间锁定加密,Cryptomator提供零知识加密存储,结合延迟邮件提醒,打造跨越时间的信息封存体验。
前言
“时间胶囊”不是封存过去,而是把现在寄往未来。
有想过给未来的自己留下一份特别的礼物吗?这一份礼物跨越时间,承载着时间的厚重感。那么不妨尝试制作一颗属于自己独特回忆的“时间胶囊”。
常见的时间胶囊形式
- 工业级的时间胶囊
- 盒子型的时间胶囊
- 商业化的时间胶囊(把博物馆级概念给商业化)
- 数字时间胶囊
- …
它们在存储形式和成本控制等方面各有侧重,今天制作的“时间胶囊”主要是以数字化形式开展,即时间胶囊不一定可见,其形式包括但不限于:
- 给未来自己发送邮件
- 云端存储影像与文字
- 区块链
- …
但我所介绍的时间胶囊与之不同:邮件 + 加密存储 + 延迟打开

在介绍这个之前,我需要先补充一些前置知识。
前置知识
tlock
项目介绍
tlock 是 drand 团队开源的一个 时间锁定加密(Timelock Encryption)工具库和命令行工具 。它的核心理念是:
现在就加密,未来才能解密 -- 你可以指定一个未来的时间点(或 round 轮次),只有到达那个时间点之后,数据才能被解密。简单来说,就像把秘密锁进一个「时间保险箱」,设定好时间,到期才能打开 。
简单来说,就像把秘密锁进一个「时间保险箱」,设定好时间,到期才能打开。
核心技术原理
tlock 的安全型建立在四层密码学机制之上:
| tlock 四层安全架构 |
| 第4层: drand 阈值签名网络 (League of Entropy) - 定期生成不可预测的随机数 - BLS 阈值签名,每轮由多个节点协作产生 - 3秒产生一轮签名 |
| 第3层: IBE 身份加密 (基于 Boneh-Franklin 2001方案) - 用未来 round 的签名作为"身份标识" - 只有知道该轮签名的才能解密 |
| 第2层: age 混合加密 - 生成随机 DEK (数据加密密钥) - 用 IBE 只"时间锁定"这个 DEK - 用 DEK + ChaCha20Poly1305 实际加密数据 |
| 第1层: BLS 签名方案 (Boneh-Lynn-Shacham 2003) - G1/G2 椭圆曲线群 - 支持多种签名方案 (ShortSig, Unchained, SigsOnG1) |
通俗的加密解密流程:

drand 网络端点
| 地区 | 端点 |
| 🇺🇸 美国 | https://api.drand.sh/ |
| 🇪🇺 欧洲 | https://api2.drand.sh/ |
| 🌏 亚洲 | https://api3.drand.sh/ |
| 🌐 全球负载均衡 | https://drand.cloudflare.com/ |
⚠️ 目前主网唯一支持时间锁定的链: Chainhash:52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971 (quicknet,3秒/轮,G1签名)
这是一个已准备好投入生产环境且具备高可用性保障的网络。它被 drand 团队认定为完全安全,并由自 2019 年以来一直负责 drand 生产环境运行的同一家联盟 Entropy 运营。
关于更多的数学理论相关的介绍,请参照这篇论文:《tlock: Practical Timelock Encryption from Threshold BLS》
Cryptomator
这个在我之前的博客中已经介绍过了。请参照这篇《使用 Cryptomator:为云存储提供零知识加密》。
使用教程
创建一个文件夹存储你的文字或图片或视频

下载 Cryptomator 保险箱并加密文件
最好是存入一个单独的硬盘或者网盘,我以 iCloud 为例,Cryptomator支持的存储方式很多,按需选取。


之后一直下一步,在设置密码界面,可以通过密码生成器去设置一个自己都无法记住的强密码(这个强密码之后需托管到 drand 网络)。之后点击创建保险库,这样,你的内容将被端到端加密,除了密码所有者,任何人无法查看。

将密码托管到 drand 网络
安装 CLI 工具 tle
# 方式一:Go 安装(推荐)
go install github.com/drand/tlock/cmd/tle@latest
# 方式二:源码编译
git clone https://github.com/drand/tlock
cd tlock
go build cmd/tle/tle.go 短参数 长参数 说明
-e --encrypt 加密模式(默认,不写也生效)
-d --decrypt 解密模式
-n --network drand 网络地址
-c --chain 链哈希值(验证公钥完整性)
-r --round 指定具体的轮次号
-f --force 强制加密到过去的轮次
-D --duration 等待时长(多久后才能解密)
-o --output 输出文件路径
-a --armor PEM 文本格式输出基础加密:
# 语法
tle -D <时间> -o <输出文件> <输入文件>
# 示例:加密文件,10天后才能解密
tle -D 10d -o secret secret.txt基础解密:
# 语法
tle -d -o <输出文件> <加密文件>
# 示例:解密文件
tle -d -o original.txt secret.pem详细见官方 Github 仓库:https://github.com/drand/tlock
加密/解密文件演示
在下载的本地的文件夹以终端的形式打开,举个最简单的例子:
我有一个内容为 Hello world 的 test.txt 文件,我进行加密(-a 为选择以 pem 格式输出,因为方便文本传输、兼容性更好):
# 将 test.txt 文件加密成 .pem 格式的密文,30s后密文才能解密,否则报错
tle -a -e -D 30s -o secret.pem test.txt
# 将 secret.pem 文件进行解密
tle -d secret.pem
如果没有到时间就解锁,会显示 too early to decrypt: expected round 27240614 > 27240610 current round 。
我们将解锁 Cryptomator 的强密码放进 TXT 文本中,进行加密,然后将原来的密码和 TXT 文件全部彻底删除,那么这个“时间胶囊”也就真正封存住,不到指定时间打不开。如果只是存些文本语言的话,tlock 就足够了,就不需要 Cryptomator ,如果涉及到图片视频等,建议结合使用。
设置定时发送邮件用于提醒
选择邮件商比如 QQ 、 Gmail 等等,邮件选择发送时间,随便输入文本,只起到一个提醒即可。到那个时候,你就通过命令输入,得到密码,就可以打开保险箱了(如果怕忘了怎么操作,可以写个简短的教程)。
