Впервые в истории криптовалют, использован протокол STUN для получения внешнего IP-адреса.
Зачем это нужно?
Дело в том, что Bitcoin и все его наследники используют один и тот же общедоступный веб-сервер для получения внешнего IP.
Существует два сервера, которые жестко прошиты в бумажнике любой криптовалюты:
Можете сами убедиться, заглянув в исходный код https://github.com/bitcoin/bitcoin/blob/master/src/net.cpp,
функцию GetMyExternalIP()
Что интересно: второй сервер http://www.showmyip.com в настоящее время не работает.
Таким образом, все кошельки Bitcoin и его форки сегодня зависят от единственного веб-сервера: checkip.dyndns.org.
Если этот сервер по какой-либо причине упадет, то это приведёт к весьма неприятным последствиям.
Крипты конечно не умрут, но резко снизится устойчивость сети.
Это произойдёт вследствие того, что узлы сети не смогут сообщать друг другу о вновь подключившихся узлах.
Клиенты же, после цикла включение-выключение будут оторваны от сети и подключиться смогут по минимуму, только к ранее известным узлам. Всё это приведёт к резкому падению связности сети, и как следствие - к критическому снижению устойчивости.
Также обратим внимание, что текущей WEB-механизм получения внешнего IP основан на нестандартизированном человеко-ориентированном текстовом протоколе, для криптокошельков и прочих роботов не предназначенном. Поэтому, если владельцы сайта вдруг изменят формат вывода (например, для более удобного чтения), то все кошельки не смогут разобрать и понять это обновление, и результаты будут такими же, как если бы сервер упал.
Кроме того, владельцы dyndns.org потенциально способны посредством анализа логов WEB-сервера собрать список IP-адресов на которых работают ваши кошельки и когда они были включены (по временным меткам).
Как вы понимаете, пользователи, как правило, включают кошелёк для того чтобы провести транзакции.
Аналитик может связать время запуска кошелька и IP-адрес из лога сервера с временем проведения операций платежа в блокчейне.
Это серьезно компрометирует анонимность пользователей.
Наше решение проблемы, применённое в EmerCoin:
Мы заменили текущий нестандартный, технически несовершенный протокол (на основе TCP / HTTP ) на специально разработанный для этой цели, хорошо зарекомендовавший себя протокол RFC3489 (STUN).
Краткое описание протокола: http://en.wikipedia.org/wiki/STUN.
Это легкий протокол на базе UDP, широко используется в SIP-системах (VOIP - телефония, IP-видео) уже свыше 10 лет. И так как он является стандартным, мы можем быть уверены, что наш кошелёк сможет распознать ответ от любого STUN-сервера. В настоящее время, вновь запущенный EMC-кошелек для получения IP-адреса использует 47 STUN-серверов, распределенных по всему миру, и последовательность запроса является случайной.
Таким образом, никто из владельцев серверов не сможет собрать сколь либо полный список подключений наших кошельков. Кроме того, мы провели некоторые шаги для рандомизации подписи, что делает трудным определение на стороне сервера, кто же отправил этот запрос - один из бесчисленных IP телефонов или EMC-кошелек.
Таким образом, мы достигли наших целей: убрана зависимость от централизованного сервера, обеспечена более высокая стабильность сети и реальная анонимность.
UPD: Интересно, что на bitcointalk`е тему восприняли в штыки - https://bitcointalk.org/index.php?topic=134731.msg8341419#msg8341419
Мол дескать все это ерунда, есть UPNP протокол и он все решает. На что ему грамотно ответили, что UPNP - это лишь частный случай и работает он далеко не всегда при различных условиях.
Кстати, на пальцах - довод за STUN против UPNP:
Зададимся вопросом: Какова вероятность того, что заNATный кошелёк окажется за каким-то кривым NATом, где UPNP не работает? Возьмём оптимистичную оценку в 1/10000. То есть 1/10000 клиентов обломятся.
Теперь зададим тот же вопрос про STUN - какова вероятность, что ВСЕ 47 stun-серверов умрут, и клиент останется без IP? Предположим пессимистично, что коэффициент готовности STUN-сервера 50% (то есть в среднем, половину времени сервер в дауне). Соответственно, вероятность того, что все залягут, это 1/2^47, или примерно 1/140737488355328
6 Comments
Recommended Comments
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now