Fingerprinting systems with TCP source-port selection
Fingerprinting systems with TCP source-port selection
Posted Oct 7, 2022 10:50 UTC (Fri) by scientes (guest, #83068)In reply to: Fingerprinting systems with TCP source-port selection by scientes
Parent article: Fingerprinting systems with TCP source-port selection
Posted Oct 7, 2022 13:20 UTC (Fri)
by wittenberg (subscriber, #4473)
[Link] (3 responses)
Posted Oct 7, 2022 13:59 UTC (Fri)
by Wol (subscriber, #4433)
[Link]
If you use a drunken walk to walk a balanced tree, then you both avoid re-using values you've already used, and you end up in a genuinely random new place every time. And as the tree grows, the number of random numbers used to get a new value grows - after 1000 values a tree with 2 nodes per branch will require a ten-step drunken walk ... if your RNG truly is random then no way is an attacker going to predict where you'll end up.
Cheers,
Posted Oct 7, 2022 15:23 UTC (Fri)
by epa (subscriber, #39769)
[Link] (1 responses)
Posted Oct 8, 2022 23:00 UTC (Sat)
by NYKevin (subscriber, #129325)
[Link]
1. The hashing algorithm is salted with a CSPRNG value generated at startup. But this requires you to know what you are doing, because there are a variety of side-channel attacks that might leak this value or allow an attacker to make educated guesses about it. For example, if a collision happens, a request might take slightly longer to process, and if an attacker can observe collisions, they may be able to try different keys and figure out the possible salt values. Or maybe not, as this is probably infeasible for very large keyspaces and salts.
Fingerprinting systems with TCP source-port selection
Fingerprinting systems with TCP source-port selection
Wol
Fingerprinting systems with TCP source-port selection
Fingerprinting systems with TCP source-port selection
2. A "perfect" hashing algorithm (i.e. an algorithm that never collides - only possible if there are at least as many hash buckets as valid keys, or if you can somehow prove that no two valid keys that collide will ever be used simultaneously, so you can't do this in the general case).
3. You have hard-realtime requirements, you absolutely need O(1) performance, and it is acceptable to drop requests that cause collisions. I'm not sure why you would want that, but it is theoretically a valid combination of requirements.
