绪论

一个可能的参考资料:https://oklinksupport.zendesk.com/hc/zh-hk/sections/360004472211-%E6%96%87%E7%AB%A0%E4%B8%93%E6%A0%8F

2008年11月1日,$\overset{Satoshi}{中本}\overset{NakaMoto}{聪}$发布白皮书《$\overset{Bitcoin:\enspace A\enspace Peer-to-Peer\enspace Electronic\enspace Cash\enspace System}{比特币:一种点对点的电子现金系统}$》,随后比特币出现,其旨在解决三个问题:重复支付问题、依赖第三方问题、发行量控制问题。自比特币开始,区块链宣告存在。

为了解决提出的这三个问题,区块链引入了:

  • 块链式数据结构
  • 分布式节点共识算法
  • 基于密码学的加密算法
  • 智能合约

区块链通过应用层——智能合约——共识层——网络层——数据层来组织区块链的三个要素:交易、区块、链。

根据应用场景的不同,分为:

  • 公有链
  • 联盟链(也称许可链)
  • 私有链

区块链具有以下特点:多方共识、防丢失、易追溯、去中心化、透明性、开放性、自治性、防篡改、匿名。相应的产生了挑战:效率低下、共识机制有效性不足、数据冗余、安全性、匿名引发的欺诈等问题、冲击各国国家铸币权。

$\overset{Bitcoin}{比特币}$ BTC

比特币网站:bitcoin.org 比特币是一个社区驱动下的开源项目:https://github.com/bitcoin/bitcoin

比特币机制

比特币于2009年1月3日正式上线,并产出第一个区块。

比特币系统的三种人员:

  • 开发者:构建共识协议、编写软件实现功能。
  • 用户:通过密钥控制钱包转账
  • 矿工:通过挖矿行为,在每个节点通过竞争计算达成共识,运行比特币系统

比特币的发行机制:

  • 总量恒定,永不增发:只发行共计约(略少于)2100万枚,约在2140年发行完毕。
  • 挖矿:矿工生成记录交易的区块的机制,被自动控制至约10分钟产出一次,每次产出会给与矿工$\overset{coinbase}{铸币}$奖励作为发行。铸币奖励最初为50枚,每产出21万个区块减半,约四年进行一次,共进行32次。
  • 比特币的最小单位为$1 \overset{NakaMoto}{聪} = 10^{-8} BTC$

比特币的价格产生:

  • 2009年10月5日,由网站New Liberty Standard上线比特币/美元兑换服务,按照电脑挖矿耗费的电力算出一美元兑 1309.03 个,约为 0.00076 美元/个。随后产生第一笔交易:5.02美元兑5050BTC
  • 披萨事件:2010年5月18-22日,10000美元购买2披萨。

比特币的信息存储;

  • P2P网络、分布式数据库,节点间达成最终一致;
  • 去中心化作为手段:一种分布式、无中心结构,全部由用户构成;
  • 实现了交易广播,可以通过区块链浏览器查看。

构建比特币的基本逻辑:

  • 不信任第三方;
  • 系统的每一位参与者(用户)都参与;
  • 不得不信任原始的个别交易者;
  • 收款人最值得信任;
  • 杜绝回滚支付交易,保护特定卖家免于欺诈;
  • 个体绝对大于整体,只有维护个体利益的整体才值得个体维护;
  • 相信大多数(51%,绝对多数)不作恶。

比特币的目标:

  • 解决货币通缩;
  • 去中心化交易;
  • 匿名;
  • 解决双重支付。

比特币的治理机制:$\overset{Bitcoin}{比特币}\overset{Improvement}{改进}\overset{Proposal}{建议}$ BIP 机制

比特币与密码学

比特币起源于密码朋克

  • 1976 迪菲、赫尔曼、默克尔团队 非对称加密思想 Diffie-Hellman密钥交换算法
  • 1977 RSA算法
  • 1982 大卫·乔姆 盲签技术
  • 1985 大卫·乔姆 密码货币
  • 1990-1998 DigiCash公司 eCash
  • 1991 时间戳
  • 1991 齐默曼 PGP
  • 1993 工作量证明思想
  • 1994 密码学邮件列表
  • 1994 智能合约
  • 1996 E-gold 被用于洗钱等而垮台
  • 1998 BitGold
  • 1998 Wei Dai B-money PoW & 去中心化记账
  • 1999 工作量证明机制
  • 2002 HashCash 寻找包含接收者地址、日期在内的特殊数据的SHA1包含20个前导0。工作量证明机制的第一个大规模运用
  • 2004 Ripplepay Ripple协议前身
  • 2005 RPow

比特币是这些项目的集大成者:

哈希/散列(函数/算法)

定义:将任意长数据转换为固定长度的值的函数,要求正向易捷、逆向难杂、异入异出、输入敏感。

哈希函数存在着哈希碰撞:不同输入有相同输出。是评价哈希函数的重要方面。

雪崩效应:哈希函数输入的微小变化引起输出差距巨大。

作用:消息认证、唯一标识、单项口令、入侵检测、伪随机

常见的哈希算法:

王小云等于2005年前后攻破了MD系列、SHA-0、SHA-1等一系列哈希函数

  • MD系列:
    • MD4:输出128b
    • MD5:输出128b
  • SHA系列:
    • SHA-0:1993年,输出160b
    • SHA-1:1995年,输出160b
    • SHA-2系列:2001年,SHA-224/256/384/512 及截断版本
    • SHA-3:2015年,SHA3-224/256/384/512,基于Keccak算法
  • RIPEMD 1990年

对称加密

原文和密文能够互相计算得到。

DES、AES算法(在比特币中由BIP-38 加密私钥引入)

对称加密有这样的问题:扩展困难、身份认证困难、密钥配送困难。后两者通过:事先分配、密钥分配中心、Diffie-Hellman密钥交换算法、公钥密码解决。

Diffie-Hellman密钥交换算法流程:

选择公开参数:双方约定一个大素数 p 和一个原根 g,可公开传输。

生成私钥与公钥: A随机选取私钥 a,计算公钥 A = g^a mod p; B随机选取私钥 b,计算公钥 B = g^b mod p。

交换公钥:A与B互换 A 和 B。

计算共享密钥: A计算 K = B^a mod p; B计算 K = A^b mod p; 由于数学性质,双方得到的 K 相同。

非对称加密

同时生成公钥和私钥,私钥可以单向计算公钥。

非对称加密流程:

  • 用于信息传输:公钥广播;用对方公钥加密、用自己私钥解密。
  • 用于确认来源:公钥广播;用自己私钥加密、用对方公钥解密。

非对称加密的理论来源:

  • 大整数分解问题,如RSA算法:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥。建议1024b以上。
  • 离散对数问题,如DSA算法
  • 椭圆曲线,如ECC算法。比特币中采用了SECP256K1。

SECP256K1: $ y^2 = x^3 + 7$,即a = 0,b = 7

200b左右的模数p = 2^256 - 2^32 - 2^9 - 2^8 - 2^7 - 2^6 - 2^4 - 1

G = (0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798, 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8)

为质数的G的阶数n = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141

椭圆曲线上所有点的个数m与n相除的商的整数部分$h = 01 \le 4$

此外还有:

  • $p\ne n*h$
  • $pt \ne 1(mod\enspace n) (1≤t<20)$
  • $4a^3+27b^2≠0 (mod\enspace p)$

ECC算法流程:

  1. 选椭圆曲线E,并取椭圆曲线上一点作为基点G,计算n
  2. 选择一个私有密钥k(k<n),并生成公开密钥K=kG,a、b、p、K、G为公钥
  3. 设明文M,用随机数r计算$C1=M+rK$和$C2=rG$,C1 C2为密文
  4. 原文为$ C1-kC2 = M+rK-k(rG) = M+r(kG)-k(rG) = M$

数字证书

证书可信权威机构对一个实体所拥有的公钥的电子认证证明,X.509标准包含版本信息、证书序列号、签名算法、颁发者名字(CA签名)、有效期、主体(实体)名字主体(实体)公钥、扩展域、签名值,用于证明拥有者的身份。

数字证书流程:发证机构颁发证书,用CA公钥验证证书的合法性并获得内容。

一般采用ECDSA算法,一种采用ECC的DSA算法。

进一步延申出了:

  • 多重签名
  • 群签名
  • 环签名

比特币对密码学的使用:

公钥、私钥、地址关系: 公钥、私钥、地址关系

总体来说:

  • SHA-256:生成比特币地址,交易签名和认证
  • RIPEMD-160:生成比特币地址
  • ECDSA算法:生成公钥,交易签名。
  • AES算法:加密私钥。

比特币的数据结构

包含交易信息等的区块,在时间上有序组织为链式结构。

因此存在分叉问题:

  • 出块时同时出块导致自然分叉,处于临时状态。
  • 协议升级、社区分裂、矿工分裂、新币种、安全性/稳定性问题导致的软分叉/硬分叉
    • 软分叉:旧区块可以识别新区块,如2017年的隔离见证升级。
    • 硬分叉:旧区块无法识别新区块,如2010年的比特币异常增发被认为是bug而硬分叉。 规定区块链的有效链是最长链。

当然区块链也有其他结构,如DAG。

每个区块由区块头和区块体组成,其中:

  • 区块头包含区块高度、时间戳、前一个区块的哈希值、当前区块的哈希值、难度值、版本等信息。
  • 区块体包含Merkle树组织的交易信息、交易签名等信息。
  • 除此之外还有4B大小魔数(比特币中为0xD9B4BEF9,比特币测试网中为0x0709110B)、4B大小区块大小、交易数量等信息。

通常以kv方式通过数据库组织区块,用普通文件存储完整的区块。这种结构能够同步并行(只需处理区块头)、放篡改。

关键参数:

  • 区块高度:区块在区块链中的位置,从0(创世区块高度)开始。
  • 区块标识符:区块在区块链中的唯一标识,可以是区块高度或区块(头)的哈希值。
  • 区块容量:区块体的最大容量。为1MB(平均可存放4194笔250B的交易,)。因此出现了扩容:
    • 链上扩容:改变比特币数据结构,如隔离见证升级。
    • 链下扩容:增加辅助链,如闪电网络、侧链。
  • 交易频率:交易的平均记录次数。每秒的交易笔数TPS = 交易笔数/区块时间。比特币约为7笔/秒。
  • 版本号:4B大小。比特币为0x20000000
  • 前一个区块的哈希值:32B大小。比特币中计算方法:SHA256(SHA256(区块头))
  • Merkle根:32B大小。
  • 时间戳:4B大小。由矿工自行决定,要求大于前11个区块的平均时间戳,且不超过当前区块2小时。
  • 难度值Bits:4B大小。
  • 随机数Nonce:4B大小。
  • Merkel树:每个节点存储两个子节点的哈希值,一层层向上生成Merkle树。

在比特币的创世区块中,中本聪留下了:

The Times 03/Jan/2009 Chancellor on brink of second bailout for banks

比特币的交易:

  • 转账
    • 每笔交易的付款方用私钥对前一笔和收款方公钥数字签名。可以确认交易方。
    • 每笔交易需要给矿工一定的手续费。
  • $\overset{coinbase}{铸币}$交易,这是由矿工成功挖矿(同时竞争记账)产生的:
    • 没有来源,收款方为矿工。
    • 挖矿采用的是工作量证明机制。
    • 矿工记账时从交易池中选取一些已经确定的交易作为记账交易。同时维护着未确定的交易集合(即孤立交易池),这些交易一旦确定(如引用了原先父交易不确定的交易,随着父交易的确定而确定),就会加入交易池中。

比特币的账户模型:流水账式$\overset{Unspent\enspace Transaction\enspace Output}{未花费的交易输出}$ UTXO

  • 比特币的交易记录由多个输入、多个输出和手续费构成。
  • 每个输入必须引用该输入的来源交易。
  • 每个输出可以由多个输入拆分组合而成。
  • 每个输入必须拆分完全,不能有剩余未花费金额。即总输出=总输入-手续费。

比特币正是维护了所有UTXO构成的UTXO池作为状态。

Mixer(混币器):在比特币中,可以通过交易的方式将不同的币种混合在一起。起保护用户隐私的作用。

共识算法

共识指的是各节点对交易(状态)的一致性。具有少数服从多数的特点。

要求

  • 可结束性:在有限时间内达成共识。
  • 约同性:所有节点都达成同样的共识。
  • 合法性:共识提案必然是某个节点提出的。 对应着分布式系统的:活性、安全性、正确性

拜占庭将军问题

定义:拜占庭帝国军队的几个师驻扎在敌城外,每个师都由各自的将军指挥. 将军们只能通过信使相互沟通. 在观察敌情之后,他们必须制定一个共同的行动计划,且只有当半数以上的将军共同发起进攻时才能取得胜利。

然而,其中一些将军可能是叛徒,试图阻止忠诚的将军达成一致的行动计划。

更糟糕的是,负责消息传递的信使也可能是叛徒,他们可能篡改或伪造消息,也可能使得消息丢失.

要求:忠诚的将军们必须能够达成一致的行动计划,即使存在叛徒。

已知结果:当将军之间传达的是口头消息(无签名、全部由所有者控制)时,要求叛变的将军比例小于$\frac{1}{3}$。

对拜占庭将军问题的实际解法分为:

  • 公有链:非可信任环境下的非强一致性(概率上一致)做法:PoW、PoS、DPoS、Ripple等;
  • 联盟链:非可信任环境下的强一致性做法:PBFT,DBFT等;
  • 私有链:可信任环境下的(强一致性)做法:Paxos、Raft等。

$\overset{Proof\enspace of\enspace Work}{工作量证明}$ PoW

工作量证明是通过花费进行计算的代价来保证节点不作恶。

  1. 通过计算区块哈希值小于目标值来确定是否挖矿成功。
    • 记难度值为十六进制下的$\overline{abcdefgh}$,则目标值为$\overline{cdefgh} * 2^{\overline{ab} - 3}$
    • 难度值每2016个区块调整一次(约2周)。先计算$新目标值 = 目标值 * \frac{20160分钟}{2016个区块实际耗时}$,然后反向推出难度值。
  2. 计算完成后向全网广播该区块。其他矿工在收到新区块后,会对新区块进行验证,如果有效,就把它添加到区块链的尾部,认为在本轮工作量证明的竞争中这个矿工胜出,而自己矿工都失败了,抛弃当前正在计算还没有算完的区块,转而开始计算下一个区块,进行下一轮工作量证明的竞争。

缺点:效率低

$\overset{Proof\enspace of\enspace Stake}{权益证明}$ PoS

权益证明是通过证明验证者已经将有价值物品质押到网络上来保证节点不作恶。

将PoW机制中的目标值乘以$\overset{Coinage}{币龄} = 币的个数*币的持有时间$。

$\overset{Delegate\enspace Proof\enspace of\enspace Stake}{委托权益证明}$ DPoS

委托权益证明是通过选举机制选出有限数量的不作恶节点,然后通过这些节点的权益证明来保证所有节点不作恶。

$\overset{Leased\enspace Proof\enspace of\enspace Stake}{权益租赁证明}$ LPoS

节点将通过租赁的方式将其持有的代币借给专业节点(验证节点或代理节点),从而间接参与网络的共识过程。

$\overset{PBFT(Practical\enspace Byzantine\enspace Fault\enspace Tolerance}{实用拜占庭容错}$ PBFT

PBFT基于拜占庭将军问题解法。

考虑一轮共识过程:

  • 一个主节点,在主节点故障/作恶是通过视图变换协议更换,负责交易打包和区块共识;
  • 多个负责区块共识的副本节点。
  • 在外部/客户端request后,主节点令副本节点依次做:
    1. pre-prepare:主节点向副本节点广播pre-prepare消息;
    2. prepare:副本节点若同一主节点则广播prepare消息;
    3. commit:节点若收到至少三分之二+1的prepare消息,则广播commit消息;
    4. reply/response:节点若收到至少三分之二+1的commit消息,则执行并向客户端发信。如果客户端收到至少三分之一+1的信息,则认为成功执行。

优点:节能、吞吐量高(能达到2-5秒/交易)、分叉率低

缺点:去中心化程度弱、节点需要认可且相对固定和少(上限100)、容忍度低、不能防女巫攻击。

区块链的不可能三角:去中心化、安全、效率/可扩展性。

以太坊

undo

以太坊的最小单位:$1ETH=10^{18}Wei$

最早的NFT项目:https://www.larvalabs.com/cryptopunks

以太坊Keccak-256

以太坊特点:

  • 支持智能合约及其编程语言Solidity
  • 使用了内存较高的哈希函数。
  • uncle块激励
  • 减少区块产生间隔为15秒
  • 难度调整算法,一定的自动反馈机制。
  • gas限制调整算法,限制代码执行指令数。
  • 记录当前状态的哈希树的根哈希值到区块,可实现轻量级客户端
  • EVM虚拟机,执行智能合约。

以太坊账户模型:基于交易的状态机。