区块链数据结构入门:哈希、椭圆曲线与数字签名

发布时间:2026/10/15 23:26:36
区块链数据结构入门:哈希、椭圆曲线与数字签名 这个系列走到第二讲按标题规划该进入区块链的数据结构了。但说实话我每次带新人入门都会在这里纠正一个期待真正卡住人的不是链表、不是树而是隐藏在数据结构底下的密码学基础。第二讲这一篇主题是数据结构01实际要啃的是哈希函数、椭圆曲线、数字签名这三块硬骨头。因为区块头为什么长那样、交易为什么改一个字符整条链都不认账、Merkle树为什么存在答案全在密码学里。这篇文章适合两类人一类是刚看完区块链科普想系统搭建知识框架的初学者另一类是准备做钱包、节点或智能合约开发的工程师需要把密码学组件和数据结构的关系彻底理顺。读完你至少能解释三个问题为什么矿工要反复算那个前导零为什么钱包地址能防手误为什么谁掌握私钥谁就拥有资产这句话在技术底层是成立的。1. 为什么数据结构课要先讲密码学三个地基问题1.1 区块链到底在解决什么账本、篡改与信任抛开各种炒币叙事区块链要解决的核心问题其实很朴素在没有可信第三方的前提下让一群互不信任的节点对同一本账本达成一致。传统银行账本由中心机构维护你信任它不篡改、不丢失而区块链的账本分散在每个节点手里谁都可以保留一份谁都可以提交新的记录。那问题就来了节点凭什么相信别人广播过来的数据凭什么相信历史记录没有被动手脚凭什么确认交易确实是持有者本人发起的这三个凭什么恰好对应了密码学的三个核心组件哈希函数负责防篡改非对称加密负责身份与所有权数字签名负责授权与不可抵赖。数据结构中的所有设计本质上都是在为这三个目标服务。1.2 密码学在链上扮演的三个角色我用一张表把这层关系固定下来后面每一节都在给这张表填细节。密码学组件锁定的数据结构解决的问题哈希函数SHA-256等区块头、交易指纹、Merkle树防篡改、工作量证明、数据归并椭圆曲线非对称加密公私钥对、地址所有权证明、身份标识数字签名ECDSA交易输入、授权凭证交易真实性、完整性、不可抵赖你可以把这三件事想象成现实生活的场景哈希是给文件打上防拆封的铅封非对称加密是给每个人发一把独一无二的钥匙数字签名则是在每张支票上按下带时间戳的指纹。铅封一旦破坏立刻可见钥匙配对才能开锁指纹无法仿造也无法抵赖。区块链不过是用数学把这些日常信任机制变成了可自动校验的协议。1.3 这个系列接下来数据结构的暗线系列课的后续会讲到交易、区块、链式存储、Merkle树。你心里要装着这样一条主线交易先被哈希成一串固定长度的指纹多笔交易的指纹两两合并最终收敛为一个Merkle根根被写进区块头区块头里再放入前一个区块头的哈希就形成了一条哈希链。这套结构里流转的每一个值几乎都是密码学算法的输出。所以这篇打基础的文章不是绕路而是给后面所有数据结构内容搭脚手架。2. SHA-256 的四个脾气单向、抗碰撞、雪崩、定长2.1 哈希到底是什么任意长度进固定长度出哈希函数不是加密它没有解密的说法。它的行为可以概括为一句话输入任意长度的数据输出一个固定长度的摘要。以SHA-256为例无论你输入一个字符还是整本小说输出永远是256位也就是64个十六进制字符。你可以在本地终端随手验证# 任意长度输入固定 64 位十六进制输出 echo -n hello world | sha256sum echo -n hello world. | sha256sum注意第二行我多加了一个英文句号。跑过之后你会发现两个输出长度都是64位但内容几乎每一位都不一样。这就是哈希的雪崩效应输入哪怕只翻转一个比特输出也会面目全非。我曾经给初学的朋友做过一个演示先哈希转账A给B 100元再哈希转账A给B 100元。把两个摘要摆在屏幕上然后问他——如果有人在账本里偷偷改了个标点你能不能发现一目了然。2.2 前导零目标值挖矿难度的密码学真相你可能听过矿工在算一个前导零的哈希这个说法不够准确但方向是对的。在PoW工作量证明机制里矿工要把区块头里的字段作为输入不断改变其中的nonce值反复计算SHA-256直到输出小于某个目标值。因为哈希输出是均匀分布的所以输出恰好小于目标值的概率可以调节目标值越小需要的尝试次数越多。目标值从哪里来区块头里有一个bits字段它压缩编码了当前网络的难度目标。以UTXO模型的主网为例难度调整会让目标值大约保持在前导若干位为0的水平。你可以这样理解整个网络在比赛谁先找到一个满足条件的骰子面每个nonce就是一次掷骰子SHA-256就是那枚看不见的骰子。因为哈希单向不可预测没人能直接算出答案只能傻算这就是工作量的来源。别小看这个机制它决定了一个新区块平均需要多长时间才出现也决定了篡改历史的成本——你想重写一个旧区块就必须把之后所有区块的账全部重新算一遍。2.3 前后区块如何被哈希焊接成一条链数据结构层面哈希最精彩的用法是区块间的焊接。每个区块头里都保存着前一个区块头的完整哈希这个值叫prev block hash。新区块生成时会取出最新区块的哈希作为自己的父亲指针。因为哈希具有雪崩效应只要前一个区块内容有任何改变它的哈希就变了所有引用它的后代区块立刻无法匹配。这带来一个很有意思的推论链上任何一个历史区块被篡改都会导致其后所有区块的哈希校验失败。想硬改一个旧交易你不能只改那一笔得把从这个区块到链顶的全部后续区块重算一遍而且算完还要面对网络中其他节点的不认可因为共识规则承认的是工作量累积最多的那条链。哈希在这里把防篡改从理念变成了可量化的经济成本。这也是为什么说区块链数据结构本质上是一条哈希链表密码学在前结构在后。3. secp256k1从私钥随机数到地址的完整推导3.1 为什么区块链选了椭圆曲线而不是RSA非对称加密有很多种实现早期互联网上RSA十分常见但区块链世界的主流选择是椭圆曲线密码学UTXO系主网用的是secp256k1曲线。原因可以归结为三点。第一是密钥长度与安全强度的性价比。RSA达到128位安全强度需要2048位模数而椭圆曲线只需要256位左右的密钥。区块链上公钥和地址要写进每个区块、每笔交易密钥越短存储和带宽越省。第二是签名体积。椭圆曲线数字签名算法ECDSA的签名通常只有64字节左右而RSA签名长度和模数相当动辄几百字节。对区块容量、交易费率敏感的链来说这个差异很可观。第三是参数与后门争议。secp256k1的曲线参数被设计成最小、可验证的形式社区长期关注其参数来源问题这种白箱特性很重要。相比之下某些曲线参数由特定机构生成总有人担心里面是否藏了谁也不知道的弱点。我自己做项目选型时如果只是开发区块链应用直接用标准曲线即可如果涉及自定义链或跨链协议曲线参数的可审计性一定要纳入评估。3.2 私钥、公钥、地址的生成链路这条链路是每个区块链开发者都必须烂熟于心的。私钥本质上就是一个随机选取的256位整数范围大约在1到曲线的阶n之间。理论上私钥可以丢骰子生成但在软件钱包里一般由安全的随机数源产出。有了私钥k公钥就是椭圆曲线上的一个点K k * G其中G是曲线上的固定生成点。这个乘法的性质是知道k和G很容易算出K但知道K和G极难反推出k这是椭圆曲线离散对数问题的难处。接下来从公钥到地址不同模型有两条路线。以UTXO系为例流程是将未压缩公钥或压缩公钥做SHA-256哈希对哈希结果再做RIPEMD-160得到20字节的Hash160在Hash160前加上版本字节主网通常为0x00对版本字节Hash160整体做两轮SHA-256取前4字节作为校验码将版本字节Hash160校验码整体做Base58编码得到最终地址。账户模型系稍有不同通常是直接把公钥做Keccak-256哈希取后20字节再用十六进制前缀标识我这里不展开。需要注意地址不是公钥本身而是公钥的哈希压缩投影。这样设计有一个实际好处当签名被广播时公钥只在花费时才暴露一次降低了公钥被提前收集和潜在分析的风险。3.3 版本字节与 Base58Check地址是怎么防呆的很多人不知道地址里内嵌了自我校验能力。Base58编码刻意删掉了容易混淆的字符比如数字0和大写字母O、大写I和小写l降低肉眼抄写错误率。更关键的是那4字节校验码它由地址前缀和负载哈希运算生成如果地址任何一个字符被抄错、被复制损坏校验码就会对不上钱包会在你点击发送之前直接报错。我早年做钱包集成时测试转出一笔小额资产故意把一个地址中间的字符换成另一个形近字钱包立刻提示地址校验失败而不是把币发给一个未知黑洞。这个设计救过不少马大哈。说句实在话非对称加密本身保护的是所有权而Base58Check保护的是传输环节的人为失误两者叠加区块链地址才敢说自己是可放心使用的。记住了地址可以随意外发私钥绝对不行地址泄露最多被人盯上私钥泄露等于保险柜钥匙被人配了一把。4. 数字签名交易里那枚不可克隆的私章4.1 签名到底在保护什么交易的哪些字段不能被改有了公私钥下一个问题是怎么证明一笔交易确实由资产所有者发起。答案是数字签名。但签名签的到底是什么很多人理解偏了。签名不是签我同意转出而是签这份完整交易内容的哈希。以UTXO系的未花费交易输出模型为例一笔交易包含输入引用你之前收到币的那笔输出、输出收款地址与金额、版本号、锁定时间等字段。签名时发送方用私钥对交易哈希进行签名并把签名与公钥放进输入脚本中。这里的要点是签名的哈希覆盖了整个交易的关键字段一旦交易被广播后有人想偷偷修改收款地址或金额那个哈希就变了已有签名立刻失效。网络节点验签时会重新计算交易哈希再拿公钥验证签名对不上就拒绝。所以数字签名同时保证了三件事身份真实只有持有私钥的人能生成有效签名、内容完整任何字段改动都会导致验签失败、不可抵赖有效签名在数学上等价于本人按下手印。这在数据结构上等价于给每笔交易打了一层内容防篡改封印。4.2 ECDSA 的一来一回签名与验签ECDSA的实操流程可以压缩成三步。签名方用私钥k和一个随机数nonce结合交易哈希生成一对数(r, s)这(r, s)就是签名。验签方拿到签名、公钥和交易哈希做一次椭圆曲线点运算算出的结果如果能够恢复出r则签名有效。有个细节容易被忽略ECDSA对随机数质量极其敏感。如果同样的私钥和交易哈希两次签名用了同一个nonce值攻击者仅仅通过两个签名就能反向推出私钥。早年曾有过真实案例某个钱包的随机数生成器出问题导致大量地址私钥被还原。所以做钱包开发这行代码必须用经过审计的高质量随机源绝不能为了省事用简单随机数。普通用户也可以记住一个结论签名时随机性越强越安全随机数出问题比私钥泄露更隐蔽也更致命。为了直观理解可以用印章来类比私钥是唯一的印章母版签名是盖在交易上的印痕但和物理印章不同这份印痕绑定交易哈希换一份文件旧印痕就无效。任何人都可以拿公钥来比对印痕是否为真却没有人能从印痕反推出印章母版。4.3 谁拥有私钥谁就能花钱钱包安全的技术逻辑把上面的逻辑推到极限你会得到一个冷冰冰的事实在区块链世界里私钥就是唯一的权限凭证。不存在忘记密码找客服重置也不存在账户被冻结后申诉解冻因为协议层不关心你的身份证、手机号只认签名。谁拿得出有效签名账本就把资产判给谁。这也是为什么助记词的备份如此重要。助记词本质上是私钥的另一种编码你用12个或24个英文单词记录它丢失助记词等于丢失私钥资产永久锁死。我给身边朋友的安全建议一直很朴素助记词离线生成、离线保存绝不拍照、绝不粘贴进聊天框至少准备两份备份存放在不同物理位置不要把它放在单独一个加密软件里软件坏了数据就没了涉及大额资产的地址尽量用冷钱包签字让私钥永不接触联网环境。这不是危言耸听。区块链账本没有后悔药一笔交易一旦被纳入区块全网只会认签名不会认悲惨故事。从数据结构角度理解每个交易输入里的签名就是打开上一笔输出的钥匙钥匙在谁手里谁就拥有支配权协议层面只验证这一点其余的一概不关心。5. 把密码学拼成区块区块头的骨架与 Merkle 根5.1 区块头的六个字段各自的密码学任务前面讲了哈希和签名现在可以试着把这些零件拼成一个区块的雏形。一个区块分两部分区块头和交易体。区块头在最前面通常包含这样几类信息字段作用密码学任务版本号标识协议版本软分叉兼容前块哈希指向前一个区块哈希链防篡改Merkle根归并全部交易摘要哈希折叠时间戳区块生成时间难度调整、时间窗口难度目标bits编码挖矿难度工作量证明门槛Nonce随机数供矿工穷举制造前导零哈希前块哈希把区块焊接成链Merke根把交易体浓缩成32字节Nonce配合哈希让矿工可以不断尝试。可以这么说区块头是密码学的集散地所有结构上的巧思最后都浓缩在这几十个字节里。5.2 Merkle 根两两折叠出一棵哈希树交易体的归并逻辑是数据结构课的预演。假设一个区块里有4笔交易先对每笔交易做SHA-256得到4个哈希然后两两配对再次哈希得到2个中间哈希再对这两个哈希进行一次哈希最终得到1个根哈希这就是Merkle根。如果交易数是奇数就把最后一笔哈希复制一份和自己配对保证每层都能两两配对。整个过程画出来是一棵倒置的二叉树叶子是交易根是Merkle根。Merkle根的存在让轻节点校验成为可能。轻节点不需要下载全部交易数据只要持有区块头里的根再向全节点索取一条从目标交易到根的哈希路径就能自行验证某笔交易是否真的包含在这个区块里。路径长度只有树高乘以2个哈希验证成本几乎可以忽略。这就是用一次根哈希代表一整棵交易树的精妙之处存储端极度压缩验证端保持可靠性。很多区块链相关系统的数据指纹、跨链证明、二层网络状态根用的都是同一套折叠思路。5.3 下一讲预告从哈希链到默克尔树的完整数据结构到这里你会发现密码学基础已经悄悄铺出了数据结构的骨架交易哈希是叶子Merkle根是汇聚点前块哈希是链的指针签名是交易的合法授权凭证。下一步就是把这些零件正式组装成完整的区块、交易池和链式存储并深入讨论哈希链和Merkle树在不同场景下的取舍。我在给人演示时最喜欢的实验就是取一个同步好的测试链尝试修改某笔历史交易的金额然后观察后续区块的Merkle根和前块哈希全部失配。这件事每次看都很有冲击力因为它是所有密码学原理在数据结构上的最终落点改一处动全身除非重算全世界否则历史不可篡改。数据结构也好共识算法也罢最后都在为这一个结论服务。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询