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.

InfoHash Mendalam: BitTorrent v1, v2, Magnet Link, BTIH, dan BTMH

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

Referensi


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.