RoughTime

This host runs a RoughTime synchronization server implementing Revision 15 (0x8000000c) of the IETF protocol. RoughTime provides cryptographically verifiable time without requiring a trusted network path.

New to RoughTime? Read our announcement: Why We Built a New RoughTime Implementation

We operate this server for community benefit. It is intended for synchronization, timestamping, and testing. Please use it responsibly.

Server Information

Addressroughtime.sturdystatistics.com
Port2002
ProtocolUDP
Public KeyNqIjwLopQn6yQChtE21Mb97dAbAPe5UOuTa0tOakgD8=

Verify this key via DNS:
dig -t TXT roughtime.sturdystatistics.com

Quick Start

You can query this server immediately using our command-line client

clj -M:run :server-name "SturdyStatistics"

Tip: For verifiable time, query at least three independent servers and verify the response chain. Cloudflare maintains a public ecosystem list here.

What is RoughTime?

RoughTime is a secure time service. Servers sign batches of client requests, chaining them with Merkle trees. Each response proves the server’s notion of time and prevents undetected backdating/forward-dating across requests.

Read more about our mission and architectural choices.

Live Example Results

skew0
expires in2d 3h
Request Message
{"VER" "0x8000000c",
 "SRV"
 ["4a4344b8 ed36a263 cae105a2 92fe2661"
  "d964691d be07548f 43b5b523 2671f3ab"],
 "NONC"
 ["30a79eda 0de0d2ea a7188d15 ea4ec35d"
  "9fc2a7ca 55933d0f 8a631dec fd66ce2d"],
 "TYPE" 0,
 "ZZZZ" "0{912}"}
Response Message
{"SIG"
 ["1d966ddb c576a2dd 7ab3af20 59be092b"
  "ddd25c64 223580b1 b3fd3dbc ceb96e7d"
  "12376a50 137de3d0 2aee3bcd fafc310a"
  "d6d7175b b0be78ed bbfa98cb c1d5a901"],
 "NONC"
 ["30a79eda 0de0d2ea a7188d15 ea4ec35d"
  "9fc2a7ca 55933d0f 8a631dec fd66ce2d"],
 "TYPE" 1,
 "PATH" [],
 "SREP"
 {"VER" "0x8000000c",
  "RADI" 10,
  "MIDP" 1775535429,
  "VERS"
  ("0"
   "0x80000001"
   "0x80000002"
   "0x80000003"
   "0x80000004"
   "0x80000006"
   "0x80000008"
   "0x80000009"
   "0x8000000a"
   "0x8000000b"
   "0x8000000c"),
  "ROOT"
  ["de8133ca c41e8986 2d03140c a918616c"
   "72f06f75 f66d1556 37919703 3548d353"]},
 "CERT"
 {"SIG"
  ["628b09c0 171bc9ae 4a704cba 618adfff"
   "cbbbc3cf 960905d5 04dbf43d c3ae7ad6"
   "3f7f07db 9370cc23 6a8e934e 35aaa8cb"
   "7ff0f042 b23bfcb2 7e3d47a9 aa3fa809"],
  "DELE"
  {"PUBK"
   ["e12601ef 39d45314 b64678a1 a8efbbd5"
    "960ff59b adc64bae 8e6313f9 3b4f5762"],
   "MINT" 1775030400,
   "MAXT" 1775721600}},
 "INDX" 0}
skew0
expires in7h 33m
Request Message
{"VER" "0x8000000b",
 "SRV"
 ["0d93616f 19641cbf 68f8b41a 1b659797"
  "fc9330b6 58a5042d 6be10211 94ee290c"],
 "NONC"
 ["b0d575ff edfab6dc 888418a1 33b12bdb"
  "cb9a9675 e9a772c7 285cbd5a b215d3ca"],
 "ZZZZ" "0{912}"}
Response Message
{"SIG"
 ["8675641c 5ecede2b 1a4f1475 829c6df7"
  "32490e7e 2e1fbf18 b6fdd1d7 bbed8416"
  "d82a7785 fab6f056 8d149af7 487c8733"
  "7d8a1a45 0b582b30 2d3efe3b 23c58102"],
 "VER" "0x8000000b",
 "PATH" [],
 "SREP"
 {"RADI" 1,
  "MIDP" 1775535429,
  "ROOT"
  ["05ce9fc2 0a437833 d95e8e1b 44201b8d"
   "0b664d99 24365838 0bc97988 45337c1f"]},
 "CERT"
 {"SIG"
  ["e67ae8bb 01100629 814acf8c eb2520f8"
   "083d74f0 5bd5b1e4 dc03b6fa f4f5da9a"
   "f11b1d27 1d33436e f139f168 3c9922ce"
   "31c6f4d8 c5ccb25b 623e80b7 3d2a330e"],
  "DELE"
  {"PUBK"
   ["81229e78 5b94b4bb 3138beef 0e491629"
    "3a60f2b2 6e57eb93 ce7fd9a7 66a9ae15"],
   "MINT" 1775476230,
   "MAXT" 1775562630}},
 "INDX" 0}
skew0
expires in
Request Message
{"VER" "0x8000000c",
 "SRV"
 ["95645ff5 c385c24e ba48d509 528a4a74"
  "e0861c0b 57f46c25 ee5c6a48 8a23246f"],
 "NONC"
 ["4a7fc88e e4644b9f 95968687 b79c0bea"
  "5a5ce457 a76f5ec5 d77ad082 14c43643"],
 "TYPE" 0,
 "ZZZZ" "0{912}"}
Response Message
{"SIG"
 ["a184fb0a 4371999b f265680a 5208bee2"
  "3bef6139 3c014896 bd06082e 1c9fd2fd"
  "188ca557 eca7e19a 13e33453 cf219092"
  "9566c120 d7de6261 dc055105 7fc11800"],
 "NONC"
 ["4a7fc88e e4644b9f 95968687 b79c0bea"
  "5a5ce457 a76f5ec5 d77ad082 14c43643"],
 "TYPE" 1,
 "PATH" [],
 "SREP"
 {"VER" "0x8000000c",
  "RADI" 5,
  "MIDP" 1775535429,
  "VERS" ("0" "0x8000000c"),
  "ROOT"
  ["4c2ff5a6 c02c6b80 c1db47c3 b4fe271a"
   "a4f82eb8 a032eca7 9d9b4996 52e081f3"]},
 "CERT"
 {"SIG"
  ["24ec1900 45666e89 c0283478 f413d194"
   "41e0b395 c4d7ad81 354e8b55 7d907efd"
   "d843b942 779a8cdf a4e82ef1 b6bab7fa"
   "f242f079 c8901201 638264a5 1b9ac207"],
  "DELE"
  {"PUBK"
   ["b9045bea 9dccd4ba 0c34181f 5cf69943"
    "00d49b3b 86115595 18e01bbe 66f9c583"],
   "MINT" 0,
   "MAXT" 18446744073709551615}},
 "INDX" 0}
skew0
expires in9mo 25d
Request Message
{"VER" "0x8000000c",
 "SRV"
 ["8c4bbf59 8f43ff13 da82bfeb 9e0652a4"
  "e372ab03 c2cae3b6 f661ea29 c8ebacc2"],
 "NONC"
 ["8c3984f0 4bfb1ab4 a2ded6e1 ec223cf2"
  "d23b0958 6cb45895 c81db704 b63d4e58"],
 "TYPE" 0,
 "ZZZZ" "0{912}"}
Response Message
{"SIG"
 ["2894eeb0 c2f04a3c 22c1c6ec 83ed95d0"
  "2718f6a0 b2cdfca8 faf5c47a c4f25d8e"
  "d39e3e69 0ea455bf ce62bdd4 4ad06304"
  "3bb839f2 02deae0d d45ef0cf 8ae90108"],
 "NONC"
 ["8c3984f0 4bfb1ab4 a2ded6e1 ec223cf2"
  "d23b0958 6cb45895 c81db704 b63d4e58"],
 "TYPE" 1,
 "PATH" [],
 "SREP"
 {"VER" "0x8000000c",
  "RADI" 1,
  "MIDP" 1775535429,
  "VERS" ("0x8000000c"),
  "ROOT"
  ["dcb511a6 93de476c c57dc94d bd009a3b"
   "26bf702e bf2c0303 ae70ef06 21aba890"]},
 "CERT"
 {"SIG"
  ["3a20f9a3 e7ad50b0 636f3819 61266ab0"
   "283e493a 5f118dd3 f7f47524 fe3b3b24"
   "4ed5653f 333061c8 0bfd7836 82607698"
   "ab5ab5f9 3d8ccff2 bfb600ec 4a4e610e"],
  "DELE"
  {"PUBK"
   ["14c0ff4f a3aa7597 7c4f14b0 0b974646"
    "fb241196 92f35bf2 4d496cf7 119a50a4"],
   "MINT" 1768694400,
   "MAXT" 1801440000}},
 "INDX" 0}

Error: No UDP response received

{:server
 {:name "time.txryan.com",
  :version "Google-Roughtime",
  :version-no 0,
  :supported-versions nil,
  :msg-size 1024,
  :public-key-type "ed25519",
  :public-key "iBVjxg/1j7y1+kQUTBYdTabxCppesU/07D4PMDJk2WA=",
  :addresses [{:protocol "udp", :address "127.0.0.1:2015"}]},
 :attempts 3,
 :timeout-ms 1000}