比特币
7209 字
36 分钟
比特币
Warning
含AI生成内容
第2章 比特币
比特币是中本聪(Satoshi Nakamoto)于 2008 年提出、2009 年正式上线的首个加密数字货币系统,以密码学为基础、P2P 网络为载体,实现了去中心化、匿名、不可篡改的电子支付系统。本章详细介绍比特币的交易(UTXO 模型)、脚本系统、公私密钥与地址、区块与链、共识机制(PoW)等核心原理。
🎯 核心考点速览
- 比特币诞生时间线:2008.10.31 中本聪发布白皮书《比特币:一种点对点的电子货币系统》;2009.1 创世区块被挖出,首批 50 个比特币诞生。
- 交易模型:比特币采用 UTXO(Unspent Transaction Output,未花费交易输出) 模型,用户余额 = 所有可解锁且尚未花费的交易输出之和;以太坊采用账户状态转移模型。
- 交易结构:包含输入(引用前一个交易的输出 + 解锁脚本)和输出(比特币数量 + 锁定脚本),一个交易可有多个输入和多个输出。
- 脚本系统:基于栈的虚拟机执行,先执行解锁脚本再执行锁定脚本;常见类型有 P2PK、P2PKH、P2SH、NullData(OP_RETURN)。比特币脚本不是图灵完备的。
- 公私钥与地址:私钥 32 字节(椭圆曲线 secp256k1),公钥由私钥通过椭圆曲线乘法得到;地址通过 SHA256 → RIPEMD160 → 加前缀和校验和 → Base58 编码生成。P2PKH 对应普通地址(前缀 00 / Base58 后为 1),P2SH 对应脚本地址(前缀 3)。
- 区块结构:区块头(版本、前一区块哈希、Merkle 根、时间戳、难度目标 nBits、Nonce)+ 区块体(交易列表)。
- Merkle 树:由 Ralph Merkle 于 1979 年提出;叶子节点为交易哈希值,逐层两两哈希直到得到 Merkle 根;支持快速重算、交易定位验证、轻节点验证(SPV)。
- PoW 共识:合法区块的哈希值前 n 位必须为 0,矿工不断尝试 Nonce 值来”凑数”;难度动态调整使区块间隔稳定在约 10 分钟;采用最长链原则解决分叉,篡改需掌握全网 51% 以上算力。
- 最小货币单位:1 聪(Satoshi)= 1/100,000,000 BTC。
2.1 比特币简介
- 2008 年 10 月 31 日:中本聪发布奠基性论文《比特币:一种点对点的电子货币系统》(Bitcoin: A Peer-to-Peer Electronic Cash System)。
- 2009 年 1 月:中本聪实现比特币系统最初版本,挖出创世区块,首批 50 个比特币诞生。
- 比特币是虚拟货币,由用户通过网络交易;交易匿名,无须身份验证,经网络节点验证后记录到公开透明的分布式账本,一经写入,无法篡改。
- 比特币价格由最初近似为零发展到超过 6 万美元。
- 比特币的诞生引入了更具价值的区块链技术,已广泛应用于供应链金融、智能物流、物联网等领域。
2.2 基础知识
2.2.1 哈希算法
- 哈希(Hash)算法:又称散列算法,将任意长度明文字符串映射成较短的二进制串,不同明文映射后的值几乎没有冲突。
- 哈希值:又称指纹或摘要(Digest),可验证文件的完整性与正确性。
- 哈希碰撞(哈希冲突):不同输入产生相同哈希值的现象(因哈希函数输入和输出不是一一对应)。
- 常见 Hash 算法:
- MD4:MIT 的 Ronald L. Rivest 于 1990 年提出,已被证明不安全。
- MD5:Rivest 于 1991 年提出,已被证明会产生 Hash 冲突,不再安全。
- SHA1:美国国家安全局(NSA)于 1995 年提出,已被破解。
- SHA2 系列:SHA224、SHA256、SHA384、SHA512,由 NSA 陆续公布。
- 目前使用哈希算法应至少采用 SHA2-256 或更安全的算法。
- 区块链中应用:
- 比特币采用 SHA256(SHA2-256) 算法,用于挖矿和生成地址。
- 以太坊采用 Keccak256 算法(SHA3 族来源)。
- 哈希函数是单射函数,过程不可逆。
2.2.2 非对称加密
- 加解密系统包含三个部件:加解密算法、加密密钥、解密密钥。加密算法公开,密钥需保护。
- 对称加密算法:
- 加密密钥与解密密钥相同。
- 优点:计算速度快、占用空间小、效率高、加密强度高。
- 缺点:双方需提前共享密钥,存在泄露风险。
- 常用分组密码:DES、AES、IDEA。
- 非对称加密算法:
- 加密密钥与解密密钥不同,分别称为公钥(公开)和私钥(私人持有)。公钥根据私钥产生。
- 优点:无须提前共享密钥,在不安全环境下也可使用。
- 缺点:速度慢,加密强度不如对称算法,存在中间人攻击可能。
- 安全基础:椭圆曲线、大数质因子分解等数学经典难题。
- 常见算法:RSA、SM2、椭圆曲线。
- 随着量子计算到来,普遍认为 RSA 类算法将被破解,更推荐椭圆曲线类算法。
- 混合加密:结合对称与非对称算法优点。通信双方用非对称密钥协商一个临时对称密钥,之后用对称加密通信,通信完毕丢弃临时密钥。
2.2.3 数字签名
- 数字签名(Digital Signature):基于公钥加密技术实现的鉴别数字信息完整性的算法,保障被签名信息的完整性和不可抵赖性。
- 两个重要步骤:签名和验证。签名密钥(私钥)不公开,验证密钥(公钥)公开。
- 通常对原文的哈希值进行加密来签名(而非对原文直接加密,以避免开销过大)。
- 签名过程:签名者用私钥 K 对消息 M 的摘要 D 生成签名 S = F(D, K);验证者用公钥解密 S 得到 D’,与接收消息 M’ 的摘要对比验证完整性和正确性。
- 如果验证者已接收到签名 S,签名者不能再修改数字信息,体现不可抵赖性。
2.2.4 主网与测试网
- 主网(Mainnet):人为规定的特定比特币网络,在主网上流通的比特币才具有经济价值;是参与人数最多、交易最多的网络。
- 测试网(Testnet):用于开发和测试客户端的独立比特币网络;测试网上的比特币一般不具实际经济价值,相对容易获取;有相对较多的节点和参与者,能更好模拟主网环境。
- Regtest:用于本地私有的测试网,通常只有本地节点,其余性质与测试网类似。
- 不同网络使用不同地址前缀区分以避免混淆(见表 2.4)。
2.3 交易
2.3.1 交易简介
- 区块链账户系统有两种经典模型:
- UTXO 模型(比特币为代表)
- 账户状态转移模型(以太坊为代表)
- 比特币交易类似借据交易:交易主要分为输入和输出两部分。输入表示比特币从哪里来,输出表示比特币往哪里去。交易中比特币数值可继续划分,但输入和输出本身都是单一整体,不可划分。
- 参与者共同充当公证人角色,密码学原理充当借据上的印章和签名。
2.3.2 输出
- 一个交易可具备多个输出。
- 输出包含两个主要部分:
- 输出的比特币数量:64 位整数记录,单位为聪(Satoshi),大小为 1/100,000,000 BTC。
- 输出的比特币所有者:通过脚本系统实现,输出脚本相当于对比特币”上锁”,只有对应所有者才能解开。
表 2.1 比特币交易输出结构
| 数据项 | 长度 | 说明 |
|---|---|---|
| nValue | 8 字节(64 位无符号整型) | 输出中的比特币数量,单位:聪 |
| scriptPubKey Len | 变长无符号整型(1-9) | 解锁输出脚本长度 |
| scriptPubKey | 字节串(不定) | 锁定脚本(即输出脚本) |
2.3.3 输入
- 交易输入不能凭空产生,必须引用和解锁一个已完成的其他交易的一个输出。
- 输入由两部分组成:
- 对前一个交易输出的引用:通过交易的哈希值和输出在该交易中的位置决定。
- 解锁脚本:通常使用用户密钥生成,只有用户本人才能生成。
- 一个交易也可有多个输入(如想转 2BTC,一个输出来源不够时可合并多个)。
表 2.2 比特币交易输入结构
| 数据项 | 类型 | 长度/字节 | 说明 |
|---|---|---|---|
| hash | 哈希值 | 32 | 上一个交易的哈希值 |
| index | 无符号整型 | 4 | 交易输出在上一个交易的位置 |
| scriptSig Len | 变长无符号整型 | 1-9 | 解锁脚本长度 |
| scriptSig | 字节串 | 不定 | 用于解锁上一个输出的脚本 |
| nSequence | 无符号整型 | 4 | 序列号,在一些解锁功能中使用 |
2.3.4 UTXO 模型
- UTXO(Unspent Transaction Output):未花费交易输出。衡量用户拥有多少比特币,不仅要看拥有多少交易的输出,还要看这些输出有没有被”花出去”。
- 用户余额 = 所有该用户可解锁且尚未被花费的交易输出之和。
- 交易完成后的输出仍存在,但不能再被使用——已被”花费”。
- 任意比特币可不断回溯:每一笔持币的持有证明都通过前面一层又一层交易的签名确认得到。中本聪白皮书称为**“电子货币是一条数字签名链”**。
- 比特币的新增来源于矿工的打包区块奖励交易(即 coinbase 交易,没有输入,只有转向打包者的输出)。
表 2.3 比特币交易数据结构
| 数据项 | 类型 | 长度/字节 | 说明 |
|---|---|---|---|
| nVersion | 无符号整型 | 4 | 交易的版本号 |
| tx_in cnt | 变长无符号整型 | 1-9 | 交易输入数量 |
| tx_in | 数组 | 不定 | 交易的所有输入,按顺序排列 |
| tx_out cnt | 变长无符号整型 | 1-9 | 交易输出数量 |
| tx_out | 数组 | 不定 | 交易的所有输出,按顺序排列 |
| nLockTime | 无符号整型 | 4 | 用于时间锁定脚本的时间戳 |
2.4 脚本系统
2.4.1 锁定与解锁
- 交易验证时,比特币程序检查锁定脚本(输出脚本,scriptPubKey)和解锁脚本(输入脚本,scriptSig),保证 UTXO 由持有者使用。
- 脚本执行在基于栈的虚拟机中进行——操作如入栈、出栈、复制栈顶元素等。
- 执行顺序:先执行当前交易的解锁脚本,再执行前置交易的锁定脚本;两者都正确返回 True 时交易才合法。
- 转账流程(Alice → Bob → Cathy 示例):
- Bob 向 Alice 提供公钥;
- Alice 将 Bob 公钥写入锁定脚本,“锁”到 Bob 的公钥上;
- Bob 转账给 Cathy 时,将 Cathy 公钥写入输出,然后用自己的私钥对交易(不含解锁脚本的版本)签名,写入解锁脚本;
- 节点验证时,拼接解锁脚本 + 锁定脚本,依此验证签名和公钥是否匹配,验证通过则 Bob 可花费这笔 UTXO。
- 注意:这里的 Bob 提供的是公钥而非地址。当前多数文本资料中”地址”为公钥经过多轮哈希、编码后生成的,对应 P2PKH 类型转账。
- 真实交易示例:交易
6f55...花费了交易110e...的输出,脚本执行过程为 OP_PUSHBYTES 入栈签名和公钥,OP_CHECKSIG 验证,返回 True 则交易合法。 - 比特币交易脚本从某种程度上可看作一种智能合约——事件驱动 + 价值转移,由软件自动执行。
2.4.2 常见脚本类型
- Pay-to-PublicKey(P2PK):锁定脚本包含公钥,解锁脚本需给出对应私钥签名。
- Pay-to-PublicKey-Hash(P2PKH):锁定脚本包含公钥的哈希值,解锁脚本需额外给出对应哈希值的公钥。比 P2PK 更常见,优点:
- 安全:不直接暴露公钥,防止公钥泄露后被反推私钥(即使在现有体系下通过公钥计算私钥非常困难)。
- 节省手续费:锁定脚本使用长度更短的公钥哈希值,交易数据量减少。
- P2PKH 脚本执行流程:入栈签名 → 入栈公钥 → OP_DUP 复制公钥 → OP_HASH160 求哈希 → 入栈公钥哈希值 → OP_EQUALVERIFY 验证哈希相等 → OP_CHECKSIG 验证签名。
- Pay-to-Script-Hash(P2SH):输出脚本包含一段脚本的哈希值,解锁脚本给出序列化后的脚本,哈希值需一致,脚本验证通过后反序列化并执行。大量应用于多重签名钱包。
- NullData:OP_RETURN 操作对应的脚本,专门用于存储和交易逻辑无关的数据,交易输出会被当作假 UTXO,无法被花费。常用于存证、币的销毁证明等场景。
- 隔离见证(SegWit)激活后将部分脚本内容移至 Witness 字段;后续还有 Taproot 软分叉升级。
2.4.3 多重签名钱包
- 多重签名钱包:N 个人共同管理一笔钱,至少需 M 个人同意才能花费(M-of-N)。
- 使用 P2SH 脚本类型实现:
- 解锁脚本提供多个签名数据和 Redeem Script;
- OP_HASH160 对 Redeem Script 求哈希,与锁定脚本中的哈希值对比(OP_EQUAL);
- 反序列化 Redeem Script,执行其中的 OP_CHECKMULTISIG 验证多方签名。
- 多重签名钱包由代码定义、各节点独立执行、通过区块链手段保证多方共识难以篡改——这是区块链智能合约技术的主要特点。
- 重要限制:比特币脚本不是图灵完备的,无法执行循环等复杂操作。为改进这一点,产生了支持图灵完备智能合约的以太坊项目。
2.5 公私密钥与地址
- 在去中心化系统中,不存在权威服务保存用户名与密码的认证关系,因此比特币利用非对称加密体系建立密码与用户之间的映射关系——选定了特定私钥,对应的用户标识(地址)便是确定的。
2.5.1 私钥
- 比特币加密体系采用椭圆曲线进行非对称加密。
- 私钥长度:32 字节(32B)。
- 合法私钥范围:0x1 到
0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间的任意 64 位十六进制整数。 - 私钥是确认 UTXO 所有权的唯一方法,代表地址中所有比特币的使用权,一旦泄露意味着地址中的比特币会被别人随意使用。
2.5.2 公钥
- 公钥通过在特定椭圆曲线上乘以一个固定点得到,是一个坐标值。
- 比特币使用的椭圆曲线:secp256k1(由 SECG 提出),形如 y² = x³ + 7。
- 公钥 Raw 格式:128 位十六进制数,一般加上 0x04 作为前缀(共 130 位)。
- 压缩公钥格式:只保存 x 坐标 + y 坐标的符号(0x02 或 0x03 区分),因椭圆曲线特性——一个 x 坐标只对应两个互为相反数的 y 坐标。
2.5.3 普通地址
- 普通地址(Legacy Address)对应 P2PKH 转账脚本,生成步骤:
- 对公钥进行 SHA256 哈希计算;
- 对上述结果进行 RIPEMD160 哈希计算;
- 计算校验和:对上述结果进行两次 SHA256,取前 **4 字节(前 8 个十六进制数)**作为校验码;
- 使用主网地址前缀 00(表明这是主网普通地址),拼接:
主网前缀 00 + RIPEMD160 结果 + 校验和前 4B。
2.5.4 Base58 编码
- 十六进制数可读性很差,比特币定义 Base58 编码系统对公私密钥进行编码。
- 编码字符集:数字 + 26 个大写字母 + 26 个小写字母,去除数字 0、大写字母 O、大写字母 I、小写字母 l(共 58 个字符,避免混淆)。
2.5.5 其他地址
- 不同地址通过独特前缀区分:
表 2.4 比特币地址类别及对应前缀
| 前缀(十六进制) | Base58 前缀 | 类别 |
|---|---|---|
| 00 | 1 | 公钥哈希地址(P2PKH,普通地址) |
| 05 | 3 | 脚本哈希地址(P2SH) |
| 80 | 5 | 私钥(未压缩公钥) |
| 80 | K 或 L | 私钥(压缩公钥) |
| 6F | m 或 n | 测试网公钥哈希地址 |
| C4 | 2 | 测试网脚本哈希地址 |
| EF | 9 | 测试网私钥(未压缩公钥) |
- 见证隔离等脚本采用 bc 作为地址前缀。
2.6 区块与链
- 交易需要批量确认:将一整批没有冲突的交易打包成一个确认的整体——区块(Block)。节点打包区块后开始竞争确认区块的权利,最先达成条件的节点将交易加入区块链系统。
- 区块还包含上一区块的哈希引用,区块之间形成单向的哈希链表——区块链(Blockchain)。
2.6.1 区块
- 如果把区块链理解为数字账本,一个区块就是账本上的一页。
- 区块由**区块头(Header)和区块体(Body)**组成:区块头包含该区块的所有摘要信息,区块体存放交易等详细数据。
2.6.2 区块头
- 区块头尽可能小以提高传输效率:不存放交易列表,而是存放交易列表的哈希值(Merkle 根)。
表 2.5 比特币的区块头数据结构
| 数据项 | 长度/字节 | 说明 |
|---|---|---|
| nVersion | 4 | 区块遵守的版本 |
| hashPrevBlock | 32 | 前一个区块的哈希值 |
| hashMerkleRoot | 32 | 区块中交易列表的哈希值 |
| nTime | 4 | 产生区块的时间 |
| nBits | 4 | 区块产生的难度目标 |
| nNonce | 4 | 凑齐难度目标的一个随机数 |
- Nonce:可动态调整的随机数,用来在计算产生条件时”凑齐”一个满足产生门槛条件的合法区块(因为如果区块数据全部固定,哈希值就不会变化)。
2.6.3 Merkle 树
- Merkle 树:计算机科学家 Ralph Merkle 于 1979 年提出,是通过元素哈希值构成的二叉树。
- 构造:叶子节点为每个交易的哈希值 → 两两配对计算上层哈希值 → 逐层计算直到得到唯一的 Merkle 根(hashMerkleRoot)。
- 与直接对整个列表计算哈希相比的三大优点:
- 交易哈希值校验:任意交易变动,从根到该叶子节点路径上所有哈希值都会变,可精确定位出错交易。
- 快速重新计算:只对修改节点路径上的哈希值重新计算,不需重新计算整个列表。
- Merkle 树分支与轻节点验证:只需提供对应叶子节点的 Merkle 树分支路径即可完成验证(如验证交易 2 只需提供 Hash₀₁ 和 Hash₂₃),轻节点只需存储区块头而非所有交易列表(即 SPV,简单支付验证)。
2.6.4 区块链
- 每个区块头包含指向前一区块的哈希值,不断往前追溯最终到达创世区块(Genesis Block)。
- 从创世区块到当前区块包含的区块数量称为当前区块的高度(Height)。
- 不可篡改原理:中间区块被篡改 → 哈希值剧烈变化 → 与后续区块的前向哈希冲突 → 必须逐个修改后续所有区块 → 由于每个区块产生都有难度要求,所需精力呈指数级陡增(类似多米诺骨牌效应)。
2.7 共识
- 任意节点都有打包区块的权利,但打包结果必须得到其他参与者承认——这个过程称为共识(Consensus)。
2.7.1 PoW
- 比特币采用**工作量证明(PoW)**作为全网共识机制。
- 合法区块条件:区块哈希值的前 n 位必须为 0(n 称为难度 Difficulty)。
- Nonce:区块中可动态变化的数字,打包人必须不断尝试不同 Nonce 值来”凑数”,直到生成满足条件的区块哈希值。
- 由于哈希函数的单向性,Nonce 只能通过随机尝试的方式找到(类似抽奖,代价是时间,奖品是打包区块的权利)。这个过程称为挖矿(Mining),参与节点称为矿工(Miner)。
- 打包区块奖励(coinbase 交易,无输入只有输出)是所有 UTXO 中比特币的唯一来源。
- 在哈希函数足够随机且参与者足够多的情况下,找到合适 Nonce 所需时间的期望值收敛到一个值,与难度相关。
2.7.2 分叉
- 分叉(Fork):两个不同矿工在相同时间(或相继很短时间)生成两个同样高度的区块,区块链产生两个合法的后继区块。
- 分叉原因:
- 挖矿难度过低,出块速度快,容易同时产生区块;
- 网络通信时延过长,新区块不能很好传播,不知情的矿工继续在同一高度挖矿。
- 双花(Double Spending):在分叉情况下,同一 UTXO 可能被两个冲突交易分别在不同的分支中花费,即同一笔钱被花了两次。
2.7.3 算力与难度调整
- 哈希算力:全网机器在固定时间内能进行尝试的次数。随时间推移,参与节点增加、机器性能增强,全网算力会不断提高。
- 如果难度固定,算力提高会导致出块时间越来越短、分叉大量产生;算力下降则交易很久才能确认。
- 难度调整:当最近一段时间区块平均时间间隔过短 → 说明全网算力提高了 → 适当提高难度;反之亦然。最终目标是将区块间隔稳定在约 10 分钟。
- 因难度总是与前序区块产生时间相关,所有矿工不会在难度调整上产生分歧。
2.7.4 最长链原则
- 为避免分叉导致全网不一致,比特币使用最长链原则确定节点应选择的分支。
- 矿工选择更长分支进行后续挖矿总是更有利:因为哈希函数随机性充足,在短分支上挖矿意味着产生的新区块数量很难超过同时在更长链上产生新区块的其他节点。
- 51% 攻击:破坏者修改一个区块后,必须产生比当前区块链还要长的分支来获得他人认可,攻击者算力需占全网算力的 51% 以上才能实现。
📌 名词解释(高频)
| 术语 | 定义 |
|---|---|
| UTXO | Unspent Transaction Output,未花费交易输出;用户比特币余额 = 可解锁且未被花费的所有 UTXO 之和 |
| 聪(Satoshi) | 比特币最小货币单位,1 聪 = 1/100,000,000 BTC |
| 创世区块 Genesis Block | 区块链的初始区块,高度为 0;比特币创世区块由中本聪于 2009 年 1 月挖出,诞生首批 50 BTC |
| PoW | 工作量证明(Proof of Work),要求区块哈希值前 n 位为 0,矿工通过穷举 Nonce 来满足条件 |
| Nonce | 区块头中可动态调整的随机数(4 字节),用于”凑齐”满足难度条件的合法区块哈希值 |
| Merkle 树 | 由 Ralph Merkle 于 1979 年提出的二叉树结构,叶子为数据项哈希值,逐层哈希得到唯一根哈希 |
| 分叉 Fork | 两个矿工在相近时间产生同样高度的区块,导致区块链出现两个合法后继 |
| 双花 Double Spending | 同一 UTXO 在分叉的不同分支中被分别花费,一笔钱被花了两次 |
| 最长链原则 | 存在多条分叉时,选择最长的分支作为有效链;保证前序区块不可随意篡改 |
| P2PKH | Pay-to-PublicKey-Hash,锁定脚本包含公钥哈希值的最常见转帐类型,对应普通地址(Base58 前缀 1) |
| P2SH | Pay-to-Script-Hash,锁定脚本包含脚本哈希值,广泛应用于多重签名钱包(Base58 前缀 3) |
| Base58 | 比特币编码系统,使用 58 个字符(去除 0/O/I/l),用于对公私钥/地址进行可读性编码 |
| secp256k1 | 比特币使用的椭圆曲线,由 SECG 提出,形如 y² = x³ + 7 |
| 挖矿 Mining | 矿工穷举 Nonce 与区块其他部分计算哈希值,直到找到符合难度要求的区块哈希值的过程 |
| 矿工 Miner | 参与 PoW 共识中打包区块的比特币节点 |
| 哈希算力 | 全网机器在固定时间内能进行哈希尝试的次数 |
| 难度调整 | 根据近期区块平均时间间隔动态调整难度目标,使区块间隔稳定在约 10 分钟 |
⚖️ 重点对比 / 易混区分
UTXO 模型 vs 账户状态转移模型
| 对比项 | UTXO 模型 | 账户状态转移模型 |
|---|---|---|
| 代表项目 | 比特币 | 以太坊 |
| 余额计算 | 所有未花费交易输出之和 | 账户状态中记录的余额字段 |
| 交易结构 | 引用前交易输出 + 解锁脚本 | 基于账户的状态变更 |
| 回溯性 | 可追溯任意比特币的交易签名链 | 依赖全局状态树的变更记录 |
对称加密 vs 非对称加密
| 对比项 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥 | 加解密密钥相同 | 公钥和私钥不同 |
| 优点 | 速度快、效率高、加密强度高、占用空间小 | 无须提前共享密钥,不安全环境也可使用 |
| 缺点 | 需提前共享密钥,存在泄露风险 | 速度慢、加密强度不如对称算法、存在中间人攻击可能 |
| 常见算法 | DES、AES、IDEA | RSA、SM2、椭圆曲线 |
| 比喻 | 同一把钥匙开一把锁 | 两把锁的箱子,各一把钥匙 |
P2PK vs P2PKH vs P2SH vs NullData
| 脚本类型 | 锁定脚本包含 | 解锁脚本需要 | 主要用途 |
|---|---|---|---|
| P2PK | 公钥 | 对应私钥签名 | 基础转账(不常见) |
| P2PKH | 公钥哈希值 | 公钥 + 对应私钥签名 | 最常见普通转账(地址前缀 1) |
| P2SH | 脚本哈希值 | 序列化后的脚本 | 多重签名钱包(地址前缀 3) |
| NullData | OP_RETURN | 无法解锁 | 存证、币销毁证明 |
主网 vs 测试网
| 对比项 | 主网 Mainnet | 测试网 Testnet |
|---|---|---|
| 币的经济价值 | 具有实际经济价值 | 一般不具实际经济价值 |
| 用途 | 真实交易 | 开发、测试客户端及交易脚本 |
| 获取难度 | 需购买或挖矿 | 相对容易获取 |
| 地址前缀(P2PKH) | 1(Base58) | m 或 n(Base58) |
SHA256 vs RIPEMD160(在比特币地址生成中的作用)
| 对比项 | SHA256 | RIPEMD160 |
|---|---|---|
| 算法家族 | SHA2 系列(NSA) | RIPEMD 系列 |
| 在地址生成中作用 | 第一轮哈希 + 校验和(两次 SHA256) | 第二轮哈希(对 SHA256 结果再哈希) |
| 输出长度 | 256 位(32 字节) | 160 位(20 字节) |
❓ 可能考题(简答/论述)
- 比特币采用什么交易模型?简要介绍 UTXO 模型的工作原理。(选择题+简答 1、5)
- 比特币系统是如何防止双花攻击的?(选择题 2;结合 UTXO + 分叉 + 最长链原则 / 51% 攻击说明)
- 比特币区块的数据结构是怎样的?区块头主要包括哪些信息?(简答 1;版本、前一区块哈希、Merkle 根、时间戳、难度目标、Nonce)
- 简述哈希算法的特性并说明哈希碰撞的概念。(简答 2)
- 如何理解比特币系统的数据透明性和不可篡改性?(简答 3;分布式账本公开透明 + 哈希链表抗篡改 + 挖矿难度提高门槛 + 最长链原则)
- 什么是单签名钱包?什么是多签名钱包?(简答 4;P2PK/P2PKH vs M-of-N 多重签名)
- 比特币脚本分为哪些类型?(简答 6;P2PK、P2PKH、P2SH、NullData/OP_RETURN)
- Merkle 树在比特币中的作用是什么?(简答 7;交易哈希校验、快速重算、轻节点 SPV 验证)
- 主网与测试网有哪些区别?(简答 8;经济价值、用途、地址前缀不同)
- 比特币区块中时间戳的作用是什么?(简答 9;记录区块产生时间、参与难度调整)
- 比特币中私钥、公钥、地址之间的关系是什么?(简答 10;私钥 → 椭圆曲线乘法 → 公钥 → SHA256 + RIPEMD160 + Base58 → 地址)
- 什么是 PoW?比特币如何通过它达成共识?(Nonce 穷举、哈希值前 n 位为 0、挖矿、难度调整、最长链原则)
- 为什么说比特币脚本不是图灵完备的?这带来了什么影响?(无法执行循环等复杂操作 → 催生了以太坊)
- 什么是分叉?导致分叉的原因有哪些?如何解决分叉带来的不一致?(网络延迟、难度过低;最长链原则)
- 比特币的不可篡改性与最长链原则和 51% 攻击之间的关系是什么?(篡改需重算所有后续区块并通过最长链原则获得认可 → 需要全网 51% 以上算力)
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
随机文章随机推荐










