Skip to content
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

Make Servers Stop Rejecting Requests #554

Open
dnwiebe opened this issue Nov 11, 2024 · 0 comments
Open

Make Servers Stop Rejecting Requests #554

dnwiebe opened this issue Nov 11, 2024 · 0 comments
Labels
enhancement New feature or request

Comments

@dnwiebe
Copy link
Collaborator

dnwiebe commented Nov 11, 2024

Dan made a mistake.

Before GH-716, we had a stream-key generation method that created stream keys by hashing our public key together with the server host name. This was adjudged insecure, because an exit Node would know the server name, and it had a neighborhood database full of public keys, and it could traverse its database and use each public key in turn to hash with the server name until it found a hash that matched the stream key it had been given; then it would know which originating Node it was serving for.

Dan noticed this vulnerability, but suggested the wrong fix to it. The fix suggested was to generate stream keys without any dependence on public key, so that the exit Node couldn't reverse-engineer it. As a matter of fact, we are now generating stream keys completely at random, with no dependence on anything at all. That worked to eliminate the exit-Node attack, but it caused another problem.

Whenever the browser requests a connection to a server through the MASQ Network, the originating Node computes a stream key for that connection request and compares it to all the stream keys it already knows; if it doesn't already know the newly-computed stream key, it requests the Neighborhood to generate a new route for the stream.

Before GH-716, every browser request to a particular host name would generate the same stream key as every other browser request to that host name, because the stream key was hashed from the host name and public key. That means that all traffic to that host would pass through the same route through the MASQ network.

However, after GH-716, each browser connection request generates its own unique stream key, resulting in a new routing request to the Neighborhood; the Neighborhood may return a route using a different exit Node, which means that the server will get identical session information from two different IP addresses. This is suspicious behavior, which may well cause an attentive server to reject the second request (and perhaps cut off the first connection as well, if it's sufficiently paranoid).

What Dan should have suggested is that the hashing operation stay the same, since it provides convenient stream-key collisions on the originating side that direct connection requests for the same server down the same route to the same exit Node; but the the material being hashed should be modified so that it doesn't entirely consist of things known by the exit Node. For example, instead of hashing in our public key, we could hash in something else: random salt, perhaps, that's generated at bootup time and stored in the Proxy Server.

@dnwiebe dnwiebe converted this from a draft issue Nov 11, 2024
@kauri-hero kauri-hero added the enhancement New feature or request label Nov 17, 2024
@kauri-hero kauri-hero moved this from 🆕 New to 🔖 Awaiting Development (Prioritized) in MASQ Node v2 Nov 17, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
Status: 🔖 Awaiting Development (Prioritized)
Development

No branches or pull requests

2 participants