Определение цифрового отпечатка кошелька для трети биткойн-транзакций.
Транзакции, отправленные с кошельков Blockchain.com составляют около трети от всех транзакций в сети Биткойна. В этой статье создатель Bitcoin Transaction Monitor описывает и применяет на практике методику, позволяющую идентифицировать эти транзакции. Из получаемого таким образом набора данных можно вывести информацию об использованном кошельке. Также обсуждаются последствия для конфиденциальности пользователей и возможные варианты ее улучшения.
Одно из самых первых наблюдений, сделанных мною при создании Bitcoin Transaction Monitor, заключалось в том, что многие транзакции в точности следуют автоматически рассчитываемым рекомендациям относительно размера комиссии. Эти транзакции выглядят как горизонтальные полосы, поднимающиеся и опускающиеся вместе с изменениями рекомендуемого размера комиссии.
Большая часть из этих транзакций имеют одинаковый цифровой отпечаток. В них тратятся только P2PKH-выходы, SegWit и мультиподписи не используются. С каждой транзакцией создается один либо два выхода. Если создается два выхода, то по меньшей мере один из них является P2PKH-выходом. Транзакции не имеют «часового механизма» с периодом блокировки средств, относятся к версии один и не сигнализируют о заменяемости BIP 125. Однако все они соответствуют BIP 69.
Это соответствует цифровому отпечатку кошельков Blockchain.com, а именно их кошельков для iOS, Android и веб-версии кошелька. Эти кошельки могут получать и расходовать только P2PKH-выходы. Хотя пользователи могут платить на адреса любых форматов, выход для получения сдачи, если создается, то всегда только P2PKH. (Еще, как я понял при выводе средств, использовавшихся для теста поведения кошелька, нельзя отправить средства на bech32 P2WPKH адрес из кошелька для Android, однако это можно сделать из веб-версии кошелька.) Кошельки производят транзакции версии один и с нулевым временем блокировки. Все входы и выходы лексикографически отсортированы, согласно спецификации BIP 69.
В кошельках используется инструмент оценки (эстиматор) размера комиссии Blockchain.com, доступный через публичный API. API возвращает два расчетных значения рекомендуемой комиссии: приоритетный (priority) и обычный (regular). Приоритетная комиссия подразумевает подтверждение в течение следующего часа, а обычная – в течение часа или более. По умолчанию кошельки выставляют размер комиссии строго в соответствии с рекомендациями. Пользователи могут установить размер комиссии по своему усмотрению, но при этом им будет показано предупреждение.
Методология
Через сочетание рекомендуемого размера комиссии и цифровых отпечатков транзакции можно идентифицировать транзакции, отправленные с одного из кошельков Blockchain.com. Хотя большая часть транзакций Blockchain.com уплачивают строго рекомендуемую комиссию, некоторые пользователи систематически недоплачивают либо переплачивают некий определенный процент. Это происходит из-за неверной оценки размера транзакции при расчете комиссии. Комиссия за транзакцию рассчитывается путем умножения целевого размера комиссии на предполагаемый размер транзакции. При этом фактический и окончательный размер транзакции становится известен только после добавления к ней подписи.
Комиссия = Целевой размер комиссии × Предполагаемый размер транзакции
Все транзакции с недоплатой относительно рекомендуемой комиссии имеют два выхода. Однако комиссия рассчитывается исходя из того, что транзакция будет иметь один выход. То есть, например, для расчета комиссии за P2PKH-транзакцию вида 1in ⇒ 2out (226 байт), используется размер транзакции вида 1in ⇒ 1out (192 байт). Это неверное допущение приводит к тому, что оплачивается только около 85% (192 / 226 байт) от рекомендуемой комиссии. Поскольку входы транзакции составляют бóльшую часть ее размера, для транзакций с бóльшим количеством входов этот эффект не так заметен. Такое поведение характерно только для кошельков Blockchain.com. Исправление этой проблемы было выпущено 21 апреля 2020 года.
Веб-кошелек: для транзакций с двумя выходами при расчете размера комиссии учитывается только один выход, что приводит недоплате комиссии по отношению к фактическому размеру транзакции. iOS-кошелек: для транзакций с одним выходом размер комиссии рассчитывается как для транзакций с двумя выходами, что приводит к переплате комиссии относительно фактического размера транзакции.Все транзакции с переплатой имеют один выход. Для них при расчете комиссии предполагается наличие второго выхода. То есть для расчета комиссии за P2PKH-транзакцию вида 1in ⇒ 1out (192 байт) используется размер транзакции вида 1in ⇒ 2out (226 байт). В результате за транзакцию выплачивается около 118% (226 / 192 байта) от рекомендуемой комиссии. Как и в случае транзакций с недоплатой, для транзакций с бóльшим количеством входов этот эффект менее выражен. Предполагается, что такие транзакции производятся из кошельков Blockchain.com для iOS, хотя это еще не подтверждено.
Из множества транзакций с цифровым отпечатком кошелька Blockchain.com отобраны транзакции, уплачивающие комиссию в соответствии с рекомендацией автоматического эстиматора Blockchain.com. Показаны транзакции за 19 апреля 2020 г. Ось Y центрирована вокруг рекомендованной regular комиссии, большую часть дня она составляла 3 сат./байт. Между 12:00 и 17:00 UTC рекомендуемая regular комиссия кратковременно поднималась до 4 сат./байт – каждый раз на несколько минут. В другие дни рекомендуемый размер комиссии, как правило, показывает бóльшую волатильность. Девятнадцатое апреля – воскресенье, а по воскресеньям сетевая активность, как известно, ниже, чем в будни. Я специально выбрал для демонстрации методики именно этот день.Этот способ идентификации транзакций с кошельков Blockchain.com нельзя считать абсолютно точным или надежным. Например, транзакции, отправленные с кастомной комиссией, не могут быть идентифицированы и дают ложноотрицательный результат. Транзакции, сформированные различными кошельками и заплатившие одинаковую комиссию, могут давать ложноположительный результат. Когда рекомендуемый размер комиссии показывает существенную волатильность, что часто бывает с приоритетной комиссией (например, вскоре после производимого BitMEX раз в сутки вывода средств), некоторые транзакции могут платить комиссию, не обработанную Bitcoin Transaction Monitor. Кроме того, кошельки могут формировать транзакции исходя из более старых рекомендаций, отличающихся от тех, что актуальны на момент передачи транзакции в сеть. Такие транзакции тоже дают ложноотрицательный результат.
Наблюдения
Я применил описанную методику для идентификации транзакций, отправленных из кошельков Blockchain.com в период с 1 апреля по 20 мая 2020 г. Результирующий набор данных охватывает более 50 дней и содержит около 4 миллионов транзакций, занимающих в общей сложности около 1,34 ГБ пространства блока и с общей суммой уплаченной комиссии 445,73 BTC. Примерно в двух третях транзакций из кошельков Blockchain.com использовалась расчетная обычная комиссия, а в оставшейся одной третьей части – приоритетная.
В транзакциях создается примерно то же количество выходов, что и тратится. Транзакции из кошельков Blockchain.com имеют либо только платежный выход, либо один платежный выход и один выход для сдачи. Поскольку выходы для сдачи всегда являются P2PKH, возможно определить тип платежного выхода. Из всех созданных выходов, около 31,7% составляют P2PKH, 23,3% – P2SH, 0,34% – P2WPKH и менее 0,01% – P2WSH. Оставшиеся 45,5% – это P2PKH-выходы для сдачи. Наиболее часто используемые комбинации входов и выходов – это P2PKH ⇒ P2PKH + P2PKH (33%), P2PKH ⇒ P2SH + P2PKH (26%) и P2PKH ⇒ P2PKH (около 7%).
Пользователи кошельков Blockchain.com наиболее активны с 15:00 до 18:00 UTC, наименьшая активность приходится на период с 4:00 до 5:00 UTC. Начиная примерно с 5:00 UTC количество транзакций в минуту начинает постепенно расти. В это время в Москве уже 8 часов утра, а в центральной Европе – 7 утра. С 5:00 до 10:00 UTC количество транзакций в минуту увеличивается с около 30 до чуть более 60. После этого количество транзакций в минуту остается относительно постоянным, пока не увеличивается снова около полудня по UTC, что соответствует 8 утра на восточном побережье США. Дневной максимум достигается примерно в 16:00 UTC на уровне чуть более 75 транзакций в минуту. После этого активность пользователей начинает снижаться и уменьшается до тех пор, пока вновь не достигнет минимума около 4:00 UTC.
Количество транзакций в минуту с кошельков Blockchain.com. В виде фоновой полосы представлено стандартное отклонение. Отмечено время между 8 утра и 8 вечера для центральной Азии, Европы и восточного побережья Соединенных Штатов.Как сообщается, Blockchain.com утверждают, что через их кошельки производится треть всех биткойн-транзакций. Они публикуют количество транзакций, отправленных с их кошельков в сутки, что дало почву для дискуссий о точности и корректности этих цифр. Это утверждение можно проверить с помощью описанного здесь набора данных. Можно сравнить количество транзакций в сутки в наборе данных и публикуемые Blockchain.com цифры. Общее количество транзакций с цифровым отпечатком Blockchain.com будет выступать в качестве верхней границы. Общее суточное количество транзакций всей сети для расчета доли Blockchain.com мы взяли из данных transactionfee.info.
Декларируемая и идентифицированная доля транзакций из кошельков Blockchain.com. Синяя линия – декларируемая доля, красная – идентифицированная доля в общем количестве биткойн-транзакций, серая – верхняя граница по цифровому отпечатку.Суточные количества транзакций, публикуемые Blockchain.com, соответствуют 30–35% всех транзакций сети. Доля транзакций с тем же цифровым отпечатком, верхняя граница, в среднем, на три абсолютных процента выше. Доля идентифицированных транзакций в наборе данных на 4–5 абсолютных процентов ниже публикуемых Blockchain.com значений и составляет, в среднем, около 27%. На эти транзакции приходится около 13% уплачиваемых в сутки комиссий и около 20% от использованного пространства блока.
Однако публикуемые Blockchain.com цифры все еще лежат в разумном диапазоне. Есть несколько причин, по которым описанный набор данных может включать меньше транзакций, чем те количества, о которых сообщает Blockchain.com. Некоторые пользователи могут отправлять транзакции с кастомным размером комиссии. Описанная методика их не охватывает. Кроме того, неясно, включаются ли в публикуемые цифры транзакции, отправленные с помощью Blockchain.com Wallet API. API позволяет пользователям создавать транзакции, отправляемые сразу нескольким получателям, которые не учитываются в описанном наборе данных.
Опираясь на знание о том, что веб-кошелек Blockchain.com недоплачивает рекомендуемую комиссию за транзакции с двумя выходами, а iOS-кошелек переплачивает за транзакции с одним выходом, можно ориентировочно оценить долю каждого вида кошелька в общем объеме транзакций. Для этого придется принять допущение о том, что отношение количества транзакций с двумя выходами к количеству транзакций с одним выходом во всех кошельках одинаково. На долю веб-кошелька приходится одна третья часть, а на iOS-кошелек – половина от общего числа транзакций Blockchain.com. Оставшиеся 17%, по-видимому, приходятся на кошелек для Android. Однако проверить это не представляется возможным, поскольку нет данных, которые бы указывали на долю Android-кошельков.
За период с 1 по 22 апреля транзакции с двумя выходами, отправленные из веб-версии кошелька, составили около трети от всех транзакций с двумя выходами, отправленных из кошельков Blockchain.com. Показанное среднее значение взвешено по количеству транзакций. Обновление, выпущенное 21 апреля, решило проблему недоплаты комиссии для транзакций с двумя выходами в веб-кошельке. Развертывание релиза заняло несколько дней. В период с 1 апреля по 20 мая транзакции с одним выходом, отправленные с помощью кошелька для iOS, составляли около половины от всех транзакций с одним выходом, отправленных из кошельков Blockchain.com. Показанное среднее значение взвешено по количеству транзакций на соответствующую комбинацию количества входов и выходов. Неясно, почему на iOS-кошелек приходится 60–70% транзакций вида 4+in ⇒ 1out.Кошельки для iOS переплачивают, веб-кошельки недоплачивают рекомендуемую расчетную комиссию для некоторых комбинаций количества входов и выходов. Это заметно и по времени, требуемому для подтверждения транзакций, если опираться на рекомендуемую regular комиссию. Транзакции с переплатой заполняют большую часть пространства блока либо транзакции с недоплатой относительно рекомендуемого размера комиссии включаются только в более поздние блоки. В среднем, транзакции с одним выходом, отправленные из iOS-кошельков, подтверждаются быстрее всего. Наибольшее количество времени занимает подтверждение транзакций с двумя выходами, отправленных из веб-кошелька. Больше всего «эффект веб-кошелька» был заметен для транзакций с одним входом и двумя выходами, что является наиболее часто используемой комбинацией количества входов и выходов. В этих транзакциях уплачивалось только около 85% от рекомендуемого расчетного значения. Транзакции, отправленные из кошелька для Android, транзакции с двумя выходами, отправленные из iOS-кошелька и транзакции с одним выходом, отправленные из веб-кошелька, в среднем подтверждались после транзакций с одним выходом из iOS-кошелька, и до транзакций с двумя выходами из веб-кошелька.
На диаграмме показано время, требовавшееся для подтверждения транзакций с различными количествами входов и выходов. Временной диапазон данных – с 1 по 22 апреля 2020 г. 21 апреля было выпущено обновление, исправляющее ошибку расчета рекомендуемой комиссии в веб-кошельке. Подписано среднее время подтверждения для каждого типа транзакций.Выбор в пользу чуть более высокой комиссии, нежели рекомендуется в iOS-кошельках Blockchain.com для транзакций с одним выходом, может быть хорошим компромиссом между быстротой подтверждения и размером уплачиваемой комиссии. Продвинутый пользователь мог бы установить комиссию в размере, скажем, 120% от рекомендуемой regular комиссии. Майнер включит такую транзакцию в блок перед любой другой транзакцией Blockchain.com. Установить размер комиссии, например, на 102% от рекомендуемого regular уровня тоже может быть неплохим вариантом. Это дешевле, однако подтверждение транзакции может занять больше времени, поскольку производимые с переплатой транзакции из iOS-кошельков будут включены в блок до нее. Эффективность этих стратегий может снижаться в часы пиковой активности, когда наблюдается наибольшая волатильность в отношении рекомендуемого размера комиссии.
При ближайшем рассмотрении транзакций, уплачивающих рекомендуемый размер комиссий, видно, что транзакции с P2SH выходами платят несколько более высокую комиссию, чем транзакции с P2PKH выходами. В кошельках Blockchain.com для расчета рекомендуемой комиссии используется предполагаемый размер одного P2PKH выхода, 34 байта. P2SH выходы немного меньше и занимают 32 байта. При использовании для расчета размера P2PKH выхода, транзакции с P2SH выходом оплачивают два лишних байта. В результате фактически транзакции с P2SH выходами платят немного более высокую комиссию. То же можно сказать и о транзакциях с P2WPKH выходом размером в 31 байт. Такие транзакции платят за три лишних, не используемых в них, байта. P2WSH выходы, с другой стороны, занимают 43 байта, и, следовательно, транзакции с P2WSH выходами недоплачивают по отношению к рекомендуемому размеру комиссии за 9 байт.
Пользователи, отправляющие свои средства на другие кошельки или сервисы, создавая транзакции с P2SH или P2WPKH выходами, неосознанно платят чуть более высокую комиссию, чем могли бы. В среднем такие транзакции подтверждаются немного быстрее. Транзакции с P2WSH выходами, в свою очередь, платят чуть меньше рекомендуемого размера комиссии и, в среднем, подтверждаются дольше. Эти эффекты, вероятно, могут быть наиболее заметны в часы пиковой активности.
Транзакции, оплачивающие в точности рекомендуемый тариф в размере 3 сат./байт по состоянию на 19 апреля 2020 г. В промежутке между 12:00 и 15:00 UTC ставка для расчета рекомендуемой комиссии непродолжительно поднималась до 4 сат./байт или больше. Это обстоятельство на диаграмме не отражено. Подписаны наиболее распространенные комбинации входов и выходов. Видно, что транзакции с P2SH выходами, обозначенные здесь оранжевым цветом, платят чуть более высокую комиссию, нежели P2PKH транзакции. Транзакции с P2WSH выходами выходят за пределы этого графика, транзакции с более чем четырьмя выходами тоже не показаны.Некоторые транзакции с одинаковыми комбинациями входов и выходов появляются несколько раз с разными размерами комиссии и имеют немного разные размеры. Низкие и высокие R-значения в ECDSA-подписях могут приводить к разнице в размере один байт на вход. Некоторые транзакции, имея одинаковую комбинацию входов и выходов и одинаковый размер, тем не менее платят разную комиссию, даже будучи рассчитываемыми по одному и тому же тарифу. Это вызвано тем, что в кошельках для iOS и Android предполагается другой размер P2PKH входа, нежели в веб-версии кошелька. В веб-кошельке используется 147 байт, а в кошельках для Android и iOS – 149 байт. Обычно размер P2PKH входов составляет 147 или 148 байт. Это зависит от R-значение в подписи – низкого либо высокого. Размеры, предполагаемые в кошельках для Android и iOS, неверны. P2PKH входы со 149 байтами были возможны только до октября 2015 года, когда стандартом допускались высокие S-значения. Подробнее о длинах ECDSA подписей можно прочесть здесь (англ.).
Конфиденциальность
Чем больше информации пассивный наблюдатель может извлечь из биткойн-транзакции и публичных метаданных, тем хуже это сказывается на конфиденциальности отправителей и получателей. Возможность идентифицировать отправляющий кошелек – это утечка информации. Для повышения конфиденциальности пользователей кошельков Blockchain.com и снижения эффективности описанной методики, рекомендуемый размер комиссии не должен соблюдаться настолько тщательно, а цифровой отпечаток кошелька следует расширить.
Ключевая часть надежной идентификации транзакций, принадлежащих кошелькам Blockchain.com, заключается в том, чтобы отобрать транзакции, платящие в точности рекомендованную комиссию. При внесении в размер транзакции элемента случайности, транзакции Blockchain.com смешиваются с транзакциями из других кошельков. Это повышает частоту ложноположительных результатов для описанной методики, снижая ее надежность.
Для описания набора транзакций с одинаковым цифровым отпечатком кошелька используется термин «пул анонимности». Чем больше кошельков отправляют транзакции с одинаковым цифровым отпечатком, тем сложнее идентифицировать кошелек, инициировавший конкретную транзакцию. Это повышает конфиденциальность всех пользователей Биткойна. Хотя пул анонимности Blockchain.com часто состоит из более чем 100 000 транзакций в сутки, кошельки Blockchain.com зачастую ответственны по меньшей мере за 80% этих транзакций. Цифровой отпечаток может быть расширен различными способами, что увеличило бы размер пула анонимности и, следовательно, снизило бы долю Blockchain.com в пуле. Это оказало бы положительное влияние на конфиденциальность как всех пользователей кошельков Blockchain.com, так и всех остальных пользователей Биткойна. Чтобы расширить цифровой отпечаток кошельков Blockchain.com, они могли бы, например, поддерживать получение и расходование средств с различных типов адресов, временное блокирование некоторых создаваемых транзакций до текущей высоты блока или устанавливать произвольную версию транзакции при ее построении.
Для продвинутых пользователей может быть возможно скрыть свои транзакции в пуле анонимности транзакций Blockchain.com. Это можно было бы сделать через мимикрию цифрового отпечатка кошелька под Blockchain.com и оплату в точности рекомендуемого размера комиссии. Если все сделано правильно, то попытка идентификации транзакции по цифровому отпечатку с помощью описанной здесь методики, дала бы ложноположительный результат, показав, будто бы транзакция была отправлена с кошелька Blockchain.com. Blockchain.com могли бы отслеживать, какие транзакции были отправлены из одного из их кошельков, а какие только пытаются мимикрировать под таковые. Эту информацию можно было бы продавать другой стороне.
Примечание автора: я ценю право человека на конфиденциальность и частную жизнь и не стану публиковать транзакции или txid, которые я идентифицировал как принадлежащие кошелькам Blockchain.com. Однако мотивированный пассивный наблюдатель вполне может использовать описанную здесь методику для того, чтобы тегировать пользователей Blockchain.com. Я публикую эту информацию с целью повысить осведомленность сообщества в этом вопросе и, особенно, осведомленность сотрудников Blockchain.com, пользователей их кошельков и разработчиков других кошельков, тесно следующих рекомендациям автоматического эстиматора комиссии Blockchain.com.
Подписывайтесь на BitNovosti в Telegram!
Делитесь вашим мнением об этой статье в комментариях ниже.
Источник