最近工作上事情比较少,摸鱼的时候看了很多有意思的东西,找 VDF 相关资料的时候讲到一个问题:如何设计一个只能在指定的时间 后才能解出来的 puzzle 我先想了一下但是没想明白,怎么把时间这种抽象的概念在一个 puzzle 里面给量化出来。🤔
然后就翻到了这篇引用的论文 Time-lock puzzles and timed-release Crypto
看了文章才发现实际上这个问题可以等效于:设计一个算法,只有在经过 次计算后才能够得到正确的结果,且这个算法的计算过程不能被并行计算加速。这样只能使用一台机器解密,假设其每秒最高算力为 则一定要经过 秒后才能解出正确的结果,达到了 time-lock 的目的。
文章里介绍了两种 time-lock puzzle 的实现方式。
第一种 time-lock puzzle 设计#
假设 Alice 有一个信息 要传递给 Bob 但是需要加密 (锁定) 秒钟的时间。(这里有一个前提是 Alice 需要事先知道 Bob 的算力情况)
加密#
第一步,随机选择两个大质数 和 将他们相乘得到 同时计算
第二步,计算 其中 是 Bob 单机每秒能够进行的对 平方取模的次数 (也就是所谓算力)
第三步,随机生成一个足够安全的,用于加密的密钥 和一个加密算法比如 RC5
第四步,使用密钥和加密算法加原始信息得到
第五步,选择一个随机数 然后加密 得到
这一步可以通过以下步骤进行加速:首先计算 然后计算
最后 Alice 将 公布给 Bob
解密#
对于 Bob 来说获取 需要用密钥 解密 但是加密时已经保证 本身是足够安全的 Bob 只能通过 计算得到
这里只剩下 一个未知数,对于 Bob 来说除了暴力遍历所有 没有其他更好的办法 。
这样则需要经过 这样一个序列的计算,可以观察到在这个序列里,每一项的计算都依赖前一项的计算结果 即无法提前计算后面的值,也不能并行加速计算。只能通过 次计算得到结果,而根据之前设定的 所需要计算的时间就是 也即达了 Alice 将消息锁定 时间的目的。
(至于 Bob 如何判断自己找到了正确的 就不属于这个算法里面的问题了。一种方式是加密者可以给出 让 Bob 自己校验。)
第二种 time-lock puzzle 设计#
第二部分没仔细看,直接在 Claude2 上面上传论文让后让 AI 帮忙总结的 (没有 GPT-4 可以用的情况下非常推荐用 Claude2)
ME: 介绍下第二种方法如何实现
文章提出的第二种使用受信任代理的方法大致如下:
- 设置多个受信任的代理,每个代理定期公布一个密钥。
- 用户将消息用一个随机密钥加密,得到密文。
- 用户将该随机密钥通过密钥分享方案分成多个份,分别给不同的代理。
- 每个代理使用在未来时间 t 公布的密钥,加密自己持有的那一份子密钥。
- 在时间 t, 足够多的代理公布了他们在 t 时刻的密钥。
- 用户可以用这些密钥解密出子密钥份,然后重构出原始的随机密钥。
- 最后用这个随机密钥解密出原始消息。
这种方法的安全性依赖于受信任代理不提前泄露未来的密钥。同时设置多个代理,可以通过密钥分享和阈值检验来实现一定的容错性。即使个别代理被攻破或失效,只要有足够的代理仍正常工作,信息仍能在预定时间解密出来。