BT9G LABS / DHT 심층 분석 #04

InfoHash 심층 분석: BitTorrent v1·v2, Magnet, BTIH, BTMH

BitTorrent 콘텐츠 식별자가 어떻게 계산되고 v1/v2 해시가 Magnet link에서 어떻게 표현되는지 설명합니다.

BT9G Labs / DHT Deep Dive #04. info dictionary를 기준으로 SHA-1 기반 v1, SHA-256 기반 v2, hybrid torrent까지 정리합니다.

InfoHash 심층 분석: BitTorrent v1·v2, Magnet, BTIH, BTMH

빠른 요약

  • 주제: InfoHash 심층 분석: BitTorrent v1·v2, Magnet, BTIH, BTMH
  • 핵심 키워드: InfoHash, BitTorrent v1, BitTorrent v2, BTIH, BTMH
  • 대상 독자: 백엔드 엔지니어, 프로토콜 연구자, 검색 엔지니어, BitTorrent 구현자
  • 목표: DHT와 BitTorrent의 동작 원리를 실제 크롤러, 인덱싱, 검색 아키텍처 설계에 활용할 수 있을 정도로 정확하게 설명합니다.

시스템 뷰

식별 경계는 info dictionary

BitTorrent v1의 InfoHash는 .torrent 전체 파일의 해시가 아니라 원본 bencoded info dictionary의 SHA-1입니다. comment나 Tracker list처럼 info 밖의 값이 바뀌어도 info 바이트가 같으면 InfoHash는 유지됩니다.

파싱 후 구조를 다시 직렬화하면 원본 바이트 표현이 바뀔 수 있으므로, 검증에 사용할 원시 경계를 보존하는 것이 안전합니다.

v1/BTIH와 v2/BTMH

v1은 20-byte SHA-1을 사용하고 Magnet에서는 주로 urn:btih로 표현됩니다. v2는 BEP 52에서 SHA-256과 Merkle tree를 도입하고, Magnet에서는 multihash 기반 urn:btmh를 사용합니다. v1과 v2를 함께 지원하는 hybrid torrent도 존재합니다.

따라서 '모든 InfoHash는 40자리 hex'라는 가정은 장기적으로 안전하지 않습니다.

검색 인덱스 설계에 미치는 영향

Content identity는 deduplication, Metadata validation, detail route, 다중 소스 병합의 기준입니다. protocol version, hash algorithm, raw digest, canonical text representation을 명시적으로 분리하면 v1/v2/hybrid를 안정적으로 다룰 수 있습니다.

DHT activity, Tracker, Peer endpoint는 identity 자체가 아니라 identity에 연결되는 관측 데이터로 저장하는 것이 좋습니다.

구현 스케치

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()

BT9G Labs 엔지니어링 노트

BT9G 같은 인덱싱 시스템에서는 이벤트 수 자체보다 콘텐츠 식별자, 수명이 짧은 네트워크 관측값, 수집 상태, 검색용 문서를 분리하는 것이 중요합니다. DHT나 Peer에서 얻은 필드에는 출처와 타임스탬프를 남기고, discovery, 연결, handshake, 확장 지원, Metadata 수집, 검증, 저장, 검색 반영을 단계별로 측정해야 실제 병목을 찾을 수 있습니다.

흔한 오해

  • v1에서 .torrent 전체를 해시하는 것.
  • hex 대소문자를 다른 리소스로 취급하는 것.
  • InfoHash가 항상 20-byte SHA-1이라고 가정하는 것.
  • v2/hybrid를 고려하지 않고 스키마를 고정하는 것.

관련 BT9G Labs 글

참고 자료


다음 글: BEP 5 DHT 메시지 해설: ping, find_node, get_peers, announce_peer →

이 글은 공개 BitTorrent 프로토콜의 동작을 엔지니어링 및 연구 목적으로 설명하며, 관측된 모든 Swarm이 사용 가능하거나 유효하거나 재배포 허가를 받았음을 의미하지 않습니다.