Случайный Оракул На Основе Цифровой Подписи В Блокчейне

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



Случайный оракул на основе цифровой подписи в блокчейне

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

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

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

Оракул, как бы он ни хотел, не способен ничего изменить; алгоритм дает однозначный результат. По сути, пользователь записывает результат, но не знает его, пока оракул не опубликует его.

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

Тогда в случае успешной проверки такую подпись можно будет считать источником энтропии для псевдослучайного числа.

Платформа блокчейна Waves использует схему подписи.

ЭдДСА вариант Эд25519 .

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

Для сообщения пользователя существует множество действительных подписей.

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

Но, как оказалось, сделать его детерминированным действительно можно.

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

Хотя VRF предлагает детерминированный вариант подписи и ее доказательства, в алгоритме есть странное место, открывающее черную дыру для манипуляции оракулом (это неверное утверждение, см.

ниже).

Обновлять ).

А именно, при вычислении значения k ( раздел 5.1 ) используется закрытый ключ, который остается неизвестным пользователю, а значит, пользователь не может проверить правильность расчета k, а значит оракул может использовать любое необходимое ему значение k и при этом вести базу данных соответствий k и знаковых данных, чтобы всегда иметь возможность пересчитать правильный с точки зрения VRF результат. Если вы видите рисунок на основе VRF без раскрытия закрытого ключа, вы можете пойти на хитрость: указать необходимость либо раскрыть ключ, либо исключить его из расчета k, тогда закрытый ключ автоматически раскроется при появлении первой подписи.

.

В общем, как уже говорилось, странная схема для рандомного оракула.

Немного подумав и заручившись поддержкой местных аналитиков, родилась схема работы VECRO. VECRO — аббревиатура от Verifying Elliptic Curve Random Oracle, что в переводе с русского означает проверяемый случайный оракул на эллиптических кривых.

Все оказалось довольно просто; чтобы добиться детерминизма, вам необходимо зафиксировать значение R до появления подписываемого сообщения.

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

В такой схеме не имеет значения, как зафиксирован R; это остается обязанностью оракула.

Важно, чтобы S однозначно определялось пользователем, но его значение неизвестно, пока оракул его не опубликует. Все, что мы хотели! Говоря о фиксированном R, обратите внимание, что повторно использованный R при подписании различных сообщений он уникальным образом раскрывает закрытый ключ в схеме EdDSA. Для владельца оракула становится чрезвычайно важным исключить возможность повторного использования R для подписи разных пользовательских сообщений.

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

Всего оракул должен предоставить пользователям две функции: инициализацию, фиксирующую значение R, и подпись, возвращающую значение S. В этом случае пара R,S представляет собой обычную проверяемую подпись пользовательского сообщения, содержащего фиксированное значение.

значение R и произвольные пользовательские данные.

Можно утверждать, что данная схема для блокчейна – не что иное, как обычная схема фиксации-расширения .

По сути да, это она.

Но есть несколько нюансов.

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

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

В-третьих, прекрасна подпись, которая изначально поддается проверке в блокчейне и является источником случайности.

Полгода идея реализации кипела в голове, пока наконец не появилась мотивация в виде грант от Waves Labs .

С большим грантом приходит и большая ответственность, поэтому проект будет! Выполнение Итак, в этом проекте ВЕКРО был реализован на блокчейне Waves в режиме запрос-ответ с использованием транзакций передачи между пользователем и оракулом.

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

Транзакции Oracle проверяются и восстанавливается вся цепочка взаимодействия с пользователем.

Все четыре транзакции участвуют в проверке окончательной стоимости; смарт-контракт объединяет их строгим потоком проверки, шаг за шагом проверяя все значения и не оставляя места для каких-либо манипуляций.

Еще раз отложим это в сторону и проясним.

Оракул не просто так работает по предложенной схеме.

Его работа полностью контролируется на уровне блокчейна установленными тесно со смарт-контрактом .

Шаг влево, и транзакция просто не состоится.

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

На данный момент в сети Waves работает один VECRO (можно запустить свой, это несложно, просто взгляните на пример конфигурации ).

Текущий код работает на PHP (на WavesKit , о котором Я говорил тебе раньше ).

Для того, чтобы воспользоваться сервисом oracle необходимо:

  • Исправить Р;
    • Отправьте не менее 0,005 Waves на псевдоним oracle init@vecr;
    • Получить R-код в поле вложения при передаче 1 токена R-vecr от оракула пользователю;
  • Получить подпись;
    • Отправьте не менее 0,005 Waves на псевдоним оракула rand@vecr, а также ОБЯЗАТЕЛЬНО укажите в поле вложения ранее полученный R-код и дополнительные пользовательские данные;
    • Получить S-код в поле вложения при передаче 1 токена S-vecr от оракула пользователю;
  • Используйте S-код в качестве источника псевдослучайных чисел.

Нюансы текущей реализации:
  • Волны, отправленные оракулу, используются в качестве комиссии за обратную транзакцию пользователю, максимум до 1 Волны;
  • R-код представляет собой объединение байта символа «R» и 32-байтового значения R в кодировке Base58;
  • R-код во вложении должен быть первым, после R-кода идут пользовательские данные;
  • S-код представляет собой объединение байта символа «S» и 32-байтового значения S в кодировке Base58;
  • S является результатом деления по модулю, поэтому вы не можете использовать S как полное 256-битное псевдослучайное число (это число можно считать максимум 252-битным псевдослучайным числом);
  • Самый простой вариант — использовать хэш S-кода как псевдослучайное число.

Пример получения S-кода: С технической точки зрения оракул полностью готов к работе, им можно смело пользоваться.

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

Буду рад ответить на вопросы и принять комментарии, спасибо.



Обновление от 8 мая 2019 г.

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

Подпись нужна для построения доказательства однозначного значения Гаммы ( раздел 5.3 , шаг 6).

Но значение Гаммы, проверенное с помощью подписи, уже участвует в качестве источника псевдослучайного числа ( раздел 5.2 , шаг 5).

Спасибо Олегу Тараскину Криттографо Указав на этот момент, я признаю свою ошибку.

ECVRF имеет полное право на жизнь.

К сожалению, использовать ECVRF на уровне блокчейна Waves пока невозможно из-за отсутствия необходимого математического аппарата в смарт-контрактах.

Как только эта функциональность или поддержка RSA станут доступны, можно будет писать новые оракулы.

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

Теги: #Децентрализованные сети #Криптовалюты #программирование #Криптография #блокчейн #random #Curve25519 #подпись #waves Platform #Ed25519 #eddsa

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.