| Internet-Draft | Proof of Process | February 2026 |
| Condrey | Expires 10 August 2026 | [Page] |
This document specifies Proof of Process (PoP), an evidence framework for digital authorship attestation. The framework produces tamper-evident, independently verifiable process evidence describing how documents evolve over time, without capturing document content or keystroke data.¶
Proof of Process implements a specialized profile of the Remote ATtestation procedureS (RATS) architecture, extending it with behavioral entropy bindings, Verifiable Delay Function (VDF) temporal proofs, and a taxonomy of absence claims with explicit trust requirements. The specification defines two complementary CBOR-encoded formats: Evidence Packets (.pop) produced by Attesters during document authorship, and Attestation Results (.war) produced by Verifiers after appraising Evidence.¶
The framework is designed around four core principles: privacy by construction (no content storage), zero trust (locally generated, independently verifiable), evidence over inference (observable facts, not conclusions), and cost-asymmetric forgery (expensive to fake, not impossible). This specification does not address AI detection, stylometric analysis, or intent inference.¶
This note is to be removed before publishing as an RFC.¶
Status of this Memo: This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 10 August 2026.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document.¶
This document specifies Proof of Process, an evidence framework for digital authorship attestation. The framework produces tamper-evident, independently verifiable process evidence describing how documents evolve over time.¶
Digital documents lack provenance information about their creation process. While cryptographic signatures prove key possession and timestamps prove existence at a point in time, neither addresses a fundamental question: how did this document come to exist?¶
Existing approaches to authorship verification fall into two categories, each with significant limitations:¶
Screen recording, keystroke logging, and continuous monitoring capture detailed process information but fundamentally violate author privacy. Such systems require trust in the monitoring infrastructure and create risks of data exfiltration or misuse. The evidence they produce is not independently verifiable without access to surveillance archives controlled by third parties.¶
Stylometric analysis, AI detection tools, and linguistic forensics attempt to infer process from product. These approaches make probabilistic claims about authorship based on content patterns but cannot provide verifiable evidence of the creation process. They are vulnerable to false positives, false negatives, and adversarial manipulation.¶
Neither approach produces evidence that is simultaneously:¶
The need for such evidence is growing across multiple domains:¶
This specification defines:¶
This specification explicitly excludes:¶
This specification implements a specialized profile of the Remote ATtestation procedureS (RATS) architecture [RFC9334] with domain-specific extensions for behavioral evidence and process documentation.¶
The RATS role mappings are:¶
The Evidence produced by this specification extends standard RATS evidence with behavioral entropy bindings and Verifiable Delay Function proofs for temporal ordering.¶
The Proof of Process framework is designed around four core principles:¶
The framework enforces privacy through structural constraints, not policy promises:¶
Evidence generation and verification are fully decoupled:¶
The framework provides observable evidence, not conclusions:¶
The framework makes forgery expensive relative to genuine creation:¶
IMPORTANT: This framework does not claim to make forgery impossible. It raises the cost of forgery relative to honest participation and provides quantified bounds on attack economics.¶
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.¶
This document uses the following terms:¶
The primary evidence artifact produced by the Attester, containing checkpoint chains, behavioral entropy bindings, VDF proofs, and optional attestations. The file extension ".pop" derives from "Proof of Process." Evidence Packets are CBOR-encoded with semantic tag 1347571280 (0x50505020, ASCII "PPP ").¶
The verification certificate produced by a Verifier after appraising an Evidence Packet. Contains the verification verdict, verified claims, confidence score, and Verifier signature. The file extension ".war" derives from "Writers Authenticity Report." Attestation Results are CBOR-encoded with semantic tag 1463894560 (0x57415220, ASCII "WAR ").¶
A cryptographic snapshot of document state at a point in time, including content hash, timing proof, and behavioral entropy binding. Checkpoints form a hash chain where each checkpoint references its predecessor.¶
Captured behavioral entropy from human input events, bound to the checkpoint chain. Unlike injected entropy (random delays added by software), captured entropy commits to actual measured timing that existed only at the moment of observation. See Section 3 for detailed specification.¶
A cryptographic primitive that requires sequential computation and cannot be parallelized, used to establish minimum elapsed time between checkpoints. The VDF output for each checkpoint is entangled with the previous checkpoint and behavioral entropy, preventing precomputation. See Section 4 for detailed specification.¶
A claim that can be verified from the Evidence Packet alone, without trusting the Attesting Environment beyond basic data integrity. Examples include checkpoint chain integrity, VDF proof validity, and minimum elapsed time bounds.¶
A claim that requires trust in the Attesting Environment's accurate reporting of monitored events. Examples include behavioral anomaly detection and input source attribution. Such claims explicitly document their trust requirements.¶
The software and hardware environment where Evidence is generated. Per the RATS architecture [RFC9334], the AE produces claims about its own state and the processes it observes.¶
A classification of Evidence Packets based on which optional sections are present. Tiers range from Basic (checkpoint chain only) to Maximum (hardware attestation, external anchors, forgery cost analysis). See Section 2.6 for tier definitions.¶
This specification is organized as follows:¶
Appendices provide CDDL schemas, test vectors, and implementation guidance.¶
Data structures in this document are specified using the Concise Data Definition Language (CDDL) [RFC8610]. CDDL provides a notation for expressing CBOR and JSON data structures.¶
The normative CDDL definitions appear inline in the relevant sections.¶
Both Evidence Packets and Attestation Results use CBOR (Concise Binary Object Representation) encoding per [RFC8949]. CBOR provides efficient binary encoding with support for semantic tags and extensibility.¶
This specification uses:¶
Cryptographic signatures use COSE ([IANA.cose], CBOR Object Signing and Encryption) [RFC9052]. The COSE_Sign1 structure provides single-signer signatures suitable for Evidence and Attestation Result authentication.¶
Recommended algorithms:¶
This specification defines an Entity Attestation Token (EAT) profile per [RFC9711]. EAT provides a framework for attestation claims with support for custom claim types.¶
The EAT profile URI for Proof of Process evidence is:¶
https://example.com/rats/eat/profile/pop/1.0¶
Custom EAT claims proposed for IANA registration are defined in Section 13.¶
This document uses the following notation for cryptographic hash functions:¶
SHA-256 is the RECOMMENDED hash algorithm. Implementations MAY support SHA3-256 for algorithm agility.¶
This section defines the top-level architecture of the witnessd Proof of Process evidence model. The design follows the RATS (Remote ATtestation procedureS) architecture [RFC9334] while introducing domain-specific extensions for behavioral evidence and process documentation.¶
This specification implements a RATS [RFC9334] profile with these role mappings: the witnessd-core library acts as Attester, producing Evidence Packets (.pop files); verification implementations act as Verifiers, producing Attestation Results (.war files); and consuming entities (institutions, publishers) act as Relying Parties.¶
Key properties: Evidence is generated locally on the Attester device without network dependency; verification requires only the Evidence packet; Evidence contains cryptographic hashes, not content; behavioral signals are aggregated into statistical summaries.¶
The witnessd protocol defines two file formats that serve distinct roles in the attestation workflow:¶
The .pop (Proof of Process) file is the primary Evidence artifact produced by the Attester. It contains all cryptographic proofs and behavioral evidence accumulated during document authorship.¶
CBOR encoding with semantic tag:¶
Tag: 1347571280 (0x50505020, ASCII "PPP ") Type: tagged-evidence-packet¶
The Evidence packet is the authoritative record of the authoring process. It may be:¶
The .pop file is typically larger than the .war file because it contains complete checkpoint chains, VDF proofs, and behavioral evidence.¶
The .war (Writers Authenticity Report) file is the Attestation Result produced by a Verifier after appraising an Evidence packet. It serves as a portable verification certificate.¶
CBOR encoding with semantic tag:¶
Tag: 1463894560 (0x57415220, ASCII "WAR ") Type: tagged-attestation-result¶
The Attestation Result is designed for distribution alongside published documents. It provides:¶
Relying Parties may trust the .war file based on the Verifier's reputation, or they may request the original .pop file for independent verification.¶
The two formats are linked by the reference-packet-id field in the Attestation Result, which matches the packet-id of the appraised Evidence packet:¶
Evidence Packet (.pop) Attestation Result (.war) +-------------------+ +------------------------+ | packet-id: UUID |<----------| reference-packet-id: | | | | UUID (same value) | +-------------------+ +------------------------+¶
This binding ensures that each Attestation Result is unambiguously tied to a specific Evidence packet.¶
The evidence-packet structure contains the complete attestation evidence produced by the Attester. The normative CDDL definition is provided in the schema appendix; this section describes the semantic meaning of each component.¶
evidence-packet = {
1 => uint, ; version
2 => tstr, ; profile (EAT profile URI)
3 => uuid, ; packet-id
4 => pop-timestamp, ; created
5 => document-ref, ; document
6 => [+ checkpoint], ; checkpoints
; Tiered optional sections
? 10 => presence-section, ; presence
? 11 => forensics-section, ; forensics
? 12 => keystroke-section, ; keystroke
? 13 => hardware-section, ; hardware
? 14 => external-section, ; external
? 15 => absence-section, ; absence
? 16 => forgery-cost-section, ; forgery-cost
? 17 => declaration, ; declaration
* tstr => any, ; extensions
}
¶
EAT profile URI identifying this specification:¶
https://example.com/rats/eat/profile/pop/1.0¶
IANA registration to be requested upon working group adoption.¶
The optional sections (keys 10-17) correspond to evidence tiers. Their presence determines the evidence strength:¶
| Key | Section | Tier Contribution | Reference |
|---|---|---|---|
| 10 | presence-section | Standard (+) | - |
| 11 | forensics-section | Enhanced (+) | - |
| 12 | keystroke-section | Enhanced (+) | Section 3 |
| 13 | hardware-section | Maximum (+) | - |
| 14 | external-section | Maximum (+) | - |
| 15 | absence-section | Maximum (+) | Section 5 |
| 16 | forgery-cost-section | Maximum (+) | Section 6 |
| 17 | declaration | All tiers | - |
The evidence-packet structure supports forward-compatible extensions through string-keyed fields:¶
The checkpoint chain is the core evidentiary structure. Each checkpoint represents a witnessed document state, cryptographically linked to its predecessor.¶
checkpoint = {
1 => uint, ; sequence
2 => uuid, ; checkpoint-id
3 => pop-timestamp, ; timestamp
4 => hash-value, ; content-hash
5 => uint, ; char-count
6 => uint, ; word-count
7 => edit-delta, ; delta
8 => hash-value, ; prev-hash
9 => hash-value, ; checkpoint-hash
10 => vdf-proof, ; vdf-proof
11 => jitter-binding, ; jitter-binding
12 => bstr .size 32, ; chain-mac
* tstr => any, ; extensions
}
¶
The checkpoint chain forms a cryptographic hash chain through the prev-hash linkage:¶
+---------------+ +---------------+ +---------------+ | Checkpoint 0 | | Checkpoint 1 | | Checkpoint 2 | |---------------| |---------------| |---------------| | prev-hash: |<----| prev-hash: |<----| prev-hash: | | (32 zeros) | H | H(CP_0) | H | H(CP_1) | | checkpoint- |---->| checkpoint- |---->| checkpoint- | | hash: H_0 | | hash: H_1 | | hash: H_2 | +---------------+ +---------------+ +---------------+¶
The checkpoint-hash is computed as:¶
checkpoint-hash = H(
"witnessd-checkpoint-v1" ||
sequence ||
checkpoint-id ||
timestamp ||
content-hash ||
char-count ||
word-count ||
CBOR(delta) ||
prev-hash ||
CBOR(vdf-proof) ||
CBOR(jitter-binding)
)
¶
This construction ensures that any modification to any field in any checkpoint invalidates all subsequent checkpoint hashes, providing tamper-evidence for the entire chain.¶
The checkpoint chain is designed for compatibility with Merkle Mountain Range ([MMR]) structures, enabling efficient inclusion proofs for subsets of checkpoints:¶
MMR proofs are optional and may be included in the external-section when third-party verification services provide them.¶
The document-ref structure binds the Evidence packet to a specific document without including the document content.¶
document-ref = {
1 => hash-value, ; content-hash
2 => tstr, ; filename (optional)
3 => uint, ; byte-length
4 => uint, ; char-count
? 5 => hash-salt-mode, ; salt mode
? 6 => bstr, ; salt-commitment
}
¶
The content-hash (key 1) is the cryptographic hash of the final document state. This is the same value as the content-hash in the final checkpoint.¶
To verify document binding:¶
The hash-salt-mode field controls how the content hash is computed, enabling privacy-preserving verification scenarios:¶
| Value | Mode | Hash Computation | Verification |
|---|---|---|---|
| 0 | unsalted | H(content) | Anyone with document can verify |
| 1 | author-salted | H(salt || content) | Author reveals salt to chosen verifiers |
| 2 | third-party-escrowed | H(salt || content) | Escrow releases salt under conditions |
When salted modes are used:¶
Salted modes enable scenarios where the document binding should not be globally verifiable (e.g., unpublished manuscripts, confidential documents).¶
Evidence packets are classified into tiers based on which optional sections are present. Higher tiers provide stronger evidence at the cost of more extensive data collection and larger packet sizes.¶
The Basic tier contains only the required checkpoint chain and document reference:¶
Basic tier evidence proves:¶
Basic tier is suitable for low-stakes documentation, personal records, or contexts where the author's attestation is generally trusted.¶
The Standard tier adds presence verification to the Basic tier:¶
Standard tier evidence additionally proves:¶
Standard tier is suitable for academic submissions, professional reports, and contexts requiring reasonable assurance of human involvement.¶
The Enhanced tier adds forensic analysis to the Standard tier:¶
Enhanced tier evidence additionally provides:¶
Enhanced tier is suitable for legal documents, regulatory compliance, and high-value intellectual property.¶
The Maximum tier adds hardware binding, external anchors, absence proofs, and forgery cost analysis:¶
Maximum tier evidence additionally provides:¶
Maximum tier is suitable for litigation support, forensic investigation, and contexts requiring the strongest available evidence.¶
The appropriate tier depends on the trust requirements and privacy constraints of the use case:¶
| Tier | Value | Typical Use Cases | Privacy Impact |
|---|---|---|---|
| Basic | 1 | Personal notes, internal docs | Minimal |
| Standard | 2 | Academic, professional | Low |
| Enhanced | 3 | Legal, regulatory | Moderate |
| Maximum | 4 | Litigation, forensic | Higher |
Authors SHOULD select the minimum tier that meets their verification requirements. Higher tiers collect more behavioral data and create larger Evidence packets.¶
The attestation-result structure contains the Verifier's assessment of an Evidence packet. It implements a witnessd-specific profile of EAR (Entity Attestation Results) as defined in [I-D.ietf-rats-ear].¶
attestation-result = {
1 => uint, ; version
2 => uuid, ; reference-packet-id
3 => pop-timestamp, ; verified-at
4 => forensic-assessment, ; verdict
5 => float32, ; confidence-score
6 => [+ result-claim], ; verified-claims
7 => cose-signature, ; verifier-signature
? 8 => tstr, ; verifier-identity
? 9 => verifier-metadata, ; additional info
? 10 => [+ tstr], ; caveats
* tstr => any, ; extensions
}
¶
The verdict (key 4) is the Verifier's overall forensic assessment using the forensic-assessment enumeration:¶
| Value | Assessment | Meaning |
|---|---|---|
| 0 | not-assessed | Verification incomplete or not attempted |
| 1 | strongly-human | Evidence strongly indicates human authorship |
| 2 | likely-human | Evidence consistent with human authorship |
| 3 | inconclusive | Evidence neither confirms nor refutes claims |
| 4 | likely-ai-assisted | Evidence suggests AI assistance |
| 5 | strongly-ai-generated | Evidence strongly indicates AI generation |
IMPORTANT: The verdict describes the behavioral evidence, not a claim about the author's intent or the cognitive origin of ideas. It reflects observable patterns in the documented process.¶
The confidence-score (key 5) is a floating-point value in the range [0.0, 1.0] representing the Verifier's confidence in the verdict:¶
The confidence score incorporates:¶
The verified-claims array (key 6) contains individual claim verification results:¶
result-claim = {
1 => uint, ; claim-type
2 => bool, ; verified
? 3 => tstr, ; detail
? 4 => confidence-level, ; claim-confidence
}
¶
The claim-type values correspond to the absence-claim-type enumeration, enabling direct mapping between Evidence claims and Attestation Result verification outcomes.¶
The verifier-signature (key 7) is a COSE_Sign1 signature over the Attestation Result payload (fields 1-6 plus any optional fields 8-10). This signature:¶
The caveats array (key 10) documents limitations and warnings that Relying Parties should consider:¶
Verifiers MUST include appropriate caveats when the Evidence has known limitations. Relying Parties SHOULD review caveats before making trust decisions.¶
Both Evidence packets and Attestation Results use CBOR (Concise Binary Object Representation) encoding per RFC 8949.¶
The schema uses a dual key encoding strategy for efficiency and extensibility:¶
Example size comparison for a field named "forensics":¶
Integer key (11): 1 byte (0x0B)
String key ("forensics"): 10 bytes (0x69666F72656E73696373)
¶
For a typical Evidence packet with dozens of fields, integer keys reduce packet size by 20-40%.¶
Evidence packets SHOULD use deterministic CBOR encoding (RFC 8949 Section 4.2) to enable:¶
Deterministic encoding requirements:¶
This specification defines an EAT (Entity Attestation Token) profile for Proof of Process evidence. The profile URI is:¶
https://example.com/rats/eat/profile/pop/1.0¶
The following custom claims are proposed for IANA registration upon working group adoption:¶
| Claim Name | Type | Description |
|---|---|---|
| pop-forensic-assessment | uint | forensic-assessment enumeration value |
| pop-presence-score | float | Presence challenge pass rate (0.0-1.0) |
| pop-evidence-tier | uint | Evidence tier (1-4) |
| pop-ai-composite-score | float | AI indicator composite score (0.0-1.0) |
The Attestation Result includes a proposed extension to the AR4SI ([I-D.ietf-rats-ar4si]) trustworthiness vector:¶
behavioral-consistency: -1..3 -1 = no claim 0 = behavioral evidence inconsistent with human authorship 1 = behavioral evidence inconclusive 2 = behavioral evidence consistent with human authorship 3 = behavioral evidence strongly indicates human authorship¶
This extension enables integration of witnessd Attestation Results with broader trustworthiness assessment frameworks.¶
The evidence model provides tamper-EVIDENCE, not tamper-PROOF:¶
Tamper-evident:¶
Modifications to Evidence packets are detectable through cryptographic verification. The hash chain, VDF entanglement, and HMAC bindings ensure that any alteration invalidates the Evidence.¶
Not tamper-proof:¶
An adversary with sufficient resources can fabricate Evidence by investing the computational time required by VDF proofs and generating plausible behavioral data. The forgery-cost-section quantifies this investment.¶
Relying Parties should understand this distinction when making trust decisions.¶
Evidence packets are designed for independent verification:¶
This property enables adversarial verification: a skeptical Relying Party can verify Evidence without trusting the Attester's infrastructure.¶
The evidence model enforces privacy through structural constraints:¶
No content storage:¶
Evidence contains hashes of document states, not content. The document itself is never included in Evidence packets.¶
No keystroke capture:¶
Individual characters typed are not recorded. Timing intervals are captured without association to specific characters.¶
Aggregated behavioral data:¶
Raw timing data is aggregated into histograms before inclusion in Evidence. Optional raw interval disclosure is user-controlled.¶
No screenshots or screen recording:¶
Visual content is never captured by the Attesting Environment.¶
The evidence model assumes a minimally trusted Attesting Environment:¶
Chain-verifiable claims (absence-claim-types 1-15):¶
Can be verified from Evidence alone without trusting the AE beyond basic data integrity.¶
Monitoring-dependent claims (absence-claim-types 16-63):¶
Require trust that the AE accurately reported monitored events. The ae-trust-basis field documents these assumptions.¶
Hardware attestation (hardware-section) increases AE trust by binding Evidence to verified hardware identities.¶
This section defines the Jitter Seal mechanism, a novel contribution to behavioral evidence that binds captured timing entropy to the checkpoint chain. Unlike injected entropy (random delays added by software), captured entropy commits to actual measured timing from human input events.¶
The Jitter Seal addresses a fundamental limitation in existing attestation frameworks: the inability to distinguish evidence generated during genuine human interaction from evidence reconstructed after the fact.¶
Injected entropy (e.g., random delays inserted by software) can be regenerated if the random seed is known. Captured entropy commits to timing measurements that existed only at the moment of observation. An adversary cannot regenerate captured entropy without access to the original input stream.¶
The entropy commitment is computed and bound to the checkpoint chain before the summarized statistics are finalized. This prevents an adversary from crafting statistics that match a predetermined commitment.¶
Raw timing intervals are aggregated into histogram buckets, preserving statistical properties while preventing reconstruction of the original keystroke sequence. The raw intervals MAY be disclosed for enhanced verification but are not required.¶
The jitter-binding structure appears in each checkpoint and contains five fields:¶
jitter-binding = {
1 => hash-value, ; entropy-commitment
2 => [+ entropy-source], ; sources
3 => jitter-summary, ; summary
4 => bstr .size 32, ; binding-mac
? 5 => [+ uint], ; raw-intervals (optional)
}
¶
The entropy-commitment is a cryptographic hash of the raw timing intervals concatenated in observation order:¶
entropy-commitment = H(interval{0} || interval{1} || ... || interval{n})
¶
where H is the hash algorithm specified in the hash-value structure (SHA-256 RECOMMENDED), and each interval is encoded as a 32-bit unsigned integer representing milliseconds.¶
This commitment is computed BEFORE the histogram summary, ensuring the raw data cannot be manipulated to match a desired statistical profile.¶
The sources array identifies which input modalities contributed to the captured entropy:¶
| Value | Source | Description |
|---|---|---|
| 1 | keystroke-timing | Inter-key intervals from keyboard input |
| 2 | pause-patterns | Gaps between editing bursts (>2 seconds) |
| 3 | edit-cadence | Rhythm of insertions/deletions over time |
| 4 | cursor-movement | Navigation timing within document |
| 5 | scroll-behavior | Document scrolling patterns |
| 6 | focus-changes | Application focus gain/loss events |
Implementations MUST include at least one source. The keystroke-timing source (1) provides the highest entropy density and SHOULD be included when keyboard input is available.¶
The summary provides verifiable statistics without exposing raw timing data:¶
jitter-summary = {
1 => uint, ; sample-count
2 => [+ histogram-bucket], ; timing-histogram
3 => float32, ; estimated-entropy-bits
? 4 => [+ anomaly-flag], ; anomalies (if detected)
}
histogram-bucket = {
1 => uint, ; lower-bound-ms
2 => uint, ; upper-bound-ms
3 => uint, ; count
}
¶
The estimated-entropy-bits field is calculated using Shannon entropy over the histogram distribution:¶
H = -sum(p[i] * log2(p[i])) for all buckets where p[i] > 0 p[i] = count[i] / total_samples¶
RECOMMENDED bucket boundaries (in milliseconds): 0, 50, 100, 200, 500, 1000, 2000, 5000, +infinity. These boundaries capture the typical range of human typing and pause behavior.¶
The binding-mac cryptographically binds the jitter data to the checkpoint chain:¶
binding-mac = HMAC-SHA256(
key = checkpoint-chain-key,
message = entropy-commitment ||
CBOR(sources) ||
CBOR(summary) ||
prev-checkpoint-hash
)
¶
This binding ensures that:¶
The raw-intervals array MAY be included for enhanced verification. When present, verifiers can:¶
Privacy consideration: Raw intervals may constitute biometric-adjacent data. See Section 3.7.¶
The Jitter Seal achieves temporal binding through entanglement with the VDF proof chain. The VDF input for checkpoint N includes the jitter binding from checkpoint N:¶
VDF_input{N} = H(
checkpoint-hash{N-1} ||
content-hash{N} ||
jitter-binding{N}.entropy-commitment
)
VDF_output{N} = VDF(VDF_input{N}, iterations{N})
¶
This entanglement creates a causal dependency: the VDF output cannot be computed until the jitter entropy is captured and committed. Combined with the VDF's sequential computation requirement, this ensures that:¶
A Verifier appraises the Jitter Seal through the following procedure:¶
Structural Validation:¶
Verify all required fields are present and correctly typed per the CDDL schema.¶
Binding MAC Verification:¶
Recompute the binding-mac using the checkpoint chain key and verify it matches the provided value.¶
Entropy Commitment Verification (if raw-intervals present):¶
Recompute H(intervals) and verify it matches entropy-commitment.¶
Histogram Consistency (if raw-intervals present):¶
Recompute histogram buckets from raw intervals and verify consistency with the provided summary.¶
Entropy Threshold Check:¶
Verify estimated-entropy-bits meets the minimum threshold for the claimed evidence tier. RECOMMENDED minimum: 32 bits for Standard tier, 64 bits for Enhanced tier.¶
Sample Count Check:¶
Verify sample-count is consistent with the document size and claimed editing duration. Anomalously low sample counts relative to content length indicate potential evidence gaps.¶
Anomaly Assessment:¶
If anomaly-flags are present, incorporate them into the overall forensic assessment. The presence of anomalies does not invalidate the evidence but affects confidence.¶
VDF Entanglement Verification:¶
Verify the entropy-commitment appears in the VDF input computation for this checkpoint.¶
The verification result contributes to the chain-verifiable claims defined in the absence-section:¶
The Attesting Environment MAY flag anomalies in the captured timing data:¶
| Value | Flag | Indication |
|---|---|---|
| 1 | unusually-regular | Timing distribution has lower variance than typical human input (coefficient of variation < 0.1) |
| 2 | burst-detected | Sustained high-speed input exceeding 200 WPM for >30 seconds |
| 3 | gap-detected | Significant editing gap (>5 minutes) within what appears to be a continuous session |
| 4 | paste-heavy | >50% of content added via paste operations in this checkpoint interval |
Anomaly flags are informational and do not constitute claims about authorship or intent. They provide context for Verifier appraisal and Relying Party decision-making.¶
The Jitter Seal extends the RATS evidence model [RFC9334] in several ways:¶
Traditional RATS evidence attests to system state (software versions, configuration, integrity). The Jitter Seal attests to behavioral characteristics of the input stream, capturing properties that emerge only during genuine interaction.¶
Unlike point-in-time attestation, Jitter Seals are accumulated throughout an authoring session. Each checkpoint adds to the behavioral evidence corpus, with earlier seals constraining what later seals can claim.¶
RATS evidence can typically be regenerated by returning to the same system state. Jitter Seal evidence cannot be regenerated because the timing entropy existed only at the moment of capture.¶
The VDF-entangled Jitter Seal can function as a local freshness mechanism compatible with the Epoch Markers framework [I-D.ietf-rats-epoch-markers]. The VDF output chain provides relative ordering; external anchors provide absolute time binding.¶
Keystroke timing data is biometric-adjacent: while not traditionally classified as biometric data, timing patterns can potentially identify individuals or reveal sensitive information about cognitive state or physical condition.¶
Histogram Aggregation:¶
By default, only aggregated histogram data is included in the evidence packet. Raw intervals are optional and SHOULD only be disclosed when enhanced verification is required.¶
Bucket Granularity:¶
The RECOMMENDED bucket boundaries (50ms minimum width) prevent reconstruction of exact keystroke sequences while preserving statistically significant patterns.¶
No Character Mapping:¶
Timing intervals are recorded without association to specific characters or words. The evidence captures rhythm without content.¶
Session Isolation:¶
Jitter data is bound to a specific evidence packet and checkpoint chain. Cross-session correlation requires access to multiple evidence packets.¶
Implementations SHOULD inform users that:¶
Users SHOULD have the option to:¶
An adversary might attempt to replay captured jitter data from a previous session. This attack is mitigated by:¶
An adversary might attempt to generate synthetic timing data that mimics human patterns. The cost of this attack is bounded by:¶
Entropy requirement:¶
Meeting the entropy threshold requires sufficient variation in timing. Perfectly regular synthetic input will fail the entropy check.¶
Real-time constraint:¶
The VDF entanglement requires that jitter data be captured before VDF computation. Generating synthetic timing that passes statistical tests while maintaining real-time constraints is non-trivial.¶
Statistical consistency:¶
Synthetic timing must be consistent across all checkpoints. Anomaly detection may flag statistically improbable patterns.¶
The Jitter Seal does not claim to make simulation impossible, only to make it costly relative to genuine interaction. The forgery-cost-section provides quantified bounds on attack costs.¶
The Jitter Seal relies on the Attesting Environment to accurately capture and report timing data. A compromised AE could fabricate jitter data. This is addressed by:¶
Chain-verifiable claims (1-15) do not depend on AE trust beyond basic data integrity. Monitoring-dependent claims (16-63) explicitly document their AE trust requirements.¶
This section specifies the Verifiable Delay Function (VDF) mechanisms used to establish temporal ordering and minimum elapsed time between checkpoints. The design is algorithm-agile, supporting both iterated hash constructions and succinct VDF schemes.¶
A VDF proof appears in each checkpoint and contains the following fields:¶
vdf-proof = {
1 => vdf-algorithm, ; algorithm
2 => vdf-params, ; params
3 => bstr, ; input
4 => bstr, ; output
5 => bstr, ; proof
6 => duration, ; claimed-duration
7 => uint, ; iterations
? 8 => calibration-attestation, ; calibration (RECOMMENDED)
}
¶
The following VDF algorithms are defined:¶
| Value | Algorithm | Status | Proof Size |
|---|---|---|---|
| 1 | iterated-sha256 | MUST support | 0 (implicit) |
| 2 | iterated-sha3-256 | SHOULD support | 0 (implicit) |
| 16 | pietrzak-rsa2048 | MAY support | ~1 KB |
| 17 | wesolowski-rsa2048 | MAY support | ~256 bytes |
| 18 | pietrzak-class-group | MAY support | ~2 KB |
| 19 | wesolowski-class-group | MAY support | ~512 bytes |
Algorithm values 1-15 are reserved for iterated hash constructions. Values 16-31 are reserved for succinct VDF schemes. Values 32+ are available for future allocation.¶
The iterated hash VDF computes:¶
output = H^n(input) where H^n denotes n iterations of hash function H: H^0(x) = x H^n(x) = H(H^(n-1)(x))¶
Parameters for iterated hash VDFs:¶
iterated-hash-params = {
1 => hash-algorithm, ; hash-function
2 => uint, ; iterations-per-second
}
¶
The iterations-per-second field records the calibrated performance of the Attesting Environment, enabling Verifiers to assess whether the claimed-duration is plausible for the iteration count.¶
Properties of iterated hash VDFs:¶
Succinct VDFs ([Pietrzak2019], [Wesolowski2019]) provide O(log n) or O(1) verification time at the cost of larger proof size and more complex computation.¶
succinct-vdf-params = {
10 => uint, ; modulus-bits (e.g., 2048)
? 11 => uint, ; security-parameter
}
¶
Key set 10-19 disambiguates succinct params from iterated hash params (key set 1-9) without requiring a type tag.¶
Succinct VDFs are OPTIONAL and intended for scenarios where:¶
When using succinct VDFs, the proof field contains the cryptographic proof of correct computation. For iterated hash VDFs, the proof field is empty (verification is by recomputation).¶
The VDF chain establishes unforgeable temporal ordering through structural causality. This is a key novel contribution of the Proof of Process framework.¶
The VDF input for checkpoint N is computed as:¶
VDF_input{N} = H(
VDF_output{N-1} || ; Previous VDF output
content-hash{N} || ; Current document state
jitter-commitment{N} || ; Captured behavioral entropy
sequence{N} ; Checkpoint sequence number
)
¶
For the genesis checkpoint (N = 0):¶
VDF_input{0} = H(
session-entropy || ; Random 256-bit session seed
content-hash{0} || ; Initial document state
jitter-commitment{0} ||
0x00000000 ; Sequence zero
)
¶
This construction ensures that:¶
Sequential Dependency:¶
VDF_output{N} cannot be computed without VDF_output{N-1}. The chain is inherently sequential.¶
Content Binding:¶
Each VDF output is bound to a specific document state. Changing the content invalidates all subsequent VDF proofs.¶
Jitter Binding:¶
The behavioral entropy commitment is entangled with the VDF, as detailed in Section 3.3.¶
No Precomputation:¶
The adversary cannot precompute VDF outputs because the input depends on runtime values (content, jitter) that are unknown until the checkpoint is created.¶
The causality property provides relative temporal ordering without relying on trusted timestamps:¶
The time between checkpoints N-1 and N is at least:¶
min_elapsed{N} = iterations{N} / calibration_rate
¶
where calibration_rate is the attested iterations-per-second for the device.¶
The total minimum time to produce the evidence packet is:¶
min_total = sum(iterations[i] / calibration_rate) for i = 0..N¶
An adversary attempting to backdate evidence must:¶
The cost of step 3 grows linearly with the number of subsequent checkpoints and the iteration count per checkpoint. This cost is quantified in the forgery-cost-section.¶
Crucially, the adversary cannot parallelize step 3: VDF computation is inherently sequential. Even with unlimited computational resources, the adversary must wait for each VDF to complete before starting the next.¶
Calibration attestation addresses the verification problem: how does a Verifier know whether the claimed iterations could have been computed in the claimed duration on the Attester's hardware?¶
calibration-attestation = {
1 => uint, ; calibration-iterations
2 => pop-timestamp, ; calibration-time
3 => cose-signature, ; hw-signature
4 => bstr, ; device-nonce
? 5 => tstr, ; device-model
}
¶
The Attesting Environment performs calibration as follows:¶
Generate Nonce:¶
Generate a cryptographically random 256-bit device-nonce.¶
Initialize Timer:¶
Record high-resolution start time T_start.¶
Execute Calibration Burst:¶
Compute VDF iterations using the session's VDF algorithm, starting from H(device-nonce), until 1 second has elapsed.¶
Record Result:¶
calibration-iterations = number of iterations completed.¶
Generate Attestation:¶
Construct the attestation payload and sign with hardware-bound key.¶
The attestation payload for signing:¶
attestation-payload = CBOR({
"alg": vdf-algorithm,
"iter": calibration-iterations,
"nonce": device-nonce,
"time": calibration-time
})
¶
A Verifier validates calibration attestation as follows:¶
Signature Verification:¶
Verify the COSE_Sign1 signature using the device's public key (from hardware-section or certificate chain).¶
Nonce Uniqueness:¶
Verify the device-nonce has not been seen in other sessions (optional, requires Verifier state).¶
Plausibility Check:¶
Verify calibration-iterations falls within expected range for the device class:¶
Consistency Check:¶
For each checkpoint, verify:¶
claimed-duration >= iterations / (calibration-iterations * tolerance)¶
where tolerance accounts for measurement variance (RECOMMENDED: 1.1, i.e., 10% margin).¶
Calibration attestation relies on hardware-bound key integrity:¶
With hardware attestation:¶
The calibration rate is trustworthy to the extent that the hardware security module is trustworthy. An adversary cannot claim faster-than-actual calibration without compromising the HSM.¶
Without hardware attestation:¶
The calibration rate is self-reported by the Attesting Environment. The Verifier should apply conservative assumptions and may require external anchors for time verification.¶
The hardware-section documents whether hardware attestation is available and which platform is used.¶
A Verifier appraises VDF proofs through the following procedure:¶
For iterated hash VDFs, verification requires recomputation:¶
Reconstruct Input:¶
Compute VDF_input{N} from the checkpoint data using the entanglement formula in Section 4.2.1.¶
Recompute VDF:¶
Execute iterations{N} hash iterations starting from VDF_input{N}.¶
Compare Output:¶
Verify the computed output matches the claimed VDF_output{N}.¶
Verify Duration (if calibration present):¶
Apply the consistency check from Section 4.3.3.¶
For large evidence packets, Verifiers MAY use sampling strategies:¶
For succinct VDFs, verification uses the cryptographic proof:¶
Reconstruct Input:¶
Compute VDF_input{N} as above.¶
Parse Proof:¶
Decode the proof field according to the algorithm specification.¶
Verify Proof:¶
Execute the algorithm-specific verification procedure ([Pietrzak2019] or [Wesolowski2019]).¶
Verify Duration:¶
Apply calibration consistency check.¶
Evidence packets MAY contain checkpoints using different VDF algorithms. This enables migration scenarios:¶
Algorithm changes SHOULD occur at session boundaries. Within a session, algorithm consistency is RECOMMENDED for simplicity.¶
Current VDF constructions have varying post-quantum security:¶
For evidence intended to remain valid for decades, iterated hash VDFs are RECOMMENDED.¶
An adversary with specialized hardware (ASICs, FPGAs) may compute VDF iterations faster than the calibrated rate. Mitigations:¶
Calibration Reflects Actual Hardware:¶
Calibration is performed on the actual device, so the calibration rate already accounts for any acceleration available to the Attester.¶
Asymmetric Advantage Limited:¶
SHA-256 is widely optimized. The speedup from custom hardware over commodity CPUs with SHA extensions is typically less than 10x.¶
Economic Analysis:¶
The forgery-cost-section quantifies the cost of acceleration attacks in terms of hardware investment and time.¶
VDFs are designed to resist parallelization:¶
The key insight: an adversary with P processors cannot compute the VDF P times faster. The best known attacks provide negligible parallelization advantage.¶
For iterated hash VDFs, an adversary might attempt to precompute and store intermediate values:¶
Rainbow Tables:¶
Precomputing H^n(x) for many x values. Mitigated by the unpredictable VDF input (includes content hash and jitter commitment).¶
Checkpoint Tables:¶
Storing every k-th intermediate value during legitimate computation. Enables faster recomputation from nearby checkpoints but does not help with backdating attacks (which require computing from a specific starting point).¶
No practical time-memory tradeoff significantly reduces the sequential computation requirement.¶
Attacks on the calibration system:¶
Adversary intentionally slows device during calibration to report lower iterations-per-second, then computes VDFs faster than claimed.¶
Mitigation: Plausibility checks based on device class. Anomalously slow calibration for a known device model triggers Verifier skepticism.¶
Adversary reuses calibration attestation from a slower device.¶
Mitigation: Device-nonce binds calibration to session. Hardware signature binds to specific device key.¶
Adversary extracts hardware-bound signing key.¶
Mitigation: Hardware security modules are designed to resist key extraction. This attack requires physical access and significant resources.¶
VDF computation timing may leak information:¶
Iteration Count Inference:¶
Network observers may infer iteration counts from checkpoint timing. This reveals only what is already public in the evidence packet.¶
Content Inference:¶
VDF computation time is independent of content (fixed iteration count per checkpoint). No content leakage through timing.¶
VDF implementations SHOULD use constant-time hash operations where available, though timing variations in VDF computation itself do not compromise security.¶
This section defines the Absence Proofs mechanism, which enables bounded claims about what did NOT occur during document creation. Unlike positive evidence (proving something happened), absence proofs provide negative evidence (proving something did not happen, within defined bounds and trust assumptions).¶
Absence proofs address a fundamental question in process attestation: can we make meaningful claims about events that did not occur? The answer is nuanced and depends on carefully articulated trust boundaries.¶
Traditional evidence systems focus on positive claims: "X happened at time T." Absence proofs extend this to negative claims: "X did not exceed threshold Y during interval (T1, T2)."¶
The value of bounded claims lies in their falsifiability:¶
Bounded claims shift the burden of proof: instead of claiming what DID happen (which requires comprehensive monitoring), we claim what did NOT happen (which can be bounded by observable evidence).¶
Absence proofs have fundamental limitations that MUST be clearly communicated:¶
Monitoring Gaps:¶
Absence claims are valid only during monitored intervals. Gaps in monitoring create gaps in absence guarantees.¶
Trust Boundaries:¶
Some absence claims require trust in the Attesting Environment (AE). This trust must be explicitly documented.¶
Threshold Semantics:¶
"No paste above 500 characters" does not imply "no paste." Claims are bounded, not absolute.¶
Behavioral Consistency, Not Authorship:¶
Absence claims describe observable behavioral patterns, NOT authorship, intent, or cognitive processes. They document consistency between declared process and observable evidence.¶
The critical architectural distinction in absence proofs is between claims verifiable from the Evidence alone (trustless) and claims that require trust in the Attesting Environment's monitoring capabilities.¶
Chain-verifiable claims can be verified by any party with access to the Evidence packet. No trust in the Attesting Environment is required beyond basic data integrity. These claims are derived purely from the checkpoint chain structure.¶
A Verifier can independently confirm these claims by:¶
No interaction with the Attester or trust in its monitoring capabilities is needed.¶
Monitoring-dependent claims require trust that the Attesting Environment correctly observed and reported specific events. These claims cannot be verified from the checkpoint chain alone because they depend on real-time monitoring of events external to the document state.¶
For monitoring-dependent claims, the Verifier must assess:¶
The ae-trust-basis structure documents these trust assumptions explicitly, enabling informed Relying Party decisions.¶
| Aspect | Chain-Verifiable | Monitoring-Dependent |
|---|---|---|
| Verification | Independent, trustless | Requires AE trust |
| Data Source | Checkpoint chain only | Real-time event monitoring |
| Confidence Basis | Cryptographic proof | AE integrity attestation |
| Forgery Resistance | Requires VDF recomputation | Requires AE compromise |
| Claim Types | 1-15 | 16-63 |
The following claims can be verified directly from the Evidence packet without trusting the Attesting Environment's monitoring capabilities:¶
| Type | Claim | Proves | Verification Method |
|---|---|---|---|
| 1 | max-single-delta-chars | No single checkpoint added more than N characters | max(delta.chars-added) across all checkpoints |
| 2 | max-single-delta-bytes | No single checkpoint added more than N bytes | Derived from char counts with encoding factor |
| 3 | max-net-delta-chars | No single checkpoint had net change exceeding N chars | max(|chars-added - chars-deleted|) per checkpoint |
| 4 | min-vdf-duration-seconds | Total VDF time exceeds N seconds | sum(claimed-duration) across checkpoints |
| 5 | min-vdf-duration-per-kchar | At least N seconds of VDF time per 1000 characters | total_vdf_seconds / (final_char_count / 1000) |
| 6 | checkpoint-chain-complete | No gaps in checkpoint sequence | Verify sequence numbers are consecutive |
| 7 | checkpoint-chain-consistent | All prev-hash values match prior checkpoint-hash | Verify hash chain linkage |
| 8 | jitter-entropy-above-threshold | Captured entropy exceeds N bits | sum(estimated-entropy-bits) from jitter-binding |
| 9 | jitter-samples-above-count | Jitter sample count exceeds N | sum(sample-count) from jitter-summary |
| 10 | revision-points-above-count | Document had at least N revision points | Count checkpoints where chars-deleted > 0 |
| 11 | session-count-above-threshold | Evidence spans at least N sessions | Count distinct session boundaries in chain |
For each chain-verifiable claim, the Verifier performs:¶
verify_chain_claim(evidence, claim):
(1) Verify chain integrity first
if not verify_chain_hashes(evidence.checkpoints):
return INVALID("Chain integrity failure")
if not verify_vdf_linkage(evidence.checkpoints):
return INVALID("VDF linkage failure")
(2) Compute the metric from checkpoint data
observed_value = compute_metric(evidence.checkpoints, claim.type)
(3) Compare against threshold
match claim.type:
case MAX_SINGLE_DELTA_CHARS:
passes = (observed_value <= claim.threshold)
case MIN_VDF_DURATION_SECONDS:
passes = (observed_value >= claim.threshold)
(4) Return verification result
if passes:
return PROVEN(observed_value, claim.threshold)
else:
return FAILED(observed_value, claim.threshold)
¶
The key property: verification depends ONLY on cryptographically verifiable checkpoint data, not on any external monitoring claims by the AE.¶
The following claims require trust in the Attesting Environment's monitoring capabilities. Each claim documents the specific AE capability required and the basis for trusting that capability.¶
| Type | Claim | AE Capability Required | Trust Basis |
|---|---|---|---|
| 16 | max-paste-event-chars | Clipboard monitoring | OS-reported paste events |
| 17 | max-clipboard-access-chars | Clipboard content access | Application-level clipboard hooks |
| 18 | no-paste-from-ai-tool | Clipboard source attribution | OS process enumeration + clipboard |
| 20 | max-insertion-rate-wpm | Real-time keystroke monitoring | Input event stream timing |
| 21 | no-automated-input-pattern | Input timing analysis | Statistical pattern recognition |
| 22 | no-macro-replay-detected | Input source verification | OS input subsystem attestation |
| 32 | no-file-import-above-bytes | File operation monitoring | Application file access hooks |
| 33 | no-external-file-open | File system monitoring | OS file access events |
| 40 | no-concurrent-ai-tool | Process enumeration | OS process list attestation |
| 41 | no-llm-api-traffic | Network traffic monitoring | Network stack inspection |
| 48 | max-idle-gap-seconds | Continuous activity monitoring | Input event stream continuity |
| 49 | active-time-above-threshold | Active time measurement | Input event correlation |
Each monitoring-dependent claim MUST include an ae-trust-basis structure that documents the trust assumptions:¶
ae-trust-basis = {
1 => ae-trust-target, ; trust-target
2 => tstr, ; justification
3 => bool, ; verified
}
ae-trust-target = &(
witnessd-software-integrity: 1,
os-reported-events: 2,
application-reported-events: 3,
tpm-attested-elsewhere: 16,
se-attested-elsewhere: 17,
unverified-assumption: 32,
)
¶
The justification field provides human-readable explanation of why the trust basis is believed adequate. The verified field indicates whether the trust basis was cryptographically verified (true) or merely assumed (false).¶
Honest documentation of monitoring gaps is essential for meaningful absence claims. The monitoring-coverage structure captures the scope and limitations of AE monitoring.¶
monitoring-coverage = {
1 => bool, ; keyboard-monitored
2 => bool, ; clipboard-monitored
3 => [+ time-interval], ; monitoring-intervals
4 => float32, ; coverage-fraction
? 5 => hardware-attestation, ; monitoring-attestation
}
time-interval = {
1 => pop-timestamp, ; start
2 => pop-timestamp, ; end
}
¶
Monitoring gaps have explicit semantic impact on absence claims:¶
Covered Intervals:¶
Absence claims apply fully during covered intervals. "No paste above 500 chars during (T1, T2)" means the AE would have detected any such paste.¶
Gap Intervals:¶
During gaps, monitoring-dependent claims cannot be made. An event could have occurred unobserved.¶
Gap-Aware Claims:¶
If coverage-fraction is below 1.0, absence claims SHOULD include a caveat noting the monitoring gap percentage.¶
Chain-verifiable claims (1-15) are NOT affected by monitoring gaps because they are derived from the checkpoint chain, which has no gaps (checkpoint-chain-complete verifies this).¶
The absence-section appears as an optional field (key 15) in the evidence-packet:¶
absence-section = {
1 => monitoring-coverage, ; monitoring-coverage
2 => [+ absence-claim], ; claims
? 3 => claim-summary, ; claim-summary
}
claim-summary = {
1 => uint, ; chain-verifiable-count
2 => uint, ; monitoring-dependent-count
3 => bool, ; all-claims-attested
}
absence-claim = {
1 => absence-claim-type, ; claim-type
2 => absence-threshold, ; threshold
3 => absence-proof, ; proof
4 => absence-confidence, ; confidence
? 5 => ae-trust-basis, ; ae-trust-basis (monitoring)
}
absence-threshold = {
1 => uint / float32 / null, ; value
}
absence-proof = {
1 => absence-proof-method, ; proof-method
2 => absence-evidence, ; evidence
}
absence-proof-method = &(
checkpoint-chain-analysis: 1,
keystroke-analysis: 2,
platform-attestation: 3,
network-attestation: 4,
statistical-inference: 5,
)
absence-evidence = {
? 1 => [uint, uint], ; checkpoint-range
? 2 => uint, ; max-observed-value
? 3 => float32, ; max-observed-rate
? 4 => tstr, ; statistical-test
? 5 => float32, ; p-value
? 6 => bstr, ; attestation-ref
}
absence-confidence = {
1 => confidence-level, ; level
2 => [* tstr], ; caveats
}
confidence-level = &(
proven: 1,
high: 2,
medium: 3,
low: 4,
)
¶
A Verifier appraises absence claims through a structured procedure that distinguishes chain-verifiable from monitoring-dependent claims:¶
For claims with type 1-15:¶
Verify Evidence Integrity:¶
Verify checkpoint chain hashes, VDF linkage, and structural validity per the base protocol.¶
Extract Metrics:¶
Compute the relevant metric from checkpoint data (e.g., max delta chars, total VDF duration).¶
Compare Threshold:¶
Verify the computed metric satisfies the claimed threshold.¶
Assign Confidence:¶
Chain-verifiable claims that pass receive confidence level "proven" (1).¶
For claims with type 16-63:¶
Assess AE Trust Basis:¶
Examine the ae-trust-basis for each claim. Determine whether the trust target is appropriate for the claim type and whether it was verified.¶
Evaluate Monitoring Coverage:¶
Check monitoring-coverage to determine whether the relevant monitoring was active. Verify coverage-fraction is adequate for the confidence level claimed.¶
Cross-Reference Hardware Attestation:¶
If ae-trust-target is tpm-attested-elsewhere (16) or se-attested-elsewhere (17), verify the corresponding attestation exists in hardware-section.¶
Evaluate Evidence:¶
Examine the absence-evidence for supporting data. Statistical tests should have appropriate p-values; attestation references should be verifiable.¶
Assign Confidence:¶
Based on the above factors, assign confidence level (2-4). Level 1 (proven) is NOT available for monitoring-dependent claims.¶
Document Caveats:¶
Record any limitations or assumptions in the caveats array of the verification result.¶
The Verifier produces a result-claim for each absence-claim examined:¶
result-claim = {
1 => uint, ; claim-type
2 => bool, ; verified (claim holds)
? 3 => tstr, ; detail (reasoning)
? 4 => confidence-level, ; claim-confidence
}
¶
The aggregated results appear in the attestation-result (.war file) as the verified-claims array.¶
Absence proofs extend the RATS (Remote ATtestation procedureS) evidence model [RFC9334] in several ways:¶
The Attester (witnessd AE) generates absence claims based on its monitoring observations. For chain-verifiable claims, the Attester merely assembles checkpoint data in a format that enables Verifier computation. For monitoring-dependent claims, the Attester makes assertions about events it observed (or did not observe).¶
The Verifier independently verifies chain-verifiable claims by recomputing metrics from Evidence. For monitoring-dependent claims, the Verifier appraises the trust basis and determines whether to accept the Attester's monitoring assertions.¶
The Relying Party consumes the attestation-result (.war file) and decides whether the verified claims meet their requirements. Different use cases may require different confidence levels or claim types.¶
Standard RATS evidence attests to system state (software versions, configuration). Absence proofs add a new category:¶
This extension enables attestation about processes, not just states. The checkpoint chain provides the evidentiary basis for process claims that would otherwise require continuous trusted monitoring.¶
Verifiers MAY define appraisal policies that specify:¶
Example policy (informative):¶
policy:
required_claims:
- type: 1 # max-single-delta-chars
threshold: 500
min_confidence: proven
- type: 4 # min-vdf-duration-seconds
threshold: 3600
min_confidence: proven
- type: 16 # max-paste-event-chars
threshold: 200
min_confidence: high
required_trust_basis: (1, 16, 17) (SE or TPM attested)
min_monitoring_coverage: 0.95
¶
Absence claims have explicit limits that MUST be understood by all parties:¶
Framing claims as "behavioral consistency" rather than "human authorship" avoids overclaiming and maintains intellectual honesty about what the evidence actually shows.¶
Monitoring-dependent claims are only as trustworthy as the Attesting Environment:¶
Software Compromise:¶
Modified witnessd software could fabricate monitoring observations. Mitigated by code signing and software attestation.¶
OS Compromise:¶
Compromised OS could report false clipboard contents or process lists. Mitigated by hardware attestation of OS integrity.¶
Hardware Compromise:¶
Physical access to device could enable hardware-level attacks. This is outside the threat model for most use cases.¶
The ae-trust-basis structure explicitly documents which trust assumptions apply, enabling Relying Parties to make informed decisions about acceptable risk.¶
Sophisticated adversaries may attempt to evade monitoring:¶
Absence proofs do not claim to make evasion impossible, only to make it costly and to document the monitoring coverage that was actually achieved.¶
Claims based on statistical inference (proof-method 5) have inherent uncertainty:¶
Statistical claims SHOULD be assigned confidence level "medium" (3) or "low" (4) unless supported by additional evidence.¶
Absence claims may reveal information about the authoring process:¶
Edit Pattern Disclosure:¶
Chain-verifiable claims reveal aggregate statistics about edit sizes and frequencies. This is inherent in the checkpoint chain and cannot be hidden without removing the evidentiary basis for claims.¶
Tool Usage Disclosure:¶
Claims like "no-concurrent-ai-tool" implicitly reveal that the AE was monitoring for AI tool usage. Users should be informed of this monitoring.¶
Behavioral Fingerprinting:¶
Detailed jitter data and monitoring observations could theoretically enable behavioral fingerprinting. The histogram aggregation in jitter-binding mitigates this for timing data.¶
Users SHOULD be informed which absence claims will be generated and have the option to disable specific monitoring capabilities if privacy concerns outweigh the value of those claims.¶
This section defines the forgery cost bounds mechanism, which provides quantified security analysis for Proof of Process evidence. Rather than claiming evidence is "secure" or "insecure" in absolute terms, this framework expresses security as minimum resource costs that an adversary must expend to produce counterfeit evidence.¶
Traditional security claims are often binary: a system is either "secure" or "broken." This framing poorly serves attestation scenarios where:¶
The Proof of Process framework adopts quantified security: expressing security guarantees in terms of measurable costs (time, entropy, economic resources) that bound adversary capabilities.¶
The design goal is cost asymmetry: producing genuine evidence should be inexpensive (a natural byproduct of authoring), while producing counterfeit evidence should require resources disproportionate to any benefit gained.¶
Cost asymmetry is achieved through three mechanisms:¶
Forgery cost bounds explicitly avoid claims that evidence is:¶
The forgery-cost-section appears in each evidence packet and contains four required components:¶
forgery-cost-section = {
1 => time-bound, ; time-bound
2 => entropy-bound, ; entropy-bound
3 => economic-bound, ; economic-bound
4 => security-statement, ; security-statement
}
¶
These components represent orthogonal dimensions of forgery cost. A complete security assessment considers all four dimensions.¶
The time-bound quantifies the minimum wall-clock time required to recompute the VDF chain, establishing a lower bound on forgery duration.¶
time-bound = {
1 => uint, ; total-iterations
2 => uint, ; calibration-rate
3 => tstr, ; reference-hardware
4 => float32, ; min-recompute-seconds
5 => bool, ; parallelizable
? 6 => uint, ; max-parallelism
}
¶
A Verifier computes and validates the time bound as follows:¶
Sum Iterations:¶
Traverse all checkpoints and sum the iterations field from each VDF proof.¶
Verify Calibration:¶
If calibration attestation is present, verify the hardware signature and check that calibration-rate matches the attested iterations-per-second.¶
Compute Minimum Time:¶
Divide total-iterations by calibration-rate. Verify the result matches min-recompute-seconds within floating-point tolerance.¶
Plausibility Check:¶
Verify min-recompute-seconds is consistent with the claimed authoring duration. Significant discrepancy (e.g., 10-hour claimed session with 1-minute VDF time) indicates either misconfiguration or potential manipulation.¶
The security of time bounds depends on VDF parallelization resistance. For iterated hash VDFs:¶
This property ensures that time bounds reflect wall-clock time, not aggregate compute time. An adversary with a data center cannot forge 10 hours of evidence in 10 minutes by using 60x more processors.¶
See Section 4.6.2 for detailed analysis of parallelization resistance in each VDF algorithm.¶
The entropy-bound quantifies the unpredictability in the evidence chain, establishing a lower bound on the probability of guessing or replaying entropy commitments.¶
entropy-bound = {
1 => float32, ; total-entropy-bits
2 => uint, ; sample-count
3 => float32, ; entropy-per-sample
4 => float32, ; brute-force-probability
5 => bool, ; replay-possible
? 6 => tstr, ; replay-prevention
}
¶
A Verifier computes and validates the entropy bound as follows:¶
Aggregate Entropy:¶
Sum estimated-entropy-bits from each checkpoint's jitter-summary. Verify the total matches total-entropy-bits.¶
Count Samples:¶
Sum sample-count from each jitter-summary. Verify consistency with the claimed sample-count.¶
Verify Entropy Estimates:¶
If raw-intervals are disclosed, recompute the histogram and Shannon entropy. Verify consistency with the claimed entropy estimate.¶
Check Replay Prevention:¶
Verify each entropy-commitment appears in the corresponding VDF input. If VDF entanglement is absent, set replay-possible to true.¶
Compute Brute-Force Probability:¶
Calculate 2^(-total-entropy-bits) and verify it matches the claimed brute-force-probability within floating-point tolerance.¶
RECOMMENDED minimum entropy thresholds by evidence tier:¶
| Tier | Min Total Entropy | Brute-Force Probability |
|---|---|---|
| Basic | 32 bits | < 2.3 x 10^-10 |
| Standard | 64 bits | < 5.4 x 10^-20 |
| Enhanced | 128 bits | < 2.9 x 10^-39 |
Evidence packets failing to meet minimum entropy thresholds SHOULD be flagged in the security-statement caveats.¶
The economic-bound translates time and entropy requirements into monetary costs, enabling Relying Parties to assess forgery feasibility in economic terms.¶
economic-bound = {
1 => tstr, ; cost-model-version
2 => pop-timestamp, ; cost-model-date
3 => cost-estimate, ; compute-cost
4 => cost-estimate, ; time-cost
5 => cost-estimate, ; total-min-cost
6 => cost-estimate, ; cost-per-hour-claimed
}
cost-estimate = {
1 => float32, ; usd
2 => float32, ; usd-low
3 => float32, ; usd-high
4 => tstr, ; basis
}
¶
Cost of computational resources required to recompute the VDF chain. Includes:¶
Each cost-estimate includes a point estimate and confidence range:¶
Reference cost computation for compute-cost:¶
Compute cost model: hourly_rate = cloud_rate + elec_rate * power compute_hours = min_recompute_seconds / 3600 compute_cost_usd = hourly_rate * compute_hours Confidence interval (assumes 50% rate variance): compute_cost_low = compute_cost_usd * 0.5 compute_cost_high = compute_cost_usd * 1.5¶
Reference cost computation for time-cost:¶
Time cost model (opportunity cost, skilled labor rate): hourly_value = 50.0 time_cost_usd = hourly_value * (min_recompute_seconds / 3600) Confidence interval (labor rate variance): time_cost_low = time_cost_usd * 0.2 time_cost_high = time_cost_usd * 4.0¶
These are reference calculations. Implementations MAY use different cost models appropriate to their deployment context.¶
Hardware costs decrease and computational speeds increase over time. Cost estimates depreciate accordingly:¶
Moore's Law Effect:¶
Compute cost per operation halves approximately every 2 years. A cost model from 2023 overestimates 2025 forgery costs by roughly 2x.¶
Hardware Acceleration:¶
New hardware (GPUs, ASICs) may provide step-function improvements for specific algorithms. Cost models should be updated when significant new hardware becomes available.¶
Cloud Pricing:¶
Cloud compute costs generally decrease over time. Cost models should reference current pricing.¶
Verifiers SHOULD apply a depreciation adjustment when evaluating cost bounds with cost-model-date more than 12 months in the past:¶
years_elapsed = (current_date - cost_model_date) / 365 depreciation_factor = 0.7 ^ years_elapsed # ~30% annual decrease adjusted_cost = original_cost * depreciation_factor¶
The security-statement provides a formal claim about the evidence security, including explicit assumptions and caveats.¶
security-statement = {
1 => tstr, ; claim
2 => formal-security-bound, ; formal
3 => [+ tstr], ; assumptions
4 => [* tstr], ; caveats
}
formal-security-bound = {
1 => float32, ; min-seconds
2 => float32, ; min-entropy-bits
3 => float32, ; min-cost-usd
}
¶
Human-readable security claim. MUST be phrased as a minimum bound, not an absolute guarantee. Example:¶
"Forging this evidence requires at minimum 8.3 hours of sequential computation, 67 bits of entropy prediction, and an estimated $42-$126 in resources."¶
List of assumptions under which the security claim holds. MUST include at minimum:¶
List of limitations or warnings about the security claim. Examples:¶
The formal-security-bound provides three orthogonal minimum requirements for forgery:¶
Relying Parties can evaluate these bounds against their risk tolerance. For example, a policy might require:¶
Example Relying Party policy:
accept_evidence if:
min-seconds >= 3600 AND (At least 1 hour)
min-entropy-bits >= 64 AND (At least 64 bits)
min-cost-usd >= 100 (At least $100)
¶
A Verifier computes and validates forgery cost bounds through the following procedure:¶
Compute Time Bound:¶
Sum VDF iterations across all checkpoints. Retrieve calibration-rate from calibration attestation. Compute min-recompute-seconds = total-iterations / calibration-rate.¶
Compute Entropy Bound:¶
Aggregate entropy estimates from all Jitter Seals. Verify VDF entanglement for each seal. Compute brute-force probability.¶
Compute Economic Bound:¶
Apply cost model to time bound. Compute confidence intervals. Normalize by claimed duration.¶
Construct Security Statement:¶
Generate human-readable claim. Populate formal bounds. List applicable assumptions. Add any relevant caveats.¶
Validate Claimed Bounds:¶
Compare computed bounds against those claimed in the evidence packet. Flag discrepancies exceeding tolerance.¶
Apply Depreciation:¶
If cost-model-date is stale, apply depreciation adjustment to economic bounds.¶
The Verifier MAY recompute bounds using its own cost model rather than accepting the Attester's claimed bounds. Independent recomputation is RECOMMENDED for high-stakes verification.¶
Forgery cost bounds assume an adversary with:¶
Bounds may not hold against adversaries who:¶
Forgery cost bounds provide lower bounds, not guarantees:¶
Forgery cost bounds explicitly do NOT provide:¶
Authenticity Proof:¶
Evidence meeting cost thresholds is not proven authentic. It is proven expensive to forge. These are distinct claims.¶
Content Verification:¶
Bounds say nothing about document content, quality, or accuracy. Only the process evidence is bounded.¶
Intent Attribution:¶
Bounds do not prove who created the evidence or why. Identity and intent are outside the scope of cost analysis.¶
Long-Term Security:¶
Bounds depreciate over time. Evidence considered secure today may have insufficient bounds in 10 years.¶
Relying Parties should establish policies based on:¶
Risk Assessment:¶
What is the cost of accepting forged evidence? High-stakes decisions require higher cost thresholds.¶
Adversary Economics:¶
Would forgery be economically rational? If forgery costs exceed potential gain, rational adversaries will not attempt it.¶
Time Sensitivity:¶
How quickly must evidence be verified? Long verification delays may reduce the utility of cost bounds.¶
Corroborating Evidence:¶
Cost bounds are one factor among many. External anchors, hardware attestation, and contextual information all contribute to overall confidence.¶
This section defines a mechanism for establishing cryptographic relationships between Evidence packets. Provenance links enable authors to prove that one document evolved from, merged with, or was derived from other documented works.¶
Real-world authorship rarely occurs in isolation. Documents evolve through multiple stages:¶
Without provenance links, each Evidence packet is cryptographically isolated. An author cannot prove that their final manuscript evolved from the lab notes they documented six months earlier. Provenance links provide this capability while maintaining the privacy and security properties of witnessd Evidence.¶
The provenance section is an optional component of the Evidence packet, identified by integer key 20. When present, it documents the relationship between the current Evidence packet and one or more parent packets.¶
; Provenance section for cross-document linking
; Key 20 in evidence-packet
provenance-section = {
? 1 => [+ provenance-link], ; parent-links
? 2 => [+ derivation-claim], ; derivation-claims
? 3 => provenance-metadata, ; metadata
}
; Link to a parent Evidence packet
provenance-link = {
1 => uuid, ; parent-packet-id
2 => hash-value, ; parent-chain-hash
3 => derivation-type, ; how this document relates
4 => pop-timestamp, ; when derivation occurred
? 5 => tstr, ; relationship-description
? 6 => [+ uint], ; inherited-checkpoints
? 7 => cose-signature, ; cross-packet-attestation
}
; Type of derivation relationship
derivation-type = &(
continuation: 1, ; same work, new packet
merge: 2, ; from multiple sources
split: 3, ; Extracted from larger work
rewrite: 4, ; Substantial revision
translation: 5, ; Language translation
fork: 6, ; independent branch
citation-only: 7, ; references only
)
; Claims about what was derived and how
derivation-claim = {
1 => derivation-aspect, ; what-derived
2 => derivation-extent, ; extent
? 3 => tstr, ; description
? 4 => float32, ; estimated-percentage
}
derivation-aspect = &(
structure: 1, ; Document organization
content: 2, ; Textual content
ideas: 3, ; Conceptual elements
data: 4, ; Data or results
methodology: 5, ; Methods or approach
code: 6, ; Source code
)
derivation-extent = &(
none: 0, ; Not derived
minimal: 1, ; Less than 10%
partial: 2, ; 10-50%
substantial: 3, ; 50-90%
complete: 4, ; More than 90%
)
; Optional metadata about provenance
provenance-metadata = {
? 1 => tstr, ; provenance-statement
? 2 => bool, ; all-parents-available
? 3 => [+ tstr], ; missing-parent-reasons
}
¶
Verifiers MUST perform the following checks when provenance links are present:¶
For each provenance-link, if the parent Evidence packet is available:¶
If the parent Evidence packet is not available, the Verifier SHOULD note this limitation in the Attestation Result caveats. The provenance link remains valid but unverified.¶
When cross-packet-attestation is present, it provides cryptographic proof that the author of the current packet had access to the parent packet at the time of derivation:¶
cross-packet-attestation = COSE_Sign1(
payload = CBOR_encode({
1: current-packet-id,
2: parent-packet-id,
3: parent-chain-hash,
4: derivation-timestamp,
}),
key = author-signing-key
)
¶
This attestation prevents retroactive provenance claims where an author discovers an existing Evidence packet and falsely claims derivation after the fact.¶
Provenance links may reveal information about the author's creative process and document history. Authors SHOULD consider:¶
Authors MAY choose to omit provenance links for privacy while still maintaining independent Evidence for each document.¶
A dissertation written over 18 months with monthly Evidence exports:¶
provenance-section = {
1: [ / parent-links /
{
1: h'550e8400e29b41d4a716446655440000', / parent-packet-id /
2: {1: 1, 2: h'abcd1234...'}, / parent-chain-hash /
3: 1, / type: continuation /
4: 1(1709251200), / Feb 2024 /
5: "Continued from January 2024 export"
}
],
3: { / metadata /
1: "This is month 2 of an ongoing dissertation project",
2: true / all-parents-available /
}
}
¶
A collaborative paper merging contributions from three authors:¶
provenance-section = {
1: [ / parent-links /
{
1: h'author1-packet-uuid...',
2: {1: 1, 2: h'hash1...'},
3: 2, / merge /
4: 1(1709337600),
5: "Alice's methodology section"
},
{
1: h'author2-packet-uuid...',
2: {1: 1, 2: h'hash2...'},
3: 2, / merge /
4: 1(1709337600),
5: "Bob's results section"
},
{
1: h'author3-packet-uuid...',
2: {1: 1, 2: h'hash3...'},
3: 2, / merge /
4: 1(1709337600),
5: "Carol's introduction and discussion"
}
],
2: [ / derivation-claims /
{1: 1, 2: 3, 3: "Structure from Alice's draft"},
{1: 2, 2: 2, 3: "Content merged from all three"},
{1: 4, 2: 4, 3: "Data primarily from Bob"}
]
}
¶
This section defines a mechanism for producing Evidence packets incrementally over extended authoring periods. Continuation tokens allow a single logical authorship effort to be documented across multiple Evidence packets without losing cryptographic continuity.¶
Long-form works such as novels, dissertations, or technical books may span months or years of active authorship. Capturing all Evidence in a single packet presents practical challenges:¶
Continuation tokens address these challenges by enabling cryptographically-linked Evidence packet chains while preserving independent verifiability of each packet.¶
The continuation token is an optional component of the Evidence packet, identified by integer key 21. It establishes the packet's position within a multi-packet Evidence series.¶
; Continuation token for multi-packet Evidence series
; Key 21 in evidence-packet
continuation-section = {
1 => uuid, ; series-id
2 => uint, ; packet-sequence
? 3 => hash-value, ; prev-packet-chain-hash
? 4 => uuid, ; prev-packet-id
5 => continuation-summary, ; cumulative-summary
? 6 => cose-signature, ; series-binding-signature
}
; Cumulative statistics across the series
continuation-summary = {
1 => uint, ; total-checkpoints-so-far
2 => uint, ; total-chars-so-far
3 => duration, ; total-vdf-time-so-far
4 => float32, ; total-entropy-bits-so-far
5 => uint, ; packets-in-series
? 6 => pop-timestamp, ; series-started-at
? 7 => duration, ; total-elapsed-time
}
¶
Key semantics:¶
When a new packet continues from a previous packet, the VDF chain MUST maintain cryptographic continuity:¶
Packet N (final checkpoint):
checkpoint-hash[last] = H(checkpoint-data)
VDF_output{last} = computed VDF result
Packet N+1 (first checkpoint):
prev-packet-chain-hash = checkpoint-hash[last] from Packet N
VDF_input{0} = H(
VDF_output{last} from Packet N ||
content-hash{0} ||
jitter-commitment{0} ||
series-id ||
packet-sequence
)
¶
This construction ensures:¶
Each packet in a continuation series MUST be independently verifiable. A Verifier with access only to packet N can:¶
The Attestation Result SHOULD note that the packet is part of a series and whether prior packets were verified.¶
When all packets in a series are available, a Verifier MUST:¶
The optional series-binding-signature provides cryptographic proof that all packets in a series were produced by the same author:¶
series-binding-signature = COSE_Sign1(
payload = CBOR_encode({
1: series-id,
2: packet-sequence,
3: packet-id,
4: prev-packet-chain-hash, / if present /
5: cumulative-summary,
}),
key = author-signing-key
)
¶
When present, Verifiers can confirm that the signing key is consistent across all packets in the series, providing additional assurance of authorship continuity.¶
Implementations SHOULD support configurable triggers for continuation packet export:¶
If a packet in a series is lost or unavailable:¶
Third monthly export of a dissertation in progress:¶
continuation-section = {
1: h'dissertation-series-uuid...', / series-id /
2: 2, / packet-sequence (3rd) /
3: { / prev-packet-chain-hash /
1: 1,
2: h'feb-packet-final-hash...'
},
4: h'feb-packet-uuid...', / prev-packet-id /
5: { / cumulative-summary /
1: 847, / total-checkpoints-so-far /
2: 45230, / total-chars-so-far /
3: 12600.0, / total-vdf-time: ~3.5 hours /
4: 156.7, / total-entropy-bits /
5: 3, / packets-in-series /
6: 1(1704067200), / series-started-at /
7: 7776000.0 / total-elapsed: 90 days /
},
6: h'D28441A0...' / series-binding-signature /
}
¶
This section defines a framework for expressing and computing trust scores in Attestation Results. Trust policies enable Relying Parties to customize how Evidence is evaluated and to understand the basis for confidence scores.¶
The base attestation-result structure provides a confidence-score (0.0-1.0) and a verdict enumeration, but does not explain how these values were computed. Different Relying Parties have different trust requirements:¶
Without explicit trust policies, Relying Parties cannot:¶
The trust policy framework addresses these limitations by making confidence computation transparent and configurable.¶
The appraisal-policy extension is added to verifier-metadata, identified by integer key 5.¶
; Extended verifier-metadata with trust policy
verifier-metadata = {
? 1 => tstr, ; verifier-version
? 2 => tstr, ; verifier-uri
? 3 => [+ bstr], ; verifier-cert-chain
? 4 => tstr, ; policy-id
? 5 => appraisal-policy, ; policy details
}
; Complete appraisal policy specification
appraisal-policy = {
1 => tstr, ; policy-uri
2 => tstr, ; policy-version
3 => trust-computation, ; computation-model
4 => [+ trust-factor], ; factors
? 5 => [+ trust-threshold], ; thresholds
? 6 => policy-metadata, ; metadata
}
; How the final score is computed
trust-computation = &(
weighted-average: 1, ; Sum of (factor * weight)
minimum-of-factors: 2, ; Min across all factors
geometric-mean: 3, ; Nth root of product
custom-formula: 4, ; Described in policy-uri
)
; Individual factor in trust computation
trust-factor = {
1 => tstr, ; factor-name
2 => factor-type, ; type
3 => float32, ; weight (0.0-1.0)
4 => float32, ; observed-value
5 => float32, ; normalized-score (0.0-1.0)
6 => float32, ; contribution
? 7 => factor-evidence, ; supporting-evidence
}
factor-type = &(
; Chain-verifiable factors
vdf-duration: 1,
checkpoint-count: 2,
jitter-entropy: 3,
chain-integrity: 4,
revision-depth: 5,
; Presence factors
presence-rate: 10,
presence-response-time: 11,
; Hardware factors
hardware-attestation: 20,
calibration-attestation: 21,
; Behavioral factors
edit-entropy: 30,
monotonic-ratio: 31,
typing-rate-consistency: 32,
; External factors
anchor-confirmation: 40,
anchor-count: 41,
; Collaboration factors
collaborator-attestations: 50,
contribution-consistency: 51,
)
; Evidence supporting a factor score
factor-evidence = {
? 1 => float32, ; raw-value
? 2 => float32, ; threshold-value
? 3 => tstr, ; computation-notes
? 4 => [uint, uint], ; checkpoint-range
}
; Threshold requirements for pass/fail determination
trust-threshold = {
1 => tstr, ; threshold-name
2 => threshold-type, ; type
3 => float32, ; required-value
4 => bool, ; met
? 5 => tstr, ; failure-reason
}
threshold-type = &(
minimum-score: 1, ; Score must be >= value
minimum-factor: 2, ; factor >= value
required-factor: 3, ; factor present
maximum-caveats: 4, ; caveats <= value
)
policy-metadata = {
? 1 => tstr, ; policy-name
? 2 => tstr, ; policy-description
? 3 => tstr, ; policy-authority
? 4 => pop-timestamp, ; policy-effective-date
? 5 => [+ tstr], ; applicable-domains
}
¶
The most common computation model, where each factor contributes proportionally to its weight:¶
confidence-score = sum(factor[i].weight * factor[i].normalized-score)
/ sum(factor[i].weight)
Constraints:
- sum(weights) SHOULD equal 1.0 for clarity
- All normalized-scores are in [0.0, 1.0]
- Resulting confidence-score is in [0.0, 1.0]
Example:
vdf-duration: weight=0.30, score=0.95, contribution=0.285
jitter-entropy: weight=0.25, score=0.80, contribution=0.200
presence-rate: weight=0.20, score=1.00, contribution=0.200
chain-integrity: weight=0.15, score=1.00, contribution=0.150
hardware-attest: weight=0.10, score=0.00, contribution=0.000
confidence-score = 0.285 + 0.200 + 0.200 + 0.150 + 0.000 = 0.835
¶
A conservative model where the overall score is limited by the weakest factor:¶
confidence-score = min(factor[i].normalized-score for all i) Use case: High-security contexts where all factors must be strong. Example: vdf-duration: score=0.95 jitter-entropy: score=0.80 presence-rate: score=1.00 chain-integrity: score=1.00 hardware-attest: score=0.00 <-- limiting factor confidence-score = 0.00¶
This model is appropriate when any weakness should disqualify the Evidence, such as forensic or legal contexts.¶
A balanced model that penalizes outliers more than weighted average but less than minimum:¶
confidence-score = (product(factor[i].normalized-score))^(1/n) Example with 5 factors: scores = [0.95, 0.80, 1.00, 1.00, 0.60] product = 0.95 * 0.80 * 1.00 * 1.00 * 0.60 = 0.456 confidence-score = 0.456^(1/5) = 0.838¶
Raw factor values must be normalized to the [0.0, 1.0] range for consistent computation. Normalization functions depend on the factor type:¶
For factors with a minimum threshold:
if raw_value >= threshold:
normalized = 1.0
else:
normalized = raw_value / threshold
Example: vdf-duration with 3600s threshold
raw_value = 2700s
normalized = 2700 / 3600 = 0.75
¶
For factors with min/max range: normalized = (raw_value - min) / (max - min) normalized = clamp(normalized, 0.0, 1.0) Example: typing-rate with acceptable range 20-200 WPM raw_value = 75 WPM normalized = (75 - 20) / (200 - 20) = 0.306¶
For pass/fail factors: normalized = 1.0 if present/valid else 0.0 Example: hardware-attestation TPM attestation present and valid: normalized = 1.0 No hardware attestation: normalized = 0.0¶
This specification defines several policy profiles for common use cases. Implementations MAY support these profiles by URI:¶
| Profile URI | Description | Key Characteristics |
|---|---|---|
| urn:ietf:params:pop:policy:basic | Basic verification | Chain integrity only |
| urn:ietf:params:pop:policy:academic | Academic submission | Weighted average, presence required |
| urn:ietf:params:pop:policy:legal | Legal proceedings | Minimum model, hardware required |
| urn:ietf:params:pop:policy:publishing | Publishing workflow | Weighted average, VDF emphasized |
Academic policy applied to a Standard tier Evidence packet:¶
verifier-metadata = {
1: "witnessd-verifier-2.0",
2: "https://verify.example.com",
4: "academic-v1",
5: { / appraisal-policy /
1: "urn:ietf:params:pop:policy:academic",
2: "1.0.0",
3: 1, / computation: weighted-average /
4: [ / factors /
{
1: "vdf-duration",
2: 1,
3: 0.25, / weight /
4: 5400.0, / observed: 90 minutes /
5: 1.0, / normalized (threshold: 3600) /
6: 0.25, / contribution /
7: {1: 5400.0, 2: 3600.0}
},
{
1: "jitter-entropy",
2: 3,
3: 0.20,
4: 45.7, / observed: 45.7 bits /
5: 1.0, / normalized (threshold: 32) /
6: 0.20
},
{
1: "presence-rate",
2: 10,
3: 0.25,
4: 0.917, / observed: 11/12 challenges /
5: 0.917, / direct ratio /
6: 0.229
},
{
1: "chain-integrity",
2: 4,
3: 0.20,
4: 1.0, / binary: valid /
5: 1.0,
6: 0.20
},
{
1: "edit-entropy",
2: 30,
3: 0.10,
4: 3.45, / observed /
5: 0.863, / normalized (range 0-4) /
6: 0.086
}
],
5: [ / thresholds /
{
1: "minimum-overall",
2: 1,
3: 0.70,
4: true
},
{
1: "presence-required",
2: 3,
3: 0.0,
4: true
}
],
6: { / metadata /
1: "Academic Submission Policy",
3: "WritersLogic Academic Integrity",
5: ["academic", "education", "research"]
}
}
}
/ confidence: 0.25 + 0.20 + 0.229 + 0.20 + 0.086 = 0.965 /
¶
This section defines a compact representation of Evidence that can be embedded in metadata fields, QR codes, or other space-constrained contexts. Compact Evidence References provide a cryptographic link to full Evidence packets without requiring the full packet to be transmitted.¶
Full Evidence packets can be large (kilobytes to megabytes), making them unsuitable for embedding in:¶
A Compact Evidence Reference provides "proof at a glance" that links to the full Evidence packet for complete verification. The reference is cryptographically bound to the Evidence, preventing tampering without detection.¶
The Compact Evidence Reference uses a dedicated CBOR tag to distinguish it from full Evidence packets.¶
; Compact Evidence Reference
; Tag 1347571281 = 0x50505021 = "PPP!"
tagged-compact-ref = #6.1347571281(compact-evidence-ref)
compact-evidence-ref = {
1 => uuid, ; packet-id
2 => hash-value, ; chain-hash
3 => hash-value, ; document-hash
4 => compact-summary, ; summary
5 => tstr, ; evidence-uri
6 => cose-signature, ; compact-signature
? 7 => compact-metadata, ; metadata
}
compact-summary = {
1 => uint, ; checkpoint-count
2 => uint, ; total-chars
3 => duration, ; total-vdf-time
4 => uint, ; evidence-tier (1-4)
? 5 => forensic-assessment, ; verdict (if available)
? 6 => float32, ; confidence-score
}
compact-metadata = {
? 1 => tstr, ; author-name
? 2 => pop-timestamp, ; created
? 3 => tstr, ; verifier-name
? 4 => pop-timestamp, ; verified-at
}
¶
The compact-signature binds all reference fields to prevent tampering:¶
compact-signature = COSE_Sign1(
payload = CBOR_encode({
1: packet-id,
2: chain-hash,
3: document-hash,
4: compact-summary,
5: evidence-uri,
}),
key = signing-key
)
Signing key may be:
- Author's signing key (self-attestation)
- Verifier's signing key (third-party attestation)
- Evidence service's key (hosting attestation)
¶
The signature type SHOULD be indicated by the key identifier or by the evidence-uri domain.¶
Without fetching the full Evidence packet, a verifier can:¶
This provides basic assurance that Evidence exists and was attested by a known party, without full verification.¶
For complete verification:¶
Discrepancies between the compact reference and the fetched Evidence MUST cause verification to fail.¶
Compact Evidence References may be encoded in several formats depending on the embedding context:¶
The native format is CBOR with the 0x50505021 tag. This is the most compact binary representation, suitable for:¶
Typical size: 150-250 bytes.¶
For text-only contexts, the CBOR bytes are base64url-encoded:¶
pop-ref:2nQAAZD1UPAgowGQA...base64url...¶
The "pop-ref:" prefix enables detection and parsing. Typical size: 200-350 characters.¶
A URI scheme for direct linking:¶
pop://verify.example.com/ref/2nQAAZD1UPAgowGQA...
Scheme: pop
Host: verification service
Path: /ref/{base64url-encoded-compact-ref}
¶
Clicking/scanning the URI opens the verification service with the compact reference pre-loaded.¶
XMP Metadata location: /x:xmpmeta/rdf:RDF/rdf:Description[@xmlns:pop] Custom namespace: xmlns:pop="http://example.com/ns/pop/1.0/" Properties: pop:evidenceRef = base64url-encoded compact reference pop:evidenceURI = full Evidence packet URI pop:verificationURI = verification service URI¶
Commit message footer: Pop-Evidence-Ref: pop-ref:2nQAAZD1UPAgowGQA... Pop-Evidence-URI: https://evidence.example.com/packets/abc123.pop Git notes (alternative): git notes --ref=pop-evidence add -m "pop-ref:2nQAAZD1..."¶
EXIF UserComment tag (0x9286): pop-ref:2nQAAZD1UPAgowGQA... XMP (for formats supporting it): Same structure as PDF XMP¶
/ Tagged Compact Evidence Reference (0x50505021 = "PPP!") /
1347571281({
1: h'550e8400e29b41d4a716446655440000', / packet-id /
2: { / chain-hash /
1: 1,
2: h'a7ffc6f8bf1ed76651c14756a061d662
f580ff4de43b49fa82d80a4b80f8434a'
},
3: { / document-hash /
1: 1,
2: h'e3b0c44298fc1c149afbf4c8996fb924
27ae41e4649b934ca495991b7852b855'
},
4: { / compact-summary /
1: 47, / checkpoints /
2: 12500, / chars /
3: 5400.0, / VDF time: 90 min /
4: 2, / tier: Standard /
5: 2, / verdict: likely-human /
6: 0.87 / confidence /
},
5: "https://evidence.example.com/p/"\
"550e8400e29b41d4a716446655440000.pop",
6: h'D28441A0A201260442...', / compact-signature /
7: { / metadata /
1: "Jane Author",
2: 1(1706745600), / created /
3: "WritersLogic Verification Service",
4: 1(1706832000) / verified /
}
})
¶
Encoded size: approximately 220 bytes (CBOR), 295 characters (base64url).¶
This section consolidates security analysis for the witnessd Proof of Process specification. It references and extends the per-section security considerations defined in Section 3.8, Section 4.6, Section 5.9, Section 6.8, and Section 2.10.¶
The specification adopts a quantified security approach: rather than claiming evidence is "secure" or "insecure" in absolute terms, security is expressed as cost asymmetries and tamper-evidence properties. This framing reflects the fundamental reality that sufficiently resourced adversaries can eventually forge any evidence; the goal is to make forgery economically irrational for most scenarios.¶
The witnessd threat model defines three categories: adversary goals, assumed adversary capabilities, and explicitly out-of-scope adversaries.¶
The specification defends against adversaries pursuing the following objectives:¶
Creating evidence that claims to document a process occurring earlier than it actually did. This attack is relevant when priority or timeline claims matter (e.g., intellectual property disputes, academic submissions with deadlines).¶
Creating evidence for a document that was not actually authored through the claimed process. This includes generating evidence for documents created entirely by automated means, or evidence claiming gradual authorship for content that was produced in a single operation (paste, import, generation).¶
Taking legitimate evidence from one authoring session and associating it with a different document. This attack attempts to transfer the credibility of genuine evidence to unrelated content.¶
Omitting checkpoints or evidence sections that would reveal unfavorable information (e.g., large paste operations, gaps in activity). This attack attempts to present a misleadingly favorable subset of the actual process.¶
The specification assumes adversaries have the following capabilities:¶
The adversary has full control over software running on their device, including the ability to modify or replace the Attesting Environment. They can intercept, modify, or fabricate any software-generated data.¶
The adversary can acquire commodity computing hardware at market prices. They may have access to cloud computing resources and can rent substantial computational capacity.¶
The adversary's computational resources are bounded by economic constraints. They cannot instantaneously compute arbitrarily large numbers of VDF iterations. The time required for sequential computation cannot be circumvented with additional resources.¶
The adversary has complete knowledge of all algorithms and protocols used by the specification. Security does not depend on obscurity; the specification is public.¶
The adversary can perform statistical analysis and may attempt to generate synthetic behavioral data that passes statistical tests.¶
The specification explicitly does NOT defend against:¶
Adversaries capable of extracting keys from hardware security modules (TPM, Secure Enclave) through sophisticated physical attacks, side-channel analysis, or manufacturer compromise. Hardware attestation assumes HSM integrity.¶
Adversaries with access to novel cryptanalytic techniques that break SHA-256 collision resistance, ECDSA signature security, or other standard cryptographic primitives. The specification relies on established cryptographic assumptions.¶
Adversaries with access to fault-tolerant quantum computers capable of executing Shor's algorithm (breaking RSA/ECDSA) or providing significant Grover speedups. Post-quantum considerations are noted in Section 4.5.2 but full quantum resistance is not claimed.¶
Adversaries capable of creating evidence at one point in time and presenting it as if created earlier, where external anchors are not available or have been compromised. External timestamp authorities are trusted for absolute time claims.¶
Adversaries who coerce legitimate authors into producing evidence under duress. The specification documents process, not intent or consent.¶
The exclusion of these adversaries is not a weakness but a recognition of practical threat modeling. Evidence systems appropriate for defending against nation-state actors would impose costs and constraints unsuitable for general authoring scenarios.¶
The specification relies on established cryptographic primitives with well-understood security properties. This section documents the security assumptions and requirements for each cryptographic component.¶
Hash functions are used throughout the specification for content binding, chain construction, entropy commitment, and VDF computation.¶
Collision Resistance:¶
It must be computationally infeasible to find two distinct inputs that produce the same hash output. This property ensures that different document states produce different content-hash values.¶
Preimage Resistance:¶
Given a hash output, it must be computationally infeasible to find any input that produces that output. This property prevents adversaries from constructing documents that match a predetermined hash.¶
Second Preimage Resistance:¶
Given an input and its hash, it must be computationally infeasible to find a different input with the same hash. This property prevents document substitution attacks.¶
SHA-256 is RECOMMENDED and MUST be supported by all implementations. SHA-3-256 SHOULD be supported for algorithm agility. Hash functions with known weaknesses (MD5, SHA-1) MUST NOT be used.¶
SHA-256 provides 128-bit security against collision attacks and 256-bit security against preimage attacks under classical assumptions. Grover's algorithm reduces these to 85-bit and 128-bit respectively under quantum assumptions. This margin is considered adequate for the specification's threat model.¶
Digital signatures are used for checkpoint chain authentication, hardware attestation, calibration binding, and Attestation Result integrity.¶
Implementations MUST support COSE algorithm identifiers:¶
RSA-based algorithms (PS256, RS256) MAY be supported for compatibility with legacy systems but are not recommended for new implementations due to larger signature sizes and post-quantum vulnerability.¶
Minimum key sizes for 128-bit security:¶
Signatures MUST bind to the complete payload being signed. Partial payload signatures (signing a subset of fields) create opportunities for field substitution attacks. The chain-mac field provides additional binding beyond the checkpoint signature.¶
Verifiable Delay Functions provide the temporal security foundation of the specification. VDF security rests on the sequential computation requirement.¶
The VDF output cannot be computed significantly faster than the specified number of sequential operations. For iterated hash VDFs, this reduces to the assumption that no algorithm computes H^n(x) faster than n sequential hash evaluations. No such algorithm is known for cryptographic hash functions.¶
Additional computational resources (more processors, GPUs, ASICs) cannot reduce the wall-clock time required for VDF computation. The iterated hash construction is inherently sequential: each iteration depends on the previous output.¶
See Section 4.6.2 for detailed analysis.¶
For iterated hash VDFs, verification is by recomputation. The Verifier executes the same computation and compares results. This provides perfect soundness: a claimed output that differs from the actual computation will always be detected.¶
For succinct VDFs ([Pietrzak2019], [Wesolowski2019]), verification relies on the cryptographic hardness of the underlying problem (RSA group or class group). Soundness is computational rather than perfect.¶
Proper key management is essential for maintaining evidence integrity.¶
When available, signing keys SHOULD be bound to hardware security modules (TPM, Secure Enclave). Hardware binding provides:¶
The checkpoint-chain-key used for chain-mac computation SHOULD be derived uniquely for each session. Key derivation SHOULD use HKDF (RFC 5869) with domain separation:¶
chain-key = HKDF-SHA256(
salt = session-entropy,
ikm = device-master-key,
info = "witnessd-chain-v1" || session-id
)
¶
Device keys SHOULD be rotated periodically (RECOMMENDED: annually) or upon suspected compromise. Evidence packets created with revoked keys SHOULD be flagged during verification.¶
The Attesting Environment (AE) is the witnessd-core software running on the author's device. Understanding what the AE is trusted for, and what it is NOT trusted for, is essential for correct interpretation of evidence.¶
The AE is trusted to perform accurate observation and honest reporting of the specific data it captures:¶
The AE is trusted to accurately measure inter-keystroke intervals and other timing data. This does not require trusting the content of keystrokes, only the timing between events.¶
The AE is trusted to correctly compute cryptographic hashes of document content. Verification can detect incorrect hashes, but cannot detect if the AE computed a hash of different content than claimed.¶
The AE is trusted to actually execute VDF iterations rather than fabricating outputs. This trust is partially verifiable: VDF outputs can be recomputed, but the claimed timing cannot be independently verified without calibration attestation.¶
For claims in the monitoring-dependent category (types 16-63), the AE is trusted to have actually observed and reported the events (or non-events) it claims. This trust is documented in the ae-trust-basis field.¶
The specification explicitly does NOT rely on AE trust for the following:¶
The AE makes no claims about document quality, originality, accuracy, or appropriateness. Evidence documents process, not content merit.¶
The AE makes no claims about why the author performed specific actions, what the author was thinking, or whether the author intended to deceive. Evidence documents observable behavior, not mental states.¶
The AE makes no claims about who was operating the device. The evidence shows that input events occurred on a device; it does not prove that a specific individual produced those events.¶
Behavioral patterns consistent with human typing do not prove human cognition. An adversary could theoretically program input patterns that mimic human timing while the content originates elsewhere. The Jitter Seal makes this costly, not impossible.¶
Hardware attestation increases AE trust by binding evidence to verified hardware:¶
Provides platform integrity measurement (PCRs), key sealing to platform state, and hardware-bound signing keys. TPM attestation proves that the AE was running on a specific device in a specific configuration.¶
Provides hardware-bound key generation and signing operations. Keys generated in the Secure Enclave cannot be exported, binding signatures to the specific device.¶
Hardware attestation proves the signing key is hardware-bound; it does not prove the AE software is unmodified. Full AE integrity would require secure boot attestation and runtime integrity measurement, which are platform-specific and not universally available.¶
Understanding the impact of AE compromise is essential for risk assessment:¶
An adversary running modified AE software can fabricate any monitoring-dependent claims (types 16-63). Chain-verifiable claims (types 1-15) remain bound by VDF computational requirements even with modified software.¶
Modified software could report artificially slow calibration rates, making subsequent VDF computations appear to take longer than they actually did. This attack is mitigated by:¶
Modified software could generate synthetic timing data that mimics human patterns. The cost of this attack is bounded by:¶
See Section 3.8.2 for quantified bounds on simulation attacks.¶
AE compromise cannot reduce the VDF computational requirement or bypass the sequential execution constraint. Compromise enables fabrication of monitoring data but does not eliminate the time cost of forgery. The forgery-cost-section quantifies the minimum resources required even with full software control.¶
The verification process must be secure against both malicious Evidence and malicious Verifiers.¶
Evidence verification is designed to be independent of the Attester:¶
Verification requires no communication with or data from the Attester beyond the Evidence packet itself. A Verifier with only the .pop file can perform complete verification.¶
A skeptical Verifier can appraise Evidence without trusting any claims made by the Attester. All cryptographic proofs are included and can be recomputed independently.¶
Multiple Verifiers appraising the same Evidence should reach consistent results for chain-verifiable claims. Monitoring- dependent claims may receive different confidence assessments based on Verifier policies.¶
Evidence packets may contain thousands of checkpoints. Full verification of all VDF proofs may be impractical. Verifiers MAY use sampling strategies:¶
Always verify the first and last checkpoints fully. This confirms the chain endpoints.¶
Randomly select checkpoints for full VDF verification. If any sampled checkpoint fails, reject the entire Evidence. Probability of detecting a single invalid checkpoint with k samples from n checkpoints: 1 - (1 - 1/n)^k.¶
Verify prev-hash linkage for ALL checkpoints (computationally cheap). This ensures no checkpoints were removed or reordered.¶
If external anchors are present, prioritize verification of checkpoints adjacent to anchors. External timestamps bound the timeline at anchor points.¶
Attestation Results SHOULD disclose the sampling strategy used and the number of checkpoints fully verified. Relying Parties can assess whether the sampling provides adequate confidence for their use case.¶
External anchors (RFC 3161 timestamps, blockchain proofs) provide absolute time binding but introduce additional trust requirements:¶
Timestamps per [RFC3161] require trust in the Time Stamping Authority (TSA). Verifiers SHOULD use TSAs with published policies and audit records. Multiple TSAs MAY be used for redundancy.¶
Blockchain-based anchors require access to blockchain data (directly or via APIs). Verifiers SHOULD verify:¶
Anchors prove that Evidence existed at the anchor time; they do not prove Evidence was created at that time. An adversary could create Evidence, wait, then obtain an anchor. This is mitigated by anchor coverage requirements (multiple anchors throughout the session).¶
This section addresses protocol-level attacks and mitigations, drawing on the per-section security analyses.¶
Replay attacks attempt to reuse valid evidence components in invalid contexts. Multiple mechanisms prevent replay:¶
Session entropy (random 256-bit seed) is incorporated into the genesis checkpoint VDF input. This prevents precomputation of VDF outputs before a session begins.¶
Each checkpoint includes prev-hash, binding it to the specific chain history. Checkpoints cannot be transplanted between chains without invalidating the hash linkage.¶
See Section 3.8.1 for jitter-specific replay prevention.¶
Checkpoint sequence numbers MUST be strictly monotonic. Duplicate or out-of-order sequence numbers indicate manipulation.¶
VDF inputs incorporate content-hash, binding temporal proofs to specific document states. Evidence for one document cannot be transferred to another without VDF recomputation.¶
Transplant attacks attempt to associate legitimate evidence from one context with content from another context:¶
The VDF input includes content-hash:¶
VDF_input{N} = H(
VDF_output{N-1} ||
content-hash{N} ||
jitter-commitment{N} ||
sequence{N}
)
¶
Changing the document content requires recomputing all subsequent VDF proofs.¶
The jitter-commitment is entangled with VDF input. Transplanting jitter data from another session is infeasible because it would require the original VDF output (which depends on different content) or recomputing the entire VDF chain with new jitter (which requires capturing new behavioral entropy in real time).¶
The chain-mac field HMAC-binds checkpoints to the session's chain-key:¶
chain-mac = HMAC-SHA256(
key = chain-key,
message = checkpoint-hash || sequence || session-id
)
¶
Without the chain-key, an adversary cannot construct valid chain-mac values for transplanted checkpoints.¶
Backdating creates evidence claiming a process occurred earlier than it actually did. The cost of backdating is quantified by the VDF recomputation requirement:¶
To backdate evidence by inserting or modifying checkpoints at position P, the adversary must recompute all VDF proofs from position P forward. This requires:¶
backdate_time >= sum(iterations[i]) / adversary_vdf_rate
for i = P to N
¶
where N is the final checkpoint. Backdating by a significant amount (hours or days) requires proportional wall-clock time.¶
If external anchors exist in the chain, backdating is constrained to the interval between anchors. An adversary cannot backdate before an anchor without also forging the external timestamp.¶
The forgery-cost-section provides explicit cost bounds for backdating attacks, including compute costs, time costs, and economic estimates.¶
Omission attacks selectively remove checkpoints to hide unfavorable evidence:¶
Checkpoint sequence numbers MUST be consecutive. Missing sequence numbers indicate omission. Verifiers MUST reject chains with non-consecutive sequences.¶
Removing a checkpoint breaks the hash chain (subsequent checkpoint's prev-hash will not match). Repairing the chain requires recomputing all subsequent checkpoint hashes and VDF proofs.¶
The checkpoint-chain-complete absence claim (type 6) explicitly asserts that no checkpoints were omitted. This claim is chain-verifiable.¶
Security of the overall system depends on proper operational practices beyond the protocol specification.¶
Device keys SHOULD be generated within hardware security modules when available. Software-generated keys MUST use cryptographically secure random number generators.¶
Private keys SHOULD be stored in platform-appropriate secure storage:¶
Keys MUST NOT be stored in plaintext in the filesystem.¶
Organizations SHOULD establish key rotation policies. RECOMMENDED rotation interval: annually or upon personnel changes. Evidence packets created with revoked keys SHOULD receive reduced confidence scores.¶
Mechanisms for key revocation are outside the scope of this specification but SHOULD be considered for deployment. Certificate revocation lists (CRLs) or OCSP may be appropriate for managed environments.¶
Evidence packets are self-protecting through cryptographic binding. Additional encryption is not required for integrity but MAY be applied for confidentiality.¶
Evidence packets contain document hashes and behavioral data. While content is not included, statistical information about the authoring process is present. Transmission over untrusted networks SHOULD use TLS 1.3 or equivalent.¶
Evidence packets intended for long-term storage SHOULD be:¶
Organizations SHOULD establish retention policies balancing evidentiary value against privacy considerations. Jitter data has privacy implications; retention beyond the verification period may not be necessary or desirable.¶
Verifiers SHOULD establish minimum requirements for acceptable Evidence:¶
Verifiers SHOULD define confidence thresholds for acceptance:¶
Verifiers SHOULD define how caveats affect acceptance decisions. Some caveats may be disqualifying for specific use cases (e.g., "no hardware attestation" may be unacceptable for high-stakes verification).¶
This section explicitly documents what the specification does NOT protect against and what it does NOT claim to achieve.¶
If the author and a third party collude (e.g., the author provides their device credentials to another person who types while the author is credited), the Evidence will show a legitimate-looking process. The specification documents observable behavior, not identity.¶
An author could slowly type pre-prepared content, creating Evidence of a gradual process for content that already existed. The specification documents that typing occurred, not that thinking occurred during typing.¶
Input from devices not monitored by the AE (e.g., hardware keystroke injectors, remote desktop from unmonitored machines) may not be distinguishable from local input. Hardware-level input verification is outside scope.¶
Attacks that manipulate Relying Parties into accepting inappropriate Evidence (e.g., convincing a reviewer that weak Evidence is sufficient) are outside scope.¶
The specification is deliberately content-agnostic:¶
Evidence contains document hashes, not content. The specification makes no claims about what was written, only how it was written.¶
Evidence does not indicate whether content is good, original, accurate, or valuable. Strong Evidence can accompany poor content; excellent content can have weak Evidence.¶
The specification explicitly does NOT claim to detect whether content was "written by AI" or "written by a human" in terms of content origin. It documents the observable INPUT process, which is distinct from content generation.¶
Content-agnosticism is a privacy feature. Evidence can be verified without accessing the document content, enabling verification of confidential documents.¶
This section summarizes the security properties provided by the specification:¶
Modifications to Evidence packets are detectable through cryptographic verification. The hash chain, VDF entanglement, and MAC bindings ensure that alteration invalidates the Evidence.¶
Producing counterfeit Evidence requires resources (time, compute, entropy generation) disproportionate to legitimate Evidence creation. The forgery-cost-section quantifies these requirements.¶
Evidence can be verified by any party without access to the original device, without trust in the Attester's infrastructure, and without network connectivity (except for external anchors).¶
Document content is never stored in Evidence. Behavioral data is aggregated before inclusion. The specification enforces privacy through structural constraints, not policy.¶
VDF chain construction provides unforgeable relative ordering of checkpoints. External anchors provide absolute time binding.¶
Jitter Seal entanglement binds captured behavioral entropy to the checkpoint chain, making Evidence transplantation infeasible.¶
Evidence CAN be forged given sufficient resources. The specification makes forgery costly, not impossible.¶
Evidence does NOT prove who operated the device. It proves that input events occurred on a device, not that a specific person produced them.¶
Evidence does NOT prove why actions occurred. Observable behavior is documented; mental states are not.¶
Evidence does NOT prove where ideas came from. The input process is documented; the cognitive source is not.¶
All security properties are bounded by explicit assumptions. No claim is made to be absolute, irrefutable, or guaranteed.¶
This section consolidates privacy analysis for the witnessd Proof of Process specification. It references and extends the per-section privacy considerations defined in Section 3.7, Section 5.10, and Section 2.10.3.¶
Privacy is a core design goal of this specification, not an afterthought. The protocol implements privacy-by-construction: structural constraints that make privacy violations architecturally impossible, rather than relying on policy or trust. This approach follows the guidance of [RFC6973] (Privacy Considerations for Internet Protocols).¶
The witnessd evidence model enforces privacy through architectural constraints that cannot be circumvented without fundamentally modifying the protocol.¶
Evidence packets contain cryptographic hashes of document states, never the document content itself. This is a structural invariant:¶
Content Hash Binding:¶
The document-ref structure (CDDL key 5 in evidence-packet) contains only a hash-value of the final document content, the byte-length, and character count. The content itself is never included in the Evidence packet.¶
Checkpoint Content Hashes:¶
Each checkpoint (key 4: content-hash) contains a hash of the document state at that point. An adversary with the Evidence packet but not the document cannot recover content from these hashes.¶
Edit Deltas Without Content:¶
The edit-delta structure (key 7 in checkpoint) records chars-added, chars-deleted, insertions, deletions, and replacements as counts only. No information about what characters were added or deleted is included.¶
This design enables verification of process without revealing what was written, supporting confidential document workflows where the evidence must be verifiable but the content must remain private.¶
The specification captures inter-event timing intervals without recording which keys were pressed:¶
Timing-Only Measurement:¶
Jitter-binding captures millisecond intervals between input events. The interval "127ms" carries no information about whether the interval was between 'a' and 'b' or between 'x' and 'y'.¶
No Character Mapping:¶
Timing intervals are stored in observation order without any association to specific characters, words, or semantic content.¶
No Keyboard Event Codes:¶
Scan codes, virtual key codes, and other keyboard identifiers are not recorded. The specification treats all input events uniformly as timing sources.¶
This architecture ensures that even with complete access to an Evidence packet, no information about what was typed can be reconstructed.¶
The specification explicitly excludes visual capture mechanisms:¶
Visual content capture would fundamentally violate the content-agnostic design and is architecturally excluded.¶
Evidence is generated entirely on the Attester device with no network dependency:¶
No Telemetry:¶
The Attesting Environment does not transmit telemetry, analytics, or any behavioral data to external services.¶
No Cloud Processing:¶
All cryptographic computations (hashing, VDF, signatures) occur locally. No document content or behavioral data is sent to cloud services for processing.¶
Optional External Anchors:¶
The only network communication is optional: external anchors (RFC 3161, OpenTimestamps, blockchain) transmit only cryptographic hashes, never document content or behavioral data.¶
Users can generate and verify Evidence in fully air-gapped environments. External anchors enhance evidence strength but are not required.¶
Following [RFC6973] Section 6.1, the specification minimizes data collection to what is strictly necessary for evidence generation and verification.¶
The following data IS collected and included in Evidence packets:¶
Inter-event timing intervals aggregated into histogram buckets (jitter-summary, key 3 in jitter-binding). Bucket boundaries are coarse (RECOMMENDED: 0, 50, 100, 200, 500, 1000, 2000, 5000ms) to prevent precise interval reconstruction.¶
Character counts for additions, deletions, and edit operations (edit-delta structure). These are aggregate counts, not positional data.¶
Cryptographic hashes of document states at each checkpoint. One-way functions; content cannot be recovered.¶
Verifiable Delay Function outputs proving minimum elapsed time. These are computational proofs, not behavioral data.¶
The raw-intervals field (key 5 in jitter-binding) MAY be included for enhanced verification. This is OPTIONAL and user-controlled. When omitted, only histogram aggregates are included.¶
The following data is explicitly NOT collected:¶
The specification supports tiered disclosure through optional fields:¶
| Level | Data Included | Privacy Impact |
|---|---|---|
| Minimal | Hashes, VDF proofs, histogram summaries only | Lowest |
| Standard | + Presence challenges, forensics section | Low-Moderate |
| Enhanced | + Raw timing intervals, keystroke section | Moderate |
| Maximum | + Hardware attestation, absence claims | Higher |
Users SHOULD select the minimum disclosure level that meets their verification requirements. Higher tiers provide stronger evidence at the cost of revealing more behavioral data.¶
Keystroke timing data, while not traditionally classified as biometric, has biometric-adjacent properties that warrant special consideration. This section addresses regulatory considerations and mitigation measures.¶
Research has demonstrated that keystroke dynamics can serve as a behavioral biometric:¶
Individual Identification:¶
Detailed timing patterns can theoretically distinguish individuals with high accuracy across sessions.¶
State Detection:¶
Timing variations may correlate with cognitive state, fatigue, stress, or physical condition.¶
Re-identification Risk:¶
If an adversary has access to multiple Evidence packets from the same author, timing patterns might enable linkage across sessions even without explicit identity.¶
The specification implements several measures to reduce biometric-adjacent risks:¶
By default, only histogram-aggregated timing data is included in Evidence packets. The RECOMMENDED bucket width of 50ms minimum significantly reduces the precision available for behavioral fingerprinting.¶
The RECOMMENDED bucket boundaries (0, 50, 100, 200, 500, 1000, 2000, 5000ms) capture statistically relevant patterns while preventing reconstruction of precise keystroke sequences. Implementations MAY use coarser buckets for enhanced privacy.¶
Timing intervals have no mapping to specific characters. The pattern "fast-slow-fast" reveals rhythm without content.¶
Each Evidence packet is independent. Cross-session linkage requires access to multiple packets. The specification does not provide mechanisms for linking sessions.¶
Raw timing intervals (key 5 in jitter-binding) are optional. Users concerned about biometric exposure can ensure this field is not populated.¶
Implementations and deployments should consider applicable privacy regulations:¶
Keystroke dynamics may constitute "special categories of personal data" under Article 9 if used for identification purposes. Implementations should document whether timing data is used for identification (prohibited without explicit consent) or solely for process evidence (may fall under different legal basis).¶
Biometric information is covered under CCPA Section 1798.140(b). Users have rights to know, delete, and opt-out. The local-only processing model simplifies compliance.¶
Illinois Biometric Information Privacy Act has strict requirements for biometric data collection, including written policies and consent. Deployments in Illinois should consult legal counsel.¶
The specification's local-only processing model and user control over data disclosure support compliance, but legal interpretation varies by jurisdiction.¶
Implementations MUST inform users about behavioral data collection:¶
These disclosures SHOULD be presented before Evidence generation begins, not buried in terms of service.¶
The hash-salt-mode field (CDDL lines 164-168) enables privacy-preserving verification scenarios where document binding should not be globally verifiable.¶
content-hash = H(document-content)¶
Properties:¶
Use cases:¶
Privacy implications: Anyone who obtains both the document and the Evidence packet can confirm the binding. If document confidentiality matters, consider salted modes.¶
content-hash = H(salt || document-content) salt-commitment = H(salt) ; salt held by escrow service¶
Properties:¶
Use cases:¶
Privacy implications: Verification access is determined by escrow policy, not author discretion. Authors should understand escrow release conditions before selecting this mode.¶
For salted modes:¶
The specification supports multiple identity postures, from fully anonymous to strongly identified, with user control over disclosure.¶
Evidence packets CAN be generated without any identity disclosure:¶
Anonymous evidence is suitable for contexts where process documentation matters but author identity is irrelevant or should remain confidential.¶
Pseudonymous use links evidence to a consistent identifier without revealing real-world identity:¶
Pseudonymous evidence enables reputation building without identity exposure.¶
For contexts requiring identity binding:¶
Identity strength depends on the verification context, not the specification. The specification provides the mechanism for identity claims; verification of those claims is a deployment concern.¶
Hardware attestation (hardware-section) binds evidence to a specific device without necessarily identifying the user:¶
Device binding strengthens evidence integrity without requiring user identification. It proves "this device" without proving "this person."¶
Following [RFC6973] Section 6.2, this section addresses data lifecycle considerations.¶
Evidence packets are designed as archival artifacts:¶
Evidence accumulates during authoring session(s). Packet is finalized when authoring is complete.¶
Packet may be transmitted to Verifiers, stored alongside documents, or archived for future verification needs.¶
Retention period depends on use case. Legal documents may require indefinite retention; other contexts may allow shorter periods.¶
Once distributed, deletion from all recipients may be impractical. Authors should consider disclosure scope before distribution.¶
Users have the following deletion capabilities:¶
Local Data:¶
Evidence stored locally can be deleted at any time by the author. Implementations SHOULD provide clear deletion mechanisms.¶
Distributed Evidence:¶
Once Evidence is transmitted to Verifiers or Relying Parties, deletion depends on those parties' policies. The specification cannot enforce deletion of distributed data.¶
Attestation Results:¶
.war files produced by Verifiers are controlled by Verifiers. Authors may request deletion under applicable privacy laws.¶
Authors should understand that distributing Evidence creates copies outside their control. Privacy-sensitive authors should limit distribution scope.¶
External anchors have special retention characteristics:¶
TSA records may be retained by the timestamp authority per their policies. Typically includes the hash committed, not any document or behavioral data.¶
Blockchain records are permanent and immutable by design. The anchored hash cannot be deleted from the blockchain. This is a feature for evidence permanence but has privacy implications.¶
OTS proofs reference Bitcoin transactions, which are permanent. The proof structure can be deleted locally, but the Bitcoin transaction remains.¶
Users concerned about data permanence should carefully consider whether to use blockchain-based external anchors. RFC 3161 timestamps offer similar evidentiary value with more conventional retention policies.¶
IMPORTANT: Only cryptographic hashes are anchored, never document content or behavioral data. The permanent record is a hash, not the underlying information.¶
This section addresses what information is disclosed to various parties in the verification workflow, following [RFC6973] Section 5.2 on disclosure.¶
When an Evidence packet (.pop) is submitted for verification, the Verifier learns:¶
Verifiers SHOULD NOT:¶
Implementations MAY define Verifier privacy policies that authors can review before submitting Evidence.¶
Relying Parties consuming Attestation Results (.war) learn:¶
The .war file is designed to provide necessary trust information without full Evidence disclosure. Relying Parties needing more detail can request the original .pop file.¶
Authors concerned about disclosure can:¶
This section addresses risks of behavioral fingerprinting across sessions and mitigation measures.¶
Multiple Evidence packets from the same author may enable linkage:¶
Keystroke timing patterns exhibit individual characteristics that persist across sessions. An adversary with multiple Evidence packets could potentially link them to the same author even without explicit identity.¶
If device keys are reused across sessions, Evidence packets are cryptographically linkable. Hardware attestation makes this linkage explicit.¶
Edit pattern statistics (though not content) may correlate with writing style. Combined with timing data, this could strengthen cross-session linkage.¶
To limit cross-session correlation via device keys:¶
Session Keys:¶
Use per-session derived keys rather than a single device key. HKDF with session-specific info prevents direct linkage.¶
Periodic Rotation:¶
Rotate device keys periodically (RECOMMENDED: annually). Evidence packets signed with different keys are not cryptographically linked.¶
Context-Specific Keys:¶
Use different keys for different contexts (e.g., work vs. personal) to prevent cross-context linkage.¶
The specification provides inherent session isolation:¶
Cross-session linkage requires external analysis, not protocol features. The specification does not provide linkage mechanisms.¶
Authors concerned about cross-session correlation can:¶
Following [RFC6973] Section 5, this section analyzes specific privacy threats.¶
The specification is designed to resist surveillance:¶
The primary surveillance risk is through Evidence packet distribution. Authors control this distribution.¶
If Evidence packets are compromised:¶
Mitigation: Encrypt Evidence packets at rest. Use access controls for stored Evidence. Limit retention period where appropriate.¶
Correlation threats are addressed in Section 12.8. Key mitigations include key rotation, histogram aggregation, and distribution limiting.¶
Re-identification threats:¶
Authors requiring strong anonymity should use minimal disclosure tier without raw intervals and without device attestation.¶
Evidence data could theoretically be used for purposes beyond verification:¶
Mitigation: The specification does not prevent secondary use by data recipients. Authors should consider Verifier and Relying Party policies before disclosure. Implementations MAY include usage restrictions in Evidence packet metadata.¶
Unauthorized disclosure of Evidence packets:¶
Authors should treat Evidence packets as potentially sensitive and limit distribution to trusted parties.¶
The risk that authors cannot participate in systems if they decline Evidence generation:¶
Deployments should consider whether Evidence requirements create exclusionary effects and provide alternatives where appropriate.¶
This section summarizes the privacy properties provided and not provided by the specification.¶
Document content is never stored in Evidence. Verification can occur without content access (using salted modes).¶
Individual keystrokes are never recorded. Only timing intervals between events are captured, without character association.¶
All data processing occurs locally. No external services required for Evidence generation.¶
Authors control Evidence distribution, disclosure level, and identity exposure.¶
Evidence can be generated and verified without real-world identity disclosure.¶
Salted modes enable author-controlled verification access.¶
Timing data reveals behavioral patterns. While aggregated, this data has biometric-adjacent properties.¶
Once Evidence is distributed, the specification cannot control further dissemination or use.¶
Multiple Evidence packets may be linkable through behavioral analysis, even with different identities.¶
Blockchain anchors create permanent records that cannot be deleted.¶
Evidence packets reveal document size, authoring timeline, and edit statistics even without content.¶
This document requests several IANA registrations to support interoperable implementations of the witnessd Proof of Process specification. The author has submitted an application for a Private Enterprise Number (PEN) assignment under the WritersLogic organization to support vendor-specific registrations.¶
This document requests registration of an EAT profile in the "Entity Attestation Token Profiles" registry established by [RFC9711].¶
| Profile URI | Description | Reference |
|---|---|---|
| https://example.com/rats/eat/profile/pop/1.0 | witnessd Proof of Process Evidence Profile | [this document] |
Note: The URI https://example.com/rats/eat/profile/pop/1.0 is provisional during individual submission. Upon working group adoption, registration of an IANA-hosted profile URI will be requested (e.g., urn:ietf:params:rats:eat:profile:pop:1.0).¶
The profile defines the following characteristics:¶
This document requests registration of custom claims in the "CBOR Web Token (CWT) Claims" registry [IANA.cwt]. These claims are used within EAT Attestation Results to convey witnessd-specific assessment data.¶
Initial registration is requested in the private-use range (-70000 to -70010) to enable early implementation. Upon standards track advancement, permanent positive claim keys will be requested.¶
| Claim Name | Claim Key | Claim Value Type | Claim Description | Reference |
|---|---|---|---|---|
| pop-forensic-assessment | -70000 | unsigned integer | Forensic assessment enumeration value (0-5) indicating the Verifier's assessment of behavioral evidence consistency with human authorship patterns. | [this document] |
| pop-presence-score | -70001 | float32 | Presence challenge response score in range [0.0, 1.0] representing the ratio of successfully completed human presence challenges. | [this document] |
| pop-evidence-tier | -70002 | unsigned integer | Evidence tier classification (1-4) indicating the comprehensiveness of evidence collected: 1=Basic, 2=Standard, 3=Enhanced, 4=Maximum. | [this document] |
| pop-ai-composite-score | -70003 | float32 | AI indicator composite score in range [0.0, 1.0] derived from behavioral forensic analysis. Lower values indicate patterns more consistent with human authorship. | [this document] |
The forensic-assessment enumeration values for pop-forensic-assessment are defined as:¶
| Value | Name | Description |
|---|---|---|
| 0 | not-assessed | Verification incomplete or not attempted |
| 1 | strongly-human | Evidence strongly indicates human authorship patterns |
| 2 | likely-human | Evidence consistent with human authorship patterns |
| 3 | inconclusive | Evidence neither confirms nor refutes claims |
| 4 | likely-ai-assisted | Evidence suggests AI assistance in authorship |
| 5 | strongly-ai-generated | Evidence strongly indicates AI generation |
This document requests IANA to create three new registries under a new "witnessd Proof of Process" registry group.¶
This document requests creation of the "Proof of Process Claim Types" registry. This registry contains the identifiers for absence claims that can be asserted and verified in Evidence packets.¶
The registration procedures for this registry depend on the claim type range:¶
| Range | Category | Registration Procedure |
|---|---|---|
| 1-15 | Chain-verifiable claims | Specification Required |
| 16-63 | Monitoring-dependent claims | Specification Required |
| 64-127 | Environmental claims | Expert Review |
| 128-255 | Private use | First Come First Served |
Chain-verifiable claims (1-15) are claims that can be proven solely from the Evidence packet without trusting the Attesting Environment beyond data integrity. These claims require a published specification demonstrating verifiability.¶
Monitoring-dependent claims (16-63) require trust in the Attesting Environment's accurate reporting of monitored events. Specifications MUST document the trust assumptions.¶
Environmental claims (64-127) relate to the execution environment or external conditions. Expert review ensures claims are well-defined and implementable.¶
Private use claims (128-255) are available for implementation-specific extensions without coordination.¶
Registrations MUST include the following fields:¶
The initial contents of the "Proof of Process Claim Types" registry are as follows:¶
| Value | Name | Description | Reference |
|---|---|---|---|
| 1 | max-single-delta-chars | Maximum characters added in any single checkpoint delta | [this document] |
| 2 | max-single-delta-bytes | Maximum bytes added in any single checkpoint delta | [this document] |
| 3 | max-net-delta-chars | Maximum net character change across the entire chain | [this document] |
| 4 | min-vdf-duration-seconds | Minimum total VDF-proven elapsed time in seconds | [this document] |
| 5 | min-vdf-duration-per-kchar | Minimum VDF-proven time per thousand characters | [this document] |
| 6 | checkpoint-chain-complete | Checkpoint chain has no gaps (all sequence numbers present) | [this document] |
| 7 | checkpoint-chain-consistent | All checkpoint hashes and VDF linkages verify correctly | [this document] |
| 8 | jitter-entropy-above-threshold | Captured jitter entropy exceeds specified bits threshold | [this document] |
| 9 | jitter-samples-above-count | Number of jitter samples exceeds specified count | [this document] |
| 10 | revision-points-above-count | Number of revision points (non-monotonic edits) exceeds threshold | [this document] |
| 11 | session-count-above-threshold | Number of distinct editing sessions exceeds threshold | [this document] |
| 12-15 | Unassigned | Reserved for future chain-verifiable claims | [this document] |
| Value | Name | Description | Reference |
|---|---|---|---|
| 16 | max-paste-event-chars | Maximum characters in any single paste event | [this document] |
| 17 | max-clipboard-access-chars | Maximum total characters accessed from clipboard | [this document] |
| 18 | no-paste-from-ai-tool | No paste operations from known AI tool applications | [this document] |
| 19 | Unassigned | Reserved | [this document] |
| 20 | max-insertion-rate-wpm | Maximum sustained insertion rate in words per minute | [this document] |
| 21 | no-automated-input-pattern | No detected automated or scripted input patterns | [this document] |
| 22 | no-macro-replay-detected | No keyboard macro replay patterns detected | [this document] |
| 23-31 | Unassigned | Reserved for input-related claims | [this document] |
| 32 | no-file-import-above-bytes | No file imports exceeding specified byte threshold | [this document] |
| 33 | no-external-file-open | No external files opened during editing session | [this document] |
| 34-39 | Unassigned | Reserved for file-related claims | [this document] |
| 40 | no-concurrent-ai-tool | No known AI tool application running concurrently | [this document] |
| 41 | no-llm-api-traffic | No detected network traffic to known LLM API endpoints | [this document] |
| 42-47 | Unassigned | Reserved for AI-detection claims | [this document] |
| 48 | max-idle-gap-seconds | Maximum idle gap within session does not exceed threshold | [this document] |
| 49 | active-time-above-threshold | Total active editing time exceeds specified threshold | [this document] |
| 50-63 | Unassigned | Reserved for timing-related claims | [this document] |
This document requests creation of the "Proof of Process VDF Algorithms" registry. This registry contains identifiers for Verifiable Delay Function algorithms used in Evidence packets.¶
| Range | Category | Registration Procedure |
|---|---|---|
| 1-15 | Iterated hash VDFs | Standards Action |
| 16-31 | Succinct VDFs | Standards Action |
| 32-63 | Experimental | Expert Review |
Iterated hash VDFs (1-15) are algorithms where verification requires recomputation. Standards Action ensures thorough security analysis.¶
Succinct VDFs (16-31) are algorithms with efficient verification (e.g., [Pietrzak2019], [Wesolowski2019]). Standards Action ensures cryptographic soundness.¶
Experimental algorithms (32-63) may be registered with Expert Review for research and interoperability testing. Production use requires promotion to Standards Action ranges.¶
Registrations MUST include the following fields:¶
| Value | Name | Category | Verification | Reference |
|---|---|---|---|---|
| 1 | iterated-sha256 | iterated-hash | O(n) | [this document] |
| 2 | iterated-sha3-256 | iterated-hash | O(n) | [this document] |
| 3-15 | Unassigned | iterated-hash | - | [this document] |
| 16 | pietrzak-rsa2048 | succinct | O(log n) | [this document] |
| 17 | wesolowski-rsa2048 | succinct | O(1) | [this document] |
| 18 | pietrzak-class-group | succinct | O(log n) | [this document] |
| 19 | wesolowski-class-group | succinct | O(1) | [this document] |
| 20-31 | Unassigned | succinct | - | [this document] |
| 32-63 | Unassigned | experimental | - | [this document] |
The iterated hash algorithms use the iterated-hash-params CDDL structure (keys 1-2). The succinct algorithms use the succinct-vdf-params CDDL structure (keys 10-11). See Section 4 for detailed specifications.¶
This document requests creation of the "Proof of Process Entropy Sources" registry. This registry contains identifiers for behavioral entropy sources used in Jitter Seal bindings.¶
The registration procedure for this registry is Specification Required.¶
Registrations MUST include a specification describing:¶
Registrations MUST include the following fields:¶
| Value | Name | Description | Privacy Impact | Reference |
|---|---|---|---|---|
| 1 | keystroke-timing | Inter-key intervals from keyboard input | moderate | [this document] |
| 2 | pause-patterns | Gaps between editing bursts (>2 seconds) | low | [this document] |
| 3 | edit-cadence | Rhythm of insertions/deletions over time | low | [this document] |
| 4 | cursor-movement | Navigation timing within document | low | [this document] |
| 5 | scroll-behavior | Document scrolling patterns | minimal | [this document] |
| 6 | focus-changes | Application focus gain/loss events | low | [this document] |
This document requests registration of two media types in the "Media Types" registry [IANA.media-types].¶
The designated experts for the registries created by this document should apply the following criteria when evaluating registration requests:¶
For claim types requiring Specification Required:¶
For environmental claims requiring Expert Review:¶
For experimental algorithms requiring Expert Review:¶
For entropy sources requiring Specification Required:¶
The authors would like to thank the members of the IETF RATS working group for their foundational work on remote attestation architectures that this specification builds upon.¶
Special thanks to the reviewers and contributors who provided feedback on early drafts of this specification.¶
This section is to be removed before publishing as an RFC.¶
Initial submission.¶