Технический › RingCT

Слабые места RingCT

Где приватность Monero сегодня неидеальна — и почему именно это лечит FCMP++

Коротко

Суммы и получатели в RingCT защищены криптографией. Отправитель — только статистикой: «1 из 16». Почти все известные атаки работают одинаково — они исключают приманки из кольца или взвешивают кандидатов по вероятности. Ниже — основные, от самых известных до самых тонких.

Модель: эффективный размер кольца

Кольцо из 16 даёт 16 вариантов, только если все они одинаково правдоподобны. Каждая крупица внешней информации уменьшает эффективный размер кольца. Если наблюдатель может вычеркнуть 10 приманок, остаётся «1 из 6». Если может взвесить оставшихся — «скорее всего вот этот».

16 кандидатов → исключили 10 → 6 → + статистика → ~2

1. Цепная реакция (исторически)

До 2016 года разрешались транзакции без приманок (кольцо из 1). Такой вход однозначно раскрывает, какой выход потрачен. А если этот выход использовался как приманка в чужом кольце — его можно вычеркнуть оттуда. Это может сделать другое кольцо однозначным, и так далее — цепная реакция. Исследования 2017 года показали, что так деанонимизировалась большая доля входов ранних транзакций.

Статус: закрыто запретом нулевых колец и переходом на RingCT (RingCT-выходы можно смешивать только с RingCT-выходами). Но старые выходы помнят свою историю.

2. Возраст входов

Если распределение возраста приманок не совпадает с тем, как люди реально тратят деньги, настоящий вход выделяется. Классическая эвристика «самый новый — настоящий» работала очень хорошо на ранних транзакциях. Подробно — в выборе приманок.

Статус: смягчено гамма-распределением, но полностью не устранимо, пока приманки выбираются.

3. EAE-атака (Eve–Alice–Eve)

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

Ева (биржа) Алиса tx … Ева снова Ева знает оба конца и ищет свой выход в кольцах

Статус: одна из самых практичных атак для централизованных сервисов. Смягчается churning (переводом самому себе с паузами), но надёжно — только FCMP++.

4. Флуд (black marble)

Атакующий массово создаёт транзакции со своими выходами. Эти выходы, по правилам выбора приманок, начинают попадать в кольца других пользователей. Атакующий знает, что они «пустые», и вычёркивает их. Чем больше доля его выходов в блокчейне за период, тем меньше эффективное кольцо у всех остальных. Подобные эпизоды спама наблюдались в 2021 и 2024 годах; оценки показывали заметное падение эффективного размера кольца на время атаки.

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

5. Объединение входов

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

Статус: присуще кольцам. FCMP++ сильно ослабляет (каждый вход — «один из всех»), но число входов остаётся видимым.

6. Метаданные транзакции

  • Число входов и выходов: транзакция 1→2 обычна, 15→1 бросается в глаза (консолидация).
  • Комиссия: нестандартная комиссия выдаёт нестандартный кошелёк.
  • Время: транзакции, созданные сразу после получения средств, выдают возраст настоящего входа.
  • tx_extra: нестандартные поля, порядок, дополнительные ключи — «отпечаток кошелька».
  • Время разблокировки (unlock_time): нестандартное значение выделялось (удалено в новых правилах).

Статус: FCMP++ это почти не трогает — это задача кошельков: одинаковое поведение, одинаковые форматы.

7. Сетевой уровень

Узел, который первым передал транзакцию в сеть, скорее всего её автор. Monero использует Dandelion++: транзакция сначала незаметно передаётся по цепочке случайных узлов («стебель»), и только потом рассылается всем («цветок»). Плюс поддержка Tor/I2P. Если вы пользуетесь чужим удалённым узлом, он видит ваш IP и время отправки.

Статус: вне блокчейна, FCMP++ не помогает. Используйте свой узел или Tor.

Итог: что лечит FCMP++

СлабостьRingCTFCMP++
Цепная реакцияисторическаяне применима
Возраст приманоксмягченоустранено
EAEработаетустранено (по блокчейну)
Флудработаетпрактически устранено
Объединение входовработаетсильно ослаблено
Метаданные (число in/out, fee, время)виднывидны
Сеть (IP)Dandelion++/Torбез изменений

Дальше: как устроен FCMP++.