Skip to content
Preview (Alpha), release 0.1. No independent cryptographic review of the protocol or its reference verifiers has been done.

Specification, Part 3 · normative

Verification checks

Status: normative.

This document defines the named checks the rest of the protocol is phrased in, and the order in which they depend on one another. The checks are defined here, by the specification, and not by an implementation whose own conformance is judged against them.

1. What a check is, and what it is not

A check names which question has been answered, not how well. Checks are cumulative in evidence and independent in meaning: establishing authorization does not make integrity stronger, and a run that did not request authorization has not failed it: it has not been asked.

A check is never a quality score, a risk rating, or a statement about the asset. It is a statement about what a holder of the evidence was able to recompute.

A report names the checks a run requested and the checks it established (report-contract.md §3.2). It names no level, number or rank: the names below are the only identifiers of the checks.

2. The checks, in dependency order

order check question status in this version
1 structure is this the shape of a Loquitur bundle defined
2 integrity are these the bytes that were committed to defined
3 link does this public entry refer to this private evidence, and to no other defined
4 authorization was the party who signed this entitled to, at the operator’s time defined
5 transparency has the operator shown everyone the same thing reserved
6 anchoring can this be un-said reserved

Dependency. A check is established only when every check before it in this order is established. A run that establishes link over a bundle whose integrity is not established has established nothing about the link.

This prefix rule (checks_established is a prefix of checks_requested, report-contract.md §3.2) is the rule of this version of the contract; a later version may replace the prefix by a dependency graph between the checks. The statuses of a report carry the prefix OFFLINE_ because they name the evaluation mode of this version, in which the operator supplies every document and the verifier reads no network. The checks that need an observation of the world, transparency and anchoring, will report through a separate member or mode defined with them and will not reuse those statuses.

2.1 structure

The bundle is well formed: the files the manifest names are present, each object parses, and each satisfies the closed field contract for its kind. Answers is this the shape of a Loquitur bundle.

The published schemas cover the seven canonical object families in introduction.md §7, and manifest.json, p1.json and envelope_env1.json are not among them. What a verifier enforces in this check are closed field contracts (a fixed set of permitted members, required members present, each of a declared type, and no others) applied to those three bundle files, and to verification_receipt.json whenever it is present, against schemas/verification_receipt.schema.json and the rules of document-contracts.md §8 that the schema does not carry. A member the contract does not name is a rejection, not an extension point. Where bundle-objects.md makes a member’s type part of a later check instead, the type is judged there and not here: a present link of the envelope (bundle_id, bundle_manifest_sha256, p1_sha256) of another type fails its link in integrity and does not break the contract (bundle-objects.md §4). The three field sets are enumerated in bundle-objects.md, because a field set that lives only inside an implementation makes a second implementation conforming only by copying the first.

Passing structure says nothing about whether the contents are true, consistent, or authorized.

2.2 integrity

Every file digest recomputes to the value the manifest declares, and the manifest digest recomputes to the value the envelope declares. Answers are these the bytes that were committed to.

Digest self-consistency is not conformance: an object is trivially consistent with a digest computed over itself, so integrity is meaningful only above an established structure.

2.3 link

The registry entry’s manifest_hash and receipt_hash recompute from the bundle in hand. Answers does this public entry refer to this private evidence, and to no other.

link is where a public commitment stops being an assertion and becomes checkable. It says nothing about who made the entry. Every comparison it makes, its exact operands and the three values of its result are specified in registry-link.md.

2.4 authorization

The entry’s signature verifies under a key the trust registry authorizes for that issuer, for that scope, at the operator’s evaluation time, and the key is neither revoked, suspended, nor outside its validity window; and a trust root the operator pinned authenticates the trust registry at that time. Answers was the party who signed this entitled to. The evaluation time, the lifecycle states, the windows, the scope, the order of evaluation and the statuses are specified in trust-registry-authorization.md.

The trust registry is a document the verifier was handed, and authenticating it against a root is part of this check: without a pinned root the check is not established (the run is at most OFFLINE_REVIEW), and a verifier does not assume it is. The exact bytes a root signs, the shape of the trust-root document, and the order a verifier evaluates them in are specified in trust-root.md.

2.5 transparency

An entry is provably included in an append-only log whose history can be shown to extend what it showed before. Answers has the operator shown everyone the same thing.

The adversary changes here: structure to authorization constrain the issuer, transparency constrains the operator.

Status: reserved, never requested and never reported. The name is reserved so that the order is complete; its definition is planned for a later version of the protocol. No log is operated, this repository specifies no tree head, log_id, checkpoint, inclusion proof or consistency proof, and no reference package computes or verifies any of them.

Two things are already clear, and the definition has to respect both. First, inclusion and consistency proofs alone do not show that every reader was shown the same history: a log can give each reader a history that is consistent in itself and different from the one it gives another reader, and every proof each reader checks will hold. Showing that the histories are the same takes observation from outside the log, such as independent parties comparing the tree heads they were shown. Second, the cryptographic part of the check, a proof checked against a tree head and the signature on that tree head, can be checked from local files; whether the tree head is current, and whether it is the one other readers see, cannot.

2.6 anchoring

A commitment is placed where the operator cannot retract it, so that the time and content of a publication are attested by something outside the protocol. Answers can this be un-said.

Status: reserved, never requested and never reported; no anchoring is live. What an anchor must commit to is fixed in anchor-commitment.md, so the meaning is settled before the mechanism exists.

The anchor names its method, a value of the registered vocabulary anchoring_method (verification-vocabularies.md §5), and no method is checked in this version.

As for transparency, the check divides. That an anchoring record commits to the bytes in hand is cryptographic and can be checked from local files, given a copy of the record. That the record is final, and when it became so, needs observation of the system that carries it.

3. Two properties that constrain every check

structure to authorization are offline and complete. Each is decidable from the bundle, the entry, the trust registry, the trust-root document and the operator’s evaluation time in hand, with no network, no service and no dependency on the party that issued the evidence. That is the protocol’s central claim, and it is why the offline checks stop at authorization: transparency and anchoring cannot be completed offline. Their cryptographic parts can be checked from local files, as every check before them is. Freshness and finality, which both exist to establish, need observation from outside the files in hand, because both ask about something that happened elsewhere. A verifier that reported either from local files alone would be reporting a belief, not a check.

Absence is not failure. A report whose checks_established is ["structure","integrity","link"] has not failed authorization. The distinction matters in both directions: a consumer must not read a short list as a negative finding, and a producer must not present a short list as a complete one. The checks a verifier requested and established are reported explicitly for this reason, rather than being inferred from a verdict.

4. Verification modes

This section is informative. It names the postures a verifier can be in; the checks of §2 and the documents they cite are what binds.

The protocol names three verification postures, and this version defines two of them: offline and link verification. Version 0.1 has no online retrieval: a verifier fetches nothing, and every document it reads, a registry entry included, reaches it as a local file (threat-model.md §3).

4.1 Online verification

Status: reserved and not defined in this version. The name is kept for a posture in which a verifier would retrieve the registry entry itself rather than be handed it. This version defines no service to query, no retrieval procedure and no check for this posture, and the reference verifiers do not perform it. A registry entry obtained by any means is evaluated from the local file, as in §4.3, and anchoring stays reserved (§2.6).

4.2 Offline verification

A verifier examines a private bundle or disclosed package without depending on any hosted service. Offline verification requires access to the private material, or to a registry entry supplied by the operator (registry-link.md).

4.3 Link verification

A verifier holds both private material and a public registry commitment and checks that the private material corresponds to the public commitment.

4.4 Limits

Verification output is not investment advice, legal advice, regulatory approval, valuation approval, source-document truth, or a replacement for independent due diligence.

5. Change control

The set of checks and their order are closed for protocol release 0.1. Adding, removing, renaming or reordering a check is a breaking protocol change requiring normative vectors and support in every consumer, because the names appear in reports that third parties parse.

Project site: loquitur.dev

Source: loquitur-protocol/docs/specification/verification-checks.md at 3ff7899c0c76. Licence of this page's text: CC BY 4.0.