Конфиденциальная пересылка крипто валют ▾
Как только публичная монета была переведена в защищенный режим (“shielded”) ее можно пересылать, получать, хранить и трейдить совершенно приватно. Кастодиал всегда сможет видеть сколько таких монет было скрыто, но он никаким образом не сможет проследить как эти монеты использовались в последствии. Все транзакции приватных монет конфиденциальны и их не может отследить ни кастодиал ни валидатор. Для того чтобы скрывать адреса получателя и отпарвителя, а также содержимое транзакции Incognito использует следующие основолагающие криптографические технологии как схема кольцевых подписей, схема гомоморфных обязательств, и доказательство с нулевым разглашением.
Взаимозаменяемость: Основа приватности денежной массы
Базовый принцип денег - взаимозаменяемость. Одна единица валюты должна быть идентична и взаимозаменяема с другой. Все приватные монеты выпущенные на протоколе Incognito взаимозаменямы (fungible).
Так как историю переводов большинства крипто валют, включая BTC или ETH можно отследить их нельзя считать взаимозаменяемыми (not fungible). К примеру, если единица BTC за всю историю ее существования будет заподозрена в использовании для осуществления незаконной деятельности ее могут внести в черный список как незаконный биткоин. Такой биткоин не будут принимать для совершения операций и пользователь будет вынуждет продавать его дешевле.
Для понимания - долларовый эквивалент взаимозаменяем. Каждый доллар можно обменять на другой и он не теряет своей ценности на основании истории его использования. Приватные монеты на протоколе Incognito обладают этой важной особенностью денег.
Кольцевые подписи: Скрытие адресов отправки
Кольцевая подпись позволяет пользователям подписывать сообщения на стороне группы без раскрытия своей личности [Chaum and Van Heyst, 1991; Fujisaki and Suzuki, 2007; Van Saberhagen, 2013]. Анономиность подписывающего защищена тем, что все участники группы имеют одинаковые шансы на дейсвительную подпись.
Схема 1. Личность подписывающего скрыта. Например, если вы встретились с кольцевой подписью с использованием публичных ключей Annie, Bob, John, и Peter, вы сможете утверждать что кто-то из них подписывающий, но не можете определить кто конкретно.
Группы формируются спонтанно. Никто из участников группу не имеет прав на раскрытие личности подписывающего. Именно по этому мы называем такие группы ад хок группы (ad hoc group) или кольцо (ring). Подписывающий может сформировать группу просто сгрупировав публичные ключи участников других групп. Такие группы обычно называют decoys или mixins, они наполняются из истории транзакций. Унифицированная подпись обеспечивает анонимность подписывающему.
Incognito использует кольцевую подпись для авторизации расходов на Unspent Transaction Output (“UTXO”) [Nakamoto, 2008], без раскрытия личности того кто проводил расходы. Подпись состоит непосредственно из потраченного UTXO, которые являются произвольными данными из истории транзакций. Сама UTXO и ее совместные ключи составляют вводные данные для транзакции. Для всех остальных эти вводные данны будут соответствовать потраченному.
Схема 2. Визуализация кольцевой подписи. Идея кольцевой подписи впервые была представлена как способ оповещения [Rivest et al., 2001]
Посколько не существует способа верификации расходов UTXO может возниукнуть проблема двойных расходов double-spending problem [Finney, 1993]. Решение мы нашли в использовании Cвязанных кольцевых подписей Linkable Ring Signature [Liu et al., 2004], добавляя дополнительное значение: связь linkability. C использованием связи, каждая подпись (для одного того же или различных сообщений) приобретает уникальный идентификактор - серийный номер. Серийный номер позволяет определить были ли подписи произведены одной и той же группой или разными группами без раскрытия подписывающего. Серийный номер получаемый из какждой потраченной UTXO является частью кольцевой подписи. Список всех использованных серийных адресов постоянно хранится как часть данных о транзакции поэтому каждая попытка использования одного и тогоже серийного номера кольцевой подписью автоматически отвергается для повторной растраты.
Адреса невидимки: Скрытие адресов получателя
В привычном нашему пониманию блокчейне, например Bitcoin или Ethereum, достаточно иметь публичный адрес чтобы отследить входящие и исходящие транзакции связанные с этим адресом [Reid and Harrigan, 2013]. Такие транзакции публичны и с легкостью можно сопоставить все данные по общему балансу и расходам.
Чтобы избежать сопоставления транзакций Incognito автоматически создает множество одноразовых публичных ключей - один ключ под каждую входящую транзакцию. Единоразовый публичный ключ также известен под именем невидимка stealth addresses, его можно рассматривать как единоразовый контейнер получателя. Только получатель может открыть этот контейнер и посмотреть содержимое и растратить его.
Схема 3. Создание множества одноразовых ключей
Невидимки (stealth addresses) строятся на протоколе обмена ключами названным Diffie-Hellman key exchange protocol [Diffie and Hellman, 1976]. Этот криптографический метод позволяет пользователям создавать общий секрет в присутствии соперника, которому доступны все комуникации с пользователем.
Адрес Incognito состоит из ключа публичного просмотра и ключа публичных расходов (a public view key and a public spend key). Ключу публичных расходов ключ приватных расходов, который предназначен для авторизации транзакций. Точно так же, ключу публичного просмотра соответствует ключ приватного просмотра, который получает платежи.
Когда Alice хочет послать приватные монеты Bob-у, Alice берет его ключ публичного просмотра и ключ публичных расходов, полученный в результате крайней рандомной генерации ключей для получения одноразовых публичных ключей Bob-а для последующей UTXO. Эти ключи сгенерированны таким образом, что только Bob имеет доступ к обработке одноразовго приватного ключа соответствующего одноразовому публичному ключу.
Bob пользуется своим ключом приватного просмотра чтобы убедиться в действительности отпарвки ему UTXO путем сканирования всех входящих транзакций. Как только UTXO найдена, Bob может обработать единоразовый приватный ключ соответствующий ондоразовому публичному ключу. Теперь Bob может тратить UTXO используя ключ приватных расходов.
Cхема 4. Адреса невидимки
Данные транзакций хранятся в публичном леджере Incognito. Всем доступна информация о появлении новой транзакции, но нет возможности каким-либо образом связать публичный ключ принимавший участие в транзакции с Bob-ом. Например, если Bob проводит продажи, никто не сможет утверждать что он и Alice ведум бизнес.
Конфиденциальность транзакций: Защита значений транзакций (shielding)
Конфиденциальные транзакции скрывают значения переводимых средств [Maxwell, 2015]. В публичном леджере Incognito доступна информация что транзакция была проведена, но никто не сможет узнать значение переведенного количества.
Схема 5. Значения конфиденциальных транзакций
Основная идея заключается в том, чтобы зафиксировать входные и выходные суммы транзакции кав в транзакции известной под именем Pedersen commitments [Pedersen, 1991]. Обязательства состоят из ценности и рандомности, называемыми слепым фактором (blinding factor), который не дает возможность остальным оценить ценность. Значение и слепой фактор позже могут быть раскрыты совершающим транзакцию и таким образом все могут проверить правильность формирования обязательства.
Схема 6. Обязательства основанные на доказательстве с нулевым разглашением диапазана подтверждающего их валидность (zero-knowledge range proofs)
Первая проблема при использовании этого подхода заключается в неспособности валидатора верифицировать транзакцию, а именно суммарное значение вводных данных и данных вывода.
Решение мы нашли в использовании доказательства с нулевым разглашением для валидации конфиденциальной транзакции для каждой транзакции. Доказательство с нулевыем разглашением [Goldreich et al., 1991] дает возможность утверждать что конкретное утверждение подлинно без раскрытия дополнительных подробностей кроме факта подлинности.
В соответствии с гомоморфным шифрованием [Gentry and Boneh, 2009], известном как поддатливость, все вводные обязательства транзакции могут быть добавлены в единое вводное обязательство. Савокупность обязательств это савокупность основополагающих обязательств в которой слепой фактор определяется как савокупность слепых факторов каждого отдельного обязательства.
Из этого следует вывод о том что обязательство нулевого значения является действительным публичным ключом, которому соответствует приватный ключ - слепой фактор. Таким образом отправитель подписывает разницу между этими двумя обязательствами, которой выступает обязательством нуля, подтрверждающее защищенность баланса. Добавляя такое обязательство в роли участника кольцевой подписи в кольцевую подпись, отпарвитель может подтвердить запрос на подписание такой транзакции одним из ключей приватных расходования.
Вторая проблема с этим подходом заключается в том, что злоумышленник может создавать деньги из воздуха и провоцировть инфляцию приватной монеты подтверждая негативные значения.
Решением стало сопоставление каждого исходящего обязательства с подтверждением диапазона [Boudot, 2000; Morais et al., 2019]. Подтверждение диапазано доказывает что исходящие данные имеют положительные значения в интревале [0, 264), без раскрытия самих значений. Валидатор может верифицировать транзакцию считая ее легитимной без понимания ее конкретного значения.
Для имплементации подтверждения диапазона мы используем Bulletproofs [Bunz et al., 2018]. Bulletproofs это короткие неинтерактивные доказательства с нулевым разглашением, разработанные для обеспечения эффективных конфиденциальных транзакций без необходимости установки доверительных отношений. Bulletproofs уменьшает размер предыдущего доказательного диапазона с ~5KB до 700 байт. Bulletproofs поддерживает агрегацию; объединение нескольких доказательных диапазонов увеличит размер всего лишь на несколько сотен байт.
Посмотрим как это выглядит на практике
- Отправим BTC c адреса публичного блокчейна и зашилдим его в Incognito
Отправитель bc1qkeuqm63tuejl7hnx4fv9w93w0ewgy68d463rda
Thash https://blockchair.com/bitcoin/transaction/8116694ec3b754ba711f1661fdbd2a12733370e790ee6347a19e2ca7fba3cbb1
Получатель 1BJcCqjPT3MQbFJpfFLuuHCFmfAUH8sEQ8
- Погоняем биток в сети Incognito
-
на другой адрес инкогнито https://mainnet.incognito.org/tx/acbe4e3df5544a3e7b2df8a1c51db7e0058d183bb5a00c3abe2c60095a1a4f0e
-
обратно с инкогнито на инкогнито https://mainnet.incognito.org/tx/48c4b75ab9264a47d7a7bf76c398efa6a4c78e556f8ea59a00204fc83083c357
- Обратно выведем BTC в публичный блокчейн