Перевод Как протокол RingCT скрывает суммы при проведении транзакций Monero

Тема в разделе "Статьи", создана пользователем Mr. Pickles, 30 окт 2020.

  1. Mr. Pickles

    Команда форума Модератор Редактор

    Регистрация:
    11 сен 2017
    Сообщения:
    790
    Симпатии:
    229
    1.JPG

    Протокол RingCT используется для сокрытия сумм Monero начиная с 2017 года, и общий уровень нашей коллективной приватности от этого только повысился. Но как именно достигается столь высокий уровень?

    Приватность Monero не зависит от одного единственного механизма, взлом которого приведёт к полному раскрытию транзакций. Приватность обеспечивается тремя различными технологиями, которые в совокупности гарантируют целостность приватности, компенсируя слабые стороны друг друга. Такой тройственный подход подразумевает использование кольцевых подписей, протокола RingCT и скрытых адресов. Эти три технологии позволяют скрыть реальный выход (отправителя), сумму и личность получателя, соответственно. Сегодня мы поговорим о протоколе RingCT.

    RingCT, возможно, является самым технически сложным механизмом из всех указанных, и, вероятно, будет трудно понять, как он устроен. Поэтому мы не будем подробно рассматривать принципы его работы, а просто покажем, как можно, не зная суммы, подтвердить её. И не волнуйтесь, мы, как всегда, будем использовать множество примеров.

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

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

    В случае с криптовалютами сообразительный человек может отдать десять долларов за предмет и вместо того, чтобы получить ноль долларов сдачей, обратно может получить два доллара. Вместо 0 и 10, и 10 и 0 после обмена (или 10 = 10) теперь получаем 10 и 2 (или 10 = 12). Две Monero были созданы буквально из воздуха. А теперь можете представить, что было бы, если человек проделал бы такое несколько раз. Он смог бы довольно быстро накопить просто огромное состояние.

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

    Пытаясь повысить уровень приватности Bitcoin, Грегори Максвелл создал новую технологию конфиденциальных транзакций (Confidential Transactions, CT), которая позволяла использовать зашифрованные суммы с возможностью доказательства, что в процессе проведения транзакции не было что-либо создано или уничтожено. Как и в случае с большинством технологий обеспечения приватности, эта также не была использована в Bitcoin, но Monero с готовностью приняла её. Была только одна проблема. Уже реализованная технология кольцевых подписей была несовместима с предложенной идеей. Поэтому одним из исследователей MRL, которым в то время являлся Шен Нёзер, технология CT была преобразована в RingCT, версию CT, совместимую с кольцевыми подписями.

    Опять же, принципы работы этого протокола представляются довольно техническими, и их будет сложно объяснить во вводной статье. Для интересующихся криптографией, то есть тех, кому просто необходимо эти принципы понимать, в интернете есть множество подробных статей о внутренних принципах работы CT. Всем остальным этой статьи будет достаточно, чтобы показать, как можно скрыть сумму, но всё же доказать, что ничего не было создано или уничтожено.

    Допустим, Элис хочет отправить Бобу деньги. Элис отправляет 10 XMR Бобу, который получит 10 XMR. 10 = 10, так что здесь всё в порядке. Но Элис не хочет, чтобы кто-нибудь знал, сколько она отправляет. Поэтому они с Бобом создают общий секрет. По сути, это число, которое известно только им двоим. Допустим, что это число 22. Теперь Элис умножает 10 (то, что она действительно отправляет) на 22 и получает 220. Это число, которое она отправляет в сеть.

    Сами майнеры не знают секретного числа. Если бы знали, они смогли бы разделить показанное им число на секретное число и получить значение реально отправленной суммы. Но так как они не знают его, то и не могут сделать этого. Тем не менее они действительно видят, что Боб получает число 220. 220 отправлено. 220 получено. 220 = 220. Таким образом, сеть может убедиться в том, что ни одна монета Monero не была создана или уничтожена, не зная при этом реальной суммы, которую Элис отправила Бобу.

    Поскольку Бобу известно общее секретное число, когда он получает деньги, он просто делит полученное значение на 22, чтобы узнать реальную сумму, которую отправила Элис, то есть 10. И Элис, и Боб знают, сколько было отправлено и сколько было получено, в то время как всем остальным видно лишь ложное число.

    Опять же, это не совсем так, как на самом деле работает CT, но даёт представление о том, как подобное возможно. Реальный способ подразумевает использование таких вещей, как обязательства Педерсена, двух отправленных сумм (одна зашифрованная сумма для получателя и одна сумма обязательства для сети) и... да, уже становится понятно, как легко во всём этом запутаться.

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

    Первый набор связан с coinbase-транзакциями. Если этот термин вам незнаком, то, по существу, он означает вознаграждение, которое майнеры получают за вычисление следующего блока. Это число не скрывается. Любой желающий может увидеть, какое вознаграждение протокол выплатил майнеру за работу. Таким образом, текущее количество существующих монет Monero можно узнать, сложив все coinbase-транзакции. Их сумма будет равна текущему количеству Monero, находящихся в обращении.

    Второе число, которое не скрывается, это размер комиссии, выплачиваемой майнерам, когда пользователь отправляет транзакцию. Размер комиссии должен быть открытым, чтобы майнеры знали, кому отдавать приоритет. Тем не менее это может повредить приватности пользователей, поскольку если кто-то всякий раз использует уникальный размер комиссии для выплаты майнерам при отправке транзакции (например, 0,12345), такие транзакции можно будет связать друг с другом.

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

    Источник: How RingCT Hides Monero Transaction Amounts

    Перевод:
    Mr. Pickles (@v1docq47)
    Редактирование:
    Agent LvM (@LvMi4)
    Коррекция:
    Kukima (@Kukima)
     
  • О нас

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