V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
milukun
V2EX  ›  问与答

是否存在一种方案可以在指定时间解锁压缩文件?

  •  
  •   milukun · 2021-01-31 22:29:41 +08:00 · 2724 次点击
    这是一个创建于 1396 天前的主题,其中的信息可能已经有所发展或是发生改变。

    刚才在解压一个 zip 的时候在想,压缩文件可以添加密码,可以防止非法获得文件的人解压。

    但是如果里面放了一些存在实效性的内容,过了某个日期后,是否被无关人获得便无所谓了;或者说就是希望在某个时间后,文件可自动解锁

    不纠结于 zip 、rar 等格式,只解决“指定时间后”便可以通畅访问文件。

    🤔感觉需要考虑有网络、无网络、时间是否存在欺骗等问题。存在完美的方案吗?

    p.s 如果你说发一个带密码的 zip,然后指定时间发条动态宣布密码,当我没问...可以关掉了(极端一点,因为你无法保证持有密码的人是否能持久化到那个时候😂)

    第 1 条附言  ·  2021-02-01 00:31:26 +08:00
    补充一下:很多人会提到服务器保管密码,到时候下发。其实这个问题的目的,是需要避免这种情况的,因为假定我有一份非常机密的信息,不可以被任何人提前看到。(就像机密文件人们不会放心直接上传到云盘一样,你无法信任云盘运营者不会查看你的内容,或者出于任何外在压力查看你的内容)

    需求点在于:
    ( 1 )到了指定时间后,所有人手里的文件才可以解锁
    ( 2 )解锁不能受到某个“中心化”的牵制

    不符合的方案举例:
    1.使用如今的 rar 、zip 密码加密,到时间公布密码的方法无法满足( 1 )( 2 ):即密码受到持有人牵制,这个人可能提前公布密码、被其他方法拿到密码,也可能干脆无法活到公布的那天...

    2.到了指定时间服务器直接返回密码;服务器校验时间后解锁。无法满足( 1 )( 2 ):例如懂王账号被封一样,任何公司的服务器保存的密码都可能在外界压力下被删除或者提前被解锁引发问题。无法解决信用问题

    刚刚在答案里看到了物理方案,感觉这个方向是靠谱的。
    所以实际上是一个 “获得绝对可信时间的问题” 🤔
    38 条回复    2021-02-01 15:02:56 +08:00
    sun1991
        1
    sun1991  
       2021-01-31 22:36:26 +08:00
    首先如何定义"指定时间后"?
    crystom
        2
    crystom  
       2021-01-31 22:44:00 +08:00
    估计有人要说 btc 了
    milukun
        3
    milukun  
    OP
       2021-01-31 22:45:52 +08:00
    @sun1991 #1 可以参考如何定义 zip 解压密码。当然也可以根据你的方案来咯,总之是满足用户想要在“某某具体时间点”后文件可解锁(比如密码失效之类的)的需求。
    milukun
        4
    milukun  
    OP
       2021-01-31 22:54:06 +08:00
    @crystom #2 但是我没看出来 btc 怎么满足这个需求.. 但是有些地方倒是挺像,文件不是中心化存储,已经分散到多个人手中,因此不用担心内容被篡改(文件具有可信度)。
    另外更多的能力是文件最终一定会被披露,无人可以阻挡,因此一定程度上可以保护文件的发布人。
    比如(假设)懂王将自己掌握的登登的黑料装进去,发给世界的媒体报社,设定一个他自己死后的时间自动解锁😂
    另外很多需要先证明有这么个东西,又需要等到某个时间后验证的场景也需要,主要是因为“该方案”使得文件具有可信度。
    (例子纯属脑洞假设)
    qiayue
        5
    qiayue  
       2021-01-31 23:02:30 +08:00   ❤️ 2
    时间是可以修改的,如果你用客户端的时间做判断,我把电脑时间改成 N 年后,是不是就可以免密码解压了。
    如果你用网络时间判断,那么这个压缩软件就只有联网才能使用。
    temporary
        6
    temporary  
       2021-01-31 23:03:13 +08:00
    用户改一下电脑的时间就解开了
    milukun
        7
    milukun  
    OP
       2021-01-31 23:05:32 +08:00
    @qiayue #5
    @temporary #6
    关于时间验证,原文已经提及需要考虑有网络、无网络、时间是否存在欺骗
    所以这个方案当然需要包含时间验证的问题咯
    重复提问没有意义哈
    alazysun
        8
    alazysun  
       2021-01-31 23:17:24 +08:00
    向授时服务器申请的时候拦截再模拟授时回复?
    milukun
        9
    milukun  
    OP
       2021-01-31 23:19:03 +08:00
    @alazysun #8 😂加密方案还没有人提出,就开始破解了
    JinTianYi456
        10
    JinTianYi456  
       2021-01-31 23:20:22 +08:00
    做一个网站,提供查询文件的密码,到指定时间才能查到密码 :dog
    shansing
        11
    shansing  
       2021-01-31 23:24:19 +08:00
    “持久化”……我也好奇,你究竟能掌握什么关于未来的信息,而其他人不可得知呢?假设你能保证有一台机器“持久”计算,倒是可以暴力破解密码,虽然也可能被人抢先就是了。
    milukun
        12
    milukun  
    OP
       2021-01-31 23:25:46 +08:00
    @JinTianYi456 #10 懂王账号都能被封,so,这种中心化管理方案无法解决问题。密码被禁止公布也是很轻易能发生的
    Jooooooooo
        13
    Jooooooooo  
       2021-01-31 23:27:14 +08:00
    既然是有服务器校验的

    那么看起来这个功能等价于

    到了指定时间服务器直接返回密码
    milukun
        14
    milukun  
    OP
       2021-01-31 23:28:39 +08:00
    @shansing #11 哈哈,我说的这个人能否“持久化”到那个时间的意思是,是指的能否活到那个时间。
    alazysun
        15
    alazysun  
       2021-01-31 23:31:33 +08:00
    @milukun #9 看来是做不到的
    milukun
        16
    milukun  
    OP
       2021-01-31 23:37:07 +08:00
    @Jooooooooo #13 并不一样,你仔细品一下。这个需求的关键是( 1 )到了那个时间所有人手里的文件均可以解锁( 2 )解锁不能受到某个“中心化”的牵制
    1.如文中举例的 rar 、zip 密码加密,定时公布密码的方法无法满足( 2 ),即密码持有人遇害或其他原因无法公布的情况
    2.到了指定时间服务器直接返回密码,也无法满足( 2 ),例如懂王账号被封一样,任何服务器保存的密码都可能在外界压力下被封禁或者提前被解锁引发问题。

    或许就不存在这种方案吧,是悖论。🤔
    touchwithe
        17
    touchwithe  
       2021-01-31 23:37:48 +08:00 via iPhone   ❤️ 15
    从科幻的角度提出一个想象:向某个遥远的星球发射电磁波,等待电磁波反射回来才能接收。通过选择不同距离的星球来控制时间。比如向一光年远的星球发射信号,两年后就可以收到反射回波了。
    felixcode
        18
    felixcode  
       2021-01-31 23:42:08 +08:00
    创建个自解压文件,从某个服务器获取密码,服务器端到了时间才会发布密码。
    neteroster
        19
    neteroster  
       2021-01-31 23:45:06 +08:00 via Android
    随便想的:可以考虑一种基于算力的密码。将文件数据以一种指定的复杂度进行「加密」(当然这里不是指传统意义的加密),目前人类的算力不足以解密文件,但是随着单位价格算力的增大,可以完成「在未来解开」的功能,不过具体时间难以把握。
    Jooooooooo
        20
    Jooooooooo  
       2021-01-31 23:48:14 +08:00   ❤️ 1
    @milukun 我想了一下

    做不到的根本原因应该是虚拟物体无法感知时间流逝, 导致用时间约束一个文件的行为变得不可能

    文件就如同数字一样是个虚拟的概念, 不受时间的约束
    wangxiyu191
        21
    wangxiyu191  
       2021-01-31 23:56:23 +08:00   ❤️ 1
    需要一个当前时间点只有你知道,在指定时间之后所有人都能知道的信息。因为要保证严格遵守时间,所以感觉像 17 楼那样从物理这种基础层面找解决方案比较靠谱。毕竟能保证不被其他东西影响,仅和时间精确相关的东西真不多。。。。
    neteroster
        22
    neteroster  
       2021-01-31 23:57:13 +08:00 via Android
    #17 说的方案也很有意思。其实都是利用强大的「第三方」做一种「保证」。对于我的例子,利用的是计算的复杂性,对于 #17,则是光速这个物理边界。
    milukun
        23
    milukun  
    OP
       2021-02-01 00:19:09 +08:00
    @felixcode #18 无法保证服务器不提前泄漏密码,或者到时间故意不发布密码。也就是说中心化的服务器无法解决可信度问题 🤔 因而真正有这个需求的用户并不会使用这个方案。
    Hconk
        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 对数据进行加密,以防止被分布式破解,这块没太看懂,可能理解有误。

    一个是利用智能合约从经济惩罚的角度进行,通过在多个持有私钥的人存储一定加密货币到智能合约,如果有人提前泄漏则除了这个私钥存入的货币被销毁,其他人的原路返回,在时间到期之后所有人需要公开私钥以赎回货币并可以附带一些奖励,如果到期不公开则存入的货币将被销毁。

    因为上面的文章太长,而且提到了很多东西,如果理解有误欢迎指出。有时间了再仔细看一遍。
    bipy
        25
    bipy  
       2021-02-01 00:29:51 +08:00
    随便想的:利用不同元素半衰期来计时
    再胡说八道一些:如果世间一切过程均可模拟,那用代码完整模拟元素衰变
    jybox
        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
    jybox
        27
    jybox  
       2021-02-01 00:41:05 +08:00
    发布这个时间胶囊时,预估的是 35 年后解开。
    nvkou
        28
    nvkou  
       2021-02-01 00:46:53 +08:00 via Android
    要不就不用时间做铆钉。比如累计运行时间?也不用累死机器做强度高的运算,我就运行后台 cpu 时间片就行了。关机待机当然就不计入。除非联网修订统计量
    imn1
        29
    imn1  
       2021-02-01 00:56:24 +08:00
    跳出 zip 就有方案了
    xianxiaobo
        30
    xianxiaobo  
       2021-02-01 09:05:30 +08:00   ❤️ 1
    @touchwithe 从科幻的角度破解一下,假如坐飞船飞向这个遥远的星球,就能提前获得反射回波了。飞船飞的越快,提前获得的越早。
    hikari2
        31
    hikari2  
       2021-02-01 09:13:32 +08:00
    设置版权可以么,版权到期后免费
    shenlanAZ
        32
    shenlanAZ  
       2021-02-01 10:17:20 +08:00
    关键字 “熵增” ,观测在密码密码有效期内的人类极其难以操作的物质的熵。
    Hxu2M811KVSJqN75
        33
    Hxu2M811KVSJqN75  
       2021-02-01 10:44:55 +08:00
    自己找一台云服务器,部署一个 Web 服务。 然后拿当前时间和密钥运算,每 15 分钟或者 1 小时刷新输出一个哈希值。

    要加密的区域,有个解密服务进程一直运行(也可以做成 cron 任务),定时检测那个云服务器上的 Web 输出的哈希值, 与自己预设的时间密钥运算后的哈希值一致,则自动进行解密。
    Flymachine
        34
    Flymachine  
       2021-02-01 11:14:23 +08:00
    这个问题在于是否存在一个可信的来源保证时间节点判断的准确性。
    然而这太难了
    NastyAir
        35
    NastyAir  
       2021-02-01 11:16:25 +08:00
    这个问题比较有意思,这里初步有两个思路
    1.在线服务器,将部分数据存储到服务器,通过服务器来判断时间。
    2.离线
    a)使用一个类似于加密狗之类的设备,通过这个设备来判断时间,不过这种方案修改本地时间就无效了。
    b)定制一个固定时间的存储设备,超过存储时间存储介质就物理损坏。这个存储设备空间可以相对较小,只存储部分数据。
    zerofancy
        36
    zerofancy  
       2021-02-01 12:36:17 +08:00
    自动拉取一个开源项目的最新版本二进制,通过签名校验是否真实,通过大小确定大概时间。
    著名的开源项目总是越发展越复杂吧……虽然这不确定性很高
    liuzhaowei55
        37
    liuzhaowei55  
       2021-02-01 13:02:02 +08:00 via Android
    在指定时间后可以获取密码,还是需要有一个自己信任的第三方来操作
    milukun
        38
    milukun  
    OP
       2021-02-01 15:02:56 +08:00
    @bipy #25 哈哈 模拟元素衰变 👍
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3114 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 13:46 · PVG 21:46 · LAX 05:46 · JFK 08:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.