BTC-密码学原理

BTC基础

比特币是一种P2P形式的数字货币。点对点的传输意味着一个去中心化的支付系统。与大多数货币不同,比特币不依靠特定货币机构发行,它依据特定算法,通过大量的计算产生,比特币经济使用整个P2P网络中众多节点构成的分布式数据库来确认并记录所有的交易行为,并使用密码学的设计来确保货币流通各个环节安全性。

我们把抢到记账权从而获得比特币奖励的过程,称为挖矿

比特币的几个重要的特点:

1、去中心化。不依赖任何一个中心记账,而是由所有人一起来维护一个账本,任何人都可以去抢记账权。

2、不可篡改。每一个区块都被盖上了时间戳,所有的区块都跟前一个区块相连,一旦想更改区块内的数据,时间戳就对不上了;而且俱乐部所有人都在盯着呢,想篡改至少要有超过一半的人愿意跟你一起“指鹿为马”。

3、公开透明。任何一个账户的往来账目都可以在区块链上查到。当你转账给别人时,不用担心对方收了钱不认账,区块链上都记得一清二楚呢。

4、国际化。因为比特币只存在于互联网,如果想转账、支付、购买比特币,只需要联网操作一下就可以了。从比特币钱包的下载数据来看,全世界有200多个国家在用比特币,比美元、人民币等货币都更加国际化。

5、抗通胀。各国法币的总量没有上限,政府每年都在大量印钱,比特币的上限是2100万,任何人不得更改。

讲到这里,我们不妨试着推算下比特币的价格。因为价格是由价值决定的,使用比特币的人越多,价格就越高。那有多少人在使用比特币呢?因为比特币是匿名货币,所以我们只能根据比特币的地址数推测下:

●  2009年1月:个位数

●  2012年5月:185万

●  2015年年初:600万

●  2016年5月:1200万

●  2018年10月:2273万

对比一下:支付宝的用户量是10亿,未来10年有望达到20亿。您觉得,比特币的使用者会在未来有像支付宝用户一样的增长空间吗?如果有,会有什么样的事情发生?

比特币四年减半

1.什么是“四年减半”?

比特币作为虚拟数字货币的开创者,大约每10分钟会“长”出一定数量的新比特币,直到总数达到2100万个。

中本聪在设计比特币产量协议时,遵循了以下两个规则:

1、最开始每10分钟生成50个比特币(每次10分钟的间隔由算法来保证稳定不变);

2、每21万次后,比特币的单次产量减半,从50、25、12.5……依此类推,直至总量达到2100万。

根据以上规则,我们只需列出算式,便能得出每次减半(21万次)需要的时间:

210000÷(365*24*6)

注:因为每10分钟产出一次,所以每年的次数是365*24*6

答案正是4(年),这便是“四年减半”之说的由来。

根据减半规则,每4年的总产量也会减半,这一衰减非常快速。事实上比特币诞生十年以来,已经产出了1700余万个比特币,达到了总量2100万的83%。

2.为什么要设计四年减半的规则?

根本原因是出于供需关系的考虑。试想一种极端情况:如果在短时间内不加限制地产出了大量比特币,那比特币必然会因为流通量过多而变得毫无价值。

“V神”在评论比特币产量机制的文章中是这样表述的:

比特币之所以如此设计,正是为了控制通货膨胀……你也可以将这一规则和黄金进行对比,黄金在地球上总量固定,现在的开采难度越来越大,也正因为这些原因,黄金能流通于世数千年,至今仍然价值稳定,成为国际认可的价值交换媒介。希望比特币也可以。

问:如果2100万的比特币都挖完了,再有人抢到记账权,系统的新币奖励从哪来

答:挖完了,系统再也没有奖励。矿工靠手续费收入,即交易费。

比特币记账记录的比特币交易的账,可理解为:记录比特币从一个地址转移到其他地址。比特币生成后的交易(小编猜测你指的是出块奖励),由系统奖励给挖出该区块的矿工,这笔交易称为创币交易,理解为系统发行新币。矿工动力源自奖励,记账奖励包括出块奖励和矿工费,新币挖完后矿工会为了矿工费继续记账。

矿工费就是指在数字货币转帐时,付给矿工的激励费用,这个数额并不是固定的,当然你付的矿工费越多,被打包的速度越快,可以理解为区块链网络中的交易费用。

比特币矿工费与交易金额无关,而是由交易数据的大小和交易次数等因素决定的,一般来说,交易次数越多,矿工费越多。

有了矿工费,就不会有人恶意刷交易了,因为这样会付出巨大的矿工费成本,这样就保护了比特币网络资源被恶意占用的风险

3.减半和比特币的价格有什么关系?

已经有无数人试图论证过两者之间的关系,本文开头所说的“减半可能会带来价格上涨”也是其中的一种观点。实际情况如何呢?不妨回顾下历史上2次减半时的情况。

2012年比特币产量首次减半,由原来的每次50个比特币减为25个比特币,图中可以看出减半时间点一周前后价格波动并不明显。

2016年年中,比特币产量再次减半,由每次25个比特币减为12.5个比特币,减半一周前比特币价格是650美元,一周后价格是675美元,减半时间点前后BTC的价格也没有发生特别的变化。

也有人坚持比特币价格和减半强相关,认为价格会上涨,并且上涨会发生在减半前的3个月到1年期间,按这一结论来观察2016年减半的情况,会发现的确如此。但如果你放宽视野,还会看到在2016年减半前也发生了很多重大事件,比如监管、重量级媒体的关注、资本机构的参与等等,这些也都可能是价格变化的重要原因。

因此,我们并不能断言比特币减半和价格走势间会存在某种必然的联系。

4.小结

比特币四年减半是它产量规则设计的计算结果。相比四年减半和比特币价格变化之间的关系,或许你可以更多关注比特币为何如此设计?为什么总量固定,又通过产量减半来持续降低它的新增供给,以避免比特币被很快挖完呢?

也许你的答案和我们一样:比特币四年减半的设计是为了能赋予比特币更多价值。

补充

1.如果比特币持续稳定运行,2140年将会全部挖出。

2.比特币是“庞氏骗局”吗?

比特币是否“有一个中心人物或机构来运作”,是否“承诺高回报”,是否“用新参与者的钱给早期参与者支付利息和短期回报”?

首先,“有一个中心人物或机构来运作”?

我们都知道,2008年中本聪发明了比特币,2年后便隐退。从此,比特币由一群来自世界各地的顶级程序员维护,被称为“比特币核心开发者”。

这样看,貌似比特币有一个“中心机构”,其实不然。这些核心开发者的主要工作是维护比特币代码以及如何改进比特币系统,而不是忽悠普通人去购买、投资比特币。

第二点,“承诺高回报”。?

在中本聪2008年发布的比特币白皮书里,并没有任何“承诺高回报”的字眼,中本聪也没有公开宣称投资比特币可以带来丰厚回报。

比特币本身是开源的,所以任何人都可以查看比特币代码,对比特币代码做出贡献。所有比特币交易记录,都存储在比特币网络中,世界上任何一个人都可以查看。

如果真的存在“承诺高回报”,也就不会有一个程序员在2010年用10000个比特币换取2块价值25美元的披萨了(这10000个比特币现在相当于4.4亿人民币,最高时价值14亿人民币)。

最后一点,“用新进参与者投入的钱给早期参与者支付利息和短期回报”。?

既然比特币并不存在一个“中心机构”,也不存在“承诺高回报”,就不可能有“用新进参与者投入的钱给早期参与者支付利息和短期回报”的操作。

你可能会说,不对啊?昨天以4.4万的价格买入,今天以4.5万的价格卖出,就是在用新进参与者投入的钱(今天4.5万买入的人)给早期参与者支付利息和短期回报(昨天4.4万买入、今天4.5万卖出的人)。

错在哪儿?

众所周知,买卖比特币是个人的自由。一个愿买,一个愿卖,并不存在强制买卖行为,且不存在诱导新人参与,所以不能称为“用新参与者的钱给早期参与者支付利息和短期回报”。

再说,比特币价格也不是一直涨,而是剧烈波动,谁都无法保证买入后一定能以更高价格卖给下一位投资者。在圈内,亏损、甚至倾家荡产的比特币投机者数量,远远超过盈利、实现财务自由的投资者数量。

中本聪和他的比特币“游戏”

在2009年,有一个昵称叫“中本聪”的人,在网上发布消息,称他做了一个叫做“比特币”的超酷“小游戏”。

中本聪公开发表了《比特币:一种点对点的电子现金系统》,告诉大家这个“小游戏”的原理和玩法规则,之后还把比特币的软件代码公开:

1、任何人都可以下载软件参与,并可以通过参与其中的任务获得比特币奖励;

2、获得的比特币可以不通过任何第三方机构(如银行等),安全快速地支付给其他人;

3、比特币的总量为2100万

4、这个游戏任何人都无法作弊,越多人参与,系统就越强大,就连任何黑客、政府机构都无法关停或者击垮它;

是的,这就是一个有钱、有权也不能为所欲为的公平“游戏”;

一开始,只有中本聪一个人在玩,后来,开始有一些人觉得这玩意儿很酷,开始参与进来一起做任务拿奖励。

再后来,有人用10000个比特币和别人换了2块披萨越来越多的人参与做任务拿奖励,并且用来交换各种东西。

比特币的基础术语

比特币,其实就是中本聪发明的一个点对点电子现金系统,具有去中心化的特性。

1、中本聪

比特币的创造者,开源了比特币系统后,自己先挖了一段时间矿,后来就隐匿了。

虽然公开的软件源代码可以让大家放心他无法控制比特币,但他手里仍然持有100万个早期挖到的比特币。

2、点对点

因为英文是Peer to Peer,简称P2P,所以点对点网络也叫做P2P网络。

P2P网络由许多计算机组成,这些计算机之间是平等的关系,每台计算机都可以共享数据,也可以从其中的任何一台计算机下载数据。

3、电子现金

以数字的形式,在互联网上流通,相比实体货币,电子现金更加快捷、方便。支付宝、微信、银行账户中可以用于支付的数字余额,就是电子现金。

4、去中心化

简单地说,就是许多节点(比如:许多计算机)组成的一个互相连接的系统,节点是平等的关系,任何人都可以自由地和其他节点建立联系。

比特币挖矿的意义

比特币挖矿浪费电,有意义吗?

虽然比特币网络运行了将近10年,但仍有很多争议。一个被人诟病最多的地方,就是比特币通过POW机制挖矿,需要耗费大量的电力资源,是对地球资源的巨大浪费。

通俗地说,区块链就是一个去中心化的账本。「记账」工作本身非常简单,就是把真实、有效的转账记录,如实地写入账本里。

区块链账本公开透明,人人都可以记账。

问题是,虽然记账简单,但你也得让别人愿意帮你记账才行。所以,传统银行要发工资招人完成记账,比特币系统通过比特币激励招矿工完成记账。

那比特币「挖矿」的意义是什么呢?

对于比特币系统而言,需要有人来参与完成记账工作,挖矿是分配记账权的一种方式。

对于比特币矿工而言,花了大量的人力、物力、财力购买矿机、搭建矿场,参与挖矿就是要赚取系统奖励的比特币,博取利润。

那问题又来了,该怎么合理地分配记账权让矿工持续地参与记账呢?即采取什么共识机制维持系统稳定运转呢?

中本聪设计比特币时,采用了POW机制,矿工通过算力公平竞争,争夺比特币网络的记账权。
 


BTC密码学原理

比特币用到的密码学两个功能:

  1. 哈希
  2. 签名

比特币中先对一个mansage哈希,再对哈希签名。

加密货币

加密货币(crypto-currency)是不加密的,区块链上的所有交易都是公开的,包括转账地址和转账金额。比特币中和密码学有关的技术主要就是哈希签名这两种技术。

密码学中的哈希函数

密码学中的哈希函数叫cryptographic hash function,有如下两个性质。

性质1:collision resistance(collision free)

这里的collision哈希碰撞,即两个不同的输入用哈希函数算出的哈希值相等:
x̸​=y,H(x)=H(y)

哈希碰撞是不可避免的,因为输入空间总是远大于输出空间。按鸽笼原理来看,当实际输入超过输出空间大小时就必然发生哈希碰撞了。

collision resistance的意思就是没有什么高效的方法去人为的制造哈希碰撞,即知道一个y,没有特定的找到x的方法使得H(x)=H(y)。如果一定要找的话只能用brute-force的方式,即遍历输入空间不断计算哈希值,直到找到恰好碰撞的那个x。

collision resistance可以用来对一个信息求digest,用来检测对这个信息的篡改。因为如果这个信息的内容被改掉了,那么哈希值就会改变,没有专门的修改信息内容而不改变其哈希值的手段。比如使用云存储时,在上传文件之前计算一个哈希值放在本地,以后下载下来再计算一下哈希值和本地之前记录的哈希值比较一下,如果一样就说明下载下来的内容还是之前的内容,没有被篡改。

没有哪个哈希函数能在数学上证明是collision resistance的,这个性质只是靠实践中的经验,也就是那些符合这个性质的哈希函数只是长期下来没有找到人为制造哈希碰撞的方法,这时候也就认为它们是collision resistance的。
有些函数以前认为是collision resistance的,后来人们找到了人为制造哈希碰撞的方法,比如MD5,所以它已经不安全了。
 

性质2:hiding

hiding是指哈希函数的计算过程是单向的,是不可逆的。即可以x→H(x),但无法x←H(x)。这表示哈希值H(x)没有泄露有关输入x的任何信息。
因为总可以蛮力求解,所以hiding成立的前提是输入空间足够大,使得蛮力求解在当下计算力条件下不可行。而且输入的分布要比较均匀,各种取值的可能性都差不多,不然只需要在分布的峰值部分做蛮力求解就很可能能找到输入值了。


实现digital commitment

用前面两个性质可以实现digital commitment,这也叫digital equivalent of a sealed envelop。

这里肖老师为了解释sealed envelop,举了一个现实生活的例子。如一个人说自己能预测股票涨停,那么如何证明呢?如果让他提前公布自己的“预测”——明天股票的涨停,然后明天再去看股市,那么他公布的信息本身就会影响到股票涨停。如果在股票涨停之后再公布,那么大家会怀疑他有没有篡改自己的“预测”。
而这里sealed envelop也就是解决这个问题的办法,让这个人先把预测结果写在纸上,放进信封里封好,然后交给第三方的公证机构保管。第二天股市收盘后,再让公证机构检查信封完好、打开信封、查看纸上的预测结果和实际涨停是不是一致即可。

而使用digital commitment在这个问题上的做法是把预测结果计算出一个哈希值,然后把哈希值公布出去,因为有hiding的性质,所以大家没法通过哈希值知道预测结果。第二天收盘后公布预测结果,因为有collision resistance的性质,所以预测结果是没有篡改过的,否则和公布的哈希值就对不上了。

在这个问题里,例如预测的是“涨的股票的名字”,那么因为股票一共就那么多支,输入空间并不是足够大,这样就不满足hiding的性质(大家可以遍历所有的股票取哈希去知道预测的是哪支股票涨)。这时候的解决办法可以是在输入后面加上一个随机数nonce,强行增大输入空间:
H(x∣∣nonce)


比特币中的哈希函数

比特币中使用的哈希函数需要满足前面密码学中哈希函数的两个性质,但还有一些额外的内容。


性质3:puzzle friendly

除了前面两个性质,比特币中的哈希函数还要满足puzzle friendly这个性质。这个性质是说哈希值的计算结果是不可预测的,也就是光去看这个输入没法知道计算出来的哈希值可能是什么样的(具有什么特征)。
即例如,想要计算出的哈希值落在某个范围内,那没有特定的办法去构造输入。又如,想要计算出的哈希值前面有k个连续的0,也没有特定的办法去构造输入。甚至无法知道什么样的输入更有可能得到具有特定特征的哈希值,要想得到这种输入就只能一个一个去试,没有捷径。
比特币挖矿的过程就是去找一个随机数nonce,这个nonce和区块的块头里的其它信息合并在一起作为输入,取哈希值,所得哈希值要小于等于某个指定的阈值:
H(block header)≤target
注意,nonce不是区块头以外的东西,它是其中的一个域,但是可以人为设置。挖矿的过程就是不停的去试nonce,使得整个块头部分取哈希小于等于target。
在这里插入图片描述

有了puzzle friendly这个性质,使得比特币挖矿的过程没有捷径可言,只能不停的去试大量的nonce才能找到符合要求的解,所以才能用来用作工作量证明(proof of work)。

这个puzzle friendly和最前面的collision resistance有一定的联系,但不是完全一样。那个是无法去人为制造哈希碰撞,而这个是无法去人为构造符合特定特征的哈希值。

difficult to solve,but essay to verify

虽然找到一个符合要求的nonce很难,但一旦找到之后,将它发布出去以后,其他人要验证这个nonce是不是符合要求是很容易的,只要算一次哈希值再和target比较一下就可以了。

SHA-256

这是比特币中使用的哈希函数,SHA是Secure Hash Algorithm的缩写。满足上述的三个哈希函数的性质。

两种加密体系

  1. 对称加密体系
  2. 非对称加密体系

对称加密体系

最早的加密体系是对称的加密体系(symmetric encryption algorithm)。如两方进行通信,商量好一个密钥(encryption key),发送方使用密钥加密,接收方使用密钥解密。因为加密解密用的是用一个密钥,所以这是对称的加密体系。这种方式假设了存在某种安全的渠道,能够把密钥分发给通讯双方,这是对称加密体系的一个弱点。

非对称加密体系

非对称的加密体系(asymmetric encryption algorithm)不再像对称加密那样使用一个密钥,而是使用一对密钥,即公钥私钥,加密用的是公钥,解密用的是私钥。

例如A要发信息给B,那么使用B的公钥对信息进行加密,B收到信息后用B自己的私钥进行解密就能得到原来的信息。也就是说加密和解密用的都是接收方的公钥和私钥。

这样做的好处是公钥是不用保密的,可以告诉所有人,有的人主页上就有PGP public key。只有私钥是要保密的,但是私钥只需要保存在本地就可以了,不用传递给任何人,这样就避免了传输密钥过程不安全的问题。要回复对方再用对方的公钥加密,始终都不需要知道其他人的私钥,这就解决了对称加密体系中密钥分发不安全(不方便)的问题。  

比特币中的签名

加密货币是不加密的,前面学的非对称加密的公钥和私钥在比特币系统中就是用来做签名的。

比特币系统中的账户管理

日常生活中想要开个账户,那就是带上证件去银行办理,这种就是中心化的账户管理方式。在比特币系统中是去中心化的,也就是没有银行之类的机构。每个用户自己决定开户,不需要任何人批准,开户的过程就是在本地创立一对公钥和私钥的过程:
(public key, private key)
公钥就相当于用户的银行账户,转账只需要知道公钥就可以了。私钥相当于账户密码,知道了私钥就可以将账户上的钱转走。

对交易签名

比如A要向B转账,即A在区块链上发起一个交易,所有交易是公开的,但大家怎么判断这个交易确实是A发起的,而不是别人冒名顶替的,这就需要A用户用自己的私钥对交易进行签名。其他用户拿到签名和交易信息后,可以用A的公钥去验证签名的正确性。

签名用的是私钥,验证签名用的是公钥。都是同一个用户的公钥和私钥。

公钥私钥对重复问题
既然公钥私钥对始终是在本地产生,那么产生重复怎么办?
如大量生成公钥私钥对,然后去对比产生的公钥是不是和区块链上已有的某个公钥相同。如果相同,那么就可以用对应的私钥把账户上的钱转走。
这种方式理论上可行,但是实际上没法做,因为产生重复的公钥私钥对的概率非常小,可以忽略不计。到目前为止还没有能用这种方法攻击成功的先例。 

a good source of randness

生成公钥私钥的过程是随机的,但要求选取一个好的随机源,否则前面的分析就不成立了(就有不足够小的可能生成重复的公钥私钥对)。
比特币中使用的签名算法不仅在生成公钥私钥对时有好的随机源,在之后每次签名的时候也要有好的随机源。如果签名时使用的随机源不好,就有可能泄露私钥。

 

发布了10 篇原创文章 · 获赞 2 · 访问量 106

猜你喜欢

转载自blog.csdn.net/weixin_40976389/article/details/105444123