QUIC                                                          M. Thomson
Internet-Draft                                                   Mozilla
Intended status: Informational                         December 07, 2017
Expires: June 10, 2018


                  More Apparent Randomization for QUIC
                      draft-thomson-quic-grease-00

Abstract

   Options for creating more apparent randomization in the QUIC header
   are discussed.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at https://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on June 10, 2018.

Copyright Notice

   Copyright (c) 2017 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (https://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect
   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.






Thomson                   Expires June 10, 2018                 [Page 1]


Internet-Draft    More Apparent Randomization for QUIC     December 2017


1.  More Grease for QUIC

   The QUIC invariants draft [INVARIANTS] commits QUIC [QUIC] to a small
   set of traits that are intended to remain stable across all version
   of QUIC.  However, there are some protocol traits in QUIC version 1
   [QUIC] that we do that remain readable.

   This note explores a few options for protecting QUIC against casual
   inspection by entities other than the endpoints participating in the
   connection.  These techniques are aimed espectially at making any
   form of inspection considerably more difficult if the QUIC version of
   a packet is unknown.

   The intent of applying this protection is to encourage the use of
   protocol fields that are intentionally designed to be readable to
   non-participating entities (see also [SIGNALS]).  For those fields
   that can be recovered without access to negotiated cryptographic
   keys, the intent is to create an incentive to implement version-
   specific handling rather than to assume that certain properties don't
   change between versions.

2.  Overall Design

   Protocol fields that deploy with predictable values or a limited
   range of values can ossify.  Ossification is the effect whereby the
   use of values in a way that is contradictory to established patterns
   triggers adverse reactions from the network.  Usually, this is a
   result of middleboxes having developed assumptions about how
   protocols operate.

   The idea that ossification actively prevents the deployment of
   modified protocols remains a little contentious in the community.  On
   the other hand, we have plenty of evidence from TLS deployment to
   suggest that this happens.  Appendix D.4 of [TLS13] describes an
   example of ossification and describes the measures that were
   necessary to counteract it.

   If it is possible to provide a measure of protection against protocol
   ossification without inordinate expense, then it is the view of at
   least this author that doing so would have some potential value.
   Provided the costs are indeed low enough

   This describes changes to some of the version-specific fields in QUIC
   version 1 [QUIC].  Any invariant [INVARIANTS] would not be affected
   by this change.

   The simplest defense against ossification is to apply a reversible
   permutation to these values.  A pseudo-random function (PRP) is the



Thomson                   Expires June 10, 2018                 [Page 2]


Internet-Draft    More Apparent Randomization for QUIC     December 2017


   obvious choice.  If the key of that function is only known to
   endpoints, then the values will be readily accessible to endpoints.

3.  Keying

   There are two different contexts in which we might consider applying
   this sort of protection, and the keys we can use differ.

   QUIC already has the tools necessary to derive keys.  Handshake
   packets use a key that is derived from a combination of a version-
   specific key (or salt) and the connection ID.  A similar approach
   could be used here.

   For packets that have packet protection, there are many options
   available.  The secret used for generating the packet number gap
   (packet_number_secret) is a candidate.  It might however be better to
   derive a key from the packet protection secrets (client_pp_secret_<N>
   or server_pp_secret_<N>).

4.  Pseudo-Random Permutations

   There are many PRP functions that could apply to this case.  Most
   come from cryptographic contexts and therefore assume inputs and
   state spaces that exceed the size of the fields we're interested in.
   This section presents three options of varying complexity.  It's
   likely that there are many more.

   It is critical to note that these functions are not intended to
   provide any real confidentiality - you need strong keys and ciphers
   for that.  None of the functions include any integrity protection
   either - QUIC already provides integrity protection for its headers.

   These techniques might be used to enable unlinkability in some
   circumstances.

4.1.  Remainder

   The first is a simple masking using a remainder remainder operation.
   This assumes that there are a limited number of valid values for a
   given field.  Valid values are either constrained to or mapped to a
   contiguous range starting from 0.  Then, select a modulus |m| that is
   greater than the largest value and encryption and decryption are
   simple:

   m = max(x) + k
   E(x) = x + random() * m
   D(x) = x % m




Thomson                   Expires June 10, 2018                 [Page 3]


Internet-Draft    More Apparent Randomization for QUIC     December 2017


   The drawback here is that you don't get a uniform distribution.  If
   we use this for the long header and an Initial packet is type 0, then
   it will never pick anything that isn't a multiple of |m|.  Also, the
   number of values that |k| can assume is small.  The benefit is that
   this is trivial to implement.  Also, an implementation that chooses
   not to randomize still produces values that can be understood.

4.2.  XOR

   This PRP uses a simple exclusive OR:

   D(x) = E(x) = x ^ k

   This method is the easiest to implement.  The drawback here is
   that |k| is stable and is therefore trivially recovered when multiple
   messages use the same key.

4.3.  FFX Lite

   FFX [1] is a mode of format-preserving encryption that encrypts
   values from a space of essentially arbitrary size.  FFX would be
   ideal apart from one significant drawback: FFX is extremely
   computationally expensive for smaller values, as it uses more rounds
   for short values to ensure that it continues to preserve its security
   margins.

   On the other hand, we're not looking for any actual security, so we
   wouldn't need to have the obscene number of rounds that FFX depends
   on for small values (their recommended parameters don't include
   values for 5 bit values, ).

   If you make a few choices (cryptographers rarely do this for you, and
   FFX has the usual cornucopia of tuning parameters), you can produce a
   set of parameters that makes FFX quite simple and performant.  This
   is essentially two rounds of FFX with radix=2, P={}, addition=0,
   method=2, split(n)=floor(n/2), rnds(n)=2, and F(x)=AES(k, x).















Thomson                   Expires June 10, 2018                 [Page 4]


Internet-Draft    More Apparent Randomization for QUIC     December 2017


   E(x):
      split = num_bits(x) / 2
      a = x >> split
      b = s & (1 << split - 1)
      tmp = a ^ AES(k, b)
      result = (tmp << split) | (b ^ AES(k, tmp))

   D(x):
      split = num_bits(x) / 2
      a = x >> split
      b = s & (1 << split - 1)
      tmp = b ^ AES(k, a)
      result = ((a ^ AES(k, tmp)) << split) | tmp

4.4.  Predictability

   The XOR and FFX-based methods exhibit properties similar to
   encryption with AES-ECB mode.  That is, for a given key, the same
   plaintext will always encrypt to the same ciphertext.

   That means that if input values do not vary over time, it will be
   possible to infer underlying values easily.  The goal is to ensure
   that the protected values change for each new connection, for which a
   changing key is sufficient.  As stated, the goal is not to provide
   confidentiality against a determined attacker, only to defend against
   a lazy observer.

5.  Scrambling QUIC Packet Headers

   There are two fields in the QUIC header that merit some degree of
   scrambling: the packet type and the packet number.  The other fields
   of QUIC packets: invariant bits, connection ID, version, and the
   message payload are either:

   o  invariant and thus important to leave unmodified,

   o  explicitly designed for consumption by middleboxes and thus
      important to leave unmodified, or

   o  already protected by other means, such as an AEAD [AEAD].

   It's possible that this technique could be applied to invariant
   fields, but that is likely to have less immediate utility.  Worse, it
   would commit every future version of the protocol to employ the same
   technique.  Limiting this to version-specific fields allows the
   technique to improve with successive protocol versions.





Thomson                   Expires June 10, 2018                 [Page 5]


Internet-Draft    More Apparent Randomization for QUIC     December 2017


5.1.  Scrambling Packet Types

   We have two values here, a 7-bit value that is used for the long
   header, and a 5-bit value that is used for the short header.  It is
   possible that the KEY_PHASE bit in the short header could also be
   covered.

   Any of the described methods could work to obscure these fields.  The
   remainder method would however degrade as new packet types are
   defined, though the current set of types is very small.

   The cost of scrambling for packet types is that the entire space of
   values is then used, which could make multiplexing with realtime
   protocols more challenging.  However, it is possible that those
   protocols could use their out-of-band negotiation to influence the
   scrambling.  For instance, they might mandate the use of a connection
   ID from a set of values that produce values that are compatible with
   the multiplexing scheme in use (determining such a value would be
   easy).

5.2.  Scrambling Packet Numbers

   Scrambling packet numbers is relatively straightforward to apply.
   The remainder method doesn't work here, though the XOR and FFX-based
   techniques both work well.

   The cost of scrambling the packet number is that it would make it
   more difficult to use packet numbers to support the use of other
   features, like the heuristics necessary to use the spin bit in the
   presence of loss and reordering.

   If a variable-length integer is used to represent a packet number and
   FFX is chosen, the length would need to be separately scrambled.
   That suggests that retaining the packet number length in the type
   field is desirable if FFX is chosen.

   For a packet number, the XOR-based technique would not provide any
   appreciable barrier to recovery of the underlying value.

5.2.1.  Taking Packet Number Scrambling Further

   If packet numbers are scrambled, it is possible to use that
   scrambling instead of both initial packet number randomization and
   the packet number gap.

   For the initial packet number, scrambling would be sufficient to
   ensure that the packet number field could contain all possible
   values.  That removes the need to reserve 1024 values to avoid



Thomson                   Expires June 10, 2018                 [Page 6]


Internet-Draft    More Apparent Randomization for QUIC     December 2017


   overflow of the 32-bit space before a peer receives the initial
   value.  Packet numbers would always start at 0, but the wire encoding
   would be encoded.

   For the packet number gap, if the key calculation takes connection ID
   as input, the need for a packet number gap is eliminated.  Switching
   to a new connection ID would cause packet numbers to become
   unlinkable with previous ones.  Deriving the per-connection-ID key
   with HKDF would ensure that even with a simple XOR, the two keys
   can't be correlated.

6.  Security Considerations

   This section exists so that I can submit a draft without being
   badgered about this.  There are almost certainly security concerns
   here, but I don't care.  This draft is a throwaway.

7.  References

7.1.  Informative References

   [AEAD]     McGrew, D., "An Interface and Algorithms for Authenticated
              Encryption", RFC 5116, DOI 10.17487/RFC5116, January 2008,
              <https://www.rfc-editor.org/info/rfc5116>.

   [INVARIANTS]
              Thomson, M., "Version-Independent Properties of QUIC",
              draft-thomson-quic-invariants-00 (work in progress),
              November 2017.

   [QUIC]     Iyengar, J. and M. Thomson, "QUIC: A UDP-Based Multiplexed
              and Secure Transport", draft-ietf-quic-transport-08 (work
              in progress), December 2017.

   [SIGNALS]  Hardie, T., "Path signals", draft-hardie-path-signals-02
              (work in progress), November 2017.

   [TLS13]    Rescorla, E., "The Transport Layer Security (TLS) Protocol
              Version 1.3", draft-ietf-tls-tls13-22 (work in progress),
              November 2017.

7.2.  URIs

   [1] https://csrc.nist.gov/CSRC/media/Projects/Block-Cipher-
       Techniques/documents/BCM/proposed-modes/ffx/ffx-spec.pdf






Thomson                   Expires June 10, 2018                 [Page 7]


Internet-Draft    More Apparent Randomization for QUIC     December 2017


Author's Address

   Martin Thomson
   Mozilla

   Email: martin.thomson@gmail.com













































Thomson                   Expires June 10, 2018                 [Page 8]