1. Введение

Протокол запрос-ответ (также известный как доказательство с нулевым разглашением) - это фундаментальная операция для приложений на основе цепочки блоков, которая позволяет внешним сторонам получить доступ к приложению. Этот подход основан на шифровании с асимметричным ключом. В этой статье рассказывается о нашем опыте реализации аутентификации на основе протокола Challenge-response для приложения Балерина на основе технологии Blockchain.

2. Протокол "вызов-ответ"

Протокол "вызов-ответ" основан на концепции вызова объекта, который пытается получить доступ к услугам системы, чтобы сначала доказать, что он использует известный факт об этом объекте. Здесь мы используем метод шифрования с симметричным ключом как средство реализации протокола запрос-ответ. Сущность, которой требуется доступ к службам, сначала должна сгенерировать пару открытого / закрытого ключей и заранее зарегистрировать открытый ключ в службе. Сервис использует тот факт, что любую информацию, зашифрованную с помощью открытого ключа, можно расшифровать только с помощью соответствующего закрытого ключа. Следовательно, всякий раз, когда объект пытается получить доступ к сервису, ему предлагается расшифровать некоторый зашифрованный текст, используя закрытый ключ объекта для проверки его личности. Далее мы представим краткие обзоры технологий Ballerina и Blockchain, которые являются ключевыми технологиями, лежащими в основе нашего приложения.

3. Обзор технологии

Мы разработали приложение протокола запрос-ответ с технологиями Ballerina и Blockchain.

3.1 Балерина

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

3.2 Блокчейн

Блокчейн - это технология распределенного реестра с некоторыми особенностями. Блокчейн - это связанный список (т. Е. Цепочка) блоков. Блок - это группа упорядоченных транзакций. Блокчейн - это технология, которая позволяет перемещать цифровые активы / монеты от одного человека к другому. Блокчейн был предназначен для решения проблемы денежных переводов. Он основан на трех концепциях:

  • Все в сети могут видеть и подтверждать транзакции.
  • Распределенный реестр (существует во многих узлах)
  • Состоит из майнеров, которые являются специальными узлами в сети для проверки транзакций и добавления их в реестр, следовательно, для синхронизации реестра.

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

Далее мы опишем пример использования, в котором был применен протокол «запрос-ответ».

4. Пример использования приложения

Протокол "запрос-ответ" имеет разностороннее применение. Сценарий, который мы реализуем и представляем в этой статье, представляет собой приложение группового чата. Приложение чата доступно для группы пользователей, которые зарегистрировали свой открытый ключ в блокчейне. Если пользователь получает доступ к приложению чата, он может публиковать сообщения в интерфейсе группового чата. Сообщения транслируются всем подписанным пользователям в групповом чате. Пользователь может отправлять любое количество сообщений в приложение чата и выходить из системы в любое время, когда он / она пожелает. Однако их конверсии останутся в групповом чате. Следовательно, если пользователь снова войдет в систему через несколько секунд после выхода из системы, он / она сможет увидеть сообщения, опубликованные в предыдущем сеансе. Если попытка аутентификации не удалась, пользователь попадет на страницу сообщения об ошибке.

5. Осуществление

Процесс обработки, связанный с приложением, может быть показан, как показано на рисунке 1. Мы разработали приложение как взаимодействие между веб-браузером, службой Ballerina и блокчейном Ethereum. Сервис Ballerina работает как веб-сервер. Всякий раз, когда пользователь пытается получить доступ к приложению чата, он попадает на страницу входа пользователя в приложение чата Ballerina (см. Рисунок 1).

Рисунок 1. Страница входа в чат-приложение на основе блокчейна

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

Рисунок 2. Последовательность операций протокола запрос-ответ приложения чата

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

Адрес электронной почты пользователя отправляется в сервис Ballerina, который ищет соответствующий хеш открытого ключа в блокчейне. Мы используем смарт-контракт, показанный в листинге 1, для хранения хэша открытого ключа пользователя в цепочке блоков.

Листинг 1. Смарт-контракт для хранения и получения хэш-кодов открытых ключей пользователей

pragma solidity ^0.4.22;
contract registry {
string private miyurudatwso2dotcomHash;
string private isurupatwso2dotcomHash;
string private nadheeshatwso2dotcomHash;
function setmiyurudatwso2dotcom(string x) public {
miyurudatwso2dotcomHash = x;
}
function getmiyurudatwso2dotcom() public view returns (string) {
return miyurudatwso2dotcomHash;
}
function setisurupatwso2dotcom(string x) public {
isurupatwso2dotcomHash = x;
}
function getisurupatwso2dotcom() public view returns (string) {
return isurupatwso2dotcomHash;
}
function setnadheeshatwso2dotcom(string x) public {
nadheeshatwso2dotcomHash = x;
}
function getnadheeshatwso2dotcom() public view returns (string) {
return nadheeshatwso2dotcomHash;
}
}

Мы скомпилировали смарт-контракт с помощью remix IDE, получили Javascript-версию приложения и развернули ее в блокчейне Ethereum. Затем мы устанавливаем хэш-коды SHA-1 открытых ключей в цепочке блоков, используя операции установки смарт-контракта. Доступ к этим хеш-значениям осуществляется через операции получения. Обратите внимание, что мы предполагаем, что SHA-1 ведет себя как случайный оракул, который в основном возвращает случайные значения с условием, что после того, как он вернул выход A на входе B, он всегда должен после этого возвращать A на входе B.

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

Рисунок 3. Интерфейс группового чата

Хеш-значение используется для получения открытого ключа, который хранится на локальном диске компьютера, на котором запущена служба Ballerina. Открытые ключи каждого пользователя хранятся в текстовых файлах, которым присвоены имена с использованием хэш-кодов SHA-1, сгенерированных с их помощью. Затем сервис Ballerina генерирует случайную строку, шифрует ее открытым ключом пользователя и отправляет обратно в браузер. Если браузеру удалось расшифровать зашифрованный текст, служба Ballerina направляет браузер на домашнюю страницу чат-группы (показано на рисунке 3). Сервис Ballerina также поддерживает сеанс пользователя на карте до тех пор, пока пользователь не выйдет из приложения, нажав кнопку «Выход».

Полный исходный код нашего приложения доступен на GitHub.

6. Резюме

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