Алгоритм создания транзакции не оптимизирован для анонимности. Это утечка информации, которая потенциально может быть использована для отслеживания денег, протекающих через систему. Хотя это не может представлять интерес для некоторых людей, это беспокойство другим. Для того, чтобы максимально увеличить анонимность для тех, кто желает его поведение создания транзакции в стандартном клиенте должно быть смещено в максимально возможной степени в стороне анонимности. Это смещение может быть легко достигнуто без каких-либо дополнительных сборов сделки.
Проблема
Одним из свойств Bitcoin является его способность быть анонимным. Эта способность не является совершенным, но оно есть. Тем не менее, текущая реализация позволяет достаточно бокового канала утечки информации, чтобы сделать его менее трудным для кого-то, чтобы отследить поток денежных средств через различные переводы. Закрытие этих боковых каналов не может остановить решительный аналитик, особенно если у них есть достаточные вычислительные ресурсы, но это, безусловно, сделает их работу сложнее. Для того, чтобы сделать работу трекера труднее, нам нужно минимизировать количество информации, которая позволяет следящее рисовать связь между двумя Bitcoin адресами.
Основная проблема с текущим программным обеспечением является алгоритмом выбора монет (по "монета" Я имею в виду предыдущий выход транзакции, т.е. Vin [Икс] .prevout. Я иногда буду использовать термины "монета" а также "адрес" взаимозаменяемо). Кстати, операционные издержки не влияют на эту дискуссию, и предполагается, должны быть включены в "к оплате" - количество Bitcoins передается от одного человека к другому.
Алгоритм выбора, который я называю "наиболее подходящий" Алгоритм, сводится к:
- Если есть монета, которая точно соответствует сумме оплаты, а затем использовать его
- В противном случае, найти монету (если таковая имеется), которая превышает сумму платежа по наименьшей сумме; т.е. если платеж 10BTC и у вас есть монеты 11BTC и монета 15BTC, используйте монету 11BTC
- В противном случае, найти наилучшее сочетание монет, подводящее ближе всего к сумме платежа.
Правило 1 легко. Монета идет от адреса A, чтобы обратиться Б. После этого транзакция тривиальна.
Правило 2 немного сложнее, но не так много. Стандартный клиент не позволяет единый платежу нескольких получателей, поэтому один из двух выходов (изменение) должен контролироваться одним и тем же лицом, которое контролирует адрес A. поколение транзакций рутинные несколько смягчает этот путем случайного выбора идет ли изменение в Vout [0] или Vout [1]. Но мы знаем (и, следовательно, трекер также знает), что клиент будет пытаться выбрать монету, которая приходит как можно ближе по величине к оплате, поэтому весьма вероятно, что выход с меньшим значением является изменением, а выход с большим значением является оплата. Чем больше разница между выходными значениями, тем больше это, вероятно. Это по-прежнему думаю, конечно.
Примеры (выходные адреса O1 и O2, входные адреса A, B, C и т.д.):
А = 4, О1 = 3, О2 = 1: О2, скорее всего (но не гарантировано) платеж. Поэтому О1, вероятно, контролируется отправителем, и O2, вероятно, контролируется получателем.
A = 100, O1 = 99, O2 = 1: Опять же, O1, вероятно (но не гарантируется) оплата
А = 10, О1 = 4, O 2 = 6: Так как O1 и O2 близки друг к другу, либо один, скорее всего, платеж.
A = 10, O1 = 5, O2 = 5: Невозможно сказать, что оплата и которая является изменение.
Правило 3 тривиально. Один из выходов будут иметь значение больше, чем любая отдельная входную монета, а другой выходной сигнал будет иметь значение меньше, чем любые отдельные монеты. Выходная монета, которая имеет меньшее значение, это изменение, а выход монета с большим значением является оплатой. В отличие от правила 2, что собственность гарантируется, и никаких предположений или догадок не нужны.
Примеры:
А = 2, В = 3, 4 = О1, О2 = 1: О1 платеж, О2 является изменение. Если платеж был 1BTC, то монета B не нужен вообще для сделки.
А = 2, В = 2, C = 3, О1 = 1, О2 = 6: О2 оплата, О1 является изменение. Как и в первом примере, если платеж был 1BTC, то любые один из входов удовлетворял бы компенсацию, а два других не будет включен.
А = В = ?, ?; O1 = 4, O2 = 4: Это не может произойти. Если это так, один из двух входных монет должна быть больше или равна сумме платежа, так что другой не будет включен.
Потенциальные Coin Выбор алгоритмов
Трекер знает, что все входные монеты в сделке находятся под контролем одного человека (за исключением особых ситуаций, которые не охвачены стандартного клиента). Таким образом, операции должны использовать как несколько входов, как это возможно.
Операции с одним выходом отдать, кто получил деньги (это очень маловероятно, что вы будете делать платеж самостоятельно).
Рандомизации, какой выход является оплата и которая является изменение хорошо, так что имейте это.
Цель состоит в том, чтобы сделать его трудным для отслеживания, чтобы определить, какой выход платеж, и который является изменение.
Держа эти принципы в виду, я предлагаю следующие алгоритмы:
1) Выбрать монету, которая ровно в два раза стоимость оплаты
Это делает два выхода идентичны, что делает его невозможно догадаться, что оплата и которая является изменение. Варианты: выбрать два или более монет, которые в сумме ровно в два раза больше суммы платежа; выбрать одну монету, которая примерно в два раза превышает сумму платежа (это приведет к двум выходами, которые близки по значению, и, как показано выше, вы не можете надежно угадать, является оплата)
2) Выберите две монеты таким образом, чтобы либо (а) значение каждого входа должно быть меньше суммы платежа и суммы на более чем (но не равен) от суммы платежа, или (б) значение каждого входа больше, чем к оплате
Пример:
А = 4, В = 2, О1 = 5, О2 = 1
Шпион, глядя на этой сделке не может сказать, если она удовлетворяет условие (а) или условие (б), поэтому они не могут определить, что является оплатой и которая является изменением. Для выполнения условия (а), О1 является оплатой, и условия (б) О2 платежа.
3) Выберите две монеты: одну, значение которого точно соответствует компенсации, а другая монета в случайном порядке.
Пример:
А = 5, В = 2; О1 = 5, О2 = 2
Это довольно очевидно, что мы делаем здесь, но так как мы (и трекер) знают, оплата и изменения случайны, трекер не может знать, что оплата и которая является изменение.
4) специальная вариация (1) (я называю это одно в "В йо лице!" выбор): Выберите несколько монет, добавив более чем суммы платежа, а также, если возможно обеспечить, по крайней мере одна монета является излишним.
Пример:
А = 2, В = 3, С = 1, D = 1, Е = 2, 4 = О1, О2 = 5
Это ясно из рассмотрения этой сделки, что несколько комбинаций монет могут удовлетворить любой О1 или О2, так что трекер не может сказать, что оплата и которая является изменением. Обратите внимание, что этот алгоритм, в отличие от других, гарантированно найти набор монет, которые могут быть использованы.
Важные соображения
Функция создания Транзакции должна быть в состоянии использовать любого из перечисленных выше алгоритмов. Конкретный алгоритм должен быть выбран случайным образом. Случайность может быть взвешена по отношению к алгоритмам 1 и 2.
Операции, которые генерируются вряд ли понесет какие-либо операционные издержки больше, чем обычно. Ни один из этих алгоритмов не выбирает слишком большое количество монет, таким образом, не существует каких-либо дополнительных затрат для пользователя.
Текущий алгоритм может потенциально цикл 1000 раз, ищущих лучшее сочетание монет, чтобы прийти ближе к сумме платежа. Эти алгоритмы устраняют эту нагрузку.
Важно, что поведение по умолчанию клиента Bitcoin направлено на анонимность. Для того, чтобы анонимности, чтобы добиться успеха, это должно быть трудно или невозможно отличить сделки, порожденных кто-то ищет анонимность, и сделки, порожденные, кто не заботится о анонимности. Если случайный выбор алгоритма используется только теми, которые ищут анонимность, то трекер просто нужно искать сделки, которые не соответствуют "наиболее подходящий" алгоритм.
(Minor редактирует, чтобы очистить форматирование)