Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Spec couche 5 — air-ntp (client NTP/SNTP + NTS, patron sans-IO)

Spécification technique — Version 0.1 (proposition). Couche 5 « Services système ».

Cadrage. air-ntp = client de synchronisation d’horloge : NTPv4/SNTP (RFC 5905) + NTS (Network Time Security, RFC 8915 — temps authentifié). Maison, pur Rust, zéro-C, zéro unsafe. Crate-lib + daemon .airservice (note réseau §1 : NTP = L5, UDP).

Position et méthode

Protocole filaire → cœur sans-IO + pilote I/O (air-socket UDP). Le daemon discipline l’horloge système via une interface temps privilégiée (couche 0 clock_settime/ adjtimexadditif à instruire). Consomme air-runtime, air-base-core, et air-tls/air-crypto pour NTS.

Périmètre — moderne, sûr

  • SNTP client (RFC 4330/5905) : offset/délai, filtrage, sélection.
  • NTS (RFC 8915) — recommandé : établissement de clés par TLS 1.3 (air-tls, ALPN ntske/1) puis NTP authentifié (AEAD via air-crypto, cookies NTS). Défend contre le spoofing (NTP nu est non authentifié).
  • Discipline d’horloge bornée : jamais de saut d’horloge géant silencieux (bornes de sanité, step vs slew) ; refus des serveurs incohérents (falsetickers).
  • Omis : mode serveur ; NTP symétrique/broadcast ; autokey (déprécié, remplacé par NTS).

Anatomie : les 9 composants

#Composantair-ntpPur ?
1Framer// TRIVIAL : datagramme UDP = 1 paquet NTP (48 o + extensions)✅ triv.
2CodecNtpPacketCodec — en-tête 48 o + champs d’extension NTS bornés
3StateMachineSyncStateMachine — poll, filtre, algorithme de discipline (RFC 5905 §11)
4HandshakerNTS-KE via air-tls (établit cookies+clés) ; sinon // NO (NTP nu)✅ + air-tls
5Flow Controller// NO
6Multiplexer// NO
7Timer ManagerPollTimers — intervalle de poll adaptatif (minpoll/maxpoll) ; horloge injectée
8Session ContextNtsSession (cookies+clés AEAD) + état de discipline (offset/jitter)
9Extension hookschamps d’extension NTS (RFC 8915)

Inventaire — ~10 objets

Surface (~6) : NtpClient, NtsConfig, TimeSample (offset/delay/dispersion), ClockDiscipline (step/slew), NtpEvent (Synchronized/Stepped/Unsynced), NtpError. Cœur sans-IO (~4) : NtpPacketCodec, SyncStateMachine, PollTimers, NtsSession.

Dépendances

air-socket (L1, UDP), air-tls (L2, NTS-KE), air-crypto (L1, AEAD NTS), air-runtime/air-base-core (L1). Réglage d’horloge : clock_settime (step) déjà présent en couche 0 ; additif adjtimex (slew, discipline fine) — instruit (ADR-083). Zéro-C, zéro tierce.

Sécurité & tests

  • NTS préféré (temps authentifié) ; NTP nu marqué non authentifié (avertissement).
  • Bornes de sanité sur l’offset (anti-saut) ; sélection multi-serveurs (anti-falseticker).
  • Tests : codec fuzzé (paquets + extensions NTS), discipline property (offset borné), timers virtual clock, interop chrony/ntpd/serveur NTS (Cloudflare time.cloudflare.com).

Travail à reprendre

  • Additif couche 0 : adjtimex/clock_adjtime (slew) — instruit (ADR-083) ; clock_settime (step) déjà présent.
  • Daemon .airservice (L5) ; sources multiples + sélection ; ABI C différée.

Licence : MPL 2.0. Statut : spec air-ntp (L5) v0.1 — client SNTP + NTS, sans-IO.