| rfc8915xml2.original.xml | rfc8915.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="US-ASCII"?> | <?xml version='1.0' encoding='utf-8'?> | |||
| <!DOCTYPE rfc SYSTEM "rfc2629.dtd"> | ||||
| <?rfc toc="yes"?> | <!DOCTYPE rfc SYSTEM "rfc2629-xhtml.ent"> | |||
| <?rfc tocompact="yes"?> | <rfc | |||
| <?rfc tocdepth="3"?> | xmlns:xi="http://www.w3.org/2001/XInclude" | |||
| <?rfc tocindent="yes"?> | submissionType="IETF" | |||
| <?rfc symrefs="yes"?> | category="std" | |||
| <?rfc sortrefs="yes"?> | consensus="true" | |||
| <?rfc comments="yes"?> | docName="draft-ietf-ntp-using-nts-for-ntp-28" | |||
| <?rfc inline="yes"?> | number="8915" | |||
| <?rfc compact="yes"?> | ipr="trust200902" | |||
| <?rfc subcompact="no"?> | obsoletes="" | |||
| <rfc category="std" docName="draft-ietf-ntp-using-nts-for-ntp-28" | updates="" | |||
| ipr="trust200902" submissionType="IETF"> | xml:lang="en" | |||
| tocInclude="true" | ||||
| tocDepth="3" | ||||
| symRefs="true" | ||||
| sortRefs="true" | ||||
| version="3"> | ||||
| <!-- xml2rfc v2v3 conversion 2.43.0 --> | ||||
| <front> | <front> | |||
| <title abbrev="Network Time Security for NTP">Network Time Security for the Network Time | <title abbrev="Network Time Security for NTP">Network Time Security for the Network Time | |||
| Protocol</title> | Protocol</title> | |||
| <seriesInfo name="RFC" value="8915"/> | ||||
| <author fullname="Daniel Fox Franke" initials="D." surname="Franke"> | <author fullname="Daniel Fox Franke" initials="D." surname="Franke"> | |||
| <organization abbrev="Akamai">Akamai Technologies</organization> | <organization abbrev="Akamai">Akamai Technologies</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>145 Broadway</street> | <street>145 Broadway</street> | |||
| <city>Cambridge</city> | <city>Cambridge</city> | |||
| <region>MA</region> | <region>MA</region> | |||
| <code>02142</code> | <code>02142</code> | |||
| <country>United States</country> | <country>United States of America</country> | |||
| </postal> | </postal> | |||
| <email>dafranke@akamai.com</email> | <email>dafranke@akamai.com</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Dieter Sibold" initials="D." surname="Sibold"> | <author fullname="Dieter Sibold" initials="D." surname="Sibold"> | |||
| <organization abbrev="PTB">Physikalisch-Technische | <organization abbrev="PTB">Physikalisch-Technische | |||
| Bundesanstalt</organization> | Bundesanstalt</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>Bundesallee 100</street> | <street>Bundesallee 100</street> | |||
| <city>Braunschweig</city> | <city>Braunschweig</city> | |||
| <code>D-38116</code> | <code>D-38116</code> | |||
| <region/> | ||||
| <country>Germany</country> | <country>Germany</country> | |||
| </postal> | </postal> | |||
| <phone>+49-(0)531-592-8462</phone> | ||||
| <phone>+49-(0)531-592-8420</phone> | ||||
| <facsimile>+49-531-592-698420</facsimile> | ||||
| <email>dieter.sibold@ptb.de</email> | <email>dieter.sibold@ptb.de</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Kristof Teichel" initials="K." surname="Teichel"> | <author fullname="Kristof Teichel" initials="K." surname="Teichel"> | |||
| <organization abbrev="PTB">Physikalisch-Technische | <organization abbrev="PTB">Physikalisch-Technische | |||
| Bundesanstalt</organization> | Bundesanstalt</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street>Bundesallee 100</street> | <street>Bundesallee 100</street> | |||
| <city>Braunschweig</city> | <city>Braunschweig</city> | |||
| <region/> | ||||
| <code>D-38116</code> | <code>D-38116</code> | |||
| <country>Germany</country> | <country>Germany</country> | |||
| </postal> | </postal> | |||
| <phone>+49-(0)531-592-4471</phone> | <phone>+49-(0)531-592-4471</phone> | |||
| <facsimile/> | ||||
| <email>kristof.teichel@ptb.de</email> | <email>kristof.teichel@ptb.de</email> | |||
| <uri/> | <uri/> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Marcus Dansarie" initials="M." surname="Dansarie"> | <author fullname="Marcus Dansarie" initials="M." surname="Dansarie"> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street /> | ||||
| <city /> | ||||
| <region /> | ||||
| <code /> | ||||
| <country>Sweden</country> | <country>Sweden</country> | |||
| </postal> | </postal> | |||
| <email>marcus@dansarie.se</email> | <email>marcus@dansarie.se</email> | |||
| <uri>https://orcid.org/0000-0001-9246-0263</uri> | <uri>https://orcid.org/0000-0001-9246-0263</uri> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <author fullname="Ragnar Sundblad" initials="R." surname="Sundblad"> | ||||
| <author fullname="Ragnar Sundblad" initials="R." surname="Sundblad"> | ||||
| <organization>Netnod</organization> | <organization>Netnod</organization> | |||
| <address> | <address> | |||
| <postal> | <postal> | |||
| <street /> | ||||
| <city /> | ||||
| <region /> | ||||
| <code /> | ||||
| <country>Sweden</country> | <country>Sweden</country> | |||
| </postal> | </postal> | |||
| <email>ragge@netnod.se</email> | <email>ragge@netnod.se</email> | |||
| </address> | </address> | |||
| </author> | </author> | |||
| <date month="September" year="2020"/> | ||||
| <date day="25" month="March" year="2020"/> | ||||
| <area>Internet Area</area> | <area>Internet Area</area> | |||
| <workgroup>NTP Working Group</workgroup> | <workgroup>NTP Working Group</workgroup> | |||
| <keyword>Integrity</keyword> | <keyword>Integrity</keyword> | |||
| <keyword>Authentication</keyword> | <keyword>Authentication</keyword> | |||
| <keyword>NTP</keyword> | <keyword>NTP</keyword> | |||
| <keyword>Security</keyword> | <keyword>Security</keyword> | |||
| <abstract> | <abstract> | |||
| <t> | <t> | |||
| This memo specifies Network Time Security (NTS), a mechanism | This memo specifies Network Time Security (NTS), a mechanism | |||
| for using Transport Layer Security (TLS) and Authenticated | for using Transport Layer Security (TLS) and Authenticated | |||
| Encryption with Associated Data (AEAD) to provide | Encryption with Associated Data (AEAD) to provide | |||
| cryptographic security for the client-server mode of the | cryptographic security for the client-server mode of the | |||
| Network Time Protocol (NTP). | Network Time Protocol (NTP). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| NTS is structured as a suite of two loosely coupled sub-protocols. | NTS is structured as a suite of two loosely coupled sub-protocols. | |||
| skipping to change at line 137 ¶ | skipping to change at line 103 ¶ | |||
| <abstract> | <abstract> | |||
| <t> | <t> | |||
| This memo specifies Network Time Security (NTS), a mechanism | This memo specifies Network Time Security (NTS), a mechanism | |||
| for using Transport Layer Security (TLS) and Authenticated | for using Transport Layer Security (TLS) and Authenticated | |||
| Encryption with Associated Data (AEAD) to provide | Encryption with Associated Data (AEAD) to provide | |||
| cryptographic security for the client-server mode of the | cryptographic security for the client-server mode of the | |||
| Network Time Protocol (NTP). | Network Time Protocol (NTP). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| NTS is structured as a suite of two loosely coupled sub-protocols. | NTS is structured as a suite of two loosely coupled sub-protocols. | |||
| The first (NTS-KE) handles initial authentication and key | The first (NTS Key Establishment (NTS-KE)) handles initial authenticatio | |||
| establishment over TLS. The second handles encryption and | n and key | |||
| establishment over TLS. The second (NTS Extension Fields for NTPv4) hand | ||||
| les encryption and | ||||
| authentication during NTP time synchronization via extension fields in t he | authentication during NTP time synchronization via extension fields in t he | |||
| NTP packets, and holds all required state only on the | NTP packets, and holds all required state only on the | |||
| client via opaque cookies. | client via opaque cookies. | |||
| </t> | </t> | |||
| </abstract> | </abstract> | |||
| </front> | </front> | |||
| <middle> | <middle> | |||
| <section title="Introduction"> | <section numbered="true" toc="default"> | |||
| <name>Introduction</name> | ||||
| <t> | <t> | |||
| This memo specifies Network Time Security (NTS), a | This memo specifies Network Time Security (NTS), a | |||
| cryptographic security mechanism for network time | cryptographic security mechanism for network time | |||
| synchronization. A complete specification is provided for | synchronization. A complete specification is provided for | |||
| application of NTS to the client-server mode of the | application of NTS to the client-server mode of the | |||
| <xref target="RFC5905">Network Time Protocol (NTP)</xref>. | <xref target="RFC5905" format="default">Network Time Protocol (NTP)</xre f>. | |||
| </t> | </t> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Objectives"> | <name>Objectives</name> | |||
| <t> | <t> | |||
| The objectives of NTS are as follows: | The objectives of NTS are as follows: | |||
| <list style="symbols"> | </t> | |||
| <t> | <ul spacing="normal"> | |||
| <li> | ||||
| Identity: Through the use of a X.509 public key infrastructure, | Identity: Through the use of a X.509 public key infrastructure, | |||
| implementations can cryptographically establish the identity of | implementations can cryptographically establish the identity of | |||
| the parties they are communicating with. | the parties they are communicating with. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Authentication: Implementations can cryptographically | Authentication: Implementations can cryptographically | |||
| verify that any time synchronization packets are | verify that any time synchronization packets are | |||
| authentic, i.e., that they were produced by an | authentic, i.e., that they were produced by an | |||
| identified party and have not been modified in transit. | identified party and have not been modified in transit. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Confidentiality: Although basic time synchronization | Confidentiality: Although basic time synchronization | |||
| data is considered non-confidential and sent in the | data is considered nonconfidential and sent in the | |||
| clear, NTS includes support for encrypting NTP extension | clear, NTS includes support for encrypting NTP extension | |||
| fields. | fields. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Replay prevention: Client implementations can detect when | Replay prevention: Client implementations can detect when | |||
| a received time synchronization packet is a replay of | a received time synchronization packet is a replay of | |||
| a previous packet. | a previous packet. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Request-response consistency: Client implementations can | Request-response consistency: Client implementations can | |||
| verify that a time synchronization packet received from | verify that a time synchronization packet received from | |||
| a server was sent in response to a particular request from | a server was sent in response to a particular request from | |||
| the client. | the client. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Unlinkability: For mobile clients, NTS will not leak any | Unlinkability: For mobile clients, NTS will not leak any | |||
| information additional to NTP which would permit a | information additional to NTP which would permit a | |||
| passive adversary to determine that two packets sent | passive adversary to determine that two packets sent | |||
| over different networks came from the same client. | over different networks came from the same client. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Non-amplification: Implementations (especially server | Non-amplification: Implementations (especially server | |||
| implementations) can avoid acting as distributed | implementations) can avoid acting as distributed | |||
| denial-of-service (DDoS) amplifiers by never responding to a | denial-of-service (DDoS) amplifiers by never responding to a | |||
| request with a packet larger than the request packet. | request with a packet larger than the request packet. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Scalability: Server implementations can serve large | Scalability: Server implementations can serve large | |||
| numbers of clients without having to retain any | numbers of clients without having to retain any | |||
| client-specific state. | client-specific state. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Performance: NTS must not significantly degrade the | Performance: NTS must not significantly degrade the | |||
| quality of the time transfer. The encryption and | quality of the time transfer. The encryption and | |||
| authentication used when actually transferring time | authentication used when actually transferring time | |||
| should be lightweight (see <xref target="RFC7384">RFC | should be lightweight (see Section | |||
| 7384, Section 5.7</xref>). | <xref target="RFC7384" section="5.7" sectionFormat="bare" format=" | |||
| </t> | default"/> | |||
| </list> | of <xref target="RFC7384" format="default">RFC 7384</xref>). | |||
| </t> | </li> | |||
| </ul> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <name>Terms and Abbreviations</name> | ||||
| <dl newline="false" spacing="normal" indent="11"> | ||||
| <dt>AEAD </dt> | ||||
| <dd> | ||||
| <xref target="RFC5116" format="default">Authenticated Encryption | ||||
| with Associated Data</xref></dd> | ||||
| <dt>ALPN </dt> | ||||
| <dd> | ||||
| <xref target="RFC7301" format="default">Application-Layer Protocol | ||||
| Negotiation</xref></dd> | ||||
| <dt>C2S </dt> | ||||
| <dd>Client-to-server</dd> | ||||
| <dt>DoS </dt> | ||||
| <dd>Denial-of-Service</dd> | ||||
| <dt>DDoS </dt> | ||||
| <dd>Distributed Denial-of-Service</dd> | ||||
| <dt>EF </dt> | ||||
| <dd> | ||||
| <xref target="RFC5905" format="default">Extension Field</xref></dd> | ||||
| <dt>HKDF </dt> | ||||
| <dd> | ||||
| <xref target="RFC5869" format="default">Hashed Message | ||||
| Authentication Code-based Key Derivation Function</xref></dd> | ||||
| <dt>KoD </dt> | ||||
| <dd> | ||||
| <xref target="RFC5905" format="default">Kiss-o'-Death</xref></dd> | ||||
| <dt>NTP </dt> | ||||
| <dd> | ||||
| <xref target="RFC5905" format="default">Network Time Protocol | ||||
| </xref></dd> | ||||
| <dt>NTS </dt> | ||||
| <dd>Network Time Security</dd> | ||||
| <dt>NTS NAK</dt> | ||||
| <dd>NTS negative-acknowledgment</dd> | ||||
| <dt>NTS-KE </dt> | ||||
| <dd>Network Time Security Key Establishment</dd> | ||||
| <dt>S2C </dt> | ||||
| <dd>Server-to-client</dd> | ||||
| <dt>TLS </dt> | ||||
| <dd> | ||||
| <xref target="RFC8446" format="default">Transport Layer | ||||
| Security</xref></dd> | ||||
| </dl> | ||||
| </section> | ||||
| <section title="Protocol Overview" anchor="sec-protocol-overview"> | <section anchor="sec-protocol-overview" numbered="true" toc="default"> | |||
| <name>Protocol Overview</name> | ||||
| <t> | <t> | |||
| The Network Time Protocol includes many different operating modes to | The Network Time Protocol includes many different operating modes to | |||
| support various network topologies (see <xref target="RFC5905">RFC 590 | support various network topologies (see Section | |||
| 5, | <xref target="RFC5905" section="3" sectionFormat="bare" format="defaul | |||
| Section 3</xref>). In addition to its best-known and | t"/> of | |||
| <xref target="RFC5905" format="default">RFC 5905</xref>). In addition | ||||
| to its best-known and | ||||
| most-widely-used client-server mode, it also includes modes for | most-widely-used client-server mode, it also includes modes for | |||
| synchronization between symmetric peers, a control mode for server | synchronization between symmetric peers, a control mode for server | |||
| monitoring and administration, and a broadcast mode. These various | monitoring and administration, and a broadcast mode. These various | |||
| modes have differing and partly contradictory requirements for | modes have differing and partly contradictory requirements for | |||
| security and performance. Symmetric and control modes demand mutual | security and performance. Symmetric and control modes demand mutual | |||
| authentication and mutual replay protection. Additionally, for certain | authentication and mutual replay protection. Additionally, for certain | |||
| message types control mode may require confidentiality as well as | message types, the control mode may require confidentiality as well as | |||
| authentication. Client-server mode places more stringent requirements | authentication. Client-server mode places more stringent requirements | |||
| on resource utilization than other modes, because servers may have | on resource utilization than other modes because servers may have a | |||
| vast number of clients and be unable to afford to maintain per-client | vast number of clients and be unable to afford to maintain per-client | |||
| state. However, client-server mode also has more relaxed security | state. However, client-server mode also has more relaxed security | |||
| needs, because only the client requires replay protection: it is | needs because only the client requires replay protection: it is | |||
| harmless for stateless servers to process replayed packets. The | harmless for stateless servers to process replayed packets. The | |||
| security demands of symmetric and control modes, on the other hand, | security demands of symmetric and control modes, on the other hand, | |||
| are in conflict with the resource-utilization demands of client-server | are in conflict with the resource-utilization demands of client-server | |||
| mode: any scheme which provides replay protection inherently involves | mode: any scheme that provides replay protection inherently involves | |||
| maintaining some state to keep track of what messages have already | maintaining some state to keep track of which messages have already | |||
| been seen. | been seen. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This memo specifies NTS exclusively for the client-server mode of NTP. | This memo specifies NTS exclusively for the client-server mode of NTP. | |||
| To this end, NTS is structured as a suite of two protocols: | To this end, NTS is structured as a suite of two protocols: | |||
| <list> | </t> | |||
| <t> | <ul empty="true" spacing="normal"> | |||
| The "NTS Extensions for NTPv4" define a collection of NTP | <li> | |||
| The "NTS Extension Fields for NTPv4" define a collection of NTP | ||||
| extension fields for cryptographically securing NTPv4 using | extension fields for cryptographically securing NTPv4 using | |||
| previously-established key material. They are suitable for | previously established key material. They are suitable for | |||
| securing client-server mode because the server can implement them | securing client-server mode because the server can implement them | |||
| without retaining per-client state. All state is kept by the | without retaining per-client state. All state is kept by the | |||
| client and provided to the server in the form of an encrypted | client and provided to the server in the form of an encrypted | |||
| cookie supplied with each request. On the other hand, the NTS | cookie supplied with each request. On the other hand, the NTS | |||
| Extension Fields are suitable *only* for client-server mode | Extension Fields are suitable <em>only</em> for client-server mode | |||
| because only the client, and not the server, is protected from | because only the client, and not the server, is protected from | |||
| replay. | replay. | |||
| </t> | </li> | |||
| <li> | ||||
| <t> | The "NTS Key Establishment" protocol (NTS-KE) is a | |||
| The "NTS Key Establishment" protocol (NTS-KE) is a | ||||
| mechanism for establishing key material for use with the NTS | mechanism for establishing key material for use with the NTS | |||
| Extension Fields for NTPv4. It uses TLS to establish keys, provide | Extension Fields for NTPv4. It uses TLS to establish keys, to prov | |||
| the client with an initial supply of cookies, and negotiate some | ide | |||
| the client with an initial supply of cookies, and to negotiate som | ||||
| e | ||||
| additional protocol options. After this, the TLS channel | additional protocol options. After this, the TLS channel | |||
| is closed with no per-client state remaining on the server side. | is closed with no per-client state remaining on the server side. | |||
| </t> | </li> | |||
| </list> | </ul> | |||
| </t> | ||||
| <t> | <t> | |||
| The typical protocol flow is as follows: The client connects to an | The typical protocol flow is as follows: The client connects to an | |||
| NTS-KE server on the NTS TCP port and the two parties perform a TLS | NTS-KE server on the NTS TCP port and the two parties perform a TLS | |||
| handshake. Via the TLS channel, the parties negotiate some additional | handshake. Via the TLS channel, the parties negotiate some additional | |||
| protocol parameters and the server sends the client a supply of | protocol parameters, and the server sends the client a supply of | |||
| cookies along with an address and port of an NTP server | cookies along with an address and port of an NTP server | |||
| for which the cookies are valid. The parties use | for which the cookies are valid. The parties use | |||
| <xref target="RFC5705">TLS key export</xref> to extract key material | <xref target="RFC5705" format="default">TLS key export</xref> to extra ct key material, | |||
| which will be used in the next phase of the protocol. This negotiation | which will be used in the next phase of the protocol. This negotiation | |||
| takes only a single round trip, after which the server closes the | takes only a single round trip, after which the server closes the | |||
| connection and discards all associated state. At this point the NTS-KE | connection and discards all associated state. At this point, the NTS-K E | |||
| phase of the protocol is complete. Ideally, the client never needs to | phase of the protocol is complete. Ideally, the client never needs to | |||
| connect to the NTS-KE server again. | connect to the NTS-KE server again. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Time synchronization proceeds with the indicated NTP server. | Time synchronization proceeds with the indicated NTP server. | |||
| The client sends the server an NTP client | The client sends the server an NTP client | |||
| packet which includes several extension fields. Included among these | packet that includes several extension fields. Included among these | |||
| fields are a cookie (previously provided by the key establishment serv er) | fields are a cookie (previously provided by the key establishment serv er) | |||
| and an authentication tag, computed using key material extracted from | and an authentication tag, computed using key material extracted from | |||
| the NTS-KE handshake. The NTP server uses the cookie to recover this | the NTS-KE handshake. The NTP server uses the cookie to recover this | |||
| key material and send back an authenticated response. The response | key material and send back an authenticated response. The response | |||
| includes a fresh, encrypted cookie which the client then sends back in | includes a fresh, encrypted cookie that the client then sends back in | |||
| the clear in a subsequent request. (This constant refreshing of | the clear in a subsequent request. This constant refreshing of cookies | |||
| cookies is necessary in order to achieve NTS's unlinkability goal.) | is necessary in order to achieve NTS's unlinkability goal. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| <xref target="protocol-overview"/> provides an overview of the | <xref target="protocol-overview" format="default"/> provides an overvi ew of the | |||
| high-level interaction between the client, the NTS-KE server, and the | high-level interaction between the client, the NTS-KE server, and the | |||
| NTP server. Note that the cookies' data format and the exchange of | NTP server. Note that the cookies' data format and the exchange of | |||
| secrets between NTS-KE and NTP servers are not part of this | secrets between NTS-KE and NTP servers are not part of this | |||
| specification and are implementation dependent. However, a suggested | specification and are implementation dependent. However, a suggested | |||
| format for NTS cookies is provided in | format for NTS cookies is provided in | |||
| <xref target="suggested-format-for-nts-cookies"/>. | <xref target="suggested-format-for-nts-cookies" format="default"/>. | |||
| </t> | </t> | |||
| <figure anchor="protocol-overview" | <figure anchor="protocol-overview"> | |||
| title="Overview of High-Level Interactions in NTS"> | <name>Overview of High-Level Interactions in NTS</name> | |||
| <artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| +--------------+ | +--------------+ | |||
| | | | | | | |||
| +-> | NTP Server 1 | | +-> | NTP Server 1 | | |||
| | | | | | | | | |||
| Shared cookie | +--------------+ | Shared cookie | +--------------+ | |||
| +---------------+ encryption parameters | +--------------+ | +---------------+ encryption parameters | +--------------+ | |||
| | | (Implementation dependent) | | | | | | (Implementation dependent) | | | | |||
| | NTS-KE Server | <------------------------------+-> | NTP Server 2 | | | NTS-KE Server | <------------------------------+-> | NTP Server 2 | | |||
| | | | | | | | | | | | | |||
| +---------------+ | +--------------+ | +---------------+ | +--------------+ | |||
| skipping to change at line 337 ¶ | skipping to change at line 348 ¶ | |||
| | ^ | | ^ | |||
| | | | | | | |||
| | +----------+ | | | +----------+ | | |||
| | | | | | | | | | | |||
| +-----------> | Client | <-------------------------+ | +-----------> | Client | <-------------------------+ | |||
| | | 2. Perform authenticated | | | 2. Perform authenticated | |||
| +----------+ time synchronization | +----------+ time synchronization | |||
| and generate new | and generate new | |||
| cookies using "NTS | cookies using "NTS | |||
| Extension Fields for | Extension Fields for | |||
| NTPv4".]]> | NTPv4". | |||
| </artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Requirements Language"> | <name>Requirements Language</name> | |||
| <t> | <t> | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bc | |||
| "OPTIONAL" in this document are to be interpreted as described in | p14>", | |||
| BCP 14 <xref target="RFC2119" /> <xref target="RFC8174" /> when, | "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDE | |||
| D</bcp14>", | ||||
| "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and | ||||
| "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as desc | ||||
| ribed in | ||||
| BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8 | ||||
| 174" format="default"/> when, | ||||
| and only when, they appear in all capitals, as shown here. | and only when, they appear in all capitals, as shown here. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="tls-profile" numbered="true" toc="default"> | ||||
| <section title="TLS profile for Network Time Security" anchor="tls-profile"> | <name>TLS Profile for Network Time Security</name> | |||
| <t> | <t> | |||
| Network Time Security makes use of TLS for NTS key establishment. | Network Time Security makes use of TLS for NTS key establishment. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Since the NTS protocol is new as of this publication, no | Since the NTS protocol is new as of this publication, no | |||
| backward-compatibility concerns exist to justify using | backward-compatibility concerns exist to justify using | |||
| obsolete, insecure, or otherwise broken TLS features or | obsolete, insecure, or otherwise broken TLS features or | |||
| versions. Implementations MUST conform with <xref | versions. Implementations <bcp14>MUST</bcp14> conform with | |||
| target="RFC7525">RFC 7525</xref> or with a later revision of BCP | <xref target="RFC7525" format="default">RFC 7525</xref> or | |||
| 195. | with a later revision of BCP 195. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Implementations MUST NOT negotiate TLS versions earlier than 1.3 | Implementations <bcp14>MUST NOT</bcp14> negotiate TLS versions earlier t | |||
| <xref target="RFC8446"/> and MAY refuse to negotiate any TLS version | han 1.3 | |||
| which has been superseded by a later supported version. | <xref target="RFC8446" format="default"/> and <bcp14>MAY</bcp14> refuse | |||
| to negotiate any TLS version | ||||
| that has been superseded by a later supported version. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| Use of the <xref target="RFC7301">Application-Layer Protocol | Use of the <xref target="RFC7301" format="default">Application-Layer Pro | |||
| Negotiation Extension</xref> is integral to NTS and support for | tocol | |||
| it is REQUIRED for interoperability. | Negotiation Extension</xref> is integral to NTS, and support for | |||
| it is <bcp14>REQUIRED</bcp14> for interoperability. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| Implementations MUST follow the rules in <xref target="RFC5280"> | Implementations <bcp14>MUST</bcp14> follow the rules in <xref target="RF | |||
| RFC 5280</xref> and <xref target="RFC6125">RFC 6125</xref> for the | C5280" format="default"> | |||
| RFC 5280</xref> and <xref target="RFC6125" format="default">RFC 6125</xr | ||||
| ef> for the | ||||
| representation and verification of the application's service identity. | representation and verification of the application's service identity. | |||
| When NTS-KE service discovery (out of scope for this document) | When NTS-KE service discovery (out of scope for this document) | |||
| produces one or more host names, use of the | produces one or more host names, use of the | |||
| <xref target="RFC6125">DNS-ID identifier type</xref> is RECOMMENDED; | <xref target="RFC6125" format="default">DNS-ID identifier type</xref> is <bcp14>RECOMMENDED</bcp14>; | |||
| specifications for service discovery mechanisms can provide additional | specifications for service discovery mechanisms can provide additional | |||
| guidance for certificate validation based on the results of | guidance for certificate validation based on the results of | |||
| discovery. <xref target="sec-cert-verification" /> of this memo | discovery. <xref target="sec-cert-verification" format="default"/> of th is memo | |||
| discusses particular considerations for certificate verification in | discusses particular considerations for certificate verification in | |||
| the context of NTS. | the context of NTS. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="nts-ke" numbered="true" toc="default"> | ||||
| <name>The NTS Key Establishment Protocol</name> | ||||
| <section title="The NTS Key Establishment Protocol" anchor="nts-ke"> | ||||
| <t> | <t> | |||
| The NTS key establishment protocol is conducted via TCP port [[TBD1]]. | The NTS key establishment protocol is conducted via TCP port 4460. | |||
| The two endpoints carry out a TLS handshake in conformance with | The two endpoints carry out a TLS handshake in conformance with | |||
| <xref target="tls-profile"/>, with the client offering (via an | <xref target="tls-profile" format="default"/>, with the client offering | |||
| <xref target="RFC7301">ALPN</xref> extension), and the server accepting, | (via an | |||
| an application-layer protocol of "ntske/1". Immediately | <xref target="RFC7301" format="default">ALPN extension</xref>), and the | |||
| following a successful handshake, the client SHALL send a single request | server accepting, | |||
| an application-layer protocol of "ntske/1". Immediately | ||||
| following a successful handshake, the client <bcp14>SHALL</bcp14> send a | ||||
| single request | ||||
| as Application Data encapsulated in the TLS-protected channel. Then, the | as Application Data encapsulated in the TLS-protected channel. Then, the | |||
| server SHALL send a single response. After sending their respective | server <bcp14>SHALL</bcp14> send a single response. After sending their | |||
| request and response, the client and server SHALL send TLS | respective | |||
| "close_notify" alerts in accordance with | request and response, the client and server <bcp14>SHALL</bcp14> send TL | |||
| <xref target="RFC8446">RFC 8446, Section 6.1</xref>. | S | |||
| "close_notify" alerts in accordance with Section | ||||
| <xref target="RFC8446" section="6.1" sectionFormat="bare" format="defaul | ||||
| t"/> of | ||||
| <xref target="RFC8446" format="default">RFC 8446</xref>. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| The client's request and the server's response each SHALL consist of a | The client's request and the server's response each <bcp14>SHALL</bcp14> consist of a | |||
| sequence of records formatted according to | sequence of records formatted according to | |||
| <xref target="ntske-record"/>. The request and a non-error response each | <xref target="ntske-record" format="default"/>. The request and a non-er | |||
| SHALL include exactly one NTS Next Protocol Negotiation record. The | ror response each | |||
| sequence SHALL be terminated by a "End of Message" record. The | <bcp14>SHALL</bcp14> include exactly one NTS Next Protocol Negotiation r | |||
| ecord. The | ||||
| sequence <bcp14>SHALL</bcp14> be terminated by a "End of Message" record | ||||
| . The | ||||
| requirement that all NTS-KE messages be terminated by an End of Message | requirement that all NTS-KE messages be terminated by an End of Message | |||
| record makes them self-delimiting. | record makes them self-delimiting. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Clients and servers MAY enforce length limits on requests and responses, | Clients and servers <bcp14>MAY</bcp14> enforce length limits on requests | |||
| however, servers MUST accept requests of at least 1024 octets and | and responses; | |||
| clients SHOULD accept responses of at least 65536 octets. | however, servers <bcp14>MUST</bcp14> accept requests of at least 1024 oc | |||
| tets, and | ||||
| clients <bcp14>SHOULD</bcp14> accept responses of at least 65536 octets. | ||||
| </t> | </t> | |||
| <figure anchor="ntske-record" title="NTS-KE Record Format"> | <figure anchor="ntske-record"> | |||
| <artwork><![CDATA[ | <name>NTS-KE Record Format</name> | |||
| <artwork name="" type="" align="left" alt=""><![CDATA[ | ||||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| |C| Record Type | Body Length | | |C| Record Type | Body Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| . . | . . | |||
| . Record Body . | . Record Body . | |||
| . . | . . | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]> | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| <t> | <t> | |||
| The fields of an NTS-KE record are defined as follows: | The fields of an NTS-KE record are defined as follows: | |||
| <list> | </t> | |||
| <t> | <dl newline="false" spacing="normal"> | |||
| C (Critical Bit): Determines the disposition of unrecognized Record | <dt>C (Critical Bit):</dt> <dd>Determines the disposition of unrecognize | |||
| d Record | ||||
| Types. Implementations which receive a record with an unrecognized | Types. Implementations which receive a record with an unrecognized | |||
| Record Type MUST ignore the record if the Critical Bit is 0 and MUST | Record Type <bcp14>MUST</bcp14> ignore the record if the Critical Bi | |||
| treat it as an error if the Critical Bit is 1 (see <xref target="nts | t is 0 and <bcp14>MUST</bcp14> | |||
| -error"/>). | treat it as an error if the Critical Bit is 1 (see <xref target="nts | |||
| </t> | -error" format="default"/>). | |||
| <t> | </dd> | |||
| Record Type Number: A 15-bit integer in network byte order. The | <dt>Record Type Number:</dt> <dd>A 15-bit integer in network byte order. | |||
| semantics of record types 0–7 are specified in this memo. | The | |||
| Additional type numbers SHALL be tracked through the IANA Network | semantics of Record Types 0-7 are specified in this memo. | |||
| Time Security Key Establishment Record Types registry. | Additional type numbers <bcp14>SHALL</bcp14> be tracked through the | |||
| </t> | IANA "Network | |||
| <t> | Time Security Key Establishment Record Types" registry. | |||
| Body Length: The length of the Record Body field, in octets, as a | </dd> | |||
| 16-bit integer in network byte order. Record bodies MAY have any | <dt>Body Length:</dt> <dd>The length of the Record Body field, in octets | |||
| , as a | ||||
| 16-bit integer in network byte order. Record bodies <bcp14>MAY</bcp1 | ||||
| 4> have any | ||||
| representable length and need not be aligned to a word boundary. | representable length and need not be aligned to a word boundary. | |||
| </t> | </dd> | |||
| <t> | <dt>Record Body:</dt> <dd>The syntax and semantics of this field <bcp14> | |||
| Record Body: The syntax and semantics of this field SHALL be | SHALL</bcp14> be | |||
| determined by the Record Type. | determined by the Record Type. | |||
| </t> | </dd> | |||
| </list> | </dl> | |||
| </t> | ||||
| <t> | <t> | |||
| For clarity regarding bit-endianness: the Critical Bit is the | For clarity regarding bit-endianness: the Critical Bit is the | |||
| most-significant bit of the first octet. In the C programming language, | most significant bit of the first octet. In the C programming language, | |||
| given a network buffer | given a network buffer | |||
| `unsigned char b[]` containing an NTS-KE record, the critical bit is | 'unsigned char b[]' containing an NTS-KE record, the critical bit is | |||
| `b[0] >> 7` while the record type is | 'b[0] >> 7' while the record type is | |||
| `((b[0] & 0x7f) << 8) + b[1]`. | '((b[0] & 0x7f) << 8) + b[1]'. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Note that, although the Type-Length-Body format of an NTS-KE record is | Note that, although the Type-Length-Body format of an NTS-KE record is | |||
| similar to that of an NTP extension field, the semantics of the length | similar to that of an NTP extension field, the semantics of the length | |||
| field differ. While the length subfield of an NTP extension field gives | field differ. While the length subfield of an NTP extension field gives | |||
| the length of the entire extension field including the type and length | the length of the entire extension field including the type and length | |||
| subfields, the length field of an NTS-KE record gives just the length | subfields, the length field of an NTS-KE record gives just the length | |||
| of the body. | of the body. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| <xref target="fig_NTSKeyEstablishment"/> provides a schematic overview o f the | <xref target="fig_NTSKeyEstablishment" format="default"/> provides a sch ematic overview of the | |||
| key establishment. It displays the protocol steps to be performed by the NTS | key establishment. It displays the protocol steps to be performed by the NTS | |||
| client and server and record types to be exchanged. | client and server and Record Types to be exchanged. | |||
| </t> | </t> | |||
| <figure anchor="fig_NTSKeyEstablishment" title="NTS Key Establishment Mess | <figure anchor="fig_NTSKeyEstablishment"> | |||
| ages"> | <name>NTS Key Establishment Messages</name> | |||
| <artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| +---------------------------------------+ | +---------------------------------------+ | |||
| | - Verify client request message. | | | - Verify client request message. | | |||
| | - Extract TLS key material. | | | - Extract TLS key material. | | |||
| | - Generate KE response message. | | | - Generate KE response message. | | |||
| | - Include Record Types: | | | - Include Record Types: | | |||
| | o NTS Next Protocol Negotiation | | | o NTS Next Protocol Negotiation | | |||
| | o AEAD Algorithm Negotiation | | | o AEAD Algorithm Negotiation | | |||
| | o <NTPv4 Server Negotiation> | | | o <NTPv4 Server Negotiation> | | |||
| | o <NTPv4 Port Negotiation> | | | o <NTPv4 Port Negotiation> | | |||
| | o New Cookie for NTPv4 | | | o New Cookie for NTPv4 | | |||
| skipping to change at line 516 ¶ | skipping to change at line 529 ¶ | |||
| | | | | | | |||
| | | | | | | |||
| +-----------+----------------------+ +------+-----------------+ | +-----------+----------------------+ +------+-----------------+ | |||
| |- Generate KE request message. | |- Verify server response| | |- Generate KE request message. | |- Verify server response| | |||
| | - Include Record Types: | | message. | | | - Include Record Types: | | message. | | |||
| | o NTS Next Protocol Negotiation | |- Extract cookie(s). | | | o NTS Next Protocol Negotiation | |- Extract cookie(s). | | |||
| | o AEAD Algorithm Negotiation | +------------------------+ | | o AEAD Algorithm Negotiation | +------------------------+ | |||
| | o <NTPv4 Server Negotiation> | | | o <NTPv4 Server Negotiation> | | |||
| | o <NTPv4 Port Negotiation> | | | o <NTPv4 Port Negotiation> | | |||
| | o End of Message | | | o End of Message | | |||
| +----------------------------------+]]> | +----------------------------------+ | |||
| </artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="NTS-KE Record Types"> | <name>NTS-KE Record Types</name> | |||
| <t>The following NTS-KE Record Types are defined:</t> | <t>The following NTS-KE Record Types are defined:</t> | |||
| <section anchor="end-of-message" numbered="true" toc="default"> | ||||
| <section title="End of Message" anchor="end-of-message"> | <name>End of Message</name> | |||
| <t> | <t> | |||
| The End of Message record has a Record Type number of 0 and a | The End of Message record has a Record Type number of 0 and a | |||
| zero-length body. It MUST occur exactly once as the final record of | zero-length body. It <bcp14>MUST</bcp14> occur exactly once as the f | |||
| every NTS-KE request and response. The Critical Bit MUST be set. | inal record of | |||
| every NTS-KE request and response. The Critical Bit <bcp14>MUST</bcp | ||||
| 14> be set. | ||||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="nts-next-protocol-negotiation" numbered="true" toc="def | ||||
| <section title="NTS Next Protocol Negotiation" | ault"> | |||
| anchor="nts-next-protocol-negotiation"> | <name>NTS Next Protocol Negotiation</name> | |||
| <t> | <t> | |||
| The NTS Next Protocol Negotiation record has a Record Type number | The NTS Next Protocol Negotiation record has a Record Type number | |||
| of 1. It MUST occur exactly once in every NTS-KE request and | of 1. It <bcp14>MUST</bcp14> occur exactly once in every NTS-KE requ est and | |||
| response. Its body consists of a sequence of 16-bit unsigned | response. Its body consists of a sequence of 16-bit unsigned | |||
| integers in network byte order. Each integer represents a Protocol | integers in network byte order. Each integer represents a Protocol | |||
| ID from the IANA Network Time Security Next Protocols registry. The | ID from the IANA "Network Time Security Next Protocols" registry | |||
| Critical Bit MUST be set. | (<xref target="iana-nts-next-protocols" format="default"/>). The | |||
| Critical Bit <bcp14>MUST</bcp14> be set. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| The Protocol IDs listed in the client's NTS Next Protocol | The Protocol IDs listed in the client's NTS Next Protocol | |||
| Negotiation record denote those protocols which the client wishes to | Negotiation record denote those protocols that the client wishes to | |||
| speak using the key material established through this NTS-KE | speak using the key material established through this NTS-KE | |||
| session. Protocol IDs listed in the NTS-KE server's response MUST | session. Protocol IDs listed in the NTS-KE server's response <bcp14> MUST</bcp14> | |||
| comprise a subset of those listed in the request and | comprise a subset of those listed in the request and | |||
| denote those protocols which the NTP server is willing and | denote those protocols that the NTP server is willing and | |||
| able to speak using the key material established through | able to speak using the key material established through | |||
| this NTS-KE session. The client MAY | this NTS-KE session. The client <bcp14>MAY</bcp14> | |||
| proceed with one or more of them. The request MUST list at least one | proceed with one or more of them. The request <bcp14>MUST</bcp14> li | |||
| protocol, but the response MAY be empty. | st at least one | |||
| protocol, but the response <bcp14>MAY</bcp14> be empty. | ||||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="nts-error" numbered="true" toc="default"> | ||||
| <section title="Error" anchor="nts-error"> | <name>Error</name> | |||
| <t> | <t> | |||
| The Error record has a Record Type number of 2. Its body is exactly | The Error record has a Record Type number of 2. Its body is exactly | |||
| two octets long, consisting of an unsigned 16-bit integer in network | two octets long, consisting of an unsigned 16-bit integer in network | |||
| byte order, denoting an error code. The Critical Bit MUST be set. | byte order, denoting an error code. The Critical Bit <bcp14>MUST</bc p14> be set. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Clients MUST NOT include Error records in their request. If clients | Clients <bcp14>MUST NOT</bcp14> include Error records in their reque | |||
| receive a server response which includes an Error record, they MUST | st. If clients | |||
| receive a server response that includes an Error record, they <bcp14 | ||||
| >MUST</bcp14> | ||||
| discard any key material negotiated during the initial TLS exchange | discard any key material negotiated during the initial TLS exchange | |||
| and MUST NOT proceed to the Next Protocol. Requirements for retry | and <bcp14>MUST NOT</bcp14> proceed to the Next Protocol. Requiremen | |||
| intervals are described in <xref target="nts-ke-retry" />. | ts for retry | |||
| intervals are described in <xref target="nts-ke-retry" format="defau | ||||
| lt"/>. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| The following error codes are defined: | The following error codes are defined: | |||
| <list> | </t> | |||
| <t> | <ul empty="true" spacing="normal"> | |||
| Error code 0 means "Unrecognized Critical Record". The | <li> | |||
| server MUST respond with this error code if the request included | Error code 0 means "Unrecognized Critical Record". The | |||
| a record which the server did not understand and which had its | server <bcp14>MUST</bcp14> respond with this error code if the r | |||
| Critical Bit set. The client SHOULD NOT retry its request | equest included | |||
| a record that the server did not understand and that had its | ||||
| Critical Bit set. The client <bcp14>SHOULD NOT</bcp14> retry its | ||||
| request | ||||
| without modification. | without modification. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Error code 1 means "Bad Request". The server MUST | Error code 1 means "Bad Request". The server <bcp14>MUST</bcp14> | |||
| respond with this error if the request is not complete | respond with this error if the request is not complete | |||
| and syntactically well-formed, or, upon the expiration | and syntactically well-formed, or, upon the expiration | |||
| of an implementation-defined timeout, it has not yet | of an implementation-defined timeout, it has not yet | |||
| received such a request. The client SHOULD NOT retry its | received such a request. The client <bcp14>SHOULD NOT</bcp14> re try its | |||
| request without modification. | request without modification. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Error code 2 means "Internal Server Error". The server | Error code 2 means "Internal Server Error". The server | |||
| MUST respond with this error if it is unable to respond properly | <bcp14>MUST</bcp14> respond with this error if it is unable to r | |||
| due to an internal condition. The client MAY retry its request. | espond properly | |||
| </t> | due to an internal condition. The client <bcp14>MAY</bcp14> retr | |||
| </list> | y its request. | |||
| </t> | </li> | |||
| </ul> | ||||
| </section> | </section> | |||
| <section anchor="nts-warning" numbered="true" toc="default"> | ||||
| <section title="Warning" anchor="nts-warning"> | <name>Warning</name> | |||
| <t> | <t> | |||
| The Warning record has a Record Type number of 3. Its body is | The Warning record has a Record Type number of 3. Its body is | |||
| exactly two octets long, consisting of an unsigned 16-bit integer in | exactly two octets long, consisting of an unsigned 16-bit integer in | |||
| network byte order, denoting a warning code. The Critical Bit MUST | network byte order, denoting a warning code. The Critical Bit <bcp14 >MUST</bcp14> | |||
| be set. | be set. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Clients MUST NOT include Warning records in their request. If | Clients <bcp14>MUST NOT</bcp14> include Warning records in their req | |||
| clients receive a server response which includes a Warning record, | uest. If | |||
| they MAY discard any negotiated key material and abort without | clients receive a server response that includes a Warning record, | |||
| proceeding to the Next Protocol. Unrecognized warning codes MUST be | they <bcp14>MAY</bcp14> discard any negotiated key material and abor | |||
| t without | ||||
| proceeding to the Next Protocol. Unrecognized warning codes <bcp14>M | ||||
| UST</bcp14> be | ||||
| treated as errors. | treated as errors. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This memo defines no warning codes. | This memo defines no warning codes. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="aead-algorithm-negotiation" numbered="true" toc="defaul | ||||
| <section title="AEAD Algorithm Negotiation" | t"> | |||
| anchor="aead-algorithm-negotiation"> | <name>AEAD Algorithm Negotiation</name> | |||
| <t> | <t> | |||
| The AEAD Algorithm Negotiation record has a Record Type number of 4. | The AEAD Algorithm Negotiation record has a Record Type number of 4. | |||
| Its body consists of a sequence of unsigned 16-bit integers in | Its body consists of a sequence of unsigned 16-bit integers in | |||
| network byte order, denoting Numeric Identifiers from the IANA | network byte order, denoting Numeric Identifiers from the IANA | |||
| <xref target="IANA-AEAD">AEAD Algorithms registry</xref>. The | <xref target="IANA-AEAD" format="default">"AEAD Algorithms" registry | |||
| Critical Bit MAY be set. | </xref>. The | |||
| Critical Bit <bcp14>MAY</bcp14> be set. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| If the NTS Next Protocol Negotiation record offers Protocol ID 0 | If the NTS Next Protocol Negotiation record offers Protocol ID 0 | |||
| (for NTPv4), then this record MUST be included exactly once. Other | (for NTPv4), then this record <bcp14>MUST</bcp14> be included exactl | |||
| protocols MAY require it as well. | y once. Other | |||
| protocols <bcp14>MAY</bcp14> require it as well. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| When included in a request, this record denotes which AEAD | When included in a request, this record denotes which AEAD | |||
| algorithms the client is willing to use to secure the Next Protocol, | algorithms the client is willing to use to secure the Next Protocol, | |||
| in decreasing preference order. When included in a response, this | in decreasing preference order. When included in a response, this | |||
| record denotes which algorithm the server chooses to use. It is | record denotes which algorithm the server chooses to use. It is | |||
| empty if the server supports none of the algorithms offered. In | empty if the server supports none of the algorithms offered. In | |||
| requests, the list MUST include at least one algorithm. In | requests, the list <bcp14>MUST</bcp14> include at least one algorith | |||
| responses, it MUST include at most one. Honoring the client's | m. In | |||
| preference order is OPTIONAL: servers may select among any of the | responses, it <bcp14>MUST</bcp14> include at most one. Honoring the | |||
| client's | ||||
| preference order is <bcp14>OPTIONAL</bcp14>: servers may select amon | ||||
| g any of the | ||||
| client's offered choices, even if they are able to support some | client's offered choices, even if they are able to support some | |||
| other algorithm which the client prefers more. | other algorithm that the client prefers more. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Server implementations of <xref | Server implementations of | |||
| target="nts-extension-fields-for-ntpv4">NTS extension fields for | <xref target="nts-extension-fields-for-ntpv4" format="default">NTS E | |||
| NTPv4</xref> MUST support <xref | xtension Fields for NTPv4</xref> | |||
| target="RFC5297">AEAD_AES_SIV_CMAC_256</xref> (Numeric Identifier | <bcp14>MUST</bcp14> support | |||
| 15). That is, if the client includes AEAD_AES_SIV_CMAC_256 in its | <xref target="RFC5297" format="default">AEAD_AES_SIV_CMAC_256</xref> | |||
| AEAD Algorithm Negotiation record and the server accepts Protocol | (Numeric Identifier 15). That is, if the client includes AEAD_AES_SI | |||
| V_CMAC_256 in its | ||||
| AEAD Algorithm Negotiation record, and the server accepts Protocol | ||||
| ID 0 (NTPv4) in its NTS Next Protocol Negotiation record, then the | ID 0 (NTPv4) in its NTS Next Protocol Negotiation record, then the | |||
| server's AEAD Algorithm Negotiation record MUST NOT be empty. | server's AEAD Algorithm Negotiation record <bcp14>MUST NOT</bcp14> b e empty. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="new-cookie-for-ntpv4" numbered="true" toc="default"> | ||||
| <section title="New Cookie for NTPv4" anchor="new-cookie-for-ntpv4"> | <name>New Cookie for NTPv4</name> | |||
| <t> | <t> | |||
| The New Cookie for NTPv4 record has a Record Type number of 5. The | The New Cookie for NTPv4 record has a Record Type number of 5. The | |||
| contents of its body SHALL be implementation-defined and clients | contents of its body <bcp14>SHALL</bcp14> be implementation-defined, | |||
| MUST NOT attempt to interpret them. See <xref | and clients <bcp14>MUST NOT</bcp14> attempt to interpret them. | |||
| target="suggested-format-for-nts-cookies"/> for a suggested | See <xref target="suggested-format-for-nts-cookies" format="default" | |||
| /> for a suggested | ||||
| construction. | construction. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Clients MUST NOT send records of this type. Servers MUST send at | Clients <bcp14>MUST NOT</bcp14> send records of this type. Servers < | |||
| least one record of this type, and SHOULD send eight of them, if the | bcp14>MUST</bcp14> send at | |||
| least one record of this type, and <bcp14>SHOULD</bcp14> send eight | ||||
| of them, if the | ||||
| Next Protocol Negotiation response record contains Protocol ID 0 | Next Protocol Negotiation response record contains Protocol ID 0 | |||
| (NTPv4) and the AEAD Algorithm Negotiation response record is not | (NTPv4) and the AEAD Algorithm Negotiation response record is not | |||
| empty. The Critical Bit SHOULD NOT be set. | empty. The Critical Bit <bcp14>SHOULD NOT</bcp14> be set. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="ntp-server-negotiation" numbered="true" toc="default"> | ||||
| <section title="NTPv4 Server Negotiation" | <name>NTPv4 Server Negotiation</name> | |||
| anchor="ntp-server-negotiation"> | ||||
| <t> | <t> | |||
| The NTPv4 Server Negotiation record has a Record Type number of 6. | The NTPv4 Server Negotiation record has a Record Type number of 6. | |||
| Its body consists of an | Its body consists of an | |||
| <xref target="RFC0020">ASCII-encoded</xref> string. The | <xref target="RFC0020" format="default">ASCII-encoded</xref> string. | |||
| contents of the string SHALL be either an IPv4 address, an IPv6 | The | |||
| contents of the string <bcp14>SHALL</bcp14> be either an IPv4 addres | ||||
| s, an IPv6 | ||||
| address, or a fully qualified domain name (FQDN). IPv4 addresses | address, or a fully qualified domain name (FQDN). IPv4 addresses | |||
| MUST be in dotted decimal notation. IPv6 addresses MUST conform to | <bcp14>MUST</bcp14> be in dotted decimal notation. IPv6 addresses <b cp14>MUST</bcp14> conform to | |||
| the "Text Representation of Addresses" as specified in | the "Text Representation of Addresses" as specified in | |||
| <xref target="RFC4291">RFC 4291</xref> and MUST NOT include zone | <xref target="RFC4291" format="default">RFC 4291</xref> and <bcp14>M | |||
| identifiers <xref target="RFC6874"/>. If a label contains at least | UST NOT</bcp14> include zone | |||
| one non-ASCII character, it is an internationalized domain name | identifiers <xref target="RFC6874" format="default"/>. If a label co | |||
| and an A-LABEL MUST be used as defined in | ntains at least | |||
| Section 2.3.2.1 of <xref target="RFC5890">RFC 5890</xref>. | one non-ASCII character, it is an internationalized domain name, | |||
| If the record contains a domain name, the recipient MUST treat it | and an A-LABEL <bcp14>MUST</bcp14> be used as defined in Section | |||
| as a FQDN, e.g. by making sure it ends with a dot. | <xref target="RFC5890" section="2.3.2.1" sectionFormat="bare" format | |||
| ="default"/> | ||||
| of <xref target="RFC5890" format="default">RFC 5890</xref>. | ||||
| If the record contains a domain name, the recipient <bcp14>MUST</bcp | ||||
| 14> treat it | ||||
| as a FQDN, e.g., by making sure it ends with a dot. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| When NTPv4 is negotiated as a Next Protocol and this | When NTPv4 is negotiated as a Next Protocol and this | |||
| record is sent by the server, the body specifies the | record is sent by the server, the body specifies the | |||
| hostname or IP address of the NTPv4 server with which the | hostname or IP address of the NTPv4 server with which the | |||
| client should associate and which will accept the supplied | client should associate and that will accept the supplied | |||
| cookies. If no record of this type is sent, the client | cookies. If no record of this type is sent, the client | |||
| SHALL interpret this as a directive to associate with an | <bcp14>SHALL</bcp14> interpret this as a directive to associate with an | |||
| NTPv4 server at the same IP address as the NTS-KE server. | NTPv4 server at the same IP address as the NTS-KE server. | |||
| Servers MUST NOT send more than one record of this type. | Servers <bcp14>MUST NOT</bcp14> send more than one record of this ty pe. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When this record is sent by the client, it indicates that | When this record is sent by the client, it indicates that | |||
| the client wishes to associate with the specified NTP | the client wishes to associate with the specified NTP | |||
| server. The NTS-KE server MAY incorporate this request when | server. The NTS-KE server <bcp14>MAY</bcp14> incorporate this reques | |||
| deciding what NTPv4 Server Negotiation records to respond | t when | |||
| deciding which NTPv4 Server Negotiation records to respond | ||||
| with, but honoring the client's preference is | with, but honoring the client's preference is | |||
| OPTIONAL. The client MUST NOT send more than one record of | <bcp14>OPTIONAL</bcp14>. The client <bcp14>MUST NOT</bcp14> send mor e than one record of | |||
| this type. | this type. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the client has sent a record of this type, the NTS-KE server | If the client has sent a record of this type, the NTS-KE server | |||
| SHOULD reply with the same record if it is valid and the server is | <bcp14>SHOULD</bcp14> reply with the same record if it is valid and the server is | |||
| able to supply cookies for it. If the client has not sent any | able to supply cookies for it. If the client has not sent any | |||
| record of this type, the NTS-KE server SHOULD respond with either | record of this type, the NTS-KE server <bcp14>SHOULD</bcp14> respond with either | |||
| an NTP server address in the same family as the NTS-KE session or | an NTP server address in the same family as the NTS-KE session or | |||
| a FQDN that can be resolved to an address in that family, if such | a FQDN that can be resolved to an address in that family, if such | |||
| alternatives are available. | alternatives are available. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Servers MAY set the Critical Bit on records of this type; | Servers <bcp14>MAY</bcp14> set the Critical Bit on records of this t | |||
| clients SHOULD NOT. | ype; | |||
| clients <bcp14>SHOULD NOT</bcp14>. | ||||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="ntp-port-negotiation" numbered="true" toc="default"> | ||||
| <section title="NTPv4 Port Negotiation" | <name>NTPv4 Port Negotiation</name> | |||
| anchor="ntp-port-negotiation"> | ||||
| <t> | <t> | |||
| The NTPv4 Port Negotiation record has a Record Type number | The NTPv4 Port Negotiation record has a Record Type number | |||
| of 7. Its body consists of a 16-bit unsigned integer in | of 7. Its body consists of a 16-bit unsigned integer in | |||
| network byte order, denoting a UDP port number. | network byte order, denoting a UDP port number. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When NTPv4 is negotiated as a Next Protocol and this | When NTPv4 is negotiated as a Next Protocol, and this | |||
| record is sent by the server, the body specifies the port | record is sent by the server, the body specifies the port | |||
| number of the NTPv4 server with which the client should | number of the NTPv4 server with which the client should | |||
| associate and which will accept the supplied cookies. If | associate and that will accept the supplied cookies. If | |||
| no record of this type is sent, the client SHALL assume | no record of this type is sent, the client <bcp14>SHALL</bcp14> assu | |||
| me | ||||
| a default of 123 (the registered port number for NTP). | a default of 123 (the registered port number for NTP). | |||
| </t> | </t> | |||
| <t> | <t> | |||
| When this record is sent by the client in conjunction with | When this record is sent by the client in conjunction with | |||
| a NTPv4 Server Negotiation record, it indicates that the | a NTPv4 Server Negotiation record, it indicates that the | |||
| client wishes to associate with the NTP server at the | client wishes to associate with the NTP server at the | |||
| specified port. The NTS-KE server MAY incorporate this | specified port. The NTS-KE server <bcp14>MAY</bcp14> incorporate thi s | |||
| request when deciding what NTPv4 Server Negotiation and | request when deciding what NTPv4 Server Negotiation and | |||
| NTPv4 Port Negotiation records to respond with, but | NTPv4 Port Negotiation records to respond with, but | |||
| honoring the client's preference is OPTIONAL. | honoring the client's preference is <bcp14>OPTIONAL</bcp14>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Servers MAY set the Critical Bit on records of this type; | Servers <bcp14>MAY</bcp14> set the Critical Bit on records of this t | |||
| clients SHOULD NOT. | ype; | |||
| clients <bcp14>SHOULD NOT</bcp14>. | ||||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="nts-ke-retry" numbered="true" toc="default"> | ||||
| <section title="Retry Intervals" anchor="nts-ke-retry"> | <name>Retry Intervals</name> | |||
| <t> | <t> | |||
| A mechanism for not unnecessarily overloading the NTS-KE server is | A mechanism for not unnecessarily overloading the NTS-KE server is | |||
| REQUIRED when retrying the key establishment process due to protocol, | <bcp14>REQUIRED</bcp14> when retrying the key establishment process du e to protocol, | |||
| communication, or other errors. The exact workings of this will be | communication, or other errors. The exact workings of this will be | |||
| dependent on the application and operational experience gathered over | dependent on the application and operational experience gathered over | |||
| time. Until such experience is available, this memo provides the | time. Until such experience is available, this memo provides the | |||
| following suggestion. | following suggestion. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Clients SHOULD use exponential backoff, with an initial and minimum | Clients <bcp14>SHOULD</bcp14> use exponential backoff, with an initial and minimum | |||
| retry interval of 10 seconds, a maximum retry interval of 5 days, and | retry interval of 10 seconds, a maximum retry interval of 5 days, and | |||
| a base of 1.5. Thus, the minimum interval in seconds, `t`, for the nth | a base of 1.5. Thus, the minimum interval in seconds, 't', for the nth | |||
| retry is calculated with | retry is calculated with the following: | |||
| <list style="empty"> | ||||
| <t> | ||||
| t = min(10 * 1.5^(n-1), 432000). | ||||
| </t> | ||||
| </list> | ||||
| </t> | </t> | |||
| <ul empty="true" spacing="normal"> | ||||
| <li> | ||||
| t = min(10 * 1.5<sup>n-1</sup>, 432000). | ||||
| </li> | ||||
| </ul> | ||||
| <t> | <t> | |||
| Clients MUST NOT reset the retry interval until they have performed | Clients <bcp14>MUST NOT</bcp14> reset the retry interval until they ha ve performed | |||
| a successful key establishment with the NTS-KE server, followed by a | a successful key establishment with the NTS-KE server, followed by a | |||
| successful use of the negotiated next protocol with the keys and data | successful use of the negotiated Next Protocol with the keys and data | |||
| established during that transaction. | established during that transaction. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="key-extraction" numbered="true" toc="default"> | ||||
| <section title="Key Extraction (generally)" anchor="key-extraction"> | <name>Key Extraction (Generally)</name> | |||
| <t> | <t> | |||
| Following a successful run of the NTS-KE protocol, key material SHALL | Following a successful run of the NTS-KE protocol, key material <bcp14 | |||
| be extracted using <xref target="RFC5869">the HMAC-based | >SHALL</bcp14> | |||
| be extracted using <xref target="RFC5869" format="default">the HMAC-ba | ||||
| sed | ||||
| Extract-and-Expand Key Derivation Function (HKDF)</xref> in | Extract-and-Expand Key Derivation Function (HKDF)</xref> in | |||
| accordance with <xref target="RFC8446">RFC 8446, Section 7.5</xref>. | accordance with Section <xref target="RFC8446" section="7.5" sectionFo | |||
| rmat="bare" format="default"/> | ||||
| of <xref target="RFC8446" format="default">RFC 8446</xref>. | ||||
| Inputs to the exporter function are to be constructed in a manner | Inputs to the exporter function are to be constructed in a manner | |||
| specific to the negotiated Next Protocol. However, all protocols which | specific to the negotiated Next Protocol. However, all protocols that | |||
| utilize NTS-KE MUST conform to the following two rules: | utilize NTS-KE <bcp14>MUST</bcp14> conform to the following two rules: | |||
| <list> | ||||
| <t> | ||||
| The <xref target="RFC5705">disambiguating label string</xref> MUST | ||||
| be "EXPORTER-network-time-security". | ||||
| </t> | ||||
| <t> | ||||
| The <xref target="RFC5705">per-association context value</xref> | ||||
| MUST be provided and MUST begin with the two-octet Protocol ID | ||||
| which was negotiated as a Next Protocol. | ||||
| </t> | ||||
| </list> | ||||
| </t> | </t> | |||
| <ul empty="true" spacing="normal"> | ||||
| <li> | ||||
| The <xref target="RFC5705" format="default">disambiguating label s | ||||
| tring</xref> <bcp14>MUST</bcp14> | ||||
| be "EXPORTER-network-time-security". | ||||
| </li> | ||||
| <li> | ||||
| The <xref target="RFC5705" format="default">per-association contex | ||||
| t value</xref> | ||||
| <bcp14>MUST</bcp14> be provided and <bcp14>MUST</bcp14> begin with | ||||
| the two-octet Protocol ID | ||||
| that was negotiated as a Next Protocol. | ||||
| </li> | ||||
| </ul> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="nts-extension-fields-for-ntpv4" numbered="true" toc="defaul | ||||
| <section title="NTS Extension Fields for NTPv4" | t"> | |||
| anchor="nts-extension-fields-for-ntpv4"> | <name>NTS Extension Fields for NTPv4</name> | |||
| <section title="Key Extraction (for NTPv4)"> | <section numbered="true" toc="default"> | |||
| <name>Key Extraction (for NTPv4)</name> | ||||
| <t> | <t> | |||
| Following a successful run of the NTS-KE protocol wherein Protocol | Following a successful run of the NTS-KE protocol wherein Protocol | |||
| ID 0 (NTPv4) is selected as a Next Protocol, two AEAD keys SHALL be | ID 0 (NTPv4) is selected as a Next Protocol, two AEAD keys <bcp14>SHAL L</bcp14> be | |||
| extracted: a client-to-server (C2S) key and a server-to-client (S2C) | extracted: a client-to-server (C2S) key and a server-to-client (S2C) | |||
| key. These keys SHALL be computed with the HKDF defined in | key. These keys <bcp14>SHALL</bcp14> be computed with the HKDF defined | |||
| <xref target="RFC8446">RFC 8446, Section 7.5</xref> using the | in | |||
| following inputs. | Section <xref target="RFC8446" section="7.5" sectionFormat="bare" form | |||
| <list> | at="default"/> | |||
| of <xref target="RFC8446" format="default">RFC 8446</xref> using the | ||||
| following inputs: | ||||
| </t> | ||||
| <ul empty="true" spacing="normal"> | ||||
| <li> | ||||
| The <xref target="RFC5705" format="default">disambiguating label s | ||||
| tring</xref> | ||||
| <bcp14>SHALL</bcp14> be "EXPORTER-network-time-security". | ||||
| </li> | ||||
| <li> | ||||
| <t> | <t> | |||
| The <xref target="RFC5705">disambiguating label string</xref> | The <xref target="RFC5705" format="default">per-association contex | |||
| SHALL be "EXPORTER-network-time-security". | t value</xref> | |||
| <bcp14>SHALL</bcp14> consist of the following five octets: | ||||
| </t> | </t> | |||
| <t> | <ul spacing="normal"> | |||
| The <xref target="RFC5705">per-association context value</xref> | <li> | |||
| SHALL consist of the following five octets: | The first two octets <bcp14>SHALL</bcp14> be zero (the Protoco | |||
| <list> | l ID for | |||
| <t> | ||||
| The first two octets SHALL be zero (the Protocol ID for | ||||
| NTPv4). | NTPv4). | |||
| </t> | </li> | |||
| <t> | <li> | |||
| The next two octets SHALL be the Numeric Identifier of the | The next two octets <bcp14>SHALL</bcp14> be the Numeric Identi | |||
| negotiated AEAD Algorithm in network byte order. | fier of the | |||
| </t> | negotiated AEAD algorithm in network byte order. | |||
| <t> | </li> | |||
| The final octet SHALL be 0x00 for the C2S key and 0x01 for the | <li> | |||
| The final octet <bcp14>SHALL</bcp14> be 0x00 for the C2S key a | ||||
| nd 0x01 for the | ||||
| S2C key. | S2C key. | |||
| </t> | </li> | |||
| </list> | </ul> | |||
| </t> | </li> | |||
| </list> | </ul> | |||
| <t> | ||||
| Implementations wishing to derive additional keys for private or | Implementations wishing to derive additional keys for private or | |||
| experimental use MUST NOT do so by extending the above-specified | experimental use <bcp14>MUST NOT</bcp14> do so by extending the above- | |||
| syntax for per-association context values. Instead, they SHOULD use | specified | |||
| their own disambiguating label string. Note that <xref | syntax for per-association context values. Instead, they <bcp14>SHOULD | |||
| target="RFC5705">RFC 5705</xref> provides that disambiguating label | </bcp14> use | |||
| strings beginning with "EXPERIMENTAL" MAY be used without | their own disambiguating label string. Note that <xref target="RFC5705 | |||
| " format="default">RFC 5705</xref> provides that disambiguating label | ||||
| strings beginning with "EXPERIMENTAL" <bcp14>MAY</bcp14> be used witho | ||||
| ut | ||||
| IANA registration. | IANA registration. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Packet Structure Overview"> | <name>Packet Structure Overview</name> | |||
| <t> | <t> | |||
| In general, an NTS-protected NTPv4 packet consists of: | In general, an NTS-protected NTPv4 packet consists of the following: | |||
| <list> | </t> | |||
| <t> | <ul empty="true" spacing="normal"> | |||
| The usual 48-octet NTP header which is authenticated but not | <li> | |||
| The usual 48-octet NTP header, which is authenticated but not | ||||
| encrypted. | encrypted. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Some extension fields which are authenticated but not encrypted. | Some extension fields, which are authenticated but not encrypted. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| An extension field which contains AEAD output (i.e., an | An extension field that contains AEAD output (i.e., an | |||
| authentication tag and possible ciphertext). The corresponding | authentication tag and possible ciphertext). The corresponding | |||
| plaintext, if non-empty, consists of some extension fields which | plaintext, if non-empty, consists of some extension fields that | |||
| benefit from both encryption and authentication. | benefit from both encryption and authentication. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Possibly, some additional extension fields which are neither | Possibly, some additional extension fields that are neither | |||
| encrypted nor authenticated. In general, these are discarded by th e | encrypted nor authenticated. In general, these are discarded by th e | |||
| receiver. | receiver. | |||
| </t> | </li> | |||
| </list> | </ul> | |||
| </t> | ||||
| <t> | <t> | |||
| Always included among the authenticated or authenticated-and-encrypted | Always included among the authenticated or authenticated-and-encrypted | |||
| extension fields are a cookie extension field and a unique identifier | extension fields are a cookie extension field and a unique identifier | |||
| extension field, as described in Section 5.7. The purpose of the | extension field, as described in <xref target="protocol-details" forma t="default"/>. The purpose of the | |||
| cookie extension field is to enable the server to offload storage of | cookie extension field is to enable the server to offload storage of | |||
| session state onto the client. The purpose of the unique identifier | session state onto the client. The purpose of the unique identifier | |||
| extension field is to protect the client from replay attacks. | extension field is to protect the client from replay attacks. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="unique-identifier-extension-field" numbered="true" toc="d | ||||
| <section title="The Unique Identifier Extension Field" | efault"> | |||
| anchor="unique-identifier-extension-field"> | <name>The Unique Identifier Extension Field</name> | |||
| <t> | <t> | |||
| The Unique Identifier extension field provides the client with a | The Unique Identifier extension field provides the client with a | |||
| cryptographically strong means of detecting replayed packets. It has a | cryptographically strong means of detecting replayed packets. It has a | |||
| Field Type of [[TBD2]]. When the extension field is included in a | Field Type of 0x0104. When the extension field is included in a | |||
| client packet (mode 3), its body SHALL consist of a string of octets | client packet (mode 3), its body <bcp14>SHALL</bcp14> consist of a str | |||
| generated by a <xref target="RFC4086">cryptographically secure random | ing of octets | |||
| number generator</xref>. The string MUST be at least 32 octets | generated by a <xref target="RFC4086" format="default">cryptographical | |||
| ly secure random | ||||
| number generator</xref>. The string <bcp14>MUST</bcp14> be at least 32 | ||||
| octets | ||||
| long. When the extension field is included in a server packet | long. When the extension field is included in a server packet | |||
| (mode 4), its body SHALL contain the same octet string as was provided | (mode 4), its body <bcp14>SHALL</bcp14> contain the same octet string as was provided | |||
| in the client packet to which the server is responding. All server | in the client packet to which the server is responding. All server | |||
| packets generated by NTS-implementing servers in response to client | packets generated by NTS-implementing servers in response to client | |||
| packets containing this extension field MUST also contain this field | packets containing this extension field <bcp14>MUST</bcp14> also conta in this field | |||
| with the same content as in the client's request. The field's use in | with the same content as in the client's request. The field's use in | |||
| modes other than client-server is not defined. | modes other than client-server is not defined. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| This extension field MAY also be used standalone, without NTS, in | This extension field <bcp14>MAY</bcp14> also be used standalone, witho ut NTS, in | |||
| which case it provides the client with a means of detecting spoofed | which case it provides the client with a means of detecting spoofed | |||
| packets from off-path attackers. Historically, NTP's origin timestamp | packets from off-path attackers. Historically, NTP's origin timestamp | |||
| field has played both these roles, but for cryptographic purposes this | field has played both these roles, but this | |||
| is suboptimal because it is only 64 bits long and, depending on | is suboptimal for cryptographic purposes because it is only 64 bits lo | |||
| ng, and depending on | ||||
| implementation details, most of those bits may be predictable. In | implementation details, most of those bits may be predictable. In | |||
| contrast, the Unique Identifier extension field enables a degree of | contrast, the Unique Identifier extension field enables a degree of | |||
| unpredictability and collision resistance more consistent with | unpredictability and collision resistance more consistent with | |||
| cryptographic best practice. | cryptographic best practice. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="nts-cookie-extension-field" numbered="true" toc="default" | ||||
| <section title="The NTS Cookie Extension Field" | > | |||
| anchor="nts-cookie-extension-field"> | <name>The NTS Cookie Extension Field</name> | |||
| <t> | <t> | |||
| The NTS Cookie extension field has a Field Type of [[TBD3]]. Its | The NTS Cookie extension field has a Field Type of 0x0204. Its | |||
| purpose is to carry information which enables the server to recompute | purpose is to carry information that enables the server to recompute | |||
| keys and other session state without having to store any per-client | keys and other session state without having to store any per-client | |||
| state. The contents of its body SHALL be implementation-defined and | state. The contents of its body <bcp14>SHALL</bcp14> be implementation | |||
| clients MUST NOT attempt to interpret them. See <xref | -defined, and | |||
| target="suggested-format-for-nts-cookies"/> for a suggested | clients <bcp14>MUST NOT</bcp14> attempt to interpret them. | |||
| construction. The NTS Cookie extension field MUST NOT be included in | See <xref target="suggested-format-for-nts-cookies" format="default"/> | |||
| for a suggested | ||||
| construction. The NTS Cookie extension field <bcp14>MUST NOT</bcp14> | ||||
| be included in | ||||
| NTP packets whose mode is other than 3 (client) or 4 (server). | NTP packets whose mode is other than 3 (client) or 4 (server). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="nts-cookie-placeholder-extension-field" numbered="true" t | ||||
| <section title="The NTS Cookie Placeholder Extension Field" | oc="default"> | |||
| anchor="nts-cookie-placeholder-extension-field"> | <name>The NTS Cookie Placeholder Extension Field</name> | |||
| <t> | <t> | |||
| The NTS Cookie Placeholder extension field has a Field Type of | The NTS Cookie Placeholder extension field has a Field Type of | |||
| [[TBD4]]. When this extension field is included in a client packet | 0x0304. When this extension field is included in a client packet | |||
| (mode 3), it communicates to the server that the client wishes it to | (mode 3), it communicates to the server that the client wishes it to | |||
| send additional cookies in its response. This extension field MUST NOT | send additional cookies in its response. This extension field <bcp14>M UST NOT</bcp14> | |||
| be included in NTP packets whose mode is other than 3. | be included in NTP packets whose mode is other than 3. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Whenever an NTS Cookie Placeholder extension field is present, it MUST | Whenever an NTS Cookie Placeholder extension field is present, it <bcp 14>MUST</bcp14> | |||
| be accompanied by an NTS Cookie extension field. The body length of | be accompanied by an NTS Cookie extension field. The body length of | |||
| the NTS Cookie Placeholder extension field MUST be the same as the | the NTS Cookie Placeholder extension field <bcp14>MUST</bcp14> be the same as the | |||
| body length of the NTS Cookie extension field. This length requirement | body length of the NTS Cookie extension field. This length requirement | |||
| serves to ensure that the response will not be larger than the | serves to ensure that the response will not be larger than the | |||
| request, in order to improve timekeeping precision and prevent DDoS | request, in order to improve timekeeping precision and prevent DDoS | |||
| amplification. The contents of the NTS Cookie Placeholder extension | amplification. The contents of the NTS Cookie Placeholder extension | |||
| field's body SHOULD be all zeros and, aside from checking its length, | field's body <bcp14>SHOULD</bcp14> be all zeros and, aside from checki | |||
| MUST be ignored by the server. | ng its length, | |||
| <bcp14>MUST</bcp14> be ignored by the server. | ||||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="nts-aeef-extension-field" numbered="true" toc="default"> | ||||
| <section title="The NTS Authenticator and Encrypted Extension Fields Exten | <name>The NTS Authenticator and Encrypted Extension Fields Extension Fie | |||
| sion Field" | ld</name> | |||
| anchor="nts-aeef-extension-field"> | ||||
| <t> | <t> | |||
| The NTS Authenticator and Encrypted Extension Fields extension field | The NTS Authenticator and Encrypted Extension Fields extension field | |||
| is the central cryptographic element of an NTS-protected NTP packet. | is the central cryptographic element of an NTS-protected NTP packet. | |||
| Its Field Type is [[TBD5]]. It SHALL be formatted according to | Its Field Type is 0x0404. It <bcp14>SHALL</bcp14> be formatted accordi | |||
| <xref target="fig-aeef-field"/> and include the following fields: | ng to | |||
| <list> | <xref target="fig-aeef-field" format="default"/> and include the follo | |||
| <t> | wing fields: | |||
| Nonce Length: Two octets in network byte order, giving the length | </t> | |||
| <dl newline="false" spacing="normal"> | ||||
| <dt>Nonce Length:</dt> <dd>Two octets in network byte order, giving th | ||||
| e length | ||||
| of the Nonce field, excluding any padding, interpreted as an | of the Nonce field, excluding any padding, interpreted as an | |||
| unsigned integer. | unsigned integer. | |||
| </t> | </dd> | |||
| <t> | <dt>Ciphertext Length:</dt> <dd>Two octets in network byte order, givi | |||
| Ciphertext Length: Two octets in network byte order, giving the | ng the | |||
| length of the Ciphertext field, excluding any padding, interpreted | length of the Ciphertext field, excluding any padding, interpreted | |||
| as an unsigned integer. | as an unsigned integer. | |||
| </t> | </dd> | |||
| <t> | <dt>Nonce:</dt> <dd>A nonce as required by the negotiated AEAD algorit | |||
| Nonce: A nonce as required by the negotiated AEAD Algorithm. The | hm. The | |||
| end of the field is zero-padded to a word (four octets) boundary. | end of the field is zero-padded to a word (four octets) boundary. | |||
| </t> | </dd> | |||
| <t> | <dt>Ciphertext:</dt> <dd>The output of the negotiated AEAD algorithm. | |||
| Ciphertext: The output of the negotiated AEAD Algorithm. The | The | |||
| structure of this field is determined by the negotiated algorithm, | structure of this field is determined by the negotiated algorithm, | |||
| but it typically contains an authentication tag in addition to the | but it typically contains an authentication tag in addition to the | |||
| actual ciphertext. The end of the field is zero-padded to a word | actual ciphertext. The end of the field is zero-padded to a word | |||
| (four octets) boundary. | (four octets) boundary. | |||
| </t> | </dd> | |||
| <t> | <dt>Additional Padding:</dt> <dd>Clients that use a nonce length short | |||
| Additional Padding: Clients which use a nonce length shorter than | er than | |||
| the maximum allowed by the negotiated AEAD algorithm may be requir ed | the maximum allowed by the negotiated AEAD algorithm may be requir ed | |||
| to include additional zero-padding. The necessary length of this | to include additional zero-padding. The necessary length of this | |||
| field is specified below. | field is specified below. | |||
| </t> | </dd> | |||
| </list> | </dl> | |||
| </t> | <figure anchor="fig-aeef-field"> | |||
| <figure anchor="fig-aeef-field" | <name>NTS Authenticator and Encrypted Extension Fields Extension Field | |||
| title="NTS Authenticator and Encrypted Extension Fields Extension Fiel | Format</name> | |||
| d Format"> | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| <artwork><![CDATA[ | ||||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Nonce Length | Ciphertext Length | | | Nonce Length | Ciphertext Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| . . | . . | |||
| . Nonce, including up to 3 octets padding . | . Nonce, including up to 3 octets padding . | |||
| . . | . . | |||
| | | | | | | |||
| skipping to change at line 1012 ¶ | skipping to change at line 1019 ¶ | |||
| . . | . . | |||
| . Ciphertext, including up to 3 octets padding . | . Ciphertext, including up to 3 octets padding . | |||
| . . | . . | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | | |||
| . . | . . | |||
| . Additional Padding . | . Additional Padding . | |||
| . . | . . | |||
| | | | | | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]> | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| </artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| <t> | <t> | |||
| The Ciphertext field SHALL be formed by providing the following inputs | The Ciphertext field <bcp14>SHALL</bcp14> be formed by providing the f | |||
| to the negotiated AEAD Algorithm: | ollowing inputs | |||
| <list> | to the negotiated AEAD algorithm: | |||
| <t> | </t> | |||
| K: For packets sent from the client to the server, the C2S key | <dl newline="false" spacing="normal" indent="4"> | |||
| SHALL be used. For packets sent from the server to the client, the | <dt>K:</dt> <dd>For packets sent from the client to the server, the C2 | |||
| S2C key SHALL be used. | S key | |||
| </t> | <bcp14>SHALL</bcp14> be used. For packets sent from the server to | |||
| <t> | the client, the | |||
| A: The associated data SHALL consist of the portion of the NTP | S2C key <bcp14>SHALL</bcp14> be used. | |||
| </dd> | ||||
| <dt>A:</dt> <dd>The associated data <bcp14>SHALL</bcp14> consist of th | ||||
| e portion of the NTP | ||||
| packet beginning from the start of the NTP header and ending at | packet beginning from the start of the NTP header and ending at | |||
| the end of the last extension field which precedes the NTS | the end of the last extension field that precedes the NTS | |||
| Authenticator and Encrypted Extension Fields extension field. | Authenticator and Encrypted Extension Fields extension field. | |||
| </t> | </dd> | |||
| <t> | <dt>P:</dt> <dd>The plaintext <bcp14>SHALL</bcp14> consist of all (if | |||
| P: The plaintext SHALL consist of all (if any) NTP extension field | any) NTP extension fields to | |||
| s to | be encrypted; if multiple extension fields are present, they <bcp1 | |||
| be encrypted; if multiple extension fields are present they SHALL | 4>SHALL</bcp14> be | |||
| be | joined by concatenation. Each such field <bcp14>SHALL</bcp14> be f | |||
| joined by concatenation. Each such field SHALL be formatted in | ormatted in | |||
| accordance with RFC 7822 [RFC7822], except that, contrary to the R | accordance with <xref target="RFC7822" format="default">RFC 7822</ | |||
| FC | xref>, except that, contrary to the RFC | |||
| 7822 requirement that fields have a minimum length of 16 or 28 oct ets, | 7822 requirement that fields have a minimum length of 16 or 28 oct ets, | |||
| encrypted extension fields MAY be arbitrarily short (but still MUS T be | encrypted extension fields <bcp14>MAY</bcp14> be arbitrarily short (but still <bcp14>MUST</bcp14> be | |||
| a multiple of 4 octets in length). | a multiple of 4 octets in length). | |||
| </t> | </dd> | |||
| <t> | <dt>N:</dt> <dd>The nonce <bcp14>SHALL</bcp14> be formed however requi | |||
| N: The nonce SHALL be formed however required by the negotiated | red by the negotiated | |||
| AEAD algorithm. | AEAD algorithm. | |||
| </t> | </dd> | |||
| </list> | </dl> | |||
| </t> | ||||
| <t> | <t> | |||
| The purpose of the Additional Padding field is to ensure | The purpose of the Additional Padding field is to ensure | |||
| that servers can always choose a nonce whose length is | that servers can always choose a nonce whose length is | |||
| adequate to ensure its uniqueness, even if the client | adequate to ensure its uniqueness, even if the client | |||
| chooses a shorter one, and still ensure that the overall | chooses a shorter one, and still ensure that the overall | |||
| length of the server's response packet does not exceed the | length of the server's response packet does not exceed the | |||
| length of the request. For mode 4 (server) packets, no | length of the request. For mode 4 (server) packets, no | |||
| Additional Padding field is ever required. For mode 3 | Additional Padding field is ever required. For mode 3 | |||
| (client) packets, the length of the Additional Padding field | (client) packets, the length of the Additional Padding field | |||
| SHALL be computed as follows. Let `N_LEN` be the padded | <bcp14>SHALL</bcp14> be computed as follows. Let 'N_LEN' be the padde | |||
| length of the Nonce field. Let `N_MAX` be, as specified | d | |||
| by <xref target="RFC5116">RFC 5116</xref>, the maximum | length of the Nonce field. Let 'N_MAX' be, as specified | |||
| by <xref target="RFC5116" format="default">RFC 5116</xref>, the maximu | ||||
| m | ||||
| permitted nonce length for the negotiated AEAD | permitted nonce length for the negotiated AEAD | |||
| algorithm. Let `N_REQ` be the lesser of 16 and N_MAX, | algorithm. Let 'N_REQ' be the lesser of 16 and N_MAX, | |||
| rounded up to the nearest multiple of 4. If N_LEN is | rounded up to the nearest multiple of 4. If N_LEN is | |||
| greater than or equal to N_REQ, then no Additional Padding | greater than or equal to N_REQ, then no Additional Padding | |||
| field is required. Otherwise, the Additional Padding field | field is required. Otherwise, the Additional Padding field | |||
| SHALL be at least N_REQ - N_LEN octets in length. Servers | <bcp14>SHALL</bcp14> be at least N_REQ - N_LEN octets in length. Serve | |||
| MUST enforce this requirement by discarding any packet which | rs | |||
| <bcp14>MUST</bcp14> enforce this requirement by discarding any packet | ||||
| that | ||||
| does not conform to it. | does not conform to it. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Senders are always free to include more Additional Padding | Senders are always free to include more Additional Padding | |||
| than mandated by the above paragraph. Theoretically, it | than mandated by the above paragraph. Theoretically, it | |||
| could be necessary to do so in order to bring the extension | could be necessary to do so in order to bring the extension | |||
| field to the minimum length required by <xref | field to the minimum length required by <xref target="RFC7822" format= | |||
| target="RFC7822">RFC 7822</xref>. This should never happen in | "default">RFC 7822</xref>. This should never happen in | |||
| practice because any reasonable AEAD algorithm will have a nonce and | practice because any reasonable AEAD algorithm will have a nonce and | |||
| an authenticator long enough to bring the extension field to | an authenticator long enough to bring the extension field to | |||
| its required length already. Nonetheless, implementers are | its required length already. Nonetheless, implementers are | |||
| advised to explicitly handle this case and ensure that the | advised to explicitly handle this case and ensure that the | |||
| extension field they emit is of legal length. | extension field they emit is of legal length. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The NTS Authenticator and Encrypted Extension Fields extension field | The NTS Authenticator and Encrypted Extension Fields extension field | |||
| MUST NOT be included in NTP packets whose mode is other than 3 | <bcp14>MUST NOT</bcp14> be included in NTP packets whose mode is other than 3 | |||
| (client) or 4 (server). | (client) or 4 (server). | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="protocol-details" numbered="true" toc="default"> | ||||
| <section title="Protocol Details" anchor="protocol-details"> | <name>Protocol Details</name> | |||
| <t> | <t> | |||
| A client sending an NTS-protected request SHALL include the following | A client sending an NTS-protected request <bcp14>SHALL</bcp14> include | |||
| extension fields as displayed in <xref | the following | |||
| target="fig_NTSTimeSyncMessage"/>: | extension fields as displayed in <xref target="fig_NTSTimeSyncMessage | |||
| <list> | " format="default"/>: | |||
| <t> | </t> | |||
| Exactly one Unique Identifier extension field which MUST be | <ul empty="true" spacing="normal"> | |||
| authenticated, MUST NOT be encrypted, and whose contents MUST be | <li> | |||
| the output of a cryptographically secure random number generator. | Exactly one Unique Identifier extension field that <bcp14>MUST</bc | |||
| <xref target="RFC4086"/> | p14> be | |||
| </t> | authenticated, <bcp14>MUST NOT</bcp14> be encrypted, and whose con | |||
| <t> | tents <bcp14>MUST</bcp14> be | |||
| Exactly one NTS Cookie extension field which MUST be authenticated | the output of a <xref target="RFC4086" format="default">cryptograp | |||
| and MUST NOT be encrypted. The cookie MUST be one which has been | hically secure random number generator | |||
| </xref>. | ||||
| </li> | ||||
| <li> | ||||
| Exactly one NTS Cookie extension field that <bcp14>MUST</bcp14> be | ||||
| authenticated | ||||
| and <bcp14>MUST NOT</bcp14> be encrypted. The cookie <bcp14>MUST</ | ||||
| bcp14> be one which has been | ||||
| previously provided to the client, either from the key establishme nt | previously provided to the client, either from the key establishme nt | |||
| server during the NTS-KE handshake or from the NTP server in | server during the NTS-KE handshake or from the NTP server in | |||
| response to a previous NTS-protected NTP request. | response to a previous NTS-protected NTP request. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Exactly one NTS Authenticator and Encrypted Extension Fields | Exactly one NTS Authenticator and Encrypted Extension Fields | |||
| extension field, generated using an AEAD Algorithm and C2S key | extension field, generated using an AEAD algorithm and C2S key | |||
| established through NTS-KE. | established through NTS-KE. | |||
| </t> | </li> | |||
| </list> | </ul> | |||
| </t> | ||||
| <t> | <t> | |||
| To protect the client's privacy, the client SHOULD avoid reusing | To protect the client's privacy, the client <bcp14>SHOULD</bcp14> avoi d reusing | |||
| a cookie. If the client does not have any cookies that it has not | a cookie. If the client does not have any cookies that it has not | |||
| already sent, it SHOULD initiate a re-run of the NTS-KE protocol. The | already sent, it <bcp14>SHOULD</bcp14> initiate a rerun of the NTS-KE | |||
| client MAY reuse cookies in order to prioritize resilience over | protocol. The | |||
| client <bcp14>MAY</bcp14> reuse cookies in order to prioritize resilie | ||||
| nce over | ||||
| unlinkability. Which of the two that should be prioritized in any | unlinkability. Which of the two that should be prioritized in any | |||
| particular case is dependent on the application and the user's | particular case is dependent on the application and the user's | |||
| preference. <xref target="Unlinkability"/> describes the privacy | preference. <xref target="Unlinkability" format="default"/> describes the privacy | |||
| considerations of this in further detail. | considerations of this in further detail. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The client MAY include one or more NTS Cookie Placeholder extension | The client <bcp14>MAY</bcp14> include one or more NTS Cookie Placehold | |||
| fields which MUST be authenticated and MAY be encrypted. The number of | er extension | |||
| fields that <bcp14>MUST</bcp14> be authenticated and <bcp14>MAY</bcp14 | ||||
| > be encrypted. The number of | ||||
| NTS Cookie Placeholder extension fields that the client includes | NTS Cookie Placeholder extension fields that the client includes | |||
| SHOULD be such that if the client includes N placeholders and the serv er | <bcp14>SHOULD</bcp14> be such that if the client includes N placeholde rs and the server | |||
| sends back N+1 cookies, the number of unused cookies stored by the | sends back N+1 cookies, the number of unused cookies stored by the | |||
| client will come to eight. The client SHOULD NOT include more than sev en | client will come to eight. The client <bcp14>SHOULD NOT</bcp14> includ e more than seven | |||
| NTS Cookie Placeholder extension fields in a request. When both the | NTS Cookie Placeholder extension fields in a request. When both the | |||
| client and server adhere to all cookie-management guidance provided in | client and server adhere to all cookie-management guidance provided in | |||
| this memo, the number of placeholder extension fields will equal the | this memo, the number of placeholder extension fields will equal the | |||
| number of dropped packets since the last successful volley. | number of dropped packets since the last successful volley. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| In rare circumstances, it may be necessary to include fewer | In rare circumstances, it may be necessary to include fewer | |||
| NTS Cookie Placeholder extensions than recommended above in | NTS Cookie Placeholder extensions than recommended above in | |||
| order to prevent datagram fragmentation. When cookies adhere | order to prevent datagram fragmentation. When cookies adhere | |||
| the format recommended in <xref | to the format recommended in <xref target="suggested-format-for-nts-co | |||
| target="suggested-format-for-nts-cookies"/> and the AEAD in | okies" format="default"/> and the AEAD in | |||
| use is the mandatory-to-implement AEAD_AES_SIV_CMAC_256, | use is the mandatory-to-implement AEAD_AES_SIV_CMAC_256, | |||
| senders can include a cookie and seven placeholders and | senders can include a cookie and seven placeholders and | |||
| still have packet size fall comfortably below 1280 octets if | still have packet size fall comfortably below 1280 octets if | |||
| no non-NTS-related extensions are used; 1280 octets is the | no non-NTS-related extensions are used; 1280 octets is the | |||
| minimum prescribed MTU for IPv6 and is generally safe | minimum prescribed MTU for IPv6 and is generally safe | |||
| for avoiding IPv4 fragmentation. Nonetheless, | for avoiding IPv4 fragmentation. Nonetheless, | |||
| senders SHOULD include fewer cookies and placeholders than | senders <bcp14>SHOULD</bcp14> include fewer cookies and placeholders t han | |||
| otherwise indicated if doing so is necessary to prevent | otherwise indicated if doing so is necessary to prevent | |||
| fragmentation. | fragmentation. | |||
| </t> | </t> | |||
| <figure anchor="fig_NTSTimeSyncMessage" | <figure anchor="fig_NTSTimeSyncMessage"> | |||
| title="NTS-protected NTP Time Synchronization Messages"> | <name>NTS-Protected NTP Time Synchronization Messages</name> | |||
| <artwork><![CDATA[ | <artwork name="" type="" align="left" alt=""><![CDATA[ | |||
| +---------------------------------------+ | +---------------------------------------+ | |||
| | - Verify time request message | | | - Verify time request message. | | |||
| | - Generate time response message | | | - Generate time response message. | | |||
| | - Included NTPv4 extension fields | | | - Included NTPv4 extension fields: | | |||
| | o Unique Identifier EF | | | o Unique Identifier EF | | |||
| | o NTS Authentication and | | | o NTS Authentication and | | |||
| | Encrypted Extension Fields EF | | | Encrypted Extension Fields EF | | |||
| | - NTS Cookie EF | | | - NTS Cookie EF | | |||
| | - <NTS Cookie EF> | | | - <NTS Cookie EF> | | |||
| | - Transmit time request packet | | | - Transmit time request packet. | | |||
| +-----------------+---------------------+ | +-----------------+---------------------+ | |||
| | | | | |||
| | | | | |||
| Server -----------+---------------+-----+-----------------------> | Server -----------+---------------+-----+-----------------------> | |||
| ^ \ | ^ \ | |||
| / \ | / \ | |||
| Time request / \ Time response | Time request / \ Time response | |||
| (mode 3) / \ (mode 4) | (mode 3) / \ (mode 4) | |||
| / \ | / \ | |||
| / V | / V | |||
| Client -----+---------------------------------+-----------------> | Client -----+---------------------------------+-----------------> | |||
| | | | | | | |||
| | | | | | | |||
| | | | | | | |||
| +-----------+----------------------+ +------+-----------------+ | +-----------+-----------------------+ +-----+------------------+ | |||
| |- Generate time request message | |- Verify time response | | |- Generate time request message. | |- Verify time response | | |||
| | - Include NTPv4 Extension fields | | message | | | - Include NTPv4 Extension fields: | | message. | | |||
| | o Unique Identifier EF | |- Extract cookie(s) | | | o Unique Identifier EF | |- Extract cookie(s). | | |||
| | o NTS Cookie EF | |- Time synchronization | | | o NTS Cookie EF | |- Time synchronization | | |||
| | o <NTS Cookie Placeholder EF> | | processing | | | o <NTS Cookie Placeholder EF> | | processing. | | |||
| | | +------------------------+ | | | +------------------------+ | |||
| |- Generate AEAD tag of NTP message| | |- Generate AEAD tag of NTP message.| | |||
| |- Add NTS Authentication and | | |- Add NTS Authentication and | | |||
| | Encrypted Extension Fields EF | | | Encrypted Extension Fields EF. | | |||
| |- Transmit time request packet | | |- Transmit time request packet. | | |||
| +----------------------------------+]]> | +-----------------------------------+ | |||
| </artwork> | ]]></artwork> | |||
| </figure> | </figure> | |||
| <t> | <t> | |||
| The client MAY include additional (non-NTS-related) extension fields | The client <bcp14>MAY</bcp14> include additional (non-NTS-related) ext | |||
| which MAY appear prior to the NTS Authenticator and Encrypted Extensio | ension fields | |||
| n | that <bcp14>MAY</bcp14> appear prior to the NTS Authenticator and Encr | |||
| ypted Extension | ||||
| Fields extension fields (therefore authenticated but not encrypted), | Fields extension fields (therefore authenticated but not encrypted), | |||
| within it (therefore encrypted and authenticated), or after it | within it (therefore encrypted and authenticated), or after it | |||
| (therefore neither encrypted nor authenticated). | (therefore neither encrypted nor authenticated). | |||
| The server MUST discard any unauthenticated extension | The server <bcp14>MUST</bcp14> discard any unauthenticated extension | |||
| fields. Future specifications of extension fields MAY provide | fields. Future specifications of extension fields <bcp14>MAY</bcp14> p | |||
| rovide | ||||
| exceptions to this rule. | exceptions to this rule. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Upon receiving an NTS-protected request, the server SHALL (through som e | Upon receiving an NTS-protected request, the server <bcp14>SHALL</bcp1 4> (through some | |||
| implementation-defined mechanism) use the cookie to recover the AEAD | implementation-defined mechanism) use the cookie to recover the AEAD | |||
| Algorithm, C2S key, and S2C key associated with the request, and then | algorithm, C2S key, and S2C key associated with the request, and then | |||
| use the C2S key to authenticate the packet and decrypt the ciphertext. | use the C2S key to authenticate the packet and decrypt the ciphertext. | |||
| If the cookie is valid and authentication and decryption succeed, the | If the cookie is valid and authentication and decryption succeed, the | |||
| server SHALL include the following extension fields in its response: | server <bcp14>SHALL</bcp14> include the following extension fields in | |||
| <list> | its response: | |||
| <t> | </t> | |||
| Exactly one Unique Identifier extension field which MUST be | <ul empty="true" spacing="normal"> | |||
| authenticated, MUST NOT be encrypted, and whose contents SHALL ech | <li> | |||
| o | Exactly one Unique Identifier extension field that <bcp14>MUST</bc | |||
| p14> be | ||||
| authenticated, <bcp14>MUST NOT</bcp14> be encrypted, and whose con | ||||
| tents <bcp14>SHALL</bcp14> echo | ||||
| those provided by the client. | those provided by the client. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Exactly one NTS Authenticator and Encrypted Extension Fields | Exactly one NTS Authenticator and Encrypted Extension Fields | |||
| extension field, generated using the AEAD algorithm and S2C key | extension field, generated using the AEAD algorithm and S2C key | |||
| recovered from the cookie provided by the client. | recovered from the cookie provided by the client. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| One or more NTS Cookie extension fields which MUST be authenticate | One or more NTS Cookie extension fields that <bcp14>MUST</bcp14> b | |||
| d | e authenticated | |||
| and encrypted. The number of NTS Cookie extension fields included | and encrypted. The number of NTS Cookie extension fields included | |||
| SHOULD be equal to, and MUST NOT exceed, one plus the number of | <bcp14>SHOULD</bcp14> be equal to, and <bcp14>MUST NOT</bcp14> exc eed, one plus the number of | |||
| valid NTS Cookie Placeholder extension fields included in the | valid NTS Cookie Placeholder extension fields included in the | |||
| request. The cookies returned in those fields MUST be valid for us | request. The cookies returned in those fields <bcp14>MUST</bcp14> | |||
| e | be valid for use | |||
| with the NTP server that sent them. They MAY be valid for other NT | with the NTP server that sent them. They <bcp14>MAY</bcp14> be val | |||
| P | id for other NTP | |||
| servers as well, but there is no way for the server to indicate | servers as well, but there is no way for the server to indicate | |||
| this. | this. | |||
| </t> | </li> | |||
| </list> | </ul> | |||
| </t> | ||||
| <t> | <t> | |||
| We emphasize the contrast that NTS Cookie extension fields MUST NOT be | We emphasize the contrast that NTS Cookie extension fields <bcp14>MUST | |||
| encrypted when sent from client to server, but MUST be encrypted when | NOT</bcp14> be | |||
| encrypted when sent from client to server but <bcp14>MUST</bcp14> be e | ||||
| ncrypted when | ||||
| sent from server to client. The former is necessary in order for the | sent from server to client. The former is necessary in order for the | |||
| server to be able to recover the C2S and S2C keys, while the latter is | server to be able to recover the C2S and S2C keys, while the latter is | |||
| necessary to satisfy the unlinkability goals discussed in <xref | necessary to satisfy the unlinkability goals discussed in <xref target | |||
| target="Unlinkability"/>. We emphasize also that "encrypted" | ="Unlinkability" format="default"/>. We emphasize also that "encrypted" | |||
| means encapsulated within the NTS Authenticator and Encrypted | means encapsulated within the NTS Authenticator and Encrypted | |||
| Extensions extension field. While the body of an NTS Cookie extension | Extensions extension field. While the body of an NTS Cookie extension | |||
| field will generally consist of some sort of AEAD output (regardless o f | field will generally consist of some sort of AEAD output (regardless o f | |||
| whether the recommendations of <xref | whether the recommendations of <xref target="suggested-format-for-nts- | |||
| target="suggested-format-for-nts-cookies"/> are precisely followed), | cookies" format="default"/> are precisely followed), | |||
| this is not sufficient to make the extension field | this is not sufficient to make the extension field | |||
| "encrypted". | "encrypted". | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The server MAY include additional (non-NTS-related) extension fields | The server <bcp14>MAY</bcp14> include additional (non-NTS-related) ext | |||
| which MAY appear prior to the NTS Authenticator and Encrypted Extensio | ension fields | |||
| n | that <bcp14>MAY</bcp14> appear prior to the NTS Authenticator and Encr | |||
| ypted Extension | ||||
| Fields extension field (therefore authenticated but not encrypted), | Fields extension field (therefore authenticated but not encrypted), | |||
| within it (therefore encrypted and authenticated), or after it | within it (therefore encrypted and authenticated), or after it | |||
| (therefore neither encrypted nor authenticated). | (therefore neither encrypted nor authenticated). | |||
| The client MUST discard any unauthenticated extension fields. | The client <bcp14>MUST</bcp14> discard any unauthenticated extension f | |||
| Future specifications of extension fields MAY provide exceptions to | ields. | |||
| Future specifications of extension fields <bcp14>MAY</bcp14> provide e | ||||
| xceptions to | ||||
| this rule. | this rule. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Upon receiving an NTS-protected response, the client MUST verify that | Upon receiving an NTS-protected response, the client <bcp14>MUST</bcp1 4> verify that | |||
| the Unique Identifier matches that of an outstanding request, and that | the Unique Identifier matches that of an outstanding request, and that | |||
| the packet is authentic under the S2C key associated with that | the packet is authentic under the S2C key associated with that | |||
| request. If either of these checks fails, the packet MUST be discarded | request. If either of these checks fails, the packet <bcp14>MUST</bcp1 | |||
| without further processing. In particular, the client MUST discard | 4> be discarded | |||
| without further processing. In particular, the client <bcp14>MUST</bcp | ||||
| 14> discard | ||||
| unprotected responses to NTS-protected requests. | unprotected responses to NTS-protected requests. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the server is unable to validate the cookie or authenticate the | If the server is unable to validate the cookie or authenticate the | |||
| request, it SHOULD respond with a Kiss-o'-Death (KoD) packet (see | request, it <bcp14>SHOULD</bcp14> respond with a Kiss-o'-Death (KoD) p | |||
| <xref target="RFC5905">RFC 5905, Section 7.4</xref>) with kiss code | acket (see | |||
| "NTSN", meaning "NTS NAK" (NTS negative-acknowledg | Section <xref target="RFC5905" section="7.4" sectionFormat="bare" form | |||
| ment). | at="default"/> | |||
| It MUST NOT include any NTS Cookie or NTS Authenticator and | of <xref target="RFC5905" format="default">RFC 5905</xref>) with kiss | |||
| code | ||||
| "NTSN", meaning "NTS NAK" (NTS negative-acknowledgment). | ||||
| It <bcp14>MUST NOT</bcp14> include any NTS Cookie or NTS Authenticator | ||||
| and | ||||
| Encrypted Extension Fields extension fields. | Encrypted Extension Fields extension fields. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| If the NTP server has previously responded with authentic NTS-protecte d | If the NTP server has previously responded with authentic NTS-protecte d | |||
| NTP packets, the client MUST verify that | NTP packets, the client <bcp14>MUST</bcp14> verify that | |||
| any KoD packets received from the server contain the Unique Identifier | any KoD packets received from the server contain the Unique Identifier | |||
| extension field and that the Unique Identifier matches that of an | extension field and that the Unique Identifier matches that of an | |||
| outstanding request. If this check fails, the packet MUST be discarded | outstanding request. If this check fails, the packet <bcp14>MUST</bcp1 | |||
| without further processing. If this check passes, the client MUST comp | 4> be discarded | |||
| ly | without further processing. If this check passes, the client <bcp14>MU | |||
| with <xref target="RFC5905">RFC 5905, Section 7.4</xref> where require | ST</bcp14> comply | |||
| d. | with Section <xref target="RFC5905" section="7.4" sectionFormat="bare" | |||
| format="default"/> | ||||
| of <xref target="RFC5905" format="default">RFC 5905</xref> where requi | ||||
| red. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| A client MAY automatically re-run the NTS-KE protocol upon forced | A client <bcp14>MAY</bcp14> automatically rerun the NTS-KE protocol up | |||
| disassociation from an NTP server. In that case, it MUST avoid quickly | on forced | |||
| disassociation from an NTP server. In that case, it <bcp14>MUST</bcp14 | ||||
| > avoid quickly | ||||
| looping between the NTS-KE and NTP servers by rate limiting the | looping between the NTS-KE and NTP servers by rate limiting the | |||
| retries. Requirements for retry intervals in NTS-KE are described in | retries. Requirements for retry intervals in NTS-KE are described in | |||
| <xref target="nts-ke-retry" />. | <xref target="nts-ke-retry" format="default"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Upon reception of the NTS NAK kiss code, the client SHOULD wait until | Upon reception of the NTS NAK kiss code, the client <bcp14>SHOULD</bcp | |||
| the next poll for a valid NTS-protected response and if none is | 14> wait until | |||
| the next poll for a valid NTS-protected response, and if none is | ||||
| received, initiate a fresh NTS-KE handshake to try to renegotiate new | received, initiate a fresh NTS-KE handshake to try to renegotiate new | |||
| cookies, AEAD keys, and parameters. If the NTS-KE handshake succeeds, | cookies, AEAD keys, and parameters. If the NTS-KE handshake succeeds, | |||
| the client MUST discard all old cookies and parameters and use the new | the client <bcp14>MUST</bcp14> discard all old cookies and parameters and use the new | |||
| ones instead. As long as the NTS-KE handshake has not succeeded, the | ones instead. As long as the NTS-KE handshake has not succeeded, the | |||
| client SHOULD continue polling the NTP server using the cookies and | client <bcp14>SHOULD</bcp14> continue polling the NTP server using the cookies and | |||
| parameters it has. | parameters it has. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| To allow for NTP session restart when the NTS-KE server is unavailable | To allow for NTP session restart when the NTS-KE server is unavailable | |||
| and to reduce NTS-KE server load, the client SHOULD keep at least one | and to reduce NTS-KE server load, the client <bcp14>SHOULD</bcp14> kee p at least one | |||
| unused but recent cookie, AEAD keys, negotiated AEAD algorithm, and | unused but recent cookie, AEAD keys, negotiated AEAD algorithm, and | |||
| other necessary parameters on persistent storage. This way, the client | other necessary parameters in persistent storage. This way, the client | |||
| is able to resume the NTP session without performing renewed NTS-KE | is able to resume the NTP session without performing renewed NTS-KE | |||
| negotiation. | negotiation. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section anchor="suggested-format-for-nts-cookies" numbered="true" toc="defa | ||||
| <section title="Suggested Format for NTS Cookies" | ult"> | |||
| anchor="suggested-format-for-nts-cookies"> | <name>Suggested Format for NTS Cookies</name> | |||
| <t> | <t> | |||
| This section is non-normative. It gives a suggested way for servers to | This section is non-normative. It gives a suggested way for servers to | |||
| construct NTS cookies. All normative requirements are stated in | construct NTS cookies. All normative requirements are stated in | |||
| <xref target="new-cookie-for-ntpv4"/> and <xref | <xref target="new-cookie-for-ntpv4" format="default"/> and <xref target= | |||
| target="nts-cookie-extension-field"/>. | "nts-cookie-extension-field" format="default"/>. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The role of cookies in NTS is closely analogous to that of session | The role of cookies in NTS is closely analogous to that of session | |||
| cookies in TLS. Accordingly, the thematic resemblance of this section to | tickets in TLS. Accordingly, the thematic resemblance of this section to | |||
| <xref target="RFC5077">RFC 5077</xref> is deliberate and the reader | <xref target="RFC5077" format="default">RFC 5077</xref> is deliberate, a | |||
| nd the reader | ||||
| should likewise take heed of its security considerations. | should likewise take heed of its security considerations. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Servers should select an AEAD algorithm which they will use to encrypt | Servers should select an AEAD algorithm that they will use to encrypt | |||
| and authenticate cookies. The chosen algorithm should be one such as | and authenticate cookies. The chosen algorithm should be one such as | |||
| <xref target="RFC5297">AEAD_AES_SIV_CMAC_256</xref> which resists | <xref target="RFC5297" format="default">AEAD_AES_SIV_CMAC_256</xref>, wh ich resists | |||
| accidental nonce reuse. It need not be the same as the one that was | accidental nonce reuse. It need not be the same as the one that was | |||
| negotiated with the client. Servers should randomly generate and store a | negotiated with the client. Servers should randomly generate and store a | |||
| secret master AEAD key `K`. Servers should additionally choose a non-sec | secret master AEAD key 'K'. Servers should additionally choose a non-sec | |||
| ret, | ret, | |||
| unique value `I` as key-identifier for `K`. | unique value 'I' as key identifier for 'K'. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Servers should periodically (e.g., once daily) generate a new pair `(I,K )` | Servers should periodically (e.g., once daily) generate a new pair '(I,K )' | |||
| and immediately switch to using these values for all newly-generated | and immediately switch to using these values for all newly-generated | |||
| cookies. Following each such key rotation, servers should | cookies. Following each such key rotation, servers should | |||
| securely erase any previously generated keys that should now be expired. | securely erase any previously generated keys that should now be expired. | |||
| Servers should continue to accept any cookie generated using keys that | Servers should continue to accept any cookie generated using keys that | |||
| they have not yet erased, even if those keys are no longer current. | they have not yet erased, even if those keys are no longer current. | |||
| Erasing old keys provides for forward secrecy, limiting the scope of | Erasing old keys provides for forward secrecy, limiting the scope of | |||
| what old information can be stolen if a master key is somehow | what old information can be stolen if a master key is somehow | |||
| compromised. Holding on to a limited number of old keys allows clients | compromised. Holding on to a limited number of old keys allows clients | |||
| to seamlessly transition from one generation to the next without having | to seamlessly transition from one generation to the next without having | |||
| to perform a new NTS-KE handshake. | to perform a new NTS-KE handshake. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The need to keep keys synchronized between NTS-KE and NTP servers as | The need to keep keys synchronized between NTS-KE and NTP servers as | |||
| well as across load-balanced clusters can make automatic key rotation | well as across load-balanced clusters can make automatic key rotation | |||
| challenging. However, the task can be accomplished without the need for | challenging. However, the task can be accomplished without the need for | |||
| central key-management infrastructure by using a ratchet, i.e., making | central key-management infrastructure by using a ratchet, i.e., making | |||
| each new key a deterministic, cryptographically pseudo-random function | each new key a deterministic, cryptographically pseudorandom function | |||
| of its predecessor. A recommended concrete implementation of this | of its predecessor. A recommended concrete implementation of this | |||
| approach is to use <xref target="RFC5869">HKDF</xref> to derive new | approach is to use <xref target="RFC5869" format="default">HKDF</xref> t o derive new | |||
| keys, using the key's predecessor as Input Keying Material and its key | keys, using the key's predecessor as Input Keying Material and its key | |||
| identifier as a salt. | identifier as a salt. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| To form a cookie, servers should first form a plaintext `P` consisting | To form a cookie, servers should first form a plaintext 'P' consisting | |||
| of the following fields: | of the following fields: | |||
| <list> | ||||
| <t>The AEAD algorithm negotiated during NTS-KE.</t> | ||||
| <t>The S2C key.</t> | ||||
| <t>The C2S key.</t> | ||||
| </list> | ||||
| </t> | </t> | |||
| <ul empty="true" spacing="normal"> | ||||
| <li>The AEAD algorithm negotiated during NTS-KE.</li> | ||||
| <li>The S2C key.</li> | ||||
| <li>The C2S key.</li> | ||||
| </ul> | ||||
| <t> | <t> | |||
| Servers should then generate a nonce `N` uniformly at random, and form | Servers should then generate a nonce 'N' uniformly at random, and form | |||
| AEAD output `C` by encrypting `P` under key `K` with nonce `N` and no | AEAD output 'C' by encrypting 'P' under key 'K' with nonce 'N' and no | |||
| associated data. | associated data. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| The cookie should consist of the tuple `(I,N,C)`. | The cookie should consist of the tuple '(I,N,C)'. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| To verify and decrypt a cookie provided by the client, first parse it | To verify and decrypt a cookie provided by the client, first parse it | |||
| into its components `I`, `N`, and `C`. Use `I` to look up its decryption | into its components 'I', 'N', and 'C'. Use 'I' to look up its decryption | |||
| key `K`. If the key whose identifier is `I` has been erased or never | key 'K'. If the key whose identifier is 'I' has been erased or never | |||
| existed, decryption fails; reply with an NTS NAK. Otherwise, attempt to | existed, decryption fails; reply with an NTS NAK. Otherwise, attempt to | |||
| decrypt and verify ciphertext `C` using key `K` and nonce `N` with no | decrypt and verify ciphertext 'C' using key 'K' and nonce 'N' with no | |||
| associated data. If decryption or verification fails, reply with an NTS | associated data. If decryption or verification fails, reply with an NTS | |||
| NAK. Otherwise, parse out the contents of the resulting plaintext `P` to | NAK. Otherwise, parse out the contents of the resulting plaintext 'P' to | |||
| obtain the negotiated AEAD algorithm, S2C key, and C2S key. | obtain the negotiated AEAD algorithm, S2C key, and C2S key. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="iana-considerations" numbered="true" toc="default"> | ||||
| <section title="IANA Considerations" anchor="iana-considerations"> | <name>IANA Considerations</name> | |||
| <section title="Service Name and Transport Protocol Port Number Registry"> | <section numbered="true" toc="default"> | |||
| <t> | <name>Service Name and Transport Protocol Port Number Registry</name> | |||
| IANA is requested to allocate the following entry in the | ||||
| <xref target="RFC6335">Service Name and Transport Protocol | ||||
| Port Number Registry</xref>: | ||||
| <list> | ||||
| <t>Service Name: ntske</t> | ||||
| <t>Transport Protocol: tcp</t> | ||||
| <t>Assignee: IESG <iesg@ietf.org></t> | ||||
| <t>Contact: IETF Chair <chair@ietf.org></t> | ||||
| <t>Description: Network Time Security Key Establishment</t> | ||||
| <t>Reference: [[this memo]]</t> | ||||
| <t>Port Number: [[TBD1]], selected by IANA from the User Port | ||||
| range</t> | ||||
| </list> | ||||
| </t> | ||||
| <t> | <t> | |||
| [[RFC EDITOR: Replace all instances of [[TBD1]] in this | IANA has allocated the following entry in the | |||
| document with the IANA port assignment.]] | "Service Name and Transport Protocol | |||
| Port Number Registry" <xref target="RFC6335" format="default"/>: | ||||
| </t> | </t> | |||
| </section> | ||||
| <section title="TLS Application-Layer Protocol Negotiation (ALPN) Protocol | <dl newline="false" spacing="normal"> | |||
| IDs Registry"> | <dt>Service Name:</dt> <dd>ntske</dd> | |||
| <t> | <dt>Port Number:</dt> <dd>4460</dd> | |||
| IANA is requested to allocate the following entry in the | <dt>Transport Protocol:</dt> <dd>tcp</dd> | |||
| <xref target="RFC7301">TLS Application-Layer Protocol Negotiation | <dt>Description:</dt> <dd>Network Time Security Key Establishme | |||
| (ALPN) Protocol IDs registry</xref>: | nt</dd> | |||
| <list> | <dt>Assignee:</dt> <dd>IESG <iesg@ietf.org></dd> | |||
| <t>Protocol: Network Time Security Key Establishment, version 1</t> | <dt>Contact:</dt> <dd>IETF Chair <chair@ietf.org></dd | |||
| <t> | > | |||
| Identification Sequence:<vspace/> | <dt>Registration Date:</dt> <dd>2020-04-07</dd> | |||
| 0x6E 0x74 0x73 0x6B 0x65 0x2F | <dt>Reference:</dt> <dd>RFC 8915</dd> | |||
| 0x31 ("ntske/1") | </dl> | |||
| </t> | ||||
| <t>Reference: [[this memo]], <xref target="nts-ke"/></t> | ||||
| </list> | ||||
| </t> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="TLS Exporter Labels Registry"> | <name>TLS Application-Layer Protocol Negotiation (ALPN) Protocol IDs Reg | |||
| istry</name> | ||||
| <t> | <t> | |||
| IANA is requested to allocate the following entry in the | IANA has allocated the following entry in the | |||
| <xref target="RFC5705">TLS Exporter Labels Registry</xref>: | "TLS Application-Layer Protocol Negotiation | |||
| (ALPN) Protocol IDs" registry <xref target="RFC7301" format="default | ||||
| "/>: | ||||
| </t> | </t> | |||
| <texttable> | <dl newline="false" spacing="normal"> | |||
| <ttcol>Value</ttcol> | <dt>Protocol:</dt> <dd>Network Time Security Key Establishment, versio | |||
| <ttcol>DTLS-OK</ttcol> | n 1</dd> | |||
| <ttcol>Recommended</ttcol> | <dt>Identification Sequence:</dt> <dd>0x6E 0x74 0x73 0x6B 0x65 0x2F 0x | |||
| <ttcol>Reference</ttcol> | 31 ("ntske/1")</dd> | |||
| <ttcol>Note</ttcol> | <dt>Reference:</dt><dd>RFC 8915, <xref target="nts-ke" format="default | |||
| "/></dd> | ||||
| <c>EXPORTER-network- time-security</c> | </dl> | |||
| <c>Y</c> | ||||
| <c>Y</c> | ||||
| <c>[[this memo]], <xref target="key-extraction"/></c> | ||||
| <c/> | ||||
| </texttable> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="NTP Kiss-o'-Death Codes Registry"> | <name>TLS Exporter Labels Registry</name> | |||
| <t> | <t> | |||
| IANA is requested to allocate the following entry in the | IANA has allocated the following entry in the | |||
| <xref target="RFC5905">registry of NTP Kiss-o'-Death Codes</xref>: | <xref target="RFC5705" format="default">TLS Exporter Labels registry</ | |||
| xref>: | ||||
| </t> | </t> | |||
| <texttable> | ||||
| <ttcol>Code</ttcol> | ||||
| <ttcol>Meaning</ttcol> | ||||
| <ttcol>Reference</ttcol> | ||||
| <c>NTSN</c> | <table align="center"> | |||
| <c>Network Time Security (NTS) negative-acknowledgment (NAK)</c> | <thead> | |||
| <c>[[this memo]], <xref target="protocol-details"/></c> | <tr> | |||
| </texttable> | <th align="left">Value</th> | |||
| <th align="left">DTLS-OK</th> | ||||
| <th align="left">Recommended</th> | ||||
| <th align="left">Reference</th> | ||||
| <th align="left">Note</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td align="left">EXPORTER-network-time-security</td> | ||||
| <td align="left">Y</td> | ||||
| <td align="left">Y</td> | ||||
| <td align="left">RFC 8915, <xref target="key-extraction" format="d | ||||
| efault"/></td> | ||||
| <td align="left"/> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="NTP Extension Field Types Registry"> | <name>NTP Kiss-o'-Death Codes Registry</name> | |||
| <t> | <t> | |||
| IANA is requested to allocate the following entries in the | IANA has allocated the following entry in the | |||
| <xref target="RFC5905">NTP Extension Field Types registry</xref>: | "NTP Kiss-o'-Death Codes" | |||
| registry <xref target="RFC5905" format="default"/>: | ||||
| </t> | </t> | |||
| <texttable> | <table align="center"> | |||
| <ttcol>Field Type</ttcol> | <thead> | |||
| <ttcol>Meaning</ttcol> | <tr> | |||
| <ttcol>Reference</ttcol> | <th align="left">Code</th> | |||
| <th align="left">Meaning</th> | ||||
| <c>[[TBD2]]</c> | <th align="left">Reference</th> | |||
| <c>Unique Identifier</c> | </tr> | |||
| <c>[[this memo]], | </thead> | |||
| <xref target="unique-identifier-extension-field"/></c> | <tbody> | |||
| <tr> | ||||
| <c>[[TBD3]]</c> | <td align="left">NTSN</td> | |||
| <c>NTS Cookie</c> | <td align="left">Network Time Security (NTS) negative-acknowledgme | |||
| <c>[[this memo]], <xref target="nts-cookie-extension-field"/></c> | nt (NAK)</td> | |||
| <td align="left">RFC 8915, <xref target="protocol-details" format= | ||||
| <c>[[TBD4]]</c> | "default"/></td> | |||
| <c>NTS Cookie Placeholder</c> | </tr> | |||
| <c>[[this memo]], | </tbody> | |||
| <xref target="nts-cookie-placeholder-extension-field"/></c> | </table> | |||
| </section> | ||||
| <section numbered="true" toc="default"> | ||||
| <c>[[TBD5]]</c> | <name>NTP Extension Field Types Registry</name> | |||
| <c>NTS Authenticator and Encrypted Extension Fields</c> | ||||
| <c>[[this memo]], <xref target="nts-aeef-extension-field"/></c> | ||||
| </texttable> | ||||
| <t> | ||||
| [[RFC EDITOR: REMOVE BEFORE PUBLICATION - The NTP WG suggests that the | ||||
| following values be used: | ||||
| <figure> | ||||
| <artwork> | ||||
| Unique Identifier 0x0104 | ||||
| NTS Cookie 0x0204 | ||||
| Cookie Placeholder 0x0304 | ||||
| NTS Authenticator 0x0404]] | ||||
| </artwork> | ||||
| </figure> | ||||
| </t> | ||||
| <t> | <t> | |||
| [[RFC EDITOR: Replace all instances of [[TBD2]], [[TBD3]], [[TBD4]], a | IANA has allocated the following entries in the | |||
| nd | "NTP Extension Field Types" registry <xref target="RFC5905" format="de | |||
| [[TBD5]] in this document with the respective IANA assignments.]] | fault"/>: | |||
| </t> | </t> | |||
| <table align="center"> | ||||
| <thead> | ||||
| <tr> | ||||
| <th align="left">Field Type</th> | ||||
| <th align="left">Meaning</th> | ||||
| <th align="left">Reference</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td align="left">0x0104</td> | ||||
| <td align="left">Unique Identifier</td> | ||||
| <td align="left">RFC 8915, | ||||
| <xref target="unique-identifier-extension-field" format="default"/>< | ||||
| /td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">0x0204</td> | ||||
| <td align="left">NTS Cookie</td> | ||||
| <td align="left">RFC 8915, <xref target="nts-cookie-extension-fiel | ||||
| d" format="default"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">0x0304</td> | ||||
| <td align="left">NTS Cookie Placeholder</td> | ||||
| <td align="left">RFC 8915, | ||||
| <xref target="nts-cookie-placeholder-extension-field" format="defaul | ||||
| t"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">0x0404</td> | ||||
| <td align="left">NTS Authenticator and Encrypted Extension Fields< | ||||
| /td> | ||||
| <td align="left">RFC 8915, <xref target="nts-aeef-extension-field" | ||||
| format="default"/></td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Network Time Security Key Establishment Record Types Regis | <name>Network Time Security Key Establishment Record Types Registry</nam | |||
| try"> | e> | |||
| <t> | <t> | |||
| IANA is requested to create a new registry entitled | IANA has created a new registry entitled | |||
| "Network Time Security Key Establishment Record Types". | "Network Time Security Key Establishment Record Types". | |||
| Entries SHALL have the following fields: | Entries have the following fields: | |||
| <list> | </t> | |||
| <t> | <dl newline="false" spacing="normal"> | |||
| Record Type Number (REQUIRED): An integer in the range | <dt>Record Type Number (<bcp14>REQUIRED</bcp14>):</dt> <dd>An integer | |||
| 0–32767 inclusive. | in the range | |||
| </t> | 0-32767 inclusive. | |||
| <t> | </dd> | |||
| Description (REQUIRED): A short text description of the purpose of | <dt>Description (<bcp14>REQUIRED</bcp14>):</dt> <dd>A short text descr | |||
| iption of the purpose of | ||||
| the field. | the field. | |||
| </t> | </dd> | |||
| <t> | <dt>Reference (<bcp14>REQUIRED</bcp14>):</dt> <dd>A reference to a doc | |||
| Reference (REQUIRED): A reference to a document specifying the | ument specifying the | |||
| semantics of the record. | semantics of the record. | |||
| </t> | </dd> | |||
| </list> | </dl> | |||
| </t> | ||||
| <t> | <t> | |||
| The policy for allocation of new entries in this registry SHALL vary | The registration policy varies by Record Type Number, as follows: | |||
| by the Record Type Number, as follows: | ||||
| <list> | ||||
| <t>0–1023: IETF Review</t> | ||||
| <t>1024–16383: Specification Required</t> | ||||
| <t>16384–32767: Private and Experimental Use</t> | ||||
| </list> | ||||
| </t> | </t> | |||
| <dl newline="false" spacing="normal"> | ||||
| <dt>0-1023:</dt> <dd>IETF Review</dd> | ||||
| <dt>1024-16383:</dt> <dd>Specification Required</dd> | ||||
| <dt>16384-32767:</dt> <dd>Private or Experimental Use</dd> | ||||
| </dl> | ||||
| <t> | <t> | |||
| The initial contents of this registry SHALL be as follows: | The initial contents of this registry are as follows: | |||
| </t> | </t> | |||
| <texttable> | ||||
| <ttcol>Record Type Number</ttcol> | ||||
| <ttcol>Description</ttcol> | ||||
| <ttcol>Reference</ttcol> | ||||
| <c>0</c> | ||||
| <c>End of Message</c> | ||||
| <c>[[this memo]], <xref target="end-of-message"/></c> | ||||
| <c>1</c> | ||||
| <c>NTS Next Protocol Negotiation</c> | ||||
| <c>[[this memo]], | ||||
| <xref target="nts-next-protocol-negotiation"/></c> | ||||
| <c>2</c> | ||||
| <c>Error</c> | ||||
| <c>[[this memo]], <xref target="nts-error"/></c> | ||||
| <c>3</c> | ||||
| <c>Warning</c> | ||||
| <c>[[this memo]], <xref target="nts-warning"/></c> | ||||
| <c>4</c> | ||||
| <c>AEAD Algorithm Negotiation</c> | ||||
| <c>[[this memo]], <xref target="aead-algorithm-negotiation"/></c> | ||||
| <c>5</c> | ||||
| <c>New Cookie for NTPv4</c> | ||||
| <c>[[this memo]], <xref target="new-cookie-for-ntpv4"/></c> | ||||
| <c>6</c> | ||||
| <c>NTPv4 Server Negotiation</c> | ||||
| <c>[[this memo]], <xref target="ntp-server-negotiation"/></c> | ||||
| <c>7</c> | <table align="center"> | |||
| <c>NTPv4 Port Negotiation</c> | <thead> | |||
| <c>[[this memo]], <xref target="ntp-port-negotiation"/></c> | <tr> | |||
| <th align="left">Record Type Number</th> | ||||
| <c>16384–32767</c> | <th align="left">Description</th> | |||
| <c>Reserved for Private & Experimental Use</c> | <th align="left">Reference</th> | |||
| <c>[[this memo]]</c> | </tr> | |||
| </texttable> | </thead> | |||
| <tbody> | ||||
| <tr> | ||||
| <td align="left">0</td> | ||||
| <td align="left">End of Message</td> | ||||
| <td align="left">RFC 8915, <xref target="end-of-message" format="d | ||||
| efault"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">1</td> | ||||
| <td align="left">NTS Next Protocol Negotiation</td> | ||||
| <td align="left">RFC 8915, | ||||
| <xref target="nts-next-protocol-negotiation" format="default"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">2</td> | ||||
| <td align="left">Error</td> | ||||
| <td align="left">RFC 8915, <xref target="nts-error" format="defaul | ||||
| t"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">3</td> | ||||
| <td align="left">Warning</td> | ||||
| <td align="left">RFC 8915, <xref target="nts-warning" format="defa | ||||
| ult"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">4</td> | ||||
| <td align="left">AEAD Algorithm Negotiation</td> | ||||
| <td align="left">RFC 8915, <xref target="aead-algorithm-negotiatio | ||||
| n" format="default"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">5</td> | ||||
| <td align="left">New Cookie for NTPv4</td> | ||||
| <td align="left">RFC 8915, <xref target="new-cookie-for-ntpv4" for | ||||
| mat="default"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">6</td> | ||||
| <td align="left">NTPv4 Server Negotiation</td> | ||||
| <td align="left">RFC 8915, <xref target="ntp-server-negotiation" f | ||||
| ormat="default"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">7</td> | ||||
| <td align="left">NTPv4 Port Negotiation</td> | ||||
| <td align="left">RFC 8915, <xref target="ntp-port-negotiation" for | ||||
| mat="default"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">8-16383</td> | ||||
| <td align="left">Unassigned</td> | ||||
| <td align="left"/> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">16384-32767</td> | ||||
| <td align="left">Reserved for Private or Experimental Use</td> | ||||
| <td align="left">RFC 8915</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | </section> | |||
| <section numbered="true" anchor="iana-nts-next-protocols" toc="default"> | ||||
| <section title="Network Time Security Next Protocols Registry"> | <name>Network Time Security Next Protocols Registry</name> | |||
| <t> | <t> | |||
| IANA is requested to create a new registry entitled | IANA has created a new registry entitled | |||
| "Network Time Security Next Protocols". Entries SHALL have | "Network Time Security Next Protocols". Entries have | |||
| the following fields: | the following fields: | |||
| <list> | </t> | |||
| <t> | <dl newline="false" spacing="normal"> | |||
| Protocol ID (REQUIRED): An integer in the range 0-65535 inclusive, | <dt>Protocol ID (<bcp14>REQUIRED</bcp14>):</dt> <dd>An integer in the | |||
| range 0-65535 inclusive, | ||||
| functioning as an identifier. | functioning as an identifier. | |||
| </t> | </dd> | |||
| <t> | <dt>Protocol Name (<bcp14>REQUIRED</bcp14>):</dt> <dd>A short text str | |||
| Protocol Name (REQUIRED): A short text string naming the protocol | ing naming the protocol | |||
| being identified. | being identified. | |||
| </t> | </dd> | |||
| <t> | <dt>Reference (<bcp14>REQUIRED</bcp14>):</dt> <dd> A reference to a re | |||
| Reference (REQUIRED): A reference to a relevant specification | levant specification | |||
| document. | document. | |||
| </t> | </dd> | |||
| </list> | </dl> | |||
| The policy for allocation of new entries in these registries | <t> | |||
| SHALL vary by their Protocol ID, as follows: | The registration policy varies by Protocol ID, as follows: | |||
| <list> | ||||
| <t>0–1023: IETF Review</t> | ||||
| <t>1024–32767: Specification Required</t> | ||||
| <t>32768–65535: Private and Experimental Use</t> | ||||
| </list> | ||||
| </t> | </t> | |||
| <dl newline="false" spacing="normal"> | ||||
| <dt>0-1023:</dt> <dd>IETF Review</dd> | ||||
| <dt>1024-32767:</dt> <dd>Specification Required</dd> | ||||
| <dt>32768-65535:</dt> <dd>Private or Experimental Use</dd> | ||||
| </dl> | ||||
| <t> | <t> | |||
| The initial contents of this registry SHALL be as follows: | The initial contents of this registry are as follows: | |||
| </t> | </t> | |||
| <texttable> | ||||
| <ttcol>Protocol ID</ttcol> | ||||
| <ttcol>Protocol Name</ttcol> | ||||
| <ttcol>Reference</ttcol> | ||||
| <c>0</c> | <table align="center"> | |||
| <c>Network Time Protocol version 4 (NTPv4)</c> | <thead> | |||
| <c>[[this memo]]</c> | <tr> | |||
| <th align="left">Protocol ID</th> | ||||
| <c>32768-65535</c> | <th align="left">Protocol Name</th> | |||
| <c>Reserved for Private or Experimental Use</c> | <th align="left">Reference</th> | |||
| <c>Reserved by [[this memo]]</c> | </tr> | |||
| </texttable> | </thead> | |||
| <tbody> | ||||
| <tr> | ||||
| <td align="left">0</td> | ||||
| <td align="left">Network Time Protocol version 4 (NTPv4)</td> | ||||
| <td align="left">RFC 8915</td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">1-32767</td> | ||||
| <td align="left">Unassigned</td> | ||||
| <td align="left"/> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">32768-65535</td> | ||||
| <td align="left">Reserved for Private or Experimental Use</td> | ||||
| <td align="left">RFC 8915</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Network Time Security Error and Warning Codes Registries"> | <name>Network Time Security Error and Warning Codes Registries</name> | |||
| <t> | <t> | |||
| IANA is requested to create two new registries entitled | IANA has created two new registries entitled | |||
| "Network Time Security Error Codes" and | "Network Time Security Error Codes" and | |||
| "Network Time Security Warning Codes". Entries in each SHALL | "Network Time Security Warning Codes". Entries in each | |||
| have the following fields: | have the following fields: | |||
| <list> | ||||
| <t>Number (REQUIRED): An integer in the range 0-65535 inclusive</t> | ||||
| <t>Description (REQUIRED): A short text description of the | ||||
| condition.</t> | ||||
| <t>Reference (REQUIRED): A reference to a relevant specification | ||||
| document.</t> | ||||
| </list> | ||||
| The policy for allocation of new entries in these registries SHALL | ||||
| vary by their Number, as follows: | ||||
| <list> | ||||
| <t>0–1023: IETF Review</t> | ||||
| <t>1024–32767: Specification Required</t> | ||||
| <t>32768–65535: Private and Experimental Use</t> | ||||
| </list> | ||||
| </t> | </t> | |||
| <dl newline="false" spacing="normal"> | ||||
| <dt>Number (<bcp14>REQUIRED</bcp14>):</dt> <dd>An integer in the | ||||
| range 0-65535 inclusive</dd> | ||||
| <dt>Description (<bcp14>REQUIRED</bcp14>):</dt> <dd>A short text descr | ||||
| iption of the | ||||
| condition.</dd> | ||||
| <dt>Reference (<bcp14>REQUIRED</bcp14>):</dt> <dd>A reference to a r | ||||
| elevant specification | ||||
| document.</dd> | ||||
| </dl> | ||||
| <t> | <t> | |||
| The initial contents of the Network Time Security Error Codes Registry | The registration policy varies by Number, as follows: | |||
| SHALL be as follows: | ||||
| </t> | </t> | |||
| <texttable> | <dl newline="false" spacing="normal"> | |||
| <ttcol>Number</ttcol> | <dt>0-1023:</dt> <dd>IETF Review</dd> | |||
| <ttcol>Description</ttcol> | <dt>1024-32767:</dt> <dd>Specification Required</dd> | |||
| <ttcol>Reference</ttcol> | <dt>32768-65535:</dt> <dd>Private or Experimental Use</dd> | |||
| </dl> | ||||
| <c>0</c> | ||||
| <c>Unrecognized Critical Extension</c> | ||||
| <c>[[this memo]], <xref target="nts-error"/></c> | ||||
| <c>1</c> | ||||
| <c>Bad Request</c> | ||||
| <c>[[this memo]], <xref target="nts-error"/></c> | ||||
| <c>2</c> | ||||
| <c>Internal Server Error</c> | ||||
| <c>[[this memo]], <xref target="nts-error"/></c> | ||||
| <c>32768-65535</c> | ||||
| <c>Reserved for Private or Experimental Use</c> | ||||
| <c>Reserved by [[this memo]]</c> | ||||
| </texttable> | ||||
| <t> | <t> | |||
| The Network Time Security Warning Codes Registry SHALL | The initial contents of the "Network Time Security Error Codes" regist | |||
| initially be empty except for the reserved range, i.e.: | ry | |||
| </t> | are as follows: | |||
| <texttable> | ||||
| <ttcol>Number</ttcol> | ||||
| <ttcol>Description</ttcol> | ||||
| <ttcol>Reference</ttcol> | ||||
| <c>32768-65535</c> | ||||
| <c>Reserved for Private or Experimental Use</c> | ||||
| <c>Reserved by [[this memo]]</c> | ||||
| </texttable> | ||||
| </section> | ||||
| </section> | ||||
| <section title="Implementation Status - RFC EDITOR: REMOVE BEFORE PUBLICATIO | ||||
| N"> | ||||
| <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 RFC 7942. 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>According to RFC 7942, "this will allow reviewers and working groups | ||||
| to assign due consideration to documents that have the benefit of | ||||
| running code, which may serve as evidence of valuable experimentation | ||||
| and feedback that have made the implemented protocols more mature. It is | ||||
| up to the individual working groups to use this information as they see | ||||
| fit".</t> | ||||
| <section title="Implementation 1"> | ||||
| <t>Organization: Ostfalia University of Applied Science</t> | ||||
| <t>Implementor: Martin Langer</t> | ||||
| <t>Maturity: Proof-of-Concept Prototype</t> | ||||
| <t>This implementation was used to verify consistency and to ensure | ||||
| completeness of this specification.</t> | ||||
| <section title="Coverage"> | ||||
| <t>This implementation covers the complete specification.</t> | ||||
| </section> | ||||
| <section title="Licensing"> | ||||
| <t>The code is released under a Apache License 2.0 license. </t> | ||||
| <t>The source code is available at: | ||||
| https://gitlab.com/MLanger/nts/</t> | ||||
| </section> | ||||
| <section title="Contact Information"> | ||||
| <t>Contact Martin Langer: mart.langer@ostfalia.de</t> | ||||
| </section> | ||||
| <section title="Last Update"> | ||||
| <t>The implementation was updated 25. February 2019.</t> | ||||
| </section> | ||||
| </section> | ||||
| <section title="Implementation 2"> | ||||
| <t>Organization: Netnod</t> | ||||
| <t>Implementor: Christer Weinigel</t> | ||||
| <t>Maturity: Proof-of-Concept Prototype</t> | ||||
| <t>This implementation was used to verify consistency and to ensure | ||||
| completeness of this specification. </t> | ||||
| <section title="Coverage"> | ||||
| <t>This implementation covers the complete specification.</t> | ||||
| </section> | ||||
| <section title="Licensing"> | ||||
| <t>The source code is available at: | ||||
| https://github.com/Netnod/nts-poc-python.</t> | ||||
| <t>See LICENSE file for details on licensing (BSD 2).</t> | ||||
| </section> | ||||
| <section title="Contact Information"> | ||||
| <t>Contact Christer Weinigel: christer@weinigel.se</t> | ||||
| </section> | ||||
| <section title="Last Update"> | ||||
| <t>The implementation was updated 31. January 2019.</t> | ||||
| </section> | ||||
| </section> | ||||
| <section title="Implementation 3"> | ||||
| <t>Organization: Red Hat</t> | ||||
| <t>Implementor: Miroslav Lichvar</t> | ||||
| <t>Maturity: Prototype</t> | ||||
| <t>This implementation was used to verify consistency and to ensure | ||||
| completeness of this specification. </t> | ||||
| <section title="Coverage"> | ||||
| <t>This implementation covers the complete specification.</t> | ||||
| </section> | ||||
| <section title="Licensing"> | ||||
| <t>Licensing is GPLv2.</t> | ||||
| <t>The source code is available at: | ||||
| https://github.com/mlichvar/chrony-nts</t> | ||||
| </section> | ||||
| <section title="Contact Information"> | ||||
| <t>Contact Miroslav Lichvar: mlichvar@redhat.com</t> | ||||
| </section> | ||||
| <section title="Last Update"> | ||||
| <t>The implementation was updated 28. March 2019.</t> | ||||
| </section> | ||||
| </section> | ||||
| <section title="Implementation 4"> | ||||
| <t>Organization: NTPsec</t> | ||||
| <t>Implementor: Hal Murray and NTPsec team</t> | ||||
| <t>Maturity:Looking for testers. Servers running at ntp1.glypnod.com:123 | ||||
| and ntp2.glypnod.com:123 </t> | ||||
| <t>This implementation was used to verify consistency and to ensure | ||||
| completeness of this specification. </t> | ||||
| <section title="Coverage"> | ||||
| <t>This implementation covers the complete specification.</t> | ||||
| </section> | ||||
| <section title="Licensing"> | ||||
| <t>The source code is available at: https://gitlab.com/NTPsec/ntpsec. | ||||
| Licensing details in LICENSE.</t> | ||||
| </section> | ||||
| <section title="Contact Information"> | ||||
| <t>Contact Hal Murray: hmurray@megapathdsl.net, devel@ntpsec.org</t> | ||||
| </section> | ||||
| <section title="Last Update"> | ||||
| <t>The implementation was updated 2019-Apr-10.</t> | ||||
| </section> | ||||
| </section> | ||||
| <section title="Implementation 5"> | ||||
| <t>Organization: Cloudflare</t> | ||||
| <t>Implementor: Watson Ladd</t> | ||||
| <t>Maturity: </t> | ||||
| <t>This implementation was used to verify consistency and to ensure | ||||
| completeness of this specification. </t> | ||||
| <section title="Coverage"> | ||||
| <t>This implementation covers the server side of the | ||||
| NTS specification.</t> | ||||
| </section> | ||||
| <section title="Licensing"> | ||||
| <t>The source code is available at: | ||||
| https://github.com/wbl/nts-rust</t> | ||||
| <t>Licensing is ISC (details see LICENSE.txt file).</t> | ||||
| </section> | ||||
| <section title="Contact Information"> | ||||
| <t>Contact Watson Ladd: watson@cloudflare.com</t> | ||||
| </section> | ||||
| <section title="Last Update"> | ||||
| <t>The implementation was updated 21. March 2019.</t> | ||||
| </section> | ||||
| </section> | ||||
| <section title="Implementation 6"> | ||||
| <t>Organization: Hacklunch, independent</t> | ||||
| <t>Implementor: Michael Cardell Widerkrantz, Daniel Lublin, | ||||
| Martin Samuelsson et. al.</t> | ||||
| <t>Maturity: interoperable client, immature server</t> | ||||
| <section title="Coverage"> | ||||
| <t>NTS-KE client and server.</t> | ||||
| </section> | ||||
| <section title="Licensing"> | ||||
| <t>Licensing is ISC (details in LICENSE file).</t> | ||||
| <t>Source code is available at: | ||||
| https://gitlab.com/hacklunch/ntsclient</t> | ||||
| </section> | ||||
| <section title="Contact Information"> | ||||
| <t>Contact Michael Cardell Widerkrantz: mc@netnod.se</t> | ||||
| </section> | ||||
| <section title="Last Update"> | ||||
| <t>The implementation was updated 6. February 2020.</t> | ||||
| </section> | ||||
| </section> | ||||
| <section title="Interoperability "> | ||||
| <t>The Interoperability tests distinguished between NTS key | ||||
| establishment protocol and NTS time exchange messages. | ||||
| For the implementations 1, 2, 3, and 4 pairwise interoperability of | ||||
| the NTS key establishment protocol and exchange | ||||
| of NTS protected NTP messages have been verified successfully. | ||||
| The implementation 2 was able to successfully perform the key establishm | ||||
| ent | ||||
| protocol against the server side of the implementation 5. | ||||
| </t> | </t> | |||
| <t>These tests successfully | <table align="center"> | |||
| demonstrate that there are at least four running implementations | <thead> | |||
| of this draft which are able to interoperate. | <tr> | |||
| <th align="left">Number</th> | ||||
| <th align="left">Description</th> | ||||
| <th align="left">Reference</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td align="left">0</td> | ||||
| <td align="left">Unrecognized Critical Record</td> | ||||
| <td align="left">RFC 8915, <xref target="nts-error" format="defaul | ||||
| t"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">1</td> | ||||
| <td align="left">Bad Request</td> | ||||
| <td align="left">RFC 8915, <xref target="nts-error" format="defaul | ||||
| t"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">2</td> | ||||
| <td align="left">Internal Server Error</td> | ||||
| <td align="left">RFC 8915, <xref target="nts-error" format="defaul | ||||
| t"/></td> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">3-32767</td> | ||||
| <td align="left">Unassigned</td> | ||||
| <td align="left"/> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">32768-65535</td> | ||||
| <td align="left">Reserved for Private or Experimental Use</td> | ||||
| <td align="left">RFC 8915</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| <t> | ||||
| The "Network Time Security Warning Codes" registry is | ||||
| initially empty except for the reserved range, i.e.: | ||||
| </t> | </t> | |||
| <table align="center"> | ||||
| <thead> | ||||
| <tr> | ||||
| <th align="left">Number</th> | ||||
| <th align="left">Description</th> | ||||
| <th align="left">Reference</th> | ||||
| </tr> | ||||
| </thead> | ||||
| <tbody> | ||||
| <tr> | ||||
| <td align="left">0-32767</td> | ||||
| <td align="left">Unassigned</td> | ||||
| <td align="left"/> | ||||
| </tr> | ||||
| <tr> | ||||
| <td align="left">32768-65535</td> | ||||
| <td align="left">Reserved for Private or Experimental Use</td> | ||||
| <td align="left">RFC 8915</td> | ||||
| </tr> | ||||
| </tbody> | ||||
| </table> | ||||
| </section> | </section> | |||
| </section> | </section> | |||
| <section title="Security Considerations"> | <section numbered="true" toc="default"> | |||
| <section title="Protected Modes"> | <name>Security Considerations</name> | |||
| <section numbered="true" toc="default"> | ||||
| <name>Protected Modes</name> | ||||
| <t> | <t> | |||
| NTP provides many different operating modes in order to support differ ent | NTP provides many different operating modes in order to support differ ent | |||
| network topologies and to adapt to various requirements. This memo onl y | network topologies and to adapt to various requirements. This memo onl y | |||
| specifies NTS for NTP modes 3 (client) and 4 (server) (see | specifies NTS for NTP modes 3 (client) and 4 (server) (see | |||
| <xref target="sec-protocol-overview" />). The best current practice fo r | <xref target="sec-protocol-overview" format="default"/>). The best cur rent practice for | |||
| authenticating the other NTP modes is using the symmetric message | authenticating the other NTP modes is using the symmetric message | |||
| authentication code feature as described in | authentication code feature as described in | |||
| <xref target="RFC5905">RFC 5905</xref> and | <xref target="RFC5905" format="default">RFC 5905</xref> and | |||
| <xref target="RFC8573">RFC 8573</xref>. | <xref target="RFC8573" format="default">RFC 8573</xref>. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Cookie Encryption Key Compromise"> | <section numbered="true" toc="default"> | |||
| <name>Cookie Encryption Key Compromise</name> | ||||
| <t> | <t> | |||
| If the suggested format | If the suggested format | |||
| for NTS cookies in <xref target="suggested-format-for-nts-cookies" /> | for NTS cookies in <xref target="suggested-format-for-nts-cookies" for | |||
| of this draft is used, an attacker who has gained | mat="default"/> | |||
| access to the secret cookie encryption key `K` can impersonate | of this document is used, an attacker who has gained | |||
| access to the secret cookie encryption key 'K' can impersonate | ||||
| the NTP server, including generating new cookies. | the NTP server, including generating new cookies. | |||
| NTP and NTS-KE server operators SHOULD remove compromised keys as soon | NTP and NTS-KE server operators <bcp14>SHOULD</bcp14> remove compromis ed keys as soon | |||
| as the compromise is discovered. This will cause the NTP servers to | as the compromise is discovered. This will cause the NTP servers to | |||
| respond with NTS NAK, thus forcing key renegotiation. Note that this | respond with NTS NAK, thus forcing key renegotiation. Note that this | |||
| measure does not protect against MITM attacks where the attacker has a ccess | measure does not protect against MITM attacks where the attacker has a ccess | |||
| to a compromised cookie encryption key. If another cookie scheme is us ed, | to a compromised cookie encryption key. If another cookie scheme is us ed, | |||
| there are likely similar considerations for that particular scheme. | there are likely similar considerations for that particular scheme. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="Sensitivity to DDoS Attacks"> | <section numbered="true" toc="default"> | |||
| <name>Sensitivity to DDoS Attacks</name> | ||||
| <t> | <t> | |||
| The introduction of NTS brings with it the introduction of asymmetric | The introduction of NTS brings with it the introduction of asymmetric | |||
| cryptography to NTP. Asymmetric cryptography is necessary for initial | cryptography to NTP. Asymmetric cryptography is necessary for initial | |||
| server authentication and AEAD key extraction. Asymmetric | server authentication and AEAD key extraction. Asymmetric | |||
| cryptosystems are generally orders of magnitude slower than their | cryptosystems are generally orders of magnitude slower than their | |||
| symmetric counterparts. This makes it much harder to build systems | symmetric counterparts. This makes it much harder to build systems | |||
| that can serve requests at a rate corresponding to the full line speed | that can serve requests at a rate corresponding to the full line speed | |||
| of the network connection. This, in turn, opens up a new possibility | of the network connection. This, in turn, opens up a new possibility | |||
| for DDoS attacks on NTP services. | for DDoS attacks on NTP services. | |||
| </t> | </t> | |||
| skipping to change at line 1954 ¶ | skipping to change at line 1805 ¶ | |||
| phase of the protocol. Since the protocol design enables separation of | phase of the protocol. Since the protocol design enables separation of | |||
| the NTS-KE and NTP servers, a successful DDoS attack on an NTS-KE | the NTS-KE and NTP servers, a successful DDoS attack on an NTS-KE | |||
| server separated from the NTP service it supports will not affect NTP | server separated from the NTP service it supports will not affect NTP | |||
| users that have already performed initial authentication, AEAD key | users that have already performed initial authentication, AEAD key | |||
| extraction, and cookie exchange. | extraction, and cookie exchange. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| NTS users should also consider that they are not fully protected | NTS users should also consider that they are not fully protected | |||
| against DoS attacks by on-path adversaries. In addition to dropping | against DoS attacks by on-path adversaries. In addition to dropping | |||
| packets and attacks such as those described in | packets and attacks such as those described in | |||
| <xref target="DelayAttack"/>, an on-path attacker can send spoofed | <xref target="DelayAttack" format="default"/>, an on-path attacker can | |||
| kiss-o'-death replies, which are not authenticated, in response to NTP | send spoofed | |||
| Kiss-o'-Death replies, which are not authenticated, in response to NTP | ||||
| requests. This could result in significantly increased load on the | requests. This could result in significantly increased load on the | |||
| NTS-KE server. Implementers have to weigh the user's need for | NTS-KE server. Implementers have to weigh the user's need for | |||
| unlinkability against the added resilience that comes with cookie | unlinkability against the added resilience that comes with cookie | |||
| reuse in cases of NTS-KE server unavailability. | reuse in cases of NTS-KE server unavailability. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Avoiding DDoS Amplification"> | <name>Avoiding DDoS Amplification</name> | |||
| <t> | <t> | |||
| Certain non-standard and/or deprecated features of the Network Time | Certain nonstandard and/or deprecated features of the Network Time | |||
| Protocol enable clients to send a request to a server which causes the | Protocol enable clients to send a request to a server that causes the | |||
| server to send a response much larger than the request. Servers which | server to send a response much larger than the request. Servers that | |||
| enable these features can be abused in order to amplify traffic volume | enable these features can be abused in order to amplify traffic volume | |||
| in DDoS attacks by sending them a request with a spoofed source IP. In | in DDoS attacks by sending them a request with a spoofed source IP add | |||
| recent years, attacks of this nature have become an endemic nuisance. | ress. | |||
| In recent years, attacks of this nature have become an endemic nuisanc | ||||
| e. | ||||
| </t> | </t> | |||
| <t> | <t> | |||
| NTS is designed to avoid contributing any further to this problem by | NTS is designed to avoid contributing any further to this problem by | |||
| ensuring that NTS-related extension fields included in server | ensuring that NTS-related extension fields included in server | |||
| responses will be the same size as the NTS-related extension fields | responses will be the same size as the NTS-related extension fields | |||
| sent by the client. In particular, this is why the client is required | sent by the client. In particular, this is why the client is required | |||
| to send a separate and appropriately padded-out NTS Cookie Placeholder | to send a separate and appropriately padded-out NTS Cookie Placeholder | |||
| extension field for every cookie it wants to get back, rather than | extension field for every cookie it wants to get back, rather than | |||
| being permitted simply to specify a desired quantity. | being permitted simply to specify a desired quantity. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Due to the <xref target="RFC7822">RFC 7822</xref> requirement that | Due to the <xref target="RFC7822" format="default">RFC 7822</xref> req uirement that | |||
| extensions be padded and aligned to four-octet boundaries, response | extensions be padded and aligned to four-octet boundaries, response | |||
| size may still in some cases exceed request size by up to three | size may still in some cases exceed request size by up to three | |||
| octets. This is sufficiently inconsequential that we have declined to | octets. This is sufficiently inconsequential that we have declined to | |||
| address it. | address it. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section anchor="sec-cert-verification" numbered="true" toc="default"> | ||||
| <section title="Initial Verification of Server Certificates" | <name>Initial Verification of Server Certificates</name> | |||
| anchor="sec-cert-verification"> | ||||
| <t> | <t> | |||
| NTS's security goals are undermined if the client fails to verify that | NTS's security goals are undermined if the client fails to verify that | |||
| the X.509 certificate chain presented by the NTS-KE server is valid | the X.509 certificate chain presented by the NTS-KE server is valid | |||
| and rooted in a trusted certificate authority. <xref | and rooted in a trusted certificate authority. <xref target="RFC5280" | |||
| target="RFC5280">RFC 5280</xref> and <xref target="RFC6125"> RFC | format="default">RFC 5280</xref> and <xref target="RFC6125" format="default"> RF | |||
| C | ||||
| 6125</xref> specify how such verification is to be performed in | 6125</xref> specify how such verification is to be performed in | |||
| general. However, the expectation that the client does not yet have a | general. However, the expectation that the client does not yet have a | |||
| correctly-set system clock at the time of certificate verification | correctly-set system clock at the time of certificate verification | |||
| presents difficulties with verifying that the certificate is within | presents difficulties with verifying that the certificate is within | |||
| its validity period, i.e., that the current time lies between the | its validity period, i.e., that the current time lies between the | |||
| times specified in the certificate's notBefore and notAfter fields. It | times specified in the certificate's notBefore and notAfter fields. It | |||
| may be operationally necessary in some cases for a client to accept a | may be operationally necessary in some cases for a client to accept a | |||
| certificate which appears to be expired or not yet valid. While there | certificate that appears to be expired or not yet valid. While there | |||
| is no perfect solution to this problem, there are several mitigations | is no perfect solution to this problem, there are several mitigations | |||
| the client can implement to make it more difficult for an adversary to | the client can implement to make it more difficult for an adversary to | |||
| successfully present an expired certificate: | successfully present an expired certificate: | |||
| <list> | </t> | |||
| <t> | <ul empty="true" spacing="normal"> | |||
| <li> | ||||
| Check whether the system time is in fact unreliable. On systems | Check whether the system time is in fact unreliable. On systems | |||
| with the ntp_adjtime() system call, a return code other than | with the ntp_adjtime() system call, a return code other than | |||
| TIME_ERROR indicates that some trusted software has already set | TIME_ERROR indicates that some trusted software has already set | |||
| the time and certificates can be strictly validated. | the time and certificates can be strictly validated. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Allow the system administrator to specify that certificates should | Allow the system administrator to specify that certificates should | |||
| *always* be strictly validated. Such a configuration is | <em>always</em> be strictly validated. Such a configuration is | |||
| appropriate on systems which have a battery-backed clock and which | appropriate on systems that have a battery-backed clock or that | |||
| can reasonably prompt the user to manually set an | can reasonably prompt the user to manually set an | |||
| approximately-correct time if it appears to be needed. | approximately correct time if it appears to be needed. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Once the clock has been synchronized, periodically write the | Once the clock has been synchronized, periodically write the | |||
| current system time to persistent storage. Do not accept any | current system time to persistent storage. Do not accept any | |||
| certificate whose notAfter field is earlier than the last recorded | certificate whose notAfter field is earlier than the last recorded | |||
| time. | time. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| NTP time replies are expected to be consistent with the NTS-KE TLS | NTP time replies are expected to be consistent with the NTS-KE TLS | |||
| certificate validity period, i.e. time replies received immediatel y after | certificate validity period, i.e. time replies received immediatel y after | |||
| an NTS-KE handshake are expected to lie within the certificate val idity | an NTS-KE handshake are expected to lie within the certificate val idity | |||
| period. | period. | |||
| Implementations are recommended to check that this is the case. | Implementations are recommended to check that this is the case. | |||
| Performing a new NTS-KE handshake based solely on the fact that th e | Performing a new NTS-KE handshake based solely on the fact that th e | |||
| certificate used by the NTS-KE server in a previous handshake has expired | certificate used by the NTS-KE server in a previous handshake has expired | |||
| is normally not necessary. | is normally not necessary. | |||
| Clients that still wish to do this must take care not to cause an | Clients that still wish to do this must take care not to cause an | |||
| inadvertent denial-of-service attack on the NTS-KE server, for exa mple by | inadvertent denial-of-service attack on the NTS-KE server, for exa mple by | |||
| picking a random time in the week preceding certificate expiry to perform | picking a random time in the week preceding certificate expiry to perform | |||
| the new handshake. | the new handshake. | |||
| </t> | </li> | |||
| <t> | <li> | |||
| Use multiple time sources. The ability to pass off an expired | Use multiple time sources. The ability to pass off an expired | |||
| certificate is only useful to an adversary who has compromised the | certificate is only useful to an adversary who has compromised the | |||
| corresponding private key. If the adversary has compromised only a | corresponding private key. If the adversary has compromised only a | |||
| minority of servers, NTP's selection algorithm (<xref | minority of servers, NTP's selection algorithm (Section | |||
| target="RFC5905">RFC 5905 section 11.2.1</xref>) will protect the | <xref target="RFC5905" section="11.2.1" sectionFormat="bare" forma | |||
| t="default"/> | ||||
| of <xref target="RFC5905" format="default">RFC 5905</xref>) will p | ||||
| rotect the | ||||
| client from accepting bad time from the adversary-controlled | client from accepting bad time from the adversary-controlled | |||
| servers. | servers. | |||
| </t> | </li> | |||
| </list> | </ul> | |||
| </t> | ||||
| </section> | </section> | |||
| <section anchor="DelayAttack" numbered="true" toc="default"> | ||||
| <section anchor="DelayAttack" title="Delay Attacks"> | <name>Delay Attacks</name> | |||
| <t> | <t> | |||
| In a packet delay attack, an adversary with the ability to act as a | In a packet delay attack, an adversary with the ability to act as a | |||
| man-in-the-middle delays time synchronization packets between client | man-in-the-middle delays time synchronization packets between client | |||
| and server asymmetrically <xref target="RFC7384"/>. Since NTP's | and server asymmetrically <xref target="RFC7384" format="default"/>. S ince NTP's | |||
| formula for computing time offset relies on the assumption that | formula for computing time offset relies on the assumption that | |||
| network latency is roughly symmetrical, this leads to the client to | network latency is roughly symmetrical, this leads to the client to | |||
| compute an inaccurate value <xref target="Mizrahi"/>. The delay attack | compute an inaccurate value <xref target="Mizrahi" format="default"/>. The delay attack | |||
| does not reorder or modify the content of the exchanged | does not reorder or modify the content of the exchanged | |||
| synchronization packets. Therefore, cryptographic means do not provide | synchronization packets. Therefore, cryptographic means do not provide | |||
| a feasible way to mitigate this attack. However, the maximum error | a feasible way to mitigate this attack. However, the maximum error | |||
| that an adversary can introduce is bounded by half of the round trip | that an adversary can introduce is bounded by half of the round-trip | |||
| delay. | delay. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| <xref target="RFC5905">RFC 5905</xref> specifies a parameter called | <xref target="RFC5905" format="default">RFC 5905</xref> specifies a pa | |||
| MAXDIST which denotes the maximum round-trip latency (including not | rameter called | |||
| MAXDIST, which denotes the maximum round-trip latency (including not | ||||
| only the immediate round trip between client and server, but the whole | only the immediate round trip between client and server, but the whole | |||
| distance back to the reference clock as reported in the Root Delay | distance back to the reference clock as reported in the Root Delay | |||
| field) that a client will tolerate before concluding that the server | field) that a client will tolerate before concluding that the server | |||
| is unsuitable for synchronization. The standard value for MAXDIST is | is unsuitable for synchronization. The standard value for MAXDIST is | |||
| one second, although some implementations use larger values. Whatever | one second, although some implementations use larger values. Whatever | |||
| value a client chooses, the maximum error which can be introduced by a | value a client chooses, the maximum error that can be introduced by a | |||
| delay attack is MAXDIST/2. | delay attack is MAXDIST/2. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Usage of multiple time sources, or multiple network paths to a given | Usage of multiple time sources, or multiple network paths to a given | |||
| time source <xref target="Shpiner"/>, may also serve to mitigate delay | time source <xref target="Shpiner" format="default"/>, may also serve to mitigate delay | |||
| attacks if the adversary is in control of only some of the paths. | attacks if the adversary is in control of only some of the paths. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| <section title="NTS Stripping"> | <section numbered="true" toc="default"> | |||
| <name>NTS Stripping</name> | ||||
| <t> | <t> | |||
| Implementers must be aware of the possibility of "NTS stripping" | Implementers must be aware of the possibility of "NTS stripping" | |||
| attacks, where an attacker attempts to trick clients into reverting to plain | attacks, where an attacker attempts to trick clients into reverting to plain | |||
| NTP. Naive client implementations might, for example, revert | NTP. Naive client implementations might, for example, revert | |||
| automatically to plain NTP if the NTS-KE handshake fails. A man-in-the -middle | automatically to plain NTP if the NTS-KE handshake fails. A man-in-the -middle | |||
| attacker can easily cause this to happen. Even clients that already | attacker can easily cause this to happen. Even clients that already | |||
| hold valid cookies can be vulnerable, since an attacker can force a | hold valid cookies can be vulnerable, since an attacker can force a | |||
| client to repeat the NTS-KE handshake by sending faked NTP mode 4 | client to repeat the NTS-KE handshake by sending faked NTP mode 4 | |||
| replies with the NTS NAK kiss code. Forcing a client to repeat the | replies with the NTS NAK kiss code. Forcing a client to repeat the | |||
| NTS-KE handshake can also be the first step in more advanced attacks. | NTS-KE handshake can also be the first step in more advanced attacks. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| For the reasons described here, implementations SHOULD NOT revert | For the reasons described here, implementations <bcp14>SHOULD NOT</bcp 14> revert | |||
| from NTS-protected to unprotected NTP with any server without | from NTS-protected to unprotected NTP with any server without | |||
| explicit user action. | explicit user action. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | </section> | |||
| <section numbered="true" toc="default"> | ||||
| <section title="Privacy Considerations"> | <name>Privacy Considerations</name> | |||
| <section title="Unlinkability" anchor="Unlinkability"> | <section anchor="Unlinkability" numbered="true" toc="default"> | |||
| <name>Unlinkability</name> | ||||
| <t>Unlinkability prevents a device from being tracked when it changes | <t>Unlinkability prevents a device from being tracked when it changes | |||
| network addresses (e.g. because said device moved between different | network addresses (e.g., because said device moved between different | |||
| networks). In other words, unlinkability thwarts an attacker that | networks). In other words, unlinkability thwarts an attacker that | |||
| seeks to link a new network address used by a device with a network | seeks to link a new network address used by a device with a network | |||
| address that it was formerly using, because of recognizable data that | address that it was formerly using because of recognizable data that | |||
| the device persistently sends as part of an NTS-secured NTP | the device persistently sends as part of an NTS-secured NTP | |||
| association. This is the justification for continually supplying the | association. This is the justification for continually supplying the | |||
| client with fresh cookies, so that a cookie never represents | client with fresh cookies, so that a cookie never represents | |||
| recognizable data in the sense outlined above. </t> | recognizable data in the sense outlined above. </t> | |||
| <t>NTS's unlinkability objective is merely to not leak any additional | <t>NTS's unlinkability objective is merely to not leak any additional | |||
| data that could be used to link a device's network address. NTS does | data that could be used to link a device's network address. NTS does | |||
| not rectify legacy linkability issues that are already present in NTP. | not rectify legacy linkability issues that are already present in NTP. | |||
| Thus, a client that requires unlinkability must also minimize | Thus, a client that requires unlinkability must also minimize | |||
| information transmitted in a client query (mode 3) packet as described | information transmitted in a client query (mode 3) packet as described | |||
| in the draft <xref target="I-D.ietf-ntp-data-minimization"/>. | in the document <xref target="I-D.ietf-ntp-data-minimization" format="de | |||
| fault"> | ||||
| NTP Client Data Minimization</xref>. | ||||
| </t> | </t> | |||
| <t>The unlinkability objective only holds for time synchronization | <t>The unlinkability objective only holds for time synchronization | |||
| traffic, as opposed to key establishment traffic. This implies that it | traffic, as opposed to key establishment traffic. This implies that it | |||
| cannot be guaranteed for devices that function not only as time | cannot be guaranteed for devices that function not only as time | |||
| clients, but also as time servers (because the latter can be externally | clients, but also as time servers (because the latter can be externally | |||
| triggered to send linkable data, such as the TLS certificate).</t> | triggered to send linkable data, such as the TLS certificate).</t> | |||
| <t>It should also be noted that it could be possible to link devices | <t>It should also be noted that it could be possible to link devices | |||
| that operate as time servers from their time synchronization traffic, | that operate as time servers from their time synchronization traffic, | |||
| using information exposed in (mode 4) server response packets (e.g. | using information exposed in (mode 4) server response packets (e.g. | |||
| reference ID, reference time, stratum, poll). Also, devices that | reference ID, reference time, stratum, poll). Also, devices that | |||
| respond to NTP control queries could be linked using the information | respond to NTP control queries could be linked using the information | |||
| revealed by control queries. </t> | revealed by control queries. </t> | |||
| <t>Note that the unlinkability objective does not prevent a client devic e | <t>Note that the unlinkability objective does not prevent a client devic e | |||
| to be tracked by its time servers.</t> | from being tracked by its time servers.</t> | |||
| </section> | </section> | |||
| <section title="Confidentiality"> | <section numbered="true" toc="default"> | |||
| <t> | <name>Confidentiality</name> | |||
| <t> | ||||
| NTS does not protect the confidentiality of information in | NTS does not protect the confidentiality of information in | |||
| NTP's header fields. When clients implement <xref | NTP's header fields. When clients implement | |||
| target="I-D.ietf-ntp-data-minimization"/>, client packet | <xref target="I-D.ietf-ntp-data-minimization" format="default"> | |||
| headers do not contain any information which the client | NTP Client Data Minimization</xref>, client packet | |||
| headers do not contain any information that the client | ||||
| could conceivably wish to keep secret: one field is random, | could conceivably wish to keep secret: one field is random, | |||
| and all others are fixed. Information in server packet | and all others are fixed. Information in server packet | |||
| headers is likewise public: the origin timestamp is copied | headers is likewise public: the origin timestamp is copied | |||
| from the client's (random) transmit timestamp, and all other | from the client's (random) transmit timestamp, and all other | |||
| fields are set the same regardless of the identity of the | fields are set the same regardless of the identity of the | |||
| client making the request. | client making the request. | |||
| </t> | </t> | |||
| <t> | <t> | |||
| Future extension fields could hypothetically contain | Future extension fields could hypothetically contain | |||
| sensitive information, in which case NTS provides a | sensitive information, in which case NTS provides a | |||
| mechanism for encrypting them. | mechanism for encrypting them. | |||
| </t> | </t> | |||
| </section> | </section> | |||
| </section> | ||||
| <section anchor="Acknowledgements" title="Acknowledgements"> | ||||
| <t>The authors would like to thank Richard Barnes, Steven | ||||
| Bellovin, Scott Fluhrer, Patrik Fältström (Faltstrom), | ||||
| Sharon Goldberg, Russ Housley, Benjamin Kaduk, Suresh Krishnan, Mirja | ||||
| Kühlewind (Kuehlewind), Martin Langer, Barry Leiba, Miroslav Lichvar, | ||||
| Aanchal Malhotra, Danny Mayer, Dave Mills, Sandra Murphy, Hal Murray, | ||||
| Karen O'Donoghue, Eric K. Rescorla, Kurt Roeckx, Stephen Roettger, Dan | ||||
| Romascanu, Kyle Rose, Rich Salz, Brian Sniffen, Susan Sons, Douglas | ||||
| Stebila, Harlan Stenn, Joachim Strömbergsson (Strombergsson), Martin | ||||
| Thomson, Éric (Eric) Vyncke, Richard Welty, Christer Weinigel, and | ||||
| Magnus Westerlund for contributions to this document and comments on the | ||||
| design of NTS.</t> | ||||
| </section> | </section> | |||
| </middle> | </middle> | |||
| <back> | <back> | |||
| <references title="Normative References"> | ||||
| <reference anchor="IANA-AEAD" target="https://www.iana.org/assignments/aea | ||||
| d-parameters/"> | ||||
| <front> | ||||
| <title> | ||||
| Authenticated Encryption with Associated Data (AEAD) Parameters | ||||
| </title> | ||||
| <author> | ||||
| <organization>IANA</organization> | ||||
| </author> | ||||
| <date /> | ||||
| </front> | ||||
| </reference> | ||||
| <?rfc include='reference.RFC.0020.xml'?> | ||||
| <?rfc include='reference.RFC.2119.xml'?> | ||||
| <?rfc include='reference.RFC.4291.xml'?> | ||||
| <?rfc include='reference.RFC.5116.xml'?> | ||||
| <?rfc include="reference.RFC.5280.xml'?> | ||||
| <?rfc include='reference.RFC.5297.xml'?> | ||||
| <?rfc include='reference.RFC.5705.xml'?> | ||||
| <?rfc include='reference.RFC.5869.xml'?> | ||||
| <?rfc include='reference.RFC.5890.xml'?> | ||||
| <?rfc include='reference.RFC.5905.xml'?> | ||||
| <?rfc include='reference.RFC.6125.xml'?> | ||||
| <?rfc include='reference.RFC.6335.xml'?> | ||||
| <?rfc include='reference.RFC.6874.xml'?> | ||||
| <?rfc include='reference.RFC.7301.xml'?> | ||||
| <?rfc include='reference.RFC.7525.xml'?> | ||||
| <?rfc include='reference.RFC.7822.xml'?> | ||||
| <?rfc include='reference.RFC.8174.xml'?> | ||||
| <?rfc include='reference.RFC.8446.xml'?> | ||||
| </references> | ||||
| <references title="Informative References"> | ||||
| <?rfc include='reference.I-D.draft-ietf-ntp-data-minimization-04.xml'?> | ||||
| <?rfc include='reference.RFC.4086.xml'?> | ||||
| <?rfc include='reference.RFC.5077.xml'?> | ||||
| <?rfc include='reference.RFC.7384.xml'?> | ||||
| <?rfc include='reference.RFC.8573.xml'?> | ||||
| <reference anchor="Mizrahi" target=""> | ||||
| <front> | ||||
| <title>A game theoretic analysis of delay attacks against time | ||||
| synchronization protocols</title> | ||||
| <author fullname="Tal Mizrahi" initials="T" surname="Mizrahi"> | <displayreference target="I-D.ietf-ntp-data-minimization" to="NTP-DATA-MIN"/> | |||
| <organization abbrev=""/> | ||||
| </author> | ||||
| <date day="" month="September" year="2012"/> | <references> | |||
| </front> | <name>References</name> | |||
| <references> | ||||
| <name>Normative References</name> | ||||
| <seriesInfo name="in Proceedings of" | <reference anchor="IANA-AEAD" target="https://www.iana.org/assignments/a | |||
| value="Precision Clock Synchronization for Measurement Contr | ead-parameters/"> | |||
| ol and Communication, ISPCS 2012, pp. 1-6, DOI 10.1109/ISPCS.2012.6336612"/ | <front> | |||
| > | <title> | |||
| </reference> | Authenticated Encryption with Associated Data (AEAD) Parameters | |||
| </title> | ||||
| <author> | ||||
| <organization>IANA</organization> | ||||
| </author> | ||||
| </front> | ||||
| </reference> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.0020.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.2119.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.4291.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.5116.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.5280.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.5297.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.5705.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.5869.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.5890.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.5905.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.6125.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.6335.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.6874.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7301.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7525.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.7822.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.8174.xml"/> | ||||
| <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | ||||
| ence.RFC.8446.xml"/> | ||||
| </references> | ||||
| <references> | ||||
| <name>Informative References</name> | ||||
| <reference anchor="Shpiner"> | <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D | |||
| <front> | .draft-ietf-ntp-data-minimization.xml"/> | |||
| <title>Multi-path Time Protocols</title> | ||||
| <author fullname="Alexander Shpiner" initials="A" surname="Shpiner"> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| <organization/> | ence.RFC.4086.xml"/> | |||
| </author> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| <author fullname="Yoram Revah" initials="Y" surname="Revah"> | ence.RFC.5077.xml"/> | |||
| <organization/> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| </author> | ence.RFC.7384.xml"/> | |||
| <author fullname="Tal Mizrahi" initials="T" surname="Mizrahi"> | <xi:include href="https://xml2rfc.tools.ietf.org/public/rfc/bibxml/refer | |||
| <organization/> | ence.RFC.8573.xml"/> | |||
| </author> | ||||
| <date month="September" year="2013"/> | <reference anchor="Mizrahi" target=""> | |||
| </front> | <front> | |||
| <title>A game theoretic analysis of delay attacks against time | ||||
| synchronization protocols</title> | ||||
| <author fullname="Tal Mizrahi" initials="T" surname="Mizrahi"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date day="" month="September" year="2012"/> | ||||
| </front> | ||||
| <seriesInfo name="DOI" value="10.1109/ISPCS.2012.6336612"/> | ||||
| <refcontent>2012 IEEE International Symposium on Precision Clock Synch | ||||
| ronization | ||||
| for Measurement, Control and Communication Proceedings, pp | ||||
| . 1-6</refcontent> | ||||
| </reference> | ||||
| <seriesInfo name="in Proceedings of" | <reference anchor="Shpiner"> | |||
| value="IEEE International Symposium on Precision Clock Synch | <front> | |||
| ronization for Measurement, Control and Communication (ISPCS), DOI 10.1109/ | <title>Multi-path Time Protocols</title> | |||
| ISPCS.2013.6644754"/> | <author fullname="Alexander Shpiner" initials="A" surname="Shpiner"> | |||
| </reference> | <organization/> | |||
| </author> | ||||
| <author fullname="Yoram Revah" initials="Y" surname="Revah"> | ||||
| <organization/> | ||||
| </author> | ||||
| <author fullname="Tal Mizrahi" initials="T" surname="Mizrahi"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="September" year="2013"/> | ||||
| </front> | ||||
| <seriesInfo name="DOI" value="10.1109/ISPCS.2013.6644754"/> | ||||
| <refcontent>2013 IEEE International Symposium on Precision Clock Synch | ||||
| ronization | ||||
| for Measurement, Control and Communication (ISPCS) Proceed | ||||
| ings, pp. 1-6</refcontent> | ||||
| </reference> | ||||
| </references> | ||||
| </references> | </references> | |||
| <section title="Terms and Abbreviations"> | <section anchor="Acknowledgments" numbered="false" toc="default"> | |||
| <t> | <name>Acknowledgments</name> | |||
| <list style="hanging"> | <t>The authors would like to thank <contact fullname="Richard Barnes"/>, | |||
| <t hangText="AEAD "><xref target="RFC5116">Authenticated Encryption | <contact fullname="Steven Bellovin"/>, <contact fullname="Scott Fluhrer"/> | |||
| with Associated Data</xref></t> | , | |||
| <t hangText="ALPN "><xref target="RFC7301">Application-Layer Protoco | <contact fullname="Patrik Fältström"/>, | |||
| l | <contact fullname="Sharon Goldberg"/>, <contact fullname="Russ Housley"/>, | |||
| Negotiation</xref></t> | <contact fullname="Benjamin Kaduk"/>, <contact fullname="Suresh Krishnan"/ | |||
| <t hangText="C2S ">Client-to-server</t> | >, | |||
| <t hangText="DoS ">Denial-of-Service</t> | <contact fullname="Mirja Kühlewind"/>, <contact fullname="Martin Langer"/> | |||
| <t hangText="DDoS ">Distributed Denial-of-Service</t> | , | |||
| <t hangText="EF "><xref target="RFC5905">Extension Field</xref></t | <contact fullname="Barry Leiba"/>, <contact fullname="Miroslav Lichvar"/>, | |||
| > | <contact fullname="Aanchal Malhotra"/>, <contact fullname="Danny Mayer"/>, | |||
| <t hangText="HKDF "><xref target="RFC5869">Hashed Message | <contact fullname="Dave Mills"/>, <contact fullname="Sandra Murphy"/>, | |||
| Authentication Code-based Key Derivation Function</xref></t> | <contact fullname="Hal Murray"/>, <contact fullname="Karen O'Donoghue"/>, | |||
| <t hangText="KoD "><xref target="RFC5905">Kiss-o'-Death</xref></t> | <contact fullname="Eric K. Rescorla"/>, <contact fullname="Kurt Roeckx"/>, | |||
| <t hangText="NTP "><xref target="RFC5905">Network Time Protocol | <contact fullname="Stephen Roettger"/>, <contact fullname="Dan Romascanu"/ | |||
| </xref></t> | >, | |||
| <t hangText="NTS ">Network Time Security</t> | <contact fullname="Kyle Rose"/>, <contact fullname="Rich Salz"/>, | |||
| <t hangText="NTS NAK">NTS negative-acknowledgment</t> | <contact fullname="Brian Sniffen"/>, <contact fullname="Susan Sons"/>, | |||
| <t hangText="NTS-KE ">Network Time Security Key Establishment</t> | <contact fullname="Douglas Stebila"/>, <contact fullname="Harlan Stenn"/>, | |||
| <t hangText="S2C ">Server-to-client</t> | <contact fullname="Joachim Strömbergsson"/>, | |||
| <t hangText="TLS "><xref target="RFC8446">Transport Layer | <contact fullname="Martin Thomson"/>, <contact fullname="Éric Vyncke"/>, | |||
| Security</xref></t> | <contact fullname="Richard Welty"/>, <contact fullname="Christer Weinigel" | |||
| </list> | />, and | |||
| </t> | <contact fullname="Magnus Westerlund"/> for contributions to this document | |||
| and comments on the design of NTS.</t> | ||||
| </section> | </section> | |||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 370 change blocks. | ||||
| 1309 lines changed or deleted | 1364 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||