Под словом «приватный» люди понимают две разные вещи, и большинство инструментов делают только лёгкую. Можно скрыть, сколько Вы отправили, или скрыть, кому Вы отправили. Это не одна и та же задача, и решение первой почти ничего не даёт для второй. Растущий класс схем конфиденциальных переводов шифрует сумму перевода — число скрыто, балансы зашифрованы — и преподносит это как приватность. Это реальная и полезная функция. Но это та половина задачи, которая утекает меньше всего информации.
Эта статья — о другой половине: о связи между отправителем и получателем, которую шифрование суммы оставляет совершенно нетронутой.
Что на самом деле скрывает зашифрованная сумма
Представьте обычный перевод на Solana, в котором сумма затёрта. Наблюдатель по-прежнему видит: кошелёк A отправил что-то кошельку B, в этот момент времени, в этом токене. Ребро графа на месте. Оба адреса на месте. Время на месте. Не хватает только цифры в поле суммы.
Для большого числа реальных деанонимизаций цифра — наименее ценный фрагмент. Если следователь, контрагент или любопытный незнакомец уже видит, что Ваш кошелёк платит конкретному получателю каждые две недели, у него есть Ваша связь, Ваш ритм и — путём перекрёстной сверки других публичных переводов — обычно неплохая оценка суммы в любом случае. Шифрование числа слегка повышает трудозатраты. Но связь оно не разрывает.
А на прозрачном реестре чувствительная часть — это именно связь. Ваши контрагенты, Ваша зарплатная ведомость, Ваши торговые связи, тот факт, что кошелёк A и кошелёк B — один и тот же человек, — это свойства графа, а не свойства суммы. Они переживают шифрование суммы нетронутыми.
То, что действительно должно исчезнуть: ребро
Приватность на публичном блокчейне по сути касается графа, а не меток на рёбрах. Чтобы получить настоящую несвязываемость, нужно убрать само ребро — сделать так, чтобы ни один наблюдатель не смог провести линию от того, куда средства вошли, к тому, откуда они вышли.
Для этого нужен защищённый пул. Множество людей вносят депозиты за криптографическими обязательствами; каждый позже выводит средства с помощью доказательства с нулевым разглашением, утверждающего «я владею одним из непотраченных депозитов в этом пуле», не раскрывая каким именно (/learn/how-zk-proofs-work). Депозит и вывод — это две отдельные транзакции без ребра между ними. Наблюдатель видит депозит с кошелька A и не связанный с ним вывод на кошелёк B и искренне не может определить, один ли это человек, — потому что математика, которая позволила бы это определить, никогда не публиковалась.
Заметьте, что изменилось. Дело не в том, что сумма зашифрована. Дело в том, что связь исчезла. Это структурно более сложная вещь для построения — она требует дерева Меркла из обязательств, схемы нуллификаторов для предотвращения двойной траты и настоящей системы доказательств (/glossary/shielded-pool, /glossary/nullifier) — и именно поэтому шифрование суммы встречается чаще. Это более простая инженерная задача.
«Но ведь все используют одинаковые суммы» — почему пулу всё равно нужна аккуратность
Разорвать ребро необходимо, но не автоматически достаточно, и здесь суммы возвращаются в историю — совсем с другой стороны. Внутри защищённого пула опасность не в том, что Ваша сумма видима; опасность в том, что Ваша сумма особенная. Если каждый депозит в пуле — примерно 0,5 SOL, а Вы вносите 47, то, когда 47 выходят обратно, математика указывает на Вас независимо от того, насколько хорошим было доказательство. Доказательство скрывает, какую ноту Вы потратили; аномальная сумма всё равно сужает список подозреваемых до одного.
Так что в защищённом пуле цель противоположна шифрованию: Вы хотите, чтобы Ваша сумма выглядела как у всех остальных. Вносите и выводите суммами, совпадающими с толпой, круглыми цифрами — и Вы сливаетесь с максимально возможным множеством. /blog/anonymity-sets-on-solana разбирает в точности то, как диапазоны сумм формируют круг тех, среди кого Вы прячетесь. Это более честное обращение с суммами, чем даёт шифрование: секрет — не число, защита — это похожесть на остальных.
Быстрый способ определить, какую «приватность» предлагает инструмент
Задайте один вопрос: после того как я этим воспользуюсь, сможет ли наблюдатель по-прежнему видеть, что мой кошелёк связан с получателем?
- Если ответ «да, но они не видят, сколько» — это приватность суммы. Полезна для скрытия балансов и размеров платежей; бесполезна для скрытия связей.
- Если ответ «нет, сама связь исчезла» — это приватность связи, которую и обеспечивает защищённый пул.
Большинство того, что продаётся как конфиденциальные переводы, — первого типа. Для моделей угроз, которые людям действительно важны — не дать контрагенту составить карту Вашей казны, не дать получателю увидеть весь Ваш капитал, не дать сделать публичным граф Вашей зарплатной ведомости, — Вам нужен второй.
Куда двигаться дальше
Если Вы хотите увидеть приватность связи на практике, /blog/sending-sol-without-revealing-your-main-wallet — пошаговое руководство. Если Вы хотите честных границ — чего не исправит даже приватность связи, — /learn/what-solmask-cannot-protect-you-from приводит неприукрашенный список. А /compare раскладывает, чем на самом деле различаются разные конструкции в этой области.
FAQ
В. Разве шифрование суммы — это не лучше, чем ничего? О. Да, для узкой цели скрытия балансов и размеров платежей. Только не путайте это с несвязываемостью — оно оставляет отправителя, получателя и время полностью публичными, а это обычно и есть та информация, которую люди на самом деле хотели защитить.
В. Если защищённый пул разрывает связь, почему его вообще заботят суммы? О. Потому что необычная сумма заново идентифицирует Вас методом исключения даже при идеальном доказательстве. Внутри пула Вы хотите, чтобы Ваша сумма напоминала толпу, а не была скрыта. Это обратное шифрованию суммы.
В. Шифрует ли SolMask тоже суммы? О. SolMask скрывает связь — более сложное и более ценное свойство. Суммы депозита и вывода — это часть того, как Вы сливаетесь с толпой, поэтому рекомендация — соответствовать толпе, а не выделяться. См. /blog/anonymity-sets-on-solana.
В. Могу ли я получить и то, и другое — скрытые суммы и разорванную связь? О. Приватность связи — это свойство, которое побеждает анализ графа, и именно ему стоит отдать приоритет. Сочетайте её с хорошей гигиеной сумм (круглые цифры, соответствие соседям) и свежим адресом получателя — и Вы закроете то, чего одно лишь шифрование суммы коснуться не может.