-
Notifications
You must be signed in to change notification settings - Fork 22
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
Suggestion: ephemeral application transports #351
Comments
Thanks for writing down this detailed suggestion! Putting down my initial thoughts for the first bullet:
I agree being able to persistent authentication state would be a significant UX improvement. Also expected when the user is in a familiar environment (e.g. at home) surrounded with trusted agents/devices. From the flow, I gather the opening a new connection flow will always hit this step:
This seems to protect against drive-by fingerprinting attacks. These are the relevant guidelines on the topic of persistence that may help:
This does not however protect against observers on the local network querying for mdns addresses. Here's an interesting proof of concept demo: https://mdns-name-guesser.vercel.app/ (article) |
Thanks for the feedback @anssiko. I do agree that fingerprinting issues are already covered by the permission dialogs. Somehow I do feel that if a problem can be solved at the protocol layer, it may be wise to do so. It may increases its applicability. Naturally, this needs to be considered against added complexity. Regarding mDNS address querying: Since we're now using UUIDs in the mDNS adresses, I don't think this technique is feasible. The entropy is too high in our case. The case in the article makes use of the fact that the mDNS addresses use common names, severely limiting the entropy and making the attack feasible. |
I've been thinking about the interaction between the network and application protocol and the interaction between OSP agents and origins.
Some properties that I deem valuable:
To make the network protocol usable for a broad range of protocols, we need a good abstraction. One option would be to mux application transports over the network protocol. However, this comes with a potential performance impact of encapsulation, and encapsulation of different protocols also has a higher cost of implementation. Another options is to facilitate opening new TLS connections to transport application protocols. This doesn't come with the performance and implementation costs mentioned above. As an added advantage, it is already a popular abstraction used by many protocols. To open a TLS connection on the local area network you generally need: the target address (dns / ip and port) and target TLS certificate (Since we can't rely on Public Key Infrastructure). I'll refer to this as "connection materials" going forward. Note: for now I've only been talking about the protocol level, I'm not talking about browser APIs yet.
Since we're building a protocol to be usable in the context of a browser, there's an additional need to support a broader range of protocols and that's how to construct them with a browser API. However, this requires making sure we don't expose persistant identification to the JS Realm to avoid fingerprinting. One way to do this would be to create new constructors for all transports that we want to construct. However, this again adds implementation cost per protocol. Another option would be to expose the connection materials to the JS Realm. This would have far broader applicability; but it can only be done if the connection materials only contain ephemeral information.
So, this is where the above suggestion comes in. We extend the network protocol with the ability to allocate new ephemeral (remote) connection materials. The connection materials can be exposed to the JS Realm to allow any TLS-based transport to be constructed. The overall flow would be:
Opening a new connection is done by repeating the above steps from step 4.
This approach gives us the following properties:
Open points I can think of:
I'd love to hear your thoughts @markafoltz, @wangw-1991, @pthatcherg, @anssiko.
The text was updated successfully, but these errors were encountered: