2. NVS и его подсистемы

Emercoin предоставляет сервис для хранения пар имя → значение в своей цепочке блоков Name-Value Storage или NVS. Первоначальная концепция была унаследована от криптовалюты NameCoin, но в то время как NameCoin в основном ориентирована на поддержку децентрализованной доменной зоны .bit в своем расширении, Emercoin предоставляет универсальный расширяемый сервис для хранения и поддержки пар имя → значение без навязывания узкой специализации.

Конечно, Emercoin также поддерживает распределенную альтернативную службу DNS, и каждый кошелек Emercoin содержит встроенный простой DNS-сервер, поддерживающий стандартный протокол DNS RFC1034 UDP.

Обзор NVS

Emercoin хранит данные в блокчейне по набору пар имя → значение:

  • name - метка для сохраненных данных длиной до 512 байт.

  • value - сами данные, длиной до 20 * 1024 (20кб).

Emercoin выделяет до 20 КБ для каждого имени, что достаточно для размещения открытых ключей для большинства современных криптографических приложений. Мы считаем, что блокчейн криптовалюты является чрезвычайно надежным местом для публикации и поддержки открытых ключей для многих криптографических приложений, таких как сертификаты SSH/SSL. Как и обычные платежные транзакции, пары NVS, хранящиеся в блокчейне, также получают подтверждения во время генерации блока и практически неуязвимы для изменения в результате Атаки Посредника.

Поскольку блокчейн является надежным хранилищем данных, защищенным от несанкционированного изменения, он является отличной основой для развертывания криптографической Public Key Infrastructure (PKI), цифрового подтверждения владения (DPO), неизменяемого ведения записей, временных меток и других распределенных сервисов.

Блокчейн Emercoin будет принимать пары NVS без каких-либо ограничений на формат данных имени или значения. Однако в целях стандартизации мы рекомендуем следующий формат имен:

<service_abbreviation>:<unique_key>

Например:

dns:emercoin.com

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

Вы можете управлять записями NVS либо через графический интерфейс кошелька Emercoin, либо через emercoin-cli.

Аббревиатуры сервисов

Аббревиатура Сервис Сервис в Emercoin

DNS

DNS записи

EmerDNS

SSH

SSH публичные ключи

EmerSSH

GPG

GNU PGP публичные ключи

KX

RFC2230 публичные ключи

SSL

SSL Сертификат

EmerSSL

BLS

BLS цифровая подпись публичного ключа

TTS

Trusted Timestamp

EmerTTS

DPO

Digital Proof-of-Ownership

EmerDPO

Magnet

BitTorrent магнет линки

EmerMagnet

SWIFT

Банковская подсистема перeводов SWIFT

ENUM

ENUM телефонные записи

ENUMER

2.1. EmerDNS

Преимущества
  • Защита веб-сайтов от блокировки властями

  • Предотвращение изменения, отзыва или приостановки доменных имен

  • Регистрация на любой срок, хоть на 1000 лет.

  • Стоимость владения намного меньше чем для доменов ICANN

Боитесь, что ваш сайт могут заблокировать власти? Возможно, не зря, учитывая «закручивание гаек» по всему миру. Вам поможет EmerDNS.

EmerDNS не грозит цензура, ведь это полностью децентрализованная система. Никто, кроме вас, не сможет изменить созданную вами DNS-запись.

Сайты на EmerDNS легко резолвятся — через браузерные расширения, серверы OpenNIC или прокси-серверы.

EmerDNS поддерживает полный набор DNS-записей. В рамках NVS система работает под аббревиатурой DNS. Благодаря безопасному блокчейну Emercoin, записи о доменных именах полностью децентрализованы и нецензурируемы. Никакой регулятор не сможет их изменить, отозвать или заблокировать. Только владелец записи — тот, у кого есть закрытый ключ от соответствующего платёжного адреса, — может совершать над ней действия. Работать над записями в NVS можно через GUI-кошелёк Emercoin или используя API-команды “name_new/name_update”.

DNS-записи можно легко получить по API от любого Emercoin-кошелька через JSON-RPC, командную строку, или стандартный RFC1034-протокол, встроенный в каждый кошелёк.


EmerDNS - это система для децентрализованных доменных имен, поддерживающая полный спектр записей DNS. EmerDNS работает под аббревиатурой службы «dns» в Emercoin NVS.

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

Только владельцы записей DNS могут управлять своими записями: изменять значения, время аренды, удалять их или передавать право собственности на другой адрес EMC. Эти действия могут быть выполнены с помощью Emercoin NVS в графическом интерфейсе кошелька Emercoin или с помощью команд name_new или name_update в Emercoin API .

Записи DNS можно легко получить из любого кошелька Emercoin с помощью Emercoin API, используя JSONRPC или командную строку, или с помощью стандартного протокола DNS RFC1034 , встроенного в каждый кошелек Emercoin.

2.1.1. Поддерживаемые зоны

Технически EmerDNS может поддерживать любую DNS-зону или TLD. Однако для бесшовной интеграции в стандартное дерево DNS и предотвращения конфликтов с существующими DNS-зонами в настоящее время мы рекомендуем создавать записи EmerDNS только в зонах:

.emc .coin .lib .bazar

Текущие корневые зоны, поддерживаемые EmerDNS, и их назначение:

Зона

Назначение

.coin

веб-сайты цифровой валюты и торговли

.emc

сайты, связанные с проектом Emercoin

.lib

от слов библиотека и свобода - то есть "Знания и Свобода"

.bazar

рынки, маркеты

2.1.2. Доступ к зонам EmerDNS

Есть несколько способов доступа к доменам EmerDNS.

Расширения браузера

Существует несколько сторонних плагинов для браузеров, которые позволяют легко посещать домены EmerDNS:

  • Расширение 44 браузера Peername.com (Firefox, Chrome, Opera) peername.com

  • Расширение для браузера friGate (Firefox, Chrome, Opera) fri-gate.org

OpenNIC

OpenNIC - это альтернативный реестр доменных имён, который позволяет пользователям получить доступ к веб-сайтам, находящимся за пределами традиционных доменных зон, таких как .com или .org. OpenNIC не зависит от ICANN и предоставляет простой и удобный способ доступа к веб-ресурсам, которые могут быть заблокированы в некоторых странах или регионах.

Благодаря соглашению между Emercoin и OpenNIC, пользователи DNS-серверов OpenNIC могут получить доступ к доменным зонам Emercoin. Для этого необходимо настроить DNS-преобразователь для серверов OpenNIC, следуя инструкциям. Таким образом, вы можете получить доступ к веб-сайтам, зарегистрированным в блокчейне Emercoin, а также к другим доменным зонам, поддерживаемым OpenNIC.

Настройка в Windows

Пример настройки DNS в Windows, вы можете посмотреть здесь.

Windows начиная с версии 10 поддерживает DoT и DoH. Пример настройки здесь.

Чтобы настроить DNS over TLS через графический интерфейс, выполните следующие действия:

Обратите внимание, что конкретные шаги могут отличаться в зависимости от версии Windows 10 и используемой сетевой конфигурации.

Настройка в Android

Android поддерживает DNS over TLS без установки каких либо приложений. Это значит что вы можете получить доступ к зонам EmerDNS просто вписав адрес DNS сервера (Opennic или частного DNS сервера)

Настройка в LAN

Если вы хотите что бы доступ к EmerDNS был у всех устройств вашей локальной сети без необходимости настройки на каждом устройстве. Вы можете поменять DNS сервера которые настроены на вашем роутере на Opennic или любой другой частный DNS который поддерживает EmerDNS. После этого все устройства в вашей сети будут иметь доступ к разрешению зон EmerDNS.

А если вы администратор сети предприятия, то вы можете аналогично предоставить доступ всем сотрудникам к зонам EmerDNS.

Частные DNS сервера

Существуют проекты DNS серверов от частных энтузиастов.

Адрес

Описание

dns.wg0.xyz

DoT, DoH, DNS

2.1.3. Синтаксис записей DNS

Типы записей поддерживаемые в EmerDNS:

A, AAAA, NS, PTR, CNAME, MX, TXT, TLSA, SRV, SD

Записи SOA и WKS напрямую не поддерживаются встроенным DNS-сервером Emercoin. Запись SD используется только в EmerDNS для определения поддоменов.

Чтобы создать DNS-запись в блокчейн Emercoin, создайте (или обновите) пару имя → значение под аббревиатурой службы «dns» в Emercoin NVS следующим образом:

"name" : "dns:<your_name_here>"
"value" : "<list of NS-records>"

Например:

"name" : "dns:example.coin"
"value" : "A=192.168.0.123,127.0.0.1|AAAA=2607:f8b0:4004:806::1001|NS=ns1.google.com|TTL=4001"

В этом примере домен example.coin определяется следующим образом:

  • две A-записи (192.168.0.123 и 127.0.0.1);

  • одна AAAA-запись (2607:f8b0:4004:806::1001);

  • одна NS-запись (ns1.google.com);

  • TTL запись;

Записи разделяются вертикальной чертой или вертикальной чертой разделителя по умолчанию ("|"). При необходимости вы можете переопределить разделитель, добавив к значению префикс:

~<новый символ разделителя>

Например, если вы хотите использовать символ решетки «#» в качестве разделителя вместо вертикальной черты, вы можете присвоить ему:

~#

в начале значения следующим образом:

"value" : "~#A=192.168.0.123,127.0.0.1#AAAA=2607:f8b0:4004:806::1001#NS=ns1.google.com#TTL=4001"

Обратите внимание: если вы используете пробел « » в качестве разделителя, вы не сможете использовать его внутри полей. Поэтому вместо этого вы должны выбрать соответствующий символ в качестве разделителя для ваших записей.

Как описано выше, каждая запись может содержать несколько значений. В приведенном примере A-запись содержит два значения, разделенных запятой «,» Вы также можете переопределить разделитель значений с помощью «~». В следующем примере показано, как переопределить разделитель два раза: косая черта «/» в качестве разделителя записей и звездочка «*» в качестве разделителей значений для нескольких записей TXT:

"value" : "~/TXT=~*This is text, Hello!*2nd text/MX=gmail.com:33,mx.microsoft.com:66/CNAME=emc.cc.st/A=192.168.0.100,127.0.0.1"

В последнем примере мы продемонстрировали использование записи MX. Значение MX содержит ссылку на почтовый обменник и приоритет, разделенные двоеточием «:».

Если приоритет опущен, значение по умолчанию - 1.

Кроме того, в последнем примере намеренно опущена запись TTL. Значение TTL по умолчанию - 24 часа.

Требования к именованию

Доменные имена могут быть сформированы из набора буквенно-цифровых символов ASCII в нижнем регистре (az, 0-9). Кроме того, дефис («-») разрешен, если он окружен символами, цифрами или дефисами, хотя он не должен начинать или заканчивать имя. Допустимы только строчные буквы.

Интернационализированные доменные имена

Интернационализированные доменные имена (арабский, китайский, кириллица и т. Д.) Технически возможны с использованием punycode.

Например, если нам нужно следующее интернационализированное доменное имя:

dns:президент.emc

Затем мы должны расшифровать его с помощью конвертера punycode и зарегистрировать результат:

dns:xn--d1abbgf6aiiy.emc
Поддомены

Общая проблема с распределенным DNS заключается в том, что каждый может выделить любое уникальное имя, позволяя кому-то зарегистрировать поддомен для домена, которым он не владеет. Чтобы исправить эту ситуацию, в EmerDNS есть специальные способы управления поддоменами:

  • Запись субдомена (SD) в значении NVS родительского домена DNS, разрешает поиск и разрешение субдомена непосредственно в подсистеме Emercoin DNS, например SD = www, ftp, mx

  • Запись сервера имен (NS) в значении NVS родительского DNS, позволяет ссылаться на внешние серверы имен, управляемые владельцем домена, для обеспечения авторитетного поиска и разрешения субдомена, внешнего по отношению к Emercoin DNS, например NS = ns.example.com

Разрешение поддоменов применяется в следующем порядке, рекурсивно ко всем поддоменам третьего уровня и глубже:

  • Сначала проверьте SD-запись в родительском значении DNS на предмет ссылки на запрошенный поддомен. Если ссылка на субдомен найдена, найдите субдомен в подсистеме Emercoin NVS.

  • Затем проверьте наличие записи сервера имен (NS) в родительском значении DNS. Если найдено, сгенерировать ссылку на внешний сервер имен.

  • Если в записях SD или NS разрешение не получается, возвращайте данные по родительскому домену (т.е. Игнорируйте префикс поддомена).

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


Пример 1 - родительский элемент содержит записи SD и NS

  1. dns:example.coin -> A=1.2.3.4|SD=www,gopher|NS=ns.example.com
  2. dns:www.example.coin -> A=5.6.7.8

В этом случае субдомены будут разрешены следующим образом:

  • example.coin будет разрешен записью [1] и вернет A = 1.2.3.4

  • www.example.coin будет подтвержден записью [1], разрешен записью [2] и вернется A = 5.6.7.8

  • gopher.example.coin будет одобрен записью [1] и не разрешен, поскольку NVS не содержит соответствующей записи DNS. Это вернет NXDOMAIN.

  • mail.example.coin не будет одобрен записью [1], но запись NS создаст ссылку на внешний сервер ns.example.com, который может разрешить или не разрешить этот субдомен.

Таким образом, одна запись [1] поддерживает гибкое гибридное разрешение:

  • www разрешено Emercoin NVS.

  • gopher заблокирован.

  • все остальные разрешаются делегированным NS = ns.example.com.

Пример 2 - родительский элемент содержит только SD-запись:

  1. dns:example.coin -> A=1.2.3.4|SD=www,gopher
  2. dns:www.example.coin -> A=5.6.7.8

В этом случае субдомены будут разрешены следующим образом:

  • example.coin будет разрешен записью [1] и вернет A = 1.2.3.4

  • www.example.coin будет подтвержден записью [1], разрешен записью [2] и вернется A = 5.6.7.8

  • gopher.example.coin будет одобрен записью [1] и не разрешен, поскольку NVS не содержит соответствующей записи DNS. Это вернет NXDOMAIN.

  • mail.example.coin не будет утвержден записью [1], и (из-за отсутствия записи NS) префикс «mail» будет проигнорирован и разрешен так же, как example.coin.


Пример 3 - родительский элемент содержит только NS-запись:

  1. dns:example.coin -> A=1.2.3.4|NS=ns.example.com
  2. dns:www.example.coin -> A=5.6.7.8

В этом случае субдомены будут разрешены следующим образом:

  • example.coin будет разрешен записью [1] и вернет A = 1.2.3.4

  • www.example.coin не будет одобрен записью [1] и будет генерировать ссылку на внешний сервер ns.example.com, который может разрешить или не разрешить этот субдомен.

  • Запись [2] будет проигнорирована и не будет участвовать в разрешении DNS.

  • mail.example.coin не будет одобрен записью [1] и создаст ссылку на внешний сервер ns.example.com, который может разрешить или не разрешить этот субдомен.

Пример 4 - родительский элемент не содержит ссылок на поддомен:

  1. dns:example.coin -> "A=1.2.3.4"
  2. dns:mx.example.coin -> "A=5.6.7.8"

В этом случае субдомены будут разрешены следующим образом:

  • example.coin → «A = 1.2.3.4»

  • mx.example.coin → «A = 1.2.3.4»

  • www.example.coin → «A = 1.2.3.4»

  • upload.ftp.example.coin → «A = 1.2.3.4»

Поскольку запись [1] не содержит записей SD или NS, все поддомены будут преобразованы в «родительский домен» example.coin. Запись [2] будет проигнорирована и не будет участвовать в разрешении DNS.

2.1.4. Создание записей DNS

Создать запись вы можете двумя способами, первый это через CLI и второй через GUI кошелька.

Через CLI

Для создания записи через CLI вы можете воспользоваться утилитой:

emercoin-cli

которая устанавливается вместе с кошельком.

Создание DNS имени с записями типа A и AAAA:

emercoin-cli name_new "dns:wg0.lib" "A=5.255.97.202|AAAA=2a04:52c0:102:62d6::babe:cafe" 5000

Здесь мы указали ключ name_new что означает создание нового домена.

Note
Если вам нужно изменить записи в домене, используйте ключ name_update

Далее в кавычках идет строка которая будет содержаться в поле NVS name. Здесь необходимо указать ключевое слово dns: с двоеточием, далее без пробела указать имя вашего домена.

Следующая строка будет содержаться в поле NVS value. Здесь нужно указать типы записей и их значения. В данном примере мы объявляем два типа записей A AAAA и их значения ip адреса.

И последний параметр 5000 это кол-во дней на которое мы регистрируем домен.

Через GUI
  1. Запустите приложение Emercoin Wallet и следуйте инструкции на скриншоте:

    wallet create nvs 1
  2. В открывшемся окне заполните данные вашего домена и нажмите OK:

    wallet create nvs 2
  3. Выберите срок на который вы хотите зарегистрировать домен. Нажмите submit что бы отправить транзакцию:

    wallet create nvs 3
Для тестирования

Так как записи которые помещаются в БЧ невозможно удалить, рекомендуется для минимизации захламления БЧ использовать либо сеть testnet, либо локальный файл конфигурации.

Тестовая сеть (testnet)

Для создания записей в тестовой сети смотрите статьи один, два

Локально через файл конфигурации

Для быстрого тестирования записей встроенного DNS сервера, можно вообще не создавать записи в БЧ. Записи можно прописать в конфигурационных файлах. Формат записей:

<domain>=<dns_record>=<value>

Создайте в каталоге вашего кошелька файл emcdnslocal.conf, добавьте в него записи для домена который вы хотите протестировать:

emcdnslocal.conf
wg0.lib=A=5.255.97.202|AAAA=2a04:52c0:102:62d6::babe:cafe|MX=mail.wg0.lib|SD=mail,mx,_tcp
mail.wg0.lib=A=5.255.97.202
mx.wg0.lib=A=5.255.97.202
_tcp.wg0.lib=SD=_imaps
_imaps._tcp.wg0.lib=SRV=5:0:mail.wg0.lib:993

Откройте файл конфигурации вашего кошелька и добавьте следующую строку:

emercoin.conf
...
emcdnslocalcf=./emcdnslocal.conf
...

Перезагрузите сервис кошелька и попробуйте отправить запрос на разрешение добавленных имен:

dig wg0.lib mx
...
dig mail.wg0.lib A
...
dig _imaps._tcp.wg0.lib srv
...

2.1.5. Интеграция в обычное дерево DNS

Во-первых, нужно активировать RFC1034 сервер DNS в Emercoin по задав два необязательных параметра в emercoin.conf конфигурационном файле, emcdns и emcdnsport :

emcdns=1 # Запускать DNS сервер. По умолчанию 0 (отключен)
emcdnsport=NNN # Порт для DNS, по умолчанию 5335

Чтобы интегрировать DNS-сервер Emercoin в обычное DNS-дерево, вы можете использовать полнофункциональный DNS или кэширующий DNS. Стандартный DNS-клиент Windows не может выполнить эту работу, поэтому для этого следует использовать дополнительный DNS-прокси-сервер. Ниже мы покажем несколько примеров.

Unbound DNS Server

Пример конфигурации для настройки DNS сервера Unbound:

do-not-query-localhost: no

domain-insecure: "coin."
domain-insecure: "emc."
domain-insecure: "lib."
domain-insecure: "bazar."
domain-insecure: "enum."

stub-zone:
	name: coin.
        stub-addr: 127.0.0.1@5335
	stub-first: yes

stub-zone:
	name: emc.
	stub-addr: 127.0.0.1@5335
	stub-first: yes

stub-zone:
	name: lib.
	stub-addr: 127.0.0.1@5335
	stub-first: yes

stub-zone:
	name: bazar.
	stub-addr: 127.0.0.1@5335
	stub-first: yes

stub-zone:
	name: enum.
	stub-addr: 127.0.0.1@5335
	stub-first: yes

forward-zone:
	name: .
	forward-addr: 1.1.1.1		# cloudflare
	forward-addr: 8.8.4.4		# google
	forward-addr: 208.67.220.220	# openDNS
	forward-addr: 209.244.0.4	# Level3
	forward-addr: 64.6.65.6         # NeuStar
Обычный PC компьютер, Acrylic DNS-прокси

Самый простой случай - запустить кошелек Emercoin и все остальное на одном ПК. Для этого мы рекомендуем установить на ваш компьютер облегченный прокси-сервер Acrylic DNS. Acrylic улучшит производительность вашего ПК, разрешая DNS-запросы с локальным кешем, уменьшая задержки при просмотре или любой другой интернет-активности.

Для установки и начальной настройки в Windows см. Руководство на веб-сайте Acrylic. После установки вам необходимо настроить Acrylic для интеграции доменных зон Emercoin. Пример файла конфигурации доступен в Интернете. Для настройки вы должны перенаправить все запросы в зоны EmerDNS (.emc , .coin , .lib , .bazar) в локальный кошелек Emercoin, а все запросы в другие зоны - провайдеру DNS по умолчанию. Это можно настроить в файле конфигурации Acrylic следующим образом:

; Forward to primary (default) DNS server anything but EMC-zones
PrimaryServerHostNameAffinityMask=^*.emc;^*.coin;^*.lib;^*.bazar;*
PrimaryServerAddress=DNS_of_your_provider or any public DNS, for example: 8.8.4.4
PrimaryServerPort=53

; Forward to EMC wallet requests for EMC-zones only
SecondaryServerHostNameAffinityMask=*.emc;*.coin;*.lib;*.bazar
SecondaryServerAddress=127.0.0.1
SecondaryServerPort=5335

В Windows путь по умолчанию к файлу конфигурации Acrylic:

C:\Program Files (x86)\Acrylic DNS Proxy\
Один компьютер, прокси-сервер BIND DNS

Вместо установки прокси-сервера DNS у вас также есть возможность установить полноценный DNS-сервер. К счастью, полный DNS-сервер BIND доступен для Windows бесплатно. В Интернете можно найти множество руководств, в которых показано, как установить BIND в Windows.

После установки вы должны указать BIND перенаправить EMC-зоны в локальный кошелек Emercoin, добавив в файл конфигурации BIND с именем.conf следующим образом:

zone "emc" {
 type forward;
 forward only;
 forwarders {
   127.0.0.1 port 5335; // Local Emercoin wallet
 };
};
zone "coin" {
 type forward;
 forward only;
 forwarders {
   127.0.0.1 port 5335; // Local Emercoin wallet
 };
};
zone "lib" {
 type forward;
 forward only;
 forwarders {
   127.0.0.1 port 5335; // Local Emercoin wallet
 };
};
zone "bazar" {
 type forward;
 forward only;
 forwarders {
   127.0.0.1 port 5335; // Local Emercoin wallet
 };
};
Локальная сеть, прокси BIND DNS

Если у вас есть сервер со статическим IP-адресом в вашей локальной сети, вы можете установить BIND на свой сервер и указать основной DNS-адрес настольного ПК на ваш сервер BIND. На сервере вы можете запустить безголовый кошелек Emercoin, на который BIND будет перенаправлять запросы в соответствующие зоны. В этом случае конфигурация BIND точно такая же, как и выше.

Также вы можете запустить кошелек Emercoin на любом ПК в вашей локальной сети, а не на сервере BIND. Если это так, вам следует изменить адрес пересылки в конфигурации BIND с 127.0.0.1 на IP-адрес этого ПК. Конечно, у этого ПК должен быть статический IP-адрес локальной сети.

Локальная сеть, прокси DNSMASQ

Современные маршрутизаторы обычно содержат в своей прошивке встроенный прокси-DNS. Обычно это DNSMASQ. Некоторые прошивки маршрутизатора, такие как DD-WRT и OpenWrt (а также другие), позволяют настраивать встроенный DNS-прокси (например, см. Руководство DD-WRT DNSMASQ или руководство OpenWrt DNSMASQ).

В этом случае кошелек следует запускать на ПК со статическим IP-адресом в локальной сети, и DNSMASQ от маршрутизатора будет отправлять DNS-запросы на этот компьютер. Ниже приведены примеры строк конфигурации, которые необходимо добавить в dnsmasq.conf. В этом примере ПК, на котором запущен Emercoin, имеет IP-адрес в локальной сети 192.168.1.53.

--server=/emc/192.168.1.53#5335
--server=/coin/192.168.1.53#5335
--server=/lib/192.168.1.53#5335
--server=/bazar/192.168.1.53#5335
Общедоступный Интернет, прямой шлюз

Также существует возможность сделать публичный шлюз из обычного дерева DNS в EmerDNS. В этом случае вы можете арендовать любой общедоступный домен или поддомен и указать NS-записи для этого домена на машину, на которой запущен кошелек Emercoin с активным DNS-сервером на порте 53 (см. В следующем абзаце, как определить порт). После этого все обычные запросы NS к этому домену будут обрабатываться DNS-сервером, а ответы будут получены из базы данных Emercoin NVS в кошельке Emercoin.

Чтобы настроить новый домен в качестве общедоступного DNS-шлюза Emercoin, вам необходимо указать DNS-серверы как авторитетные для вашей зоны (домена). Для домена emercoin.com мы указали два сервера имен (NS), уполномоченные для этого домена у нашего регистратора доменов:

Name Server: SEED1.EMERCOIN.COM
Name Server: SEED2.EMERCOIN.COM

Вы можете проверить эту информацию с помощью whois.

На каждом из этих серверов имен работает кошелек Emercoin с активным DNS-сервером, который обслуживает шлюз и локальную зону для emercoin.com. Специфические параметры конфигурации DNS для файла emercoin.conf следующие:

Если вы используете DNS-шлюз только для своего локального компьютера (с Acrylic или BIND) или для вашей локальной сети, достаточно указать только один параметр в emercoin.conf:

# enable emc dns
emcdns=1

Это активирует DNS-сервер Emercoin и запустит его на порте по умолчанию 5335, что разрешено для перенаправления DNS с помощью DNS-прокси (Acrylic, BIND, dnsmasq и т. Д.).

Чтобы работать как общедоступный DNS-шлюз, вам необходимо указать некоторые дополнительные параметры:

# Gateway suffix. This suffix will be ignored when a request is passed to the internal gateway.
# Requests for other domain suffixes will be ignored.
emcdnssuffix=.yourgate.com

# NS Server port 53 is the default NS port and must be used if the server is public and "not forward only".
emcdnsport=53

# Filter for allowed zones. Protection for "cool hackers", who try to lookup any external domains through our server
# or attack someone else by DNS amplification mechanism. Currently, only the four EMC-zones are allowed.
emcdnsallowed=.coin|.emc|.lib|.bazar

# Optional path for a file that contains names in the local gateway's NS zone (like www.emercoin.com).
# Must be full path. Example:
emcdnslocalcf=/usr/share/emercoin/emcdnslocal.conf

Локальный файл конфигурации ( EmerDNSlocal.conf выше) содержит пары в формате «имя = значение» . Пустое имя предполагает «шлюз как есть». Значения используют тот же формат, что и значения EmerDNS в блокчейне. Например, локальный файл для youtgate.com выглядит следующим образом:

# This is local zone config
# For built-in Emercoin DNS

=A=192.241.241.153|TXT=Emercoin site
www=A=192.241.241.153|TXT=Emercoin www-site

2.1.6. Виртуальные хосты (vhosts)

Когда вы запускаете виртуальные хосты, вам необходимо будет изменить конфигурацию вашего веб-сервера, чтобы правильно различать ваше имя хоста с таким количеством возможных суффиксов шлюза, которое вы хотите (или без суффикса, если имя разрешено LAN или локально). Это легко сделать, создав псевдоним vname со звездочкой "*" в качестве суффикса. В следующем примере показана соответствующая конфигурация веб-сервера Apache для виртуального сервера exchange.emc . Обратите внимание на строку ServerAlias:

<VirtualHost *:80>
  ServerAdmin [email protected]
  DocumentRoot "/var/www/exchange.emc/html"
  ServerName emc.cc.st
  ServerAlias exchange.emc*
  ErrorLog  "/var/log/exchange.emc-error_log"
  CustomLog "/var/log/exchange.emc-access_log" common
  ScriptAlias /cgi-bin/ "/usr/local/libexec/cgi-bin/"
</VirtualHost>

2.1.7. Получение SSL сертификатов с Postmet

C 2021 года появилась возможность получить SSL сертификат для доменных зон Emercoin. На сайте postmet.com можно оставить заявку на выпуск сертификата, следуя инструкциям на их сайте:

  • Скачайте шаблон альтернативного имени Sublect (SAN) req_san_example.conf.

  • Отредактируйте этот пример, напишите свои фактические доменные имена (CN, DNS.n) или другое значение (Country, STate, Location, Orgznization)

  • Создайте запрос подписи сертификата (CSR) и файлы закрытого ключа с помощью команды:

    openssl req -new -out domain.lib.csr -newkey rsa: 2048 -nodes -sha256 -keyout domain.lib.key -config req_san_example.conf
  • Заполните форму с CSR и информацией о вас.

Скрипт генерации запроса CSR вы можете найти здесь.

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

2.2. EmerSSL

Совсем коротко о сути технологии

Вы размещаете в БЧ EmerNVS запись в которой поле key: содержит серийный номер вашего сертификата x509. В поле value: хеш сумму sha256 вашего сертификата.

Основное преимущество в том что вы можете в любой момент отозвать ваш сертификат путем обновления записи и изменения поля value: на хеш сумму нового сертификата, оставив поле key: неизменным, то есть ваш новый сертификат должен быть с точно таким же серийным номером.

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

Преимущества
  • Эта полностью децентрализованная инфраструктура SSL-сертификатов исключает возможность MITM-атаки.

  • Многократное использования одного клиентского SSL-сертификата для авторизации на любом сервере в системе EmerSSL без ущерба для безопасности

  • Автозаполнение новой формы учетной записи данными, записанными в блокчейн.

  • Не нужен центр сертификации.

  • Можно использовать самоподписные сертификаты.

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

На основе EmerSSL существует система беспарольной аутентификации на сайтах, использующая блокчейн Emercoin в качестве децентрализованного хранилища хеш-сумм для клиентских SSL-сертификатов. Сертификаты можно создавать прямо на своём компьютере, без вовлечения какого-либо центра сертификации, и при необходимости легко заменять. Так что ни плановые обновления, ни срочные отзывы скомпрометированных сертификатов не вызовут проблем. Подробнее в этой статье

Преимущество EmerSSL заключается в полной децентрализации системы, то есть в отсутствии группы серверов, работающих под одной авторизацией (как в системах Kerberos, OpenID, TeddyID и т.п.). Из-за этой децентрализации EmerSSL не может пострадать от сбоя общесистемного обслуживания либо из-за технического сбоя, либо из-за злонамеренной атаки на серверы авторизации. Кроме того, пользователь не может заблокировать свои учетные записи в глобальном масштабе по прихоти одного органа.

С технологией EmerSSL связана EmerSSL InfoCard - "визитная карточка" система, которая дополняет беспарольный вход в EmerSSL, позволяя автоматически заполнять профили веб-сайтов из данных, хранящихся в блокчейне Emercoin.

2.2.1. Создание сертификата EmerSSL

Запустите кошелек emercoin-qt, нажмите кнопку SSL:

emerssl 1

Нажмите кнопку "New certificate":

emerssl 2

Заполните поля. Введите ваше имя или ник и ваш email:

emerssl 3

Придумайте и введите пароль для защиты сертификата:

emerssl 4

Вам предложат установить сертификат в систему, нажмите "Yes" и пройдите процедуру импорта для вашей OC. В процессе импорта вас попросят ввести пароль, используйте пароль который вы вводили ранее:

emerssl 5

Данные сгенерированного сертификата. Здесь мы видим данные которые будут вставлены в соответствующие поля записи EmerNVS. Закройте окно:

emerssl 6

Выберите период времени на который вы хотите разместить запись 1, 2. Выберите тип размещения, новая запись или обновление уже существующей 3. Нажмите "Submit" 4.

emerssl 7

Видео-инструкция: Как установить сертификат EmerSSL

Note
В примере указана ныне не существующая биржа Livcoin, но порядок действий по созданию сертификата это не влияет.

Вы можете поверить работоспособность сертификата, например на FoundICO (Меню "Войти")

2.2.2. InfoCard

EmerSSL InfoCard - это децентрализованная распределенная "визитная карточка" система на блокчейне Emercoin, которая дополняет систему EmerSSL для входа без пароля, позволяя автоматически заполнять профили веб-сайтов. InfoCard позволяет организовать информацию в иерархическую структуру, что может быть полезно для быстрого обновления содержимого всех карточек в компаниях или других организациях.

InfoCard - это своего рода "система визитных карточек на блокчейне" , которая содержит информацию о ее владельце, такую ​​как адрес электронной почты, номер телефона, дату рождения и т. д. InfoCard можно использовать на сайтах с авторизацией EmerSSL для автоматического заполнения данных учетной записи. Это означает, что вместо того, чтобы каждый раз вводить личные данные вы создаете новую учетную запись в Интернете, вы можете предоставить свою виртуальную визитную карточку InfoCard для заполнения данных.

Создание InfoCard
  1. Загрузите необходимые скрипты (или просмотрите github.com/emercoin/emcssl для последней версии для разработки).

  2. Переименуйте файл infocard_example.info в infocard_<your_login_name>.info и измените данные на свои собственные. Если вы предпочитаете не предоставлять данные для некоторых вещей, просто удалите строку. Примеры данных:

    Alias superabdul # Short name (username, login)
    FirstName Abdul # First (short) name
    LastName Kurbashi Bey # Remain part of full name
    HomeAddress
    Sinan Pasa Mah. Hayrettin Iskelesi # Free form address
    Sok. No \#1 # Free form address
    Besiktas, Besiktas # Free form address
    Istanbul # City
    34353 # ZIP code
    Turkey # Country
    HomePhone +90-555-123-4567
    WorkPhone +90-555-123-4568
    CellPhone +90-555-123-4569
    Gender M
    Birthdate 1991-05-27 # May, 27, 1991
    Email [email protected]
    WEB http://www.bubbleinflators.com/superabdul
    Facebook Abdul.KurbashiBey
    Twitter AbdulKurbashiBey
    EMC EdvJ7b7zPL6gj5f8VNfX6zmVcftb35sKX2 # Emercoin payment address
    BTC 1MkKuU78bikC2ACLspofQZnNb6Vz9AP1Np # BitCoin payment address
  3. Перейдите в папку X509 и запустите info_crypt.sh:

    $ cd downloads/X509
    $ ./info_crypt.sh infocard_<your_login_name>.info

    В Windows запустите, дважды щелкнув файл info_crypt.bat и введите имя InfoCard:

    windows console

    Если все пойдет хорошо, вывод будет содержать следующее сообщение:

    Please, deposit into Emercoin NVS pair:
    Key: info:e120319a479f4ac4
    Value: body of the file: infocard_<your_login_name>.info.ze
    
    To link your EmerSSL certificate to this info file, run ./gen_tpl.sh and use value for UID: info:e120319a479f4ac4:ac7c3821f171b6a8bd8cd33d829f5b
    Note
    Обратите внимание, что эта информация нигде не хранится, поэтому рекомендуется вести запись в текстовом документе.
  4. Следующим шагом будет импорт визитки в сеть. Для этого откройте кошелек и перейдите на вкладку «Управление именами». В поле Name скопируйте наш ключ, info:e120319a479f4ac4. В поле Value вставьте содержимое файла * .ze, который должен находиться в папке скриптов. Содержимое файла будет выглядеть тарабарщиной - и должно быть, это нормально. Поле New Adress следует оставить пустым.

    infocard1

    Нажмите Submit, и все готово!

2.3. EmerSSH

Используете серверную PKI? Представьте, что случится, если вашему администратору захочется пошалить.

С EmerSSH вы в безопасности.

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

EmerSSH можно бесшовно связать с OpenSSH, получив гибкость в дополнение к безопасности.

EmerSSH — система для управления PKI и Access-Control List (ACL) на базе блокчейна Emercoin.

Если EmerSSH связать с Open SSH, вы получите удобный, безопасный и гибкий способ SSH-подключения ко многим серверам. Для этого в OpenSSH надо указать ссылку на утилиту “emcssh”, которая будет «общаться» с блокчейном и получать SSH-креды в процессе аутентификации.

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

В рамках NVS система работает под абревиатурой SSH.


Можно создать мост между OpenSSH и блокчейном криптовалюты Emercoin. Результатом является удобный, безопасный и очень гибкий способ входа на множество серверов с использованием протокола SSH.

Простая программа EmerSSH обеспечивает мост между OpenSSH и блокчейном Emercoin, обеспечивая безопасное децентрализованное управление PKI. Когда OpenSSH настроен для обращения к EmerSSH , программа будет запрашивать блокчейн Emercoin для получения учетных данных SSH во время процесса аутентификации.

Пользователи могут управлять своими собственными учетными данными (открытыми ключами), отправляя и изменяя записи в цепочке блоков EMC (с помощью стандартного графического интерфейса Emercoin или демона командной строки. Аналогичным образом администраторы могут управлять группами пользователей для своих служб, которые могут содержать ссылки на другие группы как а также отдельных пользователей, что позволяет создавать рекурсивные деревья аутентификации.

EmerSSH работает под аббревиатурой SSH в Emercoin NVS. Записи считаются безопасными и неизменными из-за безопасности, обеспечиваемой блокчейном Emercoin.

Преимущества
  • Децентрализация авторизации и, как следствие, повышенной безопасности

  • Автоматическое обновления ключей и групп без помощи администратора

  • Абсолютное доверие между распределенными участниками инфраструктуры

  • Легкое администрирование и использование

  • Удешевление поддержки инфраструктуры и ее администрирования

2.3.1. Установка

Ниже приведены инструкции по установке и настройке EmerSSH на Debian и производных серверах, таких как Ubuntu, а также по использованию EmerSSH для входа на сервер с клиентского компьютера. Мы предполагаем, что на вашем сервере уже запущен кошелек Emercoin. Установка необходимых пакетов на сервер

Сначала обновите существующее программное обеспечение:

$ apt-get update
$ apt-get dist-upgrade

Теперь установите curl и jansson:

$ apt-get install libcurl4-openssl-dev libjansson-dev

Далее вам необходимо скачать и установить EmerSSH:

$ wget https://github.com/emercoin/emcssh/archive/0.0.4.tar.gz  (change to whatever is the latest release)
$ tar xfz 0.0.4.tar.gz
$ cd EmerSSH-0.0.4
$ make
$ make install

2.3.2. Настройка EmerSSH

Теперь вам нужно отредактировать файл конфигурации:

/usr/local/etc/emercoin/EmerSSH.conf

и изменить настройку для emcurl. Настройки должны совпадать с настройками в вашем файле emercoin.conf.

$ nano /usr/local/etc/emercoin/EmerSSH.conf

Измените значение для emcurl:

emcurl http://emccoinrpc:[email protected]:6662/

Значения emccoinrpc и rpcpassword должны быть взяты из вашего файла emercoin.conf . Остальные параметры можно оставить как есть.

Warning
EmerSSH.conf файл должен иметь права на чтение и запись только для пользователя root. Не изменяйте разрешения для этого файла, поскольку он содержит расширение rpcpassword.

Затем вам нужно отредактировать файл конфигурации sshd, но у Debian есть небольшая проблема в том, что версия sshd может быть слишком старой и ее сначала необходимо обновить. Пользователи других операционных систем могут пропустить следующий шаг.

Обновление OpenSSH в Debian

Для начала узнаем, какая версия OpenSSH установлена:

$ sshd -v

В ответ мы получаем следующее сообщение:

unknown option -- v
OpenSSH_6.1p1 Debian

Если версия 6.2 или выше, следующий шаг можно пропустить. В противном случае обновите:

$ nano /etc/apt/sources.list

Добавьте в конец строки и сохраните файл:

$ deb http://ftp.debian.org/debian/ wheezy-backports main non-free contrib

Обновите систему:

$ apt-get update

и установите sshd:

$ apt-get -t wheezy-backports install openssh-server

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

Кроме того, пользователям Debian нужно будет изменить расположение файла EmerSSH:

$ mv /usr/local/sbin/EmerSSH /usr/sbin/EmerSSH
Настройка OpenSSH

Теперь нам нужно отредактировать файл конфигурации sshd_config:

$ nano /etc/ssh/sshd_config

Необходимо добавить несколько строк:

Debian:

AuthorizedKeysCommand /usr/sbin/EmerSSH
AuthorizedKeysCommandUser root

Для других OS:

AuthorizedKeysCommand /usr/local/sbin/EmerSSH
AuthorizedKeysCommandUser root

Теперь перезапустите sshd с новой конфигурацией:

$ kill -HUP `cat /var/run/sshd.pid`
Создайте пару ключей SSH

Теперь нам нужно сгенерировать пару ключей для пользователя. В Linux просто введите следующую команду:

$ ssh-keygen -t rsa -b 4096 -C "@your-username"
Добавление открытого ключа в Emercoin NVS

Затем нам нужно добавить открытый ключ в Emercoin NVS в виде пары имя → значение. Сделайте это в своем кошельке Emercoin на своем ПК. В поле name укажите:

ssh:<your_username>

В поле value вставьте свой открытый ключ от PuTTYgen. Поле new address можно оставить пустым. Укажите количество дней и нажмите «Submit».

emerssh wallet

Теперь нам нужно дождаться подтверждения нашей транзакции. Чтобы сэкономить время при ожидании подтверждения, теперь вы можете вернуться на свой сервер и добавить нового пользователя в файл EmerSSH_keys:

$ cd $HOME/.ssh/
$ nano EmerSSH_keys

В документе просто добавьте своего пользователя с помощью @. В моем случае это:

@kamillo

Сохраните и закройте файл.

Следует отметить, что технология EmerSSH от Emercoin позволяет использовать не только отдельных пользователей, но и целые группы. Допустим, вы хотите предоставить доступ к своим серверам трем другим людям. Вы можете индивидуально добавить всех пользователей в файл EmerSSH_keys , но это неудобно, потому что каждый раз, когда вы добавляете или удаляете пользователя, вам нужно будет редактировать этот файл на всех серверах. Однако есть более универсальный и простой способ. Просто создайте запись в блокчейне Emercoin, например kamilloFriends, и перечислите всех своих друзей. Поля для такой записи следующие:

"name" : "ssh:kamilloFriends"
"value" : "@kamillo|@friend1|@friend2|@friend3"

Если вам нужно добавить или удалить кого-то из группы, достаточно будет сделать Name_Update для этой записи в кошельке Emercoin. Таким образом, если в файле EmerSSH_keys я укажу группу @kamilloFriends, система сможет авторизовать любого из моих друзей.

Проверка работоспособности

Чтобы убедиться, что все работает должным образом, выполните следующую команду:

$ EmerSSH <username>

На моем тестовом сервере я работаю от пользователя root, поэтому команда для моего имени пользователя будет:

$ EmerSSH root

В ответ мы получаем следующее сообщение:

#INFO: verbose=2; maxkeys=4096 recursion=30 EmerSSH_keys=/root/.ssh/EmerSSH_keys; [email protected]:8775/
#Path=/
#Path=/kamillo/
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAgEAgmzL............

Как и ожидалось. Все работает. Теперь попробуем авторизоваться.

Не закрывая текущий сеанс, разрешите PuTTY войти в систему без пароля. Для этого откройте новое окно PuTTY, введите IP-адрес вашего сервера, затем перейдите к SSH> Auth в PuTTY:

emerssh 03

Нажмите Browse …​ и укажите путь к вашему закрытому ключу.

На вкладке Connection → Data мы можем указать пользователя, под которым мы хотим подключиться. Если не указано иное, не беспокойтесь - в этом случае сервер запросит имя пользователя при подключении.

emerssh 04

Нажмите «Open» и подключитесь к серверу. Если он подключается, поздравляю, у вас все получилось!

Если по какой-либо причине соединение не удается, откройте окно предыдущего сеанса и введите следующую команду:

$ cat /var/log/auth.log

Внимательно ищите там сообщения об ошибках и ищите решения проблемы. И если вы не можете это исправить, обратитесь за помощью.

Наконец, вот еще одна полезная команда, которая показывает, когда посетители входят в систему:

$ grep "Accepted publickey" /var/log/auth.log
Дополнительная информация для пользователей MacOS X

Чтобы иметь возможность войти на сервер с поддержкой EmerSSH через терминал в OS X, вам сначала необходимо преобразовать свой закрытый ключ в желаемый формат. Конвертирование делал в Windows через программу PuTTYgen. Лучше установить пароль для вашего ключа, так как OS X будет жаловаться на это (в будущем вам нужно будет вводить пароль только один раз).

Запускаем PuTTYgen, нажимаем Load и выбираем наш ключ * .ppk. Затем установите пароль в Key passphrase и Confirm passphrase. Переходим во вкладку Conversions и экспортируем ключ в формате OpenSSH:

emerssh 05

Теперь мы хотим добавить ключ в систему OS X. Откройте терминал и перейдите в папку, в которую вы экспортировали ключ. У меня есть папка Ключи:

$ cd Keys

Установите ключ только для чтения, иначе система пожалуется:

$ chmod 0400 <your_key_file>

Добавьте ключ:

$ ssh-add <your_key_file>

В ответ мы получаем сообщение о том, что идентификатор был добавлен. Проверяем соединение командой:

$ ssh root@<your_server_ip>

Если сервер не запрашивает пароль, значит, все в порядке.

Больше информации вы можете найти в статье: Что такое EmerSSH? FAQ(Eng).

2.4. EmerDPO

Чем бы вы ни владели, соответствующие данные обычно хранятся в централизованных базах данных — открытые для всевозможного «централизованного» манипулирования. EmerDPO устроен по-другому.

Он представляет собой децентрализованную «картотеку» сертификатов собственности, в которой нет единого центра управления.

Будь то права собственности на землю, автомобили или софт — с EmerDPO вы можете всегда быть уверенными, что всё, чем вы завладели, останется документированно вашим.

При помощи блокчейна Emercoin EmerDPO позволяет децентрализованно подтверждать собственность и достоверность как физических, так и цифровых товаров и услуг. В рамках NVS система работает под абревиатурой “dpo”.

Подтверждение собственности — щекотливая тема во многих областях, от софта до недвижимости и от транспорта до искусства. Делать это через «бумажные» сертификаты накладно и чревато мошенничеством, подделками и даже кражами.

Блокчейн Emercoin же позволяет однозначно относить как физические, так и цифровые товары к собственности того или иного владельца.

Узнайте больше о подтверждении достоверности и собственности при помощи EmerDPO на сайте emcdpo.info.

emerdpo big

EmerDPO - это децентрализованное решение для проверки цифрового доказательства владения (подлинности) как физических, так и цифровых товаров и услуг с использованием блокчейна Emercoin. EmerDPO работает под аббревиатурой «dpo» в Emercoin NVS .

При использовании технологии pre-blockchain существует множество проблем с подтверждением прав собственности в ключевых областях экономической деятельности, таких как лицензии и подписки на программное обеспечение, права собственности на землю и документы, музыка, произведения искусства, бриллианты, регистрация транспортных средств и многое другое. Традиционные методы, используемые для подтверждения прав собственности с помощью письменных записей и лицензионных ключей, обременительны и открывают возможность мошенничества, подделки и даже кражи.

Благодаря аутсорсингу фактора доверия к блокчейну Emercoin физические и цифровые товары теперь могут быть закреплены за неизменным доказательством права собственности их соответствующим владельцам.

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

Больше информации
  • Как защитить свою продукцию от подделки с помощью блокчейна.

  • Узнайте о SN-Publisher, утилите для автоматизации вставки серийных номеров EmerDPO в блокчейн Emecoin

2.5. ENUMER

enumer big
  • PSTN — Public Switched Telephone Network

2.5.1. Описание

В мире всё большее применение находит IP-телефония, которая обладает рядом преимуществ по сравнению с классической. IP-решения как правило дешевле классических и обладают большей функциональностью. В настоящее время IP ATC находят применение в различных организациях, но основные телефонные сети продолжают использовать классические решения, пусть даже и на базе цифровых АТС. В результате такого положения вещей, связь даже между двумя IP ATC происходит через обычную телефонную сеть, PSTN. Рассмотрим пример:

Пусть у нас есть организация «Покупатель», и другая организация, «Продавец». Обе организации используют для своих внутренних нужд IP ATC (также называемые PBX). Пусть сотрудник Покупателя нашёл в рекламе объявление Продавца, которое его заинтересовало. Покупатель решил позвонить Продавцу, и набирает его номер. Вызов происходит следующим образом:

Телефон покупателя

PBX Покупателя

Цепочка провайдеров PSTN

PBX Продавца

Телефон Продавца

При этом звонке, происходит соединение двух IP ATC через цепочку PSTN провайдеров, и соответственно покупатель платит за звонок провайдеру, который перенаправляет звонок из VOIP-сети в PSTN-сеть (приземляет звонок). Ну а далее идут взаимозачёты между PSTN-провайдерами, которые нас не интересуют.

Если бы IP_AC_покупателя «знала бы дорогу», она могла бы через Интернет напрямую соединиться с IP_ATC_продавца, и тем избавила бы покупателя от платежа PSTN-приземлятелю, и звонок бы вышел бесплатным:

Телефон покупателя

PBX Покупателя

PBX Продавца

Телефон Продавца

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

Понятно, что «знать все дороги», то есть поддерживать всевозможную карту прямых IP-соединений весьма трудоёмко, и был разработан сетевой протокол преобразования номера телефона в «дорогу», то есть в URI, который назвали ENUM.

2.5.2. ENUM

Протокол ENUM (rfc6116) работает как распределённая адресная книга, и позволяет по номеру телефона «найти дорогу» к соответствующей IP ATC, которая обслуживает этот номер. Описание протокола: en.wikipedia.org/wiki/Telephone_number_mapping

Идея использования протокола состоит в следующем:

  • Продавец регистрирует свою IP ATC (PBX) в системе ENUM.

  • При звонке IP ATC покупателя перед использования PSTN-сети пытается найти «короткую дорогу», для чего делает запрос в систему ENUM.

  • Если в системе есть «короткий путь» — АТС покупателя использует его. Если же нет — то она использует стандартный путь, через PSTN, и платит за приземление звонка обычным образом.

Преимущества ENUM

Использование ENUM даёт выгоду как для инициатора, так и для получателя звонка. Для них это:

  • Улучшение качества сигнала за счёт прямого цифрового соединения.

  • Повышенная скорость и надёжность соединения.

  • Обход лимита PSTN-оператора на количество линий или использованных минут.

  • Невозможна ситуация отказа в обслуживании по причине перегрузки оператора.

  • Для звонящего — звонок всегда бесплатен (прямая экономия).

  • Для получателя — бесплатен тоже, даже если у него toll-free number, когда он должен платить за входящие (тоже экономия).

  • Использование ENUM происходит автоматически, незаметно для пользователей, и требует только минимального конфигурирования IP ATC.

Протокол ENUM прост и легковесен, технически эффективен, и все наиболее популярные IP ATC его поддерживают. Тем не менее, широкого распространения от не получил, и тому есть ряд причин организационно-экономического характера, ставшими проблемами для широкого внедрения. Рассмотрим их подробнее.

Проблемы текущих реализаций ENUM
  1. Первая проблема ENUM — то, что сейчас просто нет такого места, где бы владелец обычной IP ATC мог бы зарегистрировать свой номер (или несколько номеров) и соответствующие SIP URI. Вернее — такие места были, например, freenum.org или e164.org. Но freenum давно недоступен, а e164.org прекратил работу в ноябре 2016. Да, где-то продолжают какое-то существование ENUM-сервера типа e164.arpa. Но это сервис — не для владельцев IP ATC или частных лиц, а «межпровайдерный узел», где крупные и взаимно проверенные VOIP-провайдеры дают информацию о возможности приземления в их сети. Эдакий «междусобойчик для своих», куда обычному владельцу IP ATC дороги нет.

  2. Вторая проблема — критическая зависимость работы сети от централизованного сервиса, который может вести себя некорректно, или вообще не работать. Наглядный тому пример — e164.org. В последние 2 года — работал нестабильно, и кроме того, занимался непотребством, например — несмотря на зарегистрированные у него toll-free номера, направлял трафик не на IP ATC абонентов, а на «своих приземлятелей», которые естественно не забывали выставлять счета за доставленный по PSTN-сети звонки. Естественно, это поведение приводило к тому, что у владельцев toll-free номеров пропадал экономический стимул регистрировать эти номера в e164.org. А примерно за месяц до закрытия — e164.org вообще перестал отдавать ENUM-ответы, несмотря на то, что записи в нём содержались корректные (мы проверяли).

  3. Так как классическая централизованная ENUM-система пользуется транспортом DNS, она уязвима против всевозможных атак на инфраструктуру DNS, таких как DNS-Spoofing, DNS-hijacking, и им подобных. Естественно, сбои в DNS-системе также приводят к отказу в обслуживании и в системе ENUM.

  4. Ну и последнее, но важное: Нагрузка на такой сервер получается весьма большой, ибо запрос делается при попытке каждого звонка с IP ATC. Да, запросы кэшируются промежуточными DNS-серверами, но тем не менее — нагрузка всё равно остаётся высокой для сервера, обслуживающего все телефонные станции всего мира. Как следствие — отказы в обслуживании или задержки с обработкой запросов, а также высокая цена серверной инфраструктуры.

Вышеназванные причины «провала» имеют организационно-технический характер, проистекающий из централизованной организации сервиса и непрозрачности алгоритма разрешения запроса. Действительно, централизованная реализация ENUM, как и любого сетевого сервиса, зависит от работоспособности сайта, который обслуживает создание ENUM-записей и поддержку их актуальными, а также соответствующего DNS-сервера, который разрешает ENUM-запросы. Иными словами, доверие к такой ENUM-системе не может превышать доверия к организации, которая управляет этой системой. Доверие также снижает тот факт, что совершенно неизвестен алгоритм и критерии, по которым тот или иной централизованный сервис разрешает ENUM-запросы. Так, например, сегодня он может работать как надо, а завтра — перенаправлять куда следует звонки на некий номер, интересующий компетентных товарищей (которым дело до всего). Например, на промежуточный VOIP-узел, который в свою очередь может сделать с трафиком всякое. Почему вдруг перенаправлять? Ну может быть, владелец номера играет джаз…

Соответственно, выход из строя такого сервиса приводит к одномоментному останову всей сети. Оба эти недостатка в полной мере продемонстрировал e164.org: сначала перенаправлял toll-free звонки не на зарегистрированные номера, а на своего провайдера-приземлятеля, потом вообще отвечал пустыми ответами, а в завершение эпопеи вышел из бизнеса, со всеми базами.

ENUMER — децентрализованный ENUM

Для решения указанных выше проблем мы разработали децентрализованную систему ENUM на базе блокчейна Emercoin. Проект получил название «ENUMER», произошедшее от слов «ENUM» и «Emer». Кратко говоря: ENUM+EMER=ENUMER.

Криптовалюты являются трендом современной финансовой индустрии, и в настоящее время активно развиваются. Основой же всех криптовалют, включая Emercoin, является блокчейн — распределённая доверенная публичная база данных платёжных операций.

Особенностью Emercoin является NVS (Name-Value Storage) — распределённое доверенное хранилище информации общего назначения. То есть каждый участник сети имеет достоверную локальную копию всего блокчейна, и следовательно — всего содержимого NVS, а доверие к содержимому NVS, также как и всему блокчейну, создаётся посредством консолидированных усилий майнеров доказательства работы POW и доказательства доли POS.

На базе этого хранилища уже созданы и эксплуатируются системы безопасности emerSSH/emerSSL, а также неуязвимая децентрализованная система доменных имён EmerDNS.

Данный проект децентрализованного ENUM основан на системе EmerDNS, и обладает следующими преимуществами перед классической централизованной реализацией ENUM:

  • Высокая скорость разрешения ENUM-запросов в силу локальности их обработки.

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

  • Анонимность ENUM-запросов. Так как запросы не покидают локального компьютера или доверенной локальной сети, никто снаружи не может узнать, что происходит и кого вообще ищут.

  • Невозможность атаки на DNS-инфраструктуру вследствие отсутствия таковой [3].

  • В силу истинной децентрализации сети, доверие к сети не зависит от доверия к какой-либо одной компании. Невозможна ситуация, когда вся система будет остановлена по решению кого-либо одного [2]. Сеть ENUM будет продолжать работать, пока сотни независимых майнеров закрывают блоки и подтверждают консенсус блокчейна.

  • Алгоритм обработки ENUM-запроса выполняется на стороне запрашивающего. Программный код, который это делает, доступен на Github, и может быть проанализирован кем угодно на предмет корректности. Невозможна ситуация, когда ENUM-сервер меняет правила по ходу игры. То есть запрашивается собственный локальный сервер посредством локального соединения (или через доверенную сеть).

  • В силу децентрализованности пиринговой сети Emercoin, она масштабируется неограниченно. Следовательно, нет «узкого горла», в котором фокусируются запросы со всего мира. Каждый может поставить себе сколько угодно независимых узлов EmerCoin, и разрешать свои ENUM-запросы на этом кластере. То есть решена проблема [4].

  • ENUM-записи создаются и модифицируются самими же пользователями, через локальный кошелёк EmerCoin. Таким образом, не требуется сервер или другое место [1], куда надо вносить информацию. Каждый пользователь делает это у себя локально, а «место, куда сообщать о себе» — становится просто не нужным. Каждый сообщает своему локальному кошельку, а тот уже транслирует ENUM-запись в пиринговую сеть.

В результате, получаем систему:

  • Быструю

  • Надёжную

  • Защищённую

  • Масштабируемую

  • Не зависящую критически от кого бы то ни было

  • Не подверженную выходу из строя вследствие волюнтаристского решения

  • Без возможности блокировки неугодных

  • С прозрачным алгоритмом разрешения запросов

  • С возможность управления записью через локальный кошелёк, а не «сервер в интернете»

Но при таких впечатляющих преимуществах, децентрализованный ENUM имеет и свои специфические проблемы, связанные с публичной доступностью инфраструктуры. Так, кто угодно может создать запись с любым содержимым, и захватить запись, соответствующую чужому телефонному номеру, и её содержимым либо заблокировать ENUM-доступ для истинного хозяина телефона, либо того хуже — перенаправить звонок куда-либо не туда. Звонишь, например, в прачечную, а попадаешь в министерство культуры…

Для предотвращения подобных злоупотреблений, в системе предусмотрены верификаторы. Это агенты, которые проверяют, что та или иная ENUM-запись действительно принадлежит владельцу соответствующего номера, и после этого передают владельцу ENUM-записи подпись — вердикт того, что запись верная, и ею можно пользоваться. Также с целью пресечения злоупотреблений система ENUMER работает только с индивидуальными телефонными номерами. То есть невозможно одной ENUM-записью отхватить изрядный кусок номерного пространства.

Как создать верифицированную запись в системе ENUMER

Владелец IP ATC, желающий получать звонки с использованием ENUM, должен вначале настроить свою IP ATC таким образом, чтобы иметь возможность получать входящие звонки на SIP URI «из мира». Детали настройки зависят от конкретной IP АТС (PBX) и сетевого окружения, и ничем не отличаются от обычный настройки PBX без блокчейна.

После этого надо разместить в EmerCoin NVS верифицированную ENUM-запись, которой и будут пользоваться звонящие. Для этого надо предпринять следующие действия:

Установить кошелёк Emercoin Кошелёк (узел) Emercoin является клиентской программой распределённой ENUM-сети (да и не только ENUM), и чем-то вроде «личного кабинета», где пользователь может создать свои ENUM-записи и потом обновлять их по мере необходимости. Кошелёк можно скачать тут.

Для управления записями рекомендуем использовать GUI-кошелёк для Вашей ОС.

После скачивания и запуска, подождите, пока кошелёк не синхронизирует локальную копию блокчейна. Это может занять несколько часов.

Получить монеты EMC Далее, надо где-то приобрести монет EMC, необходимых для загрузки и обновления записей в NVS. Их можно приобрести на одной из бирж, либо же обратиться к разработчикам. Для резервирования одной записи на 10 лет и нескольких последующих обновлений требуется примерно 0.05EMC, что по текущему курсу составляет $0.06. В общем, цена вполне приемлема. А если принять во внимание, что в скором времени цена на NVS-запись будет снижена в 100 раз, можно считать расходы на обслуживание ENUMER-записи близкими к нулю.

Адрес, куда получать монеты, находится в меню “File/Receiving Addresses”, и выглядит примерно так:

ERFJfQGwmZEomHQHGZsRFLZEyBxaWsCHTo

Создать ENUM-запись

Для хранения ENUM-записей используется доверенное децентрализованное хранилище — EmerCoin NVS (Name-Value Storage). Доступ к записям NVS делается либо через GUI кошелька в табе “Manage Names”, либо командами JSON API, приведёнными в документации. NVS-запись, как явствует из названия, состоит из Имени (Name) и значения (Value).

enumer

Name

Для подсистемы ENUM имена записей имеют следующий вид:

enum:phone_num:N

Здесь: * enum — префикс сервиса * phone_num — телефонный номер в формате E164 * N — номер попытки для борьбы со скваттерами (десятичное число)

Например:

enum:18009359935:0

Если про префикс сервиса и номер и так всё понятно, то назначение параметра N нуждается в разъяснении. Это число нужно, чтобы защитить истинного владельца номера от скваттеров, которые могут захватить ENUM-запись, соответствующую чужому номеру, и посредством неё пробовать делать всякие нехорошие вещи. Использовать засквоченную запись они по любому не смогут (см. про верификацию ниже), но при отсутствии номера попытки N у настоящего хозяина номера не будет возможности внести свою запись. В случае же использования номера N реальный хозяин телефонного номера может создать запись с первым свободным значением N. Например предположим, что Вы хотите создать ENUM-запись для телефонного номера 18009359935, а приведённое в примере выше — уже захватил какой-то скваттер. Не беда, создайте имя «enum:18009359935:1», и после верификации система будет верить именно Вашему имени, а скваттеру останется любоваться бесполезной записью, в которой он сжёг свои монеты. Если и это имя засквочено — попробуйте создать запись с номером N=2, и так далее.

Value

Поле Value cостоит из нескольких строк. Строки — либо U-директивы NAPTR (rfc3402) ENUM(начинаются с E2U), либо подписи верификаторов (начинаются с SIG). Одна ENUM-запись может иметь как несколько директив, так и несколько подписей от различных верификаторов. Пример value, включающий U-директирву и подпись:

E2U+sip=100|10|!^(.*)$!sip:[email protected]!
SIG=ver:enum|IC00zMELlEwmMHLpQs8=

У Вас пока нет подписей (строки подписей Вас предоставят верификаторы), поэтому при создании записи внесите только U-директивы (хотя бы одну), которые и обеспечат направление звонков на Вашу IP ATC. Структура директив следующая:

Service=Priority|Preference|Regex

В примере выше:

Service -> E2U+sip
Priority -> 100
Preference ->10
Regex -> !^(.*)$!sip:[email protected]!

Смысл полей и их названия соответствуют стандартам классического ENUM. Для тех, кому лень читать документацию, краткая инструкция для начинающих:

Почти всегда сервис — это как в примере выше, E2U+sip для SIP IP ATC. Возможны другие варианты, например E2U+iax или что-либо подобное. Как упоминалось выше, в ENUM-записи может присутствовать несколько U-директив.

Priority, Preference — оставьте как в примере для начала. Не рекомендуется их сильно уменьшать.

Самое главное — это Regex. Это правило, по которому телефонный номер преобразовывается в SIP URI. Разделителем выступает “!”. В первой части — regex накладывается на телефонный номер, а во второй — этот номер подставляется вместо \1, и тем самым формируется SIP URI. Ещё хороший пример использования regex:

!^\+?441865332(.*)$!sip:\[email protected]!

Провести верификацию

Итак, ENUM запись создана, и блокчейн её принял. Она уже всем доступна. Но IP ATC звонящих её дружно игнорируют, так как в ней нет подписей верификаторов, которым они верят. И это — правильно. Ибо мало ли кто создал запись с Вашим телефонным номером? И что, теперь весь трафик отправлять куда там указано, не глядя? Нет, трафик будут отправлять только на основе верифицированных записей, содержащих подпись верификатора.

В настоящее время ещё не сделана система автоматической верификации, но в планах стоит её изготовление и ввод в эксплуатацию. Если Вы желаете поучаствовать в партнёрстве по созданию и эксплуатации подсистемы автоматической верификации, свяжитесь с нами: [email protected]. Покамест же верификация происходит через человека-оператора.

Для получения подписи напишите e-mail на адрес [email protected]. В письме укажите NVS-имя Вашей записи ENUMER, например: enum:18009359935:0. В течение нескольких дней оператор проверит наличие записи, и сделает тестовый звонок на соответствующий номер, чтобы убедиться, что хозяин номера в курсе запроса и согласен использовать ENUMER. После успешной верификации мы отправим ответ, содержащий подпись, которую Вы и внесёте в Вашу NVS-запись. После внесения подписи, Ваша запись станет доверенной, и другие пользователи смогут её использовать для прямых звонков в Ваш PBX.

Добавить подпись верификатора в свою ENUM-запись

Внеся эту подпись в Вашу ENUM-запись и выполнив NAME_UPDATE, Вы доказываете всем владение номером, и звонящие (клиенты ENUMER-а), которые верят данному верификатору, будут отправлять звонки не на PSTN, а на SIP URI Вашей IP ATC.

В ЕNUM-записи подписей может быть несколько, от разных верификаторов. Клиент пользуется ENUM-записью, если там присутствует хотя бы одна подпись от одного из тех верификаторов, которым он верит.

После добавления подписи — Ваша ENUM-запись активна, и клиенты ENUMER-а могут звонить Вам напрямую, не используя PSTN-сети.

Как звонить, используя ENUMER (клиент) Теперь, после того, как запись о Вашей IP ATC внесена в ENUMER, осталось начать пользоваться системой на благо себя и других абонентов. Для этого надо сделать, чтобы Ваша IP ATC посылала ENUM-запросы в Emercoin NVS.

Использование сервиса enum.enumer.org Мы создали публичный шлюз в ENUMER, и любой пользователь PBX безо всяких настроек блокчейна и тп может им пользоваться в своей АТС. Для этого надо послать ENUM-запрос в DNS: на резолвер enum.enumer.org. Пример тестового запроса из командной строки и ответа:

$ dig -t naptr +short 53995390081.enum.enumer.org
100 10 "u" "E2U+sip" "!^(.*)$!sip:\\[email protected]!"

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

Разворачивание шлюза в EmerDNS Наиболее правильный, быстрый и безопасный вариант — поставить у себя демон-кошелёк EmerCoin, и развернуть шлюз в emcDNS в локальной сети или даже на сервере, где работает IP ATC. Документация по разворачиванию такого шлюза — {https://emercoin.com/documentation/blockchain-services/emerdns/emerdns-introduction/}[тут]. Смотрите раздел «Интеграция в обычное DNS дерево».

В конфиг BINDa (или другого DNS-proxy) необходимо будет добавить ссылку на пятую зону «enum» по аналогии с четырьмя уже имеющимися от EmerDNS.

Кроме того, в конфиге кошелька emercoin.conf необходимо добавить «$enum» к списку обслуживаемых зон, как в примере ниже. Использование знака «$» вместо точки указывает кошельку, что эта зона будет обслуживаться по правилам ENUM rfc6116. Кроме того, в конфиг кошелька необходимо добавить два параметра, специфичных для ENUM:

  • Список доверенных верификаторов enumtrust (в примере ниже — ver:enum|olegh)

  • Имя файла или ссылка на NVS-запись (ссылка начинается с ‘@’), содержащая список правил для попытки отработать toll-free звонки через публичных приземлятелей, если в ENUMER-e ничего не было найдено для искомого номера. Это enumtollfree.

  • В примере ниже, в качестве такого списка выступает ссылка на NVS-запись enum:tollfree, которая в настоящее время содержит правила для приземления toll-free звонков в США, Францию и Польшу. Мы будем поддерживать актуальность этой записи, и добавлять пути на другие страны по мере появления соответствующих приземлятелей.

Таким образом, в конфигурационный файл emercoin.conf надо добавить следующие строки:

emcdnsallowed=$enum|.coin|.emc|.lib|.bazar # Allowed TLDs, including ENUM
enumtrust=ver:enum|olegh
enumtollfree=@enum:tollfree

Для тестирования настроек, попробуйте вручную послать ENUM-запрос в DNS:

$ dig -t naptr +short 53995390081.enum localhost

Ответ должен быть примерно таким:

100 10 "u" "E2U+sip" "!^(.*)$!sip:\\[email protected]!"

Если не работает что-то — попробуйте послать запрос непосредственно в кошелёк, на порт 5335:

$ dig -t naptr +short 53995390081.enum localhost –p 5335

И локализовать место сбоя. Но при правильной настройке — всё работает сразу и без проблем.

Подключение IP ATC

Это проще всего. В dialplan-e IP ATC надо указать, что после разрешения внутренних и корпоративных номеров, но перед переходом к PSTN-провайдерам, делаем запрос в ENUMER. Естественно, перед запросом надо привести искомый номер к формату ITU-T E164.

Ниже приведён пример фрагмента dialplan-a для FreeSWITCH, который сначала приводит номер к формату E164 без лидирующего плюса, а потом делает запрос в ENUMER, добавляя плюс при запросе. Если ENUMER не может помочь — делается запрос в e164.arpa. Ну и если и там ничего нет — то dialplan переходит к PSTN-приземлятелям. Аналогичный фрагмент dialplan-a можно создать для другой IP ATC, поддерживающей ENUM (Asterisk, Yate, etc).

<!-- Normalize numbers to ITU-T E164 without PLUS -->
<extension name="Normalize to ITU-T E164 without PLUS">
  <condition field="destination_number" expression="^(?:\+|011|00)(\d{7,})$" break="on-true">
    <action application="transfer" data="$1"/>
  </condition>
  <condition field="destination_number" expression="^(\d{10})$" break="on-true">
    <action application="transfer" data="1$1"/>
  </condition>
  <condition field="destination_number" expression="^(\d{7})$" break="on-true">
     <action application="transfer" data="1${home_code}$1"/>
  </condition>
</extension><!-- Lookup E164 with PLUS in the ENUMER and e164.arpa -->
<extension name="Lookup ENUM" continue="true">
  <condition field="destination_number" expression="^(\d{7,})$" break="on-true">
    <action application="ring_ready"/>
    <action application="set" data="hangup_after_bridge=true"/>
    <action application="set" data="continue_on_fail=true"/>
    <action application="set" data="effective_caller_id_name=+15553550000"/>
    <action application="set" data="effective_caller_id_number=+15553550000"/>
    <action application="enum" data="+$1 enum"/>
    <action application="bridge" data="${enum_auto_route}"/>
    <action application="enum" data="+$1 e164.arpa"/>
    <action application="bridge" data="${enum_auto_route}"/>
    </condition>
</extension>

Автоматическая валидация телефонных номеров enumer.bitname.ru - позволяет за один EMC валидировать номер и получить на свой кошелёк ENUM-запись

2.6. EmerLNX (Dead)

pass

2.7. EmerTTS (Possible Dead)

pass

2.8. EmerMagnet

EmerMAGNET - это хранилище магнитных ссылок BitTorrent под аббревиатурой сервиса «magnet» в EmerNVS.

Разместив ссылку в Emer, вы никогда не потеряете свой любимый торрент.

Как это работает? Блокчейн хранит вечно любую информацию, верно? Вот мы и подумали, сколько бывало — ищещь какой-нибудь старый фильм, а его и след простыл, остались только левые копии с совсем не тем перводом и т.п. Так вот, магнет-ссылка в блокчейне никуда не денется и придет время, её обязательно найдут. (правда останутся ли копии того фильма на дисках энтузиастов, но это другой вопрос)

EmcMAGNET - это хранилище магнитных ссылок BitTorrent под аббревиатурой сервиса «magnet» в Emercoin NVS.

Магнитные ссылки должны использовать следующий формат имя→ значение :

"name" : "magnet:Emercoin 0.3.2 for Linux - packed as tar.gz, original file from emercoin.com"
"value" : "magnet:?xt=urn:btih:dff183bcac72a628fcac88ac1c85c239b806fd5e&dn=emercoin-0.3.2-linux.tar.gz"

Список всех магнитных ссылок можно получить с помощью следующей команды с Emercoin API :

$ emercoin-cli name_filter '^magnet:'

2.9. FileValidator

FV — сервис проверки целостности файлов, полученных из недостоверных источников.

Файл (программа или документ) подписывается разработчиком или издателем, и цифровые подписи файла публикуются в блокчейн.

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

Также FV-записи в блокчейне Emer имеют достоверные метки времени, и можно узнать, кто и когда опубликовал ту или иную подпись, а также когда созданы записи подписантов.

2.9.1. Как это работает

Рассмотрим работу системы на реальном примере. Пусть есть издатель Emercoin, который сам себе валидатор (простейший случай). Издатель выпустил бинарный файл-инсталлятор кошелька Emercoin для Windows, имя файла: emercoin-0.7.10-win64-setup.exe.

Издатель

Издатель Emercoin желает воспользоваться предлагаемой системой FV для того, чтобы пользователи могли проверить полученный бинарный файл и убедиться, что они получили именно то, что распространяет издатель.

Для этого он хеширует файл алгоритмом sha256 (система предполагает смену алгоритма при необходимости), и получает хеш файла:

169dc5dd293cd82f84737055403ae87a62008072d785376f56f6d309288a092a

Издатель на основе хеш-суммы создаёт поисковое имя, которое будет выступать ключом в Emercoin NVS:

fv:sha256=169dc5dd293cd82f84737055403ae87a62008072d785376f56f6d309288a092a

Здесь:

  • fv: Префикс сервиса, File Validator

  • sha256: алгоритм хеширования (дефолтный sha256, но возможна в будущем замена на другие алгоритмы)

  • hex-строка: хеш-сумма файла.

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

Валидатор

Валидатор имеет в Emercoin NVS уникальное имя, с которым связан Emercoin address. Имя имеет префикс сервиса val:, и может содержать только латинские символы нижнего регистра, а также точку и минус. То есть разрешённое множество символов: [a-z.-]. Пробелы, табуляции, спецсимволы или символы национальных кодировок также запрещены. Это ограничение призвано заблокировать манипуляции, позволяющие создавать внешне похожие имена валидаторов и от их имени подписывать всякое. Типичный пример такой манипуляции — внешне похожие, но отличающиеся имена: paypal - paypaI – paypa1.

Например, имя валидатора olegarch — корректное, а имя o1egarch — некорректное, так как содержит цифру 1.

В нашем примере, валидатором выступает Emercoin, владеющий NVS-именем: val:emercoin связанным с адресом:

EcXrMDf8YyLMFk6RCnkAnPm9fmDBfu5eQX

На основании полученного файла, валидатор создаёт поисковое имя аналогично тому, как это сделал издатель. После этого издатель создаёт строку для подписи:

emercoin|100|fv:sha256=169dc5dd293cd82f84737055403ae87a62008072d785376f56f6d309288a092a

Здесь:

  • emercoin: NVS-имя валидатора.

  • 100: Уровень доверия (зарезервировано для дальнейшего использования).

  • fv..f6: поисковое имя, аналогичное таковому у издателя.

Эту строку валидатор подписывает командой signmessage в своём кошельке адресом:

EcXrMDf8YyLMFk6RCnkAnPm9fmDBfu5eQX

связанным с именем валидатора val:emercoin:

signmessage  EcXrMDf8YyLMFk6RCnkAnPm9fmDBfu5eQX em..f6

Полученную цифровую подпись:

IH0yysgQpP1xIjRcJPrWaDVrl9B35BfrNcgOdwNm1gjFeE2zpKZZooSd55LydWlPnnlfnLiI+2Q1VUzzsD/8irE=

валидатор передаёт издателю.

Издатель, получив подпись от валидатора, создаёт и публикует в блокчейне NVS-запись, где в качестве имени выступает поисковый ключ, а value содержит строку с подписью:

SIG=emercoin|100|IH0yysgQpP1xIjRcJPrWaDVrl9B35BfrNcgOdwNm1gjFeE2zpKZZooSd55LydWlPnnlfnLiI+2Q1VUzzsD/8irE=

Здесь:

  • SIG=: Префикс, специфицирующий цифровую подпись.

  • emercoin: NVS-имя валидатора.

  • 100: Уровень доверия (зарезервировано для дальнейшего использования).

  • IH..E=: цифровая подпись валидатора.

Value может содержать несколько строк-подписей и другие строки, содержащие произвольную информацию о подписываемом файле. Например, реальная NVS-запись о нашем файле имеет структуру:

Name:

fv:sha256=169dc5dd293cd82f84737055403ae87a62008072d785376f56f6d309288a092a

Value:

Emercoin core wallet, full node
File: emercoin-0.7.10-win64-setup.exe
Download: https://emercoin.com/en/for-coinholders#download
SIG=emercoin|100|IH0yysgQpP1xIjRcJPrWaDVrl9B35BfrNcgOdwNm1gjFeE2zpKZZooSd55LydWlPnnlfnLiI+2Q1VUzzsD/8irE=
SIG=olegarch|100|H32Bp3cLoqBFvlyUIIXLrKX3TD+IG2aX2dmegy4oIxGEWeKBw9YTITKWaFWM4UdejEgpH5em4Gi/ZfoZFU69Owk=

Здесь мы видим, что информация о файле содержит подписи от двух валидаторов — emercoin и olegarch.

Пользователь

Пользователь, получив файл из недоверенного источника, желает убедиться, что данный файл – именно тот, который опубликовал издатель. Для этого он предпринимает следующие действия.

Хеширует файл, и получает его хеш sha256, например командой:

$ sha256sum emercoin-0.7.10-win64-setup.exe
169dc5dd293cd82f84737055403ae87a62008072d785376f56f6d309288a092a  emercoin-0.7.10-win64-setup.exe

На основании полученной хеш-суммы пользователь формирует поисковое имя аналогично тому, как это делал издатель (см выше):

fv:sha256=169dc5dd293cd82f84737055403ae87a62008072d785376f56f6d309288a092a

Извлекает из Emercoin NVS информацию о полученном файле, посредством команды name_show:

name_show fv:sha256=169dc5dd293cd82f84737055403ae87a62008072d785376f56f6d309288a092a

{
"name": "fv:sha256=169dc5dd293cd82f84737055403ae87a62008072d785376f56f6d309288a092a",
"value": "Emercoin core wallet, full node\nFile: emercoin-0.7.10-win64-setup.exe\nDownload: https://emercoin.com/en/for-coinholders#download\nSIG=emercoin|100|IH0yysgQpP1xIjRcJPrWaDVrl9B35BfrNcgOdwNm1gjFeE2zpKZZooSd55LydWlPnnlfnLiI+2Q1VUzzsD/8irE=\nSIG=olegarch|100|H32Bp3cLoqBFvlyUIIXLrKX3TD+IG2aX2dmegy4oIxGEWeKBw9YTITKWaFWM4UdejEgpH5em4Gi/ZfoZFU69Owk=",
"txid": "a22fa9b5ac1725d30e6e6dc9bb2038b0a0afbe362031eb8b9d9a4392e0cc46ff",
"address": "EfsrojhfLGf6LPYRFytiaGRVwYmQ9KsWN5",
"expires_in": 957918,
"expires_at": 1391644,
"time": 1598137455
}

Из полученного результата, извлекает строки с подписями:

SIG=emercoin|100|IH0yysgQpP1xIjRcJPrWaDVrl9B35BfrNcgOdwNm1gjFeE2zpKZZooSd55LydWlPnnlfnLiI+2Q1VUzzsD/8irE=
SIG=olegarch|100|H32Bp3cLoqBFvlyUIIXLrKX3TD+IG2aX2dmegy4oIxGEWeKBw9YTITKWaFWM4UdejEgpH5em4Gi/ZfoZFU69Owk=

Пользователь верифицирует все или выборочно некоторые подписи следующим образом:

  • Из строки извлекает имя валидатора, в нашем примере emercoin.

  • Посредством запроса name_show на val:emercoin, получает EMC-адрес, связанный с этим именем:

    EcXrMDf8YyLMFk6RCnkAnPm9fmDBfu5eQX.
  • Извлекает из строки подпись валидатора IH..e=

  • Формирует строку для подписи аналогично тому, как это делал валидатор:

    emercoin|100|fv:sha256=169dc5dd293cd82f84737055403ae87a62008072d785376f56f6d309288a092a
  • Запросом verifymessage пользователь проверяет достоверность подписи:

    verifymessage адрес подпись строка_для_подписи

    В нашем примере – это:

    verifymessage  EcXrMDf8YyLMFk6RCnkAnPm9fmDBfu5eQX IH0yysgQpP1xIjRcJPrWaDVrl9B35BfrNcgOdwNm1gjFeE2zpKZZooSd55LydWlPnnlfnLiI+2Q1VUzzsD/8irE= emercoin|100|fv:sha256=169dc5dd293cd82f84737055403ae87a62008072d785376f56f6d309288a092a
  • Получив результат проверки, пользователь принимает решение, что делать с проверяемым файлом.

2.9.2. Как этим пользоваться

Выше, в разделе “как это работает”, был предоставлен пошаговый алгоритм как генерации и публикации подписей, так и проверки файлов. Понятно, что вручную все эти операции делать сложно, особенно для конечного пользователя. Поэтому для практического применения мы написали программу fv.php, которую можно скачать из репозитория Emercoin здесь.

Эта программа также является “референтной имплементацией” рассмотренных выше алгоритмов, и может быть использована в качестве практического примера для написания аналогичной программы или для интеграции системы FV в менеджеры пакетов или другие программы и сервисы.

Программа изначально написана для Linux/FreeBSD, но может быть запущена и из командной строки Windows, например в соответствии с инструкцией.

После скачивания, в программе необходимо отредактировать URL для подключения к локальному кошельку, установив там актуальные параметры username/password/port:

$emcCONNECT = "http://user:secret_pass@localhost:6662";

Также, возможно, для Windows надо удалить первую строку файла, специфицирующую интерпретатор:

#!/usr/bin/php

2.9.3. Использование программы

Тестирование

Вначале, надо убедиться, что программа запускается без ошибок и корректно подсоединяется к кошельку Emercoin:

$ ./fv.php -getinfo

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

Проверка файла

Для этого надо запустить программу с единственным параметром - именем файла, и она проведёт весь процесс валидации.

$ ./fv.php ./emercoin-0.7.10-win64-setup.exe

File info from NVS:
    Emercoin core wallet, full node
    File: emercoin-0.7.10-win64-setup.exe
    Download: https://emercoin.com/en/for-coinholders#download

Validation results:
    emercoin/EMERCOIN [Emercoin File Validator] created 2020-08-20 05:08; Signature PASSED
    olegarch/OLEGARCH [Oleg Khovayko FV] created 2020-08-20 02:08; Signature PASSED

В примере выше программа сообщает время создания NVS-записи для данного файла (слишком свежие записи для старых файлов могут вызвать подозрение), а также результаты проверок подписей. Здесь видно, что для данного файла подписи от обоих валидаторов проверки прошли успешно, и файл не содержит неавторизированных изменений.

Генерация подписи валидатора

Для генерации подписи, Ваш кошелёк должен содержать NVS-запись валидатора, и быть полностью разблокированным.

Для генерации подписи, необходимо указать программе имя файла, и строку, содержащую имя валидатора и уровень доверия (насколько валидатор доверяет издателю файла). Второй параметр надо взять в кавычки, иначе интерпретатор командной строки будет интерпретировать символ “|” как shell pipe.

Пример запуска и результат:

$ ./fv.php ./emercoin-0.7.10-win64-setup.exe 'olegarch|100'

FV signature for upload to NVS FV-record:

NVS Key:
fv:sha256=169dc5dd293cd82f84737055403ae87a62008072d785376f56f6d309288a092a

Signature line:
SIG=olegarch|100|H32Bp3cLoqBFvlyUIIXLrKX3TD+IG2aX2dmegy4oIxGEWeKBw9YTITKWaFWM4UdejEgpH5em4Gi/ZfoZFU69Owk=

В качестве результата, программа возвращает NVS-key и подпись для передачи издателю. Издатель может загрузить эти параметры в NVS, или же скомбинировать в value подписи от нескольких издателей.