美文网首页
比特币学习

比特币学习

作者: neo已经被使用 | 来源:发表于2018-07-17 16:23 被阅读23次
1.密码学以及加密货币简单介绍

我们知道加密货币是基于密码学的,密码学运用了一些很巧妙的但是很高深的数学理论,而比特币只是使用了相对简单的密码学的知识,哈希和数字签名。

1.1 Hash函数

Hash函数有以下几点属性:

  • 输入可以是任意大小的string
  • 输出大小是固定的
  • 计算n位字符串耗时O(n)

对于比特币的Hash函数(比特币用的SHA - 256,输出大小是256位):

  • collision‐resistance
    collision:两个不同的x、y,H(x) == H(y)
     collision‐resistance是指没人能找到collision ,但是collision是存在的
     为了找到collision,计算机需要计算2^256 +1次(最坏情况),2^128 次(平均情况)
     这是什么概念?把所有计算机从宇宙开始至今找到collision的几率都非常低
     但是没有任何一个hash 函数被证明是collision‐resistance的,因为概率特别低,所以我们可以认为它是collision‐resistance
     例子:两个文件的hash值相同,我们就可以认为是同一个文件
  • hiding
    假设r取值范围是非常发散的,给定y = H(r||x),找到x是不太可行的(||串联)
  • puzzle‐friendliness
    假设r取值范围是非常发散的,给定y = H(r||x),y是n位输出,在时间小于O(2^n)不可能找到x
     这意味着想要hash函数输出一个特定的值,如果随机选取x,那么找到特定值是非常困难的

目前有很多种Hash函数,比特币使用的是SHA - 256 算法:

1.2 Hash指针

Hash指针不仅能获取信息,也能验证该信息是否被改变
在普通使用指针的数据结构中,都可以把指针替换为Hash指针,例如,链表(blockchain)、二叉树(Merkle树)

  • blockchain
    blockchain的一个有用的使用场景是防篡改日志,当前只会保存创世块的Hash指针,假设a块被篡改为a1块,此时b块存贮a块的Hash值就会不一致,因为collision‐resistance,因为a!=a1 所以H(a) != H(a1),此时就会检测到不一致,如果还想成功篡改,那么就需要篡改b块的数据,以此类推会一直到创世块,但是创世块的Hash值是已经被记录的,所以篡改始终会被检测到


    image.png
  • Merkle树
    Merkle树就是用Hash指针的二叉树,data都是叶子节点,每两个叶子节点组成的父节点包含两个相应的Hash指针,如下图


    image.png

    根据blockchain,Merkle树也是能够检测到篡改的,只需要记录根节点的Hash指针

1.3 数字签名

比特币使用的是ECDSA,椭圆曲线数字签名算法,是一种非对称加密的算法
公钥的主要作用:加密;验证签名。私钥的主要作用:签名;解密。
通过私钥可以计算出公钥,反之则不行。
公钥加密:公钥加密的内容可以用私钥来解密——只有私钥持有者才能解密。
私钥签名:私钥签名的内容可以用公钥验证。公钥能验证的签名可以认为是私钥签名的。

signature = sign(sk, msg) //sk: secret key
isValid = verify(pk, msg, signature) // pk: public key
ECDSA算法:
    Private key: 256位
    Public key, uncompressed: 512位
    Public key, compressed: 257位
    Message to be signed: 256位(限制大小、提高效率; 经过RSA-256算法哈希过的message就是256位)
    Signature: 512位

技巧:1.msg大小是任意的,所以可以签名H(msg)。 2.签名Hash指针,这样整个区块都会被保护(可以只签名blockchain 的最后一个区块的Hash指针,这样整个blockchain都被保护)

公钥的Hash作为身份标识(比特币的地址)

2.比特币如何实现去中心化

比特币实现去中心化是通过技术与激励机制结合实现的,但是没有真正意义上的去中心化

2.1 比特币去中心化的5个问题
2.2 分布式共识

比特币基于p2p网络的,当Alice向Bob支付Btc的时候,实际上会广播这一笔交易到所有的比特币网络节点。


image.png

注意Bob在不在线不会影响到他是否接收这笔钱
很多用户都在广播这些交易到整个网络,各个节点必须完成共识这些交易的的合法性,以及发生的顺序,这样系统会有一个全局的账本,为了提高效率,把很多交易打包成块,基于这些区块完成共识就行了,账本记录了已经达成共识的区块组成一条blockchain
每个节点 都有一个池子,保存了收到的未完成的交易(还没有被包含进blockchain)因为是p2p网络,每个节点池子里的交易可能不一样,那么所有的节点怎么共识确定一个block呢?
一种方法:假设每间隔固定时间(10分钟),每个节点从自己的池子里打包一些交易作为block,输入某种共识协议中,最终会输出一个合法的、已经共识确认的block作为blockchain的最后一个block,剩余未打包的交易,等待下次block确认就行了
上面方法和比特币有点类似,但比特币并不是这么工作的。因为某些节点可能会崩溃,或者是恶意的;而且p2p网络不是完美的,延迟等各种问题让所有节点运行某种共识协议不太可行

  • 比特币的共识机制(Proof Of Work)
    因为比特币网络所有节点都没有身份标识的,所以没有办法惩罚那些恶意节点(eg包含非法交易、二次消费),但是正因为比特币是一种货币,所以可以通过奖励比特币的方式来奖励诚实的节点,所有的节点在不断地竞争计算机的算力,去解决一个hash 谜题,找到一个nounce值,连接前一个区块的hash以及本区块的交易,然后hash计算得出一个值,这个值需要小于某个targe
H(nonce || prev_hash || tx || tx || ... || tx) < target

这样就找到个下一个区块。现在一个区块就包含了一系列交易、上一个区块的hash值、以及一个nounce值,由于puzzle‐friendliness属性,想要找到这个nounce值只能一个个去试。

相关文章

  • 《01什么是比特币》学习笔记

    《01什么是比特币》学习笔记 比特币的诞生 比特币诞生于2009年,由中本聪发明。比特币是一种P2P形式的数字货币...

  • 读书笔记

    输出倒逼输入,才是最高效地学习。 20301-介绍 | 精通比特币 《精通比特币》,这本书的意义:引导进入比特币世...

  • [Blockchain_Bitcoin] Bitcoin Cor

    Bitcoin Core是比特币的核心源码,可以在比特币官网下载解压,比特币官网还提供了非常值得学习的比特币原理介...

  • bitcoin源码研读(2)——比特币钱包生成地址过程

    比特币钱包生成地址过程 1 前言 经学习已知比特币地址生成有三种方式:终端命令、RPC远程调用、比特币钱包,调用的...

  • 比特币共识机制

    昨天断更了一下,今天来学习比特币共识吧。 比特币为一种虚拟的货币,比特币挖矿制度为通过计算机硬件为比特币网络开展数...

  • 比特币网络学习笔记

    ====== 比特币网络学习笔记 ====== (本文写于2017年,翻出来凑个数)比特币(BitCoin)是新兴...

  • # 2 比特币的历史和钱包的介绍

    今天我们先来学习下比特币的历史,接着再来认识下比特币钱包。 比特币的历史 2008年,一个化名为中本聪(Satos...

  • 关键词|比特币

    目录 前言 比特币是什么比特币出现的背景比特币 比特币和中本聪中本聪比特币交易概念推动比特币发展中本聪的退场比特币...

  • 关于比特币 | 乌拖市场

    什么是比特币? 谁创造了比特币? 比特币是如何运作的? 如何获得比特币? 比特币的优势是什么? 比特币的缺点是什么...

  • 关于比特币 | 午托市场

    什么是比特币? 谁创造了比特币? 比特币是如何运作的? 如何获得比特币? 比特币的优势是什么? 比特币的缺点是什么...

网友评论

      本文标题:比特币学习

      本文链接:https://www.haomeiwen.com/subject/lhnvpftx.html