Re: Unrecoverable loss pattern

Ian Swett <ianswett@google.com> Thu, 01 March 2018 21:35 UTC

Return-Path: <ianswett@google.com>
X-Original-To: quic@ietfa.amsl.com
Delivered-To: quic@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id E36D412FAB8 for <quic@ietfa.amsl.com>; Thu, 1 Mar 2018 13:35:44 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.709
X-Spam-Level:
X-Spam-Status: No, score=-2.709 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001, T_RP_MATCHES_RCVD=-0.01, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=google.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id RO2aPuLRCL38 for <quic@ietfa.amsl.com>; Thu, 1 Mar 2018 13:35:42 -0800 (PST)
Received: from mail-io0-x232.google.com (mail-io0-x232.google.com [IPv6:2607:f8b0:4001:c06::232]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 8F95312EB28 for <quic@ietf.org>; Thu, 1 Mar 2018 13:35:42 -0800 (PST)
Received: by mail-io0-x232.google.com with SMTP id e7so8718036ioj.1 for <quic@ietf.org>; Thu, 01 Mar 2018 13:35:42 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=ITZ41vz6nNi1Twinjq91DMli7MbpiyISPyzQTswFa4E=; b=QtMaVYlH7QbyoKHZolZpNuyBs1AIur8wnk5cXRJbYhdiLgPRLS7GY1W0zPxkIbMWvS KtAZRGv4WvdCa+c3jT2YiREFCpcPRri+JF249IgwJ17HPzUTwQIGaMe7RJbKiGHwhSyq TyDs6zlC4LStY9KmrlQWwNz2VQywCpmjkKEE34KC5nOH2FK1dqLfrRsfetYPNwwP6LDb tmVk3QK6IHtcKDVIw2mskKUro3taYcygFdqnMPh6fZ7Mqcl6zMiPv45k9ExXI8ozHMLB /HIg1JSE+niGq3ugQz1UZyzP2hI7Fk9BDm52QUI8igZSy8flxu6vw2sjvFUWALApheCO OsWQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=ITZ41vz6nNi1Twinjq91DMli7MbpiyISPyzQTswFa4E=; b=fz0Chf5Vx09qWOw9rjQy7PKmvBgw2n5QpGN6/l4kM5NE0ApOM8eWbHmgx1pBfOGDjX KoEdx0z80FlRxiJnZmhdMvgeVYOEjyXmgQ0l0yo75Zjy1XEUOdu8/lesDAkl3CuTYLcn jyxdLrIOms3jj68gU97MMjfsje1s2JjJfPMWU6jkuF3MKDaX+Noqmw0uuky52nyWCM1L 8rCsx0veHzKDtojW/di2zPAenw+jW0aQQ+OGE5tEeSXLij7VMZ/QyJUtvwJ+wOnntbzE zrhjg8Niatm853raNozj7+mda8vkHn912hSjbBbIFoDP67kVRxByMoocTNTTyqKptXVa HFhg==
X-Gm-Message-State: APf1xPBaA96GbkPsDm+4VHNFQz+ENYeK0RaOKgrRZ+yrwuEKcVH1zqUs KQJnNdIbjoSRPJ+pnB78TZRsC4kvx0t8GXs5kYOtnw==
X-Google-Smtp-Source: AG47ELtK3LRgUEjPUGmKeD4HOLVYNHPxPGJvPrxN1jZuaEdJxDVJj5d8CfhMSQ9gfwm9gcu9fI+gbv+KFDbveAwQyJg=
X-Received: by 10.107.131.82 with SMTP id f79mr3790016iod.102.1519940141507; Thu, 01 Mar 2018 13:35:41 -0800 (PST)
MIME-Version: 1.0
References: <CAOYVs2q1QSpvZjPRfbJmKhhQ6eApwLSSFSbbOBt2J-PAeqVELQ@mail.gmail.com> <CABkgnnWuXJb2_BcfU4N=ODwy5JDZKBBd6TyhFmXLbPgVrvCoEA@mail.gmail.com> <CAOYVs2q0q6YrFfipd7UEENoz2ht2Mr0fPqnvy5pJRz-bPxCJpw@mail.gmail.com> <059bc7c6-a8cb-c46b-c971-333b9051c222@huitema.net> <CAOYVs2ogy77tjE+e9_mj6YNYcsDP0iduUKsE-_JnMrOeo4jVbQ@mail.gmail.com> <CABkgnnVLdKiaEDdGKjLXB9wNZ8vxvV_ZyJQnLAR4VxsjUDvjyg@mail.gmail.com> <f62726b4-564a-4e45-726b-63705753ddf2@huitema.net> <CABkgnnU78mE55N9KHx2FqR6AvthyM86-+zG-VknQ3tfpeKh=Gw@mail.gmail.com> <9d646ca7-2c95-62fd-206f-10ec6ce4cd5d@huitema.net> <CAKcm_gOb_ZYD3bWZVq5y0O50jwnh98xME7p_tgY-TCNSZRkGfg@mail.gmail.com> <CABkgnnWF3ib_ccQHLv2W++HW9QJdnT=YEbGo=va39MDJq-9Z9Q@mail.gmail.com>
In-Reply-To: <CABkgnnWF3ib_ccQHLv2W++HW9QJdnT=YEbGo=va39MDJq-9Z9Q@mail.gmail.com>
From: Ian Swett <ianswett@google.com>
Date: Thu, 01 Mar 2018 21:35:30 +0000
Message-ID: <CAKcm_gPk4e4JvOqm52VDKaMsvy9G0Fx5BHfwQawrxmpZkyo+pw@mail.gmail.com>
Subject: Re: Unrecoverable loss pattern
To: Martin Thomson <martin.thomson@gmail.com>
Cc: Christian Huitema <huitema@huitema.net>, Marten Seemann <martenseemann@gmail.com>, IETF QUIC WG <quic@ietf.org>
Content-Type: multipart/alternative; boundary="001a113fb92637787d056660a46b"
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic/CAXnqZpZHusox3Ev3kV2aNT9-Eo>
X-BeenThere: quic@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <quic.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic>, <mailto:quic-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic/>
List-Post: <mailto:quic@ietf.org>
List-Help: <mailto:quic-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic>, <mailto:quic-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 01 Mar 2018 21:35:45 -0000

Sure, but then aren't you stuck with unackable data that never goes away.
That's just ughhh.

An easier solution than two timers(in my opinion) is to move out of
handshake mode into TLP/RTO mode as soon as you receive a forward secure
packet, since the goal of handshake mode is to ensure the information
necessary to derive keys is delivered before the things encrypted with
those keys.


On Thu, Mar 1, 2018 at 4:28 PM Martin Thomson <martin.thomson@gmail.com>;
wrote:

> Two timers solves the problem because it leads to the request being
> sent on TLP (or RTO), which unsticks the whole thing.  That is, if you
> consider the problem to be less that the Finished isn't read, but more
> that the handshake timers disable TLP/RTO.
>
> On Fri, Mar 2, 2018 at 6:13 AM, Ian Swett <ianswett@google.com>; wrote:
> > I'm a bit confused about which case we're concerned by, so I'll try to
> talk
> > through my understanding.
> >
> > Two timers won't solve the problem of the ack of the Finished being
> lost(and
> > then the acknowledgement never being sent again) that Marten was
> discussing,
> > because as Christian said, we won't process re-transmissions of the
> Finished
> > message because they're not encrypted and it will be stuck in an
> > undeliverable/unackable state.
> >
> > The one byte frame could be an explicit signal to move on, but we still
> need
> > a way to stop re-transmitting the Finished.  Does that frame serve as an
> > acknowledgement of the Finished as well?  Doesn't the receipt of
> encrypted
> > packets also serve as an acknowledgement of the Finished?  In either
> case,
> > we're discussing an implicit ack of sorts.
> >
> > One totally different(and possibly poor) alternative would be to only
> send
> > unencrypted handshake data on stream 0, and when you receive an encrypted
> > packet and your handshake has completed, if stream 0 isn't already
> closed,
> > reset it, since you'd know the handshake has completed.  We'd have to
> > allocate a different stream for post-handshake encrypted data, but that
> may
> > be a win anyway, since it would clearly define which streams were
> encrypted
> > and which weren't?
> >
> > Related Q: At some point, weren't we discussing not sending finished?
> >
> >
> >
> > On Mon, Feb 26, 2018 at 1:45 PM Christian Huitema <huitema@huitema.net>;
> > wrote:
> >>
> >>
> >>
> >> On 2/26/2018 12:51 AM, Martin Thomson wrote:
> >> > The issue in #1018 (as I understood it) was the fact that Finished
> >> > could be protected (and thereby authenticated), but it was not.  Not
> >> > having it protected makes it vulnerable to all sorts of attack.
> >> >
> >> > This is different, it's not an attack, it's just an unfortunate
> >> > interaction between the loss recovery algorithms and the TLS mapping.
> >>
> >> Actually, the issue was that allowing Finished to be repeated in clear
> >> text allows for a DOS attack on the server. The spec changed to ignore
> >> handshake packets after Finished is received once. That closes the DOS
> >> issue, but it opens the "ACK of Finished" issue.
> >>
> >> >
> >> > Other than running multiple timers as I suggested, you could also
> >> > force the server to respond to cleartext packets with a repeat of its
> >> > ACK.  It doesn't even have to look at what it received, it just plays
> >> > out the last ACK.  That's what we do in our DTLS 1.3 implementation.
> >> > It works.  The trick there is that once you have an ACK for the ACKs
> >> > that acknowledge the handshake you stop the special behaviour.
> >> >
> >> That was actually the first solution I thought off. That works too, but
> >> there are two downsides. First, you get a "twitch trigger" -- send an
> >> handshake packet, get the server to send an ACK. Not a very big deal,
> >> but slightly annoying. Second, it relies not only on implementing ACK of
> >> ACK, but also on triggering a special behavior for the ACK of the ACK of
> >> the last handshake packet. Many implementations do ACK of ACK
> >> management, but grafting a special case in that path is a bit tricky.
> >> That was my thought process before proposing a simple one byte
> >> "handshake complete" frame. The special frame is easier to integrate in
> >> the receive processing.
> >>
> >> -- Christian Huitema
> >>
> >
>