6.4 区块链中的密码学:哈希、签名与链式结构


6.4 区块链中的密码学:哈希、签名与链式结构

本节摘要:区块链没有发明新算法,它把三种成熟零件——哈希链、默克尔树、数字签名——焊成一台"无需中心即可维护共同账本"的机器:哈希链焊出历史不可改,签名焊出所有权归属,工作量证明把哈希变成共识谜题。本节拆解三个焊点的受力方式,并澄清"51% 攻击"究竟能做什么、不能做什么。

一条链的三种焊点

**第一道焊点:哈希链。**每个区块头都存着前一区块头的哈希摘要,而区块头里又存着整块交易默克尔树的根(5.3 节的结构原样搬来)。改动历史区块里的任何一笔交易,默克尔根变,区块头哈希变,后继所有区块头的"前哈希"字段全部对不上——篡改要成功,必须连根重算其后全部区块。在比特币的规则里,重算还要满足难度目标(见第三道焊点),于是"不可篡改"从形容词变成算术:改第 N 块的成本约等于与全网竞争重算第 N 块之后的所有工作量。

**第二道焊点:签名与地址。**账户的所有权完全由一对密钥表达:私钥在你手里,公钥经哈希(比特币用 SHA-256 再接 RIPEMD-160)得到公开的"地址"。花钱即签名——交易里塞进对交易内容的 ECDSA 签名,全网节点用公钥验签,过则入块。地址可以大大方方贴在网上(它不泄露公钥全文,还多一层哈希保护),私钥则等于余额本身,"not your keys, not your coins"说的就是这道焊点的物理含义。4.5 节 ECDSA 随机数的血案在这里格外昂贵:重复一次 k,地址里的全部资产即刻易主。

**第三道焊点:工作量证明(PoW)。**共识的题面是:谁有权记账?比特币的答案把 5.1 节的"指纹"变成了挖矿谜题——不断调换区块头里的随机数,直到双重 SHA-256 的摘要小于当前难度目标。摘要不可预测,找解只能穷举,全网算力成为投票权;难度每两周按出块速度校准,维持约十分钟一块的节律。

图:区块的密码学结构与篡改的连锁反应

图:区块的密码学结构与篡改的连锁反应

二、51% 攻击的能与不能

"掌握过半算力即可为所欲为"是流传最广的误读。算力过半确实能做两件事:回滚——从早前的区块分叉重算,用更快的速度让改动版链成为最长链;审查——拒绝把特定地址的交易打进区块。但它做不到第三件事:凭空签名。把别人地址里的币转走需要那把私钥的合法 ECDSA 签名,算力再多也造不出来——第二道焊点与第一道焊点的受力方向完全不同。理解"哪道焊点防哪种攻击",比背结论重要得多:哈希链防篡改、签名防伪造、PoW 防的是无许可环境下的记账权垄断,三者各司其职。

技术栈的代际也值得标注:比特币用 secp256k1 曲线上的 ECDSA;以太坊账户层同曲线,共识层已换用可聚合签名的 BLS(千个验证者的签名可聚合成一个,减轻共识通信);新链多取 Ed25519——4.5 节确定性 nonce 的天然受益者。哈希方面,比特币的双重 SHA-256 有规避单轮结构缺陷的历史考量,以太坊改用 Keccak-256——5.2 节 SHA-3 家族的直接工程受益者。区块链领域没有发明新密码学,它最了不起的地方恰恰是:只用被本书反复检验过的零件,就组装出了一套运行十余年无人攻破密码层的系统。

用 Python 搭一条微缩链,亲手引爆一次连锁反应:

import hashlib, json def h(obj) -> str: return hashlib.sha256(json.dumps(obj, sort_keys=True).encode()).hexdigest()[:16] chain = [{"prev": "genesis", "data": "Alice 转给 Bob 5 元"}] chain.append({"prev": h(chain[-1]), "data": "Bob 转给 Carol 2 元"}) chain.append({"prev": h(chain[-1]), "data": "Carol 转给 Dave 1 元"}) for blk in chain: print(h(blk), blk["data"]) chain[0]["data"] = "Alice 转给 Eve 999 元" # 篡改第一笔交易 print("篡改后链是否完整:", all(b["prev"] == h(a) for a, b in zip(chain, chain[1:]))) # -> False

常见问答三则

问:量子计算机为什么格外威胁区块链地址?因为不少老地址在交易时公开过公钥,而 ECDSA 一旦失去离散对数保护,公钥就等于私钥的门票。防御做法是尽量使用"公钥哈希即地址"的形态(公钥从未曝光的地址多一层哈希护甲),并跟进链上向后量子签名的迁移。这与 7.3 节的时间窗推算是同一道题。

问:助记词与私钥是什么关系?现代钱包按分层确定性规范由一段随机熵派生整棵密钥树,熵的十二或二十四个单词编码就是助记词。抄下助记词等于抄下全部资产,它的备份与继承问题本质是密钥管理问题的家庭版。

问:矿工算力越集中越不安全吗?共识层的去中心化程度决定回滚与审查的成本,密码层的安全性则与算力分布无关——签名验不过,谁的块都不认。分层理解,才不会被"矿池恐慌"与"密码失效"两种论调同时误导。

签名在交易里的三个工程细节

细节一,签名覆盖的是交易的哈希承诺:签名字段绑定的是"哪些输入、转给谁、转多少"的规范化序列,任何一处改动都会让验签失败——这是第二道焊点的受力点。细节二,跨链重放防护:两条同源链的交易格式可能完全一致,为防一份签名在另一条链被重新提交,交易里要带有链专属标识,否则签名就是可移植的——这是"签名绑定上下文"原则的教科书案例。细节三,多重签名与门限钱包正成为机构标配:多把私钥按策略共签一个输出,或若干密钥碎片合作产出一个标准签名(6.5 节的 MPC 技术),在"私钥即资产"的世界里,这既是安全冗余也是治理结构。

本节要点回顾

  • 哈希链:前哈希字段让单点篡改引发全链断链,默克尔根把整块交易缩成一个可验证的摘要;
  • 签名即所有权:地址由公钥哈希派生,转账合法性等于一次公钥验签,私钥即资产本体;
  • PoW:难度目标把哈希穷举变成记账权投票,链的分叉裁决即共识;
  • 51% 的边界:能回滚与审查,不能伪造签名——三道焊点各防一种攻击,不可互相替代。

密码学在此展现出超出"保密"的构造力。下一节看它的最新前沿:如何向全世界证明一个命题为真,却不泄露任何为什么。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U