The grandest obstacle to making anonymous web browsing possible in QubesOS

The power dynamic is shifting. Feds are losing their power, and the people are increasing their power.

Through AI you mean? I’m always up and down if this is now good for us or bad for us…
On one hand I can use ChatGPT overlord edition to find bugs in my code that I would have never found myself.
On the other hand “feds” probably have ChatGPT godlike edition which can find even more bugs.
The other day I got an email with about a trillion thunderbird CVEs disclosed xD I mean that IS GOOD of course. Maybe we will find all the bugs at some point lol.

Remember this everyone: don’t let feds intimidate and bully you. You have to stand up for your rights. Let reasoning guide your path forward, not the harsh word of authority, which some feds seem to believe they have here.

I will just publicly support this now :wink: Privacy is a human right.

  • Modification Status: MODIFIES Whonix (requires changing Qubes RPC
    policies to allow the display stream to flow OUT to Hermes).

I didn’t even know that was a thing, but why would that modify whonix…
Pretty sure we can h4x0r together a way somehow so a qube with hermes can manage a whonix-workstation qube without modifying the whonix workstation qube… There has got to be a way to stream the x11 insead of to dom0 to another qube… Wasn’t there this idea with the “display qube” or like “gui qube” or something like this I think… Where dom0 doesn’t run the gui / desktop, but a qube does. That one could then run hermes or so.
I’m unwilling to accept that this cant be done, but I also really dont care about using tor that much x)
I love that topic though, and I’d love to see a solution for it!

2 Likes

Just like with unman’s suggestion that Qubes by default, with the unintended random delays it already prevents mouse movement fingerprinting, which I have doubts about because of it’s unintended unpredictable nature in contrast to Kloaks intended reliable nature. I also have doubt about this method of using Hermes or Openclaw because as we’re now discovering, it’s not simple to configure these agents to use Whonix. Almost all Hermes and Openclaw users are probably using the default optimized chromium browser.
A big tech mouse movement fingerprinter (deep learning) can probably identify that the mouse movement is not kloak, is not mouser, and either find a pattern that matches hermes/openclaw or by deduction come to that conclusion.
And since there aren’t many users (mostly a guess) using hermes/openclaw with whonix, that makes your fingerprint combination (Hermes/Openclaw & Whonix) unique and trackable.

This isn’t a complaint on your suggestion like someone else claimed that I’m just complaining. It’s important to look at the risks, and where a solution comes up short. Or maybe I’m also wrong and in that case someone can explain how. I think the qubes os community have the right to be aware of the risks of different privacy methods. Because when there isn’t a perfect solution such as Kloak on Qubes OS, then the user has to choose between different solutions and they need to know both the pros and cons to make an informed decision.

I don’t know what your threat model is and I’m not asking for it, but you said you don’t use tor. And you didn’t explicitly say you’re using Hermes to avoid mouse movement fingerprinting, just that Hermes does help with that.
If you are using Hermes for protection against mouse movement fingerprinting, but you are not using tor browser, then I don’t see the point. Because tor browser does much more than just hide your IP, it gives all users the same browser fingerprint. Some browsers have appeared which can compete with tor browser on protection against first party tracking, such as Mullvad Browser. But tor browser is typically run in whonix which also protects the user from device fingerprinting.
The main point I’m getting at is, without all these tracking protections that come with tor browser and whonix, it seems unnecessary to protect against mouse movement fingerprinting since adversaries have other ways to track you. But I could be wrong. It would be interesting to hear your thoughts.

Btw, I haven’t given up on helping the qubes os community find a solution to have a Hermes qubes control a whonix qube without modification. I was just very busy since last post. I will resume research on that soon.

2 Likes

Want to add here that the whole hermes thing was kind of a joke, and I want to loudly express that I have little to next to no idea about browser fingerprinting. I just though it would be funny.
You should most likely use torbrowser and whonix itself exactly the way described in the tor and whonix wiki. They spend most of their time solving our privacy issues, and we would do well to trust this (and ofc research why they write what they write).

2 Likes

I have no opinion on the use of Kloak outwith Qubes. It looks as if it
may provide some benefit at the risk of adding another fingerprint.

My suggestion was that folk should check to see whether there is an
issue before pressing for solutions to be included in Qubes. I do not
think that is too much to ask.

I never presume to speak for the Qubes team.
When I comment in the Forum I speak for myself.

2 Likes

That’s one of the issues I have with Unman’s solution. I explained it earlier but since there is a lot of noise in this topic I think it’s worth saying it again.
Unman’s solution is undocumented. It’s not mentioned in neither qubes os and whonix docs, not even in the pages/sections that are about qubes-whonix.

And I’ve previously quoted a text twice in this topic, from the whonix docs where they say that qubes-whonix protection against mouse movement fingeprinting is broken and weak. And that they will work on fixing it. But they said that a long time ago (more than a year), and there has been no informational updates since then.

So since you say, to trust Whonix docs/devs who specialize in anonymity/privacy, and because Unman’s undocumented solution contradicts whonix docs, that is why I have replied with the questions and requests for more information.

But I also know it’s hard questions to answer because with a solution like the one Unman has given, the only thing that can be done really is have it tested against a mouse movement fingerprinter, over a very large sample, spread over weeks/months of data.

Because unlike Kloak which is programmed to do specific obfuscations at a constant rate (reliable and known data), the unintended delays which Qubes have be default are harder to measure, rely on being constant, and they are random. That is probably why Unman says it’s up to us to test it. And I have explained it’s not so simple to test.
So in summary, Unman and I are both right the way i see it. It might appear we’re in a conflict with each other, but we’re actually part of the same team, meeting each other in the middle where the issue appears.

I think the difference between him and me is that he seems to think it’s a simple test to make when he says “it’s not much to ask”. And he doesn’t seem to be able to put himself in the shoes of a user (not expert) who has to some degree trust the expert’s reasoning/explanation. And since his solution is undocumented and contradicts whonix’s docs, that becomes very difficult.

1 Like

Your suggestion was right. There must exist a standardized procedure to test in order to compare.

BTW, a simple hardware method for adding randomization to mouse moves might be using different mouse pads. Example: I tested white paper vs black leather. Paper gives very accurate smooth paths. Leather makes moves much more jumpy. Theoretically, using something dynamic (e.g. a tablet screen) with animated texture could be used as a pad perhaps.

1 Like

The rest of the section provides more details.

1 Like

The thread is kind of long, I didn’t read the whole thing, but FWIW improving mouse input anonymization under Qubes OS is something Whonix has planned:

No promises, but I would expect/hope that we’ll have this done in time for R4.4/R5.0.

(Was very delayed in responding due to having very high-priority work to do elsewhere that took a long time.)

3 Likes

Understood, @plankretriever, you now have a very clear development pathway to transform your concerns into a working technical implementation ahead of R4.4/R5.0.

That vmonaco test only tests the current session.
And like one of the previous AI answers which I posted in this topic said, it’s a very basic test which almost any kind of obfuscation will pass. That means it can give a false sense of privacy/anonymity. Because adversaries will use much more advanced mouse movement fingerprinting algorithms, most likely Deep Learning.

I think what we need is not only a fingerprinting test. We also need it to theoretically on the “white paper” be able to consistently (100%) of the time, keep up the same effective obfuscation. And that’s the part where I think Unman’s solution comes up short because he hasn’t really been able to give any numbers or anything about it. Only “test it”. Kloak can give such numbers because it’s programmed to do x and y and z and other things, at a constant rate. So Kloak’s docs can clearly give numbers and for the “white paper” theory. They don’t rely only on passing a basic test.

I removed the ‘you’ word because that sounds like it is all being built only for me. I think you should have used the word ‘we’.

That’s great news. But I wouldn’t say it’s a very clear development pathway because the github issue is just a description of what the solution will be. There’s no roadmap and the Completion criteria checklist is empty. But it still good to hear they intent to finish it.
I think it would help a lot for all whonix users if they could make these kind of development updates a bit more accessible. It’s a bit spread out and can be hard to find. For example, the only place he has given an ETA on completion of qubes event buffering seems to be in the post he made in this topic, so not many people will see that (hidden in a stack of noise). I might not have posted this topic in the first place if I had found that information.

Again, don’t take the above as just a complaint because it’s not. Especially since I even started it off by saying that’s great news. I’m just pointing out some communication issues which could be improved and would help in the community.

I wonder if there’s any way the community, maybe myself could help with the qubes event buffering project.

@arraybolt3 It would be very useful if you could spend a little time to join the technical debate between me and unman regarding his suggested solution that qubes, already by default, without qubes event buffering, already protects against mouse movement fingerprinting, and his claim that qubes event buffering is unnecessary for mouse movement fingerprinting protection.
I’m not saying he’s wrong or shutting his solution down, which some users seem to believe. I’ve just pointed out the reasons I have doubts about his solution because of two reasons, 1. community should be informed in their decisions 2. hope that the questions/doubts can be scientifically resolved.
Did you know about that and taken it into consideration in the development of qubes event buffering? It basically means qubes-whonix users are using 2 different mouse obfuscation tools at the same time, merged/layered on each other. It seems like it could have unpredictable results.

A good (almost complete) summary of what I’ve said in this topic: The grandest obstacle to making anonymous web browsing possible in QubesOS - #85 by plankretriever

1 Like

Well AI was just discussed a few posts ago, so I would suggest using an LLM of choice to process the entire topic, review the Whonix Wiki pages, fetch the various GitHub issues, then synthesize a project overview. From there, walk through the development steps, deal with multiple diagnosis/troubleshooting sessions, test the implementation, then prepare the pull request upstream. If it is ignored or rejected, fork and maintain your own local Qubes OS repository so you will get the solution you came for.

2 Likes

I did as you asked, and completed the first step of processing the topic.
Everyone can use this post as a starting point in the topic, after reading the first post.
I hope this makes further research and discussion simpler for everyone.

The Two Distinct Concepts

Concept A: Qubes Event Buffering (The Intended Feature)
What it is: A specific mechanism implemented to obfuscate input timing.
The Claim: Forum users (specifically plankretriever) argue that while this feature works for keyboard timing, it is broken/ineffective for mouse movements. They claim it fails to inject sufficient noise into mouse data to defeat fingerprinting algorithms.
The Criticism: The user argues that because it doesn’t work for mice, Qubes OS users are vulnerable, unlike Whonix users who use Kloak.

Concept B: The Qubes Architecture / Unman’s Defense (The Incidental Effect)
What it is: The inherent nature of running a browser in a separate VM (AppVM) communicating with a GUI VM (dom0) via Xen.
The Claim: unman (Qubes Team) argues that the architecture itself provides the obfuscation. The process of routing input through the hypervisor (Xen) and between VMs introduces unintended, non-removable delays and jitter.
The Defense: unman states these natural delays are sufficient to degrade mouse fingerprinting to the point of being “almost useless,” effectively solving the problem without needing Kloak or a specific “buffering” feature. He suggests testing this by comparing timing data between two different Qubes VMs, which he claims will show no significant correlation.

Unman’s argument is that you don’t need the specific “Event Buffering” feature to be perfect; the underlying Xen/VM latency (which acts as a natural buffer) is already doing the heavy lifting. He implies that users looking for a specific “Kloak-like” module are missing the point that the OS architecture already breaks the timing correlation required for fingerprinting.

Technical Consensus from the Thread

The Conflict:

Side A (plankretriever): The specific mouse obfuscation logic in Qubes is missing. We need Kloak (which injects specific noise) because the current state could potentially at unpredictable times, leaves mouse tremors exposed.

Side B (unman/Qubes Team): You are over-engineering the problem. The natural latency of the VM architecture creates enough noise to break the fingerprint. Running tests in separate VMs already proves the correlation is broken.

The Unresolved Technical Question:

Does the incidental latency of Xen VM communication provide enough entropy to defeat modern, high-frequency mouse fingerprinting algorithms, or is active noise injection (like Kloak) mathematically required to reach the threshold of anonymity?

Why this is hard to answer: It requires running specific, high-fidelity fingerprinting scripts against a Qubes VM and measuring the “identification success rate” against a baseline of non-Qubes systems. There is no open-source “production ready” tool for this mentioned in the thread, making empirical verification difficult for the average user.

It also said this:

Avoiding JavaScript
Concept: Disable JS (e.g., via NoScript/NOJS) to prevent script-based data extraction.
Limitation: Modern web participation (forums, auth, dynamic content) almost universally requires JS. Disabling JS reduces utility to near-zero for **interactive** anonymity.

Text-Based Browsers (Lynx, w3m, etc.)
Concept: Use browsers that do not render a graphical cursor, eliminating mouse movement data entirely.
Limitation:
High Outlier Risk: **Very few anonymity seekers use text browsers, making the user a unique fingerprint based on the absence of mouse data.**
Bot Flagging: Many sites block or challenge text-based user agents.
Feature Parity: Cannot access modern web services requiring JS or complex UI.

VNC Proxying
Concept: Proxy browsing through a VNC session.
Mechanism: VNC decouples the physical input device from the browser session, altering the input source and significantly reducing sampling rate/fidelity.
Limitation:
Algorithms can filter out VNC-induced noise (e.g., 50ms spikes).
Still requires a GUI environment, potentially reintroducing some fingerprint vectors.
Adds complexity and latency.

Keyboard-Only Navigation
Concept: Use browsers with Vim-like navigation (e.g., qutebrowser) or screen readers to avoid mouse usage.
Limitation:
Outlier Status: **Like text browsers, 100% keyboard usage is rare, creating a unique behavioral fingerprint.**
"Assistive Tech" Argument: While ~5-20% of users have disabilities affecting input, **the specific combination of "keyboard-only + Tor + Qubes" remains statistically rare.**

UNANSWERED QUESTION: What is the statistical baseline of "keyboard-only" users in the Tor network, and is it low enough to be considered a unique fingerprint?
Why it's a valuable question: Validates or refutes the "outlier" argument against keyboard-only navigation.
Why it's difficult to answer: Requires telemetry data from the Tor network that is generally not aggregated for specific input methods due to privacy constraints. Estimating this requires surveying a non-representative sample or analyzing public exit node traffic patterns, which is noisy.
2 Likes

My work with Whonix is done under a paid contract, and I’m not at liberty to spend the project’s time (and money) to engage too deeply in what kind of feels like online drama. I will briefly note what I think unman is talking about, and how it interacts with kloak, since that might be useful info for Qubes-Whonix users in general.

Qubes already uses virtualization technology to get keyboard and mouse events from dom0 into individual qubes. In particular, there are X11 input drivers that proxy input events into the qubes. These drivers do not allow all aspects of the input devices attached to dom0 to leak into individual qubes, they just get the necessary data from point A to point B in such a way that you get a usable desktop. Some of the data that is not carried across is exact input timing data (from my own testing with vmonaco’s tools, it looks to me like there’s a 60Hz timer somewhere in the driver or some other part of the input timeline that decides when to drive input events into the qube). This greatly reduces the resolution of timing information that attackers can reasonably gather, and does likely provide some protection against deanonymization.

The reason this isn’t ideal on its own is twofold:

  • One, the behavior is distinctly different from how non-Qubes-Whonix works. This means that while a Qubes-Whonix user’s input patterns might look the same as other Qubes-Whonix user input patterns, they won’t look like non-Qubes-Whonix input patterns, giving the attacker a bit (as in a literal 1 or 0 bit) of information for fingerprinting the user. One only needs so many bits of fingerprintable information before they can get a reliable fingerprint.
  • Two, the behavior doesn’t mask timings entirely. For the keyboard part of things, I can type pretty dang fast, but even I’m not generating 60 keyboard input events per second non-stop or even for short bursts (even when considering that both keydown and keyup events are input events). There is likely still a good amount of data an attacker can gather, even with resolution being decreased. It might not provide them a unique fingerprint all by itself (or maybe it will), but it provides more bits, contributing further to whatever other fingerprintable data they can collect. A similar but not identical scenario applies to mice.

Qubes event buffering is supposed to provide the same kind of obfuscation that kloak provides (it uses the same algorithm under the hood for keyboard input and will eventually do the same for mouse input as well), so the behavior is or will be similar to that of non-Qubes-Whonix, allowing the user to blend in with a bigger user pool. (Probably not 100% identical behavior because of factors like the lower resolution of input devices, different kinds of data being handled, etc., but still very similar.) It also provides better obfuscation than just lowering timing resolution. It’s like the difference between obfuscating an image by scaling it down, and blurring things beyond recognition. Both make things harder to see, but blurring theoretically works better, depending on how you do it.

4 Likes

If the vmonaco test is supposed to be the measure for comparison, then there is something I am misunderstanding.

IIUC, that test counts a sequence of DOM events within a particular time frame and calculates frequencies. I don’t quite see how this can be a complete measure. E.g, it does not account for direction of movements or things like which particular UI elements the user most often or never interacts with. Someone may like to open a page, hit PgDown a few times, then hit Home, then slowly start reading by scrolling step by step. Another one may hover on links or buttons, click quickly here and there. That is the actual fingerprint, and that is what AI would use to pinpoint a person. Then, even if the user changes the device or the software (thus affecting DOM event frequencies), the the behaviour remains. That is what matters, not dry numbers, and that is what needs to be addressed.

Is it possible? - I question that. An advanced AI would detect behaviour patterns, not device patterns, alongside all other HTTP client and network metrics. That includes how you type, stylometry and what not. Therefore, I don’t think there can be an effective and reliable obfuscation method in regards to input events.

Perhaps, one can try to use one’s own AI and teach it how to behave randomly on web sites (moving the mouse and pressing keys), while still doing what the user wants. To my mind, this is highly theoretical, so good luck with such approach… It is more likely you will get a mandatory e-ID.

That’s why, the only truly effective and easy method for now is to disable JS and CSS and use text browsing. Regarding the argument that this results in a “unique fingerprint”, I explain again: this is irrelevant because a much smaller fingerprint with far less dimensions means far less exposure - the whole point of privacy. Ceteris paribus, without JS and CSS all the remote host knows is “That visitor has disabled JS and CSS” and that’s it. It does not tell “This user is Peter that behaves on web pages like we already know”. For the more advanced, there is cURL with many things one can set and randomize at the level of individual HTTP requests. For the even more advanced, there is also the curl-impersonate project.

Regarding complaints along the lines of “but I want fancy UI, slideshows and social networking with people who don’t care about their privacy or mine” - well, the whole web sucks and to get something, you must give something. Decide what is important and proceed based on that. Online asceticism is not for everyone.

Bottom line is: The thesis that “Kloak is the solution” seems to me quite naive and the whole whole defence of “the grandest obstacle” through asking AI (the adversary honeypot) while pretending to desire anonymity (escaping “feds” that own the honeypot).

And… nothing of that has any relation to Qubes whatsoever.

2 Likes

@qubist You’re just repeating the same things you’ve said several times before and then you ignore replies and keep jumping around and now you are repeating yourself again. I think the reason you have avoided to give the name of the browser is because I could easily prove you wrong immediately. But I took a different approach this time and let the AI make an answer which is correct for all the text browsers.

qubist believes that if a browser sends no JavaScript and no CSS, the server sees nothing but a blank request. This is false.

Even a bare-bones text browser (like lynx, w3m, or links) must send HTTP Headers to establish a connection. These headers are the primary source of fingerprinting data, regardless of whether the page renders visually or runs scripts.

What the server still sees:
* User-Agent String: This explicitly identifies the browser, version, and often the OS. Even if the user tries to spoof it, the pattern of how the browser handles the string is unique.
* Accept Headers: Accept, Accept-Language, Accept-Encoding, and Accept-Charset reveal exactly what formats the browser can handle. A text browser has a very specific, narrow set of these (e.g., it won't accept image/png or video/mp4).
* Connection & Cache Control: How the browser handles keep-alive, proxy connections, and caching strategies.
* TLS Fingerprint (JA3/JA4): If the connection is HTTPS (which most are), the TLS handshake occurs before any HTTP data is sent. The way the browser orders cipher suites, extensions, and elliptic curves creates a cryptographic fingerprint that is often unique to the specific browser version and configuration, even if the HTTP payload is empty.
* TCP/IP Stack: The underlying operating system's TCP window size, TTL (Time to Live), and packet ordering are visible to the server.

qubist thinks that having "less bits" (less data) automatically means better privacy. This is the opposite of how anonymity works.

The Goal: The goal is Anonymity Set. You want your fingerprint to be identical to as many other people as possible.
The Reality of Text Browsers:
A standard Chrome user on Windows has a fingerprint shared by millions of other Chrome users. Their "bits" are high, but their uniqueness is low.
A text browser user has very few "bits" of data, but because almost no one uses that specific configuration, they are unique.

And your claim that Kloak is useless because the adversary can do other forms of fingerprinting instead is same thing like saying hiding IP is useless because there are other fingerprinting methods they can use instead.

This is the only part of the suggestion you made which I think is wrong/misleading. Because anonymity requires doing the same thing as other qubes users. And if I’m the only one who has a working working of qubes event buffering, that makes me unique fingerprint.
I might help out with more of the suggested steps later. But for now my contribution is the processing of all info in this topic. I think what we have learned in this topic is very valuable. Who else knew about the default mouse obfuscation wich Unman tols us all about? That really should be added to the qubes os docs. And getting an ETA on qubes event buffering development is also very good.
And more users have become aware about the mouse movement fingeprinting threat. Very valuable information.

1 Like

Right, Qubes OS is already niche, placing every Qubes OS user into a bucket like how the Tor Project handles it with the Tor Browser requires upstream developer coordination, going solo is not going to cut it.

If I understand right - the argument seems to be:

Whonix uses kloak to provide obfuscation.
Therefore Qubes-Whonix must use kloak.
Behavior in Qubes will be different from Qubes-Whonix.
Therefore Qubes must use kloak, or some other similar technology.

I find this questionable. It seems to beg a number of important
questions.

I never presume to speak for the Qubes team. When I comment in the Forum I speak for myself.
2 Likes

Ironic that your AI is simply repeating the same things you have
already said.

On the main issue, @qubist is right - not completely right, but right,
and the interesting question is to what extent sites now use keyboard
and mouse metrics to identify users.
There’s a good deal of academic work on this, but you have to track
patents and read in to white papers to understand the rising trends.
US20060224898A1 is much cited in mouse work, and many of the parameters
would be affected by use of kloak. But the same could be said of (e.g)
varying pointer speed between security domains, or changing screen
resolution, without reducing the anonymity set at all. The other “use”
fist would not be affected.

I dont see any discussion of how kloak (or derivates) are impacted by
JavaScript based metric gathering. As far as I can see kloak will be
almost completely nullified, but we’d need to see some evidence on this.

That is a major issue. Unless any one else can provide some input I
seem to be the only person who has any experience with a commercial
offering for identity verification, and my experience (with evidence in
that particular case) is that Qubes reduces the effectiveness of that
system as it is. If any one else can chip in more evidence would be
extremely welcome.

Evidence - we don’t have any. I can build a system to gather metrics,
perhaps mix in with existing available datasets. Then we could run RF or
LSTM to classify authorised/unauthorised users. This might work, and
would at least provide some evidence. But we would not know how these
results could be extrapolated against existing commercial or state
offerings. There is a certain amount of magical thinking going on - we
have no idea if Mossad have software that will identify individual
internet users - if they do there is little to be done. We have no idea
if existing systems are scalable to internet scale - none of this
information is available. What we do know from academic studies is that
the accuracy of various biometrics degrades with increases in population
size: the most recent review I know suggested that the move from small
scale evaluation to actual deployment is a major issue for real world
applications.

I never presume to speak for the Qubes team.
When I comment in the Forum I speak for myself.

3 Likes

That isn’t quite what I said, and it only reflects the first of the two arguments. For Qubes-Whonix and non-Qubes-Whonix to make users look alike as far as input patterns, they need to use a similar-behaving mechanism for obfuscating input patterns. Whatever mechanism that is doesn’t really matter as long as it works; kloak is believed to work well based on research done by vmonaco, so it’s what we use and contributed to Qubes. If a better mechanism exists later, it should be used to replace both kloak and Qubes event buffering. Beyond that, the already-present obfuscation-by-coincidence Qubes provides is weak, as described above.

3 Likes

Probably should have included this above; the research done by vmonaco I’m referencing is https://arxiv.org/pdf/1609.07612.

3 Likes