日报标题:想着简单,但证明生成截图的当前时间真是个技术活
这个问题必须分解成两个部分:
1)证明在某个特定的时间点存在某图片 A
2)证明这张图 A 就是截图
问题 1 非常好解决,有许多方案,但是问题 2 基本上无解,除非引入一个第三方机构如公证处、谷歌快照等等才可以解决。
目前所有的答案都是在试图解决问题 1,没有一个答案能够解决问题 2.
我们可以使用比特币系统构造出一个存在证明,从而解决问题 1:
豆知识:
比特币系统每隔 10 分钟会产生一个新的 block,同时产生一组比特币,这个过程类似彩票开奖,同时会产生一个 Blockhash 值,这个值可以类比于彩票的中奖号码,想提前猜中这个值几乎不可能。
首先,我们有:
这是一张截图,我们先将当前最新的 Blockhash 写在图上,查询 Bitcoin Block Explorer 得知当前最新的 Block #275848 对应的 hash 是
0000000000000000df141a5f0b3062f680c2357ab3bbbb6261b85b3e8d93084d
这个 Block 诞生的时间是
2013-12-19 12:23:28 UTC
此时,我们证明了这张图不可能在 Block #275848 诞生之前准备好。也就是说,这张图至少在 2013-12-19 12:23:28 UTC 之后才存在。
随后,我们求出带有 hash 值的截图的摘要值:
我们分别以
ae8b2054457c3c2c0e5a022ef235b056
60f07d8acd9399afc35470cf399c1767b246e5b1
这两个摘要值作为私钥,产生对应的比特币地址,然后将少量比特币汇入这两个地址,最后再从这两个地址将所有比特币汇出。
这样,我们就完成了存在证明的第二步。这一步交易的交易时间被比特币系统所记录,具体时间为:2013-12-19 12:45:37UTC
豆知识:
比特币系统中的所有交易记录都会被所有人获得,所有人都会知道这两个地址被人汇入了比特币。但是他们不能从这两个地址反过来推算出你所使用的私钥。
由于目前没有一个已知摘要值就能产生对应的图片文件的程序,所有我们可以断定,在交易完成之前(2013-12-19 12:45:37UTC),你就已经拥有了这张图片。
最后,我们就证明在世界标准时间 2013 年 12 月 19 日 12 点 23 分至 45 分期间,我拥有这张图片。
比特币系统提供了一套稳定的时间戳系统,这是其不为人知的贡献。
除了比特币系统之外,我们还可以使用一些简单的解决办法,比如将你要证明存在的东西(比如你的手稿、论文)和当天的报纸一起塞进一个信封封口,然后盖上邮戳寄给你自己。不要拆开,留做证物即可。
当然这个办法容易被质疑说你邮寄了一个空白未封口的信封……
另外时间戳服务中心提供有时间戳服务,可以作为法律上的证据帮助证明你的著作权。不过每个要进行证明的文件都需要收取费用。
铛铛铛铛~这个题目其实还是有一个完美的解答的:
无论网页、电子邮件还是网聊过程等电子证据均能即时提取、安全储存。经验丰富的公证员将为您提供专业的法律建议,并出具高证明力的公证文书。
关键时刻,还是国家机构比较靠谱……
灵感来源与版权说明:
本文中所述的基于比特币系统的存在证明灵感来自时间戳服务与存在证明,非原创,不担保其法律效应。
本文所使用图片系个人制作,说明文字亦个人所述,如有缺漏,请尽管提出。
利益相关:
2012 年 3 月前曾购入比特币,已全部抛售。
Last modified 2013/12/19 21:16 (UTC+8) 重写全文并配图,提供最终解决方案。
题主的问题有两部分,一个是证明图片产生于某个时间点之后,一个是证明图片产生于某个时间点之前。关于「之后」的证明另一个答案说得很好,实际上就是把那种高度随机的,从过去不能预测的数据写入图片,这样第三方就能验证图片产生不可能早于此时。
我来补充如何证明图片某个时刻之前,换言之在某个时刻此图片存在。
证明的方法也不复杂:
将你的文件算出 hash 并发送给可信的机构 Justin,然后,Justin 将当前的时间(时间戳)和文件 hash 一起构建一个新 hash,然后把新 hash 套上 Justin 的私钥并和时间戳一起发回给你。这样第三方就可以用 Justin 的公钥来验证文件的时效性,信誉由 Justin 保证。
这种方法就是著名的 RFC-3161。
这里补充一种如何利用 Trusted Timestamping 证明图片生成于某个时刻之后的方法:
- 用 RANDOM.ORG 生成一张随机图片 R,不用太大,像素够 256 个就行,比如这样:
- 将随机图 R 用 RFC-3161 方法验证,此时 Justin 会认可此图生成早于时刻 A。你会得到三个数据:随机图 R,时间戳 A 和签名的 Hash A
- 将上面信息写入截图里(假设此图叫 P,其中包含了随机图 R、时间戳 A 和 Hash A),保存
- 再次用 RFC-3161 验证整张截图,得到时间戳 B 和签名的 Hash B
- 好了,你的截图的时效性已经有保证了。