ALFIS DNS: перемещение точки доверия

Система доменных имён разрабатывалась как замена hosts файлам, и в то время, в ограниченной среде университетских сетей никто не думал о безопасности. Всё основывалось на доверии. Ещё буквально лет 8-10 назад никто не думал о том, что трафик между сервером DNS и клиентом можно записывать для продажи, либо заменять для достижения своих целей. Но уже в то время существовали трояны, добавляющие записи в локальный файл hosts, чтобы перенаправлять пользователей на подконтрольные серверы. В последние несколько лет появилось несколько новых протоколов, которые помогают устранить перехват или подмену трафика DNS. Но это только смещение точки доверия от одной группы провайдеров, к другой.

Как работает DNS?

Важно понимать, что записи, получаемые от 8.8.8.8 или 1.1.1.1 не берутся из ниоткуда. Это обычные рекурсивные серверы, которые получают данные о гипотетическом example.com примерно по такой схеме:

Понятное дело, что тут ещё есть кэши на разных уровнях, но нас интересует цепочка доверия. Мы доверяем условному администратору DNS-сервера, к которому мы обращаемся - это может быть сервер провайдера, или пресловутый 8.8.8.8, или даже сервер провайдера, скрытый за 8.8.8.8, так как провайдер перенаправляет все такие запросы на свои серверы. Потом идут запросы к корневым и серверам зоны, а уж потом к самим серверам домена.

Не много ли узлов, которым мы должны доверять?

В 2010-ом году была введена в эксплуатацию система защиты от подмены DNS-записей DNSSEC. В принципе, она решала некоторые проблемы текущей реализации, но её внедрение сильно затянулось из-за существенных недостатков. В итоге, не так много доменов защищено этой системой, и не все серверы DNS поддерживают работу по этому протоколу. А кроме этого, доверие сместилось в сторону администраторов зон, которые подписывают записи конкретных доменов.

Кроме угроз подмены трафика есть угроза разделегирования доменов. Это может быть в результате ошибок, политических мотивов и т.п. И есть обычный DNS-спуфинг, который тоже может заставить ваш браузер или почтовый клиент соединяться с ненастоящим сервером.

Есть ли решения таких проблем?

Распределённая, децентрализованная база данных доменов, не подверженная цензуре или взлому. Такое вообще возможно? Трилемма Треугольника Зуко долгое время утверждала, что из трёх свойств человеко-читаемость, безопасность и децентрализация можно выбрать только два. Но это было до того, как появилась технология блокчейна.

Блокчейн позволяет децентрализованно и безопасно сохранять любую информацию в распределённой базе. И человеко-читаемые домены, которые нам нужны, входят в понятие любой информации.

Например, есть EmerDNS - довольно древний блокчейн, который вроде самым первым реализовал поддержку доменных имён в своём блокчейне. А ещё есть довольно свежий проект Unstopable Domains. Но если мы говорим о доверии, то не стоит забывать, что DNS это не только некая база, но ещё и удобный доступ к ней. В идеале, чем ближе она к клиенту, тем больше доверия при работе с ней. У Эмера надо качать несколько гигабайт блокчейна, а у второго решения нужно ставить некие расширения в браузеры.

И тут появляется ALFIS

В своей прошлой статье я вскользь упомянул свой проект независимой доменной системы на основе блокчейна, но теперь пришло время рассказать о ней подробнее.

ALFIS - Alternative Free Identity System.

Задачи, которые я решал, сводились примерно к такому списку:

Проект разработан на языке системного программирования Rust, который позволяет быть уверенным в правильности работы с памятью ещё на этапе компиляции. Кроме того, он позволяет компилировать код в компактные запускаемые файлы под кучу разных платформ.

В процессе разработки пришлось пару раз изменить концепцию интерфейса, и я очень рад, что в итоге выбрал библиотеку web-view, которая использует системный браузерный движок, и позволяет получить очень компактные программы.

Итак, что из себя представляет сам ALFIS?

Как это всё работает?

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

Самая важная проблема в таких системах это киберсквоттинг - регистрация всех красивых доменов, чтобы впоследствии их перепродать, или просто подгадить. Эту проблему я решил с помощью PoW - для регистрации домена надо намайнить блок, удовлетворяющий определённой сложности. Майнит тот, кто хочет получить домен. Чтобы изменить записи для домена надо намайнить похожий блок, со сложностью меньше на один бит.

Данная стратегия позволяет удерживать блокчейн от бесконечного роста. Но это не единственное, что помогает такой задаче. Для того, чтобы блокчейн не рос постоянно, был придуман механизм подписей - пустых блоков, без транзакции, от участников сети, выбранных специальным образом. Исходя из подписи нового полного блока, по специальному простому алгоритму, выбирается 7 ключей из всего блокчейна. В этом выборе участвуют только те ключи, блоков которых в блокчейне больше либо равно текущая высота блокчейна / 100, таким образом, только постоянные пользователи могут подписывать блоки. Своеобразный PoS, если хотите. И уже из этих семи требуется 4 подписывающих блока. Таким образом формируется одна цепочка, без форков. Никакие ноды не могут откатить свой блокчейн дальше, чем на 4 блока назад, так что блокчейн не должен постоянно расти, чтобы быть впереди какого-нибудь злоумышленника. Текущий блокчейн запущен в мае 2021 года, и функционирует без проблем.

В процессе выбора алгоритма для PoW я перелопатил несколько вайтпейперов описывающих алгоритмы, устойчивые к майнингу на ASIC и GPU. В итоге, исходя из представленных решений, я скомпоновал свой алгоритм и назвал его Blakeout. Он требует довольно много RAM для подсчёта хэшей.

Какие домены поддерживаются?

Для начала скажу, что в ALFIS поддерживается 10 собственных зон:

.anon, .btn, .conf, .index, .merch, .mirror, .mob, .screen, .srv, .ygg

А зоны .anon и .ygg обладают суперспособностью - они могут содержать только записи AAAA из диапазона 200::/7, то есть созданы только для использования в сети Yggdrasil. И любой пользователь, заходя на такой сайт, может быть уверенным, что он туда попадёт именно через Yggdrasil.

Как ими пользоваться?

Информация о том, как устанавливать ALFIS на разные системы есть на GitHub. Отдельно хотел бы отметить, что в программе есть справка: ./alfis -h или alfis.exe -h. Да, многие пользователи не догадываются об этом, и спрашивают как сделать то, или иное, что там показано.

Отдельный момент: хоть у ALFIS и сделан UI на основе веб-технологий, но это не веб-UI в обычном смысле, нет возможности зайти браузером и общаться по HTTP. Так что если вам надо запустить UI, чтобы намайнить домен, или что-то проверить, то запускаете полноценную версию. А если вам нужен только сервер DNS, который будет синхронизироваться по P2P, вы можете запустить ту же полноценную версию без UI - alfis -n, либо скачать/собрать версию совсем без UI, уменьшив и без того небольшой бинарник.

На данный момент в Rust есть сложности с разработкой программ, включающих в себя разные функции вроде сервиса Windows, Tray Icon, плюс UI. Так как каждый из крейтов реализует свой цикл обработки событий. Поэтому ALFIS сейчас не может быть сервисом, или прятаться в системный лоток в виде иконки. Надеюсь, когда-нибудь это станет возможным. Либо придётся сделать разные сборки с поддержкой разных функций.

Так что там с доверием?

Я начал статью с того, что мы перемещаем точки доверия туда-сюда, но всё время они контролируются какими-то не всегда открытыми компаниями или организациями. И часто даже не одной из них.

И решением этой проблемы становится сервис, который запущен в домашней сети, или хотя бы на своём VPS. А криптографические алгоритмы помогают системе работать без внешнего надзора или разрешения. А если решение не требует огромных ресурсов, то это вдвойне приятно.

Заключение

Я уверен, что не всё получилось рассказать в рамках этой статьи, она и так стала какой-то большой. Задавайте вопросы в комментариях, постараюсь ответить.

@Revertis
22.12.2021 18:58 UTC
Первоисточник

Комментарии

@ufm
22.12.2021 15:24 UTC
+1
У меня традиционный вопрос — когда DNS64? :)
@Revertis
22.12.2021 16:28 UTC
0

Кусок запилен в Альфис в отдельной ветке. Но так красиво, как я задумывал, не получается. Там надо добавить куски кода туда, где они не нужны при обычном использовании :-/
Короче, получается переусложнение кода, которое мне не нравится. Если вдруг придумаю как сделать лучше, то запилю.

@mayorovp
22.12.2021 19:32 UTC
+1
На данный момент в Rust есть сложности с разработкой программ, включающих в себя разные функции вроде сервиса Windows, Tray Icon, плюс UI.Так как каждый из крейтов реализует свой цикл обработки событий.

Какой такой цикл обработки событий есть в крейте сервиса Windows и что он там вообще делает? Случайно речь не о том, который спрятан в недрах WINAPI и вообще не предполагает расширений?


Надо не ждать у моря погоды, а вспомнить что в Rust есть "многопоточность без страха". И не стесняться заводить разные потоки для разных целей.

@Revertis
22.12.2021 19:35 UTC
0

Вот такой цикл. И каждая либа пытается создать свой.

22.12.2021 21:45 UTC
0

Правильно, это цикл работы UI. Какое дело до этого цикла должно быть крейту винслужбы или сетевому стеку?

22.12.2021 22:01 UTC
-1

Винслужба делает отдельный обработчик ивентов. Клики по иконке в трее или в менюшке над ней тоже являются событиями. И нужен один общий обработчик в приложении, чтобы это всё обрабатывать. Два обработчика создать нельзя. По крайней мере, с текущими крейтами.

23.12.2021 08:30 UTC
0

А что мешает создать несколько обработчиков?

23.12.2021 10:27 UTC
-2

ОС мешает.

23.12.2021 12:14 UTC
0

Каким образом?

@dvrpd
22.12.2021 19:39 UTC
0
Например, есть EmerDNS — довольно древний блокчейн, который вроде самым первым реализовал поддержку доменных имён в своём блокчейне
Namecoin же ещё более древний.
@Revertis
22.12.2021 19:44 UTC
0

Да, я знаю. Всё время забываю его название. Совершенно не важно в рамках статьи.

@grumbler66rus
30.01.2024 18:43 UTC
0

Namecoin - первый блокчейн, способный хранить записи DNS, но не всё их множество. Emercoin - первый блокчейн с полноценной поддержкой DNS, в том числе в нём есть поддержка вложенных зон (домены 3 уровня). Например, namecoin не предоставляет возможности сделать записи SRV.

30.01.2024 19:39 UTC
0

Все другие блокчейны на порядки больше и растут быстро.

@vlad4kr7
23.12.2021 00:35 UTC
+2

Можно кратко пояснить про защиту от кибер сквотеров?

Тоесть про угон домена вроде понятно - PoW / PoC, ключи и подписи защитят от изменений, а как принудительно изменить?

@Revertis
23.12.2021 10:27 UTC
-1

От киберсквоттеров как раз защищает PoW. Надо тратить энергию и время на майнинг доменов.

А про "принудительно изменить" я ничего не понял.

23.12.2021 12:49 UTC
-2

Например я создам домен revertis.info - как вы сможете его у меня забрать?

23.12.2021 12:53 UTC
+1

Во-первых, там нет зоны .info, во-вторых - никак.

23.12.2021 13:23 UTC
0

.conf.index.merch

Извините. Если никак, то жаль.

23.12.2021 13:47 UTC
0

Жаль, что нет уязвимости, через которую можно было бы отжать у другого его домен? Я правильно вас понял?

23.12.2021 13:51 UTC
-1

Не то чтобы совсем-совсем жаль, но без такого механизма киберсквоттеры рано или поздно заберут себе все адекватные домены, а значит Треугольник Зуко вам обмануть опять не получилось.

23.12.2021 14:03 UTC
0

Через год эти домены потребуют перемайнинга. Забыл написать. Так что киберсквоттерам придётся тратить энергию ещё и ещё.

23.12.2021 14:24 UTC
0

Во-о-от, уже интереснее. Теперь держать у себя ненужный домен и правда невыгодно.


Однако, теперь уже Security страдает: забыл/не успел продлить домен и жди год.

23.12.2021 14:27 UTC
0

Не, ну продлить можно и через месяц после того, как домен протух. Если его кто-то другой не перехватил :)

23.12.2021 14:37 UTC
0

Так ведь обязательно перехватят, благо в блокчейне вся информация имеется.

23.12.2021 14:44 UTC
0

Мы не в каменном веке живём, настройте себе уведомление о скором конце домена :)

13.04.2023 22:15 UTC
-2
  1. А заранее нельзя намайнить домен на 3 года к примеру, или на 10 лет?

  2. Можно ли сделать что к примеру 10 доменов на аккаунт - то без майнинга (право иметь 10 доменов всем без майнинга), а 1 домен вообще гарантировать в собственность навечно, а вот уже кто хапает на свою учетку больше 10 доменов к примеру - пусть майнят (более того сделать что чем больше доменов хапает - тем сложнее майнинг) , и еще тогда условие хранить полную ноду у себя обязаны со всеми своими доменами.

14.04.2023 08:55 UTC
0

Ага, только такую учётку надо будет покупать у меня за 100 баксов, норм? :-D

14.04.2023 09:06 UTC
0

Обоснование? Почему надо тогда покупать? Что изменится?
Я же просто предлагаю механизм от хапальщиков - усложнение майнинга в зависимости от жажды хапанья. Вот им и продавай учетку кто больше 10 доменов хапать начинает.

14.04.2023 09:10 UTC
0

Хороший механизм от сквоттеров уже внедрён. Можете больше ничего не предлагать.

14.04.2023 15:14 UTC
0

Так а за что тогда платить? Или просто у Вас поменялось отношение к взиманию платы?

05.01.2024 11:38 UTC
+1

По-моему, это была шутка.