Expand description
An implementation of the Roughtime secure time synchronization protocol.
Roughtime aims to achieve rough time synchronisation in a secure way that doesn’t depend on any particular time server, and in such a way that, if a time server does misbehave, clients end up with cryptographic proof of it.
§Protocol
Roughtime messages are represented by RtMessage
which
implements the mapping of Roughtime u32
tags
to byte-strings.
§Keys and Signing
Roughtime uses an Ed25519 key pair as the server’s long-term identity and a second key pair (signed by the long-term key) as a delegated on-line (ephemeral) key.
LongTermKey
and OnlineKey
implement these elements of the protocol. The sign
module provides
signing and verification operations.
§Client
A Roughtime client can be found in src/bin/client.rs
. To run the client:
$ cargo run --release --bin client roughtime.int08h.com 2002
Consult the client’s --help
output for all runtime options.
§Server
The core Roughtime server implementation is in src/server.rs
and the server’s CLI can
be found in src/bin/roughenough-server.rs
.
The server has multiple ways it can be configured,
see ServerConfig
for the configuration trait and
Modules§
- config
- Ways to configure the Roughenough server.
- grease
- Adds deliberate errors to client responses as part of the Roughtime Ecosystem.
- key
- Representations and management of Roughtime’s online and long-term Ed25519 keys
- kms
- Protect the server’s long-term key with envelope encryption and a key management system.
- merkle
- Merkle Tree implementation using SHA-512 and the Roughtime leaf and node tweak values.
- server
- Implements the Roughenough server functionality.
- sign
- A multi-step (init-update-finish) interface for Ed25519 signing and verification
- stats
- Facilities for tracking client requests to the server
Structs§
- RtMessage
- A Roughtime protocol message; a map of u32 tags to arbitrary byte-strings.
Enums§
- Error
- Error types generated by this implementation
- Tag
- An unsigned 32-bit value (key) that maps to a byte-string (value).
Constants§
- CERTIFICATE_
CONTEXT - Prefixed to the server’s certificate before generating or verifying certificate’s signature
- HASH_
LENGTH - Size (in bytes) of a SHA-512 hash
- MIN_
REQUEST_ LENGTH - Minimum size (in bytes) of a client request
- NONCE_
LENGTH - Size (in bytes) of the client’s nonce
- PUBKEY_
LENGTH - Size (in bytes) of an Ed25519 public key
- RADIUS_
LENGTH - Size (in bytes) of server’s time uncertainty value
- SEED_
LENGTH - Size (in bytes) of seeds used to derive private keys
- SIGNATURE_
LENGTH - Size (in bytes) of an Ed25519 signature
- SIGNED_
RESPONSE_ CONTEXT - Prefixed to the server’s response before generating or verifying the server’s signature
- TIMESTAMP_
LENGTH - Size (in bytes) of server’s timestamp value
- TREE_
LEAF_ TWEAK - Value prepended to leaves prior to hashing
- TREE_
NODE_ TWEAK - Value prepended to nodes prior to hashing
- VERSION
- Version of Roughenough
Functions§
- roughenough_
version - Roughenough version string enriched with any compile-time optional features