Протокол Whisper на VIZ

16.11.2020 17:28:03

Удивительное рядом. Вас хотят слышать. Все хотят. А то вдруг, вы шепнете на ухо знакомому в парке мем «Хайль Гидра!»?! Непорядок!

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

И на кухне ваши разговоры — остаются вашими.

Но в интернете, вдруг, всем нужно знать, что за данные идут от узла А к узлу Б. Да ещё в открытом виде.

Протокол Шепот (Whisper) позволяет реализовать скрытые сообщения от узла А. С одной деталью. Неизвестно какому узлу Б.

Для всех это будет шум с недоказуемым смыслом.

Пока узел Б не попытается разобрать этот шум, а вдруг он предназначен ему.

Шифрование сообщение через shared key существует давно (относительно). Те же заметки к переводам в сети BitShares реализованы через aes-256-cbc, используя в качестве пароля shared key между двумя узлами.

В предлагаемом протоколе VIZ Whisper есть важное отличие. В операции нет конкретного получателя. Более того, отправитель ТОЖЕ может быть скрыт, а кто-то будет использовать промежуточный аккаунт, возможно служебный/общий/анонимный, чтобы доставить шепот в сеть.

Алгоритм работы для отправителя:

  • Получение shared key из memo private key и публичного ключа получателя.
  • Шифрование сообщения и получение стандартного набора данных, которое можно преобразовать в base58 строку.
  • Создание приватного ключа Whisper из строки: "VIZ Whisper" + (unixtime / 10 | 0).
  • Получение whisper shared key из полученного whisper private key и публичного ключа получателя.
  • Новое шифрование сообщение, используя whisper shared key в качестве пароля, на данном этапе можно дополнить набор данных отправителем, чтобы упростить расшифровку вложенного сообщения.
  • Загрузка сообщения в сеть через операцию custom с названием протокола W (сокращаем Whisper для экономии пропускной способности).

Алгоритм работы для получателя:

  • Мониторим блоки, ищем custom операции с протоколом W.
  • В цикле вычисляем приватный ключ VIZ Whisper" + (block_unixtime / 10 | 0) и пытаемся расшифровать сообщение через общий shared key. Если не подходит отнимаем по 10 секунд у unixtime для каждой попытки (около 3 или 6 хватит, чтобы избежать большого лага у отправителя).
  • Если успех, то расшифровываем сообщение внутри по shared key с отправителем транзакции ИЛИ, если в массиве данных присутствует указание на другой аккаунт — с указанным аккаунтом.
  • Расшифровываем сообщение и выводим на экране.

Данный протокол успешно скрывает получателя (что не исключает догадку, кто с кем общается, если участников в протоколе несколько) и потенциально — отправителя.

Предлагаю участникам VIZ подключиться к обсуждению протокола, может кто-то захочет разработать экспериментальную версию dapp для тестирования в действующей сети. Ну а пока... Вспомним вселенную Marvel :D


3
14 наград
10.301984 Ƶ
Отобразить форму комментирования
Комментарии

16.11.2020 17:40:27

На будущее: не обязательно использовать сам блокчейн для записи шепота. Для этого подойдет VIZ Hub с поддержкой такой возможности.

24.11.2020 10:14:12

Обновлена библиотека viz-php-lib для поддержки зашифрованных memo: https://github.com/VIZ-Blockchain/viz-php-lib

18.12.2020 09:50:54

Дополнено: для большей анонимности и невозможности раскрыть отправителя или получателя методом подбора к публичным ключам всех пользователей в блокчейне — добавление в протокол предложение использовать строку-миксер для формирования whisper ключа в первом сообщении с предложением начать беседу. После чего получатель сообщения становится скрытым (и отправитель в случае использования стороннего поставщика транзакций в сеть).