On Tue, Jun 4, 2013 at 10:34 PM, Peter Saint-Andre <stpe...@stpeter.im>wrote:

> I have one additional question: do both of the authors (re-)affirm
> that they are contributing this specification in conformance with the
> XSF's IPR Policy?
>
> http://xmpp.org/about-xmpp/xsf/xsf-ipr-policy/


Reaffirmed.


I request that the authors describe whether transmission timing
> attacks are possible even if message encryption is used.
>

Stream level encryption wouldn't be any more/less prone to timing attacks
than any other XMPP extension that sent message stanzas at a regular
interval.  The presence/abscence of data being transmitted, may reveal
information about whether or not the user is currently actively composing
or not, but will be clouded/muddied by other transmissions (presence
updates, other extensions, etc).

If privacy of keypress interval information is the intent -- then, no --
you would not gain accurate inter-keypress delay information due to the
regular transmission interval of 300ms-1000ms, since the keypress interval
information is hidden by encryption by having multiple keypresses kept into
the same message stanza transmitted at very regular intervals.   So the key
press delays are not accessible.

An interval of 0ms, transmitting each keypress immediately in separate
stanzas, can be a different matter altogether.

Now -- I am not familiar enough with message level encryption (e.g.
XEP-0200), but any timing attack concern would affect other XMPP
extensions.



Section 4.2.1: "Recipients MUST monitor the seq value as an integrity
> check on received real-time text." In what sense does the seq value
> provide integrity, and what kind of integrity does it provide?
>

A very, very, basic, and very very lightweight correctness integrity check,
preventing collisions between duplicate "seq" values between multiple
simultaneous logins trying to simultaneously compose a message to you.  (If
you're running a client that implements only the ability to keep one
real-time message buffer per window).  It is not a guarantee, much like
CRC32 isn't (because it's only 2^32 and you can get false CRC32's).

If each simultaneous login starts at 0, then collisions of similar seq
values can occur, causing one simultaneous login's real time text fragment
to be appended to a different simultaneous login's real time text.

Sender simultaneous login 1 sends "HELLO" (seq=0)
....real time message buffer = "HELLO" (in sync)

Sender simultaneous login 2 sends "GOOD " (seq=0)
....real time message buffer now out of sync ("Keeping Real-Time Text
Synchronized"

Sender simultaneous login 1 sends message refresh "HELLO THERE" (seq=0)
....real time message buffer = "HELLO THERE" (in sync)

Sender simultaneous login 2 sends "BYE" (seq=1)
....real time message buffer = "HELLO THERE BYE" (undetected conflicting
rtt)

You can see that simultaneous login 1 did a message refresh at seq=0;
But simultaneous login 2 sends a new element at an incrementing seq from
previous element from the same simultaneous login 2.   So seq=0 followed by
seq=1 is a valid increment, but seq=0 came from login 1, and seq=1 came
from login 2.

Now, this corruption will undo itself during the regular message refresh
cycle:
http://xmpp.org/extensions/xep-0301.html#message_refresh
So the corruption will be brief.

This issue, is in the case where you don't have full JID (e.g. simultaneous
logins into the same MUC), or if you're using a client that only supports
one real-time message buffer per window (e.g. you write a simple RTT
decoder processing that is based only on bare JID).

But, if you randomize seq, this problem typically does not happen (unless
you have a rare chance collision between two random numbers within 2^31).
 And on top of this, simultaneous logins typing simultaneously, and using
RTT, will also be a rare situation. So, the seq, ends up being a
sufficiently lightweight correctness sequence integrity check.

Now, if terminology "integrity check" is not appropriate, let me know what
terminology is appropriate.  It just helps prevents the potential
false-correct colliding <rtt/>'s in the rare case of simultanous logins,
and those that happen to type simultaneously (two different people usinfg
the same XMPP login; something normally frowned on anyway), during
bare-JID-only processing situations.


Thanks for your feedback; I'll incorporate these very minor changes that
you've asked.  (I assume I'm supposed to provide a 1.0 towards the end of
the LAST CALL).

There's also some minor grammatical/correctness corrections:
- One "]" typo character, needs to be removed
- Change "per <localp...@domain.tld>" into "per bare JID
(<localp...@domain.tld>)"
- Change "per <localp...@domain.tld/resource>" into "per full JID
(<localp...@domain.tld/resource>)"

Thanks!
Mark Rejhon

Reply via email to