Method & limits

The evidence should never claim more than it knows.

How Kinwit seals, aligns and reports evidence, and exactly where each guarantee stops.

Integrity

A green check means the bytes are unchanged, nothing more.

The manifest is canonicalized with RFC 8785 and signed with Ed25519. Every file is bound by SHA-256 and an RFC 9162 Merkle tree over 64 KB chunks. That proves the bytes match what the key holder sealed. It does not prove the sensors were right or that the key holder was honest at capture.

Trust

A package never vouches for itself.

Verifiers look up the signer by key_id in a registry held outside the package and shipped with the deployment. Public keys inside a package are ignored. Edited evidence re-signed by someone else fails as an unknown signer or an invalid signature.

Provenance

Every event points at its bytes.

Each event records its source, clock domain, topic or line, absolute byte range and Merkle leaf. The facility log is also hash-chained line by line, so an edit is localized inside that source before the package signature is even checked.

Time

Raw timestamps from different clocks are never compared.

Each logged sync exchange bounds the clock offset from above and below. Intersecting those bounds for a linearly drifting clock gives a guaranteed interval under three stated assumptions (the NTP on-wire model, RFC 5905, with Marzullo-style intersection extended to skew). Events become intervals. A is said to precede B only when A ends before B begins (Allen, 1983); otherwise the answer is “indeterminate”.

Findings

No AI decides anything.

A versioned, deterministic engine turns raw bytes into findings. Each one has a formula, input event IDs, units, a basis and its limitations. On every ingest the server re-runs the engine and checks that its output matches the signed findings byte for byte.

Verification

Two implementations, no shared code.

The TypeScript verifier (WebCrypto) runs in the browser, the API and the CLI. A second verifier, in stdlib-only Python, implements Ed25519 and JSON canonicalization from the RFCs independently. Both must agree on every package and on which chunk a tampered copy breaks.

Simulation

Separately generated is not independent.

Today's robot recordings come from a deterministic kinematic simulator (Regulated Pure Pursuit, ray-cast lidar, Category-1 stop model). The facility log comes from a separate generator. Neither is a real robot or PLC, and both are labelled simulated in every file, view and report.

Security

Prototype, not audited.

The public demo is read-only. Ingest requires an admin token, verifies before sealing, and writes an append-only audit log. There is no SOC 2 and no certification, and Kinwit makes no claim of legal admissibility.

References

Standards and prior work

  • RFC 8785 (JSON Canonicalization), RFC 8032 (EdDSA), FIPS 180-4 (SHA-256), RFC 9162 (Merkle trees, Certificate Transparency v2)
  • RFC 5905 (NTPv4); Marzullo, 1984; Moon, Skelly & Towsley, 1999 (clock skew estimation)
  • Allen, 1983 (temporal intervals); Schneier & Kelsey, 1999 and Crosby & Wallach, 2009 (tamper-evident logs)
  • Macenski et al., 2023 (Regulated Pure Pursuit); IEC 60204-1 and ISO 13850 (stop categories, for context only)
  • Winfield & Jirotka, 2017 (the ethical black box); Avizienis, 1985 (N-version programming); MCAP file format