Открытая сеть. Открытая сеть по материалам работы дра Николая Дурова 26 июля 2021
Скачать 0.79 Mb.
|
, но и его прообраз, т. Е. TL-сериализованную строку (с одним из нескольких предыдущих TL-конструкторов в начале), содержащую описание ключа. Это описание ключа позже сохраняется узлом вместе с ключом и значением. 87 3.2. TON DHT: Kademlia-подобная распределенная хэш-таблица Описание ключа описывает тип сохраняемого объекта, его владельца и правила обновления в случае будущих обновлений. Владелец обычно идентифицируется по открытому ключу, включенному в описание ключа. Если он включен, обычно принимаются только обновления, подписанные соответствующим закрытым ключом . Тип сохраненного объекта обычно представляет собой просто байтовую строку. Однако в некоторых случаях он может быть более сложным, например, описание входного туннеля (см. 3.1.6) или набор адресов узлов. Правила обновления также могут быть разными. В некоторых случаях они просто позволяют заменить старое значение новым значением при условии, что новое значение подписано владельцем (подпись должна храниться как часть значения, чтобы быть проверенной позже любыми другими узлами после получения значения этого ключа). В других случаях старое значение каким-то образом влияет на новое значение. Например, он может содержать порядковый номер, и старое значение перезаписывается только в том случае, если новый порядковый номер больше (для предотвращения повторных атак). 3.2.10. Распределенные торрент-трекеры и сетевые группы по интересам в TON DHT. Еще один интересный случай, когда значение содержит список узлов, возможно, с их IP-адресами и портами, или просто с их абстрактными адресами, и правило обновления состоит в том, чтобы включить запрашивающего в этот список, если он может подтвердить свою личность. Этот механизм может быть использован для создания распределенного торрент- трекера , где все узлы, заинтересованные в определенном торренте (т. Е. Определенном файле), могут найти другие узлы, которые заинтересованы в том же торренте или уже имеют копию. TON Storage (см. 4.1.7) использует эту технологию для поиска узлов, имеющих копию требуемого файла (например, моментальный снимок состояния цепочки шардов или старого блока). Однако его более важным применением является создание многоадресных подсетей и групп интересов сети (см. 3.3). Идея заключается в том, что только некоторые узлы заинтересованы в обновлениях определенной цепочки шардов. Если количество цепочек осколков становится очень большим, поиск даже одного узла, заинтересованного в одном и том же осколке, может усложниться. Этот распределенный торрент - трекер предоставляет удобный способ найти некоторые из этих узлов. Другим вариантом было бы запросить их у валидатора, но это не будет масштабируемым подходом, и валидаторы могут не отвечать на такие запросы, поступающие от произвольных неизвестных узлов. 3.2.11. Резервные клавиши. Большинство типов ключей, описанных до сих пор, имеют дополнительное 32-битное целочисленное поле в своем описании TL, обычно равное нулю. Однако, если ключ, полученный путем хеширования этого описания, не может быть извлечен или обновлен в DHT TON, значение в этом поле увеличивается, и 88 3.2. TON DHT: Kademlia-подобная распределенная хэш-таблица делается новая попытка. Таким образом, нельзя захватить и подвергнуть цензуре ключ (т. Е. Выполнить атаку удержания ключа), создав множество абстрактных адресов, лежащих рядом с атакуемым ключом и контролирующих соответствующие узлы DHT. 3.2.12. Поиск услуг. Некоторые службы, расположенные в сети TON и доступные через (протоколы более высокого уровня, построенные на основе) TON ADNL ,описанные в 3.1, могут захотеть опубликовать свои абстрактные адреса где-нибудь, чтобы их клиенты знали, где их найти. Однако публикация абстрактного адреса службы в блокчейне TON может быть не лучшим подходом, поскольку абстрактный адрес может потребоваться менять довольно часто, а также потому, что имеет смысл предоставить несколько адресов для обеспечения надежности или балансировки нагрузки. Альтернативой является публикация открытого ключа в блокчейне TON и использование специального ключа DHT, указывающего этот открытый ключ в качестве его владельца в строке описания TL (см. 2.2.5), чтобы опубликовать обновленный список абстрактных адресов службы. Это один из подходов, используемых сервисами TON. 3.2.13. Поиск владельцев блокчейн-аккаунтов TON. В большинстве случаев владельцы учетных записей TON blockchain не хотели бы быть связанными с абстрактными сетевыми адресами,и особенно IP-адресами, потому что это может нарушить их конфиденциальность. Однако в некоторых случаях владелец учетной записи TON blockchain может захотеть опубликовать один или несколько абстрактных адресов, по которым с ней можно связаться. Типичным случаем является узел в сети TON Payments lightning network (cf. 5.2), платформе для мгновенных переводов криптовалют. Публичный платежный узел TON может захотеть не только установить платежные каналы с другими одноранговыми узлами, но и опубликовать абстрактный сетевой адрес, который можно было бы использовать для связи с ним в более позднее время для передачи платежей по уже установленным каналам. Одним из вариантов было бы включить абстрактный сетевой адрес в смарт -контракт, создающий платежный канал. Более гибкий вариант-включить открытый ключ в смарт-контракт, а затем использовать DHT, как описано в 3.2.12. Наиболее естественным способом было бы использовать тот же закрытый ключ, который контролирует учетную запись в блокчейне TON, чтобы подписывать и публиковать обновления в DHT TON об абстрактных адресах, связанных с этой учетной записью. Это делается почти так же, как описано в 3.2.12; однако используемый ключ DHT потребует специального описания ключа, содержащего только 89 3.3. Оверлейные сети и многоадресные сообщения сам account_id, равный sha256 описания учетной записи , который содержит открытый ключ учетной записи. Подпись, включенная в значение этого ключа DHT, также будет содержать описание учетной записи. Таким образом, становится доступным механизм поиска абстрактных сетевых адресов некоторых владельцев блокчейн - аккаунтов TON. 3.2.14. Поиск абстрактных адресов. Обратите внимание, что TON DHT, будучи реализованным через TON ADNL, сам используется TON ADNL для нескольких целей. Самый важный из них-найти узел или его контактные данные, начиная с его 256-битного абстрактного адреса. Это необходимо, потому что TON ADNL должен иметь возможность отправлять дейтаграммы на произвольные 256-битные абстрактные адреса, даже если дополнительная информация не предоставляется. С этой целью 256-битный абстрактный адрес просто просматривается как ключ в DHT. Либо узел с этим адресом (т. е. использующий этот адрес в качестве открытого полупостоянного DHT-адреса) найден, и в этом случае его IP-адрес и порт могут быть изучены; либо описание входного туннеля может быть получено как значение рассматриваемого ключа, подписанного правильным закрытым ключом, в этом случае это описание туннеля будет использоваться для отправки дейтаграмм ADNL предполагаемому получателю. Обратите внимание, что для того, чтобы сделать абстрактный адрес общедоступным (доступным с любых узлов сети), его владелец должен либо использовать его в качестве полупостоянного DHT-адреса, либо опубликовать (в ключе DHT, равном рассматриваемому абстрактному адресу ) описание входного туннеля с другим его общедоступным абстрактным адресом(например, полупостоянный адрес) в качестве точки входа в туннель. Другим вариантом было бы просто опубликовать свой IP-адрес и UDP -порт. 3.3 Оверлейные сети и многоадресные сообщения В системе с несколькими блокчейнами, такой как блокчейн TON, даже полные узлы обычно будут заинтересованы в получении обновлений (т. Е. Новых блоков) только о некоторых шардчейнах. Для этого внутри сети TON должна быть построена специальная оверлейная (sub) сеть поверх протокола ADNL, описанного в 3.1, по одному для каждой цепочки шардов. Поэтому возникает необходимость построения произвольных оверлейных подсетей, открытых для любых узлов, желающих участвовать. В этих оверлейных сетях будут работать специальные протоколы сплетен, построенные на ADNL. В частности, эти сплетни 90 3.3. Оверлейные сети и многоадресные сообщения протоколы могут использоваться для распространения (широковещания) произвольных данных внутри такой подсети. 3.3.1. Оверлейные сети. Оверлейная (суб)сеть-это просто (виртуальная) сеть, реализованная внутри некоторой более крупной сети. Обычно только некоторые узлы более крупной сети участвуют в подсети наложения, и только некоторые связи между этими узлами, физические или виртуальные, являются частью подсети наложения. Таким образом, если охватывающая сеть представлена в виде графа (возможно, полного графа в случае сети дейтаграмм, такой как ADNL, где любой узел может легко взаимодействовать с любым другим), подсеть наложения является подграфом этого графа. В большинстве случаев оверлейная сеть реализуется с использованием некоторого протокола , построенного на сетевом протоколе более крупной сети. Он может использовать те же адреса, что и большая сеть, или использовать пользовательские адреса. 3.3.2. Оверлейные сети в TON. Оверлейные сети в TON построены на протоколе ADNL, описанном в 3.1; они также используют 256-битные абстрактные адреса ADNL в качестве адресов в оверлейных сетях. Каждый узел обычно выбирает один из своих абстрактных адресов для удвоения в качестве адреса в оверлейной сети. В отличие от ADNL, оверлейные сети TON обычно не поддерживают отправку дейтаграмм произвольным другим узлам. Вместо этого некоторые полупостоянные связи устанавливаются между некоторыми узлами (называемыми соседями по отношению к рассматриваемой оверлейной сети), и сообщения обычно пересылаются по этим ссылкам (т. Е. От узла к одному из его соседей). Таким образом, сеть наложения TON представляет собой (обычно не полный) подграф внутри (полного) графика сети ADNL. Ссылки на соседей в сетях наложения TON могут быть реализованы с помощью выделенные одноранговые каналы ADNL (см. 3.1.5). Каждый узел оверлейной сети поддерживает список соседей ( относительно оверлейной сети), содержащий их абстрактные адреса (которые они используют для идентификации в оверлейной сети) и некоторые данные канала (например, канал ADNL, используемый для связи с ними). 3.3.3. Частные и публичные оверлейные сети. Некоторые оверлейные сети являются общедоступными, что означает, что любой узел может присоединиться к ним по желанию. Другие являются частными, что означает,что только определенные узлы могут быть допущены (например, те, которые могут доказать 91 3.3. Оверлейные сети и многоадресные сообщения их личности как валидаторов.) Некоторые частные оверлейные сети могут быть даже неизвестны широкой публике . Информация о таких оверлейных сетях становится доступной только определенным доверенным узлам; например, она может быть зашифрована открытым ключом, и только узлы, имеющие копию соответствующего закрытого ключа, смогут расшифровать эту информацию. 3.3.4. Централизованно управляемые оверлейные сети. Некоторые оверлейные сети управляются централизованно, одним или несколькими узлами или владельцем какого -либо широко известного открытого ключа. Другие децентрализованы, то есть за них не отвечают специальные узлы. 3.3.5. Присоединение к оверлейной сети. Когда узел хочет присоединиться к оверлейной сети, он сначала должен узнать свой 256-битный идентификатор сети, обычно равный sha256 описания оверлейной сети TL-сериализованный объект (см. 2.2.5), который может содержать, например, центральный орган оверлейной сети (т. Е.его открытый ключ и, возможно, его абстрактный адрес, 33 ) строка с именем оверлейной сети, идентификатор осколка блокчейна TON, если это оверлейная сеть, связанная с этим осколком, и так далее. Иногда можно восстановить описание наложенной сети , начиная с идентификатора сети, просто посмотрев его в TON DHT. В других случаях (например, для частных оверлейных сетей) необходимо получить описание сети вместе с идентификатором сети. 3.3.6. Определение местоположения одного члена оверлейной сети. После того, как узел узнает идентификатор сети и описание сети оверлейной сети, к которой он хочет присоединиться, он должен найти хотя бы один узел, принадлежащий этой сети. Это также необходимо для узлов,которые не хотят присоединяться к оверлейной сети, но хотят просто общаться с ней; например, может существовать оверлейная сеть, предназначенная для сбора и распространения кандидатов на транзакции для определенной цепочки шардов, и клиент может захотеть подключиться к любому узлу этой сети, чтобыпредложите сделку. Метод, используемый для определения местоположения членов оверлейной сети, определен в описании этой сети. Иногда (особенно для частных сетей) нужно уже знать узел-член, чтобы иметь возможность присоединиться. В других случаях абстрактные адреса некоторых узлов содержатся в описании сети. Более гибкий подход заключается в указании в описании сети только 33 В качестве альтернативы абстрактный адрес может храниться в DHT, как описано в 3.2.12. 92 3.3. Оверлейные сети и многоадресные сообщения центральный орган, ответственный за сеть, а затем абстрактные адреса будут доступны через значения определенных ключей DHT, подписанных этим центральным органом. Наконец, действительно децентрализованные публичные оверлейные сети могут использовать механизм распределенного торрент-трекера, описанный в 3.2.10, также реализованный с помощью TON DHT. 3.3.7. Поиск большего количества членов оверлейной сети. Создание ссылок. Как только один узел оверлейной сети найден, этому узлу может быть отправлен специальный запрос, запрашивающий список других членов, например соседей запрашиваемого узла, или их случайный выбор. Это позволяет присоединяющемуся члену заполнить свой список смежности или соседей относительно оверлейной сети, выбрав некоторые недавно изученные сетевые узлы и установив ссылки на них ( т. е. выделенные каналы ADNL точка-точка, как описано в 3.3.2). После этого всем соседям рассылаются специальные сообщения о том, что новый участник готов к работе в оверлейной сети. Соседи включают свои ссылки на нового участника в свои списки соседей. 3.3.8. Ведение списка соседей. Узел оверлейной сети должен время от времени обновлять список своих соседей. Некоторые соседи или, по крайней мере, ссылки (каналы) на них могут перестать отвечать; в этом случае эти ссылки должны быть помечены как приостановленные, должны быть предприняты некоторые попытки повторного подключения к таким соседям , и, если эти попытки не увенчались успехом, ссылки должны быть уничтожены. С другой стороны, каждый узел иногда запрашивает у случайно выбранного соседа свой список соседей (или его некоторый случайный выбор) и использует его для частичного обновления своего собственного списка соседей, добавляя в него некоторые вновь обнаруженные узлы и удаляя некоторые из старых, либо случайным образом, либо в зависимости отих время отклика и статистика потерь дейтаграмм. 3.3.9. Наложенная сеть представляет собой случайный подграф. Таким образом, оверлейная сеть становится случайным подграфом внутри сети ADNL. Если степень каждой вершины равна по крайней мере трем (т. е. Если каждый узел связан по крайней мере с тремя соседями), то этот случайный граф, как известно, связан с вероятностью, почти равной единице. Точнее, вероятность случайного графа с n несвязанными вершинами экспоненциально мала, и этой вероятностью можно полностью пренебречь, если, скажем, n ≥ 20. (Конечно, это так не применяется в случае раздела глобальной сети, когда узлы на разных сторонах раздела не имеют возможности узнать друг о друге.) На 93 3.3. Оверлейные сети и многоадресные сообщения с другой стороны, если n меньше 20, было бы достаточно, чтобы каждая вершина имела, скажем, не менее десяти соседей. 3.3.10. Оверлейные сети TON оптимизированы для снижения задержки. Сети наложения TON оптимизируют случайный сетевой граф, сгенерированный предыдущим методом следующим образом. Каждый узел пытается сохранить как минимум трех соседей с минимальным временем обхода, изменяя этот список быстрых соседей очень редко. В то же время он также имеет по крайней мере три других медленных соседа, которые выбираются совершенно случайным образом, так что наложенный сетевой граф всегда будет содержать случайный подграф. Это необходимо для поддержания связи и предотвратить разделение оверлейной сети на несколько несвязанных региональных подсетей. Также выбираются и сохраняются по меньшей мере три промежуточных соседа, которые имеют промежуточное время обхода, ограниченное некоторой константой (фактически функцией времени обхода быстрого и медленного соседей) Таким образом, график оверлейной сети по-прежнему сохраняет достаточную случайность для подключения, но оптимизирован для более низкой задержки и более высокой пропускной способности. 3.3.11. Протоколы сплетен в оверлейной сети. Оверлейная сеть часто используется для запуска одного из так называемых протоколов сплетен, которые достигают некоторой глобальной цели, позволяя каждому узлу взаимодействовать только со своими соседями. Например, существуют протоколы сплетен для построения приблизительного списка всех членов (не слишком большой) оверлейной сети или для вычисления оценки числа членов (сколь угодно большой) оверлейной сети, используя только ограниченный объем памяти на каждом узле (см. [15,4.4.3] или [1] для получения подробной информации). 3.3.12. Оверлейная сеть как широковещательный домен. Наиболее важным протоколом сплетен,работающим в оверлейной сети, является широковещательный протокол, предназначенный для распространения широковещательных сообщений, генерируемых любым узлом сети или, возможно, одним из назначенных узлов-отправителей, на все остальные узлы. На самом деле существует несколько широковещательных протоколов, оптимизированных для разных случаев использования. Самый простой из них получает новые широковещательные сообщения и передает их всем соседям, которые еще не отправили копию этого сообщения сами. 3.3.13. Более сложные широковещательные протоколы. Для некоторых приложений могут потребоваться более сложные широковещательные протоколы. Например, для широковещательных сообщений значительного размера имеет смысл отправлять соседям не само вновь полученное сообщение, а его хэш (или набор хэшей |