首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

区块链深度思考:五大原则之记录不可篡改

如果我们能够找到一种大家认可的,可以确保信息记录不可篡改的方法,那就可以抛弃第三方信任角色。

文章字数1200 预计阅读时间5分钟

作者:Oliver Lee;配图:E.S LEE

第一章 认识区块链

不可篡改

如果你回家过年需要向亲戚朋友讲区块链,这篇文章能让你一分钟讲明白区块链最大的优点——数据不可篡改

我们都有微信群,微信群的聊天记录就是不可篡改的。

一个微信群,有500人,每个人手机上都有聊天记录的一个完整备份。任何群友都不可能去修改别人手机上的聊天记录,只能修改自己的,哪怕是马老师也做不到修改别人手机的聊天记录的,腾讯只能修改自己服务器上的聊天记录。任何人都可以修改自己手机上的聊天记录,但别的群友可以指正,只要多个群友拿出证据,就可以证明这个心怀不轨的人修改了记录。

所以说,微信群的聊天记录就是一个不可篡改的数据库。

微信群里记录的是聊天记录,聊天记录不可篡改。而区块链也是存着一些特定的“聊天记录”,这些记录在区块链世界里有独特的名字——交易。这些历史交易使用区块链的方式保存就不可篡改。其原理是和微信群是一样的,就是所有玩这个区块链的人(被称为节点钱包)都完整地保留一份交易的历史记录。这样任何单个人想修改这些历史记录,别的人都可以拿出自己的那一份备份,来证明这些心怀不轨的人试图作弊。只要发现这样作弊的人,其他人就会将这个人孤立掉,直接踢出这个网络。

想一下如果你管理一家公司,你的财务账簿如果出现造假谁是最大的怀疑对象?很显然就是你的财务记账人员。

为了避免这种问题,我们会建立一些财务制度,比如复核员制度、定期审计制度、随机检查制度、对账制度等等,这些都会有一定效果,但都有共同的缺陷,就是滞后性以及串通一气的道德风险。

如果不考虑成本和效率的话,最有效的方法可以是这样,我们找1000个财务记账人员,每一笔记账业务都随机选择其中任意一个人来记账,每个人在记账时都必须对之前的账目进行一次审计,确认无误后记上当前这笔业务。当下一笔记账人选定后,将账本交给下一个人,下一个人在执行一遍审计,如此连续下去。

我们假设审计程序是固定的,正确执行的结果都会将账簿中的错误记录进行纠正。这样做的结果使每个人记假账的动作变得毫无意义。

这个情景中只有一个账簿,如果我们在记第一笔帐时让1000个人同时见证真实性,并每个人建立一个自己的账簿,之后的工作就会更简单一些,每个被选中的记账人将要记账的信息发给所有人,这些人都对当前业务和上一笔业务进行审计并给出正确或错误的提示,这就是区块链的共识记账逻辑

我们可以相信,采取这种方式记录的信息是不可篡改的,如果你想修改历史数据,你必须换掉所有人手中的账簿,这很难做到;如果你要修改当前数据,你至少要把所有人手中账簿的上一笔记录都修改成和你的一样,同时还要保证你是被选中的当前信息发布者。

显然,不可篡改性是获得参与者信任的重要条件之一,区块链通过时间戳证明、首尾相连记账规则、哈希加密算法、共识机制等技术应用和机制设计,将记录不可篡改性做到极致。

每一个区块链项目都是由一个或多个“区块链”账簿组成,每个“区块链”都从生成第一个创始区块开始记账,这就是报纸的创刊号,编号为第0期。

如果这张报纸按照区块链的规则发行,那么从创刊号之后的第一期开始,上一期的全部内容要先用哈希算法加密成固定长度字符串,然后把本期的全部内容也哈希加密成固定长度字符串,两个字符串连在一起印在本期报纸的第一行,这个叫做区块头,然后就是本期报纸的全部正文,也就是本区块的具体内容,遵从这样的规则就实现了首尾相连的记账逻辑。

为什么这样首尾相连的记账就可靠呢?

我们需要先理解哈希的概念,哈希就是一个算法,能把任意长度的内容(无论是一个数,还是文章,图像,视频,总之就是任何数字化的信息)转换成一串看似没有规律的固定长度的数字(哈希值),并保证结果唯一,而从这个结果几乎没有办法推算出原始数据。

比如:数字1 的哈希结果是(下面是转换成16进制的字符串,一般我们用工具看到的都是16进制字符串):

0x6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b

既然哈希加密是可靠的,至少目前还是,我们可以忽略有人能够根据上面的65位乱码反推出区块内记录的详细信息,这使得哈希值可以被公开用来验证。

回到上面的首尾相连记账模式,每个区块记录都有个区块头,这里面用哈希加密方式记录了当前记账时间点上一个区块和本区块内容。

如果你作为一个记账人在记账时私自修改区块内信息,比如虚构一笔交易把别人的钱记到自己账户上,但是你可能忘了这是一个分布式数据库系统,网络上每个节点都拥有当前时间段要记账的区块信息,你的节点只是其中之一,那么你生成的新区快头就会跟别人不一样,系统会默认以多数人拥有相同信息为基础接受新的区块记账。

你的节点由于跟所有人都不一样,你被从链上抛弃,以后的信息都不会交给你帐了,这个就是分叉,悲哀的是这个叉上只有你自己。

而要想使你的修改生效,你必须让全网超过51%的节点都和你的区块信息一致,这样系统会认为你的数据是正确的,会抛弃另外49%的节点。当你知道节点数量可能是几十万、上千万的时候,相信你就会放弃这个想法了。

参考文献:本文转载火星财经专栏作者作品,版权归作者所有。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180903G1T28B00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券