Обнаружен баг кошельков приводящий к фингерпринтингу транзакций в не зависимости от того в открытом они блокчейне или закрытом.
По стандартам безопасности определенными разрабами Zcash (https://zips.z.cash/zip-0315) кошелек всегда должен использовать одну и ту же автоматическую комиссию и один и тот же срок истечения транзакции в 40 блоков.
Прямая цитата из дока – “A wallet SHOULD create transactions using the default expiration height of 40 blocks from the current height, as specified in 4.”
Но поисследовав блокчейн вижу что много транзакций валит с кошелей со сроком отличным от 40 блоков.
Причем у одного и того же кошелька и для публичной транзакции и для закрытой транзакции это значение всегда будет одинаковым, потому что это значение жестко прописано в коде кошельков.
Это жесткий фингерпринт и создает возможность значительно проще отслеживать при трейсинге связи между открытыми и закрытыми транзами, потому что такие нестандартные значения в блокчейне видны как на ладони. А если кошель подставляет еще и нестандартную комиссию – то это вдвойне фингерпринт.
Как проверить свой кошель:
1) Взять любую свою транзакцию, пойти чекнуть на https://mainnet.zcashexplorer.app/
2) На странице транзакции нажать на просмотр Raw TX JSON
3) Проскроллить в самый конец
4) Взять значения expiryheight и height и вычислить между ними разницу (expiryheight – height)
5) Если полученое значение больше 40 – искать другой кошелек. То есть допускаются значения меньше либо равно 40, значения больше 40 – это фингерпринт.
Транзакция может быть добавлена в блок майнером с задержкой, в таком случае блокчейн покажет разницу например 38 (транзакция добавлена спустя 2 блока после создания), но разница не должна быть больше 40
Примеры как должно быть:
По стандартам безопасности определенными разрабами Zcash (https://zips.z.cash/zip-0315) кошелек всегда должен использовать одну и ту же автоматическую комиссию и один и тот же срок истечения транзакции в 40 блоков.
Прямая цитата из дока – “A wallet SHOULD create transactions using the default expiration height of 40 blocks from the current height, as specified in 4.”
Но поисследовав блокчейн вижу что много транзакций валит с кошелей со сроком отличным от 40 блоков.
Причем у одного и того же кошелька и для публичной транзакции и для закрытой транзакции это значение всегда будет одинаковым, потому что это значение жестко прописано в коде кошельков.
Это жесткий фингерпринт и создает возможность значительно проще отслеживать при трейсинге связи между открытыми и закрытыми транзами, потому что такие нестандартные значения в блокчейне видны как на ладони. А если кошель подставляет еще и нестандартную комиссию – то это вдвойне фингерпринт.
Как проверить свой кошель:
1) Взять любую свою транзакцию, пойти чекнуть на https://mainnet.zcashexplorer.app/
2) На странице транзакции нажать на просмотр Raw TX JSON
3) Проскроллить в самый конец
4) Взять значения expiryheight и height и вычислить между ними разницу (expiryheight – height)
5) Если полученое значение больше 40 – искать другой кошелек. То есть допускаются значения меньше либо равно 40, значения больше 40 – это фингерпринт.
Транзакция может быть добавлена в блок майнером с задержкой, в таком случае блокчейн покажет разницу например 38 (транзакция добавлена спустя 2 блока после создания), но разница не должна быть больше 40
Примеры как должно быть:
Примеры как НЕ должно быть:Public
https://mainnet.zcashexplorer.app/t...bd7880029840d1b3da0cb2015b66a163f2fd058952e92 = 40
https://mainnet.zcashexplorer.app/t...82cb586107f98e8a88656002346bbf8d7f44eb61d089e = 40
https://mainnet.zcashexplorer.app/t...b6df9d5b8b2068ebe164b80bd19fc3273a83bc10cac69 = 40
Shielded
https://mainnet.zcashexplorer.app/t...0c95d4f41153b5e32808eeaecbfe2549e96647f5dc6c3 = 40
https://mainnet.zcashexplorer.app/t...8b01c9a097f798f092c05f964d4a5557652858bbd2989 = 40
Public
https://mainnet.zcashexplorer.app/t...0e83f3e4c170d31ef911c8e76571f3573b8d4c7148a32 = 496733563
https://mainnet.zcashexplorer.app/t...6c07241407b56e704eb615440740bc9f884f7455943f7 = 496733563
https://mainnet.zcashexplorer.app/t...da22eb3976a72d0971f0a8257bc1613659f9bf170cd57 = 496733563
Shielded
https://mainnet.zcashexplorer.app/t...ddf895decacf5ca1967572c02879073b575aac48eef42 = 49
https://mainnet.zcashexplorer.app/t...5a02cc136035b6e1ab85fc4fce6be1b435174c8638b42 = 49
https://mainnet.zcashexplorer.app/t...02c15b7b7cb12e0a601df5bdf37ca9d9efbac8883fbf2 = 46
https://mainnet.zcashexplorer.app/t...9aaf09bc2ad5ac505690f4f687cb0ead41687c18bded9 = 48