πŸ” AnnaDrop

Privacy-Eerst, End-to-End Versleutelde Bestandsdeling

ZERO-KNOWLEDGE ARCHITECTUUR | GEEN GEBRUIKERSTRACKING | MAXIMALE PRIVACY

πŸ”’ End-to-End Versleuteling πŸ” AES-256-GCM 🚫 Zero Serverkennis 🎭 Standaard Anoniem πŸ”‘ Wachtwoord Delen ⚑ Perfect Forward Secrecy

πŸ›‘οΈ Kernprivacygaranties

AnnaDrop is ontworpen met privacy als fundament, niet als bijgedachte. Elke architectuurbeslissing geeft prioriteit aan gebruikersprivacy en gegevensbeveiliging.

πŸ” Server Ziet Nooit Platte Tekst

Bestanden worden in je browser versleuteld VÓÓR upload. De server handelt alleen versleutelde gegevens. Je versleutelingssleutels verlaten nooit je apparaat.

πŸ”‘ Sleutels Blijven in Browser

Versleutelingssleutels worden client-side gegenereerd en opgeslagen in URL-fragmenten. URL-fragmenten worden NOOIT naar de server verzonden (browser beveiligingsfunctie).

🚫 Geen Gebruikersauthenticatie Vereist

Deel bestanden zonder een account aan te maken, e-mail te geven, of persoonlijke informatie te verstrekken. Echt anoniem bestanden delen.

🎭 Geen Gebruikerstracking

Geen tracking cookies, geen Google Analytics, geen third-party scripts. Downloadstatistieken gebruiken gehashte IPs (HMAC) die gebruikers niet kunnen identificeren.

πŸ—‘οΈ Automatische Gegevensverwijdering

Bestanden worden automatisch verwijderd na vervaldatum of downloadlimiet. Geen onbeperkte opslag. Recht om vergeten te worden is automatisch.

βœ… AVG Conform by Design

Dataminimalisatie, doelbinding, en privacy-by-default ingebouwd in elke functie. Geen toestemming nodig omdat we je niet tracken.

πŸ”’ End-to-End Versleutelingsstroom

1

Sleutelgeneratie (Client-Side)

Browser genereert 256-bit willekeurige sleutel met crypto.getRandomValues(). Voor wachtwoordbeveiligde links wordt sleutel afgeleid van wachtwoord met PBKDF2 (100.000 iteraties).

2

Bestandsversleuteling (Client-Side)

Bestand wordt in browser versleuteld met AES-256-GCM. Bestandsnaam en metadata ook versleuteld. Web Worker gebruikt voor non-blocking versleuteling van grote bestanden.

3

Versleutelde Upload

Alleen versleutelde gegevens worden naar server verzonden. Server ontvangt versleutelde blob, slaat op in MinIO met extra server-side versleuteling (SSE-C). Dubbele versleutelingslaag.

4

Linkgeneratie

Publieke Links: Sleutel ingebed in URL-fragment (#key=...). Fragment wordt nooit naar server verzonden.
PrivΓ© Links: Wachtwoord vereist. Sleutel afgeleid bij download van gebruikerswachtwoord.

5

Versleutelde Download

Ontvanger ontvangt versleuteld bestand van server. Geen ontsleuteling gebeurt op server. Bestandsintegriteit geverifieerd met SHA-256 checksums.

6

Client-Side Ontsleuteling

Browser ontsleutelt bestand met sleutel uit URL-fragment of wachtwoord-afgeleide sleutel. Ontsleuteling in Web Worker. Platte tekst direct opgeslagen op schijf gebruiker.

7

Automatische Opschoning

Na vervaldatum of downloadlimiet wordt versleuteld bestand veilig verwijderd van server. Database records gezuiverd. Geen spoor blijft achter.

πŸ”‘ Veilig Wachtwoord Delen

AnnaDrop ondersteunt nu veilig wachtwoord delen met dezelfde zero-knowledge architectuur als bestandsdeling.

πŸ” Dezelfde E2E Versleuteling

Wachtwoorden worden client-side versleuteld met AES-256-GCM vΓ³Γ³r upload. De server ziet nooit je platte wachtwoorden.

πŸ”₯ Verbranden Na Lezen

Stel wachtwoorden in om zichzelf te vernietigen na één weergave. Perfect voor eenmalig delen van inloggegevens.

⏰ Tijdgelimiteerde Links

Kies vervaltijd van 5 minuten tot 7 dagen. Kortere duur = hogere beveiliging voor gevoelige inloggegevens.

πŸ“ Optionele Notities

Voeg context toe zoals "WiFi wachtwoord" of login instructies. Alles wordt samen versleuteld.

Wachtwoord Delen Stroom

1

Wachtwoord Invoeren

Typ het wachtwoord dat je wilt delen. Optioneel: voeg label en notities toe.

2

Client-Side Versleuteling

Wachtwoord, label, en notities worden samen versleuteld met AES-256-GCM in je browser.

3

Link Delen

Krijg een unieke link met de versleutelingssleutel in het URL-fragment. Verstuur via elk kanaal.

4

EΓ©n-Klik Onthullen

Ontvanger klikt "Onthullen" om te ontsleutelen en te bekijken. Wachtwoord wordt dan automatisch vernietigd (indien ingesteld op 1 weergave).

πŸ—οΈ Zero-Knowledge Architectuur

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    GEBRUIKER BROWSER (Vertrouwd)                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  πŸ” Versleuteling gebeurt hier (AES-256-GCM)               β”‚ β”‚
β”‚  β”‚  πŸ”‘ Sleutels gegenereerd hier (verlaten nooit browser)     β”‚ β”‚
β”‚  β”‚  🧹 Geheugenopschoning na versleuteling                    β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                              β–Ό                                   β”‚
β”‚                    πŸ“€ Upload Versleutelde Gegevens               β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚ HTTPS (TLS 1.3)
                                    β”‚ ⚠️ Server ziet NOOIT platte tekst
                                    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    SERVER (Onvertrouwd - Zero Knowledge)         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  ❌ Kan bestanden niet ontsleutelen (geen sleutels)        β”‚ β”‚
β”‚  β”‚  βœ… Slaat alleen versleutelde blobs op                     β”‚ β”‚
β”‚  β”‚  βœ… Beheert metadata (versleutelde bestandsnamen)          β”‚ β”‚
β”‚  β”‚  βœ… Handhaaft toegangscontrole (vervaldatum, limieten)     β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                              β”‚                                   β”‚
β”‚                              β–Ό                                   β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  MinIO Versleutelde Opslag (SSE-C)                         β”‚ β”‚
β”‚  β”‚  πŸ” Dubbele versleuteling: Client + Server lagen           β”‚ β”‚
β”‚  β”‚  πŸ—‘οΈ Auto-verwijderen bij vervaldatum                       β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                    β”‚
                                    β”‚ HTTPS (TLS 1.3)
                                    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                 ONTVANGER BROWSER (Vertrouwd)                    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  πŸ“₯ Download versleutelde gegevens                         β”‚ β”‚
β”‚  β”‚  πŸ”“ Ontsleuteling gebeurt hier (AES-256-GCM)               β”‚ β”‚
β”‚  β”‚  πŸ”‘ Sleutel uit URL-fragment of wachtwoord afleiding       β”‚ β”‚
β”‚  β”‚  βœ… Verifieer integriteit (SHA-256)                        β”‚ β”‚
β”‚  β”‚  πŸ’Ύ Sla platte tekst op schijf op                          β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

KERNPUNT: Server bevindt zich in de "onvertrouwde" zone. Het kan bestanden
niet ontsleutelen zelfs als gecompromitteerd. Alle cryptografische operaties
gebeuren in de browser van de gebruiker.
                

🎯 Privacyprincipes

πŸ”

End-to-End Versleuteling

Versleuteling begint en eindigt in browser van gebruiker. Geen tussenliggende platte tekst.

🚫

Zero Knowledge

Server heeft nul kennis van bestandsinhoud, zelfs als gecompromitteerd.

🎭

Standaard Anoniem

Geen accounts, geen authenticatie, geen persoonlijke gegevensverzameling.

πŸ“Š

Dataminimalisatie

Verzamel alleen wat absoluut noodzakelijk is. Geen overmatige gegevensretentie.

πŸ—‘οΈ

Recht om Vergeten te Worden

Automatische verwijdering na vervaldatum. Handmatige verwijdering altijd beschikbaar.

πŸ”’

Privacy by Design

Privacy ingebouwd in architectuur, niet toegevoegd als bijgedachte.

βš”οΈ Dreigingsmodel & Mitigaties

🎯 Dreiging: Server Compromis

Aanvaller krijgt volledige toegang tot serverinfrastructuur.

βœ… Mitigatie

E2E versleuteling betekent dat aanvaller alleen versleutelde blobs krijgt. Bestanden onleesbaar zonder client-side sleutels.

🎯 Dreiging: Netwerk Afluisteren (MitM)

Aanvaller onderschept netwerkverkeer.

βœ… Mitigatie

TLS 1.3 voor al het verkeer. Gegevens al versleuteld vΓ³Γ³r verzending. Sleutels in URL-fragmenten niet naar server verzonden.

🎯 Dreiging: Gebruikerstracking

Aanvaller wil gebruikers identificeren of gedrag tracken.

βœ… Mitigatie

Geen authenticatie vereist. IPs gehasht met HMAC. Geen tracking cookies. Geen third-party scripts.

🎯 Dreiging: XSS Aanval

Aanvaller injecteert kwaadaardige JavaScript.

βœ… Mitigatie

Strikte CSP policy. Geen inline scripts. Input sanitization. Sleutels nooit in localStorage (alleen in geheugen/URL-fragment).

🎯 Dreiging: Wachtwoord Brute Force

Aanvaller probeert wachtwoord te raden voor privΓ© links.

βœ… Mitigatie

PBKDF2 (100k iteraties) maakt elke poging duur. Rate limiting (5 pogingen/min). Blokkering na 10 mislukkingen.

🎯 Dreiging: Gegevensretentie

Bestanden onbeperkt opgeslagen creΓ«ert privacyrisico.

βœ… Mitigatie

Automatische verwijdering na vervaldatum/downloadlimiet. Cron jobs draaien elke 15 minuten. Handmatige verwijdering beschikbaar.

πŸ”¬ Cryptografische Specificaties

Bestandsversleutelingsalgoritme

Algoritme: AES-256-GCM (Galois/Counter Mode)
Sleutelgrootte: 256 bits (32 bytes)
IV (Nonce): 96 bits (12 bytes), willekeurig per bestand
Authenticatie Tag: 128 bits (16 bytes)
Waarom AES-GCM: Biedt zowel vertrouwelijkheid (versleuteling) als integriteit (authenticatie)

Sleutelgeneratie (Publieke Links)

Bron: crypto.getRandomValues() - cryptografisch veilig willekeurig
Entropie: 256 bits (32 bytes)
Opslag: URL-fragment (bijv., #key=base64encodedkey)
Beveiliging: URL-fragmenten nooit naar server verzonden (browsergedrag)

Wachtwoord-Gebaseerde Sleutelafleiding (PrivΓ© Links)

Algoritme: PBKDF2-SHA256
Iteraties: 100.000 (OWASP aanbeveling)
Salt: 128 bits, willekeurig per bestand
Output: 256-bit versleutelingssleutel
Waarom PBKDF2: Maakt brute-force aanvallen computationeel duur

Wachtwoordverificatie

Algoritme: bcrypt (server-side)
Cost Factor: 12 rondes
Opslag: Alleen bcrypt hash opgeslagen (NIET de afgeleide sleutel)
Beveiliging: Server verifieert wachtwoord maar kan bestand niet ontsleutelen

Integriteitsverificatie

Algoritme: SHA-256
Scope: Per-chunk en volledig-bestand checksums
Authenticatie: AES-GCM tag biedt extra integriteit
Detectie: Elke manipulatie gedetecteerd vΓ³Γ³r ontsleuteling

Transportbeveiliging

Protocol: TLS 1.3 (minimum)
Certificaat: Let's Encrypt (auto-vernieuwd)
Cipher Suites: Alleen moderne ciphers (AEAD)
HSTS: Strict-Transport-Security header ingeschakeld

πŸ“Š Beveiligingsmetrieken & Doelen

256-bit
AES Versleutelingssleutel Grootte
100.000
PBKDF2 Iteraties
A+
SSL Labs Rating Doel
Zero
Kritieke Kwetsbaarheden
95%+
Crypto Code Coverage
0 PII
Persoonlijke Gegevens Verzameld

βœ… Compliance & Standaarden

AVG Conform
OWASP Top 10
CIS Benchmark

AVG Artikel 25: Privacy by Design

Versleuteling en dataminimalisatie ingebouwd in kernarchitectuur vanaf dag één.

AVG Artikel 17: Recht op Verwijdering

Automatische verwijdering na vervaldatum. Handmatige verwijdering direct beschikbaar.

AVG Artikel 32: Beveiliging van Verwerking

State-of-the-art versleuteling (AES-256-GCM). Regelmatige security audits en penetratietesten.

OWASP Top 10 Bescherming

Input validatie, rate limiting, CSP headers, veilig sessiebeheer, versleutelde opslag.

CIS Docker Benchmark

Container hardening: non-root gebruikers, read-only filesystems, minimale images, security scanning.

SOC 2 Gereed

Uitgebreide logging, toegangscontroles, versleuteling at rest en in transit, audit trails.

πŸ“š Vergelijking: AnnaDrop vs Traditionele Bestandsdeling

Functie AnnaDrop Dropbox/Drive/OneDrive WeTransfer
End-to-End Versleuteling βœ“ Ja βœ— Nee βœ— Nee
Zero-Knowledge Architectuur βœ“ Ja βœ— Nee βœ— Nee
Geen Account Vereist βœ“ Ja βœ— Vereist βœ“ Ja
Geen Gebruikerstracking βœ“ Ja βœ— Zware tracking βœ— Trackt gebruikers
Server Kan Bestanden Lezen βœ“ Nee βœ— Ja βœ— Ja
Automatische Verwijdering βœ“ Ja βœ— Handmatig βœ“ Na 7 dagen
Wachtwoordbeveiliging βœ“ Ja (versleuteld) βœ“ Ja (niet E2E) βœ“ Ja (niet E2E)
Self-Hosted Optie βœ“ Ja (Docker) βœ— Nee βœ— Nee
Open Source βœ“ Ja βœ— Nee βœ— Nee
AVG Conform βœ“ By Design βœ“ Geclaimd βœ“ Geclaimd