比特币原理
最近学习了区块链的知识,对此有了一些自己的理解,买了一点表示纪念,下面是一些收获与总结。
1区块链:关于比特币
区块链涉及了密码学、分布式存储、p2p传输,哈希链表,共识机制,博弈论的东西。
比特币与区块链是两个东西,区块链是比特币所应用的底层技术,比特币也是第一次对于区块链的应用,比特币打破了任何政府的资本管制,在人类历史上第一次用技术手段保证私有财产神圣不可侵犯。。
比特币可以看成是一个大型网游的货币,它的来源非常单一, 所有玩家进入游戏都是为了解一道数学题,解开这道题,就可以获得一定数量的比特币回报,每过十分钟大概都会有人把这道题解开(求解的难度由比特币系统调节,整体难度一直在10分钟左右,其实就是所谓的工作量证明),最开始比特币就是一些圈内人挖的,挖比特币是有成本的,不仅烧电,而且烧显卡,但是渐渐的,有人就希望自己的比特币能多些(可能是为了更有成就感),而比特币的产生途径只能通过挖矿,好在比特币是能交易的,可以让别人转给自己,但是只要人的智力是没有问题,无源无故是不会有人送别人东西的,一定是有等值的交换,就如同游戏里的道具或者游戏币,可以用现实中的RMB购买,是人类自己赋予了虚拟产品的价值,所以比特币历史上有一笔交易就是有人用10000比特币购买了两个披萨。
因为比特币的匿名性,低手续费,已经被很多科技公司开放作为支付方式,它的缺点是容易被不法分子用来洗黑钱,勒索等行为。
2由货币的发展来看比特币的产生
在人类文明的开始,如果两个人要进行交易,比如一家有几头猪,一家有牛,那么如果他们想进行交换,就可以用牛换两头猪,这就是最开始的交易,以物换物,但是这样实在太麻烦了,牛猪这类大动物也不好扛,也不好交换,且交换的标也不精确。
随着文明发展,人们发现海边会有很多贝壳,贝壳质地坚硬且可以用来做工具用来做装饰,取得贝壳也需要耗费人力,而且数量也是有限的,这样就形成了贝币,相当于产生了一个统一的有价值的物品作为中介,这就是一般等价物,但是此时还不是货币,只有一般等价物的职能稳定发挥在贵金属上,才能发展成货币。。
贝壳随着季节不同数量会有较大波动,且数量越来越多,到了后来交换一样东西可能需要一车的贝壳,得寻找一些数量相对稳定,且相同体积价值更高,更容易携带,不容易通货膨胀的东西,很明显,贵金属就符合这一点,黄金,铜,银这类东西的开采难度比贝壳难多了,就这样贵金属就成为了货币。
黄金一般只有统治者才能使用,其它的人要想获得黄金只能按功领赏,而铜币之类的还是有不少重量,大数量携带多少有点不方便,就出现了纸币,只不过贵金属本身是有价值的,而纸币本身是没有价值的,它是由国家的信用作担保来流通。
之后随着网络的发展,纸币也可以省去,两人之间的转账只要在银行里进行数额的转换就可以,因为大家都相信银行相信国家的信用力,这种有中央机构作为担保,群众之间进行交易的过程是中心化的。
中心化会有一些问题,比如银行的数据丢失或者因为某些不可抗因素出现错误,或者银行大量印纸币,纸币越来越不值钱,发生剧烈的通货膨胀,在中心化系统中,位于中心的政府的决策非常重要,处理稍有不慎就会对结果产生巨大的偏差,经典的例子就是津巴布韦币。08年金融危机之后,让世界人民更看到了中心化的货币系统不足的一面。
同年,中本聪(化名)就提出了一种新的去中心化的基于区块链的货币系统《A Peer-to-Peer Electronic Cash System》,它去掉了中心化机构,所有人都是平等的,都可以看到账单,信用靠大家一起维护监督,这就是比特币系统,比特币的一个巨大优势就是交易成本非常低,跨国交易一般手续费是3%-4%,而比特币不到1%,因此很多商家都支持比特币支付。
3比特币系统的优势
3.1安全
非常安全所有人都拥有账单,黑客如果要黑掉账单,就需要黑掉所有人的电脑,这个成本太高了,也做不到,这个就叫分布式账单,也叫去中心化。
3.2防止通货膨胀
比特币不会遇到像贝壳一样的问题,随着数量的增多变得越来越不值钱,也不会因为政府滥发纸币变得越来越不值钱,产生比特币的机制是唯一的,大概每十分钟产生一次,到2140年比特币就会完全开采完,最后的总数会达到2100万个,和黄金一样,产量固定。
4比特币的加密机制
首先比特币核心产生一个私钥,再通过私钥产生一个公钥,再通过公钥产生一个地址,注意上面这个过程是不可逆的,从后面是无法往前推的。
首先由计算机随机产生一个256位的二进制随机数,大概是 2256次方,总共约为1077次方,数量很大,不用担心重复,如果化成16进制数就是个64位二进制。
我们对私钥用ECDSA椭圆曲线签名算法来生成公钥(ECC中的一种)。
4.1椭圆曲线方程y2=x3+ax+b
其中a,b为实数,且-16(4a3+27b2)!=0
A+B椭圆加法,相当于把A与B相连的直线与椭圆曲线形成第三个交点C,C以X轴作轴对称得到的D就是A+B的值,这是一个阿贝尔群。
如果是A+A,则相应的C就是A点的切线与曲线的第三个交点,之后步骤相同。
K是我们随机生成的私钥,接下来我们要求出KA,这就是公钥,KA=A+A+A+…共K次,注意椭圆加法也满足结合率,所以尽管K为2^256次,我们可以用快速幂原理直接求出,复杂度就降为log,只需要256次运算即可。
ECC加密要比RSA加密更快更安全,但是普通的椭圆曲线是连续的,不方便加密,比特币采用secp256k1标准,我们要把椭圆曲线整数化,在后面对P取模,P是一个大质数2256-232-29-28-27-26-24-20,而a=0,b=7,最后式子就是y2=x3+7
G的坐标
上面的是横坐标,下面的是纵坐标。
私钥是K,32字节,公钥是65字节,最后一位是标志符,用来说明这是一个十六进制数。
4.2 ECDSA加密算法在比特币中的用处
4.2.1数据加密:
Alice: KaPa=kaPb=KaKbG
Bob:KaPb=KbPa=KbKaG
上下相等,设为key,就可以进行点对点之间的加密,
只需要对于想加密的信息m对key进行可逆运算就可以。
4.2.2数字签名:
消息mk=N,这里的乘法都是群乘法,都是不可逆的,单向的。
别人的验证:mp=mGk=N*G,可以很快的验证是不是本人的消息。
签名方:Sign(m,Ka)
验证方:Verify(m,Sign,Pa)
公钥转地址:
比特币采用两次hash函数,第一次是SHA-256,第二次采用RIPEMD-160
hash函数是单向的,不能用来加密,一般用来验证.
比特币最后采用BASE58编码,根据BASE64去掉+,-,i,I,o,O这些容易混淆的字符。
如果对于串编码,直接转换成58进制,然后查表就行。
最后得到的格式叫做WIF:wallet import format,钱包导入格式。
5关于比特币交易
生活中的交易,A给B转十块钱,相当于银行那里填账单,进行转账即可,但是这是有一个信任前提的,就是所有人都相信,银行是不会转错账的。
区块链是去中心化的分布式账本,账本人手一份,采用p2p技术peer to peer,下载资源不是从中心服务器下载的,而是从附近节点下载,这是比特币系统的核心。
中本聪的论文就是:《A Peer-to-Peer Electronic Cash System》。
修改自己的账本可以,但是没有用,根据最长链原则,周围的点也不相信,即使能短暂的很好的运气更新出一个分叉更新周围的点,周围这些点很快又会和大多数账本同步成一致了。
现在从09年到现在的所有交易数据总共大概是200多G,下载了所有数据的节点叫做全节点,其它的一些叫做轻节点。
FLP定理
对于一个分布式系统,是不存在可以达成共识的确定性算法的,物理学里熵增定理,对于分布式系统,熵只增不减,如果需要减少熵,需要外部做功。
比特币所采用的共识机制,用算力来进行PoW(proof of work)。
对于所有的交易,我们把这个大账本分成很多个小账本,每个小账本由一个人来记账。
每个小账本就是一个区块,每个小区块分为两部分,区块头和区块身,head和body,
head里放version,pre-hash,time,Merkle root,Dift,Nonce,对头部进行两个SHA-256,这个数据放在下一个区块的表头里。
Merekle tree是对区块身里面的交易的一个HASH过程,区块身里面一般会有2000多条交易记录,这些交易是放在一个交易池里,所有人都可以随便拿来进行打包,谁先打完包就会开始广播,之后全世界所有结点都会根据最长链原则更新为这个最长的账单。
Merkle tree的过程:
挖矿就是不断修改nonce值,使得最后这个hash值的前面若干位都是0(现在的难度是66个0),可以通过不断修改难度值来增加时间,这也是个NP问题。
由于有了数字签名的手段,所以任意一笔交易,其它人都可以通过公钥验证检查是不是私钥所有者说的话,如果签名正确,因为签名也是对内容的HASH签名,则可以认为这个消息就是私钥所有者发的,且没有进行过篡改,任何人都无法修改别人的交易。
而如果修改自己的交易,又由于区块链有HASH的嵌套,单纯的修改所有的机器都是不认同的,需要相应修改nonce值,使整个HASH值符合,但是这样这个块的HASH值会变,后来的区块又接不上,相当于变成了一个分叉,而要想让这个分叉成为一个事实,根据最长链原则,又只能在后面加入大量的区块,而区块之间的连接又需要HASH值的前缀0要求,这个又只能靠实打实的运算量计算出来,个人的算力不可能超过主链的算力,修改或者删除记录是不可能的。
如果两个矿工同时打出一个包,那么就会形成分叉,比特币系统遵循最长链原则。
理论上可以用51%算力攻击,但是首先不可能有人拥有全网一半的算力,真有这个算力的人也不会这么闲,完全可以按正规挖矿。
如果想篡改数据,别人的发起交易无法修改,因为需要签名,签名用了椭圆曲线签名算法,无法**,只能改自己的,比如给完钱以后,让对方确认收款之后一段时间再撤回交易,但是这样就需要删掉旧的交易单,形成新的交易单,那么就需要重新打包,而比特币采用了最长链原则,所以如果想修改记录,那么就需要让交易过后的一段时间里,形成一段足够长的新链,并且打败最长链,那就需要拥有51%的世界矿机算力经过一段时间的追赶,才可以赶上,而这样明显是不现实的,故一旦进行支付,全网达成共识,那么这就是事实,靠个人修改就没有办法了。
难度调整,每经过2016个区块,就要进行难度调整,使得全世界算力差不多在10分钟内出结果。最开始每打包一个区块,奖励50BTC,每经过210000个区块,奖励减半。
为什么是十分钟?
首先是因为中本聪喜欢,其实从安全性来看这也是一个比较合理的数字,十分钟这个时间具有低效与安全的特性,如果时间过长,那么交易确认的时间就会太长,交易就会很不灵活,而如果交易时间太短,一般一个信息分布到全网大概需要十几秒,如果把出块速度加快,每个包里的交易数量变少 ,前缀0的要求变少,出块时间自然变短,交易速度变快了,会非常容易出现分叉,当一个比特币系统随时都有大量的分叉时,全网的算力就会分散,出现机器之间的内耗,大量的计算资源浪费在最终无效的链上,这样就减少了攻击最长链的难度,可能只需要百分之三十甚至更低的算力就能制造最长链来篡改历史账单。
6关于比特币的现有问题与展望
比特币是第一次对于区块链的应用,比特币打破了任何政府的资本管制,在人类历史上第一次用技术手段保证私有财产神圣不可侵犯。比特币的巨大优势就是交易成本非常低,跨国交易一般手续费是3%-4%,而比特币不到1%,因此很多商家都支持比特币支付。
比特币也有很多缺点,由于它的匿名性比较好,经常被用来洗黑钱,进行暗网交易,同时由于它去掉了中心化,对于个人保存**的要求就非常高,一旦丢掉就再也找不回来,不像银行带上证件能补回账号。同时由于它缺乏监管,很容易被操纵价格,由于数量是有限的,一旦出现经济危机,无法通过中央机构来调控,适度的通货膨胀是好的,而比特币总量由于丢失**的现象,总量会越来越少,会有通货紧缩的风险,这对宏观经济的调控是非常不好的。
不过比特币的出现确实是一个**,是人类对于密码学,分布式存储,P2P,博弈论等知识的应用,是人类智慧的结晶。
关于展望,比特币的几次减半出现在12年,16年,每一次都伴随着行情,比特币不是传销,它更像是一种金融衍生物,是基于算法的一个高度安全去中心化的金融工具,下一次矿工奖励减半应该是在2020年中旬,按照币圈的德性,大概率又会被炒作一波,相比其它币种,BTC是一个不错的纪念品,可以持有少量BTC来纪念。