On Sun, Jul 2, 2017 at 12:54 AM, Ilari Liusvaara <ilariliusva...@welho.com>
wrote:

> On Sat, Jul 01, 2017 at 03:52:37PM -0700, Eric Rescorla wrote:
> > On Sat, Jul 1, 2017 at 2:00 PM, Ilari Liusvaara <
> ilariliusva...@welho.com>
> > wrote:
> >
> > > On Sat, Jul 01, 2017 at 10:26:17AM -0700, Eric Rescorla wrote:
> > > > On Sat, Jul 1, 2017 at 10:01 AM, Ilari Liusvaara <
> > > ilariliusva...@welho.com>
> > > > wrote:
> > > >
> > > Just noticed that DTLS allows packing multiple independent fragments
> > > into one record (and then multiple records into one packet).
> > >
> > > Which impiles that an implementation that only prcesses one message at
> > > a time is not guaranteed to even be able to generate a valid list of
> > > RSNs to ACK, in case the peer sends sufficiently twisted (but still
> > > seemingly in-spec) input.
> > >
> >
> > I'm not following how that's true. When you decrypt, you record the
> received
> > RSNs and when you send an ACK you send the entire list. Then when you
> > finish a flight, you reset the list. Can you maybe show me a sequence of
> > events that would cause an error here?
>
> I think I figured out a case that doesn't involve peer intentionally
> generating very dubious input:
>
>
> Suppose that certificate is rather big (needs spliting to four parts),
> and:
>
>
> * The server preprares its flight, giving:
>
> - RSN 2:0 -> EncryptedExtensions, Certificate part 1/4
> - RSN 2:1 -> Certificate part 2/4
> - RSN 2:2 -> Certificate part 3/4
> - RSN 2:3 -> Certificate part 4/4, CertificateVerify, Finished.
>
> * Now, RSNs 2:1, 2:3 disappear, 2:0 and 2:2 make it through.
>
> * Client ACKs RSNs 2:0 and 2:2.
>
> * Server sees the ACK, and re-encrypts the offending packets:
>
> - RSN 2:4 -> Certificate part 2/4
> - RSN 2:5 -> Certificate part 4/4, CertificateVerify, Finished.
>
> * Now, RSN 2:4 disappears, 2:5 makes it through.
>
> * Client is one-message at a time. It can't ACK anything new. RSNs 2:1,
>   2:3 and 2:4 are lost.  RSN 2:5 can not be ACKed, because that would
>   imply the client received CV and F, which it did not.



Thanks for clarifying your case. I think what you're assuming here is
that when the client receives out of order handshake messages, it discards
them rather than buffering them. Is that correct? In that case, yes, it
should
pretend it didn't get the records as well, and I think the right answer
would
be to not generate a new ACK and rely on the server's retransmission timer
(which needs to run anyway).

-Ekr
_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls

Reply via email to