很多人第一次接触区块链时,会记住“不可篡改”四个字,却不一定知道这四个字是怎样实现的。再往前一步,就会遇到几个容易混淆的概念:哈希为什么会因为一点改动而完全不同?哈希碰撞是不是一定代表系统不安全?陷门又是什么?
这篇文章把这些概念串成一条线:哈希函数 → 区块链的链式结构 → 哈希碰撞 → 变色龙哈希 → 可编辑区块链。
一句话理解区块链 #
区块链是一种由多个节点共同保存和校验的、使用密码学保护的链式账本。数据被打包进区块,区块按顺序连接;区块一旦确认,历史记录通常只能追加,不能直接修改。
它依赖三件事:
- 分布式保存:不是一台服务器保存唯一副本,而是多个节点各自保存账本。
- 密码学校验:哈希、数字签名等机制帮助节点发现数据是否被改动。
- 共识机制:节点按照规则确认哪些区块可以加入账本。
所以,“不可篡改”不是说物理上绝对不能改,而是说:一旦修改历史数据,伪造者必须同时通过哈希校验、节点验证和共识规则,现实成本通常非常高。
哈希:数据的数字指纹 #
哈希函数可以把任意长度的输入,计算成固定长度的摘要。例如,SHA-256 会输出 256 位结果,通常写成一串十六进制字符。
可以把它理解成文件的“数字指纹”:
| |
上面只把最后一个字母改了,但输出看起来完全不同。这是密码学哈希的雪崩效应:输入只改变一位,输出中也会有大量比特随机翻转。
雪崩效应的意义是让人无法根据输出的局部变化猜出输入改了哪里,同时让篡改很容易被检测出来。
区块为什么能连成一条链 #
一个区块通常包含交易或其他记录、时间戳,以及区块头信息。区块头会保存前一个区块的哈希值:
| |
假设有人修改了区块 A 中的一笔记录:
- A 的内容变了,
Hash(A)发生巨大变化; - B 中保存的仍是旧的
Hash(A),因此链接校验失败; - B 的区块内容也无法保持原来的链条关系,后面的 C、D 等区块会继续受到影响。
这就是传统区块链“修改一个历史区块,会引起连锁失效”的直观原因。攻击者不只要重新计算后续区块,还要让其他节点接受这条伪造链。
哈希碰撞到底是什么 #
哈希碰撞指两段不同的输入得到相同的哈希输出:
$$M_1 \ne M_2,\quad H(M_1)=H(M_2)$$从数学上说,输入空间通常是无限的,而输出空间是固定的,所以碰撞一定存在。这可以由鸽巢原理直接推出。
但在工程上,重要的是“能不能在可接受的时间内主动找到碰撞”。SHA-256 的设计目标就是让攻击者几乎无法构造出实用碰撞。也就是说,碰撞在理论上存在,并不代表系统容易被碰撞攻击。
因此要区分两件事:
- 普通密码哈希的碰撞:通常是需要避免的安全问题。
- 变色龙哈希的可控碰撞:经过授权后主动生成,是一种设计出来的功能。
陷门是什么 #
陷门可以理解为一把特殊的秘密钥匙。没有这把钥匙时,某个问题在计算上很难解决;持有钥匙后,解决同一个问题就变得容易。
在可编辑区块链中,陷门通常属于变色龙哈希的密钥材料。它不是让任何人都能修改区块,而是让被授权的一方可以在保持哈希值不变的情况下,把旧消息替换成新消息。
变色龙哈希:允许授权的“同指纹替换” #
变色龙哈希(Chameleon Hash)是一种带陷门的哈希原语。它同时具备两种看似矛盾的性质:
- 没有陷门的人,仍然很难构造碰撞;
- 持有陷门的人,可以把不同消息适配成相同的哈希值。
标准定义通常包括四个算法:
Setup:生成公共参数;KeyGen:生成公钥和陷门密钥;Hash:根据消息和随机数计算哈希;Adapt:持有陷门的一方,把旧消息对应的随机数调整为新随机数,使新旧消息的哈希保持一致。
形式上可以写成:
$$CH(pk,m_1,r_1)=CH(pk,m_2,r_2)=h$$其中 $m_1 \ne m_2$,但哈希结果仍然是同一个 $h$。注意,通常不是“只改消息、哈希自动不变”,而是需要使用陷门计算配套的新随机数。
可编辑区块链怎样工作 #
传统区块链使用普通哈希连接区块,历史数据一改,后面的链就会失效。可编辑区块链则在特定位置使用变色龙哈希:
- 原始区块内容 $m_1$ 和随机数 $r_1$ 计算出哈希 $h$;
- $h$ 被写入区块头,并被后续区块引用;
- 当出现合法的删除、修正或脱敏请求时,经过授权的编辑方把内容改为 $m_2$;
- 编辑方使用陷门计算新的随机数 $r_2$;
- 新旧内容仍满足
CH(pk,m₁,r₁) = CH(pk,m₂,r₂) = h。
这样,区块内容可以被修订,后续区块引用的哈希仍然有效。
这并不意味着任何人可以偷偷改账。一个可靠的可编辑区块链还需要身份认证、审批策略、编辑日志和审计机制,明确记录“谁在什么时间、因为什么原因、修改了什么内容”。
为什么需要可编辑区块链 #
传统区块链的永久保存能力适合存证,却可能与现实中的数据治理要求发生冲突:
- 用户要求删除个人敏感信息;
- 业务发现链上记录录入错误;
- 链上出现不应公开保存的非法或违规内容;
- 数据法规要求数据主体拥有更正或删除权。
可编辑区块链试图在两者之间取得平衡:保留区块链的可验证性和审计能力,同时允许经过严格授权的有限修订。
三种常见实现思路 #
1. 基于变色龙哈希 #
用变色龙哈希替换部分普通哈希,编辑时通过陷门维持链式摘要不变。这是研究最广泛的一类方案,但陷门管理和权限控制很关键。
2. 双链或多链 #
主链保留原始记录,修正链记录后续编辑结果。读取数据时按照规则解释两条链。它更容易表达修改历史,但会增加存储和查询开销。
3. 基于共识投票的重写 #
由节点投票决定是否接受一次历史修订,必要时切换到新的链。它适合重大事件,通常不适合频繁的细粒度编辑。
最大风险:陷门不能由一个人随意掌握 #
如果一个管理员独占完整陷门,他理论上可以修改很多历史内容,这会形成新的单点风险。常见的解决思路是使用 Shamir 秘密共享:
- 把陷门拆成多个份额,交给不同机构;
- 设置 $(k,n)$ 门限,至少 $k$ 个机构同意才能执行编辑;
- 单独一个机构拿到自己的份额,也无法完成修改。
再配合多方审批、身份签名和不可编辑的审计日志,可以降低滥用风险。
传统区块链与可编辑区块链 #
| 对比项 | 传统区块链 | 可编辑区块链 |
|---|---|---|
| 历史数据 | 默认不可修改 | 允许受控修订 |
| 主要摘要 | 普通密码哈希 | 常使用变色龙哈希 |
| 修改权限 | 原则上不提供 | 需要授权和审计 |
| 优点 | 结构简单,篡改成本高 | 更容易满足纠错、脱敏和合规要求 |
| 新风险 | 脏数据可能永久存在 | 陷门泄露或权限滥用 |
最后用五句话记住它们 #
- 哈希是数据指纹,输入稍微变化,输出通常会发生巨大变化。
- 区块链把前一区块的哈希写进后一区块,因此历史篡改会产生连锁校验失败。
- 哈希碰撞是不同输入得到相同输出;普通哈希要求碰撞难以构造。
- 陷门是让特定持有者可以解决某个困难问题的秘密钥匙。
- 变色龙哈希利用陷门产生可控碰撞,使可编辑区块链能够在授权、可审计的前提下修订历史数据。
可编辑区块链的关键,不是把区块链变成一个谁都能修改的数据库,而是把“修改”变成一种有权限、有条件、有记录、可追责的系统操作。







