Skip to content

Make capture verification bounded, historical and explicit about evidence quality #73

Description

@ctfbruce

Problem

The repository already parses PCAP/PCAPNG and checks real tags with the correct debuglet_ids response field. It still obtains candidate runs and schedule material from the current live registry, iterates attacker-supplied epoch/candidate work and relies on capture timestamps without a durable evidence/trust contract.

Proposed change

Provide a bounded verifier and portable evidence bundle that distinguishes lookup, pending disclosure, verified tag, invalid tag, missing history and unsupported formats/modes.

Acceptance criteria

  • Cap capture sizes, block/packet counts, candidate IDs and hash-chain work; reject malformed lengths, extreme epoch values and truncated captures without excessive CPU/memory.
  • Verify independently supplied good/altered/truncated/expired-history fixtures against versioned algorithm vectors, including every supported capture link type.
  • Export and consume dated authenticated schedule/run metadata so an old capture can be checked after registry replacement or shutdown.
  • Use explicit result categories and describe what timestamp/receiver trust is required; no key-presence-only success and no implication that packet attribution proves a measurement conclusion.
  • Publish a stable result/fixture contract for any companion browser implementation; changes outside this repository require a separately identified companion change.

Current evidence

validation and product-contract gap; source inspection only, no new runtime reproduction. Backlog classification is based on source inspection; this issue does not claim a new runtime reproduction.

Dependencies

  • #70 — Specify and version packet-tag algorithms and verification limits
  • #71 — Persist schedule identities and roll TESLA chains without stale-key reuse
  • #72 — Define TESLA clock uncertainty and suspend/clock-step behaviour

Related work

These are integration points, not prerequisites for starting this issue.

  • #89 — Enforce ownership and role authorization on every HTTP operation
  • #11 — Export a versioned, reproducible measurement result through SDK and CLI
  • #2 — Version the HTTP API and publish a machine-readable contract

Priority context

Required before accepting untrusted users or advertising the corresponding protected capability; not a blocker for the trusted local TEST alpha.

Validation must use owned local fixtures on supported Linux environments. Record the implementing merge request and relevant test results before closing this issue.


Imported from GitLab issue 72. Originally opened 2026-09-10. Historical GitLab links may require access to the original project.

Activity

  1. added
    FeatureA specific missing product behavior.
    P2Follow-on improvement or optional expansion after core requirements.
    Source reviewedCurrent source evidence checked; no new runtime reproduction claimed by backlog creation.
    Traffic policy and attributionConsistent traffic policy, aggregate budgets and evidence-backed packet attribution.
    on Sep 24, 2026
  2. vincent10400094 commented on Sep 29, 2026

    @vincent10400094
    Member

    Plan (agreed 2026-09-29): this becomes the offline path of a single verification entry point: dbl verify / client.Verify in Go, with tools/verify_pcap.py kept consistent.

  3. ctfbruce commented on Oct 7, 2026

    @ctfbruce
    CollaboratorAuthor

    PR #382, merged as 072ab00. All 16 required jobs passed on the exact candidate and merged main.

    The verifier now has server-assisted pre-disclosure checks, signed receipts, mixed disclosed-packet classifications and retained-capture restart coverage alongside the bounded offline reader and versioned fixtures.

    This remains open because exported offline schedules and run lookups are still editable claims rather than authenticated metadata. Receipts authenticate their packet digest and verdict, but do not sign every bundled schedule/lookup. The remaining criterion needs authenticated metadata and corresponding tamper checks; docs/verification.md states that boundary explicitly.

  4. ctfbruce commented on Oct 7, 2026

    @ctfbruce
    CollaboratorAuthor

    #409 completes the remaining authenticated-metadata gap recorded above. Exported dated lookups now bind the source/query time, retention boundary, run identities/intervals, schedules and disclosure observations; enrolled executor schedule proofs are checked independently with retained certificate pins. Strict offline verification rejects altered/missing signatures, key replacement and replay for another address or time. A real API export remains verifiable after the backend shuts down.

    The existing bounded reader, shared versioned vectors, Python outcome comparisons and #382 retained-capture checks remain in place. Candidate counts are checked before certificate work, including unsigned legacy lookups. The verification contract defines result categories, work limits and the portable format for companion implementations.

    History authentication, executor-origin authentication and capture-clock trust are separate. Without an independently obtained receiver-to-schedule clock observation, capture time remains untrusted; actual measurement acceptance stays open in #72. A tag attributes packets to a run, not a measurement conclusion. This closes the core verifier work and does not claim browser authentication support.

    Merged as a9d865d. All 17 checks passed on the exact candidate (guest source check) and the identical merged main (guest source check).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    FeatureA specific missing product behavior.P2Follow-on improvement or optional expansion after core requirements.Source reviewedCurrent source evidence checked; no new runtime reproduction claimed by backlog creation.Traffic policy and attributionConsistent traffic policy, aggregate budgets and evidence-backed packet attribution.

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions