我开发了一个基于 Beancount 的账本托管服务 HostedBeans,欢迎大家来了解纯文本复式记账并试用我的服务。
归档 2013 年 12 月

利用 Bitcoin 网络进行时间区间证明

有这样一个有趣的话题,如果我在今天,2013 年 12 月 31 日,截取一张截图,那么在事后如何证明这张截图是今天所截取的呢?

同时我希望这个证明足够可靠,关键信息不掌握在少数人手中,任何人无法篡改已经证明的信息,证明不会因为某些机密信息的泄露而失效,且任何人都要可以非常方便地验证这个证明。

乍一看,简单。但细一想,又似乎不可能。

其实这个问题可以分解成两个问题:

  • 首先要证明这张图必须在某个时间之后才能被截取出来
  • 然后需要证明这张图必须在某个时间之前才能被截取出来

「证明这张图必须在某个时间之后才能被截取出来」这个问题简单,只需在截图中包含一些「只有在该时间后才能获取到的信息」,比如当天双色球的中奖号码等等。

这很好理解,如果我在截图中包含了 2013.12.31 的双色球中奖号码,就可以毫无疑问地证明这张图是在 2013.12.31 之后被截取的。

但是,这并不能妨碍我在 2014.1.1 重新截取一张截图,加入 2013.12.31 的双色球号码。所以我们还必须证明「这张图必须在某个时间之前才能被截取出来」。

解决这个问题的关键是要把这张截图的信息,永久地保存到某个可以随时查证的地方,比如我们可以让这张图片登上报纸头条,它就是永远可被查证的了,今后我们可以随时把需要证明的图片与 2013.12.31 的报纸进行对比,证明图片的真伪。

综上只需要在截图中加入当日的双色球号码,并且让它登上报纸头条即可。

——等等,你在开玩笑么。

好吧,所以我要提 Bitcoin, Bitcoin 给我们提供了这样的一个机会,它既是双色球,又是报纸。使用下文的方法进行一次证明只需花费你几分钟的时间,和一点点金钱(几分钱).

首先我们准备一张图片(记作 PIC).

pic.png

因为图片本身很大,对整张图片应用各种加密算法很不划算,所以我们要对这张图片进行散列,如果散列算法足够可靠,我们可以认为散列值就代表了这张图片(记作 HASH), 我们选用在今后很长一段时间都足够可靠的 SHA-256 算法,Bitcoin 网络使用的也是该算法。

HASH = sha256(PIC) = 896c53284a04c3df2c5fe81b1fa228d421ed6c87190da60e153562786346af75

然后我们去瞧一眼 Bitcoin 网络最新的区块(Block) 的散列值,Bitcoin 的区块大约每隔十分钟出现一个,除非你控制了世界上几乎全部的(参与 Bitcoin, 下略)的计算机,否则没有人能预测到它。同时新生成的 Block 会马上被同步到世界上所有的计算机上,事后同样没有人能够篡改。它在此起到了「双色球」的作用。

北京时间 2013.12.31 21:32 产生的最新一个区块的散列值如下,记作 BBH(Bitcoin Block Hash):

BBH = 0000000000000001149d2d7b4fcc693095fef279a1300f938e9cbeec1b43c034

然后我们将最新区块的散列值加到图片上,记作 HASH2:

HASH2 = sha256(HASH1 + BBH) = 277e31d0a5495dbeb642f459be2bcb768d728a7c1e9e008c4d6276dc938d4195

以后我们需要用 HASH2 来表示这张图片(而不是HASH), 因为 HASH2 中包含了最新区块的信息。

至此,我们完成了后向证明。

即,我们证明了「HASH2 只有在拥有 HASH(即 PIC) 且晚于北京时间 2013.12.31 21:32 的情况下才能取得」。

然后,我们使用 HASH2 作为钱包私钥,来生成对应的 Bitcoin 收款地址,因为比特币钱包私钥和收款地址本质上是一对公钥加密算法(如 RSA)的私钥和公钥,因此从公钥无法推出私钥。我们得到了这个收款地址,即证明了我们拥有私钥,再进一步证明了我们拥有 HASH2, HASH, 和 PIC.

在这个过程中,Bitcoin 网络起到了「报纸」的作用,(理想情况下)每笔交易会在下一个区块「截稿」的时候被定格,成为区块的一部分,被同步到世界上所有的计算机上,随时可以查证,又无人可以篡改。

在这一步我使用了 blockchain.info 提供的导入私钥的服务,暂时我还未查证 blockchain.info 以何种格式理解该私钥,但这不影响结论。

我由 HASH2 得出了对应的 Bitcoin 收款地址(记作 PUB):

1ALtyqivh8VgnefQ8okroJUFuNqJYFgSac

然后我向该地址汇入了 0.0001 个 Bitcoin, 以证明我在此时就已经获知了该收款地址,同时支付了 0.0001 个 Bitcoin 的交易手续费(其实可以更少一点), 该交易被收录到了于北京时间 2013.12.31 21:49 产生的新区块中。

至此,我们完成前向证明。

即,我们证明了「我在北京时间 2013.12.31 21:49 之前,就已经拥有该图片了」。

也即,我们在北京时间 2013.12.31 21:49 钱通过向 PUB 中汇款的方式,证明了我们在此刻之前已经获知了 PUB, 而获知 PUB 的前提是 获知 HASH2, HASH, 和 PIC.

至此我我们完成了整个证明过程,证明了我在北京时间 2013.12.31 21:32 - 21:49 这 17 分钟的时间段拥有这张截图,而在这之前或者之后,即使我拥有这种图片,和以上全部信息,也无法做出同样的证明,世上只此一份。

当然,你在今后出示这种图片的同时需要出示 HASH2.

或者你也可以通过某种方式把 HASH2 嵌入到原始图片中(这个工作需要你在做前向证明之前完成).

最后的福利:那个钱包里用于证明的 0.0001 Bitcoin 我没有取走,谁要就拿去吧。

2013 年度小结

年度小结这东西,前年写过,去年没写过,但是春节写过一篇类似的回忆日志。

今年大概可以分三个部分吧,「勾搭妹纸」,「赚钱」和「丰富简历」。

按顺序来,我有稳定的收入是从今年年初开始的,也就是 RP 主机正式开卖的时候。

众所周知 RP 主机是 2012 年 11 月上线的,上线之后我立刻就开始构思 2.0 版本,从 3 月份开始,一直在跳票,直到 6 月 6 日 2.0 版本才上线,我在 V2EX 进行了一下宣传,吸引到了不少用户,那是我发的最成功的一次广告。
然后我又准备进行一次小更新,即 2.2 版本,顺便上线香港节点。2.2 版本本来已经写好了,9 月份开始在香港节点试运行,但是香港节点经常无故地遭到 DDoS, 半个月后被迫下线,然后我也懒得给其他两个节点更新 2.2 了。
之后我又开始构思 3.0 版本。

RP 主机赚得并不多,一开始几个月是两三百元钱,暑假那阵是卖得最火的,也不过一千元。不过这个项目做得仍然非常划算,首先这是我第一项稳定的收入,其次是借此认识了非常非常多的朋友,各种大牛。同时 RootPanel 也是目前为止我写得规模最大的 Web 项目。
在今后我打算将所有的盈利以各种形式送出去,把 RP 主机做成一个公益的项目。

然后 8 月份,我在 V2EX 看到一个招远程兼职的帖子,他们正在做的,和曾经做过的项目,都是我熟悉的,用过的,顿时感觉世界真小。
我没立刻动心,发给了我的一个朋友,过了半天他告诉我他被选上了,于是我也想去试试,于是就这样开始了几个月的兼职。

一开始谈的是只是假期的一个月,后来 9 月份学校开学的时候,和学校有一次比较大的矛盾,总之从那之后我白天在学校不必上课了,也有时间写代码了。
当时和班主任连学校领导,闹了几天的样子,说起这个,还不得不提我和我们班主任那深仇大恨,我读书十多年,没见过这么脑残的老师。

因为我白天在学校也可以写代码了,于是兼职的老大又找到了我,继续和他们一起做项目。

老大做的是 Bitcoin 相关的项目,Bitcoin 我很早就关注了,这一年里,Bitcoin 从 3 月份的 50 CNY, 到 4 月份的 500 CNY, 9 月份 1000 CNY, 10 月份的 5000, 到现在央行约谈第三方支付,可以说十分之疯狂,我也从中小赚了一笔——大概和我的心态有关,我并未用 CNY 购买过 Bitcoin, 只是用 Bitcoin 收款然后一直懒得提出来而已。

5 月份的时候,据小璐后来说的,她脑袋一短路就突然叫我去看电影,然后就开始了我勾搭妹纸的部分。
一开始两个月是藏在心里,然后挣扎了两个月,再到现在这样子。

以前看别人的故事,总以为发生在我身上的话,我能华丽地拿起或放下,现在看来不是那么回事。

8 月份的时候我试图将三年前写过的「类似自传的故事」重写一遍,那时小璐说一定不要把我写进去啊。
我说那可不行,你是里面重要的部分,还有时间呢,也许我写到那之前还会有变数也说不定。

在「面试」那个兼职之前,我曾心血来潮地为自己写过一份简历,不谦虚地说,含金量也是有一点的。通过那次面试我也认识到了一份「漂亮」的简历的重要性。对我来说,就是 Github 和我的博客,整个下半年我都在为此而努力。

当然,不只是表面功夫。我曾立志花一辈子读完 78 块大理石,就是机械工业出版社的那套大理石封面的「计算机科学丛书」。
今年我买了其中 7 本,读完了其中 3 本,剩下 4 本正在读。说起来这一年因为资金宽裕了,买了不少书。

今年我还学了不少新技术,比如 NodeJS, Golang, 用 Jade 和 Less 来写前端等等。
同时 LightPHP 还在没完没了地写,但仍旧没达到「可以正式发布」的质量标准;零毫秒调研过一些,但目测这个项目是要永远地坑掉了。

一年前我在想,要是用 Arch 显得我多高端啊,于是今年后半年我主要使用 Arch 作为 Linux 发行版,顺便调研 Debian, 彻底丢掉不够高端的 Ubuntu.

读书:海上灵光

那个坑人的群介绍已经挂了有一年多了,但前两天,大家一起算了算,群里的许嵩粉倒还真的不少。

我问小璐这书里是什么,她说写真集,而且是没有妹纸的写真集。

页数比我想象得要少(因为纸厚), 图比我想象得要多,所以当真拿起来之后没多一会儿就看完了。

我喜欢用「精致」这个词来描述一个作品,所谓精致就是说,不管它好不好,至少看得出来作者用心了。

这样算下来,就冲着这纸张质量,也算得上精致。

当年韩寒和方舟子打得火热的时候,我读过韩寒的一本小说,感觉情节很抽象,很无厘头。觉得作者想要表达些什么,但又不知道作者想表达什么。

而相比之下,许嵩的这个画册则没有太多深度,只是些零碎的日记,称不上有什么启发,但可以说还比较有趣。

比如「书非买不能读也」一段,「反流行」一段, 但是很遗憾我发现似乎他也只是从其他某处看到的,不是什么太新鲜的观点。

还有一句「视界之外,想象之中」,虽然接下来有点跑题,但我还是想到了 Librazy 在博客中写的一句「光锥之内,视界之外」。

这句话可货真价实是 Librazy 原创,这个用词,很是绝妙啊,我花了很长的时间才理清了这个逻辑。

光锥和视界都是相对论中的概念,光锥是与一个事件相关的所有事件的集合(包括未来光锥和过去光锥), 视界是黑洞的边缘。

在视界处,光锥因为黑洞的引力被扭曲,未来光锥被扭曲到了黑洞(视界)之内,视界之外只剩下了过去光锥。

简而言之就是「回忆」,我还没和 Librazy 沟通过,不知道我猜得对不对。

感觉这个画册多少有种忧伤,许嵩的希腊之行有点逃离的感觉,越是当惯了公众人物越想回到简单,越厌倦现在社会的忙碌。

当然,我也知道和几个摄影师一起去度假,可能并不是什么悠闲的事情。

当然我不是在黑许嵩,毕竟不想开赛车的作家不是好歌手嘛。

精子生于 1995 年,英文 ID jysperm.

订阅推送

通过 Telegram Channel 订阅我的博客日志、产品和项目的动态:

王子亭的博客 @ Telegram


通过邮件订阅订阅我的博客日志、产品和项目的动态(历史邮件):

该博客使用基于  Hexo  的  simpleblock  主题。博客内容使用  CC BY-NC-ND  授权发布。最后生成于 2023-12-20.