BT9G LABS / DHT Deep Dive #04
InfoHash Mendalam: BitTorrent v1, v2, Magnet Link, BTIH, dan BTMH
Pelajari bagaimana InfoHash dibentuk pada BitTorrent v1 dan v2, perbedaan BTIH dan BTMH, serta implikasinya bagi magnet link dan indexing.
BT9G Labs / DHT Deep Dive #04. InfoHash adalah identitas kriptografis konten metadata Torrent, sehingga detail cara menghitung dan menyimpannya sangat penting bagi search engine.
Ringkasan cepat
- Topik: InfoHash Mendalam: BitTorrent v1, v2, Magnet Link, BTIH, dan BTMH
- Kata kunci utama: InfoHash, BTIH, BTMH, BitTorrent v1, BitTorrent v2, magnet link
- Untuk pembaca: engineer backend, peneliti protokol, search engineer, dan pengembang implementasi BitTorrent
- Tujuan: Menjelaskan protokol dan desain sistem dengan cukup presisi agar dapat diterapkan pada pipeline discovery, metadata, indexing, dan search di dunia nyata.
Gambaran sistem
Info dictionary sebagai batas identitas
Pada file .torrent, bagian info adalah objek yang menentukan identitas Torrent. Hash dihitung dari representasi bencoded yang tepat, bukan dari nama file tampilan atau string JSON hasil parsing. Perubahan byte yang relevan pada info dictionary akan menghasilkan identitas berbeda.
Karena itu parser tidak boleh mengubah urutan atau encoding lalu menghitung hash dari struktur yang sudah dinormalisasi. Sistem indeks sebaiknya menyimpan raw info bytes atau cara yang menjamin verifikasi dapat dilakukan terhadap payload asli.
v1 dan namespace BTIH
BitTorrent v1 menggunakan SHA-1 terhadap bencoded info dictionary sehingga menghasilkan nilai 20-byte. Magnet link klasik mengekspresikannya melalui xt=urn:btih:..., biasanya dalam heksadesimal atau Base32.
Banyak sistem lama memakai string 40 karakter sebagai primary key. Itu nyaman untuk v1, tetapi desain baru jangan mengasumsikan semua identitas BitTorrent akan selalu sepanjang 20 byte karena BitTorrent v2 memperkenalkan model hash berbeda.
v2, SHA-256, dan BTMH
BitTorrent v2 menggunakan SHA-256 dan struktur Merkle untuk verifikasi konten. Magnet modern dapat memakai multihash melalui namespace BTMH. Hybrid Torrent juga dapat membawa kompatibilitas v1 dan v2 sekaligus, sehingga satu publikasi dapat memiliki lebih dari satu representasi identitas yang relevan.
Database sebaiknya memodelkan tipe hash dan algoritme secara eksplisit, bukan hanya kolom hash CHAR(40). Hal ini menghindari migrasi besar ketika dukungan v2 menjadi lebih luas.
Implikasi untuk indexing
Canonical identity, magnet representation, raw metadata, dan dokumen pencarian sebaiknya dipisahkan. Saat ingest, verifikasi bahwa metadata yang diterima benar-benar menghasilkan InfoHash yang diharapkan sebelum menyimpannya sebagai valid.
Jika sistem mendukung v1, v2, dan hybrid, buat relasi yang dapat menghubungkan identitas terkait tanpa menggabungkannya secara keliru. Dedup berdasarkan nama file saja tidak cukup karena nama yang sama dapat merujuk pada konten berbeda.
Sketsa implementasi
import hashlib
def v1_infohash(raw_bencoded_info: bytes) -> bytes:
return hashlib.sha1(raw_bencoded_info).digest()
def v2_infohash(raw_bencoded_info: bytes) -> bytes:
return hashlib.sha256(raw_bencoded_info).digest()
Catatan engineering BT9G Labs
Untuk sistem indeks seperti BT9G, metrik yang paling berguna bukan sekadar jumlah paket atau jumlah InfoHash yang terlihat. Pisahkan identitas konten, observasi jaringan, status akuisisi, metadata terverifikasi, serta dokumen pencarian menjadi lapisan data yang berbeda. Simpan sumber dan waktu observasi untuk data yang datang dari DHT atau Peer. Dengan begitu, bottleneck dapat dilacak dari tahap discovery, koneksi, handshake, negosiasi extension, pengambilan metadata, validasi, penyimpanan, hingga indexing.
Kesalahan umum
- Menghitung InfoHash dari JSON hasil parsing, bukan raw bencoded info dictionary.
- Mengasumsikan semua InfoHash selalu 40 karakter hex.
- Menggabungkan v1 dan v2 tanpa menyimpan tipe hash.
- Menganggap nama Torrent adalah identitas kanonik.
Artikel BT9G Labs terkait
- Kademlia Dijelaskan: XOR Distance, Routing, dan Skalabilitas BitTorrent DHT
- Cara BitTorrent DHT Menemukan Peer: Bootstrap, get_peers, dan announce_peer
- Pesan DHT BEP 5: ping, find_node, get_peers, dan announce_peer
- Di Dalam Routing Table DHT: k-Bucket, Node Churn, dan Pemilihan Kontak
Referensi
- BEP 3 - The BitTorrent Protocol Specification
- BEP 52 - The BitTorrent Protocol Specification v2
- BEP 9 - Extension for Peers to Send Metadata Files
Artikel berikutnya: Pesan DHT BEP 5: ping, find_node, get_peers, dan announce_peer →
Artikel ini menjelaskan protokol BitTorrent publik dan pola engineering. Observasi terhadap sebuah Swarm tidak berarti kontennya tersedia, valid, atau diizinkan untuk didistribusikan.