Когда вы открываете магнитную ссылку или добавляете торрент-файл, клиент почти мгновенно начинает поиск источников — хотя вы не указали ни адрес сервера, ни имя файла. Вся эта магия держится на хешах: коротких отпечатках, которые однозначно идентифицируют раздачу и позволяют проверить каждый скачанный байт. В этой статье разберём, какие именно хеши существуют в BitTorrent-системе, что каждый из них проверяет, где они хранятся и почему иногда клиент «доскачивает» файл, который у вас уже есть.
- Два уровня проверки: раздача целиком и её части
- Info-hash: главный идентификатор раздачи
- Хеши частей: как проверяется каждый скачанный байт
- Что проверяется в магнитной ссылке
- BitTorrent v2: что изменилось в проверке
- Проверка уже скачанных файлов и докачка
- Что хеш НЕ проверяет: ограничения, о которых стоит помнить
- Типичные вопросы и ошибки
- «Клиент пишет, что данные не прошли проверку. Что это значит?»
- «Магнитная ссылка не находит метаданные. Хеш неверный?»
- «Можно ли по хешу узнать, что внутри раздачи?»
- «Два торрента с разными хешами — это точно разные файлы?»
- «Зачем сверять хеш, если клиент и так всё проверяет?»
- Краткая шпаргалка: какой хеш за что отвечает
- Что делать дальше: практические ориентиры
Два уровня проверки: раздача целиком и её части
В BitTorrent проверка целостности работает на двух уровнях, и путать их не стоит.
Первый уровень — идентификация раздачи. Хеш здесь отвечает на вопрос «та ли это раздача вообще». Он не проверяет содержимое файла, а служит уникальным именем, по которому клиент находит пиров и метаданные.
Второй уровень — проверка данных. Это уже контроль целостности: сверка скачанных байтов с эталонными хешами частей. Именно благодаря ему клиент знает, какой кусок файла пришёл повреждённым, и запрашивает его заново у другого участника.
Оба уровня используют одну и ту же криптографическую идею — хеш-функцию, которая превращает любой объём данных в короткую строку фиксированной длины. Изменение даже одного байта даёт совершенно другой результат, поэтому подменить данные, сохранив хеш, практически невозможно.
Info-hash: главный идентификатор раздачи
Когда вы создаёте торрент, клиент формирует структуру метаданных — так называемый info-словарь. В нём записаны:
- имя раздачи;
- список файлов с их размерами (если файлов несколько);
- размер части (piece length);
- хеши всех частей файла;
- при необходимости — приватный флаг и другие служебные поля.
Info-hash — это хеш именно этого словаря. В классическом протоколе BitTorrent v1 для его вычисления используется SHA-1, результат — 20 байт, которые обычно записывают как 40 шестнадцатеричных символов. Например, в магнитной ссылке фрагмент xt=urn:btih:… содержит именно его.
Что из этого следует практически:
- Две раздачи с одинаковым info-hash — это одна и та же раздача, даже если в разных каталогах она называется по-разному.
- Если релизер пересобрал торрент (изменил размер части, состав файлов, добавил служебные данные), info-hash изменится, и клиенты увидят это как другую раздачу.
- Имя в магнитной ссылке (dn=) — лишь текстовая подсказка для отображения. На идентификацию оно не влияет и проверке не подлежит: раздачу определяет только btih-хеш.
Отсюда частый практический вывод: если вы хотите продолжить докачку из другого источника, совпадение названия файла ничего не гарантирует — совпадать должен info-hash.
Хеши частей: как проверяется каждый скачанный байт
Внутри info-словаря лежит поле pieces — длинная последовательность, в которой подряд записаны хеши всех частей раздачи. Часть (piece) — это блок фиксированного размера, например 256 КБ, 1 МБ, 4 МБ или больше в зависимости от общего объёма раздачи. Каждый такой блок при создании торрента прогоняется через SHA-1, и результат попадает в этот список.
Когда клиент получает блок данных от пира, он вычисляет хеш полученного фрагмента и сравнивает его с эталонным из метаданных. Совпал — блок считается валидным и записывается на диск. Не совпал — блок отбрасывается, а источник помечается как отдающий повреждённые данные.
Это решает сразу несколько задач:
- Целостность. Повреждения при передаче, ошибки диска, обрывы соединения не приводят к битому файлу — испорченный кусок просто перекачивается.
- Защита от подмены. Участник не может отдать вам произвольные данные вместо фрагмента фильма или программы: они не пройдут проверку.
- Точность докачки. Клиент знает, какие части уже валидны, и не перекачивает весь файл заново.
Важный нюанс: проверка идёт на уровне части, а не отдельного файла. Если в раздаче несколько файлов, они делят части между собой — граница части может проходить по двум файлам сразу. Поэтому «доскачать только один файл из раздачи» клиент может, лишь если нужные части полностью покрываются этим файлом.
Что проверяется в магнитной ссылке
Магнитная ссылка — это не файл, а короткая строка с параметрами. Классический вид выглядит примерно так:
magnet:?xt=urn:btih:ХЕШ&dn=ИМЯ&tr=АДРЕС_ТРЕКЕРА
Разберём, что здесь реально участвует в проверке, а что — нет.
- xt=urn:btih:… — единственный обязательный и проверяемый элемент. Это info-hash раздачи. По нему клиент находит пиров через DHT и трекеры.
- dn — отображаемое имя. Чисто косметический параметр: его можно стереть, и раздача не изменится.
- tr — адреса трекеров, вспомогательные источники пиров. Их наличие не обязательно и на целостность не влияет.
- xl — предполагаемый размер, подсказка. Не является гарантией.
Ключевое следствие: магнитная ссылка не содержит хешей частей. Она содержит только идентификатор раздачи. Хеши частей клиент получает позже — из метаданных, которые выкачивает у пиров (этот процесс называется получением метаданных через расширение протокола, в интерфейсах клиентов он часто виден как «получение метаданных» или «поиск источников»). Пока метаданные не получены, проверить нечего — клиент даже не знает размер и состав файлов.
Именно поэтому магнитную ссылку нельзя «проверить заранее» так, как торрент-файл: торрент-файл можно открыть и посмотреть содержимое до начала загрузки, а магнитная ссылка сначала подключает вас к сети, и только потом вы видите, что именно качаете.
BitTorrent v2: что изменилось в проверке
В протоколе версии 2, который постепенно поддерживается современными клиентами, схема проверки переработана:
- Хеш-функция SHA-1 заменена на более стойкую SHA-256.
- Появились два уровня хеширования: каждая часть разбивается на блоки по 16 КБ, и хеши считаются для блоков, а затем для частей из хешей блоков. Это позволяет проверять данные мельче и точнее.
- Хеширование ведётся отдельно для каждого файла, поэтому докачка и проверка отдельных файлов работают корректнее, чем в v1.
- Идентификатор раздачи (btih в магнитной ссылке) вычисляется уже из хешей файлов по правилам v2.
Существуют и гибридные торренты, совместимые одновременно с v1- и v2-клиентами: они содержат данные для обеих версий. Практический смысл для обычного пользователя простой: если раздача и клиент поддерживают v2, проверка целостности строже, а защита от коллизий — выше. Но базовая логика «идентификатор раздачи + хеши частей» сохраняется.
Проверка уже скачанных файлов и докачка
Хеши частей дают полезную возможность: клиент может проверить файлы, которые у вас уже есть на диске, и докачать только недостающее. Это называется повторной проверкой (force re-check, «проверить локальные данные»). Она полезна в нескольких ситуациях:
- вы прервали загрузку и хотите убедиться, что скачанное не повреждено;
- вы скопировали файлы с другого диска или от другого человека и хотите докачать раздачу без полной загрузки;
- после сбоя питания или ошибок диска нужно выяснить, какие части испорчены.
Порядок действий типовой:
- Добавьте торрент-файл или магнитную ссылку в клиент (info-hash должен совпадать с исходной раздачей).
- Укажите папку, где лежат имеющиеся файлы, — важно, чтобы имена файлов совпадали с указанными в раздаче.
- Запустите принудительную проверку локальных данных.
- Дождитесь результата: клиент сверит каждую часть с эталонными хешами и докачает только несовпадающие.
Если проверка показывает почти полный прогресс, а загрузка не идёт — возможно, раздача «мёртвая»: пиров с полными данными нет. Хеши тут ни при чём, проверять нужно активность раздачи.
Что хеш НЕ проверяет: ограничения, о которых стоит помнить
Хеш гарантирует, что вы получили именно те байты, которые были в исходной раздаче. Но он ничего не говорит о содержании этих байтов. Это принципиально важно понимать.
- Хеш не проверяет безопасность. Если релизер собрал торрент из файла с вредоносной программой, все части будут идеально совпадать с хешами — и файл пройдёт проверку на 100%. Целостность и безопасность — разные вещи.
- Хеш не подтверждает качество и подлинность. Перекодированное видео, обрезанный архив или переупакованная программа будут «валидными», если релизер посчитал их хеши от того, что выложил.
- Совпадение имени не гарантирует совпадение хеша. Одинаковое название файла в двух раздачах не означает, что это одни и те же данные.
- Хеш в магнитной ссылке не раскрывает содержимое. По btih-строке нельзя узнать, что за файл, — только найти его в сети.
Поэтому при загрузке программ и архивов из открытых источников разумная привычка — сверять хеш файла (например, SHA-256, указанный автором распространения) отдельными средствами после загрузки, если такая контрольная сумма опубликована. Это независимая от BitTorrent проверка, и она закрывает то, что хеши раздачи не проверяют: соответствие содержимого замыслу автора.
Типичные вопросы и ошибки
«Клиент пишет, что данные не прошли проверку. Что это значит?»
Часть файла на диске не совпадает с эталонным хешем. Причины: повреждение на диске, ошибка при копировании, изменение файла после загрузки (например, плеер или архиватор что-то дописали), реже — сбой самого клиента. Решение — принудительная проверка с последующей докачкой испорченных частей. Если раздача активна, файл восстановится; если пиров нет — восстановить будет не из чего.
«Магнитная ссылка не находит метаданные. Хеш неверный?»
Скорее всего, нет. Info-hash может быть корректным, но раздача не имеет активных участников, а DHT и трекеры из ссылки не отвечают. Проверьте, включены ли в клиенте DHT и обмен пирами, добавьте рабочие трекеры, попробуйте позже. Хеш сам по себе «не работает» только если он был скопирован с ошибкой — например, обрезан при копировании строки.
«Можно ли по хешу узнать, что внутри раздачи?»
Нет. Хеш — это отпечаток, а не описание. Узнать состав можно только получив метаданные от пиров или открыв торрент-файл, где метаданные записаны явно.
«Два торрента с разными хешами — это точно разные файлы?»
Не обязательно разные файлы, но точно разные раздачи. Один и тот же фильм может быть выложен несколькими релизерами с разным размером части или составом файлов — тогда info-hash будет разным, хотя итоговый видеофайл совпадает байт в байт. Пиры между такими раздачами в классической схеме не объединяются.
«Зачем сверять хеш, если клиент и так всё проверяет?»
Клиент проверяет соответствие данных раздаче, но не даёт вам информации о том, кому вы доверяете эту раздачу. Если источник публикации сомнительный, проверка целостности пройдёт, а проблема останется. Сверка хеша файла с контрольной суммой от первоисточника (сайта разработчика, автора) — отдельный и более значимый рубеж для программ и документов.
Краткая шпаргалка: какой хеш за что отвечает
| Хеш | Где находится | Что проверяет | Когда используется |
|---|---|---|---|
| Info-hash (btih) | Магнитная ссылка, торрент-файл, DHT | Идентичность раздачи целиком | Поиск пиров, объединение источников, докачка из другой раздачи |
| Хеши частей (pieces) | Метаданные раздачи | Целостность каждого блока данных | При получении каждого фрагмента, при повторной проверке |
| Хеши блоков (v2) | Метаданные раздачи v2 | Целостность мелких блоков внутри части | Более точная проверка в протоколе v2 |
| Контрольная сумма файла (например, SHA-256) | Публикуется автором отдельно | Соответствие файла оригиналу автора | Ручная проверка после загрузки программ и архивов |
Что делать дальше: практические ориентиры
Главный принцип: хеши в торренте отвечают за «точно те же данные», но не за «безопасные и нужные данные». Отсюда простая последовательность действий при работе с раздачами:
- Берите магнитные ссылки и торрент-файлы из источников, которым есть основания доверять: именно выбор источника, а не криптография, определяет, что вы скачаете.
- Перед докачкой сверяйте info-hash, а не название файла — совпадение btih-строки означает ту же раздачу.
- После сбоя или прерывания загрузки запускайте принудительную проверку локальных данных, а не удаляйте файлы.
- Для программ и архивов, если автор публикует контрольную сумму, сверяйте её после загрузки независимо от клиента.
- Не считайте успешную проверку на 100% признаком безопасности содержимого: она подтверждает только целостность.
Если запомнить одно: магнитная ссылка проверяет только «паспорт» раздачи — info-hash, а целостность данных обеспечивают хеши частей, которые клиент получает вместе с метаданными. Всё, что находится за пределами этих двух проверок — источник, безопасность, качество, — оценивается уже вашими собственными критериями выбора, а не математикой хешей.
