Обновление Safe Network 🇷🇺 9 декабрь 2021 г

Это машинный перевод. Оригинал на английском здесь: Update 09 December, 2021

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

На прошлой неделе Дэвид Русу представил команде демонстрацию кольцевых конфиденциальных транзакций (Ring CT). Это был увлекательный материал, но довольно тяжелый по математике, поэтому на этой неделе у нас есть урезанная версия с минимумом алгебры в попытке дать немного предыстории и объяснить направление, в котором мы движемся с частными транзакциями DBC. .

Общий прогресс

Дэвид Русу, @danda и @Anselme застряли в различных аспектах реализации кольцевой подписи, включая доказательства оплаты.

@ChrisO мужественно боролся с GitHub Actions, чтобы попытаться сделать тестовую сеть пригодной для выпуска, но последние пару дней он не играл в мяч.

@bochaco работает вместе с @chrisO, стремясь исправить оставшиеся неудачные тесты CLI, и мы устраняем все больше крайних случаев, связанных с разделением разделов.

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

Кольцевые подписи и Сейф

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

Для достижения этих целей мы планируем использовать кольцевые подписи, опираясь на работу Ring CT, проделанную Monero, и добавляя безопасный вариант мультиподпись и доказательство оплаты.

Что такое кольцевая подпись?

Кольцевые подписи — это вероятностный метод безопасности, а не криптографически сложный, но, как продемонстрировала Monero, он по-прежнему очень эффективен для анонимизации транзакций.

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

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

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

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

Несколько замечаний:

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

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

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

  • Для создания нашего образа ключа требуется наш секретный ключ.

Так какой у нас секретный ключ? Чтобы объяснить это, нам нужно обратиться к криптографии на эллиптических кривых (ECC).

Криптография на эллиптических кривых

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

В ECC расчет заключается в том, как перейти из одной точки кривой в другую. вот как это работает

Допустим, у нас есть кривая вида: y2= x3 + ax + b.

Мы используем кривую BLS12-381 (в частности, blstrs), которая имеет такую ​​форму:

bed2a2bab8d53dbd3bf0b05085704f6eac1de859

Кривая огромна, покрывая конечное поле Fq, где q — очень большое простое число, что означает, что на кривой существует огромное (но конечное) количество возможных точек. Все арифметические операции над точками на кривой выполняются по модулю q. В модульной арифметике, когда значение больше q, оно снова возвращается к началу, как с часами: 3 + 10 по модулю 12 = 1.

Когда мы умножаем одну точку на кривой (A) на другую точку на кривой s, мы приходим, по-видимому, случайно, к другой точке (B), которая такжена кривой. Выполнение этого умножения очень быстрое и простое, но его обратное — выяснение того, на что мы умножили точку «А», чтобы получить точку «В», — обычно занимает тысячи лет, так как вам в основном приходится перебирать все возможные варианты. пока вы не нажмете на правильный. Не существует очевидного шаблона, в котором на кривой появляются последовательные точки, и нет простого способа реконструировать процесс.

На этой кривой есть несколько особых точек, называемых образующими. Генератор (G) обладает тем свойством, что если вы продолжаете добавлять его к самому себе (G, G+G, G+G+G ..), в конечном итоге он определит все возможные точки на кривой. Мы создаем пару ключей, выбирая «G» и умножая ее на «s», еще одну точку на кривой, известную только нам.

  • «sG» — это наш открытый ключ, «s» — наш секретный ключ.

Итак, у нас есть наш открытый ключ sG (который в нашем примере является нашим ключом владельца DBC) и наш секретный ключ. Теперь нам нужно сделать ключевое изображение I. Формула для этого:

  • I = sHp(sG)

Образ нашего ключа — это наш секретный ключ s, умноженный на хэш нашего открытого ключа sG. Наш ключевой образ «Я» — это еще одна точка на кривой.

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

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

Следующие шаги

Дэвид Русу интегрирует Ring CT в код DBC. Следующим шагом будет заставить его работать с BLS, а затем посмотреть подтверждение оплаты. @danda и @Anselme заложили здесь основу. Идея состоит в том, чтобы в счетах-фактурах были открытые ключи для оплаты и Обязательства Педерсена. Платежный DBC будет перевыпущен, чтобы иметь точно такое же обязательство Педерсена, что и в счете-фактуре. Таким образом мы можем доказать, что мы отправили правильную сумму и правильному получателю платежа. Мы можем опубликовать как счет-фактуру, так и платежный DBC для всеобщего обозрения, предоставив доказательство того, что мы оплатили этот счет. Это очень большая работа в процессе.


Полезные ссылки

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

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