- Регистрация
- 23.09.18
- Сообщения
- 12.347
- Реакции
- 176
- Репутация
- 0

Аудит криптовалютного кошелька — это возможность для третьей стороны («аудитора») видеть транзакции этого кошелька и рассчитывать его корректный актуальный баланс без права на трату средств.
В статье рассматриваются различные способы обеспечения такой возможности в криптовалютном протоколе CryptoNote 2.0 [
You must be registered for see links
], где аудит реализован лишь частично: с помощью трекингового ключа можно распознавать входящие транзакции, но для распознавания исходящих нужен полный набор ключей.Материал рассчитан на читателей, знакомых с темой блокчейна и «классических» криптовалют, а также с основами криптографии на эллиптических кривых.
Содержание
You must be registered for see links
You must be registered for see links
You must be registered for see links
You must be registered for see links
You must be registered for see links
You must be registered for see links
You must be registered for see links
You must be registered for see links
You must be registered for see links
You must be registered for see links
You must be registered for see links
You must be registered for see links
You must be registered for see links
1. Введение
Что такое CryptoNote?
Как это ни странно, но большинство интересующихся блокчейн-технологиями ничего не слышали о CryptoNote, и это несмотря на то, что эта технология явилась основой для более чем 300 форков, самым известным из которых стал Monero.
В 2014 году в криптовалютной среде появились упоминания [
You must be registered for see links
] о проекте, который назывался Bytecoin. Проект не являлся форком Bitcoin или другого открытого проекта и имел совершенно новую кодовую базу, что было крайне необычно для того времени. Его основная концепция сводилась к реализации privacy-технологии, которую называли CryptoNote. Приватность обеспечивалась двумя механизмами: стелс-адресами и подмешиванием входов с использованием кольцевой подписи (ее еще называли в то время «микшер на блокчейне»). Поскольку в то время Zcash существовал только в теории, технология оказалась весьма конкурентоспособной и вызвала большой резонанс в крипитовалютном сообществе.Вскоре группа энтузиастов, проявившая интерес к одному из первых форков этой технологии, а затем и перехватившая инициативу в этом форке, своими энергичными действиями сумела привлечь наибольшее внимание к технологии как среди сообщества так и среди инвесторов. Этот форк назывался BitMonero [
You must be registered for see links
,
You must be registered for see links
], однако довольно скоро он был переименован в Monero.В дальнейшем оба проекта — Bytecoin и Monero — развивались технологически разными путями: если Bytecoin оставался закрытым анонимным проектом, то Monero превратился в крупный community-driven проект с очень большим количеством участников и разработчиков. Тем не менее, они оба являются развитием CryptoNote технологии.
Понятие аудита и его приложения
В отличие от классического «псевдонимного» блокчейна типа Bitcoin, в котором любой желающий, сканируя блокчейн, может тривиально подсчитать балансы любого адреса, в приватном блокчейне, в частности, в CryptoNote, эта задача едва ли осуществима без дополнительных знаний. Во-первых, благодаря технологии стелс-адресов, в блокчейне вообще отсутствуют упоминания каких-либо адресов (это свойство обычно обозначается как anonymity). Во-вторых, в силу того, что благодаря кольцевой подписи вход транзакции не указывает на один конкретный выход родительской транзакции, а указывает, в общем случае, на множество вероятных выходов, отследить движение средств также не представляется возможным (это свойство называется untraceability).
В традиционном понимании приватной криптовалюты, эти свойства являются необходимыми, но существуют особые случаи, когда владелец кошелька может захотеть раскрыть третьей стороне историю своих транзакций и текущий баланс кошелька, при этом гарантируя для себя невозможность траты денег третьей стороной. Это может понадобится, например, биржам, для взаимодействия с регуляторами или проверяющими инстанциями. Кроме того, это может быть важно для различных фондов, которые хотели бы иметь возможность быть прозрачными для определенной группы лиц или быть полностью публичными.
Говоря формально, под аудитом кошельков понимается возможность для третьей стороны («аудитора») видеть транзакции этого кошелька и рассчитывать его корректный актуальный баланс без передачи права на трату средств. В оригинальной версии CryptoNote аудит был реализован лишь частично: с помощью трекингового ключа можно распознавать входящие транзакции, но для распознавания исходящих нужен полный набор ключей.
Об авторе и цели публикации
Автор данного материала является одним из основных разработчиков проекта Zano — проекта, основанного на CryptoNote, который развивался несколько лет теми же руками, которыми был написан оригинальный код технологии.
Наша команда сейчас рассматривает возможность добавления аудита кошельков в проект и проводит исследования этой темы с целью выбора оптимального варианта. С результатами некоторых из этих исследований автор хочет познакомить читателей в данной статье.
2. Базовые сведения о криптографии на эллиптических кривых
Протокол CrypoNote использует эллиптическую кривую из схемы цифровой подписи с открытым ключом ed25519 [
You must be registered for see links
].Напомним основные параметры этой кривой и дадим дополнительные определения.
- Зафиксировано большое простое число
Все операции происходят в целых числах в конечном поле - Задана эллиптическая кривая над полем
где
Важным является факт ее симметрии относительно - Над множеством точек кривой геометрически определена операция, для любых двух точек дающая третью:
You must be registered for see links]). Эта операция не выводит за пределы множества, обладает ассоциативностью, коммутативностью и наличием обратного элемента, благодаря чему все точки кривой вкупе с ней образуют абелеву группу, обозначаемую
Порядок этой группы (число всех точек): - Каждая точка кривой задается своими координатами
- Зафиксирована специальная точка кривой
- Сложение (см. п. 3) точки
при этом
- Открытый ключ
- Секретный ключ
Секретный ключ, также как и открытый (см. выше), кодируется как 256-битное число. - Определена основная хеш-функция
- Хеш-функция
- Хеш-функция
Реализация этой хеш-функции представляет определенную сложность по той причине, что во-первых, не любой набор 256 бит можно декодировать в точку эллиптической кривой (см. п. 4), а во-вторых, не любая точка кривой принадлежит группе
Одним из тривиальных способов реализации
В CryptoNote используется более сложный и эффективный подход, реализованный в виде функции ge_fromfe_frombytes_vartime, который подробно рассмотрен в работе [You must be registered for see links].
Определим функцию, детерминированно преобразующую произвольные 256 бит в элемент группы
В CryptoNote хеш-функция
3. Учет средств и расчет баланса в CryptoNote
Вспомним, как происходит отправка средств и расчет баланса в оригинальном версии протокола.
Алиса, отправляя деньги Бобу, формирует выходы своей транзакции следующим образом (рис. 3.1).
![]() [SUB]Рис. 3.1. Алиса формирует выходы транзакции, отправляя деньги Бобу[/SUB] |
- У Боба есть пара закрытых ключей
- Алиса выбирает случайный секретный ключ транзакции
- Для каждого выхода Алиса вычисляет стелс-адрес (one-time destination key):
- Алиса подписывает и отправляет транзакцию.
Сторонний наблюдатель, анализируя стелс-адреса
Чтобы принять деньги, Боб анализирует все транзакции в блокчейне следующим образом (рис. 3.2).
![]() [SUB]Рис. 3.2. Боб проверяет выходы транзакции, чтобы определить входящие переводы[/SUB] |
Если
Чтобы потратить выход, получателем которого Боб является, и отправить монеты Кэрол, он действует следующим образом.
![]() [SUB]Рис. 3.3. Боб формирует вход для новой транзакции, используя принадлежащий ему выход[/SUB] |
7. Боб рассчитывает key image:
Следует обратить внимание на то, что, во-первых, вычислить key image может только владелец секретного spend-ключа
8. Боб уменьшает баланс своего кошелька на номинал используемого выхода в п. 6.
9. Боб формирует выходы в транзакции для Кэрол в соответствии с п.п. 2-3. После чего подписывает транзакцию и отправляет.
Если предположить, что Боб утратил всю историю своих операций, но по-прежнему владеет своими секретными ключами
![]() [SUB]Рис. 3.4. Боб определяет свои входящие и исходящие платежи и рассчитывает баланс[/SUB] |
11. При нахождении такого выхода
Затем, используя свой секретный spend-ключ
12. Если при дальнейшем сканировании блокчейна Боб обнаружит во входе некоторой транзакции key image, имеющийся в таблице, это будет означать, что данная транзакция была когда-то сформирована Бобом. Поэтому он уменьшит баланс своего кошелька на величину номинала входа.
Действуя таким образом, Боб восстановит актуальный баланс своего кошелька.
Обратите внимание, что если сторонний аудитор Ден получит от Боба секретный ключ
Таким образом, для расчета баланса кошелька Боба необходимо знать оба секретных ключа
Если Боб передаст аудитору Дену оба своих секретных ключа
В следующих разделах мы рассмотрим варианты модификации протокола, обладающие такой возможностью.
Отметим, что секретный ключ транзакции
и сравнивая результат с
Этот факт Алиса может, например, использовать, чтобы доказать, что она перевела деньги именно Бобу.
Вычислить целевой адрес
4. Вариант 1/3. Bytecoin Auditable Coins
В момент своего появления Bytecoin был первой и единственной реализацией протокола CryptoNote, поэтому ему были свойственны все особенности и ограничения, рассмотренные в предыдущем разделе.
7 февраля 2019 года разработчики выпустили ([
You must be registered for see links
]) версию 3.4.0 Amethyst, содержащую ряд улучшений и изменений CryptoNote, которые мы сейчас рассмотрим. Большая часть информации этого раздела была получена путем анализа исходного кода Bytecoin, так как официальной документации не предоставлено.В рамках тематики этой статьи, наиболее интересным изменением стала возможность для обычных кошельков создавать специальные копии — auditable wallet (AW), обладающие двумя свойствами:
- AW не может потратить средства из основного кошелька;
- баланс AW всегда совпадает с балансом основного кошелька. Невозможно изменить баланс основного кошелька так, чтобы это не отразилось на балансе AW.
Однако, такой функциональностью обладают только адреса кошельков новых версий, так называемые, amethyst-адреса. С существующими адресами и аккаунтами обеспечивается обратная совместимость, они теперь называются legacy-адреса. Реализация новой функциональности стала возможна только в транзакциях новой версии, поскольку разработчики поменяли формат выходов, поэтому в сети Bytecoin в данный момент циркулируют как транзакции старого формата, так и новые. Транзакции нового формата также поддерживают два типа адресов: amethyst и legacy, поэтому в конечном счете мы имеем три варианта криптографических схем:
- tx.version < amethyst, legacy address;
- tx.version ≥ amethyst, legacy address;
- tx.version ≥ amethyst, amethyst address.
Рассмотрим их более подробно.
4.1. tx.version < amethyst, legacy address
Это оригинальная схема CryptoNote, но с детерминированной генерацией
Аккаунт кошелька представлен секретным ключом
Секретный ключ
Таким образом отпадает необходимость хранить секретные ключи
Баланс кошелька вычисляется аналогично оригинальному CryptoNote (см. раздел 3), то есть, для учета исходящих платежей необходим секретный spend-ключ
В случае, если в локальном хранилище кошелька будут сохранены все адреса, на которые когда-либо осуществлялся перевод средств, то существует возможность рассчитать верный баланс без привлечения секретного spend-ключа
- Алиса сканирует транзакции в блокчейне и ведет учет входящих платежей при помощи секретного view-ключа
- Также для каждого выхода каждой транзакции Алиса перебирает все адреса
Если
Так Алиса рассчитает баланс используя только
Очевидно, что данный способ ненадежен и непрактичен, так как отсутствие в указанном локальном хранилище адреса, на который перевод фактически был осуществлен, приведет к завышению баланса. Поэтому он представляет, скорее, теоретический интерес.
4.2. tx.version ≥ amethyst
Как уже было отмечено выше, начиная с версии 3.4.0 Amethyst в Bytecoin изменился формат транзакций. Если tx.version ≥ amethyst, то выходы транзакции имеют другой формат.
Теперь каждый выход, помимо номинала amount и открытого ключа P[SUB]i[/SUB], содержит также дополнительный открытый ключ Q[SUB]i[/SUB] (обозначаемый в коде как encrypted_secret) и дополнительный байт, содержащий зашифрованный тип адреса, amethyst или legacy (именуемый в коде encrypted_address_type). Эти структуры схематично показаны на рис. 4.2.
![]() [SUB]Рис. 4.2. Сравнение структуры данных для выходов транзакций CryptoNote и Bytecoin Amethyst[/SUB] |
Для каждого выхода i тип адреса кодируется и декодируется следующим образом:
encrypted_address_type(i) = (H(o[SUB]i[/SUB]) & 255) xor address_tag
где:
address_tag равен 0 для legacy-адресов и 1 для ametyst-адресов.
4.3. tx.version ≥ amethyst, legacy address
Аккаунт кошелька также представлен секретным ключом
Алиса, отправляя деньги Бобу на его адрес
1. Вычисляет
2.
3.
4.
5. Пара
Чтобы принять деньги, Боб анализирует все транзакции следующим образом.
6. Для каждой транзакции вычисляет
7.
8.
9. Если
Чтобы потратить выход, получателем которого Боб является, и отправить монеты Кэрол, он действует следующим образом.
10. Используя свои секретные ключи
11. Боб рассчитывает key image:
12. Боб уменьшает баланс своего кошелька на номинал используемого выхода.
13. Боб формирует выходы в транзакции для Кэрол в соответствии с п.п. 1-5. После чего подписывает транзакцию и отправляет.
Особенностью данной схемы, в отличии от CryptoNote, является то, что любой, кому Алиса передаст свой секретный хеш
14.
15.
16.
Однако проблемой в данном случае является задача определения, какие транзакции сформировала и отправила Алиса. Без этой информации в п.п. 14-16 для произвольных транзакций будут получатся произвольные бесполезные данные, неотличимые от настоящих адресов
Поскольку в данной схеме вычисление key image также требует знания секретного spend-ключа
4.4. tx.version ≥ amethyst, amethyst address
Константа H
Для работы этой криптографической схемы требуется введение новой константы — точки
Например, можно задать
You must be registered for see links
]:Разработчики Bytecoin не вычисляют константу, а задают ее численно, без каких-либо указаний на природу ее происхождения:
You must be registered for see links
constexpr P3 H{ge_p3{{7329926, -15101362, 31411471, 7614783, 27996851, -3197071, -11157635, -6878293, 466949, -7986503}, {5858699, 5096796, 21321203, -7536921, -5553480, -11439507, -5627669, 15045946, 19977121, 5275251}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {23443568, -5110398, -8776029, -4345135, 6889568, -14710814, 7474843, 3279062, 14550766, -7453428}}};
Однако поиск этой числовой последовательности показал ([
You must be registered for see links
]), что ими используется та же константа, что и в Monero для RingCT, способ вычисления которой и его обоснование рассмотрены в [
You must be registered for see links
].Поскольку
Это означает, что
Множественные несвязываемые адреса (unlinkable addresses)
В оригинальном CryptoNote с каждым кошельком (то есть, набором секретных ключей) был ассоциирован один публичный адрес, который и использовался для перевода средств на него.
Рассматриваемая же схема позволяет на одном и том же наборе секретных ключей генерировать неограниченное количество публичных адресов. При этом:
- адреса генерируются детерминированно из первоначального набора секретов;
- эти адреса не могут быть связаны между собой, т.е. сторонний наблюдатель не сможет вычислить, что они принадлежат одному аккаунту;
- проверка входящих транзакций и учет баланса для
Аккаунт кошелька представлен секретным ключом
Процесс генерации i-го адреса происходит следующим образом (рис. 4.4.2).
![]() [SUB]Рис. 4.4.2. Генерация amethyst-адресов для аккаунта Bytecoin (желтым цветом обведены предрассчитанные величины, раскрытие которых не угрожает раскрытию секретных ключей |
2.
3.
4. пара
Заметим, что для расчета достаточно знать следующие величины:
•
•
•
•
Величины
Сгенерированные адреса хранятся локально в контейнере, оптимизированном для поиска по полю
Формирование выходов при отправке средств
Алиса, отправляя деньги Бобу на его адрес
![]() [SUB]Рис. 4.4.3. Формирование выходов транзакции при отправке средств на Amethyst-адрес[/SUB] |
2.
3.
4. Пара
Учет входящих платежей
Чтобы принять деньги, Боб анализирует все транзакции следующим образом (рис. 4.4.4.).
![]() [SUB]Рис. 4.4.4. Анализ выходов транзакции на предмет входящих переводов[/SUB] |
- Для каждого выхода
-
- После чего пытается найти
Это означает, что для того, чтобы правильно учитывать входящие платежи, в данной схеме, помимо списка адресов или ключей для их генерации, необходимо знать секретный view-ключ
Формирование исходящих платежей
Чтобы потратить выход
-
-
-
- Вычисляет key image
- Боб уменьшает баланс, относящийся к его адресу
- Боб формирует выходы транзакций, подписывает ее и отправляет.
Видно, что для вычисления key image требуется знание не только секретного view-ключа
Важной особенностью данной схемы является возможность вычисления key image (а значит, и учета своих исходящих платежей, следовательно — расчет баланса) без использования секретного spend-ключа
Раскрытие адресов получателей для аудита
Также, как и предыдущая, данная криптографическая схема позволяет извлекать из выходов транзакций адреса получателей в случае, если известен секретный хеш отправителя
Происходит это следующим образом (рис. 4.4.5).
![]() [SUB]Рис. 4.4.5. Аудитор, обладая |
- Восстановит секретные ключи
- Будет сканировать блокчейн и для каждого выхода
среди адресов Алисы. - Если найдет, то Кэрол увеличит баланс соответствующего адреса и, при помощи
- Если среди входов транзакций встретится key image Алисы, то это будет означать, что данная транзакция — исходящий платеж Алисы. Кэрол восстановит адреса получателей для всех выходов этой транзакции:
и уменьшит баланс соответствующего адреса Алисы на величину номинала входа.
Таким образом, раскрывая часть данных аккаунта, можно предоставить третьей стороне различные уровни доступа к информации.
Чтобы сгенерировать список своих адресов:
•
•
•
•
Чтобы распознать только входящие платежи:
•
•
•
Чтобы произвести аудит, т.е. рассчитать баланс по своим адресам, без раскрытия адресов получателей:
•
•
•
Чтобы произвести аудит, т.е. рассчитать баланс по своим адресам, и раскрыть при этом адреса получателей:
•
•
4.5. Сравнение подписей транзакций CryptoNote и Bytecoin Amethyst
Структуры данных и размеры подписей
Как было отмечено выше, реализация возможности проводить аудит кошельков, не раскрывая секретный spend-ключ, потребовала от разработчиков Bytecoin Amethyst увеличения размера данных, передаваемых в каждом выходе транзакции: по сравнению с оригинальным протоколом передается один открытый ключ и 1 байт для идентификации типа адреса. Итого, 33 байта на выход.
В CryptoNote у транзакции подписывается отдельно каждый ее вход. Для каждого открытого ключа
Таким образом, если в транзакции
Минимальный размер подписи для транзакции составляет 64 байта (один вход, который тратит один выход напрямую).
В Bytecoin Amethyst подписывается вся транзакция целиком, и соответствующая структура данных усложнена (рис. 4.5.1).
![]() [SUB]Рис. 4.5.1. Сравнение структуры подписи транзакции в CryptoNote и Bytecoin[/SUB] |
Минимальный размер подписи для транзакции составляет 160 байт (один вход, который тратит один выход напрямую).
Видно, что обе функции растут пропорционально произведению
Чтобы сравнить различие размеров подписи транзакции более наглядно, рассчитаем их для наиболее характерных величин
![]() [SUB]Рис. 4.5.2. Различие в размере подписи транзакции Bytecoin по сравнению с CryptoNote (в процентах относительно размера подписи CryptoNote; зеленым отмечен выигрыш в размере подписи Bytecoin)[/SUB] |
При подмешивание двух выходов (
При дальнейшем увеличении числа подмешиваемых выходов, размер подписи Bytecoin оказывается меньше.
Стоит отметить, что разработчики Bytecoin с выходом версии 3.4.0 Amethyst в целях увеличения анонимности установили минимальное число подмешиваемых выходов равным 3 [
You must be registered for see links
]. В таких условиях подпись Bytecoin будет обладать меньшим размером.Трудоемкость проверки подписи
Помимо размера кольцевой подписи, прямо влияющего на размер блокчейна, другой важной характеристикой является вычислительная сложность ее проверки. Она определяет такие важные параметры криптовалютной системы как, например, скорость синхронизации с сетью новых узлов и вычислительную нагрузку на сеть при большом потоке транзакций.
Трудоемкость проверки подписи для CryptoNote и Bytecoin можно было бы легко сравнить практически, просто написав тест, генерирующий, а затем проверяющий большое число подписей с заданными
В CryptoNote и Bytecoin используется несколько основных примитивов (см. раздел 2). В таблице на рис. 4.5.3. приведено характерное время выполнения самых часто используемых примитивов на современном middle-end компьютере с процессором Core i5-6500 (для сравнения использовался оригинальный исходный код, скомпилированный в Microsoft Visual Studio 2017 со всеми возможными оптимизациями по скорости).
![]() [SUB]Рис. 4.5.3. Характерное время основных криптографических операций[/SUB] |
Рассмотрим процедуру проверки кольцевой подписи CryptoNote (рис. 4.5.4, процедура генерации подписи подробно рассмотрена в [
You must be registered for see links
] и здесь рассматриваться не будет).![]() [SUB]Рис. 4.5.4. Схема проверки кольцевой подписи CryptoNote[/SUB] |
- Для каждой пары значений
(при этом индекс j пробегает значение от 0 до - Вычисляется сумма
- Вычисляется хеш
где tx_prefix_hash — хеш префиксной части транзакции (без подписи). - Проверяется равенство
Оценим число операций умножения скаляра на точку и вычисления хеша
Каждое вычисление
При этом хеш-функция
Теперь рассмотрим алгоритм проверки кольцевой подписи в Bytecoin Amethyst (рис. 4.5.5).
![]() [SUB]Рис. 4.5.5. Схема проверка кольцевой подписи в Bytecoin Amethyst[/SUB] |
- В хеш-буфер записывается префиксный хеш транзакции (без подписи).
- Для каждого входа
- Вычисляется
Оценим число операций умножения скаляра на точку и вычисления хеша
Каждое вычисление
При этом хеш-функция
Чтобы наглядно сравнить вычислительную сложность обоих алгоритмов на типовых данных, введем следующую метрику. Сложим число операций скалярного умножения и операций вычисления
Затем сравним относительные результаты для CryptoNote и Byteсoin в процентах (рис. 4.5.6).
![]() [SUB]Рис. 4.5.6. Вычислительная сложность проверки кольцевой подписи Bytecoin Amethyst по сравнению с CryptoNote (зависимость от |
Однако, как уже было отмечено выше, в Bytecoin с версии 3.4.0 Amethyst в целях увеличения анонимности установлено минимальное число подмешиваемых выходов равным 3 [
You must be registered for see links
], поэтому худшее практическое значение не превысит 25% (в теории).Подытожим:
- Размер каждого выхода увеличивается на открытый ключ
- Размер кольцевой подписи варьирует в сравнении с размером подписи CryptoNote в зависимости от числа подмешиваемых выходов (при большом их числе оказывается меньше):
- Вычислительная сложность выше, чем в CryptoNote и значительно зависит от числа подмешиваемых выходов:
5. Вариант 2/3. Исследования аудита в CryptoNote от Anton Sokolov
Осенью 2019 года на площадке Medium.com была опубликована серия эссе [
You must be registered for see links
,
You must be registered for see links
,
You must be registered for see links
,
You must be registered for see links
,
You must be registered for see links
,
You must be registered for see links
] о проблеме аудита в CryptoNote и возможных способах ее решения под авторством Anton Sokolov. В ней с теоретических позиций рассматриваются несколько вариантов модификации оригинального протокола таким образом, чтобы решить задачу аудита для третьей стороны.Рассмотрим последнюю из них [
You must be registered for see links
] как наиболее оптимизированную. Будем сокращенно обозначать ее как «AS».Примечание: для единообразия изложения spend-ключи и далее будут обозначаться буквами
Формирование выходов
Аккаунт кошелька представлен набором не двух, как в CryptoNote, а трех секретных ключей
Совокупность трех открытых ключей
Алиса, отправляя деньги бобу, действует следующим образом (рис. 5.1).
![]() [SUB]Рис. 5.1. Формирование выходов транзакций в схеме AS[/SUB] |
- Боб опубликовывает свой адрес, поэтому Алиса знает его открытые ключи
- Так же, как и в CryptoNote, Алиса выбирает случайный секретный ключ транзакции
- Для каждого выхода Алиса вычисляет не один, а два стелс-адреса
Второй иначе:
Порядковый номер выхода в оригинальной работе здесь не используется, однако, разумно предположить, что это сделано для упрощения и на практике он будет одним из аргументов функции - Алиса подписывает и отправляет транзакцию.
Сторонний наблюдатель не сможет связать
Распознавание входящих платежей и формирование входов
Чтобы принять и потратить деньги, Боб действует следующим образом (рис. 5.2).
![]() [SUB]Рис. 5.2. Определение входящих переводов и формирование входов для тратящей их транзакции[/SUB] |
- Используя свой секретный view-ключ
(этот шаг аналогичен CryptoNote) - В случае, если равенство выполняется, это означает, что данный выход адресован Бобу. Он увеличивает свой баланс на величину номинала выхода.
- При необходимости перевести полученные средства Кэрол, Боб, используя свои секретные spend- и audit-ключи
и дополнительный:
Затем записывает их, номинал и ссылку на соответствующий выход во вход своей транзакции для Кэрол. - Затем Боб формирует выходы транзакции для Кэрол, уменьшает свой баланс пропорционально потраченным выходам, подписывает транзакцию и отправляет.
Как видно, здесь так же, как и в CryptoNote третья сторона — Аудитор — обладая только секретным view-ключом
Аудит
Если же Аудитор располагает также секретным audit-ключом
- Для каждого входящего платежа Аудитор будет рассчитывать и запоминать дополнительный key image
- Если во входах какой-либо из транзакций блокчейна дополнительный key image
Таким образом, Аудитор, обладая набором ключей
Задача решена.
Кольцевая подпись
Применив идеи из работы [
You must be registered for see links
], автору удалось уменьшить размер подписи по сравнению с CryptoNote: теперь, для каждого входа в подписи хранится только
![]() [SUB]Рис. 5.3. Сравнение размеров кольцевой подписи в схеме AS и CryptoNote[/SUB] |
Рассмотрим вычислительную сложность ее проверки. Схема проверки подписи представлена на рис. 5.4.
![]() [SUB]Рис. 5.4. Схема проверки кольцевой подписи в AS[/SUB] |
Вычислительная сложность алгоритма определяется шестью операциями скалярного умножения и одним вычислением хеш-фукнции
Сравнение с CryptoNote по данным и вычислительной нагрузке
- Размер адреса увеличивается на 50%, т.к. адрес теперь представляет совокупность трех открытых ключей:
Кодированное представление адреса увеличится примерно на столько же: например, стандартный Zano-адрес, содержащий два открытых ключа, занимает 97 символов:
ZxD5UBX5PM3RTsEtTRd9ATUFxXyocoQzDRk3baVBahuWQJRK8QHTUT9GQM7jk7GoedK5B2nP4HxSPDpuLHvizpwj2q99bmz7t
Аналогичный Zano-адрес, содержащий три открытых ключа будет иметь длину порядка 141 символа:
ZxD5UBX5PM3RTsEtTRd9ATUFxXyocoQzDRk3baVBahuWQJRK8QHTUT9GQM7jk7GoedK5B2nP4HxSPDpuLHvizpwjcenhnGbhpJFLk8vkhJywHCcht4d9EKA7CHHav1H6QPpB1cLsTvPfj - Размер каждого выхода увеличивается на дополнительный стелс-адрес
- Размер каждого входа увеличивается на дополнительный key image
- Размер кольцевой подписи меньше, чем в CryptoNote:
- Вычислительная сложность выше, чем в CryptoNote:
6. Вариант 3/3. Аудит через ограничение на подмешивание выходов
Рассмотрим еще один способ реализации аудита в CryptoNote.
Атрибут выхода mix_attr
В проекте Zano, являющимся наследником CryptoNote, у выхода транзакции появился дополнительный атрибут mix_attr размером 8 бит, и правило ядра, ограничивающее использование выходов в подмешивании, в зависимости от его значения.
Структуру выходов CryptoNote и Bytecoin (рис. 4.2) мы можем теперь дополнить таким образом (рис. 6.1.).
![]() [SUB]Рис. 6.1. Сравнение структуры данных для выходов транзакций CryptoNote, Zano и Bytecoin Amethyst[/SUB] |
- Если mix_attr = 0, то ограничений нет. Данный выход может использоваться для подмешивания с другими выходами в любых комбинациях. Это — значение по-умолчанию.
- Если mix_attr = 1, то данный выход может быть потрачен только непосредственно, без подмешивания, и не может быть использован для подмешивания к другим выходам.
- Если mix_attr ≥ 2, то данный выход может быть потрачен только при подмешивании других, при этом общее число использованных выходов не должно быть меньше величины mix_attr.
Главной особенностью этого нововведения является п. 3, что позволяет увеличить untraceability (неотслеживаемость связей) за счет исключения ситуаций, когда выход, уже использованный в подмешивании, тратится его владельцем непосредственно (это подробно рассмотрено в [
You must be registered for see links
]).Однако, в контексте данной статьи, нас будет интересовать п. 2, то есть ситуация, когда mix_attr = 1 и выход, помеченный таким образом, может быть потрачен только непосредственно. Это ограничение проиллюстрировано на рис. 6.2.
![]() [SUB]Рис. 6.2. Иллюстрация ограничения. Сверху: input #0 ссылается только на output #0 с mix_attr = 1 (непосредственная трата) — допустимая ситуация.Снизу: input #1 ссылается на три выхода: output #2 с mix_attr = 1 и еще на output #1 и output #3 — недопустимая ситуация[/SUB] |
Эту особенность можно использовать для организации аудита.
Аудит при помощи mix_attr = 1
Как было отмечено в разделе 3, если в рамках оригинального протокола CryptoNote аудитор Ден получит от Боба секретный ключ
Тем не менее, поскольку Ден будет обладать полной информацией о не потраченных выходах (UTXO) Боба, то он сможет отследить тот факт, что какая-то транзакция в своих входах ссылается на UTXO Боба. При использовании подмешивания других выходов Ден не сможет определить, тратит ли данная транзакция именно выход Боба, что достигается благодаря использованию кольцевой подписи. Однако, если подмешивания нет и UTXO Боба тратится непосредственно, то аудитор Ден может быть уверен, что данная транзакция является исходящим платежом Боба. В этом и состоит идея данной схемы.
Предположим, что Алиса отправляет Бобу транзакцию, и Боб хочет, чтобы аудитор Ден мог видеть факт прихода средств от Алисы и факт их траты, когда Боб решит их потратить.
Схема работы будет выглядеть следующим образом (рис. 6.3).
![]() [SUB]Рис. 6.3. Аудитор с помощью секретного view-ключа |
- Боб сообщает Алисе свой публичный адрес
- Боб передает аудитору Дену свой секретный view-ключ
- Алиса отправляет Бобу транзакцию по обычной схеме CryptoNote. В выходах, адресованных Бобу она ставит mix_attr = 1.
- Ден сканирует все транзакции в блокчейне и с помощью секретного view-ключа Боба проверяет для каждого выхода
Ден убеждается, что mix_attr == 1, добавляет данный выход в список и увеличивает баланс на величину номинала выхода. - Ден также проверяет все входы всех транзакций, и если один из входов ссылается на UTXO Боба из списка, то это означает, что данная транзакция — исходящий платеж Боба. Благодаря ограничению mix_attr = 1, данных вход не может подмешивать другие выходы, а значит он тратит выход Боба непосредственно, и Ден может быть уверен, что это исходящий платеж Боба.Ден уменьшает баланс на величину номинала входа.
Таким образом, Ден сможет рассчитать корректный баланс кошелька Боба, не получая доступа к его секретному spend-ключу
Особенности схемы
Особенность 1. Важно, чтобы отправляющая сторона (Алиса) поставила mix_attr в значение 1 при отправке транзакции. Если Алиса этого не сделает, то средства придут Бобу, однако в дальнейшем Ден не сможет однозначно сказать, потратил их Боб или нет, так как любой другой пользователь сможет использовать данных выход для подмешивания.
Один из вариантов решения — введение адресов особого типа, содержащих те же два открытых ключа
Особенность 2. Использование адресов особого типа не обязывает Алису устанавливать нужное значение атрибута для выходов. Она может отправить средства не сделав этого, однако, это будет сразу же выявлено как Бобом, так и аудитором Деном.
Особенность 3. В данной схеме возможность аудита достигается ценой предельного уменьшения untraceability (неотслеживаемости связей). Это не представляет особой проблемы в случае, если возможность аудита предоставлена неограниченному кругу лиц. Например, благотворительный фонд может опубликовать адрес для пожертвований вместе с секретным view-ключом, благодаря чему любой желающий сможет выступить в качестве аудитора и рассчитать актуальный баланс его кошелька. Важно, что при этом анонимность входящих переводов остается стандартной для CryptoNote (можно использовать большое число
Стоит отметить, что в случае, когда возможность аудита предоставляется узкому кругу лиц, в отличии от примера выше, уменьшение untraceability может быть нежелательным эффектом.
Большими достоинствами этого варианта являются простота реализации и отсутствие дополнительной нагрузки по вычислениям и данным.
7. Заключение
Мы рассмотрели три варианта добавления возможности проведения аудита в протокол CryptoNote: Bytecoin Amethyst, теоретическая схема AS от Anton Sokolov и использование mix_attr (обозначим как MA).
Относительное изменение размера кольцевой подписи для всех вариантов, кроме Bytecoin (BCN), не зависит от
![]() [SUB]Рис. 7.1. Сравнение размеров кольцевой подписи при |
Лучший результат показывает схема AS, давая уменьшение размера кольцевой подписи в широком диапазоне числа подмешиваемых выходов (
Схема MA никаких улучшений в части размера кольцевой подписи не предлагает.
Сравним теперь трудоемкость процедуры проверки кольцевой подписи. Для этого будем использовать метрику, упоминавшуюся выше, а именно возьмем сумму операций скалярного произведения и вычисления хеш-функции
Имеем следующую картину (рис. 7.2).
![]() [SUB]Рис. 7.2. Сравнение увеличения вычислительной сложности проверки кольцевой подписи ( |
При подмешивании выходов (
Подведем окончательный итог, приняв во внимание такие факторы, как увеличение размера адреса, входов и выходов транзакций (рис. 7.3).
![]() [SUB]Рис. 7.3. Сравнение всех рассмотренных схем[/SUB] |
Варианты реализации аудита Bytecoin и AS подразумевают добавление одной точки (32 байт) к каждому выходу транзакции, однако, размер входа остается неизменным только для Bytecoin.
Стоит также отметить тот факт, что схема Bytecoin Amethyst достаточно давно реализована в коде и, судя по отсутствию сообщений о проблемах за прошедшее с момента ее воплощения время, хорошо проверена на практике. Однако, ее публичное описание в строгом виде найти не удалось, поэтому и формальные доказательства ее корректности пока отсутствуют.
Схема AS, напротив, описана строго и предложена к обсуждению в криптосообществе [
You must be registered for see links
].Схема MA не имеет строго описанного формального доказательства, однако, в силу ее крайней простоты, оно представляется излишним.
Литература
1. Nicolas van Saberhagen, «CryptoNote v 2.0»
You must be registered for see links
2. Анонс Bytecoin на форуме bitcointalk.org
You must be registered for see links
3. Анонс Bitmonero на форуме bitcointalk.org
You must be registered for see links
4. Репозиторий Bitmonero в Github
You must be registered for see links
5. Bernstein et al. «Ed25519: high-speed high-security signatures»
You must be registered for see links
6.
You must be registered for see links
«Доступно о криптографии на эллиптических кривых»
You must be registered for see links
7. Shen Noether, «Understanding ge_fromfe_frombytes_vartime»
You must be registered for see links
8. Shen Noether, MRL, «Ring confidential transactions»
You must be registered for see links
9. Коммит, задающий численно константу H в коде Monero:
You must be registered for see links
10. Bytecoin blog — Auditable coins
You must be registered for see links
11. Anton Sokolov, «Cryptonote auditability. How to append a wallet balance audit.»
You must be registered for see links
12. Anton Sokolov, «Discussion for the auditable wallets Variant 1 and 2»
You must be registered for see links
13. Anton Sokolov, «The unlinkable auditable Variant 3»
You must be registered for see links
14. Anton Sokolov, «The auditable variant 4. Memory efficiency and security question.»
You must be registered for see links
15. Anton Sokolov, «Multi-signature with LSAG. One more memory efficient approach to auditable wallets.»
You must be registered for see links
16. Abe, Ohkubo, Suzuki, «1-out-of-n Signatures from a Variety of Keys» (AOS).
You must be registered for see links
17. Anton Sokolov, «Cryptonote auditability and efficient scheme for anonymous key vector proof»
You must be registered for see links
18. Anton Sokolov, «Practical approach for appending auditable wallets to the Cryptonote»
You must be registered for see links
19. «Boolberry Solves CryptoNote Issues»
You must be registered for see links
20. «Bytecoin Amethyst Stable Release Extended Technical Description»
You must be registered for see links