Status: Roadmap preview (not part of the normative spec). Does not change the core stamp or verification rules.
Caution: Research/observation only. Not for operational or safety-critical use.
14.1 Unchanged core (device-ready)
- Stamp line (6 fields):
SSMCLOCK1|iso_utc|rasi_idx|theta_deg|sha256(file)|chain[|kv:...] - Clock from UTC only:
wrap360(x) = x - 360*floor(x/360)theta_deg = wrap360( (unix_seconds / 86400) * 360 )rasi_idx = floor(theta_deg / 30) - Chain (append-only):
chain_k = sha256( ascii(chain_{k-1} + "|" + stamp_core) )withchain_0 = "0"*64 - ASCII discipline: 7-bit ASCII only;
|is the sole delimiter; hex digests are lowercase 64-hex.
14.2 Device profiles (choose one)
- HW-P1 — self-stamp (fully offline).
Device computessha256(file_bytes), clock, chain, and emits the final line. Stores sidecar/ledger locally. - HW-P2 — relay-anchor (field friendly).
Device self-stamps; a laptop later collects stamps by UTC day and publishes the daily roll-up:rollup_D = sha256( ascii(Stamp_1 "|" ... "|" Stamp_n) )(canonical sort). - HW-P3 — co-stamp (host time, device chain).
Host providesiso_utc; device still computeschain_kto preserve append-only ordering on the device.
All three produce identical stamp lines and verify with the same rules.
14.3 kv: tail for device provenance (optional, additive)
Shape: kv:k1=v1;k2=v2;... (ASCII; unknown keys ignored; no spaces; | and ; not allowed in values).
Recommended keys (examples):device=<ascii_token> • chain_id=<8hex> • fw=<semver> • slot=<A|B> • tick=<u64> • time_mode=<derived_utc|observed> • rtc_quality=<ppm_or_class> • theta_prec=5 • algo=sha256 • chain_algo=sha256 • float=ieee75464
Example line (illustrative):...|chain|kv:device=SN12345;chain_id=1a2b3c4d;fw=1.3.2;slot=A;tick=18340219;time_mode=derived_utc;rtc_quality=25ppm;theta_prec=5;algo=sha256;chain_algo=sha256;float=ieee75464
14.4 Fixed-point implementation (no floating point needed)
- Micro-degrees pipeline (default
theta_prec=5):theta_mic = ((unix_seconds % 86400) * 360000000) / 86400theta_str = print_fixed5(theta_mic)→ printsDDD.dddddwith round-half-to-evenrasi_idx = theta_mic / 30000000(integer division) - Hashing: streaming is OK; the digest must match monolithic bytes.
- Print: exactly 5 decimals (or
theta_precif configured); decimal point is..
14.5 Storage patterns (robust on power loss)
- Sidecar-in-flash. Append each final line as ASCII, length-prefixed.
- Ledger ring. Fixed-size ASCII rows; when full, snapshot
chain_tipto a WORM/OTP slot. - Crash-safety write. Write
stamp_core, flush; computechain_k; append the final line. On boot, repair by recomputing if a partial write is detected.
14.6 Anchoring without networks (cheap and later)
A field laptop batches the day’s stamps (UTC key), sorts canonically by (iso_utc, stamp_core, chain), and publishes:
SSM-Clock Stamp (SSM-CS) -- Daily Anchor
date=YYYY-MM-DD
count=<n>
rollup_algo=sha256
rollup_sha256=<64-hex>
sort=iso_utc,stamp_core,chain
source=<ledger|sidecars>
This yields a “no-later-than” bound without changing any stamp. Publish to any public venue.
14.7 Threats & simple mitigations (device context)
- Ledger rewrite after capture → periodic
witness_chain_tipin WORM/OTP; re-walk detects forks. - Clock drift/spoofing → allowed;
iso_utcis declarative. Narrow backdating by publishing anchors frequently. Optionally recordrtc_quality. - Cloned units → use
kv:device=<pubkey_fp>and (optionally) sign the exact ASCII stamp line:sig = Ed25519_sign(priv, ascii(SSMCLOCK1|...|chain))
(signature is additive; verification of SSM-CS remains unchanged)
14.8 Compliance checklist (device build)
- Emits exactly one ASCII line:
SSMCLOCK1|iso_utc|rasi_idx|theta_deg|h64|h64[|kv:...]] iso_utc = "YYYY-MM-DDTHH:MM:SSZ"(UTC only; no subseconds;:60forbidden).theta_degprints with exactlytheta_precdecimals (default 5, ties-to-even).- Hashes are lowercase 64-hex; hashing inputs are ascii(…) of the literal strings.
- Chain uses
chain_0 = "0"*64and the ASCII recurrence above. - If
kv:present: validate recognized keys; ignore unknown keys.
Navigation
Back: SSM-Clock Stamp – Minimal Test Vectors (13)
Next: SSM-Clock Stamp – Conclusion (15)