内容简介:、
、
区块链技术最早是由斯图尔特·哈伯和W.斯科特·斯托内塔于1991年提出的,这两位研究人员希望实现一个文档时间戳不能被篡改的系统,但直到近20年后,随着2009年1月比特币的推出,区块链才首次在现实世界中应用,大家所熟知的 挖矿 ,其实就是在寻找一个合适的nonce整数,使得如下不等式成立:
SHA256(SHA256($version+$hashPrevBlock+$hashMerkleRoot+ $timeStamp+ $target+ $nonce)) <= $target
本文就区块链与加密数字货币的基础知识做一下科普,文中会提到上面变量的含义。
定义与工作方式
区块链(Blockchain),从字面意思解读,即是一组用链(chain)串起来的区块(block),用到这个场景,是指数字信息(block)在公共数据库(chain)的存储
,一种分布式记账系统(可用于数字加密货币,例如,比特币 ),可能是自因特网以来最重要的发明,区块包含如下三个部分:
-
交易的相关信息 ,比如日期、时间、金额等。
-
交易的参与方 ,这里存的不是真实身份信息,而是数字签名。
-
区别与其他区块的信息(hash值 )。
在比特币的区块链中,一个区块可以存储最多1MB的数据。
为了将一个区块加入到这个区块链,需要发生4件事情:
-
交易必须发生。 在实际 中,一个块会包含很多个交易。
-
交易需要被核实 。当用信用卡购物的时候,信用卡交易中心会去核实你的签名(与申请信用卡时留的签名进行 比对)或者通过密码(只有用户自己知道)来核实这次交易的真实性。对于区块链而言,这项工作就交接给了计算机网络,当交易发生后,这个计算机网络会迅速检查你的交易是否按你所说的方式进行。也就是说,他们会确认购买的细节,包括交易的时间、金额和参与者。
-
交易必须被存储在区块(block)中 。当交易被核实后,交易的金额、参与者的数字签名会被存在区块中(和成千上万个其他交易一起)。
包含此交易的区块需要一个hash值, 一旦一个区块的所有交易都被核实(代表挖矿成功),就必须给他一个唯一的识别码,称为hash值,然后这个区块就可以被添加到区块链中了。
钱包、公钥与私钥
钱包(wallet): 加密货币(比特币)进行交易的载体,是计算机的一个程序,包含一对唯一的key,即公钥和私钥,在 第一次进行交易的时候产生。
私钥: 授权用户从帐户中支出、提取、转移或进行任何其他交易,在交易广播到区块链网络之前,用私钥对其进行 数字签名,签名证明了私钥的所有权,私钥需要妥善保管,丢失后,钱包里面的Coin将再也不能被找回(64 由 0-9 or A-F组成的字符串,必要时可以保存在纸上,放到保险箱里面)。
公钥: 由私钥经过复杂算法生成(无法根据公钥反向解得私钥),别人通过公钥可以证明那个数字签名的确由这个用 户的私钥生成。一旦交易被核实有效,资金将被发到接受者的公共地址,公钥丢了没有关系,可以通过私钥重新生成。
公共地址: 由公钥经过hash生成,像一个银行账号,当参与方达成协议,发送者需要公共地址才能将Token或者Coin 发送给接收者,接收者随后可以使用他的私钥消费或提取。
安全性
区块链技术通过如下三种方式来解决安全和信任问题:
-
按线性和时间顺序存储, 也就是说,新块总是被添加到区块链的“末端”。比特币的区块链,每个区块在链上都有一个位置,叫做“高度”,截至2020-04-1820:36 ,区块的高度已经超过626548。
-
极大增加区块内容被修改、删除的难度, 这是因为每个区块都包含自己以及之前区块的hash值。假设某个黑客更改了先前的一个区块的内容,那么这个区块以及之后的所有区块的hash值都会发生变化,为了掩盖这次修改,他需要将这些区块的hash值都重新算一下,而这会付出的代价,同时,每个区块在区块链网络中都有一个高度,从而使得删除某个区块变得不可能。
-
Consensus Models 测试, 区块链网络要求计算机(用户)求解一个复杂的计算数学问题来证明自己,当某台计算机解决了其中一个问题,它才有资格向区块链中添加一个区块,但是将区块添加到区块链的过程(俗称”挖矿“)并不容易,截止到2020年4月,比特币网络解决其中一个问题的几率约为15.5万亿分之一,为了在这个几率下求解复杂的数学问题,计算机需要花费巨大的电力来运行程序。
Proof of Work 与 挖矿
Proof of Work是许多加密货币的基础,它描述了一个系统,这个系统需要 付出不小但可行的努力 来阻止对计算能力的轻率或恶意使用。
为一组比特币交易生成任意hash值对现代计算机来说都是微不足道的,因此为了把这个过程变成 更像一个正经的工作 ,比特币网络设置了一定的 难度 ,即为这个hash值设置了一个 target ,target越低,有效hash的集合就越小,生成一个hash就越困难。
由于给定的一组数据只能生成一个hash,矿工如何确保他们生成的 hash小于等于target? 它们通过添加一个称为nonce的整数(number only used once )来改变输入的数据,一旦找到一个有效的hash,它就被广播到网络中,同时区块被添加到区块链中,找到这个nonce整数的矿工就能获得数字货币奖励, 这个nonce整数就是要解决的数学问题。
Bitcoin 区块头包括如下部分:
挖矿成功, 当且仅当找到一个合适的nonce整数,使得如下不等式成立(对于一个区块而言,变量version、hashPrevBlock、hashMerkleRoot、timeStamp、target是固定不变的):
SHA256(SHA256($version+$hashPrevBlock+$hashMerkleRoot+ $timeStamp+ $target+ $nonce)) <= $target
一个实际的Bitcoin的区块信息:
包含的交易信息如下(此区块有2570个交易,截取了其中2个):
51% Attact、Race Attack 与 Double-Spending
Double-Spending意味着将同样的钱消费了两次,任意一种加密数字货币,若不能解决Double-Spending问题,则没有人愿意使用,比特币能够存活这么久并且得到很多人的追捧,说明它已经解决了这个问题。
先看一下实际生活中的例子,去星巴克购买咖啡,你把50元给服务员,服务员立即确认,然后将咖啡给你,这个交易就完成了,那个50元已经放到收银员的柜子里面,你没有办法再次获得那个50元来进行消费。通过微信或者支付宝进行消费,只是将实体货币电子信息化了(不同于数字货币),比如你账户有1000元,消费之后会变成950元,不可能通过极短时间内连续购买2次来实现只扣一次的钱,银联(信用卡)交易系统保证第二次交易在第一次交易完成后的基础上进行。
数字货币,以比特币为例,一开始大家账户里面都是没有Coin的,通过挖矿来获得Coin,而数字货币是分布式记账系统,没有一个中心化的地方存储大家的Coin,你的Coin只有你自己的私钥能提取或者消费,一旦私钥丢失,你原先的Coin将永远无法获得(包括自己和别人),别人通过你的公共地址发给你的Coin也将永远无法获得。因Coin是一串数字(存在你本地),有可能通过拷贝两份从而达到消费两次的目的。
看一下比特币是如何解决这个问题的:
场景: 某个买家将1个比特币通过私钥进行数字签名后发给卖家A的公共地址,然后将同样的比特币签名后发给另外一个卖家B的公共地址,卖家A和卖家B各自通过自己的私钥确认了这两个交易,然后这两个交易都进入了比特币网络的待确认池。
-
通常来说,第一个交易会得到确认、并被矿工核实以便加到区块链的下个区块中,第二个交易会被矿工判定为非法、得不到足够的确认,从而被移出网络。
-
由于网络存在延迟, 这两个交易可能同时被矿工从待确认池拿出来进行确认,从网络获得最大确认数的交易将包含在区块链中,而另一个将被丢弃,从而会出现卖家A获取不到Coin,被卖家B获取到的情况。对买家来说,第二次是重复消费,但是对卖家来说,不存在谁是真正Earning、谁是重复Earning, 但是很明显,对卖家A不公平!
解决办法: 建议卖家等至少6个Confirmation,“6个Confirmation”是指在一个交易被添加到区块链之后,又添加了6个包含其他若干交易的区块。每个交易、区块都和前面的交易、区块有关联(基于hash)(所以,每次有新区块添加到区块链,都是对前面区块中交易的再次确认),买家必须回去并反转这6个区块中的所有交易才有可能Double-Spending他的Coin,而这在计算上是不可能的。当卖家收到了6个Confirmation,他可以肯定这不是买家发送的Double-Spending Coin。
下图是2020-04-25 10:31截的图,Height为627510的Confirmations是6,在他后面的区块数目是5,包括所在区块的一次确认,故是6个 Confirmation :
51% Attack: 如果攻击者以某种方式获得了网络51%的hash能力,则可能会发生Double-Spending,“hash能力”是指验证事务和区块的计算能力,如果攻击者拥有此控制权,他可以反转任何事务并创建一个私有区块链,每个人都会认为它是真实的。但到目前为止,还没有发生这样的攻击,因为控制51%网络的成本非常高,并且一旦被发现,比特币的价值将瞬间归零,也就是说攻击者花了巨额的成本,换来的是零价值的东西,这也是一个悖论。
Race Attack: 当攻击者将同一Coin快速连续地发送到两个不同的地址时(一个是他自己的地址,一个是卖家地址),很显然,只有其中一个地址最终能获得Coin。一旦完成了这两个交易,这两个交易都会进入一个未确认的交易池,无论哪一个交易首先得到验证并得到6个确认将被接受,另一个将被丢弃。作为一个卖家,你可能先得到6个确认,但如果攻击者先得到6个确认,那么你就不会收到你的Coin,这就是为什么说至少要等待6次确认。
优点与缺点
优点:
-
通过消除验证过程中的人为参与提高准确性。
-
通过消除第三方验证降低交易成本。
-
去中心化使得篡改变得困难。
-
交易是安全、私有和高效的。
缺点:
-
与挖矿相关的技术成本高。
-
每秒能够处理的交易数量低,对于比特币网络而言,平均每10分钟产生一个区块,每个区块平均包括3000个左右的交易。
-
因其私密性,可能会被用于非法活动。
-
容易受到黑客攻击。
实际应用
-
加密数字货币,例如,比特币。
-
医疗记录,医疗保健提供商可以利用区块链安全地存储患者的医疗记录。生成并签署病历后,可以将其写入区块链,为患者提供病历不可更改的证据和信心。这些个人健康记录可以用私钥编码并存储在区块链上,这样它们只能由某些个人访问,从而确保隐私。
-
内容分发,改变传统的内容分发模式,区块链上的智能合约(SmartContract)确保收入始终由权利人获得。
-
供应链,供应商可以使用区块链记录他们购买的材料的来源,这将允许下游企业验证其产品的真实性。从产地到最终消费者,食品行业正在借助区块链来追踪食品的路径和安全性。
以内容分发平台为中心的模式
Smart Contract保证收入始终由内容创作者获得(内容分发平台已无绝对权力)
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 挖矿 = 求解一个合适的 nonce 整数,区块链与加密数字货币知识科普
- 动态规划求解最长公共子序列
- Haskell – 优化微分方程求解器
- 最大子序列的求解-算法之一分析
- 八皇后问题分析和 golang 求解
- 漫画:一文看懂螺旋矩阵求解
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Definitive Guide to Django
Adrian Holovaty、Jacob Kaplan-Moss / Apress / 2007-12-06 / CAD 45.14
Django, the Python-based equivalent to the Ruby on Rails web development framework, is presently one of the hottest topics in web development today. In The Definitive Guide to Django: Web Development ......一起来看看 《The Definitive Guide to Django》 这本书的介绍吧!