<?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-->
<!ENTITY rfc2030 PUBLIC '' 'https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2030.xml'>

]>
<rfc docName="draft-ietf-ntp-data-minimization-03"
     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>
    <author fullname="Aanchal Malhotra" initials="A." surname="Malhotra">
      <organization>Boston University</organization>
      <address>
        <postal>
          <street>111 Cummington St</street>
          <city>Boston</city>
          <region>MA/</region>
          <code>02215</code>
          <country>United States</country>
        </postal>
        <email>aanchal4@bu.edu</email>
      </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 (NTP) 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 (mode 5) and
        symmetric peering modes (mode 1/2), most of this information is essential for
        accurate and reliable time synchronizaton. However, in mode 3
        packets (requests sent from client to server), most of 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 of clients
        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. This is a fully backwards-compatible
        proposal. 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, SHOULD be set to 0x23 (LI
            = 0, VN = 4, Mode = 3).
          </t>
          <t>
            The Transmit Timestamp field SHOULD 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>
            The Poll field SHOULD be set to either the actual polling interval as specified by RFC 5905 or zero.
          </t>
          <t>
            The Precision field SHOULD be set to 0x20.
          </t>
          <t>
            All other header fields, specifically the Stratum, Root
            Delay, Root Dispersion, Reference ID, Reference Timestamp,
            Origin Timestamp, and Receive Timestamp, SHOULD be set to
            zero.
          </t>
        </list>
      </t>
      <t>
	Servers MUST allow client packets to conform to the above
	recommendations. This requirement shall not be construed so as
	to prohibit servers from rejecting conforming packets for
	unrelated reasons, such as access control or rate limiting.
      </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>
        <t>
          Zeroing the poll field is made optional (MAY rather than
          SHOULD) so as not to preclude future development of schemes
          wherein the server uses information about the client's
          current poll interval in order to recommend adjustments back
          to the client.  Putting accurate information into this field
          has no significant impact on privacy since an observer can
          already obtain this information simply by observing the
          actual interval between requests.
        </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 SHOULD be 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>
    <section title="Implementation status - RFC EDITOR: REMOVE BEFORE PUBLICATION">
       <t>
           This section records the status of known implementations of the
           protocol defined by this specification at the time of posting of
           this Internet-Draft, and is based on a proposal described in
           RFC7942. The description of implementations in this
           section is intended to assist the IETF in its decision processes in
           progressing drafts to RFCs.  Please note that the listing of any
           individual implementation here does not imply endorsement by the
           IETF. Furthermore, no effort has been spent to verify the
           information presented here that was supplied by IETF contributors.
           This is not intended as, and must not be construed to be, a catalog
           of available implementations or their features. Readers are advised
           to note that other implementations may exist.
       </t>
       <t>
           As of today the following vendors have produced an implementation of
           the NTP Client Data Minimization recommendations described in this
           document.
           <list style="hanging">
               <t>
                   OpenNTPD
               </t>
           </list>
       </t>
   </section>
  </middle>
  <back>
    <references title="Normative References">
      &rfc2119;
      &rfc5905;
    </references>
    <references title="Informative References">
      &rfc4086;
      &rfc6528;
      &rfc6973;
      &rfc2030;
    </references>
    <section title="Acknowledgements">
      <t>
          The possibility of minimizing data in client packets was described
          in <xref target="RFC2030">RFC 2030 </xref>. The authors would like to acknowledge Alexander Guy for pioneering the idea of randomization of all bits of the transmit timestamp in the rdate program of the OpenBSD project as early as <eref target="https://github.com/openbsd/src/commit/1346900e6d0ac3aeb0e3f9eb60b94c66586978c6"> May 2004</eref>.
      </t>
      <t>
        The authors would also like to thank Prof. Sharon Goldberg and Miroslav
        Lichvar for encouraging standardisation of the approach described in
        this document.
      </t>
    </section>
  </back>
</rfc>
