Jump to content
  • entries
    14
  • comments
    68
  • views
    88826

STUN протокол для криптовалюты


Garrett

5168 views

Впервые в истории криптовалют, использован протокол STUN для получения внешнего IP-адреса.

 

Зачем это нужно?

 

Дело в том, что Bitcoin и все его наследники используют один и тот же общедоступный веб-сервер для получения внешнего IP.

Существует два сервера, которые жестко прошиты в бумажнике любой криптовалюты:

- http://checkip.dyndns.org

- http://www.showmyip.com

Можете сами убедиться, заглянув в исходный код 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

Блин, неужели в битке до сих пор этот каменный век?
 

Может, закоммитишь это в основную ветку бита? :)

Link to comment

Блин, неужели в битке до сих пор этот каменный век?

 

Может, закоммитишь это в основную ветку бита? :)

 

Тут? или на биткоинтоклке?

Link to comment

Вообще-то под именем checkip.dyndns.org прячется 4 ип-адреса, то бишь 4 сервера..

>nslookup  checkip.dyndns.org

 

Addresses:  91.198.22.70
          216.146.38.70
          216.146.39.70
          216.146.43.70

Link to comment

Вообще-то под именем checkip.dyndns.org прячется 4 ип-адреса, то бишь 4 сервера..

>nslookup  checkip.dyndns.org

 

Addresses:  91.198.22.70

          216.146.38.70

          216.146.39.70

          216.146.43.70

Да, прячутся 4 сервера. Но:

1. Они все принадлежат одной организации. То есть - и логи организация все собрать может, и ежели решит этот сервис выключить - то выключит все четыре сразу. Так что в данном случае учетверение балансирует нагрузку и технические сбои, не уменьшая административных рисков.

2. Из этих четырёх - три расположены в одной подсети. Так что независимость от сетевых сбоев реально обеспечивается двумя сетевыми путями. Что как-то бледно смотрится  по сравнению с 47 stun-адресами, некоторые из которых, раз уж о том зашла речь, также имеют по 4 сервера на имя, например stun.telbo.com

3. STUN - стандартен. И этим всё сказано. Хозяева STUN-серверов гарантировано не будут менять формат вывода. А что завтра захотят сделать хозяева dyndns.org - мы не знаем.

 

Link to comment

На гитхабе.

 

Ну, у них своя голова. Мы закинули топик в bitcointalk в технический раздел, так он мигом улетел в раздел Альткоинов. Я так понял - им это не особо надо.

Link to comment

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...