Skip to content

Status: DRAFT Last Reviewed: 2026-03-03

rust-mule Behavior Contract

Anonymity-Preserving Invariants for KAD over I2P

This document defines non-negotiable behavioral invariants for rust-mule. These rules exist to preserve anonymity, resist fingerprinting, and ensure that all correct nodes are behaviorally interchangeable.

Performance, efficiency, and elegance are always secondary to these invariants.


Core Principle

All correct nodes must be behaviorally indistinguishable on the wire.

Anonymity in KAD-style networks does not come from scale alone. It comes from:

  • homogeneity
  • predictability at the protocol level
  • unpredictability at the timing and ordering level

rust-mule intentionally prioritizes boring behavior.


Threat Model Summary

This contract defends primarily against:

  • passive traffic analysis
  • active fingerprinting
  • timing correlation
  • protocol differentiation
  • low-to-medium Sybil presence

It does not attempt to defeat:

  • global adversaries with full tunnel compromise
  • endpoint compromise
  • hostile runtime environments

Invariant Categories

  1. Timing
  2. Message Ordering
  3. Participation Symmetry
  4. Error & Failure Handling
  5. Rate Limiting
  6. Persistence & Identity
  7. Anti-Optimization Rule

All categories are mandatory.


1. Timing Invariants

Rule

All outbound network messages MUST be delayed by a randomized window.

Requirements

  • No immediate sends
  • No deterministic delays
  • No fast paths for “cheap” messages

Properties

  • Delay = base + jitter
  • Same logic for all message types
  • Distribution MUST be bounded

Rationale

Prevents:

  • RTT fingerprinting
  • CPU / runtime performance leaks
  • “this node is faster” classification

2. Message Ordering Invariants

Rule

Outbound messages MUST NOT preserve logical or processing order.

Requirements

  • Messages are enqueued, shuffled, then sent
  • Applies to:
    • lookup responses
    • publish acknowledgements
    • peer lists
    • maintenance traffic

Rationale

Prevents:

  • implementation fingerprinting
  • language/runtime detection
  • bucket traversal inference

3. Participation Symmetry Invariant

Rule

Nodes MUST appear equally useful and equally lazy.

Requirements

  • Routing participation MUST be symmetric with client activity
  • Nodes SHOULD generate cover lookups unrelated to their own interests
  • Routing traffic MUST NOT be minimized based on “not strictly needed”

Rationale

Prevents:

  • role-based deanonymization
  • “pure router” vs “pure client” classification
  • low-effort traffic analysis

4. Error & Failure Handling Invariants

Rule

Failures MUST degrade slowly and identically.

Requirements

  • No descriptive error messages
  • No early rejection
  • No fast failure paths

Handling Guidelines

  • Unknown message → delay → silent drop
  • Malformed message → delay → generic failure
  • Unreachable peer → indistinguishable from congestion

Rationale

Errors are high-entropy fingerprinting vectors. Uniform failure behavior collapses attacker signal.


5. Rate Limiting Invariants

Rule

All activity MUST be capped by hard upper bounds.

Requirements

  • Fixed maximums for:
    • lookups per time window
    • publishes per time window
    • responses per peer
  • Limits MUST NOT scale with CPU, memory, or uptime

Rationale

Prevents:

  • performance-based fingerprinting
  • Sybil amplification
  • “enthusiastic node” identification

6. Persistence & Identity Invariants (KAD-Specific)

Rule

Nodes MUST appear long-lived and decay slowly.

Requirements

  • Gradual bucket aging
  • Graceful shutdown behavior
  • No abrupt identity disappearance when possible

Rationale

KAD assumes persistence. Sudden churn leaks identity transitions and restart events.


7. Anti-Optimization Rule (Critical)

Rule

No optimization is permitted if it violates any invariant.

Mandatory Review Question

Before introducing any change, ask:

Does this alter timing, ordering, rate, participation symmetry, or failure behavior?

If yes → the change MUST NOT be merged.

Rationale

Most anonymity failures are introduced by “harmless” optimizations.

Inefficiency is not a bug — it is a defense.


Implementation Guidance (Non-Normative)

  • Use centralized delay queues for outbound traffic
  • Prefer uniform schedulers over event-driven immediacy
  • Avoid conditional behavior based on local state when observable
  • Treat protocol boredom as a feature

Testing Expectations

rust-mule SHOULD include tests or harnesses that:

  • detect timing variance drift
  • detect ordering stability
  • flag behavior dependent on load or hardware

Behavioral regressions are security regressions.


Final Statement

rust-mule does not attempt to be the fastest, smartest, or most efficient node.

It attempts to be:

indistinguishable, persistent, and aggressively average

This is the foundation of practical anonymity in KAD-style networks.


End of document.