# Мотивация На сегодняшний день Система Доменных Имён (DNS) является скорее единственной областью, которая не развивается с древних, по меркам Интернета, времён. Мы защитили трафик HTTP с помощью SSL/TLS, изобрели HTTP/2, скоро уже будет внедряться HTTP3 на основе UDP/QUIC, но DNS остаётся таким же, каким был 20 лет назад. Да, вы скажете, что появился и уже состарился DNSCrypt, уступив место таким протоколам как DNS-over-HTTPS, DNS-over-TLS, и даже DNS-over-QUIC. Но это ведь только протоколы доступа к рекурсивным серверам DNS, а не изменение _самой системы_! А в чём проблема текущей системы доменов, спросите вы? Проблем довольно много, вот некоторые из них. 1. Доменная система в данное время централизована. Каждая доменная зона принадлежит какой-то корпорации, либо государственному комитету по доменам. И управление этими зонами иногда превращается в нечто странное, как недавно было с доменной зоной `.org`. Ваш домен может быть экспроприирован, удалён, либо заблокирован по любой странной причине. 2. Доменная система коммерциализирована. Да, за домены надо платить. Но проблема даже не в цене, хотя иногда она слишком завышена, но в том, что вы иногда даже не знаете сколько посредников участвуют в регистрации домена, и как формируется цена. Часто регистрация домена похожа на подсаживание на иглу - первая доза почти бесплатно, а через год выкатывают полную цену! То есть можно зарегистрировать домен на первый год за 1 доллар, а за продление потребуют 40! 3. Ваш домен не конфиденциален. Да, у многих доменных зон существуют регулярно обновляемые списки недавно зарегистрированных доменов. Удивлены? Да, многие спамеры о них знают, и буквально через пару часов на адреса вроде `webmaster@example.tld` и `admin@example.tld` начинают пытаться слать рекламные письма. 4. Кроме того, текущая система доменов не позволяет достаточно анонимно пользоваться анонимными (и не очень) сетями, вроде i2p, Tor и Yggdrasil. 5. Но самое главное, это безопасность. Да, любой клиент может использовать зашифрованный канал до рекурсивного сервера, которому он в данный момент доверяет, но ведь дальше трафик DNS совершенно не защищён. Самая распространённая система защиты ответов DNS-сервера от подделки это DNSSEC, но и она не лишена [большого числа недостатков](https://ru.wikipedia.org/wiki/DNSSEC#Проблемы_внедрения_и_недостатки), вроде централизованности, частичной незащищённости, увеличения трафика и накладных расходов. Именно поэтому она внедряется очень медленно, только крупными компаниями. Если я вас убедил, или хотя бы заинтересовал, читайте дальше. # Требования к новой системе * Использование системы должно быть быстрым, анонимным и общедоступным. * Создание и владение доменом должно быть анонимным. * Система не должна иметь централизованного управления. * Цензура информации в системе, то есть удаление или стороннее изменение, должны быть невозможны. * Искажение или исчезновение данных на некоторых серверах не должно влиять на консистентность данных на других узлах и на функционирование всей системы. * Старые, необновляемые и неиспользуемые домены должны освобождаться. * Система должна быть защищена от сквоттеров. # Решение ALFIS ALFIS это ALternative Free Identity System. Альтернативная бесплатная система идентификаторов. Кроме доменов в будущем планируется добавить хранение сертификатов TLS, и каких-нибудь других ключей. Например, для PGP. Данная система построена на базе технологии Blockchain, то есть системы блоков, связанных друг с другом криптографически. Никто не может подменить какой-то старый блок, не изменив все блоки после него. ## Как работает этот блокчейн? Чтобы внести какой-то блок в цепочку (или в сеть) нужно проделать некоторую работу, это называется PoW, или доказательством проделанной работы. В упрощённом виде это выглядит как перебор чисел и последовательное хэширование блока, пока хэш от блока не будет удовлетворять определённым условиям, прописанным в коде ПО. То есть, "регистрация домена" это выполнение работы и рассылка полученного блока другим узлам сети. Чтобы добиться одинакового состояния цепи на всех узлах, то есть консистентности данных, используется специальный алгоритм консенсуса. ### Консенсус сети Самое главное в консенсусе это однозначность определения того, какой блок из двух претендентов выбрать. То есть, если в сеть одновременно вышли несколько блоков с одинаковым индексом (высотой цепи), то когда они оба дойдут до любого узла, этот узел сможет однозначно выбрать тот, который "лучше" по критериям, прописанным в ПО. Таким образом, у большинства узлов (если они не модифицированы и не злонамеренны) будет самая длинная цепочка блоков. Важные критерии отбора блоков: * Криптографическая консистентность и консистентность данных. Например, не допускаются блоки с временем/датой из далёкого будущего (дальше 1 минуты). * Наличие права на изменение существующих идентификаторов (доменов), либо на его создание, если его ещё нет. Остальное в следующем разделе. ### Защита от сквоттеров и злоумышленников В текущей системе доменных имён единственной защитой от регистрации огромного количества доменов являются деньги. Если бы за домены не приходилось платить, то мы быстро пришли бы к отсутствию свободных доменов в любой зоне, и пришлось бы их выкупать у кибер-сквоттеров. А так как эта система Free, что следует из названия, то надо заранее предпринимать меры противодействия, и закладывать их в сам механизм функционирования. 1. Для доступа к системе нужна регистрация. Нет, не ввод e-mail или номера телефона на сайте админа, а майнинг пары ключей `ed25519` для подписи своих блоков. Но ведь генерация пары ключей эллиптических кривых плёвое дело, скажете вы! Да, это так. Но у нас требуется такая пара ключей, чтобы хэш публичного ключа содержал определённое количество нулевых бит в самом начале. Да, как в блоках Биткоина. Если конкретно, то 23 нулевых бита, а алгоритм хэширования Blakeout (о нём дальше). 2. Каждая пара ключей может добавлять один домен в земные сутки, чаще сеть не примет. Именно для этого и был введён майнинг ключей, так как если бороться со сквоттерами с помощью усложнения майнинга самих доменов, то сеть потеряет своё удобство, так как майнинга доменов надо будет ждать целую вечность. А так получается, что легитимный пользователь, единожды намайнивший ключи, довольно просто сможет создавать нужные ему домены. С интервалом в сутки. 3. Начиная с 35-го блока включается режим подписей блоков. Каждый блок, содержащий транзакцию, то есть создающий или меняющий какой-нибудь домен, должен быть подписан группой узлов, обладающих блоками перед текущим блоком. Выбираются 7 публичных ключей из блоков блокчейна, владельцы которых должны подписать блок. Вычисление происходит исходя из последних 8 байт подписи подписываемого блока. Блок должен быть подписан минимум четырьмя валидаторами. То есть, после 25-го блока каждый "полный" блок подписывается 4 пустыми блоками из 7 возможных. ## Дополнительные возможности ALFIS содержит несколько особенностей, которых нет в обычном DNS. * Неограниченное количество доменных зон. Да, поддерживаемые зоны майнятся так же, как и домены, только с повышенной сложностью. И эти зоны становятся доступны каждому в сети. Но доменные зоны из списка IANA, OpenNIC, и других альтернативных систем, недоступны для добавления. Так что опасаться, что кто-то намайнит `.com` не следует. * У доменов есть поле `contacts`, которое позволит вам вписать свои контакты, ссылки на сайт или что-то подобное. Это как WHOIS, только по желанию. * Есть возможность указать нескольких владельцев домена для совместного управления. * Конечно же, есть передача домена другому владельцу. * Приватность доменов. Да, домены хранятся в виде двойного Sha256 хэша, и если вы не покажете ваш домен миру, то о нём никто не узнает (если забыть о брутфорсе).