[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Problems with bit-twiddlers



[From a conversation with Roger.]

A danger with our current design stems from the fact that (when using
counter mode) a flipped bit in M results in a flipped bit in E_K(M).

I've got to pack to leave for Connecticut for the weekend, so I won't be
able to discuss this at length, but here are a few messy scenarios:

A) In the SURB design I proposed earlier, where the 'To: bob@bob.com'
portion of the payload is included, an attacker might flip the
nth-from-last byte of the payload, resulting in a possibility of a
message sent to 'bib@bob.com'.  That's no good: the attacker could then
deduce that the SURB was one of Bob's.

B) An adversary controls M1, and M9.  She receives a message at M1 which
she needs to relay to M2; She suspects that M9 may be the next
destination.  To confirm this, she flips the 129th byte and forwards the
message.  If M9 later receives a message whose first byte can be altered
to give a real header, then the adversary had confirmed her suspicions. 
No good. 

C) Mallory thinks that a message Alice just sent is heading for Bob.  To
confirm this, she dances a happy fandango on the probable payload
portions of Alice's message.  If Mallory can read Bob's mail, she checks
to see whether Bob is receiving gobbledegook that -- when modified to
her specifications -- makes sense.  If so, Mallory's won.

We thought of a few solutions:

1) Every header contains a hash of all of the rest of the message.  This
won't work for SURBs.

1') Same as 1, except that SURB MH just have a hash of the rest of the
message, up to the last header.  This would allow SURBs to function, but
make them readily distinguishable from forward delivery.

2) Every header contains a hash of the next header.  The last header has
a hash of the payload.  This won't work for SURBs either.

3) Every header contains a hash of the next header.  The last header has
a hash of the "header portion" of the payload.  The payload's header has
a hash of the payload.

This would entail another kind of type specification, where a message
would be of the form:
       MH1 MH2 MH3 MH4 E_{K1..4}(CH1 (CH2 (CH3 Content)))

4) We discover a magical, efficient, symmetric whitening process, such
that changes to X have no predictable effect on W(X), and so that
W(W(X))=X.  This would solve all our problems, but seems unlikely to
turn up. ;)

5) We use something other than counter mode.  This does us no good at
all, but only ups the block size from 1 byte to something larger.  If
errors recover in a matter of a block or two, or if they only propagate
forward, then the attacks above could still be made to work.


**Clearly, (3) is the one I liked best. :)


Can anybody think of any other solutions?  The restrictions are:
        I. Mallory shouldn't be able to learn anything by modifying
           messages that he couldn't learn by dropping them.  [One way
           to achieve this is to somehow ensure that honest nodes drop
           modified messages.]
       II. SURBS still need to work.
      III. It should not be possible for those other than the sender and
           receiver to distinguish a message sent with a SURB from a
           message sent via a forward path.

Yours,
-- 
Nick