It’s difficult, particularly against sophisticated adversaries like the NSA or GCHQ. The core challenge is that Tor has been found to be vulnerable at times and most ISPs routinely collect NetFlow logs.
A typical setup like ISP→VPN→Tor (Guard, Middle, Exit) is potentially vulnerable, as the ISP can still identify you through the VPN’s IP address, which the Guard node also knows.
Even using multiple VPN servers (multi-hop) doesn’t fully solve the problem. If the initial VPN and the Tor circuit both observe the same traffic patterns, they can potentially collaborate to identify users.
ISP→VPN #1→VPN #2→Tor
If 100MB is sent to VPN #1 and the website receives 100MB in traffic, this data may be enough to identify you. This technique involves creating a suspect list and then implementing real-time packet-level logging. The adversary would analyze the timing of each packet exchanged between the website and the ISP, searching for correlations that link to a specific customer.
Currently, the most robust setup I’ve found is using a VM with the Mullvad App and DAITA, multi-hop, lockdown mode, and a quantum-resistant tunnel enabled. Then restrict outgoing connections through VM firewall settings. Be warned, this setup requires trust in Mullvad, the effectiveness of DAITA and the inability for an adversary to track packets across data centers.
It’s important to note that standard Wireguard and OpenVPN configurations don’t support DAITA or hide the use of multi-hop. Mullvad’s lockdown mode should be sufficient in itself, VPN after Tor reduces anonymity, and DNS is managed by Mullvad and then the Tor exit node.
The effectiveness of tools like DAITA and other traffic analysis prevention techniques is still being evaluated, so you can use your own custom tool in addition to DAITA.
Choosing server locations is also important. Ideally, you’d want a VPN provider with servers in a non-14 Eyes country and a server that the provider physically owns, to minimize the risk of interception.
For maximum anonymity, you’d need perfect uptime, consistently generating random traffic that can’t be filtered out, and only using your chosen identity for brief periods. This level of control is difficult to achieve in practice.
In short, use multiple VPN servers before Tor, generating constant, random traffic 24/7. Regularly monitor your sys-whonix and sys-net traffic to identify any connections between them.