刚才在解压一个 zip 的时候在想,压缩文件可以添加密码,可以防止非法获得文件的人解压。
但是如果里面放了一些存在实效性的内容,过了某个日期后,是否被无关人获得便无所谓了;或者说就是希望在某个时间后,文件可自动解锁
不纠结于 zip 、rar 等格式,只解决“指定时间后”便可以通畅访问文件。
🤔感觉需要考虑有网络、无网络、时间是否存在欺骗等问题。存在完美的方案吗?
p.s 如果你说发一个带密码的 zip,然后指定时间发条动态宣布密码,当我没问...可以关掉了(极端一点,因为你无法保证持有密码的人是否能持久化到那个时候😂)
1
sun1991 2021-01-31 22:36:26 +08:00
首先如何定义"指定时间后"?
|
2
crystom 2021-01-31 22:44:00 +08:00
估计有人要说 btc 了
|
3
milukun OP @sun1991 #1 可以参考如何定义 zip 解压密码。当然也可以根据你的方案来咯,总之是满足用户想要在“某某具体时间点”后文件可解锁(比如密码失效之类的)的需求。
|
4
milukun OP @crystom #2 但是我没看出来 btc 怎么满足这个需求.. 但是有些地方倒是挺像,文件不是中心化存储,已经分散到多个人手中,因此不用担心内容被篡改(文件具有可信度)。
另外更多的能力是文件最终一定会被披露,无人可以阻挡,因此一定程度上可以保护文件的发布人。 比如(假设)懂王将自己掌握的登登的黑料装进去,发给世界的媒体报社,设定一个他自己死后的时间自动解锁😂 另外很多需要先证明有这么个东西,又需要等到某个时间后验证的场景也需要,主要是因为“该方案”使得文件具有可信度。 (例子纯属脑洞假设) |
5
qiayue 2021-01-31 23:02:30 +08:00 2
时间是可以修改的,如果你用客户端的时间做判断,我把电脑时间改成 N 年后,是不是就可以免密码解压了。
如果你用网络时间判断,那么这个压缩软件就只有联网才能使用。 |
6
temporary 2021-01-31 23:03:13 +08:00
用户改一下电脑的时间就解开了
|
7
milukun OP |
8
alazysun 2021-01-31 23:17:24 +08:00
向授时服务器申请的时候拦截再模拟授时回复?
|
10
JinTianYi456 2021-01-31 23:20:22 +08:00
做一个网站,提供查询文件的密码,到指定时间才能查到密码 :dog
|
11
shansing 2021-01-31 23:24:19 +08:00
“持久化”……我也好奇,你究竟能掌握什么关于未来的信息,而其他人不可得知呢?假设你能保证有一台机器“持久”计算,倒是可以暴力破解密码,虽然也可能被人抢先就是了。
|
12
milukun OP @JinTianYi456 #10 懂王账号都能被封,so,这种中心化管理方案无法解决问题。密码被禁止公布也是很轻易能发生的
|
13
Jooooooooo 2021-01-31 23:27:14 +08:00
既然是有服务器校验的
那么看起来这个功能等价于 到了指定时间服务器直接返回密码 |
16
milukun OP @Jooooooooo #13 并不一样,你仔细品一下。这个需求的关键是( 1 )到了那个时间所有人手里的文件均可以解锁( 2 )解锁不能受到某个“中心化”的牵制
1.如文中举例的 rar 、zip 密码加密,定时公布密码的方法无法满足( 2 ),即密码持有人遇害或其他原因无法公布的情况 2.到了指定时间服务器直接返回密码,也无法满足( 2 ),例如懂王账号被封一样,任何服务器保存的密码都可能在外界压力下被封禁或者提前被解锁引发问题。 或许就不存在这种方案吧,是悖论。🤔 |
17
touchwithe 2021-01-31 23:37:48 +08:00 via iPhone 15
从科幻的角度提出一个想象:向某个遥远的星球发射电磁波,等待电磁波反射回来才能接收。通过选择不同距离的星球来控制时间。比如向一光年远的星球发射信号,两年后就可以收到反射回波了。
|
18
felixcode 2021-01-31 23:42:08 +08:00
创建个自解压文件,从某个服务器获取密码,服务器端到了时间才会发布密码。
|
19
neteroster 2021-01-31 23:45:06 +08:00 via Android
随便想的:可以考虑一种基于算力的密码。将文件数据以一种指定的复杂度进行「加密」(当然这里不是指传统意义的加密),目前人类的算力不足以解密文件,但是随着单位价格算力的增大,可以完成「在未来解开」的功能,不过具体时间难以把握。
|
20
Jooooooooo 2021-01-31 23:48:14 +08:00 1
|
21
wangxiyu191 2021-01-31 23:56:23 +08:00 1
需要一个当前时间点只有你知道,在指定时间之后所有人都能知道的信息。因为要保证严格遵守时间,所以感觉像 17 楼那样从物理这种基础层面找解决方案比较靠谱。毕竟能保证不被其他东西影响,仅和时间精确相关的东西真不多。。。。
|
22
neteroster 2021-01-31 23:57:13 +08:00 via Android
#17 说的方案也很有意思。其实都是利用强大的「第三方」做一种「保证」。对于我的例子,利用的是计算的复杂性,对于 #17,则是光速这个物理边界。
|
23
milukun OP @felixcode #18 无法保证服务器不提前泄漏密码,或者到时间故意不发布密码。也就是说中心化的服务器无法解决可信度问题 🤔 因而真正有这个需求的用户并不会使用这个方案。
|
24
Hconk 2021-02-01 00:24:38 +08:00 via iPhone 2
lz 这个问题还挺有意思的,谷歌查了下在 stackoverflow 上有过相关的讨论。
链接: https://crypto.stackexchange.com/questions/606/time-capsule-cryptography 其中有个答案提到了这么一篇文章: https://www.gwern.net/Self-decrypting%20files 文章比较长,只看了个大概,有不少相关的论文对这个问题做过研究。 主要的思路可能还是从密码学角度对复杂问题的计算耗时进行估计,然后通过对这个复杂问题的难度进行控制,从而控制时间。 其中提到了一些尝试利用区块链与智能合约的技术,一个是区块链类似的链式 hash 对数据进行加密,以防止被分布式破解,这块没太看懂,可能理解有误。 一个是利用智能合约从经济惩罚的角度进行,通过在多个持有私钥的人存储一定加密货币到智能合约,如果有人提前泄漏则除了这个私钥存入的货币被销毁,其他人的原路返回,在时间到期之后所有人需要公开私钥以赎回货币并可以附带一些奖励,如果到期不公开则存入的货币将被销毁。 因为上面的文章太长,而且提到了很多东西,如果理解有误欢迎指出。有时间了再仔细看一遍。 |
25
bipy 2021-02-01 00:29:51 +08:00
随便想的:利用不同元素半衰期来计时
再胡说八道一些:如果世间一切过程均可模拟,那用代码完整模拟元素衰变 |
26
jybox 2021-02-01 00:38:21 +08:00 2
@neteroster
我也是想到了这个,这个概念可以叫「密码学时间胶囊( Time Capsule Crypto-Puzzle )」,实际上 RSA 算法的发明者之一就在 1999 年发布了这样一个时间胶囊: https://people.csail.mit.edu/rivest/lcs35-puzzle-description.txt 最后在 20 年后的 2019 被人解开: https://en.wikipedia.org/wiki/LCS35 |
27
jybox 2021-02-01 00:41:05 +08:00
发布这个时间胶囊时,预估的是 35 年后解开。
|
28
nvkou 2021-02-01 00:46:53 +08:00 via Android
要不就不用时间做铆钉。比如累计运行时间?也不用累死机器做强度高的运算,我就运行后台 cpu 时间片就行了。关机待机当然就不计入。除非联网修订统计量
|
29
imn1 2021-02-01 00:56:24 +08:00
跳出 zip 就有方案了
|
30
xianxiaobo 2021-02-01 09:05:30 +08:00 1
@touchwithe 从科幻的角度破解一下,假如坐飞船飞向这个遥远的星球,就能提前获得反射回波了。飞船飞的越快,提前获得的越早。
|
31
hikari2 2021-02-01 09:13:32 +08:00
设置版权可以么,版权到期后免费
|
32
shenlanAZ 2021-02-01 10:17:20 +08:00
关键字 “熵增” ,观测在密码密码有效期内的人类极其难以操作的物质的熵。
|
33
Hxu2M811KVSJqN75 2021-02-01 10:44:55 +08:00
自己找一台云服务器,部署一个 Web 服务。 然后拿当前时间和密钥运算,每 15 分钟或者 1 小时刷新输出一个哈希值。
要加密的区域,有个解密服务进程一直运行(也可以做成 cron 任务),定时检测那个云服务器上的 Web 输出的哈希值, 与自己预设的时间密钥运算后的哈希值一致,则自动进行解密。 |
34
Flymachine 2021-02-01 11:14:23 +08:00
这个问题在于是否存在一个可信的来源保证时间节点判断的准确性。
然而这太难了 |
35
NastyAir 2021-02-01 11:16:25 +08:00
这个问题比较有意思,这里初步有两个思路
1.在线服务器,将部分数据存储到服务器,通过服务器来判断时间。 2.离线 a)使用一个类似于加密狗之类的设备,通过这个设备来判断时间,不过这种方案修改本地时间就无效了。 b)定制一个固定时间的存储设备,超过存储时间存储介质就物理损坏。这个存储设备空间可以相对较小,只存储部分数据。 |
36
zerofancy 2021-02-01 12:36:17 +08:00
自动拉取一个开源项目的最新版本二进制,通过签名校验是否真实,通过大小确定大概时间。
著名的开源项目总是越发展越复杂吧……虽然这不确定性很高 |
37
liuzhaowei55 2021-02-01 13:02:02 +08:00 via Android
在指定时间后可以获取密码,还是需要有一个自己信任的第三方来操作
|