[quicwg/base-drafts] Packet number rework (#1048)
Martin Thomson <notifications@github.com> Wed, 10 January 2018 23:54 UTC
Return-Path: <noreply@github.com>
X-Original-To: quic-issues@ietfa.amsl.com
Delivered-To: quic-issues@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 32E98120726 for <quic-issues@ietfa.amsl.com>; Wed, 10 Jan 2018 15:54:08 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -7
X-Spam-Level:
X-Spam-Status: No, score=-7 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_HI=-5, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=github.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 xTD-feVr5-1Y for <quic-issues@ietfa.amsl.com>; Wed, 10 Jan 2018 15:54:06 -0800 (PST)
Received: from github-smtp2b-ext-cp1-prd.iad.github.net (github-smtp2-ext2.iad.github.net [192.30.252.193]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 198F412D77C for <quic-issues@ietf.org>; Wed, 10 Jan 2018 15:54:05 -0800 (PST)
Date: Wed, 10 Jan 2018 15:54:05 -0800
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; s=pf2014; t=1515628445; bh=11pCR+TMr7vKsEJ9Bv6NLg1IBPHh21IBF0vBSkpHpvE=; h=From:Reply-To:To:Cc:Subject:List-ID:List-Archive:List-Post: List-Unsubscribe:From; b=QsCLNY4unPPxZz8dI0wN1PXqZHFRrIpk+u18MFHpG8M3ddEyezL6BQus3/BKYXyP5 AP2eY+UMWWp1Et/IQeFscSxMW60vnvCqRLI4hO6YVTagWzfBfJ8neMnWgp3iBaCVyC j4Pss+ZCdqUbjdua7sshe8dzrELmNc4ve2QekFFg=
From: Martin Thomson <notifications@github.com>
Reply-To: quicwg/base-drafts <reply+0166e4ab6d897cc708532fac0dd37ebe285d3b06b0d945e392cf00000001166e699d92a169ce1124b4c1@reply.github.com>
To: quicwg/base-drafts <base-drafts@noreply.github.com>
Cc: Subscribed <subscribed@noreply.github.com>
Message-ID: <quicwg/base-drafts/issues/1048@github.com>
Subject: [quicwg/base-drafts] Packet number rework (#1048)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5a56a79d37d4b_75402ad713fa6ecc619ef"; charset="UTF-8"
Content-Transfer-Encoding: 7bit
Precedence: list
X-GitHub-Sender: martinthomson
X-GitHub-Recipient: quic-issues
X-GitHub-Reason: subscribed
X-Auto-Response-Suppress: All
X-GitHub-Recipient-Address: quic-issues@ietf.org
Archived-At: <https://mailarchive.ietf.org/arch/msg/quic-issues/wPhNDTOtM5fhEG4RgInWeZd99OQ>
X-BeenThere: quic-issues@ietf.org
X-Mailman-Version: 2.1.22
List-Id: Notification list for GitHub issues related to the QUIC WG <quic-issues.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/quic-issues/>
List-Post: <mailto:quic-issues@ietf.org>
List-Help: <mailto:quic-issues-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/quic-issues>, <mailto:quic-issues-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 10 Jan 2018 23:54:08 -0000
This collates a number of issues with how we are managing packet number encoding, linkability, randomization and other things. From the mail sent to the list: There are number of problems with packet number gaps that I think we need to address. Most are minor. For instance, the initial packet number is not close to zero, which inflates the size of ACK frames from the very beginning of a connection. However, Christian just identified one that I think makes this more important to address: when using a new connection ID, the gap is the same size on both client and server. This makes flows linkable. The gaps between the last packet on the old flow and the first packet on the new flow can be calculated in both directions. Flows can be linked by finding flows where client-to-server packets have the same (or very close) gaps as server-to-client packets. With a few small tweaks to the current design, I think that we get a much better solution. Here is what I propose: Firstly, packet numbers start at zero and always increase monotonically, with no gaps. A side benefit of this is that the first ACK frame will have a small encoding for largest_acknowledged (1 octet rather than 8 in most cases). Packet numbers are never encoded directly onto the wire, they are XORed with a masking value. This value will change for different packet protection keys, and for different connection IDs. Client and server will use different values so that gaps are hard to detect. Thus, we will have a third key derivation: key = QHKDF-Expand(S, "key", key_length) iv = QHKDF-Expand(S, "iv", iv_length) pnmask = QHKDF-Expand(S, "pnmask", 4) To make this work seamlessly, I'm proposing a tweak to QHKDF-Expand that includes the connection ID. For that, the "Context" field that we currently do not use seems like a good choice. This will mean changes to the other uses of QHKDF-Expand: * the handshake secret can be changed to be a fixed rather than a derived value, so that we don't need to use the function (connection ID will be added during expansion into the separate keys) * during a key update, a zero-length or fixed connection ID will need to be used so that there is no confusion about which connection ID was in use at the time the update was made (editorially, I'm not certain how to manage this one, I might just go back to using HKDF-Expand-Label directly for that) Finally, we need to be very clear that even if the connection ID is omitted, those packets still use the implied connection ID in key derivation. We will probably want to recommend that endpoints include a connection ID if they intend to support NEW_CONNECTION_ID or any of the related functions, at least around the time when a connection ID change is in place or the recipient of their packets could have difficulty picking the right keys. This is already a problem of course, but this change would make it worse. -- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/quicwg/base-drafts/issues/1048
- [quicwg/base-drafts] Packet number rework (#1048) Martin Thomson
- Re: [quicwg/base-drafts] Packet number rework (#1… hardie
- Re: [quicwg/base-drafts] Packet number rework (#1… Martin Thomson
- Re: [quicwg/base-drafts] Packet number rework (#1… hardie
- Re: [quicwg/base-drafts] Packet number rework (#1… Martin Thomson
- Re: [quicwg/base-drafts] Packet number rework (#1… Martin Thomson