Мы видим много статистических данных о том, что X% узлов Биткоина запускают клиент Y и это значит, что такой же их процент поддерживает Y. Обратите внимание на то, что об этом сообщают не майнеры в блоках, а скорее то, что программные узлы (ноды) сети Биткоина сообщают о том, что на них запущено. Действительно ли эти данные стоят внимания?
Как работает сеть Биткоина
Чтобы понять, каким образом обычно собирается эта статистика, вам нужно немного больше понять устройство сети Биткоина. Каждый узел сети связывается с другими узлами для создания действующей сети. Такую сеть мы можем назвать сетью сплетников. Это способ, которым информация распространяется децентрализованно. Информация в таком случае это новые транзакции в мемпуле, новые найденные блоки и расположение других узлов в сети.
Каждый узел, который соединяется с другим узлом, пересылает информацию о своей версии, как это определено BIP0014. Параметр user_agent информации версии определяет, какая именно версия программного обеспечения запущена. Если вы запускаете клиентскую программу, вы видите программное обеспечение узлов (нод), запустив bitcoin-cli getpeerinfo и получив данные от узлов. По умолчанию эти данные будут выглядеть как /Satoshi:0.13.2/. Вкладом Сатоши стало упрвляемое программное обеспечение, 0.13.2 и / и : используются разделители, как указано в BIP0014. Для Bitcoin Unlimited строкой, идентифицирующей программное обеспечение, будет BitcoinUnlimited, для btcd этой строкой будет btcwire и так далее.
Как рассчитывается количество узлов
Чтобы подсчитать, сколько узлов запускают данную версию программного обеспечения, мы получаем от них данные и смотрим на полученную информацию о версиях. При этом учитывается IP адрес каждого узла.
Затем подсчёт узлов опрашивает каждый узел и то, как они соединены между собой. Заодно выясняется, какое программное обеспечение запущено на каждом из узлов. Снова поступает информация о каждом из IP адресов узлов и версии программного обеспечения, если она ещё не была получена.
Такой опрос продолжается до тех пор, пока узлы не закончатся и вуаля, мы получаем количество узлов, на которых запущено данное программное обеспечение.
Спуфинг
Проблема состоит в том, что узлы сами сообщают о своём состоянии. А значит, узел может передать другой номер версии программного обеспечения, чем это есть на самом деле.
На самом деле узел вообще не должен запускать программное обеспечение полного узла! Когда другие узлы запрашивают информацию по блокам или транзакциям, поддельный узел может просто опросить реальный узел или блок эксплорер, получить от них информацию и передать её дальше. С точки зрения других узлов, нет разницы между поведением реального и поддельного узла, поскольку их поведение по сути то же самое.
Возможность для атаки Сибиллы
Таким образом статистика узла делает довольно простой атаку Сибиллы. Противник может запустить тысячи узлов, передающие данные о любом программном обеспечении и сделать статистику бесполезной. Единственными необходимыми ресурсами являются IP адреса и сервер для их обслуживания. Мы подозреваем, что такая атака уже происходит.
Вывод
Чем больше важности мы уделяем статистике подсчёта узлов, тем больше мы даём мотивации манипулировать этой статистикой. Поэтому в интересах всего сообщества Биткоина прекратить уделять внимание этой статистике и сосредоточиться на более важных вещах.
Хотите больше новостей? Facebook. Быстрее всех? Telegram и Twitter. Подписывайтесь!