Nerzen NTP Loading status TR
Roughtime2002/udpEd25519IPv4 + IPv6

Roughtime: signed time

NTP answers "what time is it"; Roughtime signs the answer. Our server signs every reply with its own key and includes the random number you sent. You are left with proof — verifiable later — that this server stated that time at that moment.

Live signed reply

queried once a minute with a real client · —

Status
querying
signature and key chain are checked
Signed instant
—
midpoint in the reply (MIDP)
Radius
—
uncertainty declared by the server (RADI)
Address
time.nerzen.com:2002
UDP · IPv4 and IPv6
Long-term public key · Ed25519 · base64 — click to copy
—
Same key · hexadecimal
—

What Roughtime is

Roughtime is a protocol that distributes time roughly (to the second) but provably. The client sends a random number (a nonce); the server signs that number, the current time and an uncertainty radius in a single packet and sends it back. If the signature is valid, the reply really came from that server and was produced after the request was sent — replaying an old reply does not work.

It does not replace NTP; use NTP or NTS for microsecond accuracy. Roughtime's job is to make you cryptographically sure the clock is roughly right.

How it works

  1. Request: the client sends a UDP packet of at least 1024 bytes containing a 32-byte random nonce. Keeping the request large prevents the server from being used in amplification attacks: the reply is always smaller than the request.
  2. Batch signing: the server gathers requests that arrive together into a Merkle tree and signs the tree root together with the time in one signature. Each client receives the path that links its own nonce to the root.
  3. Key chain: the short-lived key that signs replies is regenerated every 24 hours and endorsed by the long-term key above (delegation). The long-term key does not change; clients only need to know that one.
  4. Verification: the client checks the delegation, the signature and that its nonce is in the tree; if everything holds, it accepts the time.

Where it is used

Devices without a clock

Battery-less boards and devices booting for the first time cannot validate a TLS certificate without knowing the time, so NTS cannot start either. Roughtime only needs a public key known in advance: the device gets a signed, roughly correct time and then moves on to NTS.

Auditing time servers

A client asks several Roughtime servers in turn and derives each request's nonce from the previous reply. If one server states a time that contradicts the others, the contradiction can be proven to anyone with the signed replies.

Record and document integrity

If you send a document's hash instead of a random nonce, the reply becomes signed evidence that "this hash existed no later than this moment". We keep our own clock log on the same idea: see time proof.

Try it now

Any client that speaks the current version of the protocol (IETF draft, version 14) works. With a Rust toolchain installed:

Example client
cargo install roughenough-client
roughenough_client time.nerzen.com 2002 \
  -k BEbDQsYfxJjs6U1oFHoGthN4p/cvSFCVsyjpcqtNP0s=

Entry for clients that use a server list:

servers.json entry
{
  "name": "time.nerzen.com",
  "version": "IETF-Roughtime",
  "publicKeyType": "ed25519",
  "publicKey": "BEbDQsYfxJjs6U1oFHoGthN4p/cvSFCVsyjpcqtNP0s=",
  "addresses": [{ "protocol": "udp", "address": "time.nerzen.com:2002" }]
}

Technical details

Addresstime.nerzen.com:2002 (UDP)
ProtocolIETF Roughtime draft, version 14
SignatureEd25519 · SHA-512 hashing
Resolution1 second
Declared radius—
Online key lifetime24 hours; endorsed by the long-term key
Clock sourceThe same system clock that serves NTP and NTS

Limits

  • Resolution is one second. Use NTP or NTS for precise synchronisation.
  • One server is one witness. Roughtime's strength appears when several independent servers are asked; do not trust us alone.
  • Not a legally qualified timestamp. A legally valid timestamp requires an authorised provider.
  • A stamp proves an upper bound: "it existed no later than this moment". It does not show that it existed earlier.
  • UDP only. Unreachable from networks that block 2002/udp.
  • The standard is not an RFC yet. The protocol is still a draft; when the version changes the server will be updated and old clients may stop working.
  • The server is stratum 2. The signed time is the same clock published on the measurements page; we have no primary clock of our own.

Frequently asked questions

Does Roughtime replace NTP?

No. It works at one-second resolution and is not designed to discipline a clock continuously. NTP/NTS provide accuracy; Roughtime provides proof.

Why does the nonce matter?

The server signs a reply that contains a number you generated just now and nobody could know in advance. That proves the reply was produced after your request; an attacker cannot feed you an old signed reply.

What does the radius (RADI) mean?

It is the server's statement that "true time is at most this far from the instant I stated". Because the protocol is designed for rough time, the value is deliberately wide; the real uncertainty of our clock is at the millisecond level.

Why a request of at least 1024 bytes?

So that the reply is smaller than the request. A victim whose address is spoofed cannot be sent more data than the attacker sent.

Can chrony, Windows or systemd-timesyncd use Roughtime?

No; those are NTP clients. Roughtime needs a separate client.

What if your key changes?

We do not plan to change the long-term key. If it becomes necessary, the new key will be announced on this page; replies obtained with the old key remain verifiable for anyone who holds that key.

What do you log?

Nothing. Roughtime requests are not logged; nonces and client addresses are not stored.

Is there a charge?

No; like NTP and NTS it is public and free.