第一节 存在性证明
一、基于比特币的存在性证明
(一)存在证明
存在证明就是向第三方证明某个物品/事件,在过去的某个时刻存在过。
这是一件很简单的事情,提供票据、通信记录之类的就可以办到。但这些并不严格,因为这些证据都是非常易被伪造或销毁的。要完成证明,必须依赖强有力的证据链,这个必须是任何人都无法伪造与销毁的,或者说伪造成本极其高昂,近乎不可能。
回忆一下,电影里经常出现的绑匪镜头,他们为了证明在某个时间确实拥有人质,而不是事前拍摄的视频,通常会用当天的发行量很大的报纸来辅助证明。当香港媒体误报“成龙高楼坠亡”时,成龙也不得不拿报纸来证明自己的存在。报纸之所以能够成为有效的时间证明系统是因为以下几点。
(1)不可伪造性。新闻等信息是无法预测的,尤其是证券大盘数据,报纸上大量充满这样的信息,所以无人能够提前伪造。
(2)公开且不可销毁。报纸通常拥有很大的发行数量,受众广泛,一旦发布出去就分散到各个角落,很难再次收集齐全并全部销毁。通常图书馆也会存档数十年的报纸。
(3)具有时间特征。报纸具有很强的时间特征,版面上的时间标记到处可见。借助报纸可以完成某个时间之后的存在证明,但无法完成某个时间之前的。例如,你将9月1日的报纸拍摄进照片,那么仅能证明其在9月1日之后拍摄,可能是9月1日,也可能是9月15日。
(二)时间戳服务
比特币本质是构造了一个永不停息、无坚不摧的时间戳系统。
然后在该系统上添加若干特性后使其具有货币的功能。报纸从另一个角度来讲也是一种时间戳服务。
比特币具有下列优良的特性,可以更完美地用于存在证明。
(1)不可预测/伪造。因区块(Block)的计算是随机事件,其哈希值(Hash Value)是一个32字节的随机大数(2^256)。想猜对该数的概率实在是太低了,如图2.24所示。
(2)不可销毁/修改。比特币区块链拥有巨大的算力在维护与延续,对于n个确认的区块,想篡改是不可能的。
(3)区块具有天然时间特性。时间戳(Timestamp)是区块元(Blockmeta)字段之一。
(4)区块可以存储信息。区块元信息是无法控制的,但区块会收录交易,而交易可以向区块“写入”自己的数据。
(三)数字摘要
简单来说,对一串数据进行哈希运算,得到的哈希值称为数字摘要。除了哈希函数外,还有其他方式,如密钥签名等也可以得到。哈希值通常是一个非常巨大的数,例如用SHA256时,哈希值区间非常大:1~2^256。数字摘要的计算过程不可逆,那么可以认为:
欲证明你拥有某个文件,提供该文件的哈希值(及哈希函数)即可。第三方可以轻易通过验证文件的哈希值来判断之。
(四)比特币做存在证明
1.时间点后向证明
因为区块哈希值(BlockHash)的不可伪造性,能提供区块哈希值即可证明存在于该区块时刻之后。例如,你在拍照的时候,拿着打印有区块哈希值的纸即可证明:你是在该区块时刻之后进行的拍摄。
2.时间点前向证明
前向证明需要精心构造一个包含数字摘要的交易,待该交易进入区块中时,便可以证明你在该区块时刻之前拥有该数字摘要。前向证明的关键是能把信息写入时间戳服务载体。
3.时间区间证明
有时候,仅仅证明时间点之前或之后是不够的,需要能够确认到某一个时刻。将上述方式综合即可完成。
(1)将区块A的哈希值添入数据文件,并制作文件数字摘要(时间点后向证明)。
(2)将摘要信息构造至交易中,广播之(时间点前向证明)。
(3)当交易被区块B收录进去,那么即可证明,该文件在区块A与B的时间间隔中存在。
如果交易给了足够的矿工费(TransactionFee),具有较高优先级的话,便很有可能被紧随其后的Block收录。连续Block约10分钟,那么就在一个相对小的时间内做了证明,可以近似认为是时间点。
(五)构造特殊交易
带有数字摘要的交易如何构造呢?下面以32字节的数字摘要为例,提出数个可行方法,其他长度的可变换得出。
方式一:交易额承载信息。
32字节可以分割为16个双字节,每个双字节的数值范围是0~65535。比特币的现行单位可以分割至小数点后8位,那么我们可以利用最后的5位来存放一个数值,一共需要16个输出(T×output)即可完成32字节的信息存储。中间涉及比特币最大数量为0.00065535×16=0.0104856BTC。
需要的比特币数量很少,约0.01BTC,且输出依然发回给自己的地址,唯一的代价就是付出矿工费(T×Fee)。任何人都可以使用之。
著名比特币赌博网站SatoshiDice就是采用这种方式为其服务端种子文件做时间前向证明的。下面演示一下步骤。服务端的种子文件为hash.keys,我们对其做SHA256运算,得到哈希值,32字节。
$sha256sumhash.keys
#hash of file"hash.keys",in hex:
9b0d87ac871518cfd8601aa456b58fa74c01194cfeb25e7f3eecf43759d6ccb4 hash.keys将该哈希转为16个十进制数值:
9b0d=39693
87ac=34732
8715=34581
18cf=6351
d860=55392
1aa4=6820
56b5=22197
8fa7=36775
4c01=19457
194c=6476
feb2=65202
5e7f=24191
3eec=16108
f437=62519
59d6=22998
ccb4=52404
将这16个数除以108,作为输出额度,构造交易,如图2.25所示。
交易被收录,证明完成。
方式二:数字摘要的哈希值做地址输入。
回顾一下地址的生成算法(图2.26是一个未压缩公钥生成地址的过程,公钥是否压缩对该证明过程没有影响):
我们用数字摘要的哈希值代替图中红色框中的值,然后得到一个地址,我们把
0.00000001BTC录入该地址,形成交易,收录后完成证明。验证时,需要首先得到数字摘要的哈希值,再生成对应的地址,核对地址是否一致即可。
这个方法有个缺点:录入该地址的币永远消失了,因为没有其对应的私钥。虽然可以只需1聪(比特币最小单位,等于0.00000001个比特币),目前价值几乎可以忽略不计,但毕竟是浪费了。该方法可以进一步衍生一些类似的方法。曾有个网站使用过这种方法,后来该网站关闭了。
方式三:数字摘要的哈希值做私钥。
大小介于1~0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141的数,都可以被认为是一个合法的私钥,其大小为32字节。那么,可以把数字摘要的哈希值做私钥,并推算出公钥和地址。
将任意币值输出至该地址构成交易,交易收录后,通过私钥再转移走即可。这样便在Blockchain里留下了这个地址。验证时重复该过程,检查地址是否一致即可。
该方法不会像方法二那样形成浪费,也比较容易操作。我们依然以SatoshiDice 的种子文件为例,种子数字摘要的哈希值为9b0d87ac871518 cfd8601aa456b58fa74c01194cfeb25e7f3eecf43759d6ccb4,如图2.27所示。
借助bitaddress.org,输入私钥(种子哈希)后得到两把公钥,分别对应两个地址。证明时将币录入任何一个地址即可,建议使用未压缩公钥地址,因为并不是所有客户端都对压缩公钥支持良好。然后将该私钥导入任何一个客户端,再把该地址的钱转移到一个安全的地方。最后,公开私钥和对应收录地址的交易。
上面所介绍的三种完全基于比特币的存在性证明的方法各有千秋,但也会受到比特币区块容量限制、交易验证时间等天生的延展性缺陷的影响。更多的创新团队正受到比特币区块链所具有的这一存在性证明特性的启发,在进一步探索在可延展区块链上的数据存储与证明。
二、区块链私证、公证应用
在讨论区块链在“私证”、“公证”领域的应用前,我们先来谈一下“私证”与“公证”的区别。民间证明(又称“私证”)指的是私下签订的约定,或见证人、证明人出具的证明等。“公证”则是指国家专门设置的机构代表国家所做的证明。“私证”只能证明这件事发生过,至于这件事是否合理、合规、合法,见证人或证明人并没有义务监督,也不负任何法律责任。与“私证”不同,“公证”是一种法律证明,不但要证明事实情况的真实性,而且要根据国家的法律、政策证明事实是否合法,所以“公证”是在司法层面保护权益的证明,具有法定的证据效力或对债权文书的强制执行效力。
“私证”和“公证”的共同点是两者都是证据,要让证据的法律效力强,都需要证据本身不被质疑。当“私证”被双方当事人、司法部门采纳时,“私证”也具有很强的证据效力。
在互联网高速发展的今天,大量频繁的经济活动被迁移到网络上,对“私证”、“公证”都提出了极大的挑战。以前的见证人变成了各类互联网平台,以前需要公证的纸件文档都变成了互联网上看不见、摸不着的电子数据,如何取得证据,并证明证据的真实、有效、未被篡改,难度很大。
在法律层面,2005年颁布的《中华人民共和国公证法》(以下简称《公证法》)明确将保全证据公证作为公证机关的公证事项之一,其中涉及计算机软件的相关证据公证被归在此条内(《公证法》第11条)。与此同时,全国的保全证据公证量都有成倍的增长,但因电子证据取证的复杂性,当前仍有保全证据公证因被质疑其真实性而未被采信的案例,这些案例向保全证据公证业务提出了难题,阻碍了其健康快速发展。
区块链技术是一项从比特币系统里提炼出的具有强大自我保护能力的技术。与其说它是一项技术创新,不如更确切地说它是一项规则与技术完美结合的生态系统创新。这个生态系统自带的规则与技术天然解决了保全证据公证遇到的一些根本问题。
(1)第三方身份。用区块链技术做证据保全,是属于在关系双方之外,建立一个无利益的第三方身份,正如“公证”中的公证员身份、“私证”中的见证人身份。
(2)去中心化结构。区块链的基础规则之一就是去中心化的结构,即不存在作为中心的硬件或管理机构,不需要也无法人为进行干预。保全的内容被区块链无数的结点共同控制,有效地防止了黑客、“捣蛋者”们对数据本身进行攻击、篡改。
(3)加密算法及数据证书保障。所有的数据都是经过加密的,每项内容都有随机的数据证书,对保全内容、保全过程都进行了加密保全。
(4)时间戳(Timestamps)证明。每一次存取、变动等行为都会有一个时间戳记录,让每一个行为的时间点有据可查。
(5)证据链举证。区块链技术将每一次的行为都保全下来,对行为形成了证据链证据,而非单点证据,有效还原了整个行为的真实过程。
(6)低成本。虽然区块链技术的作用很大,但它还是一项低成本技术,区块链技术本身对硬件要求不高,也不需要很大的硬件投入,这点对于它在保全证据公证领域的推广利用方面也是至关重要的。
上面谈到的是区块链在保全证据公证领域应用的天然优势,这个优势可以用于“公证”,当然更可以用于“私证”。但从现实的、接地气的作用来讲,区块链对“私证”的意义更大,这是因为,未来越来越微小的经济活动将逐步盛行,如P2P实现了几十元、几百元的贷款,淘宝实现了几块钱的交易,这些细琐的经济活动会产生出大量细琐的民事纠纷,而大家绝不会为几块、几十块、几百块的事情打官司,所以快速取得证据、快速处理纠纷成了亟须解决的问题,区块链将为大众提供这样的存证、取证工具,用技术提高“私证”的证据效力,让“私证”在非民事诉讼领域大展拳脚。可喜的是,目前已有一些区块链技术在保全证据公证领域开始有效地使用起来了,下面就给大家介绍一家用区块链技术做保全证据的创业公司。
三、可信电子凭证应用案例
通过传统数据存证形成的结果仍然是电子化的数据,这些数据自身也面临着缺乏时间维度、易修改等问题。而当这个问题面对中心化的腐败和黑客攻击时,很容易成为被突破的薄弱点。区块链技术的出现,则通过技术在比特世界中自行构建了一个信任之锚。目前,已有多个项目借助于区块链,把数据保全的元数据记录在区块链上。结合加密算法、数字证书等技术手段,既能充分发挥中心节点的效率优势,同时又能避免腐败等中心化机构的固有顽疾,建造出一个能防止黑客攻击的、更安全、更有公信力的信任节点,建立起比特世界到原子世界的可靠映射和可信连接。因此,我们把基于区块链的电子数据存证结果称为“可信电子凭证”。
在区块链数据存证应用方面,国外的典型项目是Factom,国内则有网录科技、保全网等。
公证通(Factom)于2015年成立于美国,它维护了一个永久不可更改、基于时间戳记录的区块链数据网络。Factom将比特币的功能拓展到了货币属性之外的事件记录上来,通过设置最小的规则集来永久记录数据条目,并让客户的应用程序来执行大多数的数据验证任务。它通过建立在比特币、以太坊之上的中间层数据整理机构,实现了包括审计系统、医疗信息记录、供应链管理、投票系统、财产契据、法律应用及金融系统等的应用。
Factom应用实现了对于数据条目的记录,并且通过Factom服务器创建了条目区块与目录区块,并将目录区块的哈希值锚定到比特币或者以太坊的公有区块链之上。在Factom当中用户需要使用其原生数字货币Factoids来购买信用积分(Entry Credit),而信用积分则被用于消耗在向Factom应用记录数据上。
而面对着数据时代的来临,以及每个人面临的数据主权维护问题,人们对于数据存证的司法有效性、数据原始性不被篡改的需求日益增加。因此同样成立于2015年的保全网则在中国为用户提供一站式的数据保全、信任连接、提取公证的服务。保全网可为个人、企业机构和政府部门提供区块链数据保全服务和联盟链技术方案。而在区块链数据存证方面,中国的保全网则与同时创立的Factom团队有着深度的合作,在国内共同实现了数据锚定增信的技术框架。
(一)技术实现
1.区块链中的条目验证
比特币矿工完成的两个任务:按照顺序记录条目和审计条目的有效性。
(1)服务器接受数据条目,并将它们装入不同的区块,并修复条目的顺序。10分钟后,该条目的顺序通过插入比特币区块链的一个锚定而变得不可逆转。保全网通过对10分钟内收集的数据创建哈希值,然后把这个哈希值记录到比特币的区块链来实现这个功能。
(2)条目的审计是一个独立的过程,可以依靠信任第三方或不依靠信任第三方来完成。
不依靠信任的审计系统将类似于比特币网络。如果一个系统的有效性像比特币网络的数学定义一样完美,那么它可以实现程序化的审计过程。如果用于转移的规则能够由计算机进行审核,则应用程序可以下载有关的数据,并进行自我审计和审核过程。该应用程序可以通过下载数据条目,验证数据条目,并决定条目是否有效,从而使该应用程序建立起对系统的感知。
2.区块链中的否定性证明
区块链上的比特币及土地登记区块链中的否定性证明,以及许多其他系统需要解决一个根本性的问题:证明否定。它们证明了某个“东西”已经被转移到某个人,并证明这个“东西”还没有被转移给其他人。在无界系统里,否定的证明是不可能的,而在一个有界系统里它很有可能。加密货币通过限制交易数据可以存在的地方来解决这个问题。比特币交易只能在比特币区块链里被找到。如果某个交易没在比特币区块链里被找到,那它在比特币协议下就不存在,因此,该比特币就尚未被发送两次(双重支付)。
某些土地所有权记录系统是相似的。假设在一个系统里,土地转让要在政府登记,而且法律制度规定,未记录的转让是无效的(Sans Litigation)。如果一个人要检查某个产权是否明确(没有其他人声称对这片土地拥有所有权),答案就在政府登记处。利用政府记录可以证明为否定,土地不被第三方拥有。如果产权登记不是必需的,政府的注册表只能证明什么已被登记。私人转让很可能存在,注册表也就不能代表全部的转让情况。
在区块链中,数据分类有层次结构。保全网只在链中记录数据条目,诸多用户定义的链在保全网执行的协议中没有互相依赖关系。这不同于比特币,每一笔比特币交易都存在潜在的双重支付,因此它必须被验证。与把所有数据合并成一个总账相比,保全网通过把条目记录放到多个链当中,可以让应用程序在较小的空间内搜索数据。
如果用区块链来管理土地转让,使用某个链来记录的应用程序可以安全地忽略在其他链上的记录,比如那些本来用于保安摄像机的记录的链就不需要更新。如果法院判决需要变更土地转让记录,那么和其相关的链将被更新,以反映上述判决的结果。但更改的历史不会丢失,并且如果这样的土地产权变更的更改从法律角度或其他角度来讲无效的话,它记录的内容和顺序在区块链上都不能被更改或隐藏。
3.节点服务器如何管理链
保全网所运用的区块链底层技术是用一种去中心化的方式来收集、打包、安全保护数据,并把数据锚定到比特币的区块链上。保全网选用Fabric的技术体系,与业务合作方、关联方形成联盟链,将节点广泛地分布在互联网中。
节点主要有以下几种类型。
Kafka集群。Kafka消息订阅服务集群对网络的区块数据进行排序,以确保全网区块链有序延展,以及区块链有效账本数据结构一致。
Orderer节点。Orderer节点即排序节点,用于对全网络合法的交易数据进行排序并打包生成区块。生成区块后向Kafka集群进行推送。Orderer节点的布设用于确保业务数据有效、高效排序,同时为整体网络提供分布式备份与防篡改保障,并设置有管理员证书,可根据业务场景创建新Channel(子区块链)。
Peer节点。Peer节点分为Endorser(背书人)、Committer(确认人)两种节点类型。Endorser节点负责交易预处理与验证,并对交易权限进行检查,检查后返回交易至SDK,SDK将交易提交至Orderer节点进行排序。Committer节点用于维护账本结构,校对本地数据库的账本数据与Orderer节点返回的账本数据一致性,并将合法的数据块存储入本地数据库。
保全网同时在联盟链Peer节点将Factom服务的部署与调用写入Chaincode当中,实现了保全网联盟链与Factom网络的连接。因此保全网的链上数据在境外以Factom的联合服务器网络来实现这个目标。
这些服务器不断变换在系统中所承担的责任,永远不会只有一个服务器在控制整个系统,每个服务器都只是系统中的一部分。Factom的服务器每一分钟变换一次角色,没有服务器会永久控制系统的任何一部分。
在开始创建一个目录区块的时候,每个联合链服务器需要对某一部分的用户链负责。过程如下。
(1)所有服务器重设其进程列表(Process List)为空。
(2)用户通过与其记录信用积分(Entry Credit)相关的公钥提交付款。
(3)根据用于支付的公钥,轮值服务器接受该付款。
(4)该服务器向网络广播该支付被接受。
(5)用户看到支付被接受,然后提交条目记录(Entry)。
(6)根据条目记录的ChainID,其中一台服务器把条目记录加入其进程列表,并添加进入相应链的区块中(如果这是该链的第一个条目记录,那就创建这个新链)。
(7)服务器对网络广播该条目记录的确认,内容含有条目记录在进程列表中的位置(Index)、条目的哈希值(链接到条目记录付款),以及最新进程列表的哈希值。
(8)所有其他服务器更新该服务器的进程列表,验证该列表,并更新该链的区块。
(9)只要用户可以验证到相关的进程列表中包含自己提交的数据记录条目(Entry),那么他们就可以有足够的信心相信它会被成功地录入到Factom上。
(10)在一分钟时间结束时,所有服务器确认进程列表高度,揭示一个确定性的秘密数值(该值为一个反向哈希值,即一条较长的、连续的区块链哈希值的原像值),还有被处理区块的一系列哈希值(将与进程列表中的最后一项相匹配)。
(11)那一分钟的目录区块(Directory Block)是由所有服务器中定义的所有记录区块(Entry Block)组合到一起建造而生成的。因此,每个服务器都拥有所有的记录区块、所有的目录区块和所有记录条目(All Entries)。
(12)使用反向哈希值的集合来创造一个种子,为下一轮的ChainIDs重新分配服务器。
(13)在完成10个目录区块后,请执行以下操作。
①对最后一分钟的条目记录块创建Merkle根(Merkle Root),按ChainID排序。
②创建最后一分钟的目录区块,并计算其Merkle根。
③用10个目录区块的Merkle根创建一个锚定(Anchor)。
④用服务器的反向哈希值集合来创建一个种子,再用其选择下一个服务器来把锚定写到比特币区块链上。
(14)重复(再从第1步开始循环)。
在一分钟里,联合链服务器为其所负责的链建立进程列表,以及构建这些链的条目记录区块,这些将用于在一分钟结束时创建目录区块。这里的进程列表起到服务器用来向网络发布其对条目记录的处理决定的作用。
联合链服务器每四小时重新排名。排名由用户投票决定,用户必须在链上登记。登记信息包含任意数量的签名公共地址记录。一个用户的投票权重是由他们的个人资料的公共地址确定的。计算一个公共地址投票权重总和的函数如下。
在过去六个月中购买的积分加权(当月乘以6,上月乘以5,以此类推)。
在过去六个月中使用的记录数加权(当月乘以6,上月乘以5,以此类推)。
当我们说有n个服务器运行,排名前n个服务器是联合服务器,而另有n个为审计服务器。所有服务器都基于票数排名。n值最初指定为16,但这个数目是供社区内讨论的,可以基于交易量浮动。
所有服务器必须在每一个心跳周期播出心跳条目记录(一个条目记录确认时间可作为一次心跳)。如果服务器超时了还没有收到心跳或条目记录确认,服务器就会广播服务器故障消息(SFM)。如果关于某个联合服务器的SFM数目超过一半,该联合服务器就会被认为是“故障”,并降格为审计服务器,它原本的位置则被最高排名的审计服务器接管。升级的服务器将完成当前4小时任期任务。之后服务器重新进行排序,但发生故障的服务器必须再等另一个4小时的任期。
大多数联合服务器可以在设置链上修改心跳周期和超时规定。参照比特币的传播时间,心跳应该为4秒,超时时间为8秒。
值得一提的是,保全网在国内已经提供了免费的存证接口,基于现有的国内联盟链网络,用户无须为服务器支付费用。
4.上链的数据结构
(1)由一组分层数据结构所构成。
区块链由分层结构的区块(Block)组成,根部是目录区块(Directory Block)。这些区块(Block)构成了一个微型链,链上存储着压缩过的引用(Reference),为了避免数据规模过大,目录块中的引用只是记录区块(Entry Block)和ChainID的哈希值。这些记录区块包含了引用,这些引用指向了特定时间段内所有记录(Entry),记录区块也是微链的一部分。在系统里大部分的数据存储在叶子节点上,也就是那些记录。这些分层数据结构由比特币的算力维护,它们可以被概念化为不同的层。
①目录层(Directory Layer)——负责管理记录区块(Entry Block)的Merkle根(Merkle Root)。
②记录区块层(Entry Block Layer)——组织指向记录(Entry)的引用(Reference)。
③记录(Entry)——包含应用程序的原始数据或私人数据的哈希值。
④链(Chain)——属于应用程序的一组记录(Entry)。
(2)目录层(Directory Layer):如何管理记录区块的Merkle根。
目录层(Directory Layer)是分层结构中的第一级。它定义了哪些记录(Entry)的ChainID被更新过,更新发生在哪个目录块(Directory Block)负责的时间段(ChainID用于识别用户的记录属于哪个链,ChainID的生成将在后面讨论)。目录层含有ChainID和对应链块里记录区块(Entry Block)的Merkle根(Merkel Root)。
在目录块(Directory Block)中所引用的每个记录区块(Entry Block)占用64字节(分别是两个32字节的哈希值,ChainID和记录区块的Merkle根)。包含100万个这样记录区块的一个目录块的大小约是64MB。如果平均每个记录区块有5个记录,64MB的目录块将管理着500万个不同的记录。
应用程序通过目录块(Directory Block)可以定位到特定的记录区块(Entry Block),而无须下载所有的记录区块。一个单独的应用只会对一部分ChainID有兴趣。这极大地减小了使用系统时的带宽需要。例如,一个监控房地产转让的应用程序可以放心地忽略摄像机安全日志。
服务器收集记录区块的Merkle根(Merkle Root),然后把它们打包到一个目录块(Directory Block)。十个连续目录块再算出一个Merkle根,这个Merkle根会被记录到比特币区块链。这给比特币区块链带来最小的负担,却又足以保障保全数据的安全,把Merkle根写入比特币区块链的过程被称为锚定(Anchor)。
保全网所在的区块链系统里,目录块(Directory Block)的数据读写需要最多的带宽和存储。用户在建立了自己的链以后,需要保存这个时间点以后所有的目录块才能保证它们的数据能够在它们的链上被找到。
(3)记录区块层(Entry Block Layer):记录区块层如何管理哈希值和数据。
记录区块(Entry Block)是这个系统的第二个分层。一个个体应用将会关注各种各样的ChainID,在寻找记录的应用需要记录区块,可以从一个ChainID搜索到所有可能相关的记录。
每一个目录区块(Directory Block)内都为每个有更新的ChainID记录下一个记录区块(Entry Block),记录区块包含着条目记录(Entry)的哈希值。条目记录的哈希值同时证明了数据的存在和在分布式散列表(Distributed Hash Table,DHT)网络中找到记录的钥匙。
记录区块(Entry Block)包含了和一个ChainID有关的全部记录(Entry)。如果某个记录不是关联到某个记录区块的话,那么可以认为这个记录并不存在。这样的设计能让应用程序很容易地证伪,方便地识别哪些记录是真实可靠的。
记录区块(Entry Block)本身并不包含记录(Entry)。比起所有数据都被集合起来放入区块中,这种方式会让记录区块的体积更小。把记录从记录区块中分离出来,也会让数据更加容易审计,审计员可以在一个单独的链中发布记录,用来批准或拒绝一个普通链中的记录。审计员可以在记录中添加拒绝的理由。如果一个应用程序信任这个审计员,那么就可以直接采用这个审计员对记录的决定(批准或拒绝),不用再去重新审核一次记录。然后这个应用就可以只下载那些已经被审计通过的记录。多个审计员可以引用相同的记录,单个记录只会存在于分布式散列表(Distributed Hash Table,DHT)中一次。这些记录的容量应该会比刚开始的32字节大很多。忽略列表不需要让应用知道已经被忽略的完整对象。
一个记录会详述一宗土地转让的细节,会根据此类交易的类型决定记录在链的什么位置。一个或多个审计员会在他们自己的链上引用这条土地转让的哈希值记录,并通过添加加密签名来表明此条记录有效或无效。土地转让的文件只需要存储一次,之后就可以在多条不同的链上被引用。
(4)记录(Entry)的创建。
记录是被用户创建并提交到保全网的。通过散列和编码信息,用户可以确保记录的隐私性。如果编码或隐藏数据是不必要的话,那么记录可以替换成为纯文本。
通过记录一份文档的一段哈希值,保全网可以提供基本的发布证明(Proof of Publication)——保全书。待数据提交上链,人们可以生成文档的哈希值,并和之前链块记录的哈希值进行比对,来判断文档是否是当初发布的那个版本。
对数据的处理可以有很大的灵活性,可以出现类似超链接的东西。数据还可以更庞大,但不能过于庞大,数据越大,需要付的费用也越多。这和比特币比较相似。超过100MB的比特币转账数据是可能发生的,但需要支付更多的转账费用。
保全网区块链可以处理比比特币网络里大得多的数据。由于比特币的完整节点需扫描完整的区块链数据,所以区块链体积不能太大。在区块链中完整节点只需要扫描最高级的目录区块(Directory Block),并不需要扫描全部的链块数据。如果不对链数据感兴趣的话,完全可以忽略它。
用一个类似微博的系统进行举例说明。一个人可以制作一条文本记录(Entry)。他会用私钥进行签署,来展示这条记录确实来自他。“粉丝”们可以追踪他发布数据的那条链,随时获取更新。任何有他签署的记录会被“粉丝”们的应用软件识别出来,这记录就相当于一条微博。别人可以通过添加记录到名人的链上来转发这条名人的微博。
(5)记录上链的过程。
区块链中的链是记录的序列,反映了与一个应用相关的事件,如图2.28所示。这些序列是比特币2.0版本链的核心部分,用文件证明了这些事件序列,并提供了针对一个发生的事件序列的一个审计线索。另外通过加密签名,这些事件可以被证明是来自一个已知的来源。
链是对于数据的逻辑诠释,放置在目录区块和记录区块中。目录区块表明了哪些链被升级,记录区块表明了哪些记录已经被添加到了链上。这有点类似于比特币完整客户端如何在本地保持未花费的交易输出(UTXO)数据。未花费的交易输出数据(目前)并不存在于区块链中,但它会被完整客户端所解读。
(6)点对点通信。
完整节点会创建一个网状网络,会将有效数据填满整个网络。联合服务器组是完整节点,但所有完整节点不会全是联合服务器组或审计服务器。这和比特币非常相似,矿工是完整节点,但所有完整节点不都是矿工。这会降低DDoS攻击联合服务器组的风险。它们可以在网络中连接到任何地方,去获取建立数据架构的所需数据。这些服务器是用来获得共识和广播签署数据的,它们会通过P2P网络来公布数据。P2P网络也限制了联合服务器组根据IP地址来禁止访问的能力,由于有效的通信数据已经被它们所连接的节点进行了混合,这也同样会帮助避免审查制度。由于审计服务器可以看到哪些记录应该被包含在记录区块中,审查服务器有将不良行为转化为良好行为的激励措施,所以它们才会被联合服务器组投票选出。
(7)数据保存和传播。
区块链数据架构(目录区块、记录区块、记录)是公开的且将会被保存在两个地方。联合服务器组和审查服务器需要保存数据来做出正确的添加新记录的决定。由于这些服务器拥有这些数据,所以它们提供出来作为一种服务,可作为完整节点的一个补充。而不完全节点可以共享数据,这些数据仅是和它们特定的应用相关联。不完全节点的节点发现是由分布式散列表(DHT)处理的,如图2.29所示。
这个设置考虑到高效的节点数据分配,就算整个数据集增长到很臃肿的体积,也能正常工作。分布式散列表(DHT)还使得数据可以被任何联合服务器组或完整节点独立保存。就算所有完整节点都被从互联网中移除,数据依然可以通过很多对特定数据子集的团体进行分享。
(二)总结
保全网与Factom都是基于比特币区块链协议而构建的另一层分布式的、匿名的数据协议,它们赋予了比特币区块链技术拓展到无限应用场景中的能力。另外,用户无须持有加密货币也可以通过保全网使用Factom的系统功能。
一个分布式的、不可篡改的分类总账技术是比特币区块链技术所代表的本质创新和技术突破。很多人的梦想是把有数学法则保证的分类账本技术的诚实性和不可欺诈的特点应用到现实生活中。保全网与Factom通过允许基于区块链技术来创造新的分类总账,从而把区块链技术的好处和优势带到现实世界中。
本书评论