Re: Unrecoverable loss pattern

Christian Huitema <> Mon, 26 February 2018 18:45 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id DF387126C3D for <>; Mon, 26 Feb 2018 10:45:34 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -2.601
X-Spam-Status: No, score=-2.601 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id CONn5gEeuPKc for <>; Mon, 26 Feb 2018 10:45:33 -0800 (PST)
Received: from ( []) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id 54F6F124D6C for <>; Mon, 26 Feb 2018 10:45:33 -0800 (PST)
Received: from ([]) by with esmtps (TLSv1:AES256-SHA:256) (Exim 4.89) (envelope-from <>) id 1eqNmF-000AvM-4v for; Mon, 26 Feb 2018 19:45:31 +0100
Received: from [] ( by with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.63) (envelope-from <>) id 1eqNlh-0004NW-Le for; Mon, 26 Feb 2018 13:45:29 -0500
Received: (qmail 23306 invoked from network); 26 Feb 2018 18:44:55 -0000
Received: from unknown (HELO []) ([]) (envelope-sender <>) by (qmail-ldap-1.03) with ESMTPA for <>; 26 Feb 2018 18:44:55 -0000
To: Martin Thomson <>
Cc: Marten Seemann <>, QUIC WG <>
References: <> <> <> <> <> <> <> <>
From: Christian Huitema <>
Message-ID: <>
Date: Mon, 26 Feb 2018 10:44:51 -0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0
MIME-Version: 1.0
In-Reply-To: <>
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Content-Language: en-US
Subject: Re: Unrecoverable loss pattern
Authentication-Results:; auth=pass smtp.auth=
X-AntiSpamCloud-Outgoing-Class: unsure
X-AntiSpamCloud-Outgoing-Evidence: Combined (0.17)
X-Recommended-Action: accept
X-Filter-ID: EX5BVjFpneJeBchSMxfU5gXivFKqF+MRRSOkXJxbbal602E9L7XzfQH6nu9C/Fh9KJzpNe6xgvOx q3u0UDjvO37pNwwF1lRXh5rzvPzo9Jts1ujulqUFmMITHM77eiViW4Iybcz83Dow0ZgaOTB9U87i TvJ2/ZGzVWB9scFAaCdIFaUvXN+CI+RGy3Me16pBmePYa3CQqb9L6x2mHOMrWx/TBCf6oYXAWGet lavcAjD9ytQxIHf9lN5jjLJaPK8lRJSPf/SXbEnDSsal/zZzc4n9VZdr7RAFD5mRwooUYhwMPaBP aKeQW+/QlaOdv8isl/qMm08Zpim2AHUKEWvQ6G/bWfgucjnNmABpGhD9TTttrFCuZ0NkwnSz2Luu o1u9uevuNfM1HjkNEFwape+IgNezYqxGMqsKjARq8PBC4qjSYb8Ll5Ew7esaVIVXxqL4mdySlZou 9qHIGOZDEEo7Oyc1nq0gsY582CWqKjiRB3upW940lL8kAcN44/h+EKQYJlgC/j6gnFfUz8cFIW+v ZP5XHG7O1tYu81mRrWwAsv7c/F7BDvT0aUBvAh6gJldfpXIull5ERhEWeEevzAF7zmj55Nl155o2 Oe/0FuVZZmVzxAG+DjqL5QSEyTpqxgd+hoJiRUJS+7Nru8G8qObMBABriH3x3J15D78KylFpBENq HXIoSsvffuCdDqwWbJR1D/7Rwl5fb+U9Gl2IOh9znuhk/x9yoQRTGrDa4+HCd27Q+XNr4QUyZNz0 uLvRKYxZQqF/LoUsSniF4plClx3amRbl6gc+xGfFxqO6pPmlSScERpFEqF2lExBUp1VMiBudJzjv VlSk5R4XVB7M44lU2DF9mE6flINXEXJL2r3PrBjLoydbuOy1i9SfmYgxBbq3mdySlZou9qHIGOZD EEo7O+Pd3ebmKuucUVzXcVqfEwQXQ+sESjyASrM/THMyWUoiolU4x0KD113J1SYnBP2uKg==
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: Mon, 26 Feb 2018 18:45:35 -0000

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