RFC 9102: Verified Event Sequence Trust (VEST) Protocol
1. INTRODUCTION
1.1 Purpose
The Verified Event Sequence Trust (VEST) Protocol is a cryptographic audit layer that provides:- Non-repudiation: Digital signatures ensure authors cannot deny their operations
- Tamper-evidence: Merkle proofs detect any modification to the audit trail
- Verifiability: Anyone can independently verify document history integrity
- Compliance: Cryptographic evidence admissible in legal proceedings
1.2 Scope
This RFC specifies:- Cryptographic Primitives: Ed25519, Blake3, Roughtime
- Signature Data Types: SignatureProof, AuditSignature, SignatureChain
- Merkle Proof System: RFC 6962 consistency proofs
- Audit Trail Semantics: Immutable append-only log
- Verification Algorithms: Signature validation, proof verification, chain integrity
- Non-repudiation Guarantees: Binding operation author to action
- Compliance Mappings: SOC 2, HIPAA, GDPR audit requirements
1.3 Terminology
| Term | Definition |
|---|---|
| Signature | Ed25519 digital signature proving operation author |
| AuditEntry | (OperationID, OperationData, Signature, Timestamp) |
| MerkleProof | RFC 6962 proof proving inclusion in timeline tree |
| SignatureChain | Linked proof: Op1→Op2→Op3, where each signs previous hash |
| Non-repudiation | Author cannot deny creating operation (signature binding) |
| Tamper-evidence | Merkle tree root changes if any operation modified |
2. PROTOCOL MODEL
2.1 Signature Architecture
2.2 Signature Chain Linking
Each operation in a timeline signs the hash of the previous operation:2.3 Merkle Tree Structure (RFC 6962)
Operations form a balanced Merkle tree:- Deterministic: Same operations always produce same root
- Tamper-detecting: Changing any operation changes root
- Efficient proofs: O(log N) proof size
3. DATA TYPES
3.1 SignatureProof
- signature is 64 bytes (Ed25519 fixed size)
- public_key is 32 bytes (Ed25519 fixed size)
- timestamp must be within ±1 minute of current time (replay protection)
3.2 AuditSignature
- depth=1: Genesis operation (no previous)
- depth>1: Linked operation (previous_hash must match parent’s hash)
- Verify chain: For each Op[i], verify signature_chain[i].previous_hash == Blake3(signature_chain[i-1])
3.3 TimelineProof
3.4 MerkleProof (RFC 6962)
4. SIGNATURE ALGORITHM
4.1 Create Signature
Input: operation (Operation), private_key ([u8; 32])Output: AuditSignature
- Same operation + private_key + previous_hash → same signature
- Ed25519 is deterministic (RFC 8032)
4.2 Verify Signature
Input: operation (Operation), audit_sig (AuditSignature)Output: bool (valid or invalid)
- Existential unforgeability: Cannot forge Ed25519 signature
- Non-repudiation: Signer cannot deny creating operation
- Authenticity: Signature links operation to specific peer
5. AUDIT TRAIL & IMMUTABLE LOG
5.1 AuditEntry
- entry_index values are sequential (0, 1, 2, …)
- Once written, cannot be modified (immutable)
- Signature must be valid (verified at append time)
5.2 AuditLog (Abstract Storage)
6. MERKLE TREE PROOFS (RFC 6962)
6.1 Building Merkle Tree
6.2 Consistency Proof (RFC 6962)
Proof that tree T2 extends tree T1 without modification:7. VERIFICATION OPERATIONS
7.1 Verify Single Operation
7.2 Verify Complete Timeline
7.3 Verify Merkle Inclusion Proof
8. SECURITY PROPERTIES
8.1 Non-repudiation Guarantee
Claim: Author cannot deny creating operation. Proof:- Ed25519 is unforgeable: Only possessor of private_key can create signature
- Signature binds operation bytes + timestamp to peer_id
- Public key verifiably derives from private key
- Therefore: Signature proves author created operation
- Out of scope: Key compromise, system breach
- In scope: Author claims they didn’t create operation (refuted by signature)
8.2 Tamper-evidence Guarantee
Claim: Any modification to audit trail breaks Merkle tree root. Proof:- Merkle tree: Each leaf hash depends on operation bytes
- Modifying any operation → changes leaf hash → changes all ancestors → changes root
- Root is publicly known (distributed to peers)
- Any tampering detected by mismatch to expected root
8.3 Signature Chain Integrity
Claim: Breaking signature in chain breaks all descendants. Proof:- Each signature signs: operation_bytes || previous_signature_hash
- Modifying Op[i] or Sig[i] → changes Blake3(Sig[i]) → breaks Sig[i+1]
- Detecting the break requires validating the chain
9. CONFORMANCE REQUIREMENTS
Implementations MUST:- ✅ Use Ed25519 for all signatures (RFC 8032)
- ✅ Verify signatures before appending to audit log
- ✅ Maintain signature chain linking (each signs previous)
- ✅ Support Merkle proofs (RFC 6962 format)
- ✅ Enforce append-only log (no modification/deletion)
- ✅ Provide root hash (publicly available)
- ✅ Reject operations with invalid signatures
- ✅ Maintain timestamp freshness (±1 minute)
- Use different Merkle tree building strategies (balanced, skewed)
- Provide additional metadata (who verified, when)
- Implement signature caching for performance
- Support batch signature verification
10. EXAMPLES
10.1 Signing an Operation
10.2 Verifying Signature Chain
11. INTEROPERABILITY
11.1 Compliance Mappings
| Standard | VEST Implementation |
|---|---|
| HIPAA | Audit trail with signatures satisfies access logging |
| GDPR | Non-repudiation + timestamps enable “accountability” |
| SOC 2 | Merkle proofs provide immutability + integrity |
| PCI-DSS | Digital signatures satisfy cardholder data protection |
11.2 Multi-language Binding
All implementations must support:- ✅ Ed25519 signature generation/verification (RFC 8032)
- ✅ Blake3 hashing (deterministic)
- ✅ Roughtime timestamp verification (NTP consensus)
- ✅ Merkle proof validation (RFC 6962)
- ✅ Deterministic CBOR serialization
12. REFERENCES
- [RFC 8032] Edwards-Curve Digital Signature Algorithm (EdDSA)
- [RFC 6962] Certificate Transparency
- [RFC 7049] CBOR (Concise Binary Object Representation)
- [Blake3] BLAKE3 cryptographic hash function
END OF RFC 9102