#28142 (moved) will get merged with no active padding machine. This ticket is about designing a useful padding machine that can act as a decent testbed for the WTF-PAD project.
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Child items 0
Show closed items
No child items are currently assigned. Use child items to break down this issue into smaller parts.
Linked items 0
Link issues together to show that they're related.
Learn more.
IMO it doesn't need to be a useful padding machine if we can't get a useful one done in time. If the best we can do is "cheap and harmless" instead of "useful", that would still give us a testbed.
#28633 (moved) is done, I believe. #28780 (moved) could technically be called nice-to-have gravy. The machines won't be effective against any real adversary without it since lifetimes give away too much info, but we could at least test the machines.
The harmless piece is the tricky bit, though. The Padding TODO file has items for sending an ordered preference list of machine choices in the negotiation, and a way to stop re-trying negotiation if it keeps failing. One (or both) of these must be done to meet the harmless property. I think that having an ordered preference will be sufficient for safety, if we specify a "null" machine that is the last preference/fallback in case of error, and if you negotiate a "null" machine, you don't try to negotiate anything more on that circuit.
So if we really want something that can work in 0.4.0, we definitely need to implement this preference ordering idea with explicit "null" fallback. And then we can try to get #28780 (moved) done after that.
tl;dr I made a machine that obfuscates client-side IP circuits. I did some initial testing on chutney and it seems to work okay-ish. Needs more work and feedback.
Re "XXX This is not good enough since this randomization is global...This should be randomized for each circuit" in +setup_machine_states_for_hiding_ip_circuits().. This is what the circpad_state_t.length_dist is for -- it allows you to specify a probability distribution that governs how many cells the state should last for (and length_includes_nonpadding specifies if that should count nonpadding cells too).
I'm setting this to needs_review to receive some comments from Mike.
I'd also like some suggestions on how to do the bandwidth overhead analysis in the spec.
Thanks!
Here is how an intro point circuit looks like with this patch in chutney (had to change the latency to fit chutney):
I have some comments on the PR. Some need fixups; some may just need discussion.
Also I found that Rob Jansen and Marc Juarez actually did make a proper classifier out of Kwon's decision tree algorithm, so we might need to be a little more careful with considering how such a classifier will behave (I have some comments about how we might do that in the PR). Also maybe we can get them to re-run their classifier for us on their beefy Shadow simulator box: https://www.robgjansen.com/publications/insidejob-ndss2018.pdf
For these reasons, we might also want #30092 (moved) for this. I could do it if we agree.
This branch takes the simplistic approach of only trying to make the initial circuit setup cell sequence blend in with general circuits. I find this to be more sophisticated than a look-like-nothing and it also has minimal overhead. I also addressed your comments in the previous PR.
Also, this is a fine start if we want to build this into a more advanced machine. We can just create new states that handle obfuscation after the initial circuit setup sequence.