What Is a Hybrid Info Hash in BitTorrent?
A hybrid info hash is a dual-identifier mechanism used in BitTorrent to maintain backward compatibility between the legacy BitTorrent v1 protocol and the modern BitTorrent v2 specification. This article explains what a hybrid info hash is, why it is necessary, how the underlying metadata structure is formatted, and the exact process used to compute both v1 and v2 info hashes for a single torrent.
Understanding BitTorrent v1 vs. v2
BitTorrent v1 relies on a single cryptographic hash function: SHA-1.
In v1, the entire payload is treated as a continuous byte stream,
divided into fixed-size pieces. The torrent metadata file contains a
concatenated list of 20-byte SHA-1 hashes for each piece, and the entire
info dictionary is hashed with SHA-1 to generate a 20-byte
v1 info hash.
BitTorrent v2 (defined in BEP 52) addresses security vulnerabilities
in SHA-1 and improves data deduplication by using SHA-256. Instead of
treating files as one continuous stream, v2 organizes each file into its
own Merkle hash tree. The roots of these trees are stored in a new
file tree structure, and the info dictionary
is hashed using SHA-256 to create a 32-byte v2 info
hash.
What Is a Hybrid Torrent?
A hybrid torrent is a specially formatted .torrent file
that includes the necessary metadata for both v1 and v2 clients to
participate in the same distribution network. It bridges the gap between
older clients that only understand SHA-1 piece arrays and newer clients
capable of utilizing SHA-256 Merkle trees.
Clients interacting with a hybrid torrent can discover peers in both v1 and v2 swarms, allowing users on different protocol versions to share the same underlying file data.
Structural Requirements for Hybrid Torrents
To allow compatibility between both specifications, the
info dictionary of a hybrid torrent must satisfy specific
structural rules:
- Dual Metadata Fields: The
infodictionary must contain both the legacy v1pieceskey (a byte string of 20-byte SHA-1 hashes) and the v2file treekey (a hierarchical dictionary containing SHA-256 root hashes for each file). - File Alignment and Padding: In BitTorrent v2, every file is aligned to piece boundaries, meaning the start of a file always coincides with the start of a piece. To ensure v1 piece hashes match the file boundaries used in v2, hybrid torrents insert empty padding files into the v1 file list to pad the tail end of any file that does not evenly match the piece length.
- Consistent Piece Size: The piece size chosen for
the v1
piecesstring must match the piece size declared in the v2 metadata.
How the Hybrid Info Hash Is Generated
Because the info dictionary contains all fields required by both
protocols, two distinct info hashes are generated from the same bencoded
info dictionary:
+--------------------------------+
| Hybrid 'info' Dictionary |
| - Contains v1 'pieces' |
| - Contains v2 'file tree' |
+---------------+----------------+
|
+-----------------+-----------------+
| |
Apply SHA-1 Hashing Apply SHA-256 Hashing
| |
v v
+-----------------------+ +-----------------------+
| v1 Info Hash | | v2 Info Hash |
| (20 Bytes / SHA-1) | | (32 Bytes / SHA-256) |
+-----------------------+ +-----------------------+
- Canonical Bencoding: The complete
infodictionary—including name, piece length, v1pieces, v1files(with padding), and the v2file tree—is serialized using standard canonical Bencoding. - Generating the v1 Info Hash: The SHA-1 algorithm is
run over the raw bytes of the bencoded
infodictionary. This produces the standard 20-byte (160-bit) hash used by BitTorrent v1 clients and trackers. \[\text{v1 Info Hash} = \text{SHA-1}(\text{bencode}(\text{info}))\] - Generating the v2 Info Hash: The SHA-256 algorithm
is run over the exact same raw bytes of the bencoded
infodictionary. This produces the 32-byte (256-bit) hash used by BitTorrent v2 swarms. \[\text{v2 Info Hash} = \text{SHA-256}(\text{bencode}(\text{info}))\]
Representation in Magnet Links
In magnet links, a hybrid torrent includes both hashes to ensure maximum client interoperability.
- The v1 hash is represented via the
urn:btih:(BitTorrent Info Hash) parameter, using a 40-character hex string or a 32-character Base32 string. - The v2 hash is represented via the
urn:btmh:(BitTorrent Multihash) parameter, prefixed with the multihash identifier for SHA-256 (usually1220followed by the 64-character hex digest).
When a client receives a hybrid magnet link, a v1 client parses the
urn:btih parameter and joins the legacy swarm, while a
v2-capable client can utilize both parameters to communicate across both
swarms simultaneously.