Re: Unrecoverable loss pattern

Ian Swett <> Thu, 01 March 2018 19:13 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id B507E12ECEC for <>; Thu, 1 Mar 2018 11:13:26 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -2.709
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: (amavisd-new); dkim=pass (2048-bit key)
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id N0cdgXDK3fzX for <>; Thu, 1 Mar 2018 11:13:25 -0800 (PST)
Received: from ( [IPv6:2607:f8b0:4001:c06::22d]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by (Postfix) with ESMTPS id E6A2D12ECC4 for <>; Thu, 1 Mar 2018 11:13:24 -0800 (PST)
Received: by with SMTP id g21so8254575ioj.5 for <>; Thu, 01 Mar 2018 11:13:24 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=SGsGhTivDuEC8C8O9OxNZ+LyNDGNngjOdahikiJ5/co=; b=dhqeZb/x6xmbQXBirjqsIz+mwZoIllJo25PD4J4ol1SompY5wa+rTs0/1SEZuEFlPx J6EvDCrzbdT8c8LZCPb8UAXgakqlimD+CbCJFhKW67OWjitEoh4pjbPXAfU6zQJPlWsv of0S+Q8XtOoSfVv1Trj+uugnU6iHEhYBb/scYda8PnNgHgiKV0jXWehLGTaG415Sw/2b MufXq5Sr827+ss/geCLlj1ZfoLLl4Oo5yU7q34uafXzHEMoXNJ8S+4zFWDk9dxDl4zKd 1/HHJeOArAS1SKa4Gb7gdQEOSgWWyF8FF1L5cXwcG5tNAh6AYBqsYwX796eiDndYsb9V 8OFA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=SGsGhTivDuEC8C8O9OxNZ+LyNDGNngjOdahikiJ5/co=; b=jCOa0KouYsFs0EmuuYG3A6kJIqlnjlmUL/83LjOI8t9H37UNAf3sCg22FGR+Y/fcMG EN03kJq/2w99LfyrYCXPUMgdPjXuqE2sjpuze3kC7qt4nF7qSTER/oApXE/TIpF76Nwf K7WjG2FvBf2/4kmu9dbOpCosvqN1+GV55u13ueXZqB8ODh3c5rSmMqiy34jB2qmgCmfK piy1OysFVfoNYterTmMBCD6TgkTOG8q7TCyKy82u471j9DrjxG143iNsaK9qY3qfB0xl 058aMfqcF+4wDgaMKQYXFZhbwS6kIwan4Ttt9CKcvvj9FyKmen9xI/2u8+jHOefN3d7L RR/w==
X-Gm-Message-State: AElRT7H/iZSi6qnVmeV6BAxsdsOa8uQEzq4QRDfNKryedD8zFGGttMja J8p1+li6hN79WkBeiFdrpluFMCcIJmYGCxDVHOv/OA==
X-Google-Smtp-Source: AG47ELsHdllgrC7lO0MJk5fLWKQkEVCYZSFnU8OMi46LHUMPkcsdUjIuu5Fx3GMYVgLGIJwUeEFEI8gpvw8a62rd5YY=
X-Received: by with SMTP id l93mr3326845ioi.140.1519931603935; Thu, 01 Mar 2018 11:13:23 -0800 (PST)
MIME-Version: 1.0
References: <> <> <> <> <> <> <> <> <>
In-Reply-To: <>
From: Ian Swett <>
Date: Thu, 01 Mar 2018 19:13:12 +0000
Message-ID: <>
Subject: Re: Unrecoverable loss pattern
To: Christian Huitema <>
Cc: Martin Thomson <>, Marten Seemann <>, IETF QUIC WG <>
Content-Type: multipart/alternative; boundary="001a113ed31a5696b805665ea71a"
Archived-At: <>
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Main mailing list of the IETF QUIC working group <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Thu, 01 Mar 2018 19:13:27 -0000

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 <>

> 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