Можно ли «сломать» отслеживаемость блокчейна, отправив ZEC между z-addr и t-addr?
tl;dr Вы должны использовать округленные значения ZEC при разблокировке, и даже тогда у вас будет меньше конфиденциальности, чем если бы вы использовали только z-addrs.
Мы отвечаем именно на этот вопрос в этом сообщении в блоге (изображения, которые я воспроизвожу ниже).
Транзакции с использованием t-адресов, унаследованных от Биткойн, очевидно, отслеживаются. Однако свойство нулевого разглашения, связанное с использованием z-адресов, означает, что когда вы отправляете ZEC на z-адрес (создавая «заметку», частный эквивалент TXO), а затем используете эту заметку в последующей транзакции , две транзакции не связаны напрямую в цепочке блоков (то есть вторая транзакция не содержит prevout
поля, ссылающегося на первую, как это произошло бы с t-адресами).
Это означает, что если вы отправите ZEC с t-адреса на z-адрес («экранирующая» транзакция), а затем с z-адреса на другой t-адрес, вы получите цепочку транзакций (b) ниже:
Это «разрывает» связь между t-адресами Алисы и Кэрол (для этой транзакции другие прозрачные платежи могут по-прежнему связывать эти адреса, поэтому следует проявлять такую же осторожность, как и в случае с биткойнами). В более широком смысле вы можете представить себе «острова» активности t-адресов, отделенные друг от друга туманными «морями» транзакций z-адресов (см. этот пост в блоге для обсуждения соответствующей экосистемы).
Теперь предостережение! Z-адрес скрывает все детали (получатели, значения и поля памятки) выходных заметок в экранирующей транзакции и соответствующие свойства входных заметок в неэкранирующей транзакции. Но значения ZEC по-прежнему общедоступны, потому что они видны в прозрачных половинах транзакций! Это означает, что вы можете столкнуться с проблемами при отправке полного баланса t-адреса без изменений :
Полная стоимость отображается в первой транзакции, а затем появляется вторая транзакция с выходной стоимостью, равной исходной входной стоимости за вычетом двух комиссий за транзакцию. Также доступны временные данные (поскольку транзакции по своей сути упорядочены и имеют временные метки в цепочке блоков), а это означает, что можно статистически связать две транзакции, основываясь только на этих значениях [0].
Решение этой проблемы довольно простое : используйте «округленные» значения при разблокировке (с изменением, возвращающимся к z-адресу). Таким образом, между экранирующей и неэкранирующей транзакциями нет никакой связи стоимости.
РЕДАКТИРОВАТЬ: обратите внимание, что конкретная стратегия округления, которую вы используете, может сама по себе привести к утечке информации! Например, если вы всегда округляете до целых ZEC в меньшую сторону, а кто-то другой всегда округляет до ближайших 10 ZEC, то со временем ваши незащищенные транзакции будут выглядеть заметно иначе, чем их, а тот, кто ищет закономерности в блоке цепочка может начать отделять ваши незащищенные транзакции от остальных. В целом, чем больше и стандартнее используемые вами корзины, тем меньше информации утекает; кроме того, вы хотите, чтобы все остальные использовали те же ведра, что и вы!
В результате, если вы хотите свести к минимуму объем утечки информации, самый простой способ сделать это — свести к минимуму использование t-адресов.
[0] Это немного сложнее. Экранированная часть неэкранированной транзакции по-прежнему имеет те же две выходные записи, что и любая другая часть экранированной транзакции (они просто содержат фиктивные записи для транзакции z->t), и эти части могут быть заполнены (т. е. с использованием z-адреса для оплачивать как z-адреса, так и t-адреса). Таким образом, хотя сопоставление значений является сильной связью, это не окончательная связь, и фактически может быть намеренно подорвано кошельками, выбирающими vpub_new
значения для своих незащищенных транзакций из набора vpub_old
значений, которые были замечены в цепочке блоков. Округление значений фактически является механизмом социального консенсуса для достижения этой цели.
UTF-8
рный