โ† Dashboard ยท Docs ยทSecurity

Grove Security Model

Build e6c937427256 ยท Updated 2026-06-07

Grove uses a peer-to-peer trust model โ€” you explicitly choose who to connect with. There is no central authority.


Encryption Summary

What Algorithm Key size
File chunks ChaCha20-Poly1305 256-bit
Manifest metadata (filename, path) ChaCha20-Poly1305 256-bit (per-recipient envelope)
Grant key wrapping X25519 + HKDF-SHA256 256-bit
Chunk/content addressing BLAKE2b 256-bit
Cell identity Ed25519 256-bit
Chat key exchange X25519 256-bit
Chat messages (peer + portal) ChaCha20-Poly1305 256-bit
Password hashing PBKDF2-SHA256 100k iterations, random salt
Peer secret comparison HMAC-SHA256 (timing-safe) โ€”

Authentication

Dashboard

Peer-to-Peer

Relay


Manifest Metadata Protection (ยง7 โ€” SEALED)

Prior to build d487e1d (2026-05-20), manifest metadata โ€” filename, source path, version note, delete state โ€” was stored in plaintext on every peer that held even one chunk for replication. Any replication-only peer could enumerate a user's entire library. This was a real leak against Grove's stated privacy goals.

The fix is documented in full at MANIFEST-METADATA-LEAK.md (canonical). Summary:


Trust Model and Identity Tiers

Identity in Grove is a keypair (Ed25519 for signing, X25519 for encryption). Three tiers:

Tier Who What they can do
Peer Any connected cell Replicate encrypted chunks; no file/metadata access
Friend Mutual explicit trust Chat + file sharing (grants); metadata visible only for explicitly granted files
Observer Portal account Sees only files the cell owner has explicitly shared to that account

What Peers Can See

Data Visible to replication-only peers?
File contents No โ€” encrypted chunks, key never shared
File names No โ€” v1 manifest metadata is encrypted; opaque on-disk names
Source paths No โ€” encrypted in v1 manifest metadata
Chunk hashes Yes โ€” needed for deduplication/replication
Your cell's pubkey Yes โ€” identity
Your cell's name Yes โ€” you choose what to advertise
Your IP address Yes โ€” needed to connect
Storage usage (chunk count) Yes โ€” chunk count visible
Chat messages No โ€” end-to-end encrypted

Friends with grants can decrypt filename/path for the specific files they were granted access to. They cannot enumerate your full library.


What Relay Operators Can See

Data Visible?
Message contents No โ€” E2E encrypted
Who's connected Yes โ€” pubkeys + IPs
Message size / timing Yes โ€” traffic metadata
Which cells communicate Yes โ€” routing info

Portal and WAN Security

The portal is an owner-gated window into a cell, accessible over the public WAN.


AI Safety Posture

Grove's AI features (chat inference, image generation, peer AI proxying) include several security layers:


Defense-in-Depth: Signed Deletion

Chunks belonging to a peer are only deleted from your node by one path: a signed tombstone that propagates via the regular manifest-sync loop. process_tombstones() verifies the Ed25519 signature against the leaving peer's pubkey before purging anything.

The live /api/peer-leaving notification is treated as a hint only โ€” it removes the peer from config and health, but never deletes data, even when authenticated. Reason: shared peer secrets can leak; Ed25519 signatures cannot be forged. An attacker who obtained a peer's secret could remove the peer from your peer list, but cannot trigger a data purge.


Key Files and Permissions

All private key files should be chmod 600 (owner read/write only):


~/.grove/node.key            # Ed25519 private key โ€” NEVER share
~/.grove/node_x25519.key     # X25519 private key โ€” NEVER share
~/.grove/.key                # Master encryption key โ€” NEVER share
~/.grove/peer_secret         # API auth secret โ€” NEVER share
~/.grove/dashboard_auth      # Password hash โ€” keep private
~/.grove/portal_chat.key     # Portal chat at-rest key โ€” keep private

If you lose .key, your encrypted chunks are unrecoverable. Back up keys regularly.


Invariants

Grove has 14+ locked behavioral invariants covering replication counting, trust boundaries, grant gating, routing, and chunk management. They are the authoritative source of truth for expected security behavior:

This document does not duplicate them. When a code path appears to violate an invariant, consult those files first.


Threat Model

Protected against

NOT protected against

Mitigations