专栏名称: 渡鸦区块链
区块链领域创业公司的首发阵地 投资机构必读公众号
目录
相关文章推荐
请辩  ·  我如何消除内耗? ·  21 小时前  
请辩  ·  读书是不是无用了? ·  昨天  
51好读  ›  专栏  ›  渡鸦区块链

比特币深层技术原理浅析

渡鸦区块链  · 公众号  · 区块链  · 2017-09-01 09:00

正文

请到「今天看啥」查看全文



2. 区块链


知道了记什么,那么还是那个问题:怎么记?我们并没有更好的办法,仍然只能一页页的来,而且一个个的来。也就是说,我们不但不能改动前面的账本页,在一段时间内只能新启一页,而且还得每个交易都排着队一个个的审核确认。我们把这个“页”构造为数据“区块(block)”,并把区块按页码顺序“链接(chain)”起来,即构成了账本“区块链(blockchain)”(听上去倒是挺简单的嘛!——我都说了简单粗暴)。怎么链接?纸页可以用线串,难不成...?嗯,还真有:我们叫它哈希(hash)指针。


哈希指针是给前一个数据区块生成哈希值,然后存储在后一个新产生区块的头部。它不仅可以唯一标识前一个块是谁,而且还可以检测前一个块是否被篡改:如果前一个区块的交易被篡改,那么算出来的哈希值就跟后一个区块头部存储的哈希指针不一致。这可以帮助新加入的节点在网络中查找历史区块时鉴别真伪,也可用于审核最新产生的区块是否合法(对于新区块这还不够)。在比特币共识协议中,哈希指针更有其独特的作用。后文再详细论述。


区块链是比特币的底层技术,比特币区块链的一个数据块大小目前的上限是1M,但即将要扩容到2~4M。


  • 哈希到底是个什么东西?

    它是“hash”的音译。指代一种摘要算法,这种算法可以将一个很大的数据内容(如:ppt文件、电影或程序包)用一个简短的字符串表示。厉害之处在于:只要那个文件有一点改动(即使一个字节、一个标点符号),那么重新算出来的这个哈希字符串就会跟着变化,往往跟原始的那个有很大不一样,一眼就能看出来。
    那...这能干什么用呢?如果你发现有人偷偷改了你的ppt, 比起一个字一个字的去对比检查,直接生成一个哈希值进行对比岂不是方便多了。
    常用的哈希算法有md5, sha1, sha2等,可以在这里体验或问度娘下载使用。区块链使用sha256(隶属于sha2族)。


3. 密码学


前文有简单提到过匿名性,那是不是意味着任何人包括系统本身都不知道任何一个地址的真实身份是谁。那么系统又如何知道这个地址的钱谁有权限支配,以及收款人...?


这要归功于数学的奥妙和密码学的成功。这里不多展开。简单讲,你既可以用同一个密码和相对应的加密算法去加/解密任何电子文档内容(对称加密),又可以用某种算法先生成一对密码(密钥对),一个叫公钥,另一个叫私钥,然后用公钥加密即可用私钥解密,用私钥加密又可用公钥解密(非对称加密)。比特币的公私钥使用了椭圆曲线密码算法secp256k1。而比特币中的密码学还包括哈希证明及谜题,后文再细讲。


在比特币系统里密码是怎么使用的呢?先生成一对公私钥,私钥一定要藏好。然后把公钥通过某种转换(SHA256 + RIPEMD160 hash算法)生成一个字符串,即比特币地址,该地址即可发给任何人,让他们给你付款(只要人家愿意)。就像支付宝收款码,你也可以生成一个收款二维码贴在任何地方。不过你以字符串方式发给别人的地址其实通常会再进行一次转换(Base58编码),以便更短更可读。如果还不了解可下载手机钱包app体验一下:blockchain.info、Jaxx等。


比特币以及其他类似货币的整个技术体系都是以密码学为基础,这正是笔者为何称其为“加密货币”的原因。


4. 提款权


有了公私钥密码,确认身份就好办了,我私钥加密的内容只有我这个公钥可以解开。这正是比特币协议验证身份的基础:


你想要花掉一个UTXO的钱给另一个地址,就看你有没有提款权。


而你的这个UTXO本身也是由别人支付给你的,系统曾经验证过他的提款权。

提款权的验证由一组简单的脚本程序来完成,这里不作展开。一笔交易包括输入(要转出的那些交易的hash ID、公钥、提款权签名)、输出(收款人的地址脚本及数量)、本交易hash ID以及元信息。需要注意的是,对于本交易并不会验证输出的收款地址,因为无法验证也没必要(收款人需要自行保证正确性,除非他想要丢掉这笔钱),只有在收款人想花掉它的时候才一并验证,收款地址是提款权验证时的一个必须参数。那么本交易仅需验证输入参数提供者是否对其指定的UTXO有提款权。


需要注意的是:一个UTXO每次都得花完。你说我不想给人家这么多钱!那可以同时

支付给自己的另一个地址,不然


没花完的,就被矿工捡去了!


什么?Are you joke me?是的,矿工就是捡漏的,这也就是所谓的交易费。


  • 话说,即将在数月内实施的隔离验证方案将改变交易的数据结构。


5. 资金安全


前文提到,私钥一定要藏好。只要你不泄露收款地址的那个公钥对应的私钥,就没人能取走你的钱。也许有人想到了暴力破解,或者碰巧正好别人生成了跟我一样的密钥对怎么办呢?这或许是个问题,但你知道比特币的椭圆曲线密码算法能生成多少个不同的密钥对吗?


理论上比银河系中所有星球上的沙子还要多(假设都跟地球一样)。


不过也许你会想到应对措施:借鉴银行的方法重试3次就冻结。其实这是不行的,银行是中心化的黑盒子,每个环节都控制在他们手里。但对于一个去中心化的公开账本,我可以先拿到你UTXO的收款地址,用本地计算机穷举出你的私钥之后再发送一次交易(不需要3次),只不过这要算出来得好多万年呢!此时你一定想到了量子计算机,不过仍然不用担心,首先已经有了抗量子计算的密码算法;其次,社区一直在积极应对当前面临的各种问题,到时候提前升级节点程序即可。


6. 双重支付


前文论述了如何验证身份,应对盗取。但是如果一个合法的身份通过发送多笔交易把一个UTXO同时支付给好几个地址,又该怎么应对呢?


对每笔交易的验证,除了提款权,其实还有是否已花费的验证。


这些验证在一个区块的产生过程中将顺序执行,即:如果一个UTXO在历史上任何一笔交易中被花费,那么它在后续另一笔交易中一定会被检测驳回;同时由于块的产生也是顺序的,这意味着在任何情况下,双重支付交易总能被检测,这得益于区块链的数据结构和UTXO记账模型,双重支付的问题终于得到解决。事实上,还有一种情况会导致双重支付:区块链分叉,将在后文讨论。


7. 匿名性


前文提到的“验证身份”其实并不准确,比特币交易仅需验证提款权而非身份。在整个比特币网络中,手握密钥走天下,没人管你是谁。这便是其匿名性。也许你听说过前不久的比特币勒索病毒(它只是勒索让你给它支付比特币,而不是攻击比特币网络系统),为什么不勒索美元、欧元或人民币?这也正是匿名性的优势所在。也许你会问:


匿名性岂不是会助长犯罪?


确实是这样的,著名的暗网(deep web)黑市交易网站“丝绸之路(Silk Road)”就是一个例子,仅支持比特币。但任何事物都有两面性,就看怎样使用它。菜刀可以切菜,也可以...?杀猪。


匿名性真好,我岂不是可以为所欲为了?To young to simple, 警察蜀黍想找到你还是很容易的。丝绸之路的创建者已被FBI拘捕(暗网本身就具有很强的匿名性,但仍然被找到)。




四、新币发行与挖矿


先简要回答几个问题:

  • 矿工是谁


比特币网络节点就是矿工,它们验证交易、争夺出块权,同时也维护着整个比特币网络的健壮运行。


  • 为什么要挖矿


获得奖励报酬(可是很赚钱的呢!利益驱使,大部分是这样的);

就是想维护比特币网络(情怀,估计是占很少数吧)。


  • 那又是为什么叫“挖矿”呢?


比特币挖矿所经历的阶段与上世纪的淘金热挖矿历史非常相似。







请到「今天看啥」查看全文