分布式系统(E03):IPFS、SUNDR 与 Bitcoin 的开放网络信任模型
内容寻址、fork consistency 和工作量证明都大量使用哈希,却在回答三个不同问题。IPFS先判断“拿到的字节是不是所请求的内容”;SUNDR判断“不可信服务器是否给不同客户端编造了无法再无痕合并的历史”;Bitcoin在开放成员网络里用累计工作竞争公共账本顺序。把它们统称为“去中心化保证”,会丢掉真正的信任边界。
分布式系统(E02):GFS/HDFS 与 Bigtable/HBase 的存储架构开放网络先问对手能做什么
E02里的NameNode、HMaster和存储节点处在一个明确管理域。开放网络则可能遇到陌生peer、恶意存储服务和Sybil身份。系统必须分别规定数据完整性、身份、发现、可用性、顺序和经济攻击成本。
flowchart TD
Q[收到网络结果] --> I{要验证什么}
I -->|字节是否匹配名字| C[内容寻址]
I -->|服务器是否分叉历史| F[fork consistency]
I -->|开放成员怎样竞争账本| W[工作量证明与链选择]
C --> X[不自动证明发布者或可用性]
F --> Y[不阻止首次分叉或拒绝服务]
W --> Z[不提供即时确定终局]
通用判断模式是“先列攻击能力,再选证据”。哈希只能承诺输入与摘要的关系;签名绑定密钥;因果链约束历史;资源成本影响Sybil攻击。协议往往组合这些原语,但组合前各自没有越权能力。
IPFS:内容地址验证字节,不负责所有信任
CID(Content Identifier)包含版本、编码和multihash信息。客户端按CID取回block后重新计算摘要,错误字节无法匹配所请求的名字。本地实验把一个字符改掉,SHA-256即不同。
sequenceDiagram
participant C as Client
participant R as Routing/DHT
participant P as Peer
C->>R: 谁可能提供CID h?
R-->>C: peer地址
C->>P: 请求h
P-->>C: bytes
C->>C: hash(bytes) == h ?
路由回答“去哪里问”,不是“那个peer一定有正确数据”。内容摘要也不说明谁发布了它、是不是最新版本、是否有权访问,更不保证网络中始终有人保留block。IPNS、签名记录、pinning与复制策略解决其他层面的问题,不能塞进CID的含义。
Kademlia式DHT用XOR距离和路由表逐步接近目标键。恶意节点仍可拒绝响应、返回错误peer或实施Eclipse类隔离;真实系统需要并行查询、节点多样性和额外安全策略。本文不把peer discovery写成共识。
SUNDR:服务器可分叉,但不能无痕重合
SUNDR面向一个可能恶意的集中存储服务器。客户端通过签名和哈希链维护操作历史。服务器可以让Alice和Bob各自看到自洽但不同的分支;只要两人后来交换或间接比较认证信息,分叉就会暴露。服务器不能把两个分支重新合成一段双方都接受、又不留下矛盾证据的共同历史。
flowchart LR
G[共同历史h0] --> A[Alice看到hA]
G --> B[Bob看到hB]
A -.恶意服务器隔离.-> A
B -.恶意服务器隔离.-> B
A --> E[客户端交换认证头]
B --> E
E --> D{hA等于hB?}
D -->|否| X[检测到fork]
这项安全性比“服务器永远不能撒谎”弱,也比“每个客户端各自读到一致值”强。恶意服务器仍可停止服务,两个永不通信的客户端可能长期留在不同分支。fork consistency约束的是分叉后的历史关系,不是可用性。
Bitcoin:公开排序依赖累计工作与网络假设
Bitcoin把交易组织进区块,区块引用前块摘要。矿工寻找满足难度目标的nonce;节点选择累计工作最多的有效链。篡改旧区块会改变摘要并断开后继引用,攻击者必须重做后续工作并追赶诚实链。
flowchart LR
G[genesis] --> B1[block1 PoW]
B1 --> B2[block2 PoW]
B1 --> A1[攻击分支]
B2 --> H[诚实累计工作]
A1 --> A2[攻击累计工作]
H --> S{比较累计工作}
A2 --> S
“最长链”不是单纯数区块,也不是即时finality。传播延迟会产生暂时分叉,后续累计工作可能导致reorganization。确认数增加只是降低特定攻击模型下的逆转概率;概率依赖攻击算力和网络假设,不能写成固定次数后的数学绝对终局。
PoW还没有验证交易的现实世界含义。它帮助开放参与者对账本顺序竞争,交易签名与脚本负责授权规则,经济激励影响攻击成本。一个有效链仍可能包含现实业务上有争议的支付。
同一个哈希函数,三种安全命题
| 系统 | 主要对手 | 哈希进入哪里 | 得到的核心证据 | 明确没有得到 |
|---|---|---|---|---|
| IPFS | 错误或恶意内容提供者 | CID/multihash | bytes与请求内容身份匹配 | 发布者身份、新鲜度、可用性 |
| SUNDR | 恶意存储服务器 | 认证历史链 | 分叉后不能无痕重合 | 防止首次分叉、服务活性 |
| Bitcoin | 开放网络中的双花与Sybil竞争 | 区块链接与PoW | 有效链及累计工作排序 | 即时确定终局、现实交易正确性 |
安全性证明必须把密码学假设写出来:哈希需要抗碰撞和抗二次原像,签名需要不可伪造,密钥必须安全。活性则另外依赖peer可达、服务器响应或诚实算力与网络传播。协议名不能代替这些条件。
运行有限实验
1 | |
程序验证三条有限轨迹:篡改内容不匹配摘要;两个分叉头交换后不同且不能由服务器悄悄合并;玩具链的两个区块满足三位十六进制零目标,修改首块payload后原nonce不再对应原hash。完整结果见观察结果,命令与来源见实验证据,验证范围见验证说明。
三位零目标没有安全意义,nonce次数也不是性能基准。实验未运行IPFS节点、SUNDR签名协议或Bitcoin网络,不覆盖DHT、网关、Merkle tree、难度调整、激励和重组概率。
两个推演练习
从一个peer取回的block通过CID校验,能否证明它来自原作者?
不能。校验只证明字节与CID匹配。发布者身份需要签名或受信命名记录;“这是最新版本”还需要版本选择规则。
SUNDR客户端发现两个历史头不同,为什么不能直接选择hash更大的分支?
摘要大小不是协议顺序或授权证据。不同头证明服务器分叉了视图,应用应报警、停止敏感操作或进入规定的恢复流程,不能发明一个数值选胜规则。
E04回到受管理云环境,比较函数执行与跨云任务调度的冷启动、放置、重试和费用边界。
参考资料
- Juan Benet,2014,IPFS - Content Addressed, Versioned, P2P File System。
- IPFS Docs,Content Addressing。
- Maymounkov、Mazières,2002,Kademlia。
- Li 等,2004,Secure Untrusted Data Repository (SUNDR)。
- Nakamoto,2008,Bitcoin: A Peer-to-Peer Electronic Cash System。
- Bitcoin Developer Guide,Block Chain。
