Remote Side-Channel Attacks on Anonymous Transactions

Florian Tramèr, Dan Boneh and Kenneth G. Paterson

USENIX Security Symposium 2020

Previously presented at Stanford Blockchain Conference 2020


Privacy-focused crypto-currencies, such as Zcash or Monero, aim to provide strong cryptographic guarantees for transaction confidentiality and unlinkability. In this paper, we describe side-channel attacks that let remote adversaries bypass these protections. We present a general class of timing side-channel and traffic-analysis attacks on receiver privacy. These attacks enable an active remote adversary to identify the (secret) payee of any transaction in Zcash or Monero. The attacks violate the privacy goals of these crypto- currencies by exploiting side-channel information leaked by the implementation of different system components. Specifically, we show that a remote party can link all transactions that send funds to a user, by measuring the response time of that user’s P2P node to certain requests. The timing differences are large enough that the attacks can be mounted remotely over a WAN. We responsibly disclosed the issues to the affected projects, and they have patched the vulnerabilities. We further study the impact of timing side-channels on the zero-knowledge proof systems used in these crypto-currencies. We observe that in Zcash’s implementation, the time to generate a zero-knowledge proof depends on secret transaction data, and in particular on the amount of transacted funds. Hence, an adversary capable of measuring proof generation time could break transaction confidentiality, despite the proof system’s zero-knowledge property. Our attacks highlight the dangers of side-channel leakage in anonymous crypto-currencies, and the need to systematically protect them against such attacks.

  author   =   {Tram{\`e}r, Florian and Boneh, Dan and Paterson, Kenneth G.},
  title   =   {Remote Side-Channel Attacks on Anonymous Transactions},
  booktitle   =   {USENIX Security Symposium},
  pages   =   {2739--2756},
  year   =   {2020},
  howpublished   =   {Cryptology ePrint Archive, Report 2020/220},
  url   =   {}