← 返回文章列表

基于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)

通俗的加密解密流程:

https://mermaid.ink/img/pako:eNqdVF1P21YY_itHB1VttZDZOf7WhESgF9OkXUy92rILJz4maE6MTKKOUaTCSsO6kgTISGFoha2wbi2EdROo6Rr-C8pxkrv9hB372A7ucjER5cLv8fu8H8_zHC_CnG1gqEHTsu_l8rpTAnenM0VAfzdugElrNocBebxPWo96L1vsfJL_IgP_edbYBP3zVrfd7jVeg_7RMsv6KOt8OOE-rbrbFQ3czGPLssE927GMmxn4ZYBP-fjqa9BrPHPX6oPdmrvXHmwekic7YPrOJ36JWygFyHGz_3jldgQM4IjCL3cPKPqFlw4-AFN5nf5TnI9kc7g_nLrrJ-Dy0Sbwou0KmOKHEwj-BFsHgNQ3gOHoRQP0W-fuHytk9RUdZJgoer1qp8B9UiEnu70fT9z9CvjMLlPAp2xOt9UgRyuA5wB5_hupV3u7D_vvTtxXB8O5JyVGWN0fmbWgU_tlWJWP03cCliMCvMkHjeXuuxqt6J2-T4PMdjiiO6yRN2f9zhaptDVGgb_xFE-bRCUYU6zncDKFFXkOSG1j8GC593YnELX7ZifYr7k_2Hvgfr9KLr7t__zSXfu9Xz1nu0U26f_6y1WDpJlBtg6HtYDbOCNrp4E225Xu27NoiHTKJ_lP0Dv-jnRW3ebZoPkXTe53OslkcpiGGIvroFc9JXsv3KetUAnQbTPjMRFDRavnpLbdO-6Q-vqwCpO-seVpwd6x6SPiqRbJaZxzFuZKt1hCIsbi7Uge0mnSMWPapEVWfiNyJ6vO7OgjQ7NGTWhWgrrzP3Vjtwdc7q2-5wCP-Iuf3Ophr30R3kwwPj5BL1h40ViI4qEQXgIWSqHV4yFioRxaOB7KLFRijlTAeHJ84n4GUiGDC5GB96m-oc4-KM2HLmEhCuVloRDqxELxis3c_XPyd42F86UFC3sLm7OWpY3JQlY1zUTOtmxHGzPp43zJsb_C2hinKgJGMVAqAJlGLivhEMRxXATCvMyJYgyEApCeUrMmHtVJyok5LMdAQgBSeJzDuVGdOI6-UGMgMRzPlCVZHNXJkBCH-BhIinaSVV0ZBcKKgNQ4EXIAShlIQNLInZCE5VQMpAQgjssqqjCSck5XpOxVazBo-jpqpSO1TKzr8igOmY4xELoG8WnhGhymxf9JB0zAGWfWgFrJKeMELGCnoHshXPTKZWApjws4AzX6aGBTL1ulDMwUlyhsTi9-btuFEOnY5Zk81EzdmqdRec7QS3h6Vp9x9EJ06uCigZ0p-nUsQU1UkF8Eaovwa6jxipqUOBkJoqjwnCjICbhAT0UpiTie5yVVQEhUkbKUgN_4bbmkqIi8iAReFWRVkUV-6V9cIQYI?type=png

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 等等,邮件选择发送时间,随便输入文本,只起到一个提醒即可。到那个时候,你就通过命令输入,得到密码,就可以打开保险箱了(如果怕忘了怎么操作,可以写个简短的教程)。