Sharenet_Docs/security_accounts_sharing_encryption_plain_english.md
2025-08-20 20:37:03 -04:00

157 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Plain-English Overview: Security, Accounts, Sharing, and Encryption
This document explains—in simple language—how the system keeps data safe, how accounts work without email, how sharing is controlled, and how encryption is used.
---
## 1) Big picture
- Every **person** and every **node** (a server that hosts data) has its own **Passport**.
- A Passport is just a set of cryptographic keys that prove who you are, plus a written **paper backup** that lets you recover if you lose your device.
- **Data items** live in **categories** (each category has its own fields).
- Each item is **always encrypted at rest**, and **signed** so others can check it hasnt been tampered with.
- Sharing is controlled by **rules** (who can view/edit), and by **keys** (who can decrypt).
- Nodes can connect to other nodes and **federate** (share items between them) while still enforcing the same rules.
---
## 2) Accounts without email (Passports)
- You dont sign up with an email address. You create a **Passport** on your device.
- The Passport gives you a **public ID** and a **private key**.
- The public ID is safe to share; its how others recognize you.
- The private key stays on your device; it lets you sign and decrypt.
- On day one you receive a **24word recovery phrase** (your “paper backup”).
- If you lose your device, you can recreate your Passport using those 24 words.
- Keep them offline and secret (write them down).
**Logging in**
- When you “log in” to a node, you simply **prove you control your Passport** by signing a small challenge. No email codes are involved.
---
## 3) What a node is responsible for
- Storing encrypted items and their metadata.
- Checking **who is allowed** to access a specific item **right now**.
- Handing out **shortlived decryption keys** to allowed users.
- Keeping **audit logs** of who asked for access.
- Talking to other nodes securely (mutual TLS or onion) for federation.
---
## 4) Data items and visibility
Each item has a **visibility** setting and **sharing rules**:
- **Public / Discoverable**: Anyone can **find** it and request a shortlived key.
- **Node / Group / Direct**: Only the people or nodes you name can get a key.
- You can **change visibility at any time** (e.g., make a public item private later).
> Important: If someone already saved a copy of the plaintext while it was public, you cant make them “unsee” it. The system prevents **future** viewers from getting new keys.
---
## 5) Signatures (authenticity)
- When you create or update an item, your device **signs** it with your Passport.
- Anyone who sees the item can check the signature and know **who wrote it** and that it **wasnt altered**.
---
## 6) Encryption (confidentiality)
- Every item is **encrypted at rest** on the node. The node stores only **ciphertext** (unreadable without a key).
- Encryption uses a fresh **dataencryption key (DEK)** per **item version**.
- For large items, the content is split into **chunks** with their own small keys and a tiny **key list** so that privacy updates dont require reencrypting the whole file.
**Key grants (how someone actually decrypts):**
1. You ask to read an item.
2. The node checks the **sharing rules** (are you allowed?).
3. If allowed, the node gives you a **shortlived “key grant”**—a small sealed packet that contains the decryption key for this item/version.
4. Your app uses that key to decrypt the ciphertext it downloads.
- Key grants **expire quickly** (minutes). If your access is revoked, new grants are refused.
---
## 7) Making a public item private (revocation in practice)
- Flip the item to **private**.
- The node **rotates the key** (generates a new DEK) and bumps the **version**.
- From that point on, only authorized people can get a new key grant.
- Search indexes and other nodes remove the item from **public listings**.
> Anyone who already saw the plaintext keeps their old copy. Everyone else will be blocked going forward because they wont receive a valid key for the new version.
---
## 8) Sharing and access control (who can do what)
- Sharing rules are recorded as small **relations** like: “`item 123` has `viewer` = `Alice`”, or “any **member of Node X** can view **Category Y**”.
- The node answers questions like “Can Bob view item 123?” by walking those relations.
- Rules can include **conditions** like “only after this date” or “only if its marked discoverable”.
**Two layers work together:**
- **Rules** decide **who is allowed**.
- **Keys** make sure **only allowed people** can decrypt.
---
## 9) Federation between nodes
- Items can be shared across nodes.
- Private items are shared as **ciphertext + a pointer** to the **authority node** that decides access.
- A receiving node (or user) can always find **where to ask** for permission and a key grant.
- Nodes **cache** answers for a short time but dont need to store everyones rules forever.
---
## 10) Transport security
- Nodes talk to each other over **mutual TLS** (both sides prove who they are) or via **onion addresses**.
- This protects against snooping and imposters on the network.
---
## 11) What happens on write vs. read
**When you create or edit an item:**
1. Your app validates the item against the categorys schema.
2. It **signs** the item with your Passport.
3. The node encrypts the content, stores it, updates the sharing rules, and (if public) adds it to search.
**When someone reads an item:**
1. Node checks the sharing rules.
2. If allowed, it issues a **shortlived key grant**.
3. The client downloads the ciphertext and **decrypts locally**.
---
## 12) Recovery if you lose your device
- Use your **24word paper backup** to regenerate your Passport.
- Tell the node to **rotate your device key**. Old devices are revoked; your identity remains the same.
---
## 13) Limits (being honest)
- The system cannot delete copies that someone already saved while they had access.
- “Public” should be treated as **irreversible** for people who already saw it.
- Revocation stops **future** firsttime viewers, not past ones.
---
## 14) Why this works on a tiny $5/mo server
- Crypto operations are **fast and lightweight**.
- Key grants are **tiny** and **shortlived**.
- Most cost is disk and network I/O, which youd have anyway.
- Everything runs as a **single Rust service** with an embedded database and search index.
---
### Onesentence summary
> **Sign everything, encrypt everything, decide access at read time, hand out tiny shortlived keys only to people who are allowed, and make “public” just a policy that you can change later.**