Grove uses a peer-to-peer trust model โ you explicitly choose who to connect with. There is no central authority.
| What | Algorithm | Key Size |
|---|---|---|
| File chunks | ChaCha20-Poly1305 | 256-bit |
| Key derivation | HKDF-SHA256 | โ |
| Chunk hashing | SHA-256 | โ |
| Cell identity | Ed25519 | 256-bit |
| Chat key exchange | X25519 | 256-bit |
| Chat messages | ChaCha20-Poly1305 | 256-bit |
| Password hashing | PBKDF2-SHA256 | 100k iterations |
| Peer secret comparison | HMAC (timing-safe) | โ |
~/.grove/dashboard_auth as base64_salt:hex_hashHttpOnly, SameSite=Lax, 30-day expiryX-Grove-Secret header on all peer API callshmac.compare_digest (prevents timing attacks)peer_secret on first run| Data | Visible to Peers? |
|---|---|
| Your file contents | โ No (encrypted chunks) |
| Your file names | โ No (manifests only shared with friends via grants) |
| Your chunk hashes | โ Yes (needed for deduplication) |
| Your cell's pubkey | โ Yes (identity) |
| Your cell's name | โ Yes (you choose what to share) |
| Your IP address | โ Yes (needed to connect) |
| How much storage you use | โ Yes (chunk count visible) |
| Chat messages | โ No (end-to-end encrypted) |
| Data | Visible? |
|---|---|
| Message contents | โ No (E2E encrypted) |
| Who's connected | โ Yes (pubkeys + IPs) |
| Message size/timing | โ Yes (metadata) |
| Which cells communicate | โ Yes (routing info) |
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
If you lose .key, your encrypted files are unrecoverable. Back up keys regularly.
disable_auto_update: true)