Навигация по различным реализациям CoinJoin

By Bitcoin Журнал - 1 год назад - Время чтения: 12 минуты

Навигация по различным реализациям CoinJoin

How does one cut through the noise and confusion to find the optimal way to utilize CoinJoins and obscure their bitcoin транзакции?

This is an opinion editorial by Thibaud Maréchal, a contributor to privacy-focused Bitcoin проект кошелька Wasabi Wallet.

“Divide and conquer” is a battle-tested military strategy to fracture a group of people by making them disagree and fight each other instead of joining together against a common enemy. Wasabi and Samourai, two popular bitcoin wallets with different CoinJoin implementations have been fighting for many years. JoinMarket, a third CoinJoin implementation, has also been involved in colorful debates with other privacy developers.

Узнавать о bitcoin privacy and CoinJoins has become quite hard with ongoing drama. Who to trust? How can one verify for themselves? It’s all very unclear. What does it bring for precoiners, casual bitcoin and purists alike? Confusion, fear, uncertainty and doubt (FUD). The state of bitcoin privacy is embarrassing with all this perpetual drama scaring away new users. Precious time is wasted by developers, educators and regular users who would probably be better off doing anything but trying to keep up with the drama.

It is obvious that no one agrees on “how to do CoinJoins right,” let alone, how CoinJoins should be implemented to optimize user privacy and block space efficiency on the Bitcoin network? What are the tradeoffs between different implementations? Are some implementations outright flawed? How do CoinJoins “cross the chasm” from early adopters to mainstream users when billions of people will turn to bitcoin in the coming years?

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

Не все CoinJoins одинаковы

Blockspace efficiency should be considered to make sure CoinJoin transactions scale as Bitcoin gets used by more people across the world. This is rarely discussed as a top priority. Any CoinJoin design that ignores blockspace scarcity is unnecessarily spamming the block chain while accumulating technical debt, which will be difficult to pay back as more users CoinJoin in the future. Having a minimal footprint on the block chain is one goal that seems very reasonable to aim for: a small number of transactions to get to an acceptable level of anonymity sounds ideal.

What is an acceptable level of anonymity? What does anonymity even mean in the context of bitcoin privacy?How are particular CoinJoin designs dealing with blockspace scarcity?

Восстановите свою конфиденциальность

Анонимность в bitcoin would mean that there are no outstanding or unusual features that would make a given transaction remarkable from other transactions on the ledger. That, of course, is not by design on the Bitcoin network, which is a pseudonymous system where coins (UTXOs, which stands for Unspent Transaction Output in technical terms) are by default not fungible due to having unique transaction histories.

CoinJoins add a level of anonymity to the bitcoin network by breaking links between transaction inputs and outputs primarily making resulting UTXOs indistinguishable from each other. There are other heuristics that chain analysis companies use to watch the bitcoin network, such as common input ownership, self-spending, round amounts or timing analysis to name a few, which may or may not be obscured by CoinJoins.

CoinJoins help bitcoin reclaim their privacy but are not the solution to everything. If privacy is understood as the choice to share information about oneself, great privacy can be achieved through CoinJoins but picking the right implementation is essential.

What is my privacy goal using CoinJoins? Which heuristics does a CoinJoin implementation protect me against?What are the risks that I want to avoid?

Число участников

Существующие реализации CoinJoin имеют очень разные способы улучшения конфиденциальности. Независимо от дизайна каждой реализации CoinJoin набор анонимности (одна мера уровня анонимности) кажется наиболее традиционным способом оценки степени конфиденциальности, которую можно получить от CoinJoin. Есть и другие способы, которые будут рассмотрены в других статьях. Предполагается, что высокий уровень анонимности достигается либо с помощью крупной транзакции CoinJoin, либо с несколькими меньшими транзакциями CoinJoin. Оба эти параметра важны, но есть ли один важнее другого?

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

Is one single large CoinJoin or multiple small CoinJoins better for privacy?How can that be verified truthfully and rigorously? How small is too small for a CoinJoin? What is the right metric to evaluate how much privacy you can get from a CoinJoin? What is the most blockspace efficient when it comes to the size and number of CoinJoins to reclaim your privacy?Is it realistic to expect coins to participate in multiple CoinJoins over time as more people start using CoinJoins? How many CoinJoin rounds is enough or too much?

In simple terms, CoinJoins allow bitcoin to reclaim their privacy by giving them plausible deniability. Plausibility is a measure of probability. How likely is it that your bitcoins were spent or simply moved to another address you still control? How likely is it that one input is linked to a given output?

Obviously, the smaller the probabilities across many options, the better plausible deniability you get as a hodler. Plausible deniability is hard to preserve because errors are easy to make. Change outputs are often problematic for bitcoin who care about privacy and are often a source of contentious discussions and criticism. Why is change output such a controversial topic in CoinJoins?

Изменить вывод

It’s all about deterministic links. If bitcoin transactions had a spectrum of privacy, on one end would be a transaction with absolute plausible deniability, meaning 0% chance of knowing the link between inputs and outputs. This is also referred to as randomness or entropy in a CoinJoin. The assumption is that the more random or higher the entropy, the better. On the other end would be a transaction with 100% deterministic links between its only input and single output.

Неинтуитивно, но высокая энтропия не обязательно означает, что транзакция обеспечивает хорошую конфиденциальность. Транзакция с тремя входами и тремя выходами равных сумм технически имеет 100% энтропию, то есть невозможно отличить каждый выход друг от друга; и все же существует вероятность 33.33%, что каждый вход связан с определенным выходом. Высокая энтропия не обязательно означает хорошую правдоподобность отрицания.

Изменение почти всегда имеет очень сильную детерминированную связь с предыдущей транзакцией. Другими словами, мало кто сомневается в том, что вывод сдачи не привязан к предыдущей транзакции, в которой она была потрачена. Это может быть серьезной проблемой конфиденциальности, если данный вывод сдачи должен быть совместно потрачен с другими анонимными входами после CoinJoins (хотя в некоторых случаях могут применяться исключения). Это обычно называется консолидацией UTXO и может быть фатальным для вашей конфиденциальности, если сделано наивно.

Change outputs can de-anonymize outputs that have gained some plausible deniability from CoinJoins if spent together. Errors are commonplace for bitcoin and sometimes the realization comes too late, undoing years of diligent privacy enhancements in one single spend. How to get rid of this change output problem?

Существующие реализации CoinJoin имеют три способа обработки вывода сдачи: изолировать сдачу в другой кошелек, который не является CoinJoining, включить вывод сдачи в тот же кошелек, который является CoinJoining, или избавиться от вывода сдачи, вообще не имея вывода сдачи. Последнее кажется наиболее целесообразным с точки зрения конфиденциальности и эффективности блочного пространства, но для подтверждения или отклонения этого предположения требуются дальнейшие исследования.

Is a high entropy score enough to qualify a CoinJoin as good for your privacy?Is it better to isolate change outputs in another wallet or should it be removed entirely?Is a change output always bad for your privacy?

Номиналы монет

Getting rid of change outputs in CoinJoins requires that coin denominations be variable in a CoinJoin. In other words, the inputs registered in a given CoinJoin cannot have a fixed size like 0.1 BTC, otherwise it becomes impossible (or at least very hard) to consume inputs without creating change outputs as most UTXOs don’t have round numbers (i.e. 0.19572394 BTC where 0.09572394 BTC would be the change in a 0.1 BTC fixed coin denomination CoinJoin).

Выходы изменений могут быть опасны для вашей конфиденциальности, помните? Наличие нескольких размеров для входов и выходов в CoinJoin кажется плохой идеей, поскольку приближает нас к детерминированным связям между входами и выходами, верно? Ну да и нет. Это зависит. Если CoinJoin имеет небольшое количество участников (имеется в виду мало входов и мало выходов), то разные номиналы — плохая идея. Но что, если в данный CoinJoin включено большое количество входов и выходов?

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

Is it better to have fixed or variable coin denominations in a CoinJoin?How big should a CoinJoin be for variable denominations to make sense?Are variable coin denominations the best way to get rid of change output in CoinJoins?

Само собой разумеется, что взаимосвязь раундов CoinJoin не должна быть допустимой ни при каких обстоятельствах, независимо от того, различаются ли номиналы монет или является ли CoinJoin крупной или мелкой транзакцией, верно? Ну и здесь опять же есть важный нюанс, который нужно понимать.

Взаимодействие раундов Coinjoin

Утверждается, что регистрация входных данных из прошлых общих CoinJoins в новые CoinJoins во всех случаях не рекомендуется. Участники совместно используемых прошлых CoinJoins, похоже, не получают выгоды от совместного участия в других CoinJoins. Это кажется вредным для конфиденциальности и часто подвергается критике.

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

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

Is CoinJoin rounds interconnectivity, which is sharing mutual past CoinJoins, a bad thing on its own?How large should a CoinJoin be for remixing with other past inputs to be considered safe?

Персональный полный узел

Should you run your own bitcoin full node when participating in CoinJoins? On the surface, it seems like a great idea, and it usually is. Some CoinJoin implementations allow that, while others outright require it. Others won’t allow you to even use your own full node. Is that to condemn absolutely? If you’ve read until now, you should know that the answer is nuanced and opens up a deep rabbit hole to be explored later.

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

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

Does the CoinJoin implementation allow to run full nodes, require them by default or don’t allow them? If personal full nodes are not mandatory, what are the privacy shields in place? i.e. Tor, block filters, etc… If I run my own full node, but expect most users to use a default trusted node to CoinJoin, how does that affect my privacy? Can the coordinator de-anonymize me?

With privacy concerns, it is always important to understand what you’re trying to protect, and against whom. Running a full node and using it with your own wallet is the right way to use bitcoin as it allows you to verify your wallet balance and broadcast transactions to the network without trusting anyone. But when it comes to CoinJoins, there is usually a coordinator in charge. What does the coordinator do and how is it selected? Read on.

Координатор

The CoinJoin coordinator is in charge of having every participant register their inputs and outputs, and sign the collaborative transaction before broadcasting it. Most CoinJoin implementations default on a central coordinator, which is a single point of failure. Up until now, this has been an accepted tradeoff in most bitcoin communities. Can a central CoinJoin coordinator fail? Absolutely. Other implementations allow anyone to be a coordinator for each different CoinJoin, though there are other sets of trade offs here that will be discussed later.

Coinjoins being non-custodial, no loss of funds could occur if any coordinator would fail. The coordinator should never know more than what everyone knows publicly on the bitcoin network. Why? If a coordinator knows more than what is publicly available, a CoinJoin coordinator becomes a honeypot with highly sensitive data that can be exploited against bitcoin trusting the service.

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

An example of sensitive user data would be XPUBs, which undeniably leak all the information about a wallet, its addresses, including past, current and future bitcoin transactions. Another example would be the ratio between users running their own full nodes and users trusting the coordinator’s full node to broadcast CoinJoins, as it could de-anonymize users running their own nodes, and therefore deterministically know the links between their inputs and outputs. This is yet another nuanced topic, which would require further investigation and discussion.

Does the coordinator know more than what is publicly available on the bitcoin network? Do users leak sensitive data to the coordinator, such as their XPUB or whether or not they run their own full nodes?Does the coordinator claim that users should trust them using legal defense mechanisms? (i.e. warrant canaries, regulatory arbitrage, etc…)

Сборы

Bottom line, who pays for what in CoinJoins? These bitcoin transactions can be expensive and sometimes fee structures are unclear for bitcoin. It’s hard to know how much good privacy will cost you or even if you are getting any privacy out of it. Some CoinJoin implementations allow a single input to buy its privacy from other inputs who only participate for free to increase their own anonymity set. Getting paid to CoinJoin? With patience, yes.

Некоторые модели полагаются на общие сборы, когда только некоторые UTXO платят сборы, а другие нет. Другие модели основаны на приглашении постоянно растущего числа новых четких входных данных (еще не смешанных) для финансирования существующих CoinJoins для повторного микширования входных данных, которые не имеют достаточно высокого уровня анонимности. Некоторые модели кажутся неустойчивыми в долгосрочной перспективе, в то время как другие наивны или слишком дороги для большинства пользователей.

And what fees are we talking about? Well usually, inputs participating in CoinJoins pay both a coordinator fee or taker fee, (the service fee to get some level of anonymity) and the bitcoin network fees. In particular CoinJoin models, these fees get waived in certain circumstances. The economics of CoinJoins is a deep rabbit hole which requires further investigation for a much deeper understanding.

Who pays for what in a CoinJoin? What are all the fees? What are the incentives of the CoinJoin coordinator? Are all CoinJoin rounds paid for or is there any free remix?

Having read thus far, the hope is that bitcoin shopping around for CoinJoins would not necessarily have all of the answers, but the right questions to ask. A mental model or framework to evaluate different CoinJoin implementations can be quite helpful for anyone who is considering using CoinJoins to reclaim their privacy on bitcoin. Sorting through the noise of social media requires intellectual honesty and the right evaluation system rigorously applied.

Это гостевой пост Тибо Марешаля. Высказанные мнения являются полностью их собственными и не обязательно отражают точку зрения BTC Inc или Bitcoin Журнал

Исходный источник: Bitcoin Журнал