<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.7 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-ntp-roughtime-09" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.0 -->
  <front>
    <title>Roughtime</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-ntp-roughtime-09"/>
    <author fullname="Watson Ladd">
      <organization>Akamai Technologies</organization>
      <address>
        <email>watsonbladd@gmail.com</email>
      </address>
    </author>
    <author fullname="Marcus Dansarie">
      <organization/>
      <address>
        <email>marcus@dansarie.se</email>
      </address>
    </author>
    <date year="2024" month="March" day="04"/>
    <area>Internet</area>
    <workgroup>Network Time Protocols</workgroup>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <?line 36?>

<t>This document specifies Roughtime - a protocol that aims to achieve
rough time synchronization even for clients without any idea of what
time it is.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-ntp-roughtime/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/wbl/roughtime-draft"/>.</t>
    </note>
  </front>
  <middle>
    <?line 43?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Time synchronization is essential to Internet security as many
security protocols and other applications require synchronization
<xref target="RFC738"/>. Unfortunately widely deployed protocols such as
the Network Time Protocol (NTP) <xref target="RFC5905"/> lack essential security
features, and even newer protocols like Network Time Security (NTS)
<xref target="RFC8915"/> lack mechanisms to ensure that the servers behave
correctly. Furthermore clients may lack even a basic idea of the time,
creating bootstrapping problems. Roughtime uses a list of keys and
servers to resolve this issue.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="protocol-overview">
      <name>Protocol Overview</name>
      <t>Roughtime is a protocol for rough time synchronization that enables
clients to provide cryptographic proof of server malfeasance. It does
so by having responses from servers include a signature over a value
derived from a nonce in the client request. This provides
cryptographic proof that the timestamp was issued after the server
received the client's request. The derived value included in the
server's response is the root of a Merkle tree which includes the hash
of the client's nonce as the value of one of its leaf nodes. This
enables the server to amortize the relatively costly signing operation
over a number of client requests. Single server mode: At its most
basic level, Roughtime is a one round protocol in which a completely
fresh client requests the current time and the server sends a signed
response. The response includes a timestamp and a radius used to
indicate the server's certainty about the reported time. For example,
a radius of 1,000,000 microseconds means the server is absolutely
confident that the true time is within one second of the reported
time. The server proves freshness of its response as follows. The
client's request contains a nonce which the server incorporates into
its signed response. The client can verify the server's signatures and
- provided that the nonce has sufficient entropy - this proves that
the signed response could only have been generated after the nonce.</t>
    </section>
    <section anchor="the-guarantee">
      <name>The Guarantee</name>
      <t>A Roughtime server guarantees that a response to a query sent at t1,
received at t2, and with timestamp t3 has been created between the
transmission of the query and its reception. If t3 is not within that
interval, a server inconsistency may be detected and used to impeach
the server. The propagation of such a guarantee and its use of type
synchronization is discussed in <xref target="integration-into-ntp"/>. No delay
attacker may affect this: they may only expand the interval between
t1 and t2, or of course stop the measurement in the first place.</t>
    </section>
    <section anchor="message-format">
      <name>Message Format</name>
      <t>Roughtime messages are maps consisting of one or more (tag, value)
pairs. They start with a header, which contains the number of pairs,
the tags, and value offsets. The header is followed by a message
values section which contains the values associated with the tags in
the header. Messages <bcp14>MUST</bcp14> be formatted according to <xref target="figmessage"/> as
described in the following sections.</t>
      <t>Messages <bcp14>MAY</bcp14> be recursive, i.e. the value of a tag can itself be a
Roughtime message.</t>
      <figure anchor="figmessage">
        <name>Roughtime Message</name>
        <artwork><![CDATA[
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                   Number of pairs (uint32)                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                     N-1 offsets (uint32)                      .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                        N tags (uint32)                        .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                            Values                             .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </figure>
      <section anchor="data-types">
        <name>Data types</name>
        <section anchor="int32">
          <name>int32</name>
          <t>An int32 is a 32 bit signed integer. It is serialized least
significant byte first in sign-magnitude representation with the sign
bit in the most significant bit. The negative zero value (0x80000000)
<bcp14>MUST NOT</bcp14> be used and any message with it is syntactically invalid and
<bcp14>MUST</bcp14> be ignored.</t>
        </section>
        <section anchor="uint32">
          <name>uint32</name>
          <t>A uint32 is a 32 bit unsigned integer. It is serialized
with the least significant byte first.</t>
        </section>
        <section anchor="uint64">
          <name>uint64</name>
          <t>A uint64 is a 64 bit unsigned integer. It is serialized with the least
significant byte first.</t>
        </section>
        <section anchor="tag">
          <name>Tag</name>
          <t>Tags are used to identify values in Roughtime messages. A tag is a
uint32 but may also be listed in this document as a sequence of up to
four ASCII characters <xref target="RFC20"/>. ASCII strings shorter than four
characters can be unambiguously converted to tags by padding them with
zero bytes. For example, the ASCII string "NONC" would correspond to
the tag 0x434e4f4e and "PAD" would correspond to 0x00444150. Note that
when encoded into a message the ASCII values will be in the natural
bytewise order.</t>
        </section>
        <section anchor="timestamp">
          <name>Timestamp</name>
          <t>A timestamp is a uint64 count of seconds since the Unix epoch in UTC.</t>
        </section>
      </section>
      <section anchor="header">
        <name>Header</name>
        <t>All Roughtime messages start with a header. The first four bytes of
the header is the uint32 number of tags N, and hence of (tag, value)
pairs. The following 4*(N-1) bytes are offsets, each a uint32. The
last 4*N bytes in the header are tags.  Offsets refer to the positions
of the values in the message values section. All offsets <bcp14>MUST</bcp14> be
multiples of four and placed in increasing order. The first
post-header byte is at offset 0. The offset array is considered to
have a not explicitly encoded value of 0 as its zeroth entry. The
value associated with the ith tag begins at offset[i] and ends at
offset[i+1]-1, with the exception of the last value which ends at the
end of the message. Values may have zero length. Tags <bcp14>MUST</bcp14> be listed
in the same order as the offsets of their values and <bcp14>MUST</bcp14> also be
sorted in ascending order by numeric value. A tag <bcp14>MUST NOT</bcp14> appear more
than once in a header.</t>
      </section>
    </section>
    <section anchor="protocol-details">
      <name>Protocol Details</name>
      <t>As described in Section 3, clients initiate time synchronization by
sending requests containing a nonce to servers who send signed time
responses in return. Roughtime packets can be sent between clients and
servers either as UDP datagrams or via TCP streams. Servers <bcp14>SHOULD</bcp14>
support the UDP transport mode, while TCP transport is <bcp14>OPTIONAL</bcp14>. A
Roughtime packet <bcp14>MUST</bcp14> be formatted according to Figure 2 and as
described here. The first field is a uint64 with the value
0x4d49544847554f52 ("ROUGHTIM" in ASCII). The second field is a uint32
and contains the length of the third field. The third and last field
contains a Roughtime message as specified in <xref target="message-format"/>.</t>
      <figure anchor="figpack">
        <name>Roughtime packet</name>
        <artwork><![CDATA[
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  0x4d49544847554f52 (uint64)                  |
|                        ("ROUGHTIM")                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Message length (uint32)                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                      Roughtime message                        .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
      </figure>
      <t>Roughtime request and response packets <bcp14>MUST</bcp14> be transmitted in a single
datagram when the UDP transport mode is used. Setting the packet's
don't fragment bit <xref target="RFC791"/> is <bcp14>OPTIONAL</bcp14> in IPv4 networks. Multiple
requests and responses can be exchanged over an established TCP
connection. Clients <bcp14>MAY</bcp14> send multiple requests at once and servers <bcp14>MAY</bcp14>
send responses out of order. The connection <bcp14>SHOULD</bcp14> be closed by the
client when it has no more requests to send and has received all
expected responses. Either side <bcp14>SHOULD</bcp14> close the connection in
response to synchronization, format, implementation-defined timeouts,
or other errors. All requests and responses <bcp14>MUST</bcp14> contain the VER
tag. It contains a list of one or more uint32 version numbers. The
version of Roughtime specified by this memo has version number 1. NOTE
TO RFC EDITOR: remove this paragraph before publication. For testing
drafts of this memo, a version number of 0x80000000 plus the draft
number is used.</t>
      <section anchor="requests">
        <name>Requests</name>
        <t>A request <bcp14>MUST</bcp14> contain the tags VER and NONC. Tags other than NONC
and VER <bcp14>SHOULD</bcp14> be ignored by the server. A future version of this
protocol may mandate additional tags in the message and asign them
semantic meaning. The size of the request message <bcp14>SHOULD</bcp14> be at least
1024 bytes when the UDP transport mode is used. To attain this size
the ZZZZ tag <bcp14>SHOULD</bcp14> be added to the message. Its value <bcp14>SHOULD</bcp14> be all
zeros. Responding to requests shorter than 1024 bytes is <bcp14>OPTIONAL</bcp14> and
servers <bcp14>MUST NOT</bcp14> send responses larger than the requests they are
replying to.</t>
        <section anchor="ver">
          <name>VER</name>
          <t>In a request, the VER tag contains a list of versions. The VER tag
<bcp14>MUST</bcp14> include at least one Roughtime version supported by the
client. The client <bcp14>MUST</bcp14> ensure that the version numbers and tags
included in the request are not incompatible with each other or the
packet contents.</t>
        </section>
        <section anchor="nonc">
          <name>NONC</name>
          <t>The value of the NONC tag is a 32 byte nonce. It <bcp14>SHOULD</bcp14> be generated
in a manner indistinguishable from random. BCP 106 contains specific
guidelines regarding this <xref target="RFC4086"/>.</t>
        </section>
      </section>
      <section anchor="responses">
        <name>Responses</name>
        <t>A response <bcp14>MUST</bcp14> contain the tags SIG, VER, NONC, PATH, SREP, CERT,
 and INDX.</t>
        <section anchor="sig">
          <name>SIG</name>
          <t>In general, a SIG tag value is a 64 byte Ed25519 signature
<xref target="RFC8032"/> over a concatenation of a signature context ASCII string
and the entire value of a tag. All context strings <bcp14>MUST</bcp14> include a
terminating zero byte. The SIG tag in the root of a response <bcp14>MUST</bcp14> be
a signature over the SREP value using the public key contained in
CERT. The context string <bcp14>MUST</bcp14> be "RoughTime v1 response signature".</t>
        </section>
        <section anchor="ver-1">
          <name>VER</name>
          <t>In a response, the VER tag <bcp14>MUST</bcp14> contain a single version number. It
<bcp14>SHOULD</bcp14> be one of the version numbers supplied by the client in its
request. The server <bcp14>MUST</bcp14> ensure that the version number corresponds
with the rest of the packet contents.</t>
        </section>
        <section anchor="nonc-1">
          <name>NONC</name>
          <t>The NONC tag <bcp14>MUST</bcp14> contain the nonce of the message being responded to.</t>
        </section>
        <section anchor="path">
          <name>PATH</name>
          <t>The PATH tag value <bcp14>MUST</bcp14> be a multiple of 32 bytes long and represent a
path of 32 byte hash values in the Merkle tree used to generate the
ROOT value as described in a later section  In the case where a
response is prepared for a single request and the Merkle tree contains
only the root node, the size of PATH <bcp14>MUST</bcp14> be zero.</t>
        </section>
        <section anchor="serp">
          <name>SERP</name>
          <t>The SREP tag contains a time response. Its value <bcp14>MUST</bcp14> be a Roughtime
message with the tags ROOT, MIDP, and RADI. The server <bcp14>MAY</bcp14> include any
of the tags DUT1, DTAI, and LEAP in the contents of the SREP tag. The
ROOT tag <bcp14>MUST</bcp14> contain a 32 byte value of a Merkle tree root as
described in Section 6.3. The MIDP tag value <bcp14>MUST</bcp14> be timestamp of the
moment of processing. The RADI tag value <bcp14>MUST</bcp14> be a uint32 representing
the server's estimate of the accuracy of MIDP in seconds. Servers <bcp14>MUST</bcp14>
ensure that the true time is within (MIDP-RADI, MIDP+RADI) at the time
they transmit the response message.</t>
        </section>
        <section anchor="cert">
          <name>CERT</name>
          <t>The CERT tag contains a public-key certificate signed with the
server's long-term key. Its value is a Roughtime message with the tags
DELE and SIG, where SIG is a signature over the DELE value. The
context string used to generate SIG <bcp14>MUST</bcp14> be "RoughTime v1 delegation
signature--". The DELE tag contains a delegated public-key certificate
used by the server to sign the SREP tag. Its value is a Roughtime
message with the tags MINT, MAXT, and PUBK. The purpose of the DELE
tag is to enable separation of a long-term public key from keys on
devices exposed to the public Internet. The MINT tag is the minimum
timestamp for which the key in PUBK is trusted to sign responses. MIDP
<bcp14>MUST</bcp14> be more than or equal to MINT for a response to be considered
valid. The MAXT tag is the maximum timestamp for which the key in PUBK
is trusted to sign responses. MIDP <bcp14>MUST</bcp14> be less than or equal to MAXT
for a response to be considered valid. The PUBK tag contains a
temporary 32 byte Ed25519 public key which is used to sign the SREP
tag.</t>
        </section>
        <section anchor="indx">
          <name>INDX</name>
          <t>The INDX tag value is a uint32 determining the position of NONC in the
Merkle tree used to generate the ROOT value as described in later
section TODO.</t>
        </section>
      </section>
      <section anchor="the-merkel-tree-tree">
        <name>The Merkel Tree (#tree)</name>
        <t>A Merkle tree is a binary tree where the value of each non-leaf node
is a hash value derived from its two children. The root of the tree is
thus dependent on all leaf nodes. In Roughtime, each leaf node in the
Merkle tree represents the nonce in one request. Leaf nodes are
indexed left to right, beginning with zero. The values of all nodes
are calculated from the leaf nodes and up towards the root node using
the first 32 bytes of the output of the SHA-512 hash algorithm
<xref target="RFC6234"/>. For leaf nodes, the byte 0x00 is prepended to the nonce
before applying the hash function. For all other nodes, the byte 0x01
is concatenated with first the left and then the right child node
value before applying the hash function. The value of the Merkle
tree's root node is included in the ROOT tag of the response. The
index of a request's nonce node is included in the INDX tag of the
response. The values of all sibling nodes in the path between a
request's nonce node and the root node is stored in the PATH tag so
that the client can reconstruct and validate the value in the ROOT tag
using its nonce. These values are each 32 bytes and are stored one
after the other with no additional padding or structure. The order in
which they are stored is described in the next section.</t>
        <section anchor="root-value-validity-check-algorithm">
          <name>Root Value Validity Check Algorithm</name>
          <t>We describe how to compute the root hash of the Merkel tree from the
values in the tags PATH, INDX, and NONC. Our algorithm maintains a
current hash value. The bits of INDX are ordered from least to most
significant in this algorithm. At initialization hash is set to
H(0x00 || nonce). If no more entries remain in PATH the current hash
is the hash of the Merkel tree. All remaining bits of INDX must be
zero. Otherwise let node be the next 32 bytes in PATH. If the current
bit in INDX is 0 then hash = H(0x01 || node || hash), else hash =
H(0x01 || hash || node).</t>
        </section>
      </section>
      <section anchor="validity-of-response">
        <name>Validity of Response</name>
        <t>A client <bcp14>MUST</bcp14> check the following properties when it receives a
response. We assume the long-term server public key is known to the
client through other means.</t>
        <t>The signature in CERT was made with the long-term key of the server.</t>
        <t>The DELE timestamps and the MIDP value are consistent.</t>
        <t>The INDX and PATH values prove NONC was included in the Merkle tree
with value ROOT using the algorithm in Section 6.3.1.</t>
        <t>The signature of SREP in SIG validates with the public key in DELE.</t>
        <t>A response that passes these checks is said to be valid. Validity of a
response does not prove the time is correct, but merely that the
server signed it, and thus promises that it began to compute the
signature at a time in the interval (MIDP-RADI, MIDP+RADI).</t>
      </section>
    </section>
    <section anchor="integration-into-ntp">
      <name>Integration into NTP</name>
      <t>We assume that there is a bound PHI on the frequency error in the
clock on the machine. Given a measurement taken at a local time t, we
know the true time is in (t-delta-sigma, t-delta+sigma). After d
seconds have elapsed we know the true time is within
(t-delta-sigma-d<em>PHI, t-delta+sigma+d</em>PHI). A simple and effective way
to mix with NTP or PTP discipline of the clock is to trim the observed
intervals in NTP to fit entirely within this window or reject
measurements that fall to far outside. This assumes time has not been
stepped. If the NTP process decides to step the time, it <bcp14>MUST</bcp14> use
Roughtime to ensure the new truetime estimate that will be stepped to
is consistent with the true time.  Should this window become too
large, another Roughtime measurement is called for. The definition of
"too large" is implementation defined. Implementations <bcp14>MAY</bcp14> use other,
more sophisticated means of adjusting the clock respecting Roughtime
information. Other applications such as X.509 verification may wish to
apply different rules.</t>
    </section>
    <section anchor="grease">
      <name>Grease</name>
      <t>Servers <bcp14>MAY</bcp14> send back a fraction of responses that are syntactically
invalid or contain invalid signatures as well as incorrect
times. Clients <bcp14>MUST</bcp14> properly reject such responses. Servers <bcp14>MUST NOT</bcp14>
send back responses with incorrect times and valid signatures. Either
signature <bcp14>MAY</bcp14> be invalid for this application.</t>
    </section>
    <section anchor="roughtime-clients">
      <name>Roughtime Clients</name>
      <section anchor="necessary-configuration">
        <name>Necessary configuration</name>
        <t>To carry out a roughtime measurement a client must be equiped with a
list of servers, a minimum of three of which are operational, not run
by the same parties. It must also have a means of reporting to the
provider of such a list, such as an OS vendor or software vendor, a
failure report as described below.</t>
      </section>
      <section anchor="measurement-sequence">
        <name>Measurement sequence</name>
        <t>The client randomly permutes three servers from the list, and
sequentially queries them. The first probe uses a NONC that is
randomly generated. The second query uses H(resp||rand) where rand is
a random 32 byte value and resp is the entire response to the first
probe. The third query uses H(resp||rand) for a different 32 byte
value.  If the times reported are consistent with the causal ordering,
and the delay is within a system provided parameter, the measurement
succeeds. If they are not consistent, there has been malfeasance and
the client <bcp14>SHOULD</bcp14> store a report for evaluation, alert the operator,
and make another measurement.</t>
      </section>
      <section anchor="malfeasence-reporting">
        <name>Malfeasence reporting</name>
        <t>A malfeasance report is a JSON object with keys "nonces" containing an
array of the rand values as base64 encoded strings and "responses"
containing the responses as base64 encoded strings. This report is
cryptographic proof that at least one server generated an incorrect
response.  Malfeasence reports <bcp14>MAY</bcp14> be transported by any means to the
relevant vendor or server operator for discussion. A malfeasance
report is cryptographic proof that the responses arrived in that
order, and can be used to demonstrate that a server sent the wrong
time. The venues for sharing such reports and what to do about them
are outside the scope of this document.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Since the only supported signature scheme, Ed25519, is not quantum
resistant, the Roughtime version described in this memo will not
survive the advent of quantum computers.  Maintaining a list of
trusted servers and adjudicating violations of the rules by servers is
not discussed in this document and is essential for
security. Roughtime clients <bcp14>MUST</bcp14> regularly update their view of which
servers are trustworthy in order to benefit from the detection of
misbehavior. Validating timestamps made on different dates requires
knowledge of leap seconds in order to calculate time intervals
correctly. Servers carry out a significant amount of computation in
response to clients, and thus may experience vulnerability to denial
of service attacks. This protocol does not provide any
confidentiality. Given the nature of timestamps such impact is
minor. The compromise of a PUBK's private key, even past MAXT, is a
problem as the private key can be used to sign invalid times that are
in the range MINT to MAXT, and thus violate the good behavior
guarantee of the server. Servers <bcp14>MUST NOT</bcp14> send response packets larger
than the request packets sent by clients, in order to prevent
amplification attacks.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="service-name-and-transport-protocol-port-number-registry">
        <name>Service Name and Transport Protocol Port Number Registry</name>
        <t>IANA is requested to allocate the following entry in the Service
Name and Transport Protocol Port Number Registry:</t>
        <artwork><![CDATA[
  Service Name: Roughtime

  Transport Protocol: tcp,udp

  Assignee: IESG <iesg@ietf.org>

  Contact: IETF Chair <chair@ietf.org>

  Description: Roughtime time synchronization

  Reference: [[this memo]]

  Port Number: [[TBD1]], selected by IANA from the User Port range
]]></artwork>
      </section>
      <section anchor="roughtime-version-registry">
        <name>Roughtime Version Registry</name>
        <t>IANA is requested to create a new registry entitled "Roughtime
 Version Registry".  Entries shall have the following fields:</t>
        <artwork><![CDATA[
  Version ID (REQUIRED): a 32-bit unsigned integer

  Version name (REQUIRED): A short text string naming the version
  being identified.

  Reference (REQUIRED): A reference to a relevant specification
  document.
]]></artwork>
        <t>The policy for allocation of new entries <bcp14>SHOULD</bcp14> be: IETF Review.</t>
        <t>The initial contents of this registry shall be as follows:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Version ID</th>
              <th align="left">Version name</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x0</td>
              <td align="left">Reserved</td>
              <td align="left">[[this memo]]</td>
            </tr>
            <tr>
              <td align="left">0x1</td>
              <td align="left">Roughtime version 1</td>
              <td align="left">[[this memo]]</td>
            </tr>
            <tr>
              <td align="left">0x2-0x7fffffff</td>
              <td align="left">Unassigned</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="left">0x80000000-0xffffffff</td>
              <td align="left">Reserved for Private</td>
              <td align="left">[[this memo]]</td>
            </tr>
            <tr>
              <td align="left"> </td>
              <td align="left">or Experimental use</td>
              <td align="left"> </td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="roughtime-tag-registry">
        <name>Roughtime Tag Registry</name>
        <t>IANA is requested to create a new registry entitled "Roughtime Tag
Registry".  Entries <bcp14>SHALL</bcp14> have the following fields:</t>
        <artwork><![CDATA[
          Tag (REQUIRED): A 32-bit unsigned integer in hexadecimal format.

          ASCII Representation (OPTIONAL): The ASCII representation of the
          tag in accordance with Section 5.1.4 of this memo, if applicable.

          Reference (REQUIRED): A reference to a relevant specification
          document.
]]></artwork>
        <t>The policy for allocation of new entries in this registry <bcp14>SHOULD</bcp14> be:
Specification Required.</t>
        <t>The initial contents of this registry <bcp14>SHALL</bcp14> be as follows:</t>
        <table>
          <thead>
            <tr>
              <th align="right">Tag</th>
              <th align="left">ASCII Representation</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x7a7a7a7a</td>
              <td align="left">ZZZZ</td>
              <td align="left">[[this memo]]</td>
            </tr>
            <tr>
              <td align="right">0x00474953</td>
              <td align="left">SIG</td>
              <td align="left">[[this memo]]</td>
            </tr>
            <tr>
              <td align="right">0x00524556</td>
              <td align="left">VER</td>
              <td align="left">[[this memo]]</td>
            </tr>
            <tr>
              <td align="right">0x434e4f4e</td>
              <td align="left">NONC</td>
              <td align="left">[[this memo]]</td>
            </tr>
            <tr>
              <td align="right">0x454c4544</td>
              <td align="left">DELE</td>
              <td align="left">[[this memo]]</td>
            </tr>
            <tr>
              <td align="right">0x48544150</td>
              <td align="left">PATH</td>
              <td align="left">[[this memo]]</td>
            </tr>
            <tr>
              <td align="right">0x49444152</td>
              <td align="left">RADI</td>
              <td align="left">[[this memo]]</td>
            </tr>
            <tr>
              <td align="right">0x4b425550</td>
              <td align="left">PUBK</td>
              <td align="left">[[this memo]]</td>
            </tr>
            <tr>
              <td align="right">0x5044494d</td>
              <td align="left">MIDP</td>
              <td align="left">[[this memo]]</td>
            </tr>
            <tr>
              <td align="right">0x50455253</td>
              <td align="left">SREP</td>
              <td align="left">[[this memo]]</td>
            </tr>
            <tr>
              <td align="right">0x544e494d</td>
              <td align="left">MINT</td>
              <td align="left">[[this memo]]</td>
            </tr>
            <tr>
              <td align="right">0x544f4f52</td>
              <td align="left">ROOT</td>
              <td align="left">[[this memo]]</td>
            </tr>
            <tr>
              <td align="right">0x54524543</td>
              <td align="left">CERT</td>
              <td align="left">[[this memo]]</td>
            </tr>
            <tr>
              <td align="right">0x5458414d</td>
              <td align="left">MAXT</td>
              <td align="left">[[this memo]]</td>
            </tr>
            <tr>
              <td align="right">0x58444e49</td>
              <td align="left">INDX</td>
              <td align="left">[[this memo]]</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="privacy-considerations">
      <name>Privacy Considerations</name>
      <t>This protocol is designed to obscure all client identifiers. Servers
necessarily have persistent long-term identities essential to
enforcing correct behavior. Generating nonces in a nonrandom manner
can cause leaks of private data or enable tracking of clients as they
move between networks.</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC20">
          <front>
            <title>ASCII format for network interchange</title>
            <author fullname="V.G. Cerf" initials="V.G." surname="Cerf"/>
            <date month="October" year="1969"/>
          </front>
          <seriesInfo name="STD" value="80"/>
          <seriesInfo name="RFC" value="20"/>
          <seriesInfo name="DOI" value="10.17487/RFC0020"/>
        </reference>
        <reference anchor="RFC791">
          <front>
            <title>Internet Protocol</title>
            <author fullname="J. Postel" initials="J." surname="Postel"/>
            <date month="September" year="1981"/>
          </front>
          <seriesInfo name="STD" value="5"/>
          <seriesInfo name="RFC" value="791"/>
          <seriesInfo name="DOI" value="10.17487/RFC0791"/>
        </reference>
        <reference anchor="RFC4086">
          <front>
            <title>Randomness Requirements for Security</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="J. Schiller" initials="J." surname="Schiller"/>
            <author fullname="S. Crocker" initials="S." surname="Crocker"/>
            <date month="June" year="2005"/>
            <abstract>
              <t>Security systems are built on strong cryptographic algorithms that foil pattern analysis attempts. However, the security of these systems is dependent on generating secret quantities for passwords, cryptographic keys, and similar quantities. The use of pseudo-random processes to generate secret quantities can result in pseudo-security. A sophisticated attacker may find it easier to reproduce the environment that produced the secret quantities and to search the resulting small set of possibilities than to locate the quantities in the whole of the potential number space.</t>
              <t>Choosing random quantities to foil a resourceful and motivated adversary is surprisingly difficult. This document points out many pitfalls in using poor entropy sources or traditional pseudo-random number generation techniques for generating such quantities. It recommends the use of truly random hardware techniques and shows that the existing hardware on many systems can be used for this purpose. It provides suggestions to ameliorate the problem when a hardware solution is not available, and it gives examples of how large such quantities need to be for some applications. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="106"/>
          <seriesInfo name="RFC" value="4086"/>
          <seriesInfo name="DOI" value="10.17487/RFC4086"/>
        </reference>
        <reference anchor="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>
        <reference anchor="RFC6234">
          <front>
            <title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
            <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="May" year="2011"/>
            <abstract>
              <t>Federal Information Processing Standard, FIPS</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6234"/>
          <seriesInfo name="DOI" value="10.17487/RFC6234"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC738">
          <front>
            <title>Time server</title>
            <author fullname="K. Harrenstien" initials="K." surname="Harrenstien"/>
            <date month="October" year="1977"/>
          </front>
          <seriesInfo name="RFC" value="738"/>
          <seriesInfo name="DOI" value="10.17487/RFC0738"/>
        </reference>
        <reference anchor="RFC5905">
          <front>
            <title>Network Time Protocol Version 4: Protocol and Algorithms Specification</title>
            <author fullname="D. Mills" initials="D." surname="Mills"/>
            <author fullname="J. Martin" initials="J." role="editor" surname="Martin"/>
            <author fullname="J. Burbank" initials="J." surname="Burbank"/>
            <author fullname="W. Kasch" initials="W." surname="Kasch"/>
            <date month="June" year="2010"/>
            <abstract>
              <t>The Network Time Protocol (NTP) is widely used to synchronize computer clocks in the Internet. This document describes NTP version 4 (NTPv4), which is backwards compatible with NTP version 3 (NTPv3), described in RFC 1305, as well as previous versions of the protocol. NTPv4 includes a modified protocol header to accommodate the Internet Protocol version 6 address family. NTPv4 includes fundamental improvements in the mitigation and discipline algorithms that extend the potential accuracy to the tens of microseconds with modern workstations and fast LANs. It includes a dynamic server discovery scheme, so that in many cases, specific server configuration is not required. It corrects certain errors in the NTPv3 design and implementation and includes an optional extension mechanism. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5905"/>
          <seriesInfo name="DOI" value="10.17487/RFC5905"/>
        </reference>
        <reference anchor="RFC8915">
          <front>
            <title>Network Time Security for the Network Time Protocol</title>
            <author fullname="D. Franke" initials="D." surname="Franke"/>
            <author fullname="D. Sibold" initials="D." surname="Sibold"/>
            <author fullname="K. Teichel" initials="K." surname="Teichel"/>
            <author fullname="M. Dansarie" initials="M." surname="Dansarie"/>
            <author fullname="R. Sundblad" initials="R." surname="Sundblad"/>
            <date month="September" year="2020"/>
            <abstract>
              <t>This memo specifies Network Time Security (NTS), a mechanism for using Transport Layer Security (TLS) and Authenticated Encryption with Associated Data (AEAD) to provide cryptographic security for the client-server mode of the Network Time Protocol (NTP).</t>
              <t>NTS is structured as a suite of two loosely coupled sub-protocols. The first (NTS Key Establishment (NTS-KE)) handles initial authentication and key establishment over TLS. The second (NTS Extension Fields for NTPv4) handles encryption and authentication during NTP time synchronization via extension fields in the NTP packets, and holds all required state only on the client via opaque cookies.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8915"/>
          <seriesInfo name="DOI" value="10.17487/RFC8915"/>
        </reference>
      </references>
    </references>
    <?line 580?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thomas Peterson corrected multiple nits. Peter Löthberg, Tal Mizrahi,
Ragnar Sundblad, Kristof Teichel, and the other members of the NTP
working group contributed comments and suggestions.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
wKwh3c7439dcFs+mYgAA

-->

</rfc>
