区块链构架就是造房子,10分钟带你走遍构建全程

2018-07-31 17:21:38 区块链大本营  点击量: 评论 (0)
本文作者Taylor Pearson,是The End of Jobs专栏作家、企业家,过去三年曾与数百名企业家互动交流。他喜欢研究创新型技术,对区块链技术有较深入的研究。

军备竞赛的一部分——黑客在逆向推演哈希函数方面做得越来越好,因此密码学家总是得想出更强大的哈希函数。

除此之外,难题友好属性使区块链难以篡改。如果我想替换像“我喜欢冰淇淋”这样的项,我不可能在没有其他参与者知道的情况下做到。

被加密哈希函数散列后,输入的微小变化也会导致输出的显著不同,从而达到防篡改的目的。

加密哈希函数看起来是随机的(因此没有碰撞),无法逆转,并隐匿输入,但同时它们又是完全确定的。这就是它们有用的原因!

这就是加密哈希函数的基础知识,下面我们来谈谈如何用这些哈希函数来构建区块链。

区块链内的传递哈希函数

上面关于哈希函数的部分实际上只是对如何散列单个信息(例如书籍或密码中的单词)的详细介绍。

如果你想要散列数据集合(如一堆文档或一系列交易),该怎么办?

让我们从「连续散列的线性序列」讲起。首先从一些数据A开始,然后将其散列以获得A#。

现在你想“混入”数据B。所以只需要添加B(A#+ B)并获取整个数据的哈希值。现在你有了一个新的哈希(B#),它包含一些关于A(来自你使用的哈希A#)和B的信息。

你得到的是一个改变A或B的任何东西都会产生不同的最终哈希值的哈希函数。这是一个传递哈希函数。

当人们谈起区块链,其中一个被大量提到的词是“信任最小化”。

一般而言,哈希,特别是哈希指针,是区块链信任最小化属性的核心组件。哈希指针只是指向某些其他数据结构(如前一个区块)的哈希。

这是一个了不起的组件,因为它很容易看出是否有人篡改数据。

假设我们有一个包含100个区块的区块链,而第十个区块包含整个《战争与和平》文本的哈希,我在文本中更改了一个字母,它将改变该区块和所有后续区块中的哈希指针。

哈希指针确保分类帐的完整性(即不被修改)。区块链被称为三重登帐(triple entry accounting)的原因是哈希指针这种数据结构难以被篡改。

例如,如果有两个人在一个项目上进行协作,而一个人试图回去修改某些东西以便他们能赚更多的钱,那么他们的合作伙伴就会立即获悉他们正在作弊——他们最终得到的哈希是不同的。

Merkle树

现在,我们想要散列的不仅仅是一个线性序列,而是一系列集合,比如比特币在其区块序列中的交易集合。那么就需要构建的是遍历每组数据的规则,通过再次减少问题以加密连续的一系列事物(A#,B#等)。

这里就引出了Merkle树。Merkle树允许你对数据区块进行分组并将它们一起散列到一个树枝结构中。

与区块链一样,只要我们知道树的“根”处的哈希点,我们就可以知道树中任何数据是否被篡改过。

如果一个交易中的一个比特被更改,那么它会更改后续的每个哈希并显示篡改。

使用Merkle树优于仅使用记录所有交易的摘要,因为它能更快更简单地检测某特殊交易是否包含在所有交易的集合中。

区块链

在上文中,我们提到了哈希函数以及它的三个属性:抗碰撞性,确定隐匿性和难题友好性。那么接下来,我们就将加密哈希函数连接在一起以创建传递加密哈希函数。

首先,当我们将一个Merkle树添加到传递加密哈希函数时,会得到一个区块链。每个区块包含一组“merkleized”交易,并且这些区块被链接在一起。

区块链工作量证明

中本聪的伟大在于他制定了一个新规则:你必须先解决一个非常困难的数学问题,才能将一组新交易(即一个区块)添加到现有链中。

这就是“矿工”的工作。他们需要解决一个非常困难的数学问题,在解决问题后他们会收到相应的奖励。这也被称作“工作量证明”,它是解决问题所消耗计算量的证明。

“区块链工作量证明”的发明是中本聪的最大创新。

由于使用工作量证明,像比特币这样的区块链变得更有价值,矿工凭此赚到更多的钱,同时它激励更多的矿工进入网络,当然也会增加数学问题的难度。

任何人都可以在他们的计算机上下载区块链,并且连续验证每个区块是否可以正确地散列。

他们还可以通过读取每个区块的难度并验证矿工的解决方案来计算生成此数据所需的计算量。

具有最多累积工作量证明的区块链(即最困难和最昂贵的)被认为是真正的区块链。

如果你拥有包含整个当前比特币区块链的磁盘,你可以快速地估算出用于构建这些数据所消耗的巨大能量。

这样做的好处是如果没有达到相应的算力,没有人可以“伪造”比特币区块链

至2018年中,如果从头开始构建比特币区块链,可能需要花费数十亿美元购买计算机和电力。

数字签名(即私钥/公钥加密)

数字签名是架构区块链的最后基元。可行的数字签名方案与手写签名大致相同,它们都具有两个核心属性。

首先是可验证性。如果我使用私钥签署交易,则其他人必须能够使用我的公钥对其进行验证。类似的,只有你自己可以签署自己的签名,但任何人都可以看到它是你签署的。

私钥和公钥匹配为密钥对。私钥不与其他人共享,它用于签署并证明交易。

公钥则可以提供给每个人,他们用公钥验证你的签名,而无需他们自己签名。

你的公钥是私钥的哈希值。而你的地址(例如接收比特币的地址)是你的公钥的哈希值。

如下所示:

私钥==散列==>公钥==散列==>地址

由于加密哈希函数的隐匿性,你可以毫无顾虑地发布自己的地址,其他人可以向你发送比特币、以太币等加密货币,却无法反向找出你的私钥。

第二个属性是不可伪造性。你的签名与特定文档相关联。自然地,你不会希望其他人能够从一个文件中“剪掉”你的签名再将其粘贴到另一个文件的底部。

比特币使用椭圆曲线数字签名算法(Elliptic Curve Digital Signature Algorithm)来实现这两个属性。其他区块链和数字加密货币使用不同的数字签名方案,但都具有可验证性和不可伪造性这两个属性。

区块链类似于书籍

我认为将区块链视作书籍可能是研究它的最简单的方法。一本书是一系列页面:

数据——每页上的文字。

元数据——元数据是信息本身。在每一页的顶部或底部,有一些关于书籍的信息,如书名,章节标题和页码。

区块链是一系列的区块:

数据——区块的内容

元数据——对前一个区块的引用和该区块中包含的数据的哈希。

即便你撕下书中所有页面,你仍可以重新按照页码组合它们。

同样,在区块链中,每个区块都引用前一个区块的哈希值,从而可以验证交易发生的顺序。

哈希实际上比页码更强大,因为哈希包含该页面的所有数据。而撕下一本书中的某一页并涂改其他相关页码是有可能骗过你的。

然而在区块链“书”中执行相同的操作是及其困难的,因为更改页面上的任何一个字母都会改变哈希值。

区块链技术的演变

现在,让我们组合这些基元,看看它们如何构建简单的区块链。

以下这些类型的区块链是比特币和以太坊等数字加密货币的基础。了解它们的工作原理对理解其他所有区块链和数字加密货币都有帮助。

Goofy Coin

GoofyCoin是我们可以设想的最简单的区块链。

Goofy可以随时创造新的虚拟货币,并且这些新创造的虚拟货币归他所有。每一个币有Goofy用私钥签名的唯一ID,这样所有人都可以使用Goofy的公钥来确认币是有效的GoofyCoin。

拥有Goofycoin的人可以通过加密操作将其转移给其他人。如果Goofy想要将一枚虚拟货币转移给Alice,他会创建一个交易,说“将这笔钱(this coin)交给Alice”。

因为Goofycoin只能通过加密操作发送,所以“this”是指向所讨论虚拟货币的哈希指针。Goofy用他的私钥签署此交易,使其成为有效的交易。任何人都可以通过确认Goofy的签名来检查它是否为有效的交易。

但是,事实上GoofyCoin存在安全问题,Alice可以用她刚获得的虚拟货币进行一项交易,比如向Bob支付三明治的费用。

但是,如果Alice又使用它来购买Chuck的奶昔呢?

Bob和Chuck都会认为他们现在拥有一枚GoofyCoin。它们看起来都像是有效的交易,因为Chuck和Bob可以看到Alice的签名并在区块链上追踪它,并发现它是有效货币。

这种情况被称为双重支付攻击。我们当然不能容忍用同一枚虚拟货币既买到三明治又买到奶昔。

双重支付攻击是功能性加密货币需要防范的主要问题之一。

为了解决双重支付问题,我们需要创建一个名为ScroogeCoin的新虚拟货币。

ScroogeCoin

ScroogeCoin类似于GoofyCoin,但有做出了一些不同的改变。

与GoofyCoin不同的是,Scrooge发布了一个包含所有交易历史的区块链。

Scrooge会签署区块链中每个区块的哈希指针。那么任何人都可以通过检查区块上的Scrooge签名来验证交易是否有效。

因为Scrooge查看过每笔交易,所以他可以确保没有人双重支付。如果Alic

大云网官方微信售电那点事儿

责任编辑:售电衡衡

免责声明:本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
我要收藏
个赞