# Мотивация
На сегодняшний день Система Доменных Имён (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 хэша, и если вы не покажете ваш домен миру, то о нём никто не узнает (если забыть о брутфорсе).
