Michael.W深度剖析Bitcoin系统第1期-初探比特币

1 Michael.W有话说

据不完全的非官方数据统计,我身边对区块链技术有所了解的朋友就像晚上会跟我聊微信的妹子一样寥寥无几。所以我在这里也是给大家普及一下:正常人触不到的技术领域中到底在发生着什么样的变革。

我所写的东西要比泛滥于网络的”三分钟带你认识比特币“、”五分钟让你懂得区块链“、”十分钟助你赢得人生第一个100万“等视频内容要深入许多。因为我相信生活和做学问是一样的,做到"知其然知其所以然"才会让你在同类中有更稳定的心态和更高的视野。

火热的炒币市场之所以会被许多媒体定义为"庞氏骗局"就是因为有太多梦想一夜暴富的人,不愿意先了解技术本质就将大量资金扔到资本市场中。不明是非,不辨真假,也终将成为是非之人。

互联网在不到十年时间疯狂席卷了神州大地。在我选择大学专业的时候还流行着这样的趋势——“考了高分最好去学自动化和电子相关专业”。但是到我毕业之后,互联网等数字产业已经满地开花。所以未来十年内由经济和技术发展所带来的时代红利究竟能花落谁家,个人觉得一定是那些敢于创新和探索的先驱者。

文章中我会以最通俗的话和用PPT画的图来讲解关于比特币功能机制的一切原理,希望能对阅读的你有所启迪。

在此郑重声明:我只是在这里分享我对比特币系统设计的理解,绝对不构成任何关于数字加密货币的投资建议。

炒币有风险,投资需谨慎。

2 比特币与区块链

有人认为区块链是未来价值互联网的雏形,有人认为是世界上最慢的数据库

我们现在生活中买外国口红、看日本电影的依赖的网络是信息型互联网。在你浏览器上能看到的东西都是从远端服务器中通过网络拷贝到你的电脑中的,所有的东西在本质上都可以复制,拷贝。这样就产生了一个大家可能从来都没有思考过的问题,如何做到价值的传递?

如果我有100块数字资产,由于你为我提供了服务我要把这个资产支付给你。但是依靠现在的网络模式可以做到么?肯定是不可以的,我把钱以数字文件的形式复制给你后,我自己手里还存有着这个文件。这样一来,世界上的数字资产就会来越多,大家不用干活而在家Ctrl+C和Ctrl+V就可以了。

这种现象的形成并不是关于”数字资产“的想法奇葩,而是我们当前使用的网络协议具有设计缺陷。

价值互联网模型设计已经成为各大数字巨头资金投入的主要流向。简单地说就是有这样一种网络,你在上面可以进行各种资产的交易,并不单单指货币交易。而且在网络层面就已经给黑客和网络小偷进行了绝对的封死。你的资产永远是你的,只要别人不知道你的私钥即便它偷了你的手机、身份证甚至是整了容都无法挪用你的资产。

哈哈,这些东西听起来是不是跟千禧年听说可以网络购物一样不可思议?

我来理性地谈谈我对区块链的看法。

作为数据库,区块链不但慢,而且仅仅实现了数据库很小的一部分功能。从历史的角度看,很少有哪项技术像区块链技术这样饱受争议

有人吹捧区块链,把他跟工业革命相提并论,说它是跟蒸汽机一样伟大的发明。也有贬低区块链的,说他是旁氏骗局。真正懂区块链的人是很少的,尽管有许多人都在谈论它,但大多数人都是在基于区块链来谈论商业模式,而且还是那种很务虚的商业模式。

任何处于野蛮生长期的技术变革,似乎都要经历这么一个过程。

我要深入剖析的比特币是区块链技术的一种应用,所以千万不要认为区块链=比特币。比特币只是基于区块链技术的一种加密数字货币而已。

先看一下比特币这些年的价格走势:
在这里插入图片描述
比特币价格最高飙升到将近20000美元,现在处于稳步下降阶段。

不要感觉现在开始搞区块链已经很晚了,毕竟错过了比特币暴涨的时代。放大格局,从区块链的技术发展整体来看,现在还是处于初期阶段

下图展示的是各种加密货币所占的市场份额:
在这里插入图片描述
着时间的发展,比特币所占的市场份额已经开始萎缩了。这里一个标致性事件就是以太坊的出现(大约是2015年),这也预示着不同国家或组织已经开始在这个领域进行了探索和部署。

比特币只是所有加密数字货币的一个雏形,在功能和属性上看与现阶段的一些优秀的加密数字货币存在一定距离。

加密数字货币的设计是数学密码学计算机科学以及金融学的融合。在我后来阅读比特币源代码的过程中,更是发现这个货币系统简直神奇到已经把人性的善恶都考虑在了其中。后面在讲到共识机制的时候,我会详细说明。

3 比特币系统设计中涉及到的密码学

这部分我会完全以一个小白的角度来阐述原理。

但是有很多专业词汇都是在中本聪所著的比特币白皮书中第一次出现。我也不知道该怎么翻译最好,干脆就直接列出来。

比特币虽然叫加密货币,但是从形式上根本不加密。所有的地址、转账都是公开的,任何人只要拿到了你的交易的哈希值就可以在网络上看到。

比特币中应用的两个有关密码学的知识:1、哈希 2、签名

3.1 哈希

比特币中应用的哈希函数,其具有两个特性:collision resistancehiding

首先了解一个概念:哈希碰撞

什么是哈希碰撞?假设H为哈希函数,当X不等于Y时,出现了H(X)=H(Y)的情况。这种情况的产生就表示发生了哈希碰撞。

哈希碰撞是很常见的,在我们使用哈希表的时候,不同的输入很可能被映射到哈希表的同一个位置上。假如有256位的哈希值,他的输出空间只有2^256这么多,输入空间为无穷大。所以,哈希碰撞是不可避免的。

那collision resistance代表什么意思?

我的理解就是不存在任何人为的高效的方法可以刻意制造出哈希碰撞。即根据X,能快速地找到Y,使得H(X)=H(Y)。

除非brute-force,蛮力遍历所有可能性,即暴力破解

注意:没有哪个哈希函数是可以在数学上被证明是无法出现哈希碰撞的。

MD5曾经很流行的哈希函数,现在已经被破解。即可以在该该算法内人为地制造哈希碰撞。

那hiding代表什么意思?

哈希函数的求值过程是单向且不可逆的。即一个数的哈希值没有泄露这个数的有关信息,正如我知道H(X)的结果值、X的值以及H函数的具体计算过程,但是也无法做到给我一个结果值能让我推出来X值。

hiding的成立条件是:输入空间要足够大才可以,使得蛮力求解的方法不可行

一切预测问题,预测的结果不能提前公开。因为公开后,会影响到结果的走势。所以哈希值是完全适应于有关结果预测的问题。

hiding特性起到了一个digital equivalent of a sealed envelop的功能。即把预测结果的哈希值公布出来,等到结果产生时,再把预测的结果放出来。可以通过已经公布的哈希值来验证该预测是否被篡改。

那当输入空间不是足够大的时候怎么办?一般将预测结果后面追加一个随机数(nonce),然后再取哈希。

比特币中要求的哈希函数还要有第三个性质:puzzle friendly

POW的实现是H(block header)<=target,nonce是block header中的一个成员变量。通过改变nonce的值来使得求得的哈希值落在输出空间中小于target这部分中。puzzle friendly也就是说这个过程只能暴力尝试无捷径。所以这个过程才能拿来做工作量证明。关于工作量证明后面我会细讲。

当一个人挖到矿,求出nonce时,将这个nonce广播出去,其他节点验证这个nonce值是否有效是非常容易的:进行一次哈希运算即可。

挖矿很难,验证很简单的这个性质叫:difficult to solve but easy to verify。读到这聪明的小伙伴一定发现了:这个puzzle friendlycollision resistance很像呀。从表面上看确实很接近,但从实质上讲还存在着很大的不同。

比特币中用的哈希函数叫SHA256,即secure hash algorithm,其结果占用256位空间。

3.2 签名

首先先科普一下非对称加密的概念(asymmetric encryption algorithm)。

非对称加密需要两把钥匙,一个是公钥,一个是私钥。每个人都有一套属于自己的公私钥对。

我要把信息传给你,我用你的公钥加密该信息,你用你的私钥解密。你给我回消息的时候,只需要用我的公钥加密即可。公钥可以在网络中随意传播,好人、坏人或者非人类拿到都可以,但私钥一定要保存在自己的电脑中。

最早的加密为对称加密(symmetric encryption algorithm)。我跟你说悄悄话用的是同样的秘钥,我用这个秘钥将我对你的爱进行加密,当你收到了我的密文时要用同样的秘钥解密。这样看起来很和谐,比非对称加密方便的太多。但是对称加密的最大弱点也暴露出来。那就是秘钥的分发,当你想把秘钥传给接受方的时候,很难保证秘钥传输的安全性,即不会被窃取你密文的坏人也收到。

我想告诉所有的小伙伴:你们在网络上发送的东东,无论是照片、文字还是视频,都会通过字节流的方式传输。但凡懂网络安全技术的人类,都可以将这些数据轻松截获。所以,各种加密安全措施都是为了做到让那些窃听者拿到了你发送的东西后无法还原成可读懂的状态。

3.3 比特币地址

日常想在银行开户,需要带上身份证去银行开户(中心化)。比特币的开户很简单,在自己电脑上创建一对公钥和私钥即可

如果别人想给你转账只需要知道你的公钥就可以了。

创建公钥和私钥的目的其实是为了做签名使用。

如果我要转账,我把交易信息广播到了比特币网络中,那么矿工怎么确认这笔交易确实是由我本人发起的呢?这就关系到了签名。在我向比特币网络中公布这条交易的时候,我还要用我的私钥对这个交易进行签名。其他人在收到这笔交易的时候再用我的公钥来验证这笔交易的正确性。

注意:在签名的时候,我是用我的私钥加密,别人用我的公钥来进行验证。

当我第一次接触到比特币这种“开户”方式时,我曾经有过这样的想法:

我用电脑不停地产生公私钥对(256位),然后用其中的公钥去网络中所有的公钥对比。如果有相同的公钥,那么我就可以用对应的私钥把账户上的比特币偷走。

这个攻击方法从理论上说是可行的,但是从实践上来说是完全不可能的。

假如你有一台超级计算机,每天都在生成公私钥对,能生成一个已存在的公私钥对的概率比地球爆炸的概率还要小。数学好的同学动动笔算一下很容易明白。

产生一个别人无法第二次生成的公私钥对的前提是有一个良好的随机源,即a good source of randomness 。可见公私钥的产生很依赖于随机数,如果你的随机源不好,那么我在前面的分析和论证都将无效。

比特币中的签名算法不单单要求在生成公私钥的时候要有好的随机源,之后每次签名中也要求有良好的随机源。以上过程中只要有一次随机源不好,就有泄露私钥的可能,之后就全完蛋了。

ps:
本人热爱图灵,热爱中本聪,热爱V神,热爱一切被梨花照过的姑娘。
以下是我个人的公众号,如果有技术问题可以关注我的公众号来跟我交流。
同时我也会在这个公众号上每周更新我的原创文章,喜欢的小伙伴或者老伙计可以支持一下!
如果需要转发,麻烦注明作者。十分感谢!
后现代泼痞浪漫主义奠基人 公众号名称:后现代泼痞浪漫主义奠基人