Re: [quicwg/base-drafts] First pass at 7, 14, and 30-bit varint packet numbers (#1334)

Martin Thomson <notifications@github.com> Fri, 04 May 2018 02:02 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 79A51127275 for <quic-issues@ietfa.amsl.com>; Thu, 3 May 2018 19:02:11 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -3.01
X-Spam-Level:
X-Spam-Status: No, score=-3.01 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, MAILING_LIST_MULTI=-1, SPF_PASS=-0.001, T_DKIMWL_WL_HIGH=-0.01] 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 BePUHlyV52xE for <quic-issues@ietfa.amsl.com>; Thu, 3 May 2018 19:02:08 -0700 (PDT)
Received: from out-9.smtp.github.com (out-9.smtp.github.com [192.30.254.192]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id C3757126DCA for <quic-issues@ietf.org>; Thu, 3 May 2018 19:02:08 -0700 (PDT)
Date: Thu, 03 May 2018 19:02:08 -0700
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=github.com; s=pf2014; t=1525399328; bh=mh41IXf8PNNzda9OkDILrAu9/feN4IbMqmHKzdzqmb8=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:List-ID: List-Archive:List-Post:List-Unsubscribe:From; b=m9VkiHKo+VSsFzcWDaucbhH6z2nqqtbOwdjimyzK8DRqo7vEli+cLof0StXVhr9rz NWm9IyD+qOJJms0eLFzlk40IRiKl0aEucRJrD3F+dPbiljzwJkht2pIEZYkU5LCFNx eCHjHgvTeerY/sZ6+dZmhJ7wLPA0/Xh8jEaxmf3g=
From: Martin Thomson <notifications@github.com>
Reply-To: quicwg/base-drafts <reply+0166e4ab1b10d6110591779795b2f72a0e2c39afb618decc92cf000000011703812092a169ce13113a51@reply.github.com>
To: quicwg/base-drafts <base-drafts@noreply.github.com>
Cc: Subscribed <subscribed@noreply.github.com>
Message-ID: <quicwg/base-drafts/pull/1334/review/117479433@github.com>
In-Reply-To: <quicwg/base-drafts/pull/1334@github.com>
References: <quicwg/base-drafts/pull/1334@github.com>
Subject: Re: [quicwg/base-drafts] First pass at 7, 14, and 30-bit varint packet numbers (#1334)
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="--==_mimepart_5aebbf2026cd4_8bf3f80646d2f8030515"; 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/AE3AkZljBhNbDD5h8H76HZk5AqU>
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: Fri, 04 May 2018 02:02:11 -0000

martinthomson commented on this pull request.

Thanks for writing this up Brian.  90% of the way there already.

> @@ -960,6 +960,13 @@ To ensure that this process does not sample the packet number, packet number
 protection algorithms MUST NOT sample more ciphertext than the minimum
 expansion of the corresponding AEAD.
 
+Packet number protection is applied to the packet number encoded as described
+in Section 4.8 of {{QUIC-TRANSPORT}}. Since the length of the packet number is
+stored in the encoded packet number, it is necessary to decrypt the maximum
+length (4 octets) when removing packet number protection. The final 2 or 3

It isn't *strictly* necessary to decrypt 4 octets: you can decrypt one octet at a time.

One thing that concerns me here is that you are recommending a strategy that includes decrypting the IV; I don't know how to exploit that and it seems entirely possible that it can't be, but I would avoid recommending this implementation strategy (even if I have in the past; I'm not sure that I want that in an RFC).

Instead, I would observe that the packet number might need to progressively decrypted.

> @@ -439,12 +439,8 @@ Google QUIC Demultipexing Bit:
 
 Reserved:
 
-: The sixth bit (0x4) of octet 0 is reserved for experimentation.
-
-Short Packet Type:
-
-: The remaining 2 bits of octet 0 include one of 4 packet types.
-  {{short-packet-types}} lists the types that are defined for short packets.
+: The sixth, seventh, and eighth bits (0x7) of octet 0 are reserved for
+experimentation.

I think that this is a fine thing.  Removing type is good; reserving is good.

I would more simply state this as "these bits are reserved".  We might ultimately decide that the spin bit experiment is an experiment no longer.  At that point we might assign them to the spin bit(s) or find an entirely different use for those bits.

> @@ -786,15 +775,30 @@ reaches 2^62 - 1, the sender MUST close the connection without sending a
 CONNECTION_CLOSE frame or any further packets; a server MAY send a Stateless
 Reset ({{stateless-reset}}) in response to further packets that it receives.
 
-For the packet header, the number of bits required to represent the packet
-number are reduced by including only the least significant bits of the packet
-number.
-
-The encoded packet number is protected as described in {{QUIC-TLS}}. Protection
-of the packet number is removed prior to recovering the full packet number. The
-full packet number is reconstructed at the receiver based on the largest packet
-number received on a successfully authenticated packet. Recovering the full
-packet number is necessary to successfully remove packet protection.
+In the QUIC long and short packet headers, the number of bits required to
+represent the packet number are reduced by including only the least
+significant bits of the packet number.
+
+In the long packet header, the least significant 32 bits are used. In the

"In the long packet header, the least significant 32 bits of the packet are encoded into the Packet Number field."

> -For the packet header, the number of bits required to represent the packet
-number are reduced by including only the least significant bits of the packet
-number.
-
-The encoded packet number is protected as described in {{QUIC-TLS}}. Protection
-of the packet number is removed prior to recovering the full packet number. The
-full packet number is reconstructed at the receiver based on the largest packet
-number received on a successfully authenticated packet. Recovering the full
-packet number is necessary to successfully remove packet protection.
+In the QUIC long and short packet headers, the number of bits required to
+represent the packet number are reduced by including only the least
+significant bits of the packet number.
+
+In the long packet header, the least significant 32 bits are used. In the
+short packet header, the number of significant bits are encoded in the most
+significant two bits of the first octet of the encoded packet number:

`<p>`
"In the short packet header, a variable number of significant bits are encoded.  One or two of the most significant bits of the first octet determine how many bits of the packet number are provided, as shown in {{pn-encodings}}."

> -number received on a successfully authenticated packet. Recovering the full
-packet number is necessary to successfully remove packet protection.
+In the QUIC long and short packet headers, the number of bits required to
+represent the packet number are reduced by including only the least
+significant bits of the packet number.
+
+In the long packet header, the least significant 32 bits are used. In the
+short packet header, the number of significant bits are encoded in the most
+significant two bits of the first octet of the encoded packet number:
+
+| First octet pattern | Encoded Length | Bits Present |
+|:--------------------|:---------------|:-------------|
+| 0b0xxxxxxx          | 1 octet        | 7            |
+| 0b10xxxxxx          | 2              | 14           |
+| 0b11xxxxxx          | 4              | 30           |
+

{: #pn-encodings title="Short Header Packet Number Encodings"}

> +short packet header, the number of significant bits are encoded in the most
+significant two bits of the first octet of the encoded packet number:
+
+| First octet pattern | Encoded Length | Bits Present |
+|:--------------------|:---------------|:-------------|
+| 0b0xxxxxxx          | 1 octet        | 7            |
+| 0b10xxxxxx          | 2              | 14           |
+| 0b11xxxxxx          | 4              | 30           |
+
+Note that these encodings are similar to those in {{integer-encoding}}, but
+use different values.
+
+The encoded packet number is protected as described in Section 5.6 {{QUIC-TLS}}.
+Protection of the packet number is removed prior to recovering the full packet
+number.The full packet number is reconstructed at the receiver based on the
+value of the most significant two bits in the first octet (to determine the

I like Ian's suggestion too.

-- 
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/pull/1334#pullrequestreview-117479433