Purpose. When kv:time_mode=observed is used, attach a tiny ASCII sidecar with lightweight time observations. Evidence augments auditability and does not change core checks unless your policy requires it.
Sidecar lines (ASCII)
obs_iso_utc=<ISO_Z>
tolerance_sec=<int>
delta_sec=<int>
obs_sources_ascii=<comma-or-pipe list>
obs_evidence_sha256=<64-hex>
Formats & constraints (must)
obs_iso_utcuses exactYYYY-MM-DDThh:mm:ssZ(UTC, no subseconds; reject23:59:60).tolerance_secis a non-negative integer.delta_secis a non-negative integer; SHOULD equal the recomputed delta (nearest-second rounding allowed).obs_sources_asciiis a simple ASCII list of sources such asOS,HTTPS_Date,NTPorOS|HTTPS_Date|NTP.obs_evidence_sha256is a lowercase64-hex digest of the canonical evidence string (see below).
Canonical concatenation for evidence hash
- Build
concat_of_sources_and_reported_timesas newline-joined ASCII records, each:<source_label> "|" <iso_z>Example lines:OS|2025-10-14T04:59:03Z HTTPS_Date|2025-10-14T04:59:03Z - Join with
\n(LF). If the sidecar used\r\n(CRLF), verifiers MUST normalize to LF before hashing. - Record order SHOULD be ASCII sort by
source_label. If unspecified, verifiers MAY sort to stabilize results. - Compute:
obs_evidence_sha256 = sha256( ascii(concat_of_sources_and_reported_times) )
Verifier checks (deterministic)
- Delta bound:
delta_sec' = abs( unix(iso_utc) - unix(obs_iso_utc) )
Requiredelta_sec' <= tolerance_sec. - Delta consistency: recorded
delta_secequalsdelta_sec'(or differs by at most 1 second due to rounding). - Evidence hash: rebuild the canonical concatenation (LF-normalized) and verify
sha256( ascii(concat) ) == obs_evidence_sha256. - Outcome flag: set
EVIDENCE_OK=trueiff all evidence checks pass;absentif no sidecar is provided;falseif checks fail.
Semantics
- Evidence is advisory; anchors still provide the public no-later-than bound.
- If
kv:time_mode=observedis present but evidence is missing/invalid, a verifier MAY downgrade totime_mode=derived_utcdepending on local policy.
Policy notes
- Leap second remains invalid:
23:59:60must not appear inobs_iso_utc. - Keep all fields plain ASCII; avoid spaces and locale-specific formats.
Navigation
Back: SSM-Clock Stamp – Canonical Formatting & Normalization (2.8)
Next: SSM-Clock Stamp – Minimal Verifier Outline (2.10)