-
Notifications
You must be signed in to change notification settings - Fork 47
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
The HW exposure check does not solve Cloud Gaming use cases #730
Comments
@drkron please comment if this was a fair characterization of MediaCapabilities HW exposure checks or if we do in fact take more steps to prevent leaking HW. |
That seems like a fair characterization. From what I remember, the powerEfficient bit alone has not been considered to have privacy implications. The browser may in certain cases choose to set powerEfficient=true even though there's no HW support (e.g., low resolutions may for example be considered to be powerEfficient without HW support). |
See https://w3c.github.io/webrtc-nv-use-cases/#game-streaming for the description of the use-case. Note that attacks requiring a live connection like heuristics about decode time can be used as Diego pointed out. So far, we haven't seen such attacks though so I do not think we are gaining much by gating decoderFallback. For cloud gaming the gamepad API could be taken into account as well but I assume this is the same single-digit percentage solution as microphone. We should still take fullscreen (removed in #712) into account since it will prevent some fingerprint but maybe need different levels of granularity? Moving forward I'd rather go the opposite direction and have more information in encoderImplementation/decoderImplementation if getUserMedia et al give a strong signal. |
That was suggested before and it would improve the situation, but I feel like it has the same problem as the GUM check, it restricts to certain devices... but you could have cloud gaming with a keyboard. It would seem rather arbitrary if you can have good HW usage if you plug in a controller but not if you use a keyboard. IsFullscreen is also problematic |
I think going with a variation to option 2 in the original thread makes sense, i.e., if the mediacapabilities reveals the hw capabilities, we can piggyback that information |
Suggestion: If the MediaCapabilities already shows a defined value of PowerEfficient, then all the fingerprint value of PowerEfficientEncoder / Decoder is already out there. The PowerEfficientEncoder is only adding information about later events on the system, which is not that useful for fingerprinting. |
So instead of guarding this with HardwareAllowed, guard it with MediaCapabilities.PowerEfficient. |
Makes sense to just reference MC.powerEfficient, the intent should be clear |
Hi all, I don't know how overlapping the repo's/specs are so i wanted to point to my comment in the webrtc-stats spec that covers the same concerns as this issue |
Am proposing to expose this info in WebCodecs via an event: w3c/webcodecs#645 |
I see there are two parallel but related conversations going on. I've been mostly commenting on the PING/privacy review side of things at #732, but if it'd be helpful im also happy to discuss here too / instead |
@pes10k Thank you for the response. I agree this might be more proper place to discuss the alternatives. |
thank you for the link @xingri. Just to make sure i understand correctly, option1 then would leave if I think the approach in the spec of "group the fingerprinting relevant inputs together and require some high-touch event before the page can load them" is probably the right way to go. if cloud gaming folks need a way to get access to these stats that isn't |
That is correct.
Basically, I agree with you that it can be considered equally.
Will investigate it. |
@pes10k Could you please review my feedback on the decoderFallback approach from the FP protection perspective once again? Also could you share a little more detail about how to define the "high-touch event"? |
Ah i see, can you say more about the kinds of cases that would cause
Sorry, I didn't mean to mislead you, this isn't a well defined term. I just mean "some high level of interaction or user intent". The most common examples are dialogs and permission prompts, but those aren't the only ones |
@pes10k Thanks you for the response. To share the transitions of this metric, it may look like following:
FYI, in case of the Chromium browser case, the fallback gets triggered by the following reasons:
|
@pes10k Could you share your opinion on the decoderFallback metric approach? |
@pes10k It is a gentle reminder that I am waiting for your feedback. Please let me know if you need more clarifications on the decoderFallback metric. |
@xingri Im not familiar enough with this part of the code to know what all of those enum options mean, but if this means that If though the If its the second case, then i'll have to read up more on the kinds of things that could cause |
@pes10k Thank you so much for the feedback. Fortunatley, the decoderFallback is only effective on the current site during the session and not shared throughout the browser session. |
The decoderFallback only reflects the current site's decoder usage and as such does not expose if other websites are experiencing fallback, only if the current site experiences fallback. However, because one of the reasons that your decoder could fallback is that the HW is not available, if another website or application acquired the same HW before you did, this could result in decoderFallback when you try to instantiate your decoder (depending on HW limitations in number of concurrent instances). How concerning is that to you @pes10k ? |
@henbos Thank you for the feedback, Based on my proposal, decoder fallback only triggerred when the decoder starts with hardware acceleration. Unless the session starts with hardware decoding, the decoder fallback will be not triggered. |
Clever! |
This issue was discussed in WebRTC Feb 2023 Meeting – (Issue #730 🎞︎) |
Based on WG meetings where the desire to expose an event instead has been discussed, this is no longer being considered by the stats spec |
After some back and forth, the current HW exposure check only considers contexts that have capture (getUserMedia). This obviously does not work for Cloud Gaming.
What's even more frustrating is that MediaCapabilities already expose the HW capability information, but it does not expose what is currently used (e.g. powerEfficientDecoder or decoderFallback). The specs are inconsistent in how much they care about exposure information. The MC privacy consideration section says that there is very little information exposed so it is not a big problem, but that a user agent might want to throttle or give vague answers, which is very much up for interpretation. Why would getStats() be less restrictive than MC?
Possible paths forward:
In reality though, because MC is currently up to the UA which in practise appears to be implemented as "always expose", doing 2) would basically turn off all finger printing protection from getStats(). But at least the two specs would be consistent and we would have a placeholder algorithm (in MC spec) to update when necessary.
Let's discuss
The text was updated successfully, but these errors were encountered: