NTP was designed in the 1980s with zero security. NTS fixes that.
Every NTP packet you exchange travels unencrypted and unauthenticated across the network. Your system has no way to verify that the time it receives actually comes from the server it requested.
A manipulated clock can have serious consequences:
NTS adds cryptographic authentication to NTP in two simple phases:
Your client establishes a TLS 1.3 connection with the NTS server on port 4460. During this handshake, the server's identity is verified via its TLS certificate, and encrypted cookies are exchanged for future use.
Regular NTP queries (port 123/UDP) now include cryptographic extensions. Each response is authenticated using the cookies negotiated in Phase 1. No additional TLS connection is needed.
The TLS handshake only occurs at startup and during cookie renewal (approximately once per hour). Regular NTP exchanges add only ~100 bytes for authentication. Your sync accuracy is not affected.
| Use Case | Risk Without NTS | Priority |
|---|---|---|
| PKI / Certificate Authorities | Forged timestamps can bypass certificate expiry | Critical |
| Financial / Trading systems | Regulatory non-compliance, invalid audit trails | Critical |
| DNSSEC infrastructure | Signature validation failure from time manipulation | Critical |
| Authentication (TOTP/2FA) | Token rejection or replay attacks | High |
| Log aggregation / SIEM | Event ordering corruption across systems | High |
| General infrastructure | Reduced trust in time data | Recommended |
NTS is still rare. As of 2026, the global landscape looks like this:
| Provider | Hostname | Location | Stratum |
|---|---|---|---|
| RDEM Systems | ntp-pool.rdem-systems.com |
France & Germany | 2 |
| Netnod | nts.netnod.se |
Sweden | 1 |
| PTB | ptbtime1.ptb.de |
Germany | 1 |
| Cloudflare | time.cloudflare.com |
Anycast (Global) | 3 |
| SIDN Labs | nts.time.nl |
Netherlands | 1 |
| NTP Pool (Trifecta) | ntppool-nts.time.nl |
Netherlands | 2 |
A comprehensive list of public NTS servers is maintained at github.com/jauderho/nts-servers.
Unlike classic NTP, TLS certificates make traditional pooling difficult. Most providers require individual server configuration. RDEM Systems operates one of the few NTS-compatible pools via ntp-pool.rdem-systems.com, load-balancing across its NTS infrastructure. An ICANN-funded project (2025-2027) by the Trifecta Tech Foundation is also working on a broader solution.
Chrony (v4.0+) is the recommended NTS-capable client. It's available on most modern Linux distributions.
# Debian / Ubuntu sudo apt update && sudo apt install chrony # RHEL / Fedora / CentOS sudo dnf install chrony
Edit /etc/chrony/chrony.conf (or /etc/chrony.conf):
# /etc/chrony/chrony.conf - NTS configuration # NTS-secured servers server ntp-pool.rdem-systems.com iburst nts # France - Stratum 1&2 server nts.netnod.se iburst nts # Sweden - Stratum 1 server ptbtime1.ptb.de iburst nts # Germany - Stratum 1 server time.cloudflare.com iburst nts # Anycast - Stratum 3 # Drift file driftfile /var/lib/chrony/drift # Allow large correction at startup makestep 1.0 3 # Real-time clock sync rtcsync
# Restart Chrony sudo systemctl restart chronyd # Check NTS authentication status sudo chronyc -N authdata
Look for Mode: NTS and NAK: 0 (no authentication failures):
Name/IP address Mode KeyID Type KLen Last Atmp NAK Cook CLen ========================================================================= ntp-pool.rdem-systems.c> NTS 1 15 256 23m 0 0 8 100 nts.netnod.se NTS 1 15 256 24m 0 0 8 100 ptbtime1.ptb.de NTS 1 15 256 25m 0 0 8 100
Chrony 4.0+ (recommended), NTPsec, and ntpd-rs (Rust) support NTS. The classic ntpd and Windows W32Time do not support NTS. Ubuntu 25.10+ ships with Chrony NTS enabled by default.
# List time sources sudo chronyc -N sources # Expected: sources should show synchronized status MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* ntp-pool.rdem-systems.c> 2 6 377 23 -145us[ -201us] +/- 12ms ^+ nts.netnod.se 1 6 377 24 +234us[ +178us] +/- 15ms
# Detailed NTS status sudo chronyc -N authdata
By default, Chrony will not use a source if NTS cannot be established. This is the secure behavior: it's better to skip a source than to sync unauthenticated.
Yes. Chrony can use both simultaneously. However, for maximum security, prefer NTS sources for all your time servers.
No. NTS adds authentication, not latency to the time measurement itself. The TLS handshake only occurs during key exchange (at startup and approximately once per hour), not during regular NTP queries.
Traditional pooling is difficult with NTS because TLS certificates are tied to specific hostnames. However, some providers like RDEM Systems operate NTS-compatible pools using load-balanced endpoints. For most other providers, you need to configure specific server addresses.
RDEM Systems operates a pool of NTS Stratum 2 servers distributed across multiple autonomous systems, including its own network (AS206014). Upstream Stratum 1 sources use GNSS/PPS for maximum accuracy.
A service by RDEM Systems ยท See also: NTP diagnostic tool