fix #816 to add variety to System Status Word...
[ntpsec.git] / docs / standards.adoc
blob9973baa5bf4c3b1a922a46866e982dc7c1284b56
1 = Standards Conformance
2 include::include-html.ad[]
4 == Table of Contents
6 * link:#standards-overview[Overview of relevant standards]
7 * link:#against5905[Divergences from RFC 5905]
8 * link:#against2030[Divergences from RFC 2030]
10 [[standards-overview]]
11 == Overview of relevant standards
13 The principal standard informing the NTPsec software is
14 link:https://tools.ietf.org/html/rfc5905[RFC 5905: Network Time Protocol
15 Version 4: Protocol and Algorithms Specification].
17 SNTP is specified by link:https://tools.ietf.org/html/rfc2030[RFC 2030:
18 Simple Network Time Protocol (SNTP) Version 4 for IPv4, IPv6 and OSI].
20 Extension fields are described by
21 link:https://tools.ietf.org/html/rfc7822[RFC 7822: Network Time Protocol
22 Version 4 (NTPv4) Extension Fields].
24 NTPsec has entirely dropped conformance with the Autokey feature
25 described in link:https://tools.ietf.org/html/rfc5906[RFC 5906: Network Time
26 Protocol Version 4: Autokey Specification].  Autokey
27 never quite worked, and the design was unstable enough that if there
28 was ever actually a time when it fully conformed to its RFC that span
29 must have been pretty short.
31 Older NTP RFCs such as link:https://tools.ietf.org/html/rfc1305[RFC 1305:
32 Network Time Protocol (Version 3) Specification, Implementation and Analysis]
33 are no longer relevant.
35 link:https://tools.ietf.org/rfc/rfc5297.txt[RFC 5297: Synthetic Initialization
36 Vector (SIV) Authenticated Encryption Using the Advanced Encryption Standard
37 (AES)] describes the authenticated encryption used in Network Time Security key
38 exchanges.
40 Network Time Security is described by
41 link:https://tools.ietf.org/html/rfc8915[RFC 8915: Network Time Security for
42 the Network Time Protocol].
44 [[against5905]]
45 == Divergences from RFC 5905
47 Code conformance was never quite exact even before the NTPsec fork.
48 In this section we attempt to list divergences.  This list is probably
49 not exhaustive.
51 Modes 5 (Broadcast) and 6 (Broadcast client) are no longer implemented
52 in NTPsec, as they were impossible to secure.  Mode 1 (Symmetric
53 Active) is no longer implemented; such packets are treated as ordinary
54 client (mode 3) packets. Mode 2 (Symmetric Passive) is still distinct
55 from mode 3 but its only effect is on initial poll interval.
57 In figure 8 of section 7.3, 128 bits (16 octets, corresponding to an
58 MD5 or AES-CMAC digest) is not the only possible length for the MAC. This was
59 a pre-NTPsec change present in NTP Classic versions after 2010.
61 NTPsec conforms to the
62 link:https://datatracker.ietf.org/doc/draft-ietf-ntp-data-minimization/[NTP
63 Client Data Minimization] draft RFC, which changes the client-side
64 generation of some packet headers.
66 NTPsec also implements
67 link:https://tools.ietf.org/html/rfc8573[RFC 8573:
68 Message Authentication Code for the Network Time Protocol].
70 The table of reference identifiers in Figure 12 is largely obsolete
71 and somewhat incomplete relative to the code.
73 In the table of KISS codes (Figure 13), only RATE still exists and is
74 implemented in NTPsec; others proved unnecessary or (in the cases of
75 DENY and RSTR) outright dangerous. INIT and STEP are no longer KoD
76 types but persist as peer statuses that may be reported by
77 {ntpqman}/{ntpmonman}.  NTPsec has additional codes DNS and NTS for
78 preparatory phases in association setup.
80 The continuing relevance of much of Appendix A is doubtful.
82 [[against2030]]
83 == Divergences from RFC 2030
85 In the packet-format illustration of section 4 (NTP Message Format)
86 128 is not the only possible bit length for a MAC.  However, this
87 field is not shipped in SNTP operation, so the flaw is theoretical.
89 Some packet mode values are, as previously noted, no longer
90 implemented. Many External Reference Source types are obsolete.
91 Broadcast, multicast and anycast modes are no longer implemented.
93 '''''
95 include::includes/footer.adoc[]