Skip to content
Snippets Groups Projects
Commit 685c0f68 authored by Philipp Winter's avatar Philipp Winter Committed by George Kadianakis
Browse files

Elaborate on protocol polymorphism.

While the general idea is explained, there are no exact details.
Implementations may use different (CS)PRNGs to derive probability
distributions.  Such "flow diversity" might even be beneficial.

Conflicts:
	doc/scramblesuit/scramblesuit-spec.txt
parent 39aa6ffa
No related branches found
No related tags found
No related merge requests found
......@@ -234,10 +234,59 @@
probability distributions from which random samples are drawn. These
random samples dictate specific inter-arrival times and packet lengths.
Both probability distributions are generated based on a random 256-bit PRNG
seed which is different for every ScrambleSuit server. Servers communicate
their seed to clients in a protocol message whose FLAG_PRNG_SEED bit is set
to "1". The client then extracts the PRNG seed and derives the same
probability distributions as the server.
seed which is unique for every ScrambleSuit server. Servers communicate
their seed to clients in a dedicated protocol message whose FLAG_PRNG_SEED
bit is set. The client then extracts the PRNG seed and derives its own
probability distributions.
4.1 Deriving Probability Distributions
Probability distributions SHOULD be derived from the 256-bit seed using a
cryptographically secure PRNG. After the CSPRNG was seeded, the amount of
bins for the respective probability distribution must be determined.
Depending on the CSPRNG's output, the amount SHOULD be uniformly chosen
from {1..100}. The exact way how the CSPRNG's output is used is up to the
implementation.
After the amount of bins has been determined, every bin is assigned a value
together with a corresponding probability which is in the interval ]0, 1].
The probability of all bins sums up to 1. Again, the exact way how the
CSPRNG's output is used is up to the implementation.
For the packet length distribution, all values SHOULD be in {21..1448}.
For the inter-arrival time distribution, all values SHOULD be in the
interval [0, 0.01].
Since the distributions are generated randomly, it is possible that they
cause particularly bad throughput. To prevent this, implementations MAY
trade off obfuscation for additional throughput by carefully tuning the
above parameters.
4.2 Packet Length Obfuscation
In general, ScrambleSuit transmits MTU-sized segments as long as there is
enough data in the send buffer. Packet length obfuscation only kicks in
once the send buffer is almost processed and a segment smaller than the MTU
would have to be sent.
Instead of simply flushing the send buffer, a random sample from the
discrete packet length probability distribution is drawn. Padding messages
are then appended so that the size of the last segment in the burst equals
the freshly drawn sample.
4.3 Inter-arrival Time Obfuscation
To obfuscate inter-arrival times, implementations could maintain a
dedicated send buffer. As long as there is data in the send buffer, random
samples from the inter-arrival time distribution are drawn. The thread
processing the send buffer is then paused for the duration of the freshly
drawn sample until the next MTU-sized chunk is written to the wire. This
process is repeated until the send buffer is empty.
Note that inter-arrival time obfuscation has a drastic impact on
throughput. As a result, implementations MAY implement packet length
obfuscation but ignore inter-arrival time obfuscation.
5. Session Tickets
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment