От идеи к реализации: мы модифицируем существующую схему цифровой подписи на основе эллиптической кривой, чтобы она была детерминированной, и на ее основе предоставляем функции для получения псевдослучайных чисел, проверяемых внутри блокчейна.
Идея Осенью 2018 года в блокчейн Waves вошли активированы первые смарт-контракты , сразу возник вопрос о возможности получения псевдослучайные числа которому вы можете доверять.
Ломаясь над этим вопросом, я наконец пришел к выводу: любой блокчейн — это ячейка; невозможно получить надежный источник энтропии в закрытой системе.
Но одна идея мне все же понравилась: если случайный оракул подпишет пользовательские данные детерминированным алгоритмом, то пользователь всегда сможет проверить такую подпись с помощью открытого ключа и будет уверен, что полученное значение уникально.
Оракул, как бы он ни хотел, не способен ничего изменить; алгоритм дает однозначный результат. По сути, пользователь записывает результат, но не знает его, пока оракул не опубликует его.
Получается, что оракулу можно вообще не доверять, а проверять результат его работы.
Тогда в случае успешной проверки такую подпись можно будет считать источником энтропии для псевдослучайного числа.
Платформа блокчейна Waves использует схему подписи.
В этой схеме подпись состоит из значений 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-кода как псевдослучайное число.
- Инициализация: https://wavesexplorer.com/tx/8gc8jwM7JrPNehoDs7NVyos7BsufYktvkwVW1B6FAY6
- Получение R-кода: https://wavesexplorer.com/tx/9eB25SbzEwvHEbm8pcKj7MGDrYv1u3Fxpj696FkJ96hd
- Запрос результата подписи R-кода и пользовательских данных «случайным образом»: https://wavesexplorer.com/tx/6faoFJobEsugDFYmYmfsbtQYABmckNuE2kevaLh7ifzz
- Получение S-кода: https://wavesexplorer.com/tx/C5VrFLQcprbA1KXAToaNvMP4Kg2rq43NkwWuADAA7wXX
С точки зрения использования рядовым пользователем не хватает удобного графического интерфейса; это придется подождать.
Буду рад ответить на вопросы и принять комментарии, спасибо.
Обновление от 8 мая 2019 г.
Я ошибся насчет VRF. Да, действительно, подпись ECVRF не может быть использована как источник псевдослучайного числа, но она и не используется для этой цели.
Подпись нужна для построения доказательства однозначного значения Гаммы ( раздел 5.3 , шаг 6).
Но значение Гаммы, проверенное с помощью подписи, уже участвует в качестве источника псевдослучайного числа ( раздел 5.2 , шаг 5).
Спасибо Олегу Тараскину Криттографо Указав на этот момент, я признаю свою ошибку.
ECVRF имеет полное право на жизнь.
К сожалению, использовать ECVRF на уровне блокчейна Waves пока невозможно из-за отсутствия необходимого математического аппарата в смарт-контрактах.
Как только эта функциональность или поддержка RSA станут доступны, можно будет писать новые оракулы.
Что касается схемы VECRO, то она в любом случае занимает свою нишу и позволяет работать без какого-либо дополнительного функционала.
Теги: #Децентрализованные сети #Криптовалюты #программирование #Криптография #блокчейн #random #Curve25519 #подпись #waves Platform #Ed25519 #eddsa
-
Телевизор Высокой Четкости С Blu-Ray Dvd
19 Oct, 24 -
Идеальная Компания?
19 Oct, 24 -
История Гарантийного Ремонта В Германии
19 Oct, 24 -
Intel И Siemens Становятся Партнерами
19 Oct, 24 -
Случайность Или Предопределение
19 Oct, 24