[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: End to end mixminion rationalized, with compression and K-of-N
On Fri, Oct 11, 2002 at 02:33:52AM -0400, Nick Mathewson wrote:
> Tag: A 20 byte sequence contained in the final subheader of every
> packet. Every routing-info field associated with an exit
> routing-type has a Tag subfield.
> Tagged Payload:The 28K contents of a packet, plus the Tag from the
> packet's header.
Since we already say 'tag' in the context of a tagging attack, can we use
an alternate name for this? id? mid (mixminion id)? something better? :)
> Stateful SURB: A mode of SURB generation in which the SURB generator
> remembers an independent set of decryption keys for each generated
> SURB.
> Stateless SURB: A mode of SURB generation in which the SURB generator
> only needs to remember a single medium-to-long-term secret to
> decrypt packets sent to any number of SURBs.
I can see why these are named like this, but on first glance they
seem backwards. A stateful surb is one that carries its own state; a
stateless surb is one that doesn't need to carry any state. The above
notions are instead with-respect-to-the-SURB-generator. State-keeping
surb? State-carrying surb? We may be able to decide a better name here
once we've renamed 'tag' above.
> PROCEDURE: Divide a message into packets. [DIVIDE(M,PS,EXF)]
> ARGUMENTS
> M: the message to send
> PS: payload sized (fixed)
> EXF: expansion factor (fixed: everyone must use the same EXF,
> see below.)
>
> Let M_SIZE = CEIL(LEN(M) / PS)
> Let K = Min(16, 2**CEIL(Log2(M_SIZE)))
> Let NUM_CHUNKS = CEIL(M_SIZE / K)
>
> Let M = M | PRNG(Len(M) - NUM_CHUNKS*PS*K)
Is the arg to PRNG going to be negative here?
> For i from 0 to NUM_CHUNKS - 1:
> Let CHUNK_i = M[i*PS*K : (i+1)*PS*K]
If we're using the same notation as before, this should be M[i*PS*K :
PS*K], yes? I think I argued a while ago we might want to change to
your above notation. Should we?
> End
>
> Let N = Ceil(EXF*K)
>
> For i from 0 to NUM_CHUNKS-1:
> For j from 0 to N-1:
> FRAGMENTS[i*N+j] = FRAGMENT(CHUNK_i, K, N, j)
> End loop
> End loop
>
> Return FRAGMENTS.
>
> Note that a message will rely intact if and only if at least K
'rely'? You mean 'arrive'? 'remain'?
> Third, consider a different failure model. It's far more likely that
> packets are lost due to entire paths failing. In this case, it makes
> sense to "stripe" each chunk over a set of paths, such that Packet 1
> from Chunk 1 goes along the same path as Packet 1 from Chunk 2, Packet
> 1 from Chunk 3, and so on. Thus, if we choose N different paths, we
(more precisely, 'different' means disjoint)
> can reconstruct the message so long as at least K paths are
> functioning. If we choose Q paths for Q<N, at least K*Q/N paths must
...
> THE DESIGN ITSELF
Bedtime for me. I'll read the meat of this tomorrow. :)
--Roger