从0到1全面学透区块链(小白也能看得懂的区块链科普,卡卡带你学(一))
大家好!我是卡卡,感谢大家的关注。
一.前言
在当今互联网时代,网上购物是一项必不可少的技能,我们最关注的是网上支付的安全性,以及个人隐私的保密性。在交易中,买家和卖家的信任是基于第三方支付机构(如支付宝),而在我们印象中,第三方支付机构的信用绝大多数时候是有保证的。
图 1 传统的电子商务
但是,这种方式并没有我们想象中的完美,一方面,用户需要支付交易之外的中介费用,比特币交易把个人信息交给他们作为担保;另一方面,它们作为中心化的公司机构,就有可能存在人为风险导致系统出现故障,黑客入侵攻击导致用户数据隐私泄露,又或者出现不可抗拒的意外导致机器出现损毁等等一系列让人难受的问题。
所以,我们就需要思考能否实现一个系统,直接能够解决交易双方的信任问题,又能保障用户隐私,这样的话陌生人之间也能无顾虑地进行交易(剁手),消灭可恶的中介。
二.什么是区块链?
2008年,在论文《比特币:一种点对点的电子现金系统》中,作者中本聪提出了一种创新的解决思路,巧妙地融汇了密码学,网络科学,计算机科学,社会学等学科的现有产物和技术,架构出了比特币的底层技术–区块链。
图 2 交易方式的变迁
区块链,这个原本“高冷”的技术词汇,近年来频繁地进入人们的视野,引起了当前一波又一波最为火热的争议,投资者为它疯狂,技术极客为它痴迷。到底什么是区块链呢?一般人都是因为比特币,才知道区块链是比特币的一项关键的底层技术。
根据百度百科的定义,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。
通俗地说,它就像是一个分布式的数据库账本,加密后被放到网络上,每个人都可以有一份备份,大家都来一起维护,所以能安全地记录着所有交易信息。
三.为什么要分布式记账?
人类社会的交易方式随着时代不断变迁,从远古时代的以物换物,到黄金、纸币,再到支票、移动支付,我们的交易方式变得越来越方便快捷,但同时伴随的代价是银行等中心化机构向用户索取不菲的记账费用,以及不必要的用户隐私信息。
我们每天都使用的互联网很好地解决了信息的传输问题,但是在价值转移方面却不太在行,所以电子交易系统采用的是传统货币交易那套基于第三方信任机构的方法。但是经历过金融危机的人都明白,政府、银行也不是永远靠得住的,也有可能倒闭、破产。财富只有掌握在自己的手上才是最真实的。
区块链的创新之处在于创建了一个基于密码学而非信任模型的公有账本,交易数据记录在区块链上,这样的一个分布式账本拥有任何人可以审查、无法篡改的特性,提高了电子交易系统的分散性和安全性。系统的安全性在一定条件下是可证明的。
在区块链的分布式的点对点网络中,用户的账本都是人手一份,交易可以在用户之间直接进行。在这样的交易体系中,做假账干坏事是非常难、作恶成本非常高的。
下面我们举一个例子:小青蛙和爸爸妈妈都各自保管着一本账本,每本账本都记着一样的交易条目,每个人想买东西时,必须先告诉其他两人,大家都同意后,在各自账本中加上一条相同交易记录,才能付钱交易成功。
有一天,小青蛙看上了一件心爱的玩具,但是很昂贵,爸爸妈妈绝对不可能同意买的。小青蛙忍不住诱惑,偷偷地在自己的账本写上了这条交易,然后叫店家取货给小青蛙。但是店家到网络上一查小青蛙家的三本账本,发现爸爸妈妈并没有同意这项交易,所以店家就中断了与小青蛙的交易,小青蛙的小心思也就无法得逞了。
四.区块链是长什么样的呢?
顾名思义,区块链就是由一个个区块组成的一个链式结构,除了创世块(第一个区块)之外,每个区块都记录着上一个区块的地址,根据地址就能追溯找到前一个区块。
图 5 区块链的主链和侧链
具体到每个区块的结构,区块有区块头和区块体两部分构成。区块头封装了当前版本号(version)、前一区块地址(Prev-block)、时间戳(timestamp)、随机数(nonce)、当前区块的目标哈希值(target bits)、Merkle根(Merkle-root)等信息。区块体则主要包含交易计数和交易详情,所有交易构建成一棵Merkle树。
在这里,交易信息并不会包含用户的个人隐私,因为进行交易只需要提供个人钱包地址,钱包密码,对方钱包地址以及转账金额就可以了。
目标哈希值:用于调整挖矿难度(“挖矿”后面还会解释)。
随机数(nonce):一个在加密通信只能使用一次的数字。在认证协议中,它往往是一个随机或伪随机数,用来避免攻击。
Merkle树:在密码学及计算机科学中,Merkle树,又称哈希树(hash tree),是一种树形数据结构,每个叶节点均以数据块的哈希作为索引,而除了叶节点以外的节点则以其子节点标签的加密哈希作为索引。从点对点网络下载得到哈希树后,即可根据可信的顶部哈希值对其进行校验,验证数据是否完整、是否遭受破坏。简单来说,Merkle树的作用就是生成一串容易验证交易信息完整性的数字。
图 6 区块结构
五.如何用密码学技术保障交易数据完整安全?
记录着交易信息的区块在错综复杂的网络上自由的传输, 我们的财富此时在区块链其实就是一串二进制的比特符号,先不说有可能被黑客攻击修改我们的交易信息,网络信道的噪声等传输时出现的问题也是大量存在。在这个过程中,我们就需要想办法保证区块信息的完整性和安全性,这里我们借助了密码学的工具来解决这个问题。
我们需要理解的第一个密码学的基础知识是哈希函数(hash),哈希函数是一个数学函数,具有以下三个特性:
1。其输入可以是任意长度的字符串;
2。产生固定长度的输出,区块链技术中,输出长度为256比特长度;
3。计算难度不高,计算时间与输入长度成正比;
哈希函数为什么是安全的呢?
攻击哈希的过程难度高,但是验证简单。因为哈希函数具有单向性,一个输入对应唯一一个输出,而输出对求出输入值并没有帮助,所以你只能用一个个数字代进哈希函数里面猜。这就像是做一道数学高难度的计算题,解题过程很漫长,但是判断结果对错只需要对一下答案即可。
在现实中,我们是如何保证一份文件的有效性的呢? 我们会给文件签上我们的大名,因为字迹是每个人特有的,只有你自己才能签出自己的风格;或者我们也可以盖个章,因为这个章只有一个,别人伪造不出来,具有唯一性。同样的道理,密码学中的数字签名这种技术,解决的就是数字世界里的签名问题。这种签名用到了哈希函数以及加密算法,具有安全有效、容易验证等等优点。
图 7 椭圆曲线数字签名算法
Alice想要传一份重要的文件给Bob,为了保护文件不被修改,所以决定给文件附上一个数字签名,好让Bob验证。
步骤一,Alice计算出文件内容的哈希值,唯一的文件只能计算出一个唯一的哈希值(即签名);
步骤二,用一个私有的秘钥和公开的加密算法,将签名加密成一串已经失去原样的数字;
步骤三,将加密后的签名和文件组合到一起发送给Bob;
步骤四,Bob收到信息后取出加密后的签名,用公开的秘钥就能解密出签名的明文;
步骤五,Bob用哈希函数计算出传过来的文件的哈希值,与解密出来的签名一对比,就可以验证文件是否被修改了。
","content_hash"!"c8a4dae3
评论