正文
我上面说过,这台机器有一个性质,就是即使我们知道它的输出,也无法计算出我们应该输入什么。对于这样的一种机器,我提的那个问题有什么解决办法吗?
我想到了一种解决办法。就是把所有的数字都试一遍,直到最后输出了以3个0开头的内容。
如果运气好的话,试了几千次之后,我们就能得到我们想要的内容:
要想根据输出来推导出输入非常的困难。但是,这样就非常容易验证输入是否能匹配输出。还记得吗,这台机器对于同一个数字的输出都是一样的。
假如给你个数字,比如72533,你觉得把这个数字发送到那台机器里,最终的输出是以3个0开始的内容的难度有多大?
你需要做的只是把那个数字发送到机器里,看看它的输出符不符合要求就行了。就这么简单。
这种机器最重要的性质就是:给定输出,要想推导出输入及其困难;但是给定输入,要想验证输出则非常容易。
请记住这个特性。
#### 如何使用这种机器去进行密封呢?
我们将使用这台魔法机器去把我们的纸给密封起来。让我们从一个想象的情景开始。
想象一下我给你两个盒子。第一个盒子里有一个数字20893.然后我问你:你能不能算出这样一个数字,当把这个数字与第一个盒子里的数字相加,之后发送到那台机器,让机器输出一个以3个0开头的内容?
这和我们之前的问题有点类似,而我们已经知道,只有一种方法能计算出这个数字,那就是一个一个试。
试了几千次之后,我们碰到了一个数字,21191,把它和20893相加,21191+20893 = 42084,然后把它发送给那台机器,输出的内容符合我们的要求。
在本例中,这个数字21191就是数字20893的封条。假设有一张纸上的内容就是数字20893.为了把这张纸封住(这样就没人能篡改里面的内容),我们把“21191”盖在这张纸上。只要把封条数字(21191)盖在纸上,那张纸就被密封了。
> 那个封条数字就是“工作量证明”,这个数字表示花了多少力气去计算。但是我们还是叫它“封条数字”好了。
如果有人想去验证一下纸里的内容有没有被修改,那么他要做的就是:把纸里的内容加上封条数字然后发送给魔法机器。如果魔法机器输出的内容是以3个0开头的,那么表明纸里的内容没有被修改过。如果魔法机器输出的内容不符合要求,那么我们就可以把那张纸扔掉了,因为它的内容已经被修改了,也就没有用了。
我们将使用一个类似的密封机制来把我们所有的纸都密封起来,最后把他们放到各自的文件夹里。
#### 最后,把我们的纸密封上