<?xml version='1.0'?>
<?rfc toc="yes" comments="yes"?>
<!DOCTYPE rfc SYSTEM 'rfc2629.dtd' [
<!ENTITY rfc2119 PUBLIC '' 'http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml'> <!--Requirements-->
<!ENTITY rfc4086 PUBLIC '' 'http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4086.xml'> <!--Randomness-->
<!ENTITY rfc5905 PUBLIC '' 'http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5905.xml'> <!--NTP-->
<!ENTITY rfc6528 PUBLIC '' 'http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6528.xml'> <!--SYN Randomization-->
<!ENTITY rfc6973 PUBLIC '' 'http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6973.xml'> <!--Privacy Considerations-->

]>
<rfc docName="draft-dfranke-ntp-data-minimization-00"
     category="std"
     updates="5905"
     xml:lang="en">
  <front>
    <title>
      NTP Client Data Minimization
    </title>
    <author fullname="Daniel Fox Franke" initials="D" surname="Franke">
      <organization abbrev="Akamai">Akamai Technologies, Inc.</organization>
      <address>
        <postal>
          <street>150 Broadway</street>
          <city>Cambridge</city>
          <region>MA</region>
          <code>02142</code>
          <country>United States</country>
        </postal>
        <email>dafranke@akamai.com</email>
        <uri>https://www.dfranke.us</uri>
      </address>
    </author>
    <date/>
    <abstract>
      <t>
        This memo proposes backward-compatible updates to the Network
        Time Protocol to strip unnecessary identifying information
        from client requests and to improve resilience against blind
        spoofing of unauthenticated server responses.
      </t>
    </abstract>
  </front>
  <middle>
    <section title="Introduction">
      <t>
        Network Time Protocol packets, as specified by <xref
        target="RFC5905">RFC 5905</xref>, carry a great deal of
        information about the state of the NTP daemon which
        transmitted them. In the case of mode 4 packets (responses
        sent from server to client), as well as in broadcast and
        symmetric modes, most of this information is essential for
        accurate and reliable time synchronizaton. However, in mode 3
        packets (requests sent from client to server), these fields
        serve no purpose. Server implementations never need to inspect
        them, and they can achieve nothing by doing so. Populating
        these fields with accurate information is harmful to privacy
        because it allows a passive observer to fingerprint clients
        and track them as they move across networks.
      </t>
      <t>
        This memo updates RFC 5905 to redact unnecessary data from
        mode 3 packets. It calls for no changes on the server side,
        and clients which implement these updates will remain fully
        interoperable with existing servers.
      </t>
    </section>
    <section title="Requirements Language">
      <t>
        The key words &quot;MUST&quot;, &quot;MUST NOT&quot;,
        &quot;REQUIRED&quot;, &quot;SHALL&quot;, &quot;SHALL
        NOT&quot;, &quot;SHOULD&quot;, &quot;SHOULD NOT&quot;,
        &quot;RECOMMENDED&quot;, &quot;MAY&quot;, and
        &quot;OPTIONAL&quot; in this document are to be interpreted as
        described in <xref target="RFC2119">RFC 2119</xref>.
      </t>
    </section>
    <section title="Client Packet Format">
      <t>
        In every client-mode packet sent by a <xref
        target="RFC5905">Network Time Protocol</xref> implementation:
        <list>
          <t>
            The first octet, which contains the leap indicator,
            version number, and mode fields, SHALL be set to 0x23 (LI
            = 0, VN = 4, Mode = 3).
          </t>
          <t>
            The Transmit Timestamp field SHALL be set uniformly at
            random, generated by a mechanism suitable for
            cryptographic purposes. <xref target="RFC4086"/> provides
            guidance on the generation of random values.
          </t>
          <t>
            All other header fields, specifically the Stratum, Poll,
            Precision, Root Delay, Root Dispersion, Reference ID,
            Reference Timestamp, Origin Timestamp, and Receive
            Timestamp, SHALL be set to zero.
          </t>
        </list>
      </t>
    </section>
    <section title="Security and Privacy Considerations">
      <section title="Data Minimization">
        <t>
          Zeroing out unused fields in client requests prevents
          disclosure of information that can be used for <xref
          target="RFC6973">fingerprinting</xref>.
        </t>
        <t>
          While populating any of these fields with authentic data
          reveals at least some identifying information about the
          client, the Origin Timestamp and Receive Timestamp fields
          constitute a particularly severe information leak. RFC 5905
          calls for clients to copy the transmit timestamp and
          destination timestamp of the server's most recent response
          into the origin timestamp and receive timestamp
          (respectively) of their next request to that
          server. Therefore, when a client moves between networks, a
          passive observer of both network paths can determine with
          high confidence that the old and new IP addresses belong to
          the same system by noticing that the transmit timestamp of a
          response sent to the old IP matches the origin timestamp of
          a request sent from the new one.
        </t>
      </section>
      <section title="Transmit Timestamp Randomization">
        <t>
          While this memo calls for most fields in client packets to
          be set to zero, the transmit timestamp is randomized. This
          decision is motivated by security as well as privacy.
        </t>
        <t>
          NTP servers copy the transmit timestamp from the client's request
          into the origin timestamp of the response; this memo calls for
          no change in this behavior. Clients discard any response whose
          origin timestamp does not match the transmit timestamp of any
          request currently in flight.
        </t>
        <t>
          In the absence of cryptographic authentication, verification
          of origin timestamps is clients' primary defense against
          blind spoofing of NTP responses. It is therefore important
          that clients' transmit timestamps be unpredictable. Their
          role in this regard is closely analagous to that of TCP
          Initial Sequence Numbers <xref target="RFC6528"/>.
        </t>
        <t>
          The traditional behavior of the NTP reference implementation
          is to randomize only a few (typically 10–15 depending on the
          precision of the system clock) low-order bits of transmit
          timestamp, with all higher bits representing the system
          time, as measured just before the packet was sent. This is
          suboptimal, because with so few random bits, an adversary
          sending spoofed packets at high volume will have a good
          chance of correctly guessing a valid origin timestamp.
        </t>
      </section>
    </section>
    <section title="IANA Considerations">
      <t>
        [RFC EDITOR: DELETE PRIOR TO PUBLICATION]
      </t>
      <t>
        This memo introduces no new IANA considerations.
      </t>
    </section>
  </middle>
  <back>
    <references title="Normative References">
      &rfc2119;
      &rfc4086;
      &rfc5905;
    </references>
    <references title="Informative References">
      &rfc6528;
      &rfc6973;
    </references>
    <section title="Acknowledgements">
      <t>
        The author thanks Prof. Sharon Goldberg, Miroslav Lichvar, and
        Aanchal Malhotra for calling attention to the issues addressed
        in this memo.
      </t>
    </section>
  </back>
</rfc>
