nova

Specifications


P2-M5 amendment — failure-domain & repair-forgery defenses now code-enforced

Sybil / failure-domain concentration. Placement anti-affinity and the concentration metrics (per-node Gini, per-dimension largest-share / normalized entropy) trust a dimension value only when nodes.operator_verified_at is set; NULL/unverified values collapse into a single unknown bucket before grouping, so a donor cannot manufacture diversity by self-declaring failure_domain/provider/ asn/region. Probationary/unverified donors cannot be the sole or second copy of important data (T1.30). federation.concentrated / .homogeneous surface skew to the operator (placement is never refused purely for homogeneity).

Repair-grant forgery / replay / misrouting. A donor↔donor repair grant is an Ed25519 token bound to (source_node_id, dest_node_id, cid, source assignment generation, max_bytes, jti, not_before/after). The source server verifies the signature against the coordinator's current public key, that it is the named source, that the caller's verified cert is the named dest (a grant minted for donor B cannot be replayed by donor C), boot-floor + single-use jti, and streams exactly byte_size. The destination additionally refuses a grant whose dest_* binding does not match the change it is processing before fetching — no ack/fail ambiguity. A short/corrupt source body fails the destination's re-import CID verify ⇒ no ack.

Source: docs/specs/THREAT_MODEL.md