BuildNot yet confirmed elsewhere1 publisher3 min readPublished
Meta adds Network Time Security to its public time service, nts.meta.com
Meta's public time service now speaks NTS, so devices can verify time delivered over NTP, a protocol unauthenticated since 1985. Unattended certificate renewals and token checks all read that clock, so a forged reply on plain NTP can break them without anyone noticing.
The Engineer · Build desk

What happened
- Meta has open-sourced its protocol implementation, server and client as part of its Time library on GitHub.
- Meta is asking NTP client maintainers to enable NTS support, and names those on Android and iOS in particular.
- CA/Browser Forum ballot SC-081v3 caps new public TLS certificates at 200 days from March 2026, 100 days from March 2027 and 47 days from March 2029.
Why it matters
- exposure Hosts that renew certificates over ACME roughly monthly will fail or reissue without a ticket if their clock is wrong; NTS takes on-path forgery off the list of causes.
- cost Client networks need outbound TCP 4460 for the key exchange as well as UDP 123 for time, so a firewall that passes only NTP's UDP port stops NTS before it starts.
- capability An operator running Meta's open-source server can add machines without building a shared or replicated key store, since clients return their session keys inside each cookie.
Plain NTP trusts whatever answers. Meta describes it this way: the client sends 48 bytes, something sends 48 bytes back, and the client believes it, with no signature and no identity [5]. That is a generous trust model for the input every expiry check reads. Certificate notBefore and notAfter fields, token lifetimes and replay windows are all compared against the local clock, and logs from two hosts only line up if their clocks agree [6].
Certificates also make the problem circular. X.509 date validation needs the current time before the device has a trusted one [7]. Meta lists two workarounds [8]. Devices can skip validation until the clock is set. Or issuers can backdate notBefore by a few minutes while validators widen the window at their end [8]. "Both sides are guessing at how wrong the other one is," Meta's engineers wrote [9]. Meta calls that guessing survivable when a certificate lasted 398 days [10]. The 2029 cap is about 8.5 times shorter [16].
NTS splits the work into two phases. The first is NTS-KE, a TLS 1.3 session on TCP port 4460 negotiated with ALPN ntske/1 [12]. Client and server pick an AEAD and derive two directional session keys from the TLS session through the RFC 5705 exporter [12]. The server then hands over eight cookies and a record naming the NTP server to use, and closes the connection [12]. This happens once, not per packet [12]. Meta negotiates three AEADs and lets the client's preference win [13]. AES-SIV-CMAC-256 is the one RFC 8915 makes mandatory to implement, so it is what an unknown client is most likely to ask for [13].
Phase two is ordinary NTPv4 on UDP 123 with NTS extension fields [14]. Each request carries a unique identifier, a cookie and an authenticator that protects the fields ahead of it in the packet while leaving them in plaintext [14]. The server decrypts the cookie to get the session keys back, then verifies the authenticator. It replies with the identifier echoed back and an authenticator of its own, whose encrypted payload is a set of fresh cookies [15].
The cookie is how the server stays stateless. It brings the client's session keys back on every request, and the server opens it to recover them [15]. Meta says its servers hold no per-client state, and that cookie keys are derived, not stored and not replicated [2]. I think this is the right tradeoff for a public endpoint serving clients it has never seen. The server spends one cookie decryption per request and keeps no session table [15].
Where it breaks is first boot. NTS-KE is a TLS 1.3 handshake [12], and Meta's post itself says X.509 date checks cannot run without the current time [7]. So a device whose clock is far off has to validate the key-exchange server's certificate before it has any authenticated time. Meta's description of the two phases does not address that case.
What to watch
- Whether Android or iOS NTP clients ship NTS support in response to Meta's request.
- How Meta's open-source client validates the NTS-KE server certificate on a device whose clock is badly wrong at first boot.
- Interoperability results between Meta's NTS server and other RFC 8915 clients that prefer an AEAD other than AES-SIV-CMAC-256.
Clarity's read
What the record supports and how the coverage leans. The claims behind it follow.
Reality
- Evidence45
- Adoption
- Insufficient
- Hype gap+5
- Incentives35
- Confidence55
Claim ledger
Ranked by verification strength, evidence, and original report placement.
- [1]
Meta's public time service now speaks NTS (Network Time Security, RFC 8915) at nts.meta.com; packets are authenticated so a device can verify the time came from Meta and was not modified on the way.
- [2]
Meta's NTS servers hold no per-client state. Cookie keys are derived, not stored and not replicated.
- [3]
Meta has open sourced the protocol, server and client through Meta's Time library on GitHub.
- [4]
Meta is encouraging everyone, particularly those who maintain an NTP client on Android or iOS, to enable NTS support.
- [5]
NTP has been unauthenticated since 1985. The client sends 48 bytes, something sends 48 bytes back, and the client believes it. There is no signature and no identity.
- [6]
Certificate notBefore and notAfter are compared against the local clock; token and credential expiry, replay windows, and log correlation and ordering across hosts all depend on the clock.
- [7]
The check is circular: X.509 notBefore/notAfter validation cannot be done without knowing the current time.
- [8]
Two common workarounds: skip validation until the clock is set, or build in slack, with issuers backdating notBefore by a few minutes and validators widening the window at their end.
- [9]
"Both sides are guessing at how wrong the other one is."
- [10]
The guessing was survivable when a certificate lasted 398 days. CA/Browser Forum ballot SC-081v3 dropped the cap on newly issued publicly trusted TLS certificates to 200 days in March 2026, to 100 days in March 2027 and to 47 days in March 2029, with domain validation reuse dropping to 10 days at the same point.
- [11]
At 47 days, renewal moves to roughly monthly and happens unattended, usually over ACME. An automated renewal loop on a host with a skewed clock does not raise a ticket; it reissues or fails on a schedule nobody is watching.
- [12]
NTS-KE runs TLS 1.3 over TCP/4460 negotiated with ALPN ntske/1. Client and server agree on an AEAD, derive two directional session keys (C2S and S2C) from the TLS session using the RFC 5705 exporter; the server issues eight cookies, names the NTP server to use via a server negotiation record, and closes the connection. This happens once, not per packet.
- [13]
Meta negotiates three AEADs: AES-SIV-CMAC-256 (ID 15), which RFC 8915 makes mandatory to implement and is what an unknown client is most likely to ask for; AES-SIV-CMAC-512 (17); and AES-128-GCM-SIV (30). Client preference wins.
- [14]
Phase 2 is standard NTPv4 over UDP/123 with NTS extension fields. A request carries a unique identifier, a cookie and an authenticator; the authenticator covers everything before it but encrypts nothing.
- [15]
The server opens the cookie to recover the session keys, verifies the authenticator, and replies with the unique identifier echoed back plus its own authenticator, which carries a payload of fresh, encrypted cookies.
- [16]
The 47-day certificate cap due in March 2029 is about 8.5 times shorter than the earlier 398-day lifetime.
Sources
1 independent publisher whose own reporting we read for this story.
- engineering.fb.comNTS: Authenticated Time at Meta
1 article · October 6, 2026
Topics and entities
Follow any of these and your For You feed starts watching them — no settings page required.