当前位置:澳门新浦京 > 科技资讯 > 科技资讯比特币简易入门

科技资讯比特币简易入门

文章作者:科技资讯 上传时间:2020-04-18

1、首先,每个比特币的用户会通过比特币客户端生成一个私钥,并通过私钥生成公钥(公钥与收款地址相关性极强,可以简单理解为收款地址就是公钥),这等于就是这个用户的户头~别人向这个人转账必须输入这个收款地址。

三个星期之前出差西安的途中,花了4个小时阅读了一篇关于区块链基础知识的文章,后来又花了将近一个礼拜写下了这篇笔记,总算能够理解了一些区块链的皮毛。

前言

区块链可谓是最近一段时间被提及最多、最火的一个名词,以比特币为代表的各种区块链代币也层出不穷。而关注到技术本身,区块链到底是什么、区块链带来了什么等问题,却很少有清晰的介绍。

笔者在近一段时间也翻阅查找了各种技术资料以及研究,因此希望能写出一篇简单易懂的入门教程,从技术的角度来解读区块链。当然,笔者也并非这方面的专家,仅是在业余时间断断续续研究,有阐述不明确的地方也请谅解,如有错误也请指正,同时若想一起探讨区块链技术也是十分欢迎。

本篇文章主要介绍以比特币为代表的区块链技术,通过本文,你将理解区块链的加密原理、区块链网络运行原理,以及钱包、交易、区块、挖坑等概念。


科技资讯 1

提起区块链,不得不提到另一个更早进入视野的词汇:比特币。好比娱乐圈永不停歇的造星运动,比特币在今天已经不是电子货币唯一的明星,但其仍然是天王级的。比特币算得上是区块链1.0版本的商用案例,了解了比特币的前因后果,对理解区块链以及未来更多商用模式,是有帮助的。

历史

比特币是第一个使用区块链技术实现的应用,而区块链技术的本身并非是凭空出现,在此之前则要提到“密码朋克(Cypherpunk)”,这是一个由密码天才们松散组成的神秘团体,早先的数字货币则是在该团体中提出并传播的,比如大卫·乔姆的现金公司(DigiCash)使用的 Ecash、亚当·贝克的哈希现金(HashCash)(其中就用到了 POW)、戴伟的 B-money 等等,而他们都以失败告终。

2008 年 10 月 31 日,一个自称是中本聪(Satoshi Nakamoto)的发布了一篇名为《比特币:一个点对点的电子现金系统》的论文,其中所描述的比特币的区块链技术正是结合了以往失败的数字货币的技术特点而提出的一种去中心化的电子现金系统。
同年 11 月 6 日,中本聪发布了比特币代码的先行版本。
次年 1 月 3 日,中本聪在位于芬兰的一个小型服务器上挖出了比特币的第一个区块 —— 创世区块,并获得了首批挖矿奖励 —— 50 个比特币。


图1 比特币网络

先用一句话了解区块链是干什么的

其实用一句话来介绍还挺有难度的。区块链技术,本质上是为了低成本的解决人们之间的信任问题。额,好虚,用我司惯用语就是,没干货啊!那好吧,别局限一句话了,抄袭一段别人的概括(原文链接):

  • 从表现手法上看,它是一个分布式的账本
  • 从技术的角度看,它是一个分布式的链式数据库
  • 从用途的角度看,它是一个可靠的信用载体
  • 从用户的角度看,它是一个不需要第三方的信息共享平台
  • 从字面的意思看,它是一组区块,用链建立起连接关系的系统
  • 从社会的角度看,它是一个解决了信用问题的基础设施

恩,稍微具化了一点,先有个大致印象,接下来我希望用我记录下来的一些笔记,和大家一起搞明白区块链,或者说比特币的基础认知。

简介

科技资讯 2

简单地说,比特币中的区块链可以理解为一种分布式的数据库,其中存储着整个网络中的交易账本。而每个人都可以通过 P2P 的形式连接到区块链网络成为其中的一个节点,并同步所有的数据,同时可以读取其中的任何一笔交易。而新生成的交易数据通过挖矿机制定时地打包成新的区块并且写入数据库,并通过节点的共识机制得到确认。

由于其底层原理,比特币具有以下几点特性:

  • 去中心化:没有中心服务器,区块链运行在全网节点组成的 P2P 网络之上;
  • 匿名性:每一个节点仅暴露其 hash 地址;
  • 不可篡改性:并非无法篡改,通过挖矿机制使得篡改交易的成本十分高;

2、用户Alice向Bob转账时,输入了Bob的收款地址,也即是用Bob的公钥将这笔比特币锁定了,未来只有Bob才能使用这笔比特币。(用户的收款地址就是用户公钥)。

这篇文章的大致脉络

1. 比特币的诞生
2. 比特币的生产制造与交易过程(这里包含了大量的基础知识,是全文的重点)
1) 比特币的底层基础:加密
2) 概述公钥、私钥、钱包、比特币的对应关系
3) 比特币与挖矿(这里涉及一个关键名词 -- 共识机制,这很可能会另写一篇文章)
3. 比特币的难题
1) 双花问题
2) 矿藏枯竭
4. 区块链的未来展望(仅仅是展望,每个领域都有丰富的软文,跟房地产一样,看涨看跌争斗不息。以后随着不断学习再针对领域单独写文章吧)

必须说明,这篇文章有些文字或段落源自互联网,请原谅我在这个随意转发不尊重知识产权的网络里确实不知道每一处原文作者是谁。我可能会对部分文字进行重新编排,或修改为我喜欢的方式。因此特先声明,这些原创的知识点与思路都属于原文作者,请大家尊重知识产权。

好了,进入正题。


密码学基础

密码学在比特币中的作用十分重要,不管是涉及交易认证、比特币的所有权、挖矿等等,都依赖于密码学。以下主要简介一些用到的密码学基础:

而用户Alice为什么能使用这笔比特币呢?因为,比特币系统可以追溯到上一笔Charles给Alice转账的交易,在那笔交易里,用户Charles用Alice的转账地址,将比特币锁定,因此只有Alice使用其私钥解锁,才能够使用这笔钱。

一、比特币的诞生

不知大家还记否,房价是从什么时候开始丧心病狂的暴涨的?大概就是2008年之后。2008年发生了什么?奥运会!没错,但还有一件大事就是全球性的经济危机。而中美两个超级大国最主要的应对方案是什么?就是大家耳熟能详的“印钞机模式”。我想导致我很久买不起房的重要原因(根本原因还是自己比较怂)是那4万亿大部分流向了以房地产为核心的基础设施的建设,于是1-2年之内,通货膨胀在生活方方面面体现出来,而房价则更是一江春水向东流,永远不能再回头了。

问题来了,印钞机谁能够开启呢?就是各国的央行。在金融领域,央行掌握了绝对的力量,掌握了经济体的生杀大权,只要他想,分分钟可以让你的财富灰飞烟灭。这让天生追求“Freedom”的互联网Hack很不满,他们希望希望用去中心化的互联网技术来颠覆这种中心货币权威。于是,一个(也可能是一群)叫做中本聪的家伙横空出世,发表了一篇牛逼哄哄的论文,Bitcoin:A Peer-to-Peer Electronic Cash System,宣告了比特币的诞生。

先说说现有的中心化的支付体系:

  • 第一,货币政策是由各个国家中央银行规定的,这就导致了可能的货币滥发,中本聪想要建立一个没有中心机构、并且规则明确的货币供应方式;
  • 第二,现有的支付体系是中心化的,比如支付宝所扮演的就是中心化的机构,因为买家与卖家彼此的不信任,必须要一个中心化的机构来扮演信用中心,大家都与信任中心发生联系。

这样做会导致两个问题:一是信任中心权力越来越大,二是我们要为这种信用提供费用

而中本聪要建立的货币体系,本质上就是要解决上述的问题,因此比特币网络最重要的特征就是:去中心化、公开透明,从技术上解决点对点信任问题;并且将比特币的总量恒定在2100万枚,从而避免可能的通胀。

上述就是比特币的诞生缘由。没有压迫,就没有反抗的故事一遍又一遍的在Hack身上上演着。这个世界存在着千千万万个中本聪,技术就是他们的武器,是他们内心自由的源动力。所以,身为一个北京昌平回龙观社区的村民,我真心的呼吁每个(甚至是每对)IT父母,让孩子从小就学习IT技术,回龙观能否成为中国的帕洛奥图,得靠我们这两代人啊!

科技资讯,Hash 算法

Hash(哈希/散列)算法是现代信息基础中非常重要的技术,它可以将任意长度的二进制值(明文)映射为固定长度的二进制值(Hash 值),而却难以通过 Hash 值找出其对应的明文。
这里以 MD5 Hash (Hash 函数的一种) 为例:

$ echo "Hello world by qiutc.me" | md5
$ 6bebc6c6a6e6f31d36d2e2d493e5229b

一个理想的 Hash 函数 H(x) 是一个映射函数,函数将任意长度的输入映射成 n-bit 的输出,并且需要遵循几个原则:

  1. 单向性:对于一个输入,其输出是绝对的,并且可以很容易地使用 H(x) 得到输出,而原则上 H(x) 是无法逆向推导的,比如说你只知道 Hash 值:6bebc6c6a6e6f31d36d2e2d493e5229b ,却无法以此得到其对应的输入。
  2. 抵抗碰撞:从单向性来看,如果攻击者想要破解 Hash 值,那么他只能只用暴力穷举的方法,也就是说他需要不断尝试任何可能的输入,每一次得到输出的 Hash 值都与需要破解的 Hash 值进行对比,直到它们相等从而得到输入值。从概率上来讲,如果 Hash 值的字符长度为 n,那么意味着破解者最多需要尝试 m^n 次破解(m 为 Hash 值可能使用到的字符个数),平均而言需要尝试 (m^n)/2 次。

理论缺陷:理论上对于输入的值,其个数是无穷无尽的,但是对于输出,其个数限制为 m^n 个,也就是说很可能出现对于多个输入会得到同一个输出,因此这也是单向性的一个特征,一个输入绝对对应一个输出,而一个输出不一定只对应一个输入;当然这个缺陷理论上是无法解决的,因此只有通过算法去避免这种情况的出现,使其概率极小,在一定范围内的缺陷还是被认为可接受的。

以上例子中的 MD5 Hash 一个经典的 Hash 算法,然而它已经被证明为安全性不高,类似的还有目前流行的 SHA-1 、 SHA-2 等 Hash 算法,在比特币中主要用到的则是 SHA256 和 RIPEMD160。

3、交易发生后,将广播全网。很短的时间内,全网所有的节点会接到这笔交易。接到这笔交易后,每个节点会先把交易放入内存,然后对交易进行合法性检验,检验通过后,这笔交易进入有效交易池,等待被装入区块。

二、比特币的生产制造与交易过程

去中心化,意味着你与陌生人之间的转账支付是直接进行的,没有任何第三方的担保,在已经习惯银行、支付宝、微信等第三方信任平台的今天,你能想象吗?让我们看看中本聪的设计思路。

中本聪设计的去中心化比特币网络中,每一个用户自己都有一个账本,这个账本记录了从第一枚比特币诞生以来的所有交易记录。Alice要向Bob转账5个btc,会在网络上喊一句“Alice要转账5btc给Bob”,Tom听到Alice的声音,掏出自己的小账本,检验了一下Alice的账户,发现Alice有5个btc,便写下Alice向Bob转账5个btc,同时也喊出“Alice要转账5btc给Bob”,这样一传十十传百,直到每个人都把这笔交易记录在自己的账本上,每一个账本都是一样的,这就是所谓的去中心化账本,它几乎不可能被摧毁。传统网路中,如果银行体系被破坏了,那么大家的账目就混乱了。但是在比特币网络中,每个节点都明确的记录了中本聪开比特币以来的所有账目,即使节点几乎都被炸毁了,只要还剩一个节点,就可以还原出所有记录,除非瞬间摧毁整个互联网。

上面描述的是一个最粗略的过程。在去中心化网络中,所有人都是不可信任的,因此在实际的转账过程中,第一件要干的事就是验证这条消息的有效性,否则人们在网上乱喊岂不天下大乱。形象点说,就是Alice在发布这条消息的时候,给消息签个名。其他人收到消息后,对照一下“笔迹”,发现确实是Alice的,就认可这条消息。而签名的验证过程,就涉及了比特币和区块链的技术基石 -- 加密算法。具体说,是椭圆曲线数字签名算法,这是一种非对称加密算法。

加密解密

4、与此同时,网络上面所有的矿工节点,正在疯狂的计算着谜题。谜题的解题方式就是:将有效交易池里的近千笔交易(TX0,TX1,TX2...),上一个区块的Hash值,Nonce参数组合成一个文本,然后计算这个文本的Hash值。通过Nonce的不断变化,计算出的Hash值也会不断变化。

1. 非对称加密算法

在了解非对称加密算法之前,先看看什么是对称加密算法。对称加密的关键在于双方要实现约定加密方式。但如果事先无法约定或者这种加密方式被敌方所窃取或者所破解了怎么办?这就是我们在很多谍战片里的情景,一旦密码本丢失,整套密码系统就完蛋了。比如我要传递一个秘密数字给佐尔格,加密方式就是给这个数字加上33。当然佐尔格要知道这个加密方式,当他看到写着223这个数字的纸条的时候,他就会用223减去33,等于190。这个190就是我想传递给佐尔格的数字。佐尔格看后非常震惊,马上通过秘密渠道告知斯大林:德军要用动用190个师闪击苏联。《潜伏》中余则成天天晚上一边听电台的广播,一边拿本小人书找字的方式就是对称加密,一旦这个规则被李涯知道了,李涯也能蹲守在电台边上,窃听我党的秘密了。

因此对称加密算法的安全性比较低,这不适合用在遍布坏心眼的互联网世界中。有没有一种我明告诉你加密方式,你就是破解不了干着急的方式呢?

有的,这就是非对称加密。

先说点枯燥的算法描述:
非对称加密算法有一个解密方式A与加密方式B,要传递信息M,使用加密方式B进行运算,得到加密信息X=f(M,B),这个过程的关键在于即使知道加密方式B和加密后得到的信息X,依然无法算出原始信息M,而原始信息M=f(X,A),即原始信息必须使用解密方式A算出。这里的A称为私钥,B称为公钥。这就是非对称加密采用的“公钥加密,私钥破解”方式,而传统的对称加密就是加密和破解用的是同样的密钥。

有一个小例子,或者说一个小魔术,你可以拿来骗骗自己的女朋友、老婆或小情人。你随便想一个三位数,但你别直接告诉我,而是拿计算器把这个三位数乘以91,然后告诉我结果的最后三位就行了。然后我就知道你想的那个三位数是多少了。

哈哈哈哈哈,我就是把你告诉我的最后三位再乘以91,所得到数字的最后三位就是你想的数字。比如,你想的是521,然后用52191=47411,你把411告诉我。而我,也拿计算器算一下41111=4521,瞧,最后三位就是你心里想对我说的,对吗?

这里“91+后三位”就是公钥,我无论是对女朋友,还是对老婆,还是对情人,都会告诉她这个加密方式。你用公钥91进行了加密传送给我,而我用的是“11+后三位数字”作为私钥。咱们脑补一个场景,如果这个私钥被你的老婆知道了,当她检查你的微信时,发现一个陌生女子给你发了一个411,后果你懂得。因此私钥是要好好保存滴。

这就是“公钥加密,私钥解密”的用法了。

小彩蛋:
为啥“91”和“11+后三位”组成的公钥私钥这么神奇呢?好好好,满足你的好奇心。因为91乘以11等于1001,任何三位数乘以1001的后三位就是三位数本身。有没有感叹神奇的数学?

同样,聪明的你有没有发现任何四位数乘以10001的后四位就是四位数本身?那是因为同样的道理: 73*137=10001。

因此聪明的你和小情人约定了新的公钥和私钥,继续你们的“小密钥”……

当然,上述仅仅是非对称加密的极简示例,比特币签名与认证过程中用到的椭圆曲线算法则是一种高科技。这种算法中,不但有公钥加密、私钥解密,还有私钥加密、公钥解密,私钥可以推出公钥,但公钥推不出私钥的能力。咱们记着上面加粗的这小段文字,在下面理解比特币转账过程中用得着。

对称加密

对称加密又称为古典密码学,原始数据和加密数据的互相转换使用同一个密钥 key ,可以这么理解:y = F(x, key) ,x 为原始数据,y 为加密数据,F 为可逆的加密算法(一般来说加密算法是公开通用的,因为你自己很难发明新的加密算法)。
因此对于数据加密解密过程的安全性完全取决于密钥 key ,发送者和接收者都持有该密钥,发送者使用密钥加密数据发送给接收者,接收者使用密钥解密得到原始数据。一般来说,只要密钥不泄露信息则是安全的,然而在一个大的网络系统中,密钥的分发和保存有成为一个难题,很难确保密钥不被泄露,而一旦密钥泄露那么信息的传输则是不安全的。

直到当某一个节点成功计算出小于目标值的Hash值,这个节点就解答出了谜题,并有权将计算Hash值所使用的信息组装成一个新区块,记录在自己的硬盘上,并发起一次全网记账。周围的节点在收到广播的消息后,也都记录下这个新区块。

2. 概述公钥、私钥、钱包、比特币的关系

在现实生活中,我们都有自己的钱包和银行卡,而一个比特币的用户自然也会有一个钱包,这个钱包下面可以生成一大堆地址和对应的密码,由用户自主选择一个公钥来进行收款(甚至每一笔交易都使用一个新的公钥)。在比特币的世界钱包里的地址叫公钥,把对应的密码叫私钥。我们可以简单理解公钥就是我们银行卡账号,私钥就是银行卡密码。任何人只要有这个私钥,也就是密码,就可以操纵对应银行卡,也就是公钥里的比特币。另外,在比特币世界中,每一个人都可以有茫茫多的银行卡,每张银行卡都不与任何身份信息绑定,这就是比特币的匿名性。

下面这段话很重要,再把上一小节的椭圆曲线加密算法的特征重复一下:公钥加密、私钥解密;私钥加密、公钥解密;私钥可以推出公钥,但公钥推不出私钥。

回到Alice给Bob转账的例子中:Alice要向Bob转账5btc,Alice先使用Bob的公钥(也就是Bob的收款地址,全网公开,但只有Bob自己用私钥才能够打开)加密一层信息,把这条加密后的信息再使用Alice自己的私钥(注意不是推导或破解私钥,只是用Alice的公钥验证该私钥的有效性,也就是用除Alice以外任何其他人的公钥都无法验证匹配该私钥)加密一层,这时信息已经被加密了两层,一层是Bob公钥,一层是Alice私钥。大家收到这条信息以后,会用Alice的公钥来验证加密信息是不是Alice发送的,其实就是用公钥解密了Alice这层信息(私钥加密,公钥解密),从而验证了这条信息确实来自于Alice,但是这条信息还使用了Bob的公钥加密,Bob再用自己的私钥对这条信息进行解密(假设只有Bob知道私钥),完成了比特币的提取。

注:由于对Alice身份以及对她发送内容的有效性验证非常重要,在本章的第4小节咱们专门再说一说有效性验证的问题,这里先按下不表。

理论上如果找到了一个私钥,那么就可以操纵其余额,因为私钥是可以推出对应的公钥。这个比现实世界神奇,也就是有了银行卡密码,还能够推导出银行卡卡号……然后再对这个地址的记录进行数字签名,相当于掌握了这个地址。反过来说,如果你的私钥丢了,那这个地址上的整个钱也就消失了。整个比特币世界是去中心化的,没有中心机构可以申诉。

所以,就好比现实生活中一定要把银行卡(公钥)和身份证(私钥:虽然不是直接的密码,但往往能够通过身份证去重置银行卡密码,骗子都可以)分开存放,私钥一定不要存放在电脑中,最可靠的是记在脑子里。好吧,这很反人类,但你可以通过别的物理方式,和私藏私房钱一样,比如写下来放在客厅花盆里,放在鞋垫底下,夹在某本书中……嘘,不能再透露了。

以上概述了公钥、私钥、钱包和比特币的关系。由于这个概念很重要,再啰嗦一遍:比特币世界里的公钥是地址,私钥就是密码;公钥是银行卡账号,私钥就是银行卡密码。所谓钱包就是一种电脑软件,它可以帮你生成一系列配套的私钥公钥,你可以随意选择一个公钥作为收款地址,并且使用配套的私钥继续使用它。比特币只有交易记录,所以你的每一个公钥上所谓的余额就是账本上显示的谁向这个地址转账了,私钥作为密码的作用就是可以援引这个公钥的交易记录并对其签名。比特币的公钥是公开的,任何人都可以查看关于这个公钥的所有交易记录,也就可以知道这个公钥有多少“余额”,但没有私钥的人不能对该公钥援引记录签名,也就不能进行发送和交易。

另外一个重要的问题是如何验证广播信息的真实性(注意不是广播信息身份有效性,那是通过数字签名解决的)。Alice广播说她要给Bob转5个币,但有可能她在骗人,因为她只有3个币,怎么能给Bob转5个?如果要是有中心机构银行,就只要统计Alice的余额就好了;而比特币只储存交易记录,只验证这笔交易中涉及比特币的来源与去向,并不会对余额进行检验。事实上,Alice传达的信息中:我要给Bob转账5个btc,这5个btc都是有编号的,每个人都可以查询这5个btc上一次是从哪里转到Alice这里的,这5个币有没有从Alice这里转走。如果都满足,那就表明Alice可以转走这5个币。作为一种去中心化的账本,比特币世界算你的余额,是算从这个账户诞生开始每一笔收支,加减到现在的正值。由于每一笔交易都是全网验证过的,每一笔交易的比特币都是有来龙去脉的,所以说这是安全和靠谱的。当在电脑上下载比特币客户端的时候,系统会一次性的下载所有交易记录,而且会验证一遍,一般需要一天一夜的时间。不过只要验证一次,后面的交易验证就是增量验证,就不再需要这么久的时间。

非对称加密

对称加密在大的网络系统中被认为是不靠谱、不安全的,而非对称解密可谓是现代密码学中的一大里程碑。以下将主要简单介绍非对称解密的概念,其具体算法细节不做考究。

在对称加密中,大家使用同一份密钥对数据进行加密和解密,而其安全缺陷则是对密钥分发和保管的过程难以保证密钥不被泄露。

在非对称加密系统中,每一个用户都有一对密钥 —— 公钥和私钥,公钥是对系统中其他所有用户公开可见的,私钥则是该用户自己保存保密的,并且公钥和私钥之间存在着一定的数学关系,由私钥可以很容易地推导出公钥,而由公钥则很难破解得出私钥。

假设系统中有 A、B、C 三个用户,A 想要发送信息给 B,该过程如下:
A 拿到 B 的公钥(Public key B),然后用它加密数据;
A 将加密的数据发送给 B;
B 拿到了加密数据,使用自己的私钥(Private key B)解密数据,从而得到信息;

这里的关键则是一对 公钥 和 私钥之间的关系,使用公钥加密的数据只能用其对应的私钥才能解密;假设 C 为破解者,在 A 发送给 B 加密数据的过程中,C 拿到了加密数据,而用它自己的 私钥 是无法解密的,同时 C 又无法拿到 B 的私钥,因此 C 无法破解数据。

常见的非对称加密算法有 RSA、ElGamal、椭圆曲线(Elliptic Curve Crytosystems,ECC),在比特币中主要使用的是 椭圆曲线 算法。

5、由于矿工节点每次都会使用含有上一个区块Hash值的文本来计算当前区块的Hash值,因此,每一个区块都有上一区块的基因,这使得区块们串成了一个牢不可破的链条。

比特币的公钥是公开的,任何人都可以查看关于这个公钥的所有交易记录。也就可以知道这个公钥有多少“余额”。每一枚比特币原则上是可以跟随其交易记录一直向上追索的。不过这比较麻烦的,因为比特币的最小单位是10的-8次方,这个最小单位还有个名字

聪,中本聪的聪,比特币世界中,你富不富有,就看你有几根“聪”。比特币的单位如此小,一枚极为值钱的比特币可能是很多更小数字组成的,比如是0.005 聪、0.78聪、0.215聪之和,所以其来源可能会非常细小。但所有交易记录都摆在这里,谁想去追踪这些所有的细分的来源都没有问题。

数字签名

类似在纸质合同中的签名,使用数字签名可以确保信息的来源正确,数字签名是基于非对称加密之上的应用。
继续上文例子,当 B 收到信息之后,想要给 A 回复,同时希望 A 能确认该回复信息确实是 B 发送的,那么:
B 使用自己的私钥(Private key B)生成一个数字签名,然后使用 A 的公钥(Public key A)加密数据和签名;
B 将附带签名的加密信息发送给 A;
A 拿到了附带签名的加密信息,使用自己的私钥(Private key A)解密数据,得到信息和签名,然后 A 使用 B 的公钥(Public key B)对签名进行对比,如果匹配成功则说明该信息确实是 B 发送而非 C 发送的。


如果篡改某一区块中的某一交易,那么其后所有的区块数据都无法匹配了。也就形成了区块链不可篡改的特点。

3. 比特币与挖矿

好了,从上面文字的描述中,咱们应该对比特币的性质,以及转账的大致流程有了一个概念上的了解。知道了在比特币世界里是没有实体存在,没有类似于钞票这种实体的存在。比特币本质上就是一个账本,全网系统里每个节点都有的一个账本。这个账本仅仅记录从创世到现在的转账记录而已,所谓财富其实就是每个条目一条一条的累计。我不能伪造,我比特币必须是别人写记录给我的。比特币就是一个账本系统,公开透明的账本系统,可以被任何人随时查看,但没有任何实体的支撑。

大家自然会关心一个问题,那我怎样才能拥有比特币?货币是各国央行发行的,而比特币是去中心化的,那谁来发行比特币,比特币是怎么创造出来的?

这就是这几年一直很火的一个词汇 -- “挖矿”。而要理解“挖矿”就必须要引入区块链的概念了。

在比特币的世界里,每时每刻都会发生很多笔类似Alice转账Bob的交易,把每十分钟内的交易记录打包在一起,就叫区块(Block)。把比特币一诞生就开始的所有交易记录都链接起来,也就是把这些区块连接起来,就构成了区块链(Block Chain)

每十分钟的交易信息被打包成一个区块,而整个网络上的电脑都在抢夺这个区块的记账权利,谁抢到这个记账的权利,谁就可以获得这个区块创造(奖励)的比特币。

这里有一个问题要解释,比特币网络是分布式的,谁在负责交易记录的打包呢?答案是每个节点都可以进行打包,但能打包并不代表你有资格获得比特币奖励。我们来看看这个过程:

  1. 当Alice发起一笔比特币转账后,她需要将交易广播至全网,网络上的每个挖矿节点(也就是矿工)接到这笔交易后,会先将其放入本地内存池进行一些基本验证,比如该笔交易的比特币是否是未被花费的比特币。如果验证成功,则将其放入“未确认交易池”(Unconfirm Transaction),等待被打包;如果验证失败,则该交易会被标记为“无效交易”(Invalid Transaction),不会被打包。矿工需要及时验证每笔交易,更新自己的“未确认交易池”。
  2. 每个挖矿节点都可以将若干个交易信息打包成区块发送到网络上,并建议其为链上的最新候选区块。正因为任何挖矿节点都可以发送候选区块,系统如何决定谁才是可以放在链上的最新区块?区块链系统使用加密哈希函数设计了一道复杂的数学题(后面会单独说说这道逆天数学题),谁能最先解出答案,就代表谁抢到了记账权,然后其将从“未确认交易池”中抽取约近千笔“未确认交易”进行打包,发布到网络上。
  3. 这道数学题的答案是由挖矿节点计算后一起被打包进区块。答案是一个数字,得到答案的唯一方法就是暴力猜解,猜到对为止。一台普通配置的电脑可能需要花一年的时间才能猜对答案,但区块链网络里有很多台电脑一起猜,这样只需要平均10分钟就可找到答案。因此也呼应了上面段落提到的,比特币世界的新区块大概10分钟生成一个

也就是说,矿工们既要一边疯狂计算,还要一边及时校验新的交易记录,两手都要抓,两手都要硬,想想都TM糟心。

科技资讯 3

Block Chain.JPEG

既然交易在不停的发生,矿也就可以不停的挖,那比特币就是“取之不尽用之不竭”了?No,No,No,比特币的数量是有最高限额的——2100万枚比特币,越挖越少。中本聪设计的特别妙,就是每个区块的奖励每四年减半。我们刚说了,中本聪造出第一个区块的时候、获得50枚的奖励,到了2013年奖励就减半了,2017年再次减半。所以当下每个区块的奖励是12.5枚比特币,等到了2140年比特币产量就将趋于0,从而将比特币的总量恒定在2100万枚。

好了,先做一个简短的总结:
1. 比特币交易记录向全网发布
2. 矿工严阵以待,收到交易信息并验证有效后,就放入“未确认交易池”
3. 矿工同时解数学题,解题部分贵贱,一律靠猜,很黄很暴力
4. 最先解出答案的矿工,从“未确认交易池”中取出一部分进行打包,并发布到网络中,并获得相应奖励

下面咱们该说说这道逆天的数学题了,其实真的挺逆天,下面仅仅写一下最基础的原理,等我自己更深入的学习后,再专门写一篇学习笔记来谈谈数学题的问题

每个区块都有自己的区块头,区块头通常包含前一个区块的哈希散列值、Merkle根、时间戳、难度目标、以及一个填充的随机值。试图争夺记账权的节点称为挖矿节点,挖矿过程就是求出一个能够填充本区块头的随机值,让区块头的哈希散列值符合某一个标准。

科技资讯 4

区块头示例

在比特币世界里,有一个新的概念叫做共识机制。比特币是通过工作量证明的共识机制来决定记账权的,通俗来讲,谁证明了自己的工作量最大,谁就负责记账。而这个工作量大小就是通过计算上述哈希散列值来体现的。

网络上的每一个矿机接收并验证了一批交易,然后就开始进行挖矿。矿机需要反复的试验随机填充值来进行求解。一般采用产生随机数,尝试把产生的随机数填充到区块头,然后计算哈希。如果哈希值符合难度规则,则计算成功,挖矿成功,向全网广播挖矿所得。全网节点验证后,把这个区块连接到区块的最上端,并且在全网达成一致。其他矿工也只能心中默念无数个“草泥马”,然后赶紧基于这个最新的区块继续永无止境的挖矿人生……

从这个过程我们能够看出这个随机数的作用,除了让人崩溃的一遍遍计算,还有一个作用就是平衡算力,以保证全网平均每10分钟左右产生一个区块。如果矿工们设备变得先进了,比如NVidia老黄推出了更牛逼更便宜的GPU(老黄当然不是这样的人),分分钟就算出来,那该怎么办?很简单,就增加难度规则,增加猜测随机数的难度呗,比如原来要求计算的哈希值前面有15个0,现在要求前面有20个0……总之就是不让你造次,好好按规矩挖矿。

上面就这道数学题最简单的描述。

而回顾挖矿历史,挖矿总共经历了以下五个时代:CPU挖矿→GPU挖矿→FPGA挖矿→ASIC挖矿→大规模集群挖矿

为了钱,真是绞尽了脑汁。

密钥与地址

在比特币中,对于其货币的所有权由用户存有的密钥来决定,也就是说并非你拥有多少个比特币,而是密钥对应了其所有的比特币,你拥有的是密钥,由此可见,密钥是相当重要的,一旦丢失密钥则意味着你对这笔比特币失去了控制权。

密钥包含一对私钥和公钥,其中私钥是最重要的。
比特币的私钥是可以是 1 到 n-1 之间的任何数字,其中 n 是一个常数(n = 1.158*(10^77) < 2256)。

生成密钥的第一步则是需要保证其随机性,可以通过程序随机选择,或者鼠标随机晃动,以https://www.bitaddress.org (可随机生成比特币密钥)为例,当我随机晃动鼠标之后得到了我的私钥:

L2h5b4L4HzEjF4GprS31ismL6KVSLKe4VbuKNYW6gz1uBVRdZqg3

它以十六进制格式表示(256 位的二进制数,以 64 位十六进制数显示,每个十六进制数占 4 位);

之后通过非对称算法 —— 椭圆曲线算法,计算得到公钥;

最后将公钥通过哈希算法得到地址,也就是对外公开的比特币钱包地址。

简单表示:

科技资讯 5

其中,私钥由拥有者自己保管(一般存在于钱包中),地址是唯一对外暴露的信息。


建议收款人不要在公告挂出时立即确认交易完成,而是应该再看一段时间,等待各个挖矿小组再挂出6张确认账簿,并且之前的账簿没有被取消,才确认钱已到账。

三、比特币的难题

钱包

比特币的钱包最主要的功能是作为密钥的容器,可以理解为只要你拥有了密钥也就拥有了钱包。比特币的钱包也是多种多样,比如冷钱包、纸钱包、脑钱包,它们的区别实质上是对密钥的存储形式不同。一般而言我们的密钥是需要导入到比特币客户端中才能进行交易与管理比特币,当然客户端的作用除了存储密钥,还存储比特币的交易数据并且可以进行交易操作,比特币客户端主要分为以下几种:

  • 完整客户端:一个完整的客户端有称为“全节点”,需要同步存储从创世区块以来比特币所有的交易历史数据,同时管理用户的钱包。
  • 轻量级客户端:一个轻量级的客户端存储用户的钱包数据,但是它需要依赖第三方服务器才能接入比特币网络以及进行交易;轻量级客户端不保存所有的交易数据,因此它需要信赖第三方服务器来获取交易数据与交易确认。
  • 在线客户端:在线客户端不需要下载,一般以网页的形式在第三方服务器上存储与访问用户钱包,交易的进行也是需要依赖第三方服务器,因此安全性较低。

6、比特币系统就这样周而复始的更新着自己的区块链条,不断的进行全网记账,不断的运行下去。

1. 双花问题(Double Spending)

比特币系统似乎有着完美的交易方案,既有人在抢着记账,记好的账本又不能篡改,全网还可以验证每条消息的真伪,难道这还不是完美吗?咱们举个例子。

比如我有5个btc,我向星巴克转账了5个btc买了一杯咖啡,同时又向自己另一个账户转账了5个btc,这是两笔独立的交易,如果都在全网得到了验证,我岂不是白白喝了一杯咖啡?这就是双花问题,比特币网络如何解决?

正常情况下,我先转给星巴克的5个btc,全网打包并验证了此消息,然后我向自己转账的那笔交易由于和上条交易冲突而验证失败,但,如果我是同时向全网广播这两条消息呢?这样,就会有两个矿工分别打包了这两笔记录,这就叫做分叉,即同时有两个区块生成了,比特币网络如何识别哪个区块是有效的呢?

先简单说明下比特币的规则:规则是只有最长的区块链得到确认,最长的区块链才会有挖矿奖励。所以正常大家都会切换到长链上挖矿而将短链废弃掉,这样就会有一笔交易作废了。在同一条链上,是不会出现冲突的问题的。

知道了这个原理,我们来看看怎样才能做到双花,其要付出什么代价,这样再来衡量比特币网络的这个规则是不是能有效的解决双花问题。

还是上面的例子,我要是想白喝这杯咖啡,就必须先给星巴克转账5个btc,这笔交易打包在一个区块中;然后我给自己账户再转账5个btc,打包在另一个区块中。当然,做到这一点已经很不容易,我得能很好的掌控交易时机。星巴克看到第一个区块得到了全网确认,会向我发送咖啡;这时,我为了让这笔转账失效,必须让包含我给自己转账的那条链成为全网主链,也就是说,在我希望的这个区块后面不断的生成新区块使这条链越来越长。再重复一遍,我想要实现双花,其实很不容易,我必须要在我拿到这杯咖啡之前,让着两条链都不被废弃掉,在此之前,任何一条链废掉,双花都不再成立。如果我给自己转账的那条链废掉,意味着我真的给星巴克转账了;而如果我给星巴克转账的那条链废掉,意味着星巴克不会给我提供咖啡服务。所以,我的策略必须是,先让星巴克那条链成为主链,这样星巴克就发货了;我一看到星巴克发货,于是开始努力加长给自己转账的那条链,一旦链条长度超过了星巴克那条链,给自己转账的就成了主链,从而废掉星巴克那条链,这意味着星巴克的交易记录作废,也就是星巴克最终没有拿到比特币……

细思极恐,细思极恐。

星巴克也不是吃素的,不会傻到一看到区块形成就发货,而是会等到自己这条链足够长,一般来说,再等上6个区块形成就很保险了,为什么呢?

因为矿工都会在长链上挖矿,只有最长的区块链才能得到确认,才会有挖矿奖励。我要想让给自己转账的这条链成为主链,就要在转账给自己的这个区块之后不断形成新区块,超过转账给星巴克那条链。不是不可能,用我中学一直牢记在心的英文语句:Nothing is difficult but put all your heart into it,有志者事竟成,有算力者赢天下。区块由谁生成,取决于谁先计算出那道逆天的数学题,而且要连续跑赢其他矿工

比如我拥有全网51%的算力,我就有51%的概率抢到记账权,这就是“51%攻击”。星巴克等到了6个区块都形成后,相信这条链就是全网主链,全网的其他矿工也相信这条连就是全网主链,于是大家都基于这条主链进行计算。而我为了让有利于自己的那条链成为主链,就必须要连续与全网争夺记账权6次,我拥有51%以上的算力,确实能够实现,只不过连续6次都成功的概率是0.51^6=0.017596。我必须考虑一个问题,我这么做值得吗?我到底要为了多大额度的转账双花而进行51%攻击?因为我们都懂,区块链越靠后,安全性越高。全网都知道我牛逼,大家形成了共识,6次改成了10次,我就要为此付出更高的代价了,这难度可是几何级的增长。因此,目前比特币网络一般认为,6次已经很安全,也就是转账后,等1个小时再进行交易。

由此我们看出,比特币网络约定俗称的规则,即保持在最长链上挖矿,结合等待6次记账后再交易的规则,可以认为是非常安全的

交易

交易是比特币系统中最重要的部分,根据比特币系统的设计原理,系统中的其他部分都是为了确保交易可以被生成、在比特币网络中传播、通过验证确认,并且可追溯。

本文由澳门新浦京发布于科技资讯,转载请注明出处:科技资讯比特币简易入门

关键词: