.jpg)
一、科普:什么是比特币
1.比特币是一种P2P方式的加密货币
2.比特币是一种去中心化的资产
3.比特币经过挖矿取得
4.比特币是中本聪创立
5.比特币是经过记账保证资产平安
6.关于挖矿
7.各个国度比照特币的态度
8.比特币的缺陷
自己接触数字货币也有几年了,比照特币的理解也不能说有多么的深化。我将尽我所能把什么是比特币写分明,用小白能明白的文字来表述比特币。
假如有错的中央还望不吝赐教
1.比特币的由来
比特币的由来这里就必需要提到一个人:中本聪。中本聪是比特币的开创人,但是关于谁是中本聪直到我写这边文章的时分,依然是一个未解之谜。
倒是有很多自称是中本聪的人,但是一个个都禁不起琢磨。目前知名度最高的一个人是"澳本聪",由于人在澳大利亚,所以大家给他取了一个略带
挖苦意味的名字。
先借用一下百度百科上面的引见:
比特币(Bitcoin)的概念最初由中本聪在2008年11月1日提出,并于2009年1月3日正式降生。依据中本聪的思绪设计发布的开源软件以及建构其上的P2P网络。比特币是一种P2P方式的虚拟的加密数字货币。点对点的传输意味着一个去中心化的支付系统。
与一切的货币不同,比特币不依托特定货币机构发行,它根据特定算法,经过大量的计算产生,比特币经济运用整个P2P网络中众多节点构成的散布式数据库来确认并记载一切的买卖行为,并运用密码学的设计来确保货币流通各个环节平安性。P2P的去中心化特性与算法自身能够确保无法经过大量制造比特币来人为操控币值。基于密码学的设计能够使比特币只能被真实的具有者转移或支付。这同样确保了货币一切权与流通买卖的匿名性。比特币与其他虚拟货币最大的不同,是其总数量十分有限,具有极强的稀缺性。
我对上面的文字解释一下:
【P2P】网络是点对点,再文言一点是个人对个人的意义。
中心化:普通的像支付宝这样的系统是中心化系统,一切信息都控制在支付宝公司的效劳器中。
去中心化:就是没有一个中心化的系统。网络中的一切个体都对这个账本都有完好的记载。这里有个关键词【账本】。
什么是账本?比特币的一切转账挖矿信息加起来是一个账本。账本就是数据的意义。比特币网络中的每一台效劳器都有完成的比特币转账记载【账本】。
什么是转账?假如你有一个比特币钱包,并且有比特币资产,那么你就能够转账到另一个地址。每个地址都是特有的不反复的。就像支付宝账号,但是地址并不记载个人信息,所以转账是匿名的不可查的。但是转账记载【账本】是公开的可查。
什么是钱包?你能够了解是一个软件。目前用的做多的是imtoken,用imtoken你能够生成本人的比特币账号【地址】。然后他人就能够给你转账。钱包并不是中心化的东西。钱包生成的私钥才是最重要的数据。你能够用私钥导入到其他钱包。留意密码,密码遗忘就不可找回。就无法转账。目前比特币总量1800多万。但是有可能比特币丢失了,比方私钥没有了。所以一定要保管好你的私钥。
2.如何取得比特币
获取比特币的办法目前有2种
1.用电脑挖矿
比特币的产生就是挖矿而来,挖矿文言文就是:用电脑运转特定软件来运算数据,算对了就给你比特币奖励。挖矿需求高端显卡,挖矿设备首先就是根绝NV显卡。挖矿肯定是用显卡挖矿。挖矿设备的整体构造和普通PC机器不一样的中央就是显卡数量。当然你也能够用家用的电脑来挖矿感受一下。详细的挖矿教程这里不做引见。
2.购置
购置相对就简单不少。但是目前市面上买卖所成百上千家,优劣不齐。选择的时分要谨慎。要选排名靠前的买卖所。这里引见几个大型买卖所:火币,币安。这两个曾经能够满足你的一切需求。
3.比特币寄存在哪
比特币能够寄存在恣意一个数据存储介质里,包括手机、U盘、挪动硬盘、电脑等。比特币在停止买卖的时分,只需求运用比特币买卖软件发送比特币地址即可。比特币软件能够自动生成地址,同时在生成地址时不需求联网。比特币地址和私钥是成对呈现的,他们的关系就像银行卡号和密码。比特币地址是用来记载你在该地址上有几比特
4.比特币的价值所在
比特币的价值十分大。说几点适用的价值。
1.去中心化的货币,没人能够随意冻结你。不用担忧哪个国度冻结你的资产
2.隐秘的买卖购置东西只需转账比特币,没人能够查到你。其中的美好能够自行想象
3.升值潜力总量2100W,假如成世界货币。价值难以估量。目前比特币价值:6700美圆(2020年3月25日数据)
主要价值在上面几点,曾经是充溢无限想象
5.如何买卖比特币
能够在买卖平台买卖,比方上面提到的买卖所。
买卖所分为中心化买卖所,和去中心化买卖所。比照来说中心化买卖所便当很多。事实也是这样,去中心化买卖所的买卖量很少。
6.关于挖矿
比特币是由挖矿产生的。但是目前个人电脑想挖矿的话难度真的不是普通的大。由于比特币全网的运算水准在不时的呈指数级别上涨,单个设备或少量的算力都无法在比特币网络上获取到比特币网络提供的区块奖励。在全网算力提升到了一定水平后,过低的获取奖励的概率。所以不是说你挖就能挖到的。就比方个人电脑你挖个十天半个月收获的数量极极大约率还是0.
这里就不得不说一下【矿池】
过低的获取奖励的概率,促使一些“bitcointalk”上的极客开发出一种能够将少量算力兼并结合运作的办法,运用这种方式树立的网站便被称作“矿池”(Mining Pool)。
在此机制中,不管个人矿工所能运用的运算力多寡,只需是透过参加矿池来参与挖矿活动,无论能否有胜利发掘出有效材料块,皆可经由对矿池的奉献来取得少量比特币奖励,亦即多人协作挖矿,取得的比特币奖励也由多人按照奉献度分享。
所以说过你个人想体验挖矿的话,参加一个大型矿池是一个十分不错的主见。
7.各个国度比照特币的态度
友好的国度:日本,澳大利亚,韩国,新加坡等
日本是第一个使比特币合法化的国度,并赋予了其法定货币位置。
澳大利亚是继日本之后的第二个比照特币友好的国度,在2017年宣布比特币和加密货币为法定货币。
韩国买卖所也占比特币总买卖量的10%以上,世界上吸收比特币买卖量最大的一些买卖来自韩国,这一事实自身就阐明了该国比照特币的友好态度。
新加坡的比特币不被视为货币,但被视为商品。因而,需求支付商品及效劳税。
不友好的国度:中国,孟加拉,卡塔尔等
中国在94的时分取消了一切境内买卖所,并明文制止买卖比特币行为。
在孟加拉买卖比拟币的话有可能会被拘捕
卡塔尔,阿富汗这样是神权国度在宗教上被以为是非法的
8.比特币的缺陷
1.比特币系统目前来看曾经相当的强健平安。但是并不是不可窜改的。有数据标明,破费几十万美圆购置算力,就可能使比特币网络的买卖发作窜改。由于比特币买卖的正确性
是有算力来决议的。假如攻击方的算力占领超越50%那么就有可能窜改相关的转账信息。历史上也发作了这样的事情,固然不是攻击的比特币。攻击的是ETC,但是这也证明了
BTC并不是无懈可击的系统。
2.比特币转账很慢,假如运用人数少的话能够很快的转账,但是转账用户多了之后会形成网络的阻塞。目前转账比特币的时间是以小时来计算。
3.比特币的算力如今由少局部人控制。这背叛了中本聪的初衷,少局部控制也就意味着中心化,而中本聪的初衷是去中心化系统。
二、比特币如何防止篡改
比特币网络主要会通过以下两种技术保证用户签发的交易和历史上发生的交易不会被攻击者篡改:
非对称加密可以保证攻击者无法伪造账户所有者的签名;
共识算法可以保证网络中的历史交易不会被攻击者替换;
非对称加密
非对称加密算法3是目前广泛应用的加密技术,TLS证书和电子签名等场景都使用了非对称的加密算法保证安全。非对称加密算法同时包含一个公钥(Public Key)和一个私钥(Secret Key),使用私钥加密的数据只能用公钥解密,而使用公钥解密的数据也只能用私钥解密。
请点击输入图片描述
图 2-非对称加密特性
比特币使用了非对称加密算法保证每一笔交易的安全,网络中的每一个账户(地址)都是一对秘钥中的公钥,账户的所有者会持有私钥,下面就是一对刚刚生成的比特币地址和私钥4:
Address: 13RTT8MsbAj7o4zL7w4DNNuuwhgGgHqLnK
Private Key: 469d998dd4db3dfdd411fa56574e52b6be318f993ca696cc5c683c45e8e147eb
需要注意的是,使用网站生成比特币地址和私钥是极其危险的做法,我们并不清楚网站是否会存储私钥,所以建议使用比特币的客户端生成公私钥对。
任何人通过上面的地址 13RTT8MsbAj7o4zL7w4DNNuuwhgGgHqLnK都可以向该账号转账;账号的持有者也可以使用私钥签名交易向其他地址转账,当我们想要向比特币网络中提交一笔新的交易时,需要先构建一个如下所示的交易结构:
{
"txid":"5be7a9e47f56c98e5297a44df52da0475f448ece98bb51489103cdf70653092f",
"hash":"5be7a9e47f56c98e5297a44df52da0475f448ece98bb51489103cdf70653092f",
"version":1,
"size":224,
"vsize":224,
"locktime":0,
"vin": [...],
"vout": [...],
"hex":"0100000001a90b4101e6cbb75e1ff885b6358264627581e9f96db9ae609acec98d72422067000000006b483045022100c42c89eb2b10aeefe27caea63f562837b20290f0a095bda39bec37f2651af56b02204ee4260e81e31947d9297e7e9e027a231f5a7ae5e21015aabfdbdb9c6bbcc76e0121025e6e9ba5111117d49cfca477b9a0a5fba1dfcd18ef91724bc963f709c52128c4ffffffff02a037a0000000000017a91477df4f8c95e3d35a414d7946362460d3844c2c3187e6f6030b000000001976a914aba7915d5964406e8a02c3202f1f8a4a63e95c1388ac00000000",
"blockhash":"0000000000000000000c23ca00756364067ce5e815deb5982969df476bfc0b5c",
"confirmations":5,
"time":1521981077,
"blocktime":1521981077
}
接下来,我们可以使用持有的私钥对整个交易中的全部字段进行签名,然后将签名与交易打包并发送到网络中等待比特币网络的确认就可以了。
在比特币的所有地址中,35hK24tcLEWcgNA4JxpvbkNkoAcDGqQPsP地址中目前持有 250,000多个 Bitcoin5,目前的市值大概为 20亿美元。在只知道地址的情况下,我们来算一下获取该地址对应的私钥需要多长时间。比特币的私钥总共有 256位,即 22562256中可能性:
115792089237316195423570985008687907853269984665640564039457584007913129639936115792089237316195423570985008687907853269984665640564039457584007913129639936
目前我们没有较为快捷的破解手段,只能使用暴力破解计算私钥。假设我们使用 IBM在 2018年推出的超级计算机 Summit6,它能每秒能做 1.4∗10171.4∗1017次浮点数计算,假设该计算机可以每秒计算相同次数的公私钥对(计算公私钥对远比一次浮点数计算复杂),想要找到存放 20亿美元资产的地址对应的私钥需要如下所示的时间:
1.15∗1077365∗86400∗1.4∗1017=2.9∗1052年1.15∗1077365∗86400∗1.4∗1017=2.9∗1052年
我们整个宇宙的存在时间也只是破解该私钥时间的几十亿分之一,所以在目前的计算能力没有革命性突破的前提下,想要通过暴力破解的方式获取公钥对应的私钥只有理论上的可能性,在实践中是完全不可能的7。
共识算法
MySQL等数据库以行为单位存储数据,而比特币这个分布式数据库中存储的基本单位是区块,区块通过哈希指针连接就会构成一棵树,如下图所示,图中绿色的最长链就是网络的主链。
请点击输入图片描述
图 3-区块链和主链
如何让网络中的所有节点对下一个区块中的内容达成共识是比特币需要解决的关键问题,只有让节点对数据达成一致才会保证过去的交易不会被篡改,但是作为在公网运行的分布式数据库,它面对的场景非常复杂,需要解决拜占庭将军问题下的分布式一致性问题。
拜占庭将军问题是 Leslie Lamport在 The Byzantine Generals Problem论文中提出的分布式领域的容错问题,它是分布式领域中最复杂、最严格的容错模型8。在该模型下,系统不会对集群中的节点做任何的限制,它们可以向其他节点发送随机数据、错误数据,也可以选择不响应其他节点的请求,这些无法预测的行为使得容错这一问题变得更加复杂。
拜占庭将军问题描述了一个如下的场景,有一组将军分别指挥一部分军队,每一个将军都不知道其它将军是否是可靠的,也不知道其他将军传递的信息是否可靠,但是它们需要通过投票选择是否要进攻或者撤退:
请点击输入图片描述
图 4-拜占庭将军问题
区块链技术使用共识算法和激励让多个节点在拜占庭将军场景下实现分布式一致性。比特币使用如下的规则让多个节点实现分布式一致性:
引入工作量证明—让节点在提交新的区块之前计算满足特定条件的哈希,取代传统分布式一致性算法中,一人一票(或者一节点一票)的设定;
引入最长链是主链的设定—只有主链上的交易才被认为是合法交易;
引入激励—提交区块的节点可以获得比特币奖励;
通过以上的规则,各个节点会在最长的链上计算哈希,努力提交合法的区块。然而一旦节点中有人掌握了 51%以上的计算能力,它能通过强大的算力改变区块链的历史。因为区块具有连续性,所以前一个区块的改变会使后一个区块计算的哈希失效,如图 4所示,如果攻击者需要改变主链中的倒数第三个黄色区块,它需要连续构建四个区块才能完成对历史的篡改,其他的节点才会在这条更长的链上继续计算:
请点击输入图片描述
图 4- 51%攻击
1使用如下所示的代码可以计算在无限长的时间中,攻击者持有 51%算力时,改写历史 0~ 9个区块的概率9:
#include
#include
double attackerSuccessProbability(double q, int z){
double p= 1.0- q;
double lambda= z*(q/ p);
double sum= 1.0;
int i, k;
for(k= 0; k<= z; k++){
double poisson= exp(-lambda);
for(i= 1; i<= k; i++)
poisson*= lambda/ i;
sum-= poisson*(1- pow(q/ p, z- k));
}
return sum;
}
int main(){
for(int i= 0; i< 10; i++){
printf("z=%d, p=%f\\n", i, attackerSuccessProbability(0.51, i));
}
return 0;
}
通过上述的计算我们会发现,在无限长的时间中,占有全网算力的节点能够发起 51%攻击修改历史的概率是 100%;但是在有限长的时间中,因为比特币中的算力是相对动态的,比特币网络的节点也在避免出现单节点占有 51%以上算力的情况,所以想要篡改比特币的历史还是比较困难的,不过在一些小众的、算力没有保证的一些区块链网络中,51%攻击还是极其常见的10。
防范 51%攻击方法也很简单,在多数的区块链网络中,刚刚加入区块链网络中的交易都是未确认的,只要这些区块后面追加了数量足够的区块,区块中的交易才会被确认。比特币中的交易确认数就是 6个,而比特币平均 10分钟生成一个块,所以一次交易的确认时间大概为 60分钟,这也是为了保证安全性不得不做出的牺牲。不过,这种增加确认数的做法也不能保证 100%的安全,我们也只能在不影响用户体验的情况下,尽可能增加攻击者的成本。
总结
研究比特币这样的区块链技术还是非常有趣的,作为一个分布式的数据库,它也会遇到分布式系统经常会遇到的问题,例如节点不可靠等问题;同时作为一个金融系统和账本,它也会面对更加复杂的交易确认和验证场景。比特币网络的设计非常有趣,它是技术和金融两个交叉领域结合后的产物,非常值得我们花时间研究背后的原理。
比特币并不能 100%防止交易和数据的篡改,文中提到的两种技术都只能从一定概率上保证安全,而降低攻击者成功的可能性也是安全领域需要面对的永恒问题。我们可以换一个更严谨的方式阐述今天的问题—比特币使用了哪些技术来增加攻击者的成本、降低交易被篡改的概率:
比特币使用了非对称加密算法,保证攻击者在有限时间内无法伪造账户所有者的签名;
比特币使用了工作量证明的共识算法并引入了记账的激励,保证网络中的历史交易不会被攻击者快速替换;
通过上述的两种方式,比特币才能保证历史的交易不会被篡改和所有账户中资金的安全。
三、如何让自己的比特币消失
如何让自己的比特币消失,这是我们区块链研习社高级课程里的一个游戏环节,虽然通过语音方式讲解,但是希望更多人能动手参与。这个游戏表面看显得有些滑稽,但实际上我希望通过借助这次课让大家能够更深入理解比特币里的公私钥怎么回事,以及理解比特币这个全球最大分布式网络。
很多人开始知道了比特币,特别是上次“想哭”勒索病毒大规模爆发,更多的人知道了这个神奇的东西的存在。但是,绝大部分人能了解到的比特币仅仅局限于在某个交易所买到了一个叫做“比特币”的东西(当然还有一部分甚至不知道如何买卖,网上去查吧),但是对于这个“比特币”究竟是何物,是不是我们听过的、学习过的那个比特币,根本没有去深入思考这个问题。
通过前期的一个叫做“你怎么知道买的比特币是真的呢?”的课程,你应该知道我说的是什么,以及知道交易所的“比特币”远非我们的想象。
而这次的课程呢?你将更能加深对比特币的认识。
我们暂时仅仅从“加密货币”这个角度来说说比特币,所谓的比特币:
因此,从这个描述里我们可以知道,对公钥和私钥的理解非常关键(公私钥是我提到的“区块链学习的make集”的第一个),因为比特币在流转的过程中伴随着大量的公私钥计算和转换过程。当然,这个转换是单向的:通过私钥可以计算公钥,通过公钥无法计算私钥。
比特币通过公钥来生成收款地址,收款地址是不限制数量的,而实际上钱包程序(至少Bitcoin Core是这样)针对每个收款地址都有一个对应的私钥地址。下面是我实际操作过程中的一个截图:
在使用这个钱包的过程中要非常小心,因为Core钱包默认会对所有区块数据进行同步,通过提示来看,目前要同步至少120G的区块数据,如果一不小心,每次同步,硬盘会慢慢被塞满,所以记得关闭钱包界面右下角的网络图标。
上面是通过钱包对地址和私钥有一个基本的认识,而实际比特币在计算公私钥的时候还是“蛮复杂”的,因为很多人看不懂16进制,看不懂很多加密算法,所以碰到一个奇怪的字符或函数名都会头疼,比如ripemd160、sha256、base58等等。但如果能动手一下,其实并没想象中那么复杂。
下面是一个地址的计算的流程图:
有了这样一个计算过程,我们是如何实现让比特币“消失”的呢?其实,有种最笨的方法,就是生成一个公私钥,然后给对应的公钥地址转账,接下来把这个私钥扔掉或者彻底忘掉,那么以后没人能够还原这个私钥,不就实现“消失”了吗?
但是,英语里有句话说的是“no pain, no gain”,中文意思是“不劳无获”,代价不能白白花费呀,所以消耗了比特币,我们希望“永生”。这也是本次课程的终极目的:消失是为了永生!
在实现这个目的之前,我们要对比特币到底是什么进行重新考量:
作为今天的游戏实验,我们利用的是其中第3点:比特币是全球最大的分布式网络!由于这个网络里记录了所有的交易记录信息,因此,可能可以尝试把信息以交易的形式存储于这个永不灭亡的网络里。
好,原理搞清楚了,现在看怎么去做。回到上面的“地址计算流程”图,我们在第3步动点手脚。比如,我们需要将一条信息“Hello Bitcoin!”永久记录到区块链里,可以对这个字符进行sha256计算,于是生成一个哈希值,然后替换掉第3步中的值,并继续下面的生成过程,最后得到一个收款地址,假设是1DDiE5gkXGTnFS3TGXEV6SUVjEYnNDdfxH。
于是,这个收款地址就生成了,但是大家发现没,我们这里并没有产生私钥。而且根据公私钥的原理大家也知道:根据公钥计算出私钥几乎是不可能的。因此,这里我们给这个地址进行转账,于是交易记录就产生了,而且,做到了把“Hello Bitcoin!”这个字符串的哈希值永久地记录进了区块链里。
因此,我们所有的目的就实现了!
实际上,这不是我的首创,很多人都这么干过,很多人利用比特币的区块链网络是全球最大的分布式网络,而且寄生于互联网而存在,不可能消灭,因此将比特币作为底层,把大量的哈希值信息记录进去。大家看看下面这个图,每笔交易金额都是1聪:
看到这里,不知道大家是否理解了这样一个过程。比如上面这个图里面那一列收款地址,背后实际上可能会有一些特殊的含义。
最后,不要被这些貌似复杂的计算过程给吓到,因为不需要懂得这些函数的原理,这些函数在网络上是很容易获得的(有些可能要翻墙),我列出了一些,供大家学习和动手时使用:
今天课程到此结束,大家动起来吧,有问题留言交流。
本文来自用户投稿,不代表币大大立场,如若转载,请注明出处:https://czxurui.com/jys/179288.html


发表回复
评论列表(0条)