解密比特币的那些核心技术原理

白话比特币原理解密

1 背景

对于当下流行的电子货币-比特币系统,朋友圈里有很多介绍性的文章,也有人试图通过漫画来生动的解释比特币的特性,但是始终不得要领,总是有些问题想不清楚,为了弄清楚这些问题,最近深入的研读了几本比特币的书籍以及中本聪本人发表的比特币论文,感觉茅塞顿开,迫不及待的与大家分享我的理解,希望与大家共同探讨、共同进步。

2 比特币

比特币是一种利用点对点技术实现的电子现金系统,它允许一个组织直接与另外一个组织进行在线支付,而不需要中间的权威的清算机构。

在比特币的世界里,如果你想拥有比特币,你需要申请一个比特币地址,就像你到银行存款,需要开立一个账户,然后,你就拥有这个账号,有了自己的账号,你可以向你的账号存款,别人也可以给你的账号转账,当你需要提款的时候或者给别人转账的时候,你需要出示一个能够打开这个地址的钥匙,也就是你的私钥,就像你在ATM上取款的时候需要提供密码一样。

与银行发行的法定货币不同,法定货币的发行是由各国央行来统一管理的,大家都相信央行是靠谱的,不会记错账,也不会被人攻击。然而,比特币的发行并不需要央行这样的权威机构,它允许一笔交易从一个组织直接结算给另外一个组织,省去了权威机构结算的环节,提高了交易和结算的效率,节省了交易的成本,尤其是跨境交易的成本。

一个点对点的在线交易系统如何保证交易的匿名性、正确性、不可篡改性?又是如何防止双重支付和防止作弊和攻击的呢?

下面的章节将为大家通过最通俗的语言解开比特币的神秘面纱,让你从逻辑上理解比特币是如何工作的,让学习比特币不留死角,让比特币的方方面面清晰的呈现在你的脑海里。

3 区块链

3.1 区块链是如何存储的?

对于一个现金账户系统,首先要解决的是如何记账,把账记在哪里,账户如何存储等。例如,你在中国银行存款,中国银行为你开立账户,你的账户就存储在中国银行的服务器上,而你在建设银行存款,建设银行为你开立账户,你的账户就存储在建设银行的服务器上。如果你需要转账给同一个银行的其他人的账户,你需要通过这个银行为你转账和结算,如果你需要转账给其他银行的其他人的账户,你需要通过银联为你转账和结算,尽管一个普通用户感知不到如此多的过程,不过这些步骤确实是存在的,从这个过程中我们看到记账的账户系统是专用的,是中心化的,归某一个组织所有并维护,通常这个组织是权威的、可信赖的。

而比特币并没有中心化的记账系统,而是通过分布式的区块链来记载比特币的拥有权和交易信息。每个比特币的参与者都拥有一份相同的区块链副本,区块链包含着多个随着时间排序的块,后一个块通过哈希指针指向前一个块,形成一个链,从链的顶端通过这个指针,可以一直找到底端第一个块,第一个块成为创世纪块。每个区块记录着前一个区块的哈希散列值,实际上是前一个节点头的哈希散列值,如果想改变一个区块包含的交易,必须改变这个区块之后所有的交易,由于每个区块的产生是需要条件和时间的,并且条件相当苛刻(后续会在共识机制相关的文章中详细说明),因此,一个区块一旦产生,并且被区块链的节点所接受,并且在这个节点之后又产生了一定数量的区块,那么这个区块基本是不可篡改的。

区块链示意图如下:

从上图可见,区块链是由多个区块组成,每个区块是由区块头和区块体组成的,每一个区块头包含着区块的元信息,同时也包含一个指向前一个区块头哈希值的指针,这个指针是防止区块链被篡改的关键信息。区块体包含比特币的交易信息,第一个交易是特殊交易,是奖励给挖矿节点的酬劳,这也是唯一一种可以产生比特币的方式,也就是发行比特币的方式,其余的交易都是转账交易,比特币从一个地址支付给另外一个地址,这也是实现比特币价值转移的唯一方式。总结来看,比特币只有发行和转账两种交易,比特币产生以后只能从一个人转账给另外一个人,而不能凭空消失,比特币发行的总量是有限的,一共2100万,因此是一种通缩性货币,后续我们会在相关的文章中详细介绍比特并的通缩特性。

3.2 比特币的拥有者如何证明自己拥有比特币?

上一节介绍了区块链的存储,区块链实际上是比特币的账本,记录着谁拥有多少比特币,只不过这个账本是保存在互联网上的、分布式的,并不是由一个中心机构或者服务器来存储。有了账本,剩下的问题就是比特币的拥有者如何证明自己拥有比特币?就像你在银行开立了一个账户,等你想给其他人转账的时候,你需要在ATM上插入卡,然后输入密码。卡就相当于比特币的地址,密码就相当于比特币的秘钥,有了正确的地址和秘钥,就可以对外宣称自己对比特币的拥有权,就可以把比特币转账给其他人来做一笔转账交易。

在ATM上提取一笔现金,输入密码解锁账户,我们相信ATM机不会泄露密码。那么在比特币的世界里,我们如何通过私钥来校验一个地址上的比特币的归属权呢?

比特币的归属权是通过加密领域技术来实现的,我们先来了解下加密领域的原理,加密领域大体上经过了3个阶段,第一个阶段拼算法,把加密逻辑写在一个非常高深的代码里,后来发现无论把多么复杂的逻辑写在代码里,总有高手可以破解。于是产生了对称秘钥加密,对称秘钥加密通过一个对称的秘钥进行加密数据,然后传输或者保存,需要的时候再通过同一个秘钥进行解密还原原来数据,缺点是秘钥是共享的,无法安全的保存秘钥,尤其是跨组织的场景。后来,聪明的安全科学家们发明了非对称加密算法,例如:RSA,非对称算法拥有一对秘钥,一个公钥和一个私钥,私钥可以推导出公钥,但是公钥不能推导出私钥,公钥加密的数据私钥可以解密,私钥加密的数据公钥可以解密,如果组织A向组织B传递数据,那么组织A使用公钥进行加密,组织B使用私钥进行解密,因此,组织B需要小心的保存好私钥,而公钥是公开的,这是典型的非对称加密场景,能够有效的防止数据被偷窥、被篡改。非对称加密还有另外一个场景,就是签名,签名是加密场景的逆向场景,商户B通过自己的私钥加密数据,然后把加密的数据传递给商户A,商户A通过公钥进行解密,如果解密的数据正确,则说明数据是由A发送的,有效的保证了数据的防篡改,从这两个场景我们看到,公钥是公开的,可发给任何人,私钥是私密的,用来解密或者签名的。

比特币证明归属权的示意图如下:

从上图可见,现实生活中我们用钥匙打开锁头,我们用密码在ATM上提取现金,那么在比特币系统里,我们通过秘钥来实现比特币的转账,实现价值的转移。

更具体来讲,一笔比特币交易会把一定数量的脚本锁定在一个地址,声明拥有这个地址的用户会通过密匙的签名来证明自己拥有这个地址,然后,花费这笔比特币,这笔比特币被花费后并不会消失,会被锁定在其他人的地址上,其他人可以使用同样的方法来花费这笔比特币。

从上面的过程,我们总结了两个动作,锁定与解锁,这和我们平时锁锁头和开锁头是对应的,在比特币系统里是通过锁定脚本和解锁脚本来实现的。

  1. 锁定脚本把比特币关联在一个比特币地址上,证明了比特币归属这个地址。
  2. 解锁脚本提供证明,证明这个地址归我所有,这个比特币也归我所有,我可以用来支付。

下面我们举一个例子详细说明:

用户Alice在比特币里地址A上拥有10个比特币,Alice与Bob想做一笔交易,Bob把自己家的汽车卖给了Alice,Alice需要向Bob支付10个比特币,Bob的比特币地址是B。

在之前的交易中,Alice拥有的10个比特币被锁定在Alice的比特币地址A上,其来源可能是挖矿所得或者别人转账而来,我们会在后续详细描述如何获得比特币,这里我们只关注证明Alice拥有比特币的交易的锁定脚本。

锁定脚本的逻辑格式为:

比特币数量 来源 锁定地址
10 挖矿所得 地址A

如果想花费这个锁定脚本,需要的解锁脚本如下:

解锁地址 解锁
地址A 地址A的公钥、地址A用私钥对前一区块头哈希散列值的签名

具体的解锁过程如下:

  1. 使用地址A的公匙推导出地址,与地址A对比,如果一致则证明公匙提供正确,进入下一步。
  2. 使用地址A的公匙解密签名,如果获得的值与前一区块的哈希散列值一致,则证明解锁成功,可以花费地址上的10个比特币。

其实,锁定和解锁脚本是通过逆波兰表示法的基于堆栈的脚本实现的,由于本文篇幅有限,这里不展开介绍,会在后续的文章中详细介绍锁定和解锁脚本的原理和流程。

4. 挖矿

上一节介绍了比特币使用分布式存储的区块链作为记账系统,也解决了大家关于如何声明比特币的拥有权,以及把比特币支付给其他人的过程。现在我们遇到了新的问题,既然区块链是分布式的记账系统,每个参与的节点都有一份拷贝,那么谁来负责把一笔交易记到区块链呢?

这不得不引入一个新的概念,就是共识机制,比特币是通过工作量证明的共识机制来决定记账权的,通俗来讲,谁证明了自己的工作量最大,谁就负责记账。

工作量证明示意图如下:

工作量大小是通过计算符合某一个标准的比特币区块头的哈希散列值来体现的。试图争夺记账权的节点称为挖矿节点,挖矿节点会把网络节点上发来的交易进行验证(网络传播机制会在下一节中介绍),验证后会存入缓冲区,形成一定的交易存储结构(交易使用Merkle树存储,后续问斩各种介绍),放在区块体中,然后根据区块的基本信息构造区块头,区块头通常包含前一个区块的哈希散列值、Merkle根(后续文章会详细介绍)、时间戳、难度目标、以及一个填充的随机值。这里面的随机值是随机产生并且填充的,挖矿过程就是求出一个能够填充本区块头的随机值,让区块头的哈希散列值符合某一个标准,例如:哈希散列值的前某些位为0,难度目标就是用来表达哈希散列值标准的难度系数,可以通过概率算法计算出难度值与挖矿成功的可能性。

网络上的每一个矿机接收并验证了一批交易,然后就开始进行挖矿,视图计算满足某一难度值的区块头的哈希散列值,如果计算成功,则挖矿成功,向全网广播挖矿所得,全网节点验证后,把这个区块连接到区块的最上端,并且在全网达成一致。矿机需要反复的试验随机填充值来进行求解,一般采用产生随机数,尝试把产生的随机数填充到区块头,然后计算哈希,后续文章会介绍矿机联盟,矿机联盟会把随机数分成多个小区间,分配给联盟中的成员,共同求解。

除了上面介绍的工作量证明机制,还有权益证明、股份制的权益证明共识机制等,后续我会在共识机制的专题文章中与大家分享。

5. P2P网络

前面两节介绍了比特币的账户体系和记账机制,这节我们讨论比特币的分布式区块链账本是如何在网络上传输,交易又是如何在网络上传输并得到验证的。

比特币网络中的节点都是对等的,没有中心化的服务器,节点有不同的类型,不同的类型有不同的职责,我们会在将来的文章中详细介绍,这里我们只介绍全节点,也就是比特币核心客户端的工作机制。

比特币中的全节点除了存储完整区块链,还具有矿工、钱包、路由节点等的角色,他们的职责如下:

  1. 矿工:就像挖矿的工人一样,做的是体力活,不断的尝试在构造的区块头的随机字段上填充数字,来找到满足一定标准的哈希散列值,如果找到,把此区块连接到区块链的最上端,并且把合法的区块链发送给邻接节点。
  2. 钱包:区块链记载了创币交易和转账交易,这有别于通常意义的账户系统,通常意义的账户系统记录账户余额,而区块链里面只记录了交易,没有余额,钱包就是用来从区块链中算出某个地址拥有区块的余额,如果你学过关系型数据库,你可以把区块链理解为数据库的索引,也可以认为是一本书的目录。
  3. 路由节点:负责在去中心化的网络环境中传递交易和区块,一个节点创建一笔交易,并发送给相邻的节点,相邻的节点验证后,再发送给相邻的节点,很快会传遍网络。如果一个节点通过挖矿,找到一个符合标准的区块,这个节点也会用相同的方式传递给相邻节点,然后相邻节点再继续传播下去,让网络的所有节点都达成一致。

P2P网络传播的示意图如下:

我们会在后续的文章中详细介绍比特币P2P网络的工作机制,包括节点分类、节点发现、节点连接和广播等。

6. 总结

由于篇幅有限,本文介绍了比特币的三大基础概念,包括区块链、挖矿与P2P网络,后续会对比特币的方方面面进行详细的说明,涉及到如何防止双重支付、智能合约、区块链分叉、通缩特性、锁定和解锁脚本、交易的Merkle树存储、交易的存储格式、区块链被攻击的概率、挖矿难度与挖矿成功时间、更多的共识机制、创币交易和转账交易、比特币的性能、不同类型的挖矿节点、以及比特币的应用场景等。



本文来自于云时代架构社区。

原文地址:http://blog.51cto.com/robertleepeak/2070974

时间: 2024-11-08 13:28:38

解密比特币的那些核心技术原理的相关文章

[Spark內核] 第41课:Checkpoint彻底解密:Checkpoint的运行原理和源码实现彻底详解

本课主题 Checkpoint 运行原理图 Checkpoint 源码解析 引言 Checkpoint 到底是什么和需要用 Checkpoint 解决什么问题: Spark 在生产环境下经常会面临 Transformation 的 RDD 非常多(例如一个Job 中包含1万个RDD) 或者是具体的 Transformation 产生的 RDD 本身计算特别复杂和耗时(例如计算时常超过1个小时) , 可能业务比较复杂,此时我们必需考虑对计算结果的持久化. Spark 是擅长多步骤迭代,同时擅长基于

比特币以及区块链原理学习

2018年春节过后区块链技术一下子火爆起来了,本人也对该技术十分感兴趣,因此想研究下区块链技术的原理,看看区块链背后那些技术值得去研究.由于自己缺乏实际的开发经验和使用经验,文中难免会有些理解不到位,本文主要的目的还是想将最近的学习梳理总结一下. 一.概述 比特币是存储在计算机里一枚货币,计算机存储的本质就是一串数字,那么存储比特币的这串数字为什么就可以等同于真正的货币呢?而且比特币让人感觉很像黄金,不管这黄金从什么渠道获取(从沙子里掏的,还是自己购买的),人类都会认同它的财富价值. 说到比特币

区块链教程区块链信息安全3椭圆曲线加解密及签名算法的技术原理一

区块链教程区块链信息安全3椭圆曲线加解密及签名算法的技术原理一,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁.回归理性,表面上看相关人才需求与身价似乎正在回落.但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上. 椭圆曲线加解密及签名算法的技术原理及其Go语言实现 椭圆曲线加密算法,即:Elliptic Curve Cryptography,简称ECC,是基于椭圆曲线数学理论实现的一种非对称加密算法.相比RSA,ECC优势是可以使用更短的密钥,来实现与RSA相当或

Checkpoint彻底解密:Checkpoint的运行原理和源码实现彻底详解(DT大数据梦工厂)

内容: 1.Checkpoint重大价值: 2.Checkpoint运行原理图: 3.Checkpoint源码解析: 机器学习.图计算稍微复杂迭代算法的时候都有Checkpoint的身影,作用不亚于persist ==========Checkpoint到底是什么============ 1.Spark 在生产环境下经常会面临transformation的RDD非常多(例如一个Job中包含1万个RDD)或者具体transformation的RDD本身计算特别复杂或者耗时(例如计算时长超过1个小时

精选文章推荐汇总-2018.03.01

大话爬虫的实践技巧 作者:SFLYQ简介:如今已然是大数据时代,数据正在驱动着业务开发,驱动着运营手段,有了数据的支撑可以对用户进行用户画像,个性化定制,数据可以指明方案设计和决策优化方向,所以互联网产品的开发都是离不开对数据的收集和分析,数据收集的一种是方式是通过上报API进行自身平台用户交互情况的捕获,还有一种手段是通过开发爬虫程序,爬取竞品平台的数据,后面就重点说下爬虫的应用场景和实践中会遇到的问题和反反爬虫的一些套路与技巧. 爱情有备胎,数据中心有MC-LAG 作者:姜汁啤酒简介:最近咱

比特币2

IN CRYPTO WE TRUST 比特币的原理? 它与我们一般认识的货币很不一样.一个经典的例子是'雅浦岛石币',在一个小岛上,人们用岛外的大岩石作为货币,每当有人带回来新的石头,和人民币不一样,发现的人比如张三就把石头放在村子中央,然后大喊'我带来新的石头了!', 每个村民人手都有一个非常非常厚的账本,这个账本记录了这个岛有史以来所有的石头交易和新进石头. 村名跑出来确认一下张三是不是真的带来了一块石头,没问以后就在账上记一笔"张三石头+1". 随后张三又想用一块石头和李四换一袋

比特币价值飙升,黑客如何从盗取近8千万美元的比特币中获利?

Hardy(晗狄) 架构师技术联盟 目前,有两个商机可以让人一夜暴富,一是中国房地产,另一个就是比特币.由于比特币的价值继续飙升,黑客从比特币挖掘服务中盗取了价值近8000万美元的比特币,短短数小时就获取暴利,看来唯一能跟中国房地产匹敌的,也就只有比特币了. 就在12月7号,网络犯罪分子从斯洛文尼亚的比特币采矿和交换服务系统NiceHash中窃取了大约4700个比特币(这些比特币可以用来挖掘新的比特币).自2017年9月以来,比特币的价值一直在急剧上升,在不到3月的时间内,从3.780美元上升到

RSA简介(一)——数论原理

RSA是最常用的非对称加密算法. 所谓非对称加密,就是说有两个密钥,一个密钥加密只可以用另外一个密钥解密,一般一个作为公钥,公开给所有人用来加密用,而另一个用来解密其他拥有公钥的加密结果,叫做私钥.另外,拥有私钥者可以用私钥加密信息,公钥可以解密获得加密内容,从而验证私钥拥有者的身份,这是一种特殊的加密,叫签名. RSA涉及到5个整数,关系如下: p和q都是质数: N=p*q; 找一个1<e1<(p-1)(q-1),使得e1与(p-1)(q-1)互质:(互质的意思是两个数的最小公约数为1) 再

加密解密与OpenSSL建立私有CA

安全规范: 1)NIST规定的数据安全性标准: ①保密性:数据保密性:隐私性: ②完整性:数据完整性:系统完整性 ③可用性:数据与服务随时可用 2)OSI,X.800:定义了安全攻击,安全机制,安全服务 ①安全攻击 被动攻击:监听 主动攻击:报文伪装.重放.消息篡改.拒绝服务(将有限资源耗尽,使得正常资源无法访问DDOS) ②安全机制 加密/解密,数字签名,访问控制,数据完整性保证,认证交换,数据填充,路由控制,人为公证 ③安全服务 认证 访问控制 数据保密性: 连接保密性 无连接保密性 选择域