- PVSM.RU - https://www.pvsm.ru -

DIANNA — циферки и домены p2p. Вступление

DIANNA — циферки и домены p2p. Вступление
«Вы никогда не измените порядок вещей, сражаясь с существующей реальностью. Дабы что то изменить, создайте новую модель, которая отправит существующую в историю.» Бакминстер Фуллер, один из девизов P2P Foundation.

В странное время мы с вами живем, господа. Но странное время порождает странные идеи. И это интересно.

Я думаю более подходящее время для презентации проекта DIANNA найти будет сложно. Можно конечно произвести в камментах тонну стройматериала по поводу бана уютненького и вообще «Единого госреестра запрещенных сайтов». Можно выйти на улицы с плакатами. Но это не продуктивно. Ибо nobody gives a… Пардон, но это правда.

А можно последовать совету Бакминстера Фуллера. Засучить рукава и сделать что то настолько глобальное, над чем в этом госреестре будут чесать репу следующие десять лет. Я считаю DIANNA концептом слишком глобальным. По крайней мере для одного поста. По этому под катом длинное и последовательное изложение концепции. Упрощал как мог.

Представляю на суд общественности концепт-дизайн DIANNA: Decetralized Internet Assigned Names and Numbers Authority.

Вступление

Я люблю анонимные сети. Мне нравится их идеи, концепции, летающий вокруг дух либерализма, отсутствия контроля и ощущения дамоклова меча. Но увы, анонимные сети продолжают оставаться уделом гурманов и красноглазиков в следствии сложности использования. Это не есть выбор рядового юзера эникейщика. Для него это слишком сложно. В следствии глобальной цензуры (а тренд на лицо), рядовые юзеры не пойдут в анонимные сети. Либералов и анархистов просто загонят в ограниченное подполье. И это плохо.

Но надо что то делать…

Анонимные сети обладают массой неудобных моментов использования. Эта масса состоит из разных аспектов. Tor имеет свои косяки, I2P свои. Но общий момент, наряду с высокой латентностью, выделяется и является общим для всех: это отсутствие распределенной авторитетной DNS (с читабельными именами).

Например в Tor, доменное имя представлено как некий производный хеш от публичного ключа пункта назначения с постфиксом .onion: eqt5g4fuenphqinx.onion. Это решение является авторитетным. Резолв идет одинаковый в пределах всей сети. Но не читабельным.

В I2P все с точностью до наоборот. Там есть локальный файл а-ля hosts, где вы можете назначить читабельный_домен.i2p на любой хеш назначения. Читабельно, но не авторитетно. У другого юзера в локальной книге может быть назначен другой хеш этому имени. Так же, существуют определенные центральные «регистраторы» доменов i2p. И у каждого своя версия хеша для того или иного домена. И никакого общего согласия. Бардак.

Замес

Я думал как это решить. Авторитетность и читабельность имен в анонимных сетях — два взаимоисключающих параграфа. Думал не только я. Думали многие.

Но однажды в среде криптопанков появился один человек, окутанный тайной, под ником Satoshi Nakamoto и выдал на суд общественности некий документ Bitcoin: Peer-To-Peer Electronic Cash System [1]. В нем он довольно элегантно решил проблему авторитетности читабельной записи в одноранговой пиринговой сети.

Все очень просто. Для решения проблемы авторитетности использовался публичный Timestamp сервер, чтобы все могли видеть, что запись имела место быть во времени. Чтобы эту запись туда поместить, необходимо решить сложную криптографическую задачу — приложить усилие, ограниченный ресурс. А чтобы ее нельзя было изменить, записи обростали хешами SHA256 по самые помидоры и хеши объединялись в непрерывную цепь, где один хеш вытекал из другого.

Этот конструкт назвали Цепью блоков (Block chain [2]). И за несколько лет этот конструкт доказал свою состоятельность в Bitcoin.

Пошла работа. Суровые сишники стали усердно пилить клиент Bitcoin, а философы и интересующиеся начали смаковать изящность концепта и пытались примерить его к другим задачам.

Namecoin

В сообществе начала летать идея создания авторитетной читабельной распределенной сети резолва DNS имен. Идея принимала различные формы, начиная от BitDNS [3] и заканчивая NameCoin [4]. Однако ни одна из них не выдерживала критики общественности.

Тогда лидеры NameCoin поступили просто. Если проект не выдерживает критики, то на эту критику надо закрыть глаза и гнуть свою линию. В то время мозговой костяк сообщества Bitcoin уже начал от души разбавляться праздно интересующимися людьми, совершенно не имеющих способности копаться в кишках проекта и находить вопиющий нарыв.

И народ сказал: «Круто!», «Давайте!». Ну и поехали. Сейчас NameCoin торгуется на биржах. Namecoin покупают за Bicoin, который, в свою очередь, покупают за реальные деньги. Покупают кота в мешке, при этом на кота никто не смотрит, дуется еще один большой пузырь.

А в чем проблема, шеф?

Было время, я подхватил идею NameCoin и написал экспериментальный резолвер I2P [5] на ее основе. Проект требовал развития и пришлось покопаться в кишках. И проблем оказалось много [6]. Если быть кратким, то

  • Цена домена не связана с реальностью. Она имеет форму стремящейся к нолю функции и скоро домены станут бесплатными. А значит, спам, сквоттинг, коллапс и вообще, кто будет платить за инфраструктуру?
  • Когда покупаешь домен, неймкоины за него уничтожаются. Система сама себя ест.
  • Уязвима к атаке 51% [7], несмотря на Merged Mining.
  • В следствии всего вышеописанного, девелоперы вынуждены менять алгоритмы сети время от времени, чтобы как то держаться на плаву. А смена алгоритмов — трудный процесс сплитбрейна цепи, грозящий большими конфликтами в будущем.

Ну и такой мелкий, но неприятный момент — домены в NameCoin технически из себя представляют мусор в цепи.

Короче, это отдельный холивар. И я решил придумать силами общественности что то другое.

Теорема Long-fork

Совершенно очевидно, что чтобы это ни было, мы будем иметь дело с Альтернативной Цепью Блоков [8]. Однако альтернативные цепи страдают одной болезнью. Называют это по разному, но я назвал это Теорема Long-Fork [9]. Формулировка простая: «Выживет только один». Дерзай, Дункан!

Многие форки уже почили от этой напасти. Пусть /dev/null им будет пухом.

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

Bitcoin forever!

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

Disclaimer: Дальше идет технический ад терминов и понятий Bitcoin. Дабы это не было китайской грамотой, рекомендую ознакомиться с базовыми конструктами спецификации Bitcoin: транзакция [10], блок [11], цепь [2], майнинг [12], merged mining [13], proof of work [14], сложность [15].

Альтернативная цепь

Если мы сделаем альтернативную цепь блоков, полностью зависимой от цепи Bitcoin (с помощью Merged Mining [13]), то цепь DIANNA приобретет иммунитет к атаке 51% [7] в той же мере, коим иммунитетом обладает Bitcoin.

Зависимой сделаем как? Да очень просто. Блок [16] DIANNA должен содержать хеш родительского блока Bitcoin. И не простого orphaned блока Bitcoin, как это делается в NameCoin и прочих форках. А блока, который должен быть в «официальной» цепи Bitcoin. И из этого блока по Merged Mining должен расчитываться хеш нашего блока DIANNA.

Домены

В Bitcoin транзакции содержат цифорки (монетки), ассоциированные с публичным ключом ECDSA. Эти монетки у всех на виду, но забрать их может только владелец приватного ключа.

В DIANNA нет монеток. Вообще. Ибо это не финансовая система. Это распределенная авторитетная база данных ключ <=> значение. Вместо монеток здесь доменное имя. Оно так же присваивается определенному публичному ключу. И только владелец приватного ключа в состоянии изменять запись с этим доменным именем.

По этому, в транзакциях [17] DIANNA вместо монеток — домены.

.com, .net., org?

Да, нам надо много доменных неймспейсов. В конце концов, не только ведь домены туда пихать. Можно и айпишники… (sic!) Но это уже сильно про будущее.

Ага, есть неймспейсы [18]! Например, неймспейс для .com доменов, неймспейс для .net доменов и т.п.

При этом цепь блоков уже нелинейна. Это уже дерево блоков [19]. По ветке на неймспейс.

Любой участник волен открыть свой неймспейс и пригласить народ регать в нем записи. Обслуживать этот неймспейс уже будет он и его поклонники. А если неймспейс засахарится, то он канет в историю по таймауту [20] и больше никто про него не вспомнит.

Почем домен и как платить?

А платить будем в биткоинах. DIANNA зависима от Bitcoin, DIANNA имеет доступ к цепи Bitcoin, а значит, может видеть факт оплаты.

Да и знаете, просто, Bitcoin это финансы. А DIANNA это домены. Пусть каждый отвечает за свое. Unix-way.

А почем? А по рублю. Вопрос сложный. Думали с коммунити долго.

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

Но надо с чего то начать этот аукцион. И начинать его будет первооткрыватель неймспейса. Открыть нейспейс — сложная задача, выполняемая по двойной сложности Bitcoin. И если ты его открыл, ты его мейнтенишь, то тебе и декларировать начальную цену на домен! А там дальше рынок разберется чего почем.

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

Как регистрировать домен?

Регистрацией доменов будут заниматься организации, владеющие существенными вычислительными мощностями. То есть, существующие пуллы майнинга.

Процедура, как я ее вижу.

Пулл объявляет о регистрации доменов в каком то неймспейсе (неймспесах): .com, .net, .org и т.д. На странице пулла висит определенная Сетью цена за регистрацию.

1. Клиент хочет зарегать domain.com
2. Клиент генерирует пару ECDSA ключей для своего домена
3. Клиент платит пуллу определенную сетью мзду в биткоинах, особой транзакцией [21], в которой имеется цифровая подпись имени домена приватным ключом домена. Эту транзакцию видит DIANNA и берет на свой учет.
4. Клиент генерирует транзакцию DIANNA [17], в ней идет регистрация домена с цифровой подписью. Эту транзакцию клиент отдает пуллу.
5. Пулл мерж-майнит транзкцию DIANNA в блок DIANNA.

Домен зарегистрирован/обновлен/изменен!

У клиента — домен, у пулла — мзда. Всем профит.

Как резолвить домен?

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

Все что надо клиенту — это знать цепь заголовков блоков [16] нужного неймспейса. Заголовки обещают быть не такими большими как сами блоки.

Для резолва достаточно послать запрос в некую распределенную DHT сеть с указанием имени домена и номера неймспейса.

В ответ должна прийти запись типа «ключ=значение» (как в обычном DNS), плюс полная Меркль-ветка [22] данной доменной транзакции и хеш блока этой трнзакции.

Авторитетность данного ответа вычисляется сверкой хеша ветки Меркля и хеша блока с базой локальных заголовков блоков.

Что с этим всем делать?

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

Ключевые технические моменты описаны на сайте: dianna-project.org/ [23]

Я лично публично отказываюсь от всяких копирайтов проекта DIANNA. И выпускаю эту идею наружу. Кому не безразлично — сделайте, назовите своим именем. Если угодно — присвойте авторство. Я просто хочу чтобы это ожило — своих ресурсов для реализации лично у меня нет, как и опыта курирования опен-соурс проектов. Могу поддержать словом, мозгом [24], схемой.

DIANNA может дать свободные домены свободным сетям.

В первую очередь, я думаю это выгодно майнинг пуллам (особенно в свете близящейся reward halving).

На чем писать?

Я думаю, имеет смысл форкнуть BitcoinJ на Java и обвешать ProtoBuf'ами. Это будет проще прикрутить к I2P.

Тестовые наброски кода здесь: github.com/pentarh/DIANNA [25] Определил транзакцию и правила протобуфов. На больше времени не хватило…

Пока все. Надеюсь, напишу еще как нибудь более углубленные разъяснения на русском.

//pentarh

Автор: pentarh

Источник [26]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/java/19824

Ссылки в тексте:

[1] Bitcoin: Peer-To-Peer Electronic Cash System: http://bitcoin.org/bitcoin.pdf

[2] Block chain: https://en.bitcoin.it/wiki/Block_chain

[3] BitDNS: http://privwiki.dreamhosters.com/wiki/Bitcoin_DNS_System_Proposal

[4] NameCoin: http://dot-bit.org/Main_Page

[5] экспериментальный резолвер I2P: https://github.com/pentarh/NameCoin-I2P-Resolver

[6] проблем оказалось много: https://bitcointalk.org/index.php?topic=62017.0

[7] атаке 51%: http://dianna-project.org/wiki/51%25_Attack

[8] Альтернативной Цепью Блоков: https://en.bitcoin.it/wiki/Alternative_chain

[9] Теорема Long-Fork: http://www.pentarh.com/wp/2012/03/30/long-fork-bitcoin-theorem/

[10] транзакция: https://en.bitcoin.it/wiki/Transactions

[11] блок: https://en.bitcoin.it/wiki/Block

[12] майнинг: https://en.bitcoin.it/wiki/Mining

[13] merged mining: http://dianna-project.org/wiki/Merged_Mining

[14] proof of work: https://en.bitcoin.it/wiki/Proof_of_Work

[15] сложность: https://en.bitcoin.it/wiki/Difficulty

[16] Блок: http://dianna-project.org/wiki/DIANNA_block

[17] транзакциях: http://dianna-project.org/wiki/Domain_Transaction

[18] неймспейсы: http://dianna-project.org/wiki/Namespace

[19] дерево блоков: http://dianna-project.org/wiki/DIANNA_Block_Chain

[20] таймауту: http://dianna-project.org/wiki/TTL

[21] особой транзакцией: http://dianna-project.org/wiki/Fee_Transaction

[22] Меркль-ветка: http://en.wikipedia.org/wiki/Merkle_signature_scheme

[23] dianna-project.org/: http://dianna-project.org/

[24] мозгом: http://www.braintools.ru

[25] github.com/pentarh/DIANNA: https://github.com/pentarh/DIANNA

[26] Источник: http://habrahabr.ru/post/158303/